/* 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 <sys/types.h>
#include <sys/inttypes.h>

/*
 * 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 */
