cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi_netlink.h (2906B)


      1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
      2/*
      3 *  SCSI Transport Netlink Interface
      4 *    Used for the posting of outbound SCSI transport events
      5 *
      6 *  Copyright (C) 2006   James Smart, Emulex Corporation
      7 */
      8#ifndef SCSI_NETLINK_H
      9#define SCSI_NETLINK_H
     10
     11#include <linux/netlink.h>
     12#include <linux/types.h>
     13
     14/*
     15 * This file intended to be included by both kernel and user space
     16 */
     17
     18/* Single Netlink Message type to send all SCSI Transport messages */
     19#define SCSI_TRANSPORT_MSG		NLMSG_MIN_TYPE + 1
     20
     21/* SCSI Transport Broadcast Groups */
     22	/* leaving groups 0 and 1 unassigned */
     23#define SCSI_NL_GRP_FC_EVENTS		(1<<2)		/* Group 2 */
     24#define SCSI_NL_GRP_CNT			3
     25
     26
     27/* SCSI_TRANSPORT_MSG event message header */
     28struct scsi_nl_hdr {
     29	__u8 version;
     30	__u8 transport;
     31	__u16 magic;
     32	__u16 msgtype;
     33	__u16 msglen;
     34} __attribute__((aligned(sizeof(__u64))));
     35
     36/* scsi_nl_hdr->version value */
     37#define SCSI_NL_VERSION				1
     38
     39/* scsi_nl_hdr->magic value */
     40#define SCSI_NL_MAGIC				0xA1B2
     41
     42/* scsi_nl_hdr->transport value */
     43#define SCSI_NL_TRANSPORT			0
     44#define SCSI_NL_TRANSPORT_FC			1
     45#define SCSI_NL_MAX_TRANSPORTS			2
     46
     47/* Transport-based scsi_nl_hdr->msgtype values are defined in each transport */
     48
     49/*
     50 * GENERIC SCSI scsi_nl_hdr->msgtype Values
     51 */
     52	/* kernel -> user */
     53#define SCSI_NL_SHOST_VENDOR			0x0001
     54	/* user -> kernel */
     55/* SCSI_NL_SHOST_VENDOR msgtype is kernel->user and user->kernel */
     56
     57
     58/*
     59 * Message Structures :
     60 */
     61
     62/* macro to round up message lengths to 8byte boundary */
     63#define SCSI_NL_MSGALIGN(len)		(((len) + 7) & ~7)
     64
     65
     66/*
     67 * SCSI HOST Vendor Unique messages :
     68 *   SCSI_NL_SHOST_VENDOR
     69 *
     70 * Note: The Vendor Unique message payload will begin directly after
     71 * 	 this structure, with the length of the payload per vmsg_datalen.
     72 *
     73 * Note: When specifying vendor_id, be sure to read the Vendor Type and ID
     74 *   formatting requirements specified below
     75 */
     76struct scsi_nl_host_vendor_msg {
     77	struct scsi_nl_hdr snlh;		/* must be 1st element ! */
     78	__u64 vendor_id;
     79	__u16 host_no;
     80	__u16 vmsg_datalen;
     81} __attribute__((aligned(sizeof(__u64))));
     82
     83
     84/*
     85 * Vendor ID:
     86 *   If transports post vendor-unique events, they must pass a well-known
     87 *   32-bit vendor identifier. This identifier consists of 8 bits indicating
     88 *   the "type" of identifier contained, and 24 bits of id data.
     89 *
     90 *   Identifiers for each type:
     91 *    PCI :  ID data is the 16 bit PCI Registered Vendor ID
     92 */
     93#define SCSI_NL_VID_TYPE_SHIFT		56
     94#define SCSI_NL_VID_TYPE_MASK		((__u64)0xFF << SCSI_NL_VID_TYPE_SHIFT)
     95#define SCSI_NL_VID_TYPE_PCI		((__u64)0x01 << SCSI_NL_VID_TYPE_SHIFT)
     96#define SCSI_NL_VID_ID_MASK		(~ SCSI_NL_VID_TYPE_MASK)
     97
     98
     99#define INIT_SCSI_NL_HDR(hdr, t, mtype, mlen)			\
    100	{							\
    101	(hdr)->version = SCSI_NL_VERSION;			\
    102	(hdr)->transport = t;					\
    103	(hdr)->magic = SCSI_NL_MAGIC;				\
    104	(hdr)->msgtype = mtype;					\
    105	(hdr)->msglen = mlen;					\
    106	}
    107
    108#endif /* SCSI_NETLINK_H */
    109