home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v5.zip / DDKX86 / SRC / DEV / DASD / CDROM / ATAPI / IORB.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-14  |  31.6 KB  |  793 lines

  1. /*DDK*************************************************************************/
  2. /*                                                                           */
  3. /* COPYRIGHT    Copyright (C) 1995 IBM Corporation                           */
  4. /*                                                                           */
  5. /*    The following IBM OS/2 WARP source code is provided to you solely for  */
  6. /*    the purpose of assisting you in your development of OS/2 WARP device   */
  7. /*    drivers. You may use this code in accordance with the IBM License      */
  8. /*    Agreement provided in the IBM Device Driver Source Kit for OS/2. This  */
  9. /*    Copyright statement may not be removed.                                */
  10. /*                                                                           */
  11. /*****************************************************************************/
  12. /**************************************************************************
  13.  *
  14.  * SOURCE FILE NAME =  IORB.H
  15.  *
  16.  * DESCRIPTIVE NAME =  IORB defines the interface between Device Managers
  17.  *                     and Adapter Device Drivers (ADDs).
  18.  *
  19.  *
  20.  * VERSION = V2.0 Private version between IBM1S506.ADD and IBMIDECD.FLT
  21.  *
  22.  * DATE
  23.  *
  24.  * DESCRIPTION :
  25.  *
  26.  * Purpose:
  27.  *
  28.  *
  29.  *
  30.  *
  31.  * FUNCTIONS  :
  32.  *
  33.  *
  34.  *
  35.  * NOTES      : See ..\OEMSPEC\OEMSPEC.ASC for further details.
  36.  *
  37.  *
  38.  * STRUCTURES
  39.  *
  40.  * EXTERNAL REFERENCES
  41.  *
  42.  *
  43.  *
  44.  * EXTERNAL FUNCTIONS
  45.  *
  46. */
  47.  
  48. /*
  49. ** I/O Request Block (IORB) Structures
  50. */
  51.  
  52. /* ASM
  53. ;
  54. ;       Resolve H2INC references for .INC version of file
  55. ;
  56.         include  iorbtype.inc
  57. */
  58.  
  59. /* Typedefs to resolve forward references */
  60.  
  61. typedef struct _IORBH         IORBH;
  62. typedef struct _IORBH         FAR *PIORBH;
  63. typedef struct _IORBH         NEAR *NPIORBH;
  64. typedef struct _IORBH         FAR *PIORB;
  65. typedef struct _IORBH         NEAR *NPIORB;
  66.  
  67. typedef struct _DEVICETABLE   DEVICETABLE;
  68. typedef struct _DEVICETABLE   FAR *PDEVICETABLE;
  69. typedef struct _DEVICETABLE   NEAR *NPDEVICETABLE;
  70.  
  71. typedef struct _UNITINFO      UNITINFO;
  72. typedef struct _UNITINFO      FAR *PUNITINFO;
  73. typedef struct _UNITINFO      NEAR *NPUNITINFO;
  74.  
  75. typedef struct _ADAPTERINFO   ADAPTERINFO;
  76. typedef struct _ADAPTERINFO   FAR *PADAPTERINFO;
  77. typedef struct _ADAPTERINFO   NEAR *NPADAPTERINFO;
  78.  
  79. typedef struct _GEOMETRY      GEOMETRY;
  80. typedef struct _GEOMETRY      FAR *PGEOMETRY;
  81. typedef struct _GEOMETRY      NEAR *NPGEOMETRY;
  82.  
  83. typedef struct _SCATGATENTRY  SCATGATENTRY;
  84. typedef struct _SCATGATENTRY  FAR *PSCATGATENTRY;
  85. typedef struct _SCATGATENTRY  NEAR *NPSCATGATENTRY;
  86.  
  87. typedef struct _RESOURCE_ENTRY RESOURCE_ENTRY;
  88. typedef struct _RESOURCE_ENTRY NEAR *NPRESOURCE_ENTRY;
  89. typedef struct _RESOURCE_ENTRY FAR *PRESOURCE_ENTRY;
  90.  
  91. /*
  92. ** Interface for calling ADD entry point
  93. */
  94.  
  95. /* VOID FAR *(ADDEP) (PIORBH); */
  96.  
  97. /*
  98. ** IORB Header
  99. */
  100.  
  101. #define DM_WORKSPACE_SIZE       20
  102. #define ADD_WORKSPACE_SIZE      16
  103.  
  104. typedef struct _IORBH   {               /* IOH */
  105.  
  106.   USHORT        Length;                 /* IORB Length                */
  107.   USHORT        UnitHandle;             /* Unit Identifier            */
  108.   USHORT        CommandCode;            /* Command Code               */
  109.   USHORT        CommandModifier;        /* Command Modifier           */
  110.   USHORT        RequestControl;         /* Request Control Flags      */
  111.   USHORT        Status;                 /* Status                     */
  112.   USHORT        ErrorCode;              /* Error Code                 */
  113.   ULONG         Timeout;                /* Cmd completion timeout (s) */
  114.   USHORT        StatusBlockLen;         /* Status block length        */
  115.   NPBYTE        pStatusBlock;           /* Status block               */
  116.   USHORT        Reserved_1;             /* Reserved, MBZ              */
  117.   PIORB         pNxtIORB;               /* Pointer to next IORB       */
  118.   PIORB         (FAR *NotifyAddress)(PIORB); /* Notification Address  */
  119.   UCHAR         DMWorkSpace[DM_WORKSPACE_SIZE];   /* For use by DM    */
  120.   UCHAR         ADDWorkSpace[ADD_WORKSPACE_SIZE]; /* For use by ADD   */
  121.  
  122. } IORBH;
  123.  
  124. /*
  125. ** IORB CommandCode and CommandModifier Codes.
  126. **      CommandCode prefixed by IOCC and CommandModifier by IOCM.
  127. */
  128.  
  129.                                           /*---------------------------*/
  130.                                           /* +----M=Manditory Support  */
  131.                                           /* |    O=Optional Support   */
  132.                                           /* |                         */
  133.                                           /* V     Notes               */
  134.                                           /*---------------------------*/
  135. #define IOCC_CONFIGURATION        0x0001  /*                           */
  136. #define IOCM_GET_DEVICE_TABLE     0x0001  /* M                         */
  137. #define IOCM_COMPLETE_INIT        0x0002  /* O                         */
  138.                                           /*---------------------------*/
  139. #define IOCC_UNIT_CONTROL         0x0002  /*                           */
  140. #define IOCM_ALLOCATE_UNIT        0x0001  /* M                         */
  141. #define IOCM_DEALLOCATE_UNIT      0x0002  /* M                         */
  142. #define IOCM_CHANGE_UNITINFO      0x0003  /* M                         */
  143.                                           /*---------------------------*/
  144. #define IOCC_GEOMETRY             0x0003  /*                           */
  145. #define IOCM_GET_MEDIA_GEOMETRY   0x0001  /* M                         */
  146. #define IOCM_SET_MEDIA_GEOMETRY   0x0002  /* O (M) >1 Media type       */
  147. #define IOCM_GET_DEVICE_GEOMETRY  0x0003  /* M                         */
  148. #define IOCM_SET_LOGICAL_GEOMETRY 0x0004  /* O (M) CHS Addressable     */
  149.                                           /*---------------------------*/
  150. #define IOCC_EXECUTE_IO           0x0004  /*                           */
  151. #define IOCM_READ                 0x0001  /* M                         */
  152. #define IOCM_READ_VERIFY          0x0002  /* M                         */
  153. #define IOCM_READ_PREFETCH        0x0003  /* O                         */
  154. #define IOCM_WRITE                0x0004  /* M                         */
  155. #define IOCM_WRITE_VERIFY         0x0005  /* M                         */
  156.                                           /*---------------------------*/
  157. #define IOCC_FORMAT               0x0005  /*                           */
  158. #define IOCM_FORMAT_MEDIA         0x0001  /* O (M) If HW requires      */
  159. #define IOCM_FORMAT_TRACK         0x0002  /* O (M) If HW requires      */
  160. #define IOCM_FORMAT_PROGRESS      0x0003  /* O                         */
  161.                                           /*---------------------------*/
  162. #define IOCC_UNIT_STATUS          0x0006  /*                           */
  163. #define IOCM_GET_UNIT_STATUS      0x0001  /* M                         */
  164. #define IOCM_GET_CHANGELINE_STATE 0x0002  /* M (O) Fixed Media Only    */
  165. #define IOCM_GET_MEDIA_SENSE      0x0003  /* M                         */
  166. #define IOCM_GET_LOCK_STATUS      0x0004  /* O                         */
  167.                                           /*---------------------------*/
  168. #define IOCC_DEVICE_CONTROL       0x0007  /*                           */
  169. #define IOCM_ABORT                0x0001  /* O (M) SCSI                */
  170. #define IOCM_RESET                0x0002  /* O (M) SCSI                */
  171. #define IOCM_SUSPEND              0x0003  /* O (M) Floppy Driver       */
  172. #define IOCM_RESUME               0x0004  /* O (M) Floppy Driver       */
  173. #define IOCM_LOCK_MEDIA           0x0005  /* M (O) Fixed Media Only    */
  174. #define IOCM_UNLOCK_MEDIA         0x0006  /* M (O) Fixed Media Only    */
  175. #define IOCM_EJECT_MEDIA          0x0007  /* O (M) SCSI & Floppy driver*/
  176. #define IOCM_GET_QUEUE_STATUS     0x0008  /* O (M) ATA/ATAPI Devices   */
  177.                                           /* @V51531                   */
  178.                                           /*---------------------------*/
  179. #define IOCC_ADAPTER_PASSTHRU     0x0008  /*                           */
  180. #define IOCM_EXECUTE_SCB          0x0001  /* O                         */
  181. #define IOCM_EXECUTE_CDB          0x0002  /* O (M) SCSI Adapters       */
  182.                                           /*---------------------------*/
  183. #define IOCC_RESOURCE             0x0009  /*                           */
  184. #define IOCM_REPORT_RESOURCES     0x0001  /* O (M) ATA/ATAPI Devices   */
  185.                                           /*---------------------------*/
  186.  
  187. #define MAX_IOCC_COMMAND  IOCC_ADAPTER_PASSTHRU
  188.  
  189. /*
  190. ** Status flags returned in IORBH->Status
  191. */
  192.  
  193. #define IORB_DONE                0x0001  /* 1=Done,  0=In progress     */
  194. #define IORB_ERROR               0x0002  /* 1=Error, 0=No error        */
  195. #define IORB_RECOV_ERROR         0x0004  /* Recovered error            */
  196. #define IORB_STATUSBLOCK_AVAIL   0x0008  /* Status Block available     */
  197.  
  198. /*
  199. ** Error Codes returned in IORBH->ErrorCode
  200. */
  201.  
  202. #define IOERR_RETRY                     0x8000
  203.  
  204. #define IOERR_CMD                       0x0100
  205. #define IOERR_CMD_NOT_SUPPORTED         IOERR_CMD+1
  206. #define IOERR_CMD_SYNTAX                IOERR_CMD+2
  207. #define IOERR_CMD_SGLIST_BAD            IOERR_CMD+3
  208. #define IOERR_CMD_SW_RESOURCE           IOERR_CMD+IOERR_RETRY+4
  209. #define IOERR_CMD_ABORTED               IOERR_CMD+5
  210. #define IOERR_CMD_ADD_SOFTWARE_FAILURE  IOERR_CMD+6
  211. #define IOERR_CMD_OS_SOFTWARE_FAILURE   IOERR_CMD+7
  212.  
  213. #define IOERR_UNIT                      0x0200
  214. #define IOERR_UNIT_NOT_ALLOCATED        IOERR_UNIT+1
  215. #define IOERR_UNIT_ALLOCATED            IOERR_UNIT+2
  216. #define IOERR_UNIT_NOT_READY            IOERR_UNIT+3
  217. #define IOERR_UNIT_PWR_OFF              IOERR_UNIT+4
  218.  
  219. #define IOERR_RBA                       0x0300
  220. #define IOERR_RBA_ADDRESSING_ERROR      IOERR_RBA+IOERR_RETRY+1
  221. #define IOERR_RBA_LIMIT                 IOERR_RBA+2
  222. #define IOERR_RBA_CRC_ERROR             IOERR_RBA+IOERR_RETRY+3
  223.  
  224. #define IOERR_MEDIA                     0x0400
  225. #define IOERR_MEDIA_NOT_FORMATTED       IOERR_MEDIA+1
  226. #define IOERR_MEDIA_NOT_SUPPORTED       IOERR_MEDIA+2
  227. #define IOERR_MEDIA_WRITE_PROTECT       IOERR_MEDIA+3
  228. #define IOERR_MEDIA_CHANGED             IOERR_MEDIA+4
  229. #define IOERR_MEDIA_NOT_PRESENT         IOERR_MEDIA+5
  230.  
  231. #define IOERR_ADAPTER                   0x0500
  232. #define IOERR_ADAPTER_HOSTBUSCHECK      IOERR_ADAPTER+1
  233. #define IOERR_ADAPTER_DEVICEBUSCHECK    IOERR_ADAPTER+IOERR_RETRY+2
  234. #define IOERR_ADAPTER_OVERRUN           IOERR_ADAPTER+IOERR_RETRY+3
  235. #define IOERR_ADAPTER_UNDERRUN          IOERR_ADAPTER+IOERR_RETRY+4
  236. #define IOERR_ADAPTER_DIAGFAIL          IOERR_ADAPTER+5
  237. #define IOERR_ADAPTER_TIMEOUT           IOERR_ADAPTER+IOERR_RETRY+6
  238. #define IOERR_ADAPTER_DEVICE_TIMEOUT    IOERR_ADAPTER+IOERR_RETRY+7
  239. #define IOERR_ADAPTER_REQ_NOT_SUPPORTED IOERR_ADAPTER+8
  240. #define IOERR_ADAPTER_REFER_TO_STATUS   IOERR_ADAPTER+9
  241. #define IOERR_ADAPTER_NONSPECIFIC       IOERR_ADAPTER+10
  242.  
  243.  
  244. #define IOERR_DEVICE                    0x0600
  245. #define IOERR_DEVICE_DEVICEBUSCHECK     IOERR_DEVICE+IOERR_RETRY+1
  246. #define IOERR_DEVICE_REQ_NOT_SUPPORTED  IOERR_DEVICE+2
  247. #define IOERR_DEVICE_DIAGFAIL           IOERR_DEVICE+3
  248. #define IOERR_DEVICE_BUSY               IOERR_DEVICE+IOERR_RETRY+4
  249. #define IOERR_DEVICE_OVERRUN            IOERR_DEVICE+IOERR_RETRY+5
  250. #define IOERR_DEVICE_UNDERRUN           IOERR_DEVICE+IOERR_RETRY+6
  251. #define IOERR_DEVICE_RESET              IOERR_DEVICE+7
  252. #define IOERR_DEVICE_NONSPECIFIC        IOERR_DEVICE+8
  253.  
  254.  
  255. /*
  256. ** Request Control flags in IORBH->RequestControl
  257. */
  258.  
  259. #define  IORB_ASYNC_POST        0x0001   /* Asynchronous post enabled  */
  260. #define  IORB_CHAIN             0x0002   /* IORB Chain Link enabled    */
  261. #define  IORB_CHS_ADDRESSING    0x0004   /* CHS fmt addr in RBA Field  */
  262. #define  IORB_REQ_STATUSBLOCK   0x0008   /* Obtain Status Block Data   */
  263. #define  IORB_DISABLE_RETRY     0x0010   /* Disable retries in ADD     */
  264.  
  265.  
  266. /*
  267. ** ADAPTER CONFIGURNATION IORB         (for IOCC_CONFIGURATION)
  268. */
  269.  
  270. typedef struct _IORB_CONFIGURATION   {  /* IOCFG */
  271.  
  272.   IORBH            iorbh;               /* IORB Header                  */
  273.   DEVICETABLE far *pDeviceTable;        /* far ptr to adapter dev table */
  274.   USHORT           DeviceTableLen;      /* Length of adapter dev table  */
  275.  
  276. } IORB_CONFIGURATION, FAR *PIORB_CONFIGURATION, NEAR *NPIORB_CONFIGURATION;
  277.  
  278. /* Adapter device table returned by GET_DEVICE_TABLE                      */
  279.  
  280. typedef struct _DEVICETABLE  {            /* IODT */
  281.  
  282.   UCHAR         ADDLevelMajor;            /* ADD Major Support Level       */
  283.   UCHAR         ADDLevelMinor;            /* ADD Minor Support Level       */
  284.   USHORT        ADDHandle;                /* ADD Handle                    */
  285.   USHORT        TotalAdapters;            /* Number of adapters supported  */
  286.   NPADAPTERINFO pAdapter[1];              /* Array of adapter info pointers*/
  287.  
  288. } DEVICETABLE, FAR *PDEVICETABLE;
  289.  
  290. /*
  291. ** Current ADD Level for DEVICETABLE->AddLevelMajor, AddLevelMinor
  292. */
  293.  
  294. #define ADD_LEVEL_MAJOR         0x01
  295. #define ADD_LEVEL_MINOR         0x00
  296.  
  297.  
  298. typedef struct _UNITINFO   {           /* IOUI */
  299.  
  300.   USHORT    AdapterIndex;              /* nth Adapter this driver     */
  301.   USHORT    UnitIndex;                 /* nth Unit on this card       */
  302.   USHORT    UnitFlags;                 /* Unit Flags                  */
  303.   USHORT    Reserved;                  /* Reserved                    */
  304.   USHORT    UnitHandle;                /* Assigned by ADD or Filter   */
  305.   USHORT    FilterADDHandle;           /* Handle of Filter ADD  0=None*/
  306.   USHORT    UnitType;                  /* Unit type                   */
  307.   USHORT    QueuingCount;              /* Recommended number to queue */
  308.   UCHAR     UnitSCSITargetID;          /* SCSI Target ID  (SCSI Only) */
  309.   UCHAR     UnitSCSILUN;               /* SCSI Log.  Unit (SCSI Only) */
  310.  
  311. } UNITINFO;
  312.  
  313.  
  314. /*
  315. ** Unit Flags for UNITINFO->UnitFlags
  316. */
  317.  
  318. #define UF_REMOVABLE     0x0001         /* Media can be removed            */
  319. #define UF_CHANGELINE    0x0002         /* ChangeLine Supported            */
  320. #define UF_PREFETCH      0x0004         /* Supports prefetch reads         */
  321. #define UF_A_DRIVE       0x0008         /* Manages A:                      */
  322. #define UF_B_DRIVE       0x0010         /* Manages B:                      */
  323. #define UF_NODASD_SUPT   0x0020         /* Suppress DASD Mgr support       */
  324. #define UF_NOSCSI_SUPT   0x0040         /* Suppress SCSI Mgr support       */
  325. #define UF_DEFECTIVE     0x0080         /* Device is defective             */
  326.  
  327.  
  328. /*
  329. ** Unit Types for UNITINFO->UnitType
  330. */
  331.  
  332. #define  UIB_TYPE_DISK      0x0000     /* All Direct Access Devices        */
  333. #define  UIB_TYPE_TAPE      0x0001     /* Sequencial Access Devices        */
  334. #define  UIB_TYPE_PRINTER   0x0002     /* Printer Device                   */
  335. #define  UIB_TYPE_PROCESSOR 0x0003     /* Processor type device            */
  336. #define  UIB_TYPE_WORM      0x0004     /* Write Once Read Many Device      */
  337. #define  UIB_TYPE_CDROM     0x0005     /* CD ROM Device                    */
  338. #define  UIB_TYPE_SCANNER   0x0006     /* Scanner Device                   */
  339. #define  UIB_TYPE_OPTICAL_MEMORY 0x0007 /* some Optical disk               */
  340. #define  UIB_TYPE_CHANGER   0x0008     /* Changer device e.g. juke box     */
  341. #define  UIB_TYPE_COMM      0x0009     /* Communication devices            */
  342. #define  UIB_TYPE_ATAPI     0x000A     /* Unspecific ATAPI protocol device */
  343.  
  344.  
  345. typedef struct _ADAPTERINFO   {           /* IOAI */
  346.  
  347.   UCHAR            AdapterName[17];       /* Adapter Name ASCIIZ string    */
  348.   UCHAR            Reserved;              /*                               */
  349.   USHORT           AdapterUnits;          /* Number of units this adapter  */
  350.   USHORT           AdapterDevBus;         /* Bus Type - Adapter to Device  */
  351.   UCHAR            AdapterIOAccess;       /* I/O Type - Adapter to Host    */
  352.   UCHAR            AdapterHostBus;        /* Bus Type - Adapter to Host    */
  353.   UCHAR            AdapterSCSITargetID;   /* Adapter SCSI Target ID        */
  354.   UCHAR            AdapterSCSILUN;        /* Adapter SCSI LUN              */
  355.   USHORT           AdapterFlags;
  356.   USHORT           MaxHWSGList;           /* Max HW S/G List Entries       */
  357.   ULONG            MaxCDBTransferLength;  /* Max data length for CDBs      */
  358.   UNITINFO         UnitInfo[1];           /* Unit info for each unit       */
  359.  
  360. } ADAPTERINFO;
  361.  
  362.  
  363. /*
  364. ** Adapter Flags for ADAPTERINFO->AdapterFlags
  365. */
  366.  
  367. #define AF_16M                 0x0001  /* Supports >16M addresses        */
  368. #define AF_IBM_SCB             0x0002  /* Supports IBM SCB commands      */
  369. #define AF_HW_SCATGAT          0x0004  /* Supports scatter/gather in HW  */
  370. #define AF_CHS_ADDRESSING      0x0008  /* Supports CHS addressing in HW  */
  371. #define AF_ASSOCIATED_DEVBUS   0x0010  /* Supports >1 Device Bus         */
  372.  
  373.  
  374. /*
  375. ** Adapter-to-Device protocol for ADAPTERINFO->AdapterDevBus
  376. */
  377.  
  378. #define  AI_DEVBUS_OTHER        0x0000
  379. #define  AI_DEVBUS_ST506        0x0001 /* ST-506 CAM-I                     */
  380. #define  AI_DEVBUS_ST506_II     0x0002 /* ST-506 CAM-II                    */
  381. #define  AI_DEVBUS_ESDI         0x0003 /* ESDI                             */
  382. #define  AI_DEVBUS_FLOPPY       0x0004 /* Diskette                         */
  383. #define  AI_DEVBUS_SCSI_1       0x0005
  384. #define  AI_DEVBUS_SCSI_2       0x0006
  385. #define  AI_DEVBUS_SCSI_3       0x0007
  386. #define  AI_DEVBUS_NONSCSI_CDROM 0x0008 /* Non-scsi CD-ROM interface bus    */
  387.  
  388. /*
  389. ** Note: A one of the following BUS WIDTH indicators should be
  390. **       or'd with the above field.
  391. */
  392.  
  393. #define  AI_DEVBUS_FAST_SCSI    0x0100
  394. #define  AI_DEVBUS_8BIT         0x0200
  395. #define  AI_DEVBUS_16BIT        0x0400
  396. #define  AI_DEVBUS_32BIT        0x0800
  397.  
  398.  
  399. /*
  400. ** Adapter-to-Device protocol for ADAPTERINFO->AdapterIOAccess
  401. */
  402.  
  403. #define  AI_IOACCESS_OTHER      0x00
  404. #define  AI_IOACCESS_BUS_MASTER 0x01
  405. #define  AI_IOACCESS_PIO        0x02
  406. #define  AI_IOACCESS_DMA_SLAVE  0x04
  407. #define  AI_IOACCESS_MEMORY_MAP 0x08
  408.  
  409.  
  410. /*
  411. ** Adapter-to-Host bus type for ADAPTERINFO->AdapterHostBus
  412. */
  413.  
  414. #define  AI_HOSTBUS_OTHER       0x00
  415. #define  AI_HOSTBUS_ISA         0x01
  416. #define  AI_HOSTBUS_EISA        0x02
  417. #define  AI_HOSTBUS_uCHNL       0x03
  418. #define  AI_HOSTBUS_UNKNOWN     0x0f
  419.  
  420. /*
  421. ** Note: A one of the following BUS WIDTH indicators should be
  422. **       or'd with the above field.
  423. */
  424.  
  425. #define  AI_BUSWIDTH_8BIT       0x10
  426. #define  AI_BUSWIDTH_16BIT      0x20
  427. #define  AI_BUSWIDTH_32BIT      0x30
  428. #define  AI_BUSWIDTH_64BIT      0x40
  429. #define  AI_BUSWIDTH_UNKNOWN    0xf0
  430.  
  431.  
  432. /*
  433. ** UNIT CONTROL IORB                  (for IOCC_UNIT_CONTROL)
  434. */
  435.  
  436. typedef struct _IORB_UNIT_CONTROL  {     /* IOUC */
  437.  
  438.   IORBH            iorbh;                /* IORB Header                  */
  439.   USHORT           Flags;                /*                              */
  440.   PUNITINFO        pUnitInfo;            /* For: IOCM_CHANGE_UNITINFO    */
  441.   USHORT           UnitInfoLen;          /* Length of UnitInfo structure */
  442.  
  443. } IORB_UNIT_CONTROL, FAR *PIORB_UNIT_CONTROL, NEAR *NPIORB_UNIT_CONTROL;
  444.  
  445. /*
  446. ** DASD GEOMETRY IORB                      (for IOCC_GEOMETRY)
  447. */
  448.  
  449. typedef struct _IORB_GEOMETRY  {         /* IOGG */
  450.  
  451.   IORBH            iorbh;                /* IORB Header                  */
  452.   PGEOMETRY        pGeometry;            /* far ptr to GEOMETRY block    */
  453.   USHORT           GeometryLen;          /* Length of GEOMETRY block     */
  454.  
  455. } IORB_GEOMETRY, FAR *PIORB_GEOMETRY, NEAR *NPIORB_GEOMETRY;
  456.  
  457. typedef struct _GEOMETRY  {              /* IOG */
  458.  
  459.   ULONG    TotalSectors;
  460.   USHORT   BytesPerSector;
  461.   USHORT   Reserved;
  462.   USHORT   NumHeads;
  463.   ULONG    TotalCylinders;
  464.   USHORT   SectorsPerTrack;
  465.  
  466. } GEOMETRY, FAR *PGEOMETRY, NEAR *NPGEOMETRY;
  467.  
  468.  
  469.  
  470. /*
  471. ** Scatter/Gather List Entry
  472. */
  473.  
  474. typedef struct _SCATGATENTRY  {      /* IOSG */
  475.  
  476.   ULONG         ppXferBuf;           /* Physical pointer to transfer buffer */
  477.   ULONG         XferBufLen;          /* Length of transfer buffer           */
  478.  
  479. } SCATGATENTRY, FAR *PSCATGATENTRY, NEAR *NPSCATGATENTRY;
  480.  
  481. #define MAXSGLISTSIZE   (sizeof(SCATGATENTRY)) * 16
  482.  
  483. /*
  484. ** EXECUTE_IO IORB                    (for IOCC_EXECUTE_IO)
  485. */
  486.  
  487. typedef struct _IORB_EXECUTEIO  {            /* IOXIO */
  488.  
  489.   IORBH         iorbh;                       /* IORB Header                */
  490.   USHORT        cSGList;                     /* Count of S/G list elements */
  491.   PSCATGATENTRY pSGList;                     /* far ptr to S/G List        */
  492.   ULONG         ppSGList;                    /* physical addr of  S/G List */
  493.   ULONG         RBA;                         /* RBA Starting Address       */
  494.   USHORT        BlockCount;                  /* Block Count                */
  495.   USHORT        BlocksXferred;               /* Block Done Count           */
  496.   USHORT        BlockSize;                   /* Size of a block in bytes   */
  497.   USHORT        Flags;
  498.  
  499. } IORB_EXECUTEIO, FAR *PIORB_EXECUTEIO, NEAR *NPIORB_EXECUTEIO;
  500.  
  501.  
  502. /*
  503. ** CHS Direct Addressing (Overlays RBA field)
  504. */
  505.  
  506. typedef struct _CHS_ADDR  {                  /* IOCHS */
  507.  
  508.   USHORT        Cylinder;
  509.   UCHAR         Head;
  510.   UCHAR         Sector;
  511.  
  512. } CHS_ADDR, FAR *PCHS_ADDR, NEAR *NPCHS_ADDR;
  513.  
  514.  
  515. /*
  516. ** IORB specific flags for IORB_EXECUTE_IO->Flags
  517. */
  518.  
  519. #define  XIO_DISABLE_HW_WRITE_CACHE      0x0001
  520. #define  XIO_DISABLE_HW_READ_CACHE       0x0002
  521.  
  522.  
  523. /*
  524. ** FORMAT IORB                        (for IOCC_FORMAT)
  525. */
  526.  
  527.  
  528. typedef struct _IORB_FORMAT  {               /* IOFMT */
  529.  
  530.   IORBH         iorbh;                       /* IORB Header                */
  531.   USHORT        cSGList;                     /* Count of S/G list elements */
  532.   PSCATGATENTRY pSGList;                     /* far ptr to S/G List        */
  533.   ULONG         ppSGList;                    /* physical addr of  S/G List */
  534.   USHORT        FormatCmdLen;                /*                            */
  535.   PBYTE         pFormatCmd;                  /* SCSI CDB or Track Fmt Cmd  */
  536.   UCHAR         Reserved_1[8];               /* Reserved, must not be modified*/
  537.  
  538. } IORB_FORMAT, FAR *PIORB_FORMAT, NEAR *NPIORB_FORMAT;
  539.  
  540.  
  541. typedef struct _FORMAT_CMD_TRACK {           /* FMCT  */
  542.  
  543.   USHORT        Flags;
  544.   ULONG         RBA;
  545.   USHORT        cTrackEntries;
  546.   USHORT        FmtGapLength;                                        /*@V80754*/
  547.   USHORT        BlockSize;                                           /*@V82940*/
  548.  
  549. } FORMAT_CMD_TRACK, FAR *PFORMAT_CMD_TRACK, NEAR *NPFORMAT_CMD_TRACK;
  550.  
  551.  
  552. /*
  553. ** Flags for FORMAT_CMD_TRACK->Flags
  554. */
  555.  
  556. #define FF_VERIFY       0x0001          /* Verify sectors after formatting */
  557. #define FF_FMTGAPLEN    0x0002          /* InterSector GAP (bits)          */ /*V80754*/
  558.  
  559.  
  560. /*
  561. ** ADAPTER PASS THROUGH IORB           (for IOCC_ADAPTER_PASSTHRU)
  562. */
  563.  
  564. typedef struct _IORB_ADAPTER_PASSTHRU  {  /* IOPT */
  565.  
  566.   IORBH         iorbh;                       /* IORB Header                */
  567.   USHORT        cSGList;                     /* Count of S/G list elements */
  568.   PSCATGATENTRY pSGList;                     /* far ptr to S/G List        */
  569.   ULONG         ppSGLIST;                    /* physical addr of  S/G List */
  570.   USHORT        ControllerCmdLen;
  571.   PBYTE         pControllerCmd;
  572.   ULONG         ppSCB;              /* phys ptr to SCB for SCB_PASSTHRU    */
  573.   USHORT        Flags;
  574.  
  575. } IORB_ADAPTER_PASSTHRU, FAR *PIORB_ADAPTER_PASSTHRU, NEAR *NPIORB_ADAPTER_PASSTHRU;
  576.  
  577. /*
  578. ** IORB specific flags for IORB_ADAPTER_PASSTHRU->Flags
  579. **
  580. ** Note: These flags apply to IOCM_EXECUTE_CDB
  581. */
  582.  
  583. #define PT_DIRECTION_IN     0x0001           /* Data xfer to host adapter  */
  584.  
  585.  
  586. /*
  587. ** UNIT STATUS IORB                   (for IOCC_UNIT_STATUS)
  588. */
  589.  
  590. typedef struct _IORB_UNIT_STATUS  {        /* IOUS */
  591.  
  592.   IORBH      iorbh;
  593.   USHORT     UnitStatus;
  594.  
  595. } IORB_UNIT_STATUS, FAR *PIORB_UNIT_STATUS, NEAR *NPIORB_UNIT_STATUS;
  596.  
  597.  
  598. /*
  599. ** Unit Status for IORB_UNIT_STATUS->UnitStatus
  600. **
  601. ** Note: These flags apply to IOCM_GET_UNIT_STATUS
  602. */
  603.  
  604. #define US_READY                0x0001          /* Unit ready          */
  605. #define US_POWER                0x0002          /* Unit powered on     */
  606. #define US_DEFECTIVE            0x0004          /* Unit operational    */
  607.  
  608. /*
  609. ** Unit Status for IORB_UNIT_STATUS->UnitStatus
  610. **
  611. ** Note: These flags apply to IOCM_GET_CHANGELINE_STATE
  612. */
  613.  
  614. #define US_CHANGELINE_ACTIVE    0x0001          /* ChangeLine State    */
  615.  
  616.  
  617. /*
  618. ** Unit Status for IORB_UNIT_STATUS->UnitStatus
  619. **
  620. ** Note: These flags apply to IOCM_GET_MEDIA_SENSE
  621. */
  622.  
  623. #define US_MEDIA_UNKNOWN        0x0000          /* Unable to determine media */
  624. #define US_MEDIA_720KB          0x0001          /* 720KB in 3.5" drive       */
  625. #define US_MEDIA_144MB          0x0002          /* 1.44MB in 3.5" drive      */
  626. #define US_MEDIA_288MB          0x0003          /* 2.88MB in 3.5" drive      */
  627.  
  628. /*
  629. ** Unit Status for IORB_UNIT_STATUS->UnitStatus
  630. **
  631. ** Note: These flags apply to IOCM_GET_LOCK_STATE
  632. */
  633.  
  634. #define US_LOCKED               0x0001          /* Unit locked - @V51531 */
  635.  
  636.  
  637. /*
  638. ** DEVICE CONTROL IORB                (for IOCC_DEVICE_CONTROL
  639. */
  640.  
  641.  
  642. typedef struct _IORB_DEVICE_CONTROL   {   /* IODC */
  643.  
  644.   IORBH      iorbh;                       /* IORB Header                */
  645.   USHORT     Flags;
  646.   USHORT     Reserved;
  647.   USHORT     QueueStatus;
  648.   USHORT     (FAR *IRQHandlerAddress)();                             /*@V93531*/
  649.               /* IRQ Handler while suspended */
  650.  
  651. } IORB_DEVICE_CONTROL, FAR *PIORB_DEVICE_CONTROL, NEAR *NPIORB_DEVICE_CONTROL;
  652.  
  653.  
  654. /*
  655. ** IORB specific flags for IORB_DEVICE_CONTROL->Flags
  656. **
  657. ** Note: These flags apply to IOCM_SUSPEND
  658. */
  659.  
  660. #define DC_SUSPEND_DEFERRED      0x0000         /* Suspend after device idle */
  661. #define DC_SUSPEND_IMMEDIATE     0x0001         /* Suspend after current req */
  662. #define DC_SUSPEND_IRQADDR_VALID 0x0002  /* Suspend and notify IRQ *//*@V93531*/
  663.  
  664. #define DC_Queue_Empty          0                                    /*@V93531*/
  665.  
  666. #define MAX_IORB_SIZE   128
  667.  
  668. /*
  669. ** RESOURCE IORB                   (for IOCC_RESOURCE)
  670. */
  671.  
  672. typedef struct _IORB_RESOURCE  {        /* IORS */
  673.  
  674.   IORBH           iorbh;
  675.   USHORT          Flags;
  676.   USHORT          ResourceEntryLen;
  677.   PRESOURCE_ENTRY pResourceEntry;
  678.  
  679. } IORB_RESOURCE, FAR *PIORB_RESOURCE, NEAR *NPIORB_RESOURCE;
  680.  
  681. typedef struct _DMA_ENTRY     NEAR *NPDMA_ENTRY;
  682. typedef struct _DMA_ENTRY     FAR *PDMA_ENTRY;
  683. typedef struct _IRQ_ENTRY     NEAR *NPIRQ_ENTRY;
  684. typedef struct _IRQ_ENTRY     FAR *PIRQ_ENTRY;
  685. typedef struct _PORT_ENTRY    NEAR *NPPORT_ENTRY;
  686. typedef struct _PORT_ENTRY    FAR *PPORT_ENTRY;
  687. typedef struct _MEMORY_ENTRY  NEAR *NPMEMORY_ENTRY;
  688. typedef struct _MEMORY_ENTRY  FAR *PMEMORY_ENTRY;
  689. typedef struct _PCI_IRQ_ENTRY NEAR *NPPCI_IRQ_ENTRY;
  690. typedef struct _PCI_IRQ_ENTRY FAR *PPCI_IRQ_ENTRY;
  691. typedef struct _UNIT_ENTRY    NEAR *NPUNIT_ENTRY;
  692. typedef struct _UNIT_ENTRY    FAR *PUNIT_ENTRY;
  693.  
  694. typedef struct _RESOURCE_ENTRY {        /* RE */
  695.  
  696.   USHORT           Max_Resource_Entry;
  697.   USHORT           cDMA_Entries;   /* Number of DMA entries                  */
  698.   NPDMA_ENTRY      npDMA_Entry;    /* Near pointer to DMA resource entry     */
  699.                                    /* array                                  */
  700.   USHORT           cIRQ_Entries;   /* Number of IRQ entries                  */
  701.   NPIRQ_ENTRY      npIRQ_Entry;    /* Near pointer to IRQ resource entry     */
  702.                                    /* array                                  */
  703.   USHORT           cPort_Entries;  /* Number of Port entries                 */
  704.   NPPORT_ENTRY     npPort_Entry;   /* Near pointer to Port Range resource    */
  705.                                    /* entry array                            */
  706.   USHORT           cMemory_Entries;/* Number of Memory entries               */
  707.   NPMEMORY_ENTRY   npMemory_Entry; /* Near pointer to Memory map resource    */
  708.                                    /* entry array                            */
  709.   USHORT           cPCI_IRQ_Entries;/* Number of PCI IRQ entries             */
  710.   NPIRQ_ENTRY      npPCI_IRQ_Entry;/* Near pointer to PCI IRQ resource entry */
  711.  
  712.   ULONG            Reserved[4];    /* Reserved (Must be zero)                */
  713.  
  714. } RESOURCE_ENTRY;
  715.  
  716. typedef struct _RESOURCE_ENTRY  NEAR *NPRESOURCE_ENTRY;
  717. typedef struct _RESOURCE_ENTRY  FAR *PRESOURCE_ENTRY;
  718.  
  719. /* Max_Resource_Entry will have one of these values. */
  720. #define RE_DMA     1
  721. #define RE_IRQ     2
  722. #define RE_PORT    3
  723. #define RE_MEMORY  4
  724. #define RE_PCI_IRQ 5
  725.  
  726. /* Global Resource Entry Flags */
  727. #define RE_ADAPTER_RESOURCE  0x1000  /* Resource is shared by units on an    */
  728.                                      /* adapter                              */
  729. #define RE_SYSTEM_RESOURCE   0x2000  /* Resource is shared by multiple       */
  730.                                      /* adapters                             */
  731. #define RE_RESOURCE_CONFLICT 0x4000  /* Indicates resource is in conflict    */
  732.                                      /* with another unit's resources        */
  733.  
  734. typedef struct _DMA_ENTRY {          /* DE */
  735.   USHORT     DMA_Flags;              /* DMA Flags                            */
  736.   USHORT     DMA_Width;              /* DMA Width                            */
  737.   USHORT     DMA_Type;               /* DMA Type                             */
  738.   USHORT     DMA_Channel;            /* DMA Channel                          */
  739.   USHORT     DMA_Arbitration_Level;  /* uChannel only                        */
  740. } DMA_ENTRY;
  741.  
  742. /* Resource entry DMA flags */
  743. #define RE_DMA_BUS_MASTER          0x0001 /* set for Bus Master              */
  744.  
  745. /* Resource entry DMA width values */
  746. #define RE_DMA_WIDTH_8_BIT              1 /* set if 8 bit                    */
  747. #define RE_DMA_WIDTH_16_BIT             2 /* set if 16 bit                   */
  748.  
  749. /* Resource entry DMA types */
  750. #define RE_DMA_TYPE_A                   1 /* Type A DMA                      */
  751. #define RE_DMA_TYPE_B                   2 /* Type B DMA                      */
  752. #define RE_DMA_TYPE_F                   3 /* Type F DMA                      */
  753.  
  754. typedef struct _IRQ_ENTRY {        /* IE */
  755.   USHORT          IRQ_Flags;       /* IRQ Flags                              */
  756.   USHORT          IRQ_Value;       /* IRQ Line                               */
  757. } IRQ_ENTRY;
  758.  
  759. /* Resource entry IRQ flags */
  760. #define IRQ_RISING_EDGE_TRIGGERED  0x0001 /* ISA Standard                    */
  761. #define IRQ_FALLING_EDGE_TRIGGERED 0x0002
  762. #define IRQ_LOW_LEVEL_TRIGGERED    0x0004
  763. #define IRQ_HIGH_LEVEL_TRIGGERED   0x0008
  764.  
  765.  
  766. typedef struct _PORT_ENTRY{        /* PE */
  767.   USHORT          Port_Flags;      /* Port Flags                             */
  768.   USHORT          StartPort;       /* Start port of port range               */
  769.   USHORT          cPorts;          /* Number of Byte size ports in range     */
  770. } PORT_ENTRY;
  771.  
  772. typedef struct _MEMORY_ENTRY{      /* ME */
  773.    USHORT         Memory_Flags;    /* Memory Flags                           */
  774.    USHORT         Memory_Width;    /* Memory Width                           */
  775.    ULONG          StartMemory;     /* Start address of memory range          */
  776.    USHORT         cMemory;         /* Number of bytes in Memory range        */
  777. } MEMORY_ENTRY;
  778.  
  779. /* Resource entry Memory flags */
  780. #define MEMORY_WRITEABLE           0x0001  /* memory is writable             */
  781. #define MEMORY_CACHEABLE           0x0002  /* read cacheable, write-through  */
  782. #define MEMORY_SHADOWABLE          0x0004  /* memory is shadowable           */
  783. #define MEMORY_ROM                 0x0008  /* memory is an expansion ROM     */
  784.  
  785. /* Resource entry Memory width values */
  786. #define MEMORY_8_BIT                    1  /* 8 bit memory                   */
  787. #define MEMORY_16_BIT                   2  /* 16 bit memory                  */
  788.  
  789. typedef struct _PCI_IRQ_ENTRY{     /* PCI */
  790.    USHORT         PCI_IRQ_Flags;   /* PCI IRQ Flags                          */
  791.    USHORT         PCI_IRQ_Value;   /* PCI IRQ Line                           */
  792. } PCI_IRQ_ENTRY;
  793.