/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos72X src/bos/kernel/sys/devinfo.h 1.26.10.17 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1989,2020 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)47 1.26.10.17 src/bos/kernel/sys/devinfo.h, sysio, bos72X, x2020_52A3 12/4/20 20:21:10 */ /* * COMPONENT_NAME: (SYSIO) System I/O * * FUNCTIONS: IO structure declarations and label definitions. * * ORIGINS: 27 * * (C) COPYRIGHT International Business Machines Corp. 1989, 2013 * All Rights Reserved * Licensed Materials - Property of IBM * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #ifndef _H_DEVINFO #define _H_DEVINFO #ifndef IFNAMSIZ #define IFNAMSIZ 16 #endif #ifndef IFF_UP #define IFF_UP 0x01 #endif #ifndef IFF_RUNNING #define IFF_RUNNING 0x40 #endif #ifndef IFF_PRIMARY #define IFF_PRIMARY 0x80 #endif #ifndef MAXIFS #define MAXIFS 8 #endif #include #include /* * Device information */ struct devinfo { char devtype; char flags; char devsubtype; /* device sub type */ union { struct /* for disks */ { short bytpsec; /* bytes per sector */ short secptrk; /* sectors per track */ short trkpcyl; /* tracks per cylinder */ __long32_t numblks; /* blocks this partition */ uint segment_size; /* seg size for xfer stats */ uint segment_count; /* seg count for xfer stats */ uint byte_count; /* byte count for xfer stats */ } dk; struct /* for SCSI target mode */ { uchar scsi_id; /* SCSI ID of attached initiator */ uchar lun_id; /* LUN of attached initiator */ /* (or 0 for target instance) */ uint buf_size; /* size of receive buffer (bytes) */ uint num_bufs; /* number of receive buffers */ __long32_t max_transfer; /* max request to SCSI DD */ dev32_t adapter_devno; /* device maj/min of SCSI adapter */ } tmscsi; struct /* for SCSI-3 target mode */ { /* SCSI ID of attached initiator */ uint lo_scsi_id; /* Least Significant word */ uint hi_scsi_id; /* Most Significant word */ /* LUN of attached initiator */ /* (or 0 for target instance) */ uint lo_lun_id; /* Least Significant word */ uint hi_lun_id; /* Most Significant word */ uint buf_size; /* size of receive buffer (bytes) */ uint num_bufs; /* number of receive buffers */ __long32_t max_transfer; /* max request to SCSI DD */ dev32_t adapter_devno; /* device maj/min of adapter */ } scsitm; struct /* for SCSI, NVMe or IDE disks */ { short blksize; /* block size (in bytes) */ __long32_t numblks; /* total number of blocks */ __long32_t max_request; /* max request to DD */ uint segment_size; /* seg size for xfer stats */ uint segment_count; /* seg count for xfer stats */ uint byte_count; /* byte count for xfer stats */ } scdk, idedk; struct /* for memory mapped displays */ { char capab; /* capabilities */ char mode; /* current mode */ short hres; /* horizontal resolution */ short vres; /* vertical resolution */ } tt; struct /* for ethernet/IEEE 802.3 interface */ { unsigned int broad_wrap; /* allows broadcast wrap of data */ /* 1 = supported */ /* 0 = not supported */ int rdto; /* Receive Data Transfer offset */ unsigned char haddr[6]; /* burned in hardware address */ unsigned char net_addr[6]; /* Current network address */ } ethernet; struct /* for Token-Ring interfaces */ { unsigned short speed; /* 4/16 Mbps ring speed */ /* 0 = 4 Mbps */ /* 1 = 16 Mbps */ unsigned int broad_wrap; /* supports broadcast */ /* wrap of data? */ /* TRUE = supported */ /* FALSE = not supported */ int rdto; /* Receive Data Transfer offset */ unsigned char haddr[6]; /* hardware address */ unsigned char net_addr[6]; /* Current network address */ } token; struct /* for Serial Optical Link interfaces */ { unsigned int broad_wrap; /* supports broadcast */ /* wrap of data? */ /* TRUE = supported */ /* FALSE = not supported */ int rdto; /* Receive Data Transfer offset */ uchar processor_id; /* source id # */ } sol; struct /* for FDDI interfaces */ { uint broad_wrap; /* support broadcast */ /* wrap of data? */ /* TRUE = supported */ /* FALSE = not supported */ int rdto; /* Receive Data Transfer offset */ uint attach_class; /* Attachment Class */ /* 0 = Single Attachment Station */ /* 1 = Dual Attachment Station */ uchar haddr[6]; /* hardware address */ uchar netaddr[6]; /* Current network addr */ } fddi; struct /* for block i/o device */ { struct { char type; /* hardware type: ethernet or token ring */ char if_flags; /* up/down: 1=ATTACHED 2=RUNNING 3=PRIMARY INTERFACE */ char haddr[6]; /* hardware address: ethernet or token ring */ __long32_t mymach; /* local IP adress */ __long32_t subnet_mask; /* subnet mask */ int mtu; /* maximum transmission unit */ char if_name[IFNAMSIZ]; /* name of interface */ int if_remmtu; /* MTU to remote */ unsigned short hdr_broadcast; /* ring=0, local=1 */ } lan[MAXIFS]; } bio; struct /* for magnetic tapes */ { short type; /* what flavor of tape */ /* defined below */ } mt; struct /* for SCSI magnetic tapes */ { short type; /* what flavor of tape */ /* defined below */ int blksize; /* block size (in bytes) */ } scmt; struct /* for SCSI or IDE CDROMs */ { short blksize; /* block size (in bytes) */ __long32_t numblks; /* total number of blocks */ } sccd, idecd; struct /* for IDE adapters */ { char resv1; /* reserved */ __long32_t max_transfer; /* max xfer size (bytes) */ } ide; struct /* for SCSI adapters */ { char card_scsi_id; /* SCSI Id of the adapter */ __long32_t max_transfer; /* max xfer size (bytes) */ } scsi; struct /* for FC SCSI adapters */ { uchar connection_type; /* The FC topology that is */ /* connected to this adapter*/ #define FCP_CON_NONE 0x00 /* This adapter is not */ /* connected. */ #define FCP_CON_PT_PT 0x01 /* This adapter is connected*/ /* point-to-point. */ #define FCP_CON_FABRIC 0x02 /* This adapter is connected*/ /* to a fabric */ #define FCP_CON_AL 0x03 /* This adapter connected to*/ /* an arbitrated loop */ uchar flags; /* Return flags for device */ #define FCP_FLAGS_NPIV_ENA 0x01 /* NPIV is enabled for this */ /* adapter & fabric */ #define FCP_FLAGS_NPIV_ADAP_ENA 0x02 /* Adapter supports NPIV */ /* adapter */ #define FCP_FLAGS_TM_ENA 0x04 /* Target Mode is enabled */ /* for this adapter. */ #define FCP_FLAGS_EVENT_V2 0x08 /* Adapter supports enhanced*/ /* SCIOLEVENT ioctl */ #define FCP_FLAGS_DIF_PROT_ENA 0x10 /* T10 protection enabled */ /* for this adapter. */ #define FCP_FLAGS_SWITCH_AL 0x20 /* Only when connection_type*/ /* is AL. Attached to switch*/ /* in public loop mode. Not */ /* reported by all adapters */ #define FCP_FLAGS_P2P_ID_VALID 0x40 /* Other SCSI_ID is valid */ /* in point to point */ /* connection (p2p_scsi_id) */ uchar resvd[2]; /* Reserved for future use */ uint lo_scsi_id; /* Least Significant word of*/ /* SCSI Id of the adapter */ uint hi_scsi_id; /* Most Significant word of */ /* SCSI Id of the adapter */ uint transfer_rate; /* Speed in MB/sec of the FC*/ /* link. */ int max_transfer; /* max xfer size (bytes) */ uint num_avail_vports; /* Number of available */ /* virtual N_Ports */ uint num_used_vports; /* Number of used */ /* virtual N_Ports */ uint lo_p2p_scsi_id; /* Least Significant word of*/ /* SCSI Id of the other nport*/ uint hi_p2p_scsi_id; /* Most Significant word of */ /* SCSI Id of the other nport*/ } fcp; struct /* for iSCSI adapters */ { uchar flags; uchar reserved1; /* Reserved for future use */ ushort reserved2; /* Reserved for future use */ uint reserved3; /* Reserved for future use */ uint reserved4; /* Reserved for future use */ uint transfer_rate; /* Speed in MB/sec of the */ /* link. */ int max_transfer; /* max xfer size (bytes) */ } iscsi; struct /* for vSCSI adapters */ { uint srvr_id; /* host adapter partition id*/ uint reserved2; /* Reserved for future use */ /* link. */ int max_transfer; /* max xfer size (bytes) */ } vscsi; struct /* for V-SCSI-HOST adapters */ { uint client_partition; /* partition number of client*/ __long32_t max_transfer; /* max xfer size (bytes) */ uint reserved1; /* Reserved for future use */ uint reserved2; /* Reserved for future use */ uint reserved3; /* Reserved for future use */ } vscsi_host; struct /* for SAS adapters or protocol buses */ { uchar flags; #define SAS_FLAGS_DK_BUFX_EXT 0x01 /* driver supports */ /* disk_bufx_ext. */ uchar reserved1; /* Reserved for future use */ ushort reserved2; /* Reserved for future use */ uint reserved3; /* Reserved for future use */ uint reserved4; /* Reserved for future use */ uint reserved5; /* Reserved for future use */ int max_transfer; /* max xfer size (bytes) */ } sas; struct /* for SATA adapters or protocol buses */ { uchar flags; uchar reserved1; /* Reserved for future use */ ushort reserved2; /* Reserved for future use */ uint reserved3; /* Reserved for future use */ uint reserved4; /* Reserved for future use */ uint reserved5; /* Reserved for future use */ int max_transfer; /* max xfer size (bytes) */ } sata; struct /* for NVMe adapter */ { uint reserved1; /* Reserved for future use */ uint capability; /* Ctlr or adapter driver capabilities */ #define NVME_CAP_SGL 0x1 /* if 1, adapter driver is using SGL * for all read/writes to disk. 4B data * address alignment is not required. * * if 0, adapter driver is using PRP and * 4B data address alignment is reqd * on disk IO. */ ushort major_version; /* controller major and */ uchar minor_version; /* minor version */ uchar flags; #define NVME_STATIC_CTLR 0x01 #define NVME_DYNAMIC_CTLR 0x02 #define NVME_DISCOVERY_CTLR 0x04 /* also sets DYNAMIC_CTLR */ #define NVME_REMOTE_CTLR 0x03 /* mask to check for a remote ctlr */ uint max_transfer; /* max strategy xfer size (bytes) */ uint ioctl_max_transfer; /* max ioctl xfer size (bytes) */ } nvme; struct /* dump information */ { dev32_t primary; /* primary dump device */ dev32_t secondary; /* secondary dump device */ __long32_t mdt_size; } dump; struct /* for S/370 Channel PCA adapters */ { uchar broad_wrap; /* always zero */ __ulong32_t rdto; /* Receive Data xfer Offset */ __ulong32_t hi_adap_name; /* Adapter hardware name */ __ulong32_t lo_adap_name; /* " " " */ __ulong32_t hi_ucode_name; /* Microcode name */ __ulong32_t lo_ucode_name; /* " " */ uchar chnl_speed; /* interface speed, see cat_adapcfg_t */ } pca; struct /* for large (DF_LGDSK flag set) SCSI, NVMe or IDE disks */ { short blksize; /* block size (in bytes) */ short flags; /* valid if DF_IVAL set */ __long32_t lo_numblks; /* low order word for */ /* total number of blocks*/ /* This field is an */ /* unsigned value and */ /* should always be */ /* recast as a uint */ __long32_t lo_max_request; /* low order word of max */ /* request to DD */ uint segment_size; /* seg size for xfer stats */ uint segment_count; /* seg count for xfer stats*/ uint byte_count; /* byte count for xfer stats*/ __long32_t hi_numblks; /* high order word for */ /* total number of blocks*/ /* This field is an */ /* unsigned value and */ /* should always be */ /* recast as a uint */ __long32_t hi_max_request; /* high order word of max*/ /* request to DD */ __ulong32_t lbp_flags; /* See 'SCDK_LBPF_XXX' below */ /* Provision type of the disk */ uchar lbp_provision_type; #define LBP_TYPE_UNKNOWN (0x0) #define LBP_TYPE_THICK (0x1) #define LBP_TYPE_THIN (0x2) /* Maximum number blocks that can be unmapp-ed in a single * SCSI write-same (or unmap) command. */ __ulong32_t lbp_max_blks; /* Number of blocks that is considered to be optimal to * be unmapped in a single unmap/write-same request. */ __ulong32_t lbp_optimal_blks; /* Only to be used when the flag indicates that the alignment * field is valid. The optimal unmap alignment is calculated * as followed (source SCSI spec): * Optimal unmap starting LBA = * (N * lbp_optimal_blks) + lbp_alignment * * Where N, is zero or any positive integer value */ __ulong32_t lbp_alignment; } scdk64, idedk64; struct /* for large (DF_LGDSK flag set) SCSI or IDE CDROMs */ { short blksize; /* block size (in bytes) */ short flags; /* valid if DF_IVAL set */ __long32_t lo_numblks; /* low order word for */ /* total number of blocks*/ __long32_t hi_numblks; /* high order word for */ /* total number of blocks*/ } sccd64, idecd64; struct /* for large disks (DF_LGDSK flag set) for LVs*/ { short bytpsec; /* bytes per sector */ short secptrk; /* sectors per track */ short trkpcyl; /* tracks per cylinder */ short flags; /* valid if DF_IVAL set */ __long32_t lo_numblks; /* low order word for */ /* total number of blocks */ uint segment_size; /* seg size for xfer stats */ uint segment_count; /* seg count for xfer stats */ uint byte_count; /* byte count for xfer stats */ __long32_t hi_numblks; /* high order word for */ /* total number of blocks */ } dk64; struct { uint reserved0; uint reserved1; uint reserved2; uint reserved3; } vdev; struct { uchar flags; uchar reserved1; /* Reserved for future use */ ushort reserved2; /* Reserved for future use */ uint reserved3; /* Reserved for future use */ uint reserved4; /* Reserved for future use */ uint reserved5; /* Reserved for future use */ uint reserved6; /* Reserved for future use */ } accel_dev; struct { uchar flags; #define CAPI_CFLASH_COALESCE_ENA 0x01 /* scsi_buf request coalesce*/ /* support on this adapter */ #define CAPI_CFLASH_NUM_PORTS_VALID 0x02 /* num_ports is filled in */ uchar num_ports; /* Number of ports on adapt */ ushort capi_arch; /* Underlying CAPI architecture */ #define SISLITE 0x01 #define SISLITE_SQ 0x02 uint reserved3; /* Reserved for future use */ uint reserved4; /* Reserved for future use */ uint reserved5; /* Reserved for future use */ int max_transfer; /* max xfer size (bytes) */ } capi_io; struct /* for Virtio SCSI Client Sdapters */ { char vrtscsi_id; /* SCSI Id of the adapter */ __long32_t max_transfer; /* max xfer size (bytes) */ __long32_t reserved1; /* Reserved for future use */ __long32_t reserved2; /* Reserved for future use */ __long32_t reserved3; /* Reserved for future use */ } vrt_scsi; struct /* For NVMe-oF Transport Drivers */ { uint32_t flags; /* Set by caller */ uint32_t return_flag; /* Flags returned to caller */ #define NVMEOF_FLAGS_P2P_ID_VALID 0x01 /* Other NPORT ID is valid */ #define NVMEOF_FLAGS_P2P_PN_VALID 0x02 /* Other NPORT WWN is valid */ /* in point to point */ #define NVMEOF_FLAGS_P2P_NN_VALID 0x03 /* Other NPORT WWNN is valid */ /* in point to point */ uchar transport_type; /* Type of transport */ #define NVMEOF_TR_TYPE_RDMA 0x01 /* NvMe over RDMA transport type */ #define NVMEOF_TR_TYPE_FC 0x02 /* FC-NVMe transport Type */ #define NVMEOF_TR_TYPE_TCPIP 0x03 /* TCP/IP */ uchar adrfam_type; /* Address family */ #define NVMEOF_ADR_IPV4 0x01 /* IPv4 Address family */ #define NVMEOF_ADR_IPV6 0x02 /* IPv6 Address family */ #define NVMEOF_ADR_FC 0x04 /* FC-NVMe address */ uchar connection_type; /* Fabric connection information */ #define NVMEOF_CON_NONE 0x00 /* No connection */ #define NVMEOF_CON_FC_PT_PT 0x01 /* This adapter is connected */ /* point-to-point. */ #define NVMEOF_CON_FC_FABRIC 0x02 /* This adapter is connected */ /* to a fabric */ uchar resvd1; uint max_xfer_size; /* Max transfer size in bytes */ uint link_speed; /* Link speed in GB/sec */ uint lo_p2p_nport_id; /* Least Significant word of */ /* NportId of the other nport */ uint hi_p2p_nport_id; /* Most Significant word of */ /* NportId of the other nport */ uint lo_p2p_port_name; /* WWPN of the other nport */ uint hi_p2p_port_name; /* WWPN of the other nport */ union { struct { uint lo_p2p_node_name; /* WWNN of the other nport */ uint hi_p2p_node_name; /* WWNN of the other nport */ } fc_p2p; uint resvd2[2]; } un_fcp2p; } nvmeof_transport; } un; }; /* device types */ #define DD_TMSCSI 'T' /* SCSI target mode */ #define DD_SCSITM 'W' /* SCSI-3 target mode */ #define DD_LP 'P' /* line printer */ #define DD_TAPE 'M' /* mag tape */ #define DD_SCTAPE 'm' /* SCSI tape */ #define DD_TTY 'T' /* terminal */ #define DD_DISK 'R' /* disk */ #define DD_CDROM 'C' /* cdrom */ #define DD_DLC 'D' /* Data Link Control */ #define DD_SCDISK 'r' /* SCSI disk, but NVMe disk if DF_NVME is set */ #define DD_RTC 'c' /* real-time (calendar) clock */ #define DD_PSEU 'Z' /* pseudo-device */ #define DD_NET 'N' /* networks */ #define DD_EN 'E' /* Ethernet interface */ #define DD_EM78 'e' /* 3278/79 emulator */ #define DD_TR 't' /* token ring */ #define DD_BIO 'B' /* block i/o device */ #define DD_X25 'x' /* X.25 DDN device driver */ #define DD_IEEE_3 '3' /* IEEE 802.3 */ #define DD_SL 'S' /* Serial line IP */ #define DD_LO 'L' /* Loopback IP */ #define DD_DUMP 'd' /* dump device driver */ #define DD_SCCD 'C' /* SCSI CDROM */ #define DD_CIO 'n' /* common communications device driver */ #define DD_BUS 'b' /* I/O Bus device */ #define DD_HFT 'H' /* HFT */ #define DD_INPUT 'I' /* graphic input device */ #define DD_CON 'Q' /* console */ #define DD_NET_DH 'h' /* Network device handler */ #define DD_DISK_C 's' /* Disk Controller */ #define DD_SOL 'o' /* Serial Optical Link */ #define DD_CAT 'K' /* S/370 parallel channel */ #define DD_FDDI 'F' /* FDDI */ #define DD_SCRWOPT 'w' /* SCSI R/W optical */ #define DD_SES 'a' /* SCSI Enclosure Services Device */ #define DD_AUDIT 'A' /* Streams mode auditing virtual device */ #define DD_LIB 'l' /* Medium library device */ #define DD_VIOA 'v' /* Virtual IOA */ #define DD_OTHER 'O' /* Other devices that don't fit any other category */ /* device sub-types */ #define DS_DLCETHER 'e' /* DLC - Standard Ethernet */ #define DS_DLC8023 'i' /* DLC - IEEE 802.3 Ethernet */ #define DS_DLCTOKEN 't' /* DLC - Token Ring */ #define DS_DLCSDLC 'd' /* DLC - SDLC */ #define DS_DLCQLLC 'q' /* DLC - X.25 Qualified LLC */ #define DS_DLCFDDI 'f' /* DLC - FDDI */ #define DS_LV 'l' /* logical volume */ #define DS_PV 'p' /* physical volume - hard disk */ #define DS_SCSI 'S' /* SCSI adapter */ #define DS_IDE 'I' /* IDE adapter */ #define DS_SAS '7' /* SAS adapter */ #define DS_SATA '8' /* SATA adapter */ #define DS_PP 'p' /* Parallel printer */ #define DS_SP 's' /* Serial printer */ #define DS_TM 'T' /* SCSI target mode */ #define DS_SDA 'h' /* Serial DASD adapter */ #define DS_SDC 'c' /* Serial DASD Controller */ #define DS_NFS 'N' /* NFS device for swapping */ #define DS_CAT 'k' /* S/370 parallel channel */ #define DS_FCP 'F' /* FC SCSI adapter */ #define DS_FCNVME 'n' /* FC-NVMe device */ #define DS_VM 'V' /* VM logical volume */ #define DS_QIO 'q' /* Quick IO logical volume */ #define DS_ISCSI 'a' /* iSCSI adapter */ #define DS_LVZ 'z' /* New logical volume type */ #define DS_LV0 DS_LVZ /* New logical volume type */ #define DS_VMZ 'o' /* VM logical volume */ #define DS_VDEVICE 'D' /* Virtual deivce or bus */ #define DS_CVSCSI 'D' /* Virtual SCSI Client (hosteD) */ #define DS_SVSCSI 'G' /* Virtual SCSI Server (hostinG) */ #define DS_RPV 'R' /* Remote device */ #define DS_ACCEL 'A' /* Accel device */ #define DS_CAPI_IO 'C' /* CAPI Storage device */ #define DS_VRTSCSI 'T' /* VirtIO SCSI Client Adapter */ #ifndef DS_VSD #define DS_VSD 'v' /* VSD type device */ #endif #define DS_NVME 'M' /* non-volatile Memory controller */ /* Type of tape drive */ #define DT_STREAM 1 /* Streaming tape drive */ #define DT_STRTSTP 2 /* Start-stop tape drive */ /* flags */ #define DF_FIXED 01 /* non-removable */ #define DF_RAND 02 /* random access possible */ #define DF_FAST 04 #define DF_CONC 0x08 /* Concurrent mode supported */ #define DF_LGDSK 0x10 /* Large > 2TB disk. */ #define DF_IVAL 0x20 /* Inner flags valid in scdk64, idedk64, sccd64, idecd64, dk64 */ /* scdk64 flags */ #define DF_SSD 0x01 /* Solid state disk device */ #define DF_CFLASH 0x02 /* CAPI Flash disk device */ #define DF_LBP 0x04 /* LBP fields in scdk64 structure are valid */ #define DF_NVME 0x08 /* NVMe device (vs SCSI) */ #define DF_4B_ALIGNED 0x10 /* data buffer address requires 4 byte alignment or the IO is failed */ /* Following 'SCDK_LBPF_XXX' macros are meant to be used for the field * 'lbp_flags' in devinfo.un.scdk64 structure. */ /* Logical Block Provisioning support is enabled on this AIX node. */ #define SCDK_LBPF_ENABLED (0x00000001) /* AIX does not support Logical Block Provisioning operations on this device */ #define SCDK_LBPF_UNSUPPORTED_DEVICE (0x00000002) /* Indicates that the "lbp_alignment" field is valid. */ #define SCDK_LBPF_ALIGN_FIELD_VALID (0x00000004) /* TRUE if reading an unmapped-block of the disk is guaranteed to return * zeros */ #define SCDK_LBPF_READ_ZEROS (0x00000008) /* Reserved: * The underlying storage supports Write-Same SCSI command. */ #define SCDK_LBPF_WS_SUPPORTED (0x00000010) /* Reserved: * The underlying storage supports UNMAP SCSI command. */ #define SCDK_LBPF_UNMAP_SUPPORTED (0x00000020) /* Indicates that the AIX SCSI disk driver supports ioctl(DK_CANCEL_RECLAIM) to * cancel pending/on-going space reclmation requests. */ #define SCDK_LBPF_CANCEL_SUPPORTED (0x00000040) #endif /* _H_DEVINFO */