162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * SCSI Transport Netlink Interface 462306a36Sopenharmony_ci * Used for the posting of outbound SCSI transport events 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2006 James Smart, Emulex Corporation 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci#ifndef SCSI_NETLINK_H 962306a36Sopenharmony_ci#define SCSI_NETLINK_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/netlink.h> 1262306a36Sopenharmony_ci#include <linux/types.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* 1562306a36Sopenharmony_ci * This file intended to be included by both kernel and user space 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* Single Netlink Message type to send all SCSI Transport messages */ 1962306a36Sopenharmony_ci#define SCSI_TRANSPORT_MSG NLMSG_MIN_TYPE + 1 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* SCSI Transport Broadcast Groups */ 2262306a36Sopenharmony_ci /* leaving groups 0 and 1 unassigned */ 2362306a36Sopenharmony_ci#define SCSI_NL_GRP_FC_EVENTS (1<<2) /* Group 2 */ 2462306a36Sopenharmony_ci#define SCSI_NL_GRP_CNT 3 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* SCSI_TRANSPORT_MSG event message header */ 2862306a36Sopenharmony_cistruct scsi_nl_hdr { 2962306a36Sopenharmony_ci __u8 version; 3062306a36Sopenharmony_ci __u8 transport; 3162306a36Sopenharmony_ci __u16 magic; 3262306a36Sopenharmony_ci __u16 msgtype; 3362306a36Sopenharmony_ci __u16 msglen; 3462306a36Sopenharmony_ci} __attribute__((aligned(sizeof(__u64)))); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* scsi_nl_hdr->version value */ 3762306a36Sopenharmony_ci#define SCSI_NL_VERSION 1 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* scsi_nl_hdr->magic value */ 4062306a36Sopenharmony_ci#define SCSI_NL_MAGIC 0xA1B2 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/* scsi_nl_hdr->transport value */ 4362306a36Sopenharmony_ci#define SCSI_NL_TRANSPORT 0 4462306a36Sopenharmony_ci#define SCSI_NL_TRANSPORT_FC 1 4562306a36Sopenharmony_ci#define SCSI_NL_MAX_TRANSPORTS 2 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* Transport-based scsi_nl_hdr->msgtype values are defined in each transport */ 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* 5062306a36Sopenharmony_ci * GENERIC SCSI scsi_nl_hdr->msgtype Values 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ci /* kernel -> user */ 5362306a36Sopenharmony_ci#define SCSI_NL_SHOST_VENDOR 0x0001 5462306a36Sopenharmony_ci /* user -> kernel */ 5562306a36Sopenharmony_ci/* SCSI_NL_SHOST_VENDOR msgtype is kernel->user and user->kernel */ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* 5962306a36Sopenharmony_ci * Message Structures : 6062306a36Sopenharmony_ci */ 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci/* macro to round up message lengths to 8byte boundary */ 6362306a36Sopenharmony_ci#define SCSI_NL_MSGALIGN(len) (((len) + 7) & ~7) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* 6762306a36Sopenharmony_ci * SCSI HOST Vendor Unique messages : 6862306a36Sopenharmony_ci * SCSI_NL_SHOST_VENDOR 6962306a36Sopenharmony_ci * 7062306a36Sopenharmony_ci * Note: The Vendor Unique message payload will begin directly after 7162306a36Sopenharmony_ci * this structure, with the length of the payload per vmsg_datalen. 7262306a36Sopenharmony_ci * 7362306a36Sopenharmony_ci * Note: When specifying vendor_id, be sure to read the Vendor Type and ID 7462306a36Sopenharmony_ci * formatting requirements specified below 7562306a36Sopenharmony_ci */ 7662306a36Sopenharmony_cistruct scsi_nl_host_vendor_msg { 7762306a36Sopenharmony_ci struct scsi_nl_hdr snlh; /* must be 1st element ! */ 7862306a36Sopenharmony_ci __u64 vendor_id; 7962306a36Sopenharmony_ci __u16 host_no; 8062306a36Sopenharmony_ci __u16 vmsg_datalen; 8162306a36Sopenharmony_ci} __attribute__((aligned(sizeof(__u64)))); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* 8562306a36Sopenharmony_ci * Vendor ID: 8662306a36Sopenharmony_ci * If transports post vendor-unique events, they must pass a well-known 8762306a36Sopenharmony_ci * 32-bit vendor identifier. This identifier consists of 8 bits indicating 8862306a36Sopenharmony_ci * the "type" of identifier contained, and 24 bits of id data. 8962306a36Sopenharmony_ci * 9062306a36Sopenharmony_ci * Identifiers for each type: 9162306a36Sopenharmony_ci * PCI : ID data is the 16 bit PCI Registered Vendor ID 9262306a36Sopenharmony_ci */ 9362306a36Sopenharmony_ci#define SCSI_NL_VID_TYPE_SHIFT 56 9462306a36Sopenharmony_ci#define SCSI_NL_VID_TYPE_MASK ((__u64)0xFF << SCSI_NL_VID_TYPE_SHIFT) 9562306a36Sopenharmony_ci#define SCSI_NL_VID_TYPE_PCI ((__u64)0x01 << SCSI_NL_VID_TYPE_SHIFT) 9662306a36Sopenharmony_ci#define SCSI_NL_VID_ID_MASK (~ SCSI_NL_VID_TYPE_MASK) 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci#define INIT_SCSI_NL_HDR(hdr, t, mtype, mlen) \ 10062306a36Sopenharmony_ci { \ 10162306a36Sopenharmony_ci (hdr)->version = SCSI_NL_VERSION; \ 10262306a36Sopenharmony_ci (hdr)->transport = t; \ 10362306a36Sopenharmony_ci (hdr)->magic = SCSI_NL_MAGIC; \ 10462306a36Sopenharmony_ci (hdr)->msgtype = mtype; \ 10562306a36Sopenharmony_ci (hdr)->msglen = mlen; \ 10662306a36Sopenharmony_ci } 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#endif /* SCSI_NETLINK_H */ 10962306a36Sopenharmony_ci 110