linux/include/uapi/scsi/scsi_netlink.h
<<
>>
Prefs
   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
 110