I/O Request Block - C Definitions
From EDM2
Reprint Courtesy of International Business Machines Corporation, © International Business Machines Corporation
Following are the I/O request block C language definitions for ADD device support.
/*static char *SCCSID = "@(#)iorb.h 6.2 92/02/20";*/ /****************************************************************************/ /* I/O Request Block (IORB) Structures */ /****************************************************************************/ /* ASM Resolve H2INC references for .INC version of file include iorbtype.inc */ /* Typedefs to resolve forward references */ typedef struct _IORBH IORBH; typedef struct _IORBH FAR *PIORBH; typedef struct _IORBH *NPIORBH; typedef struct _IORBH FAR *PIORB; typedef struct _IORBH *NPIORB; typedef struct _DEVICETABLE DEVICETABLE; typedef struct _DEVICETABLE FAR *PDEVICETABLE; typedef struct _DEVICETABLE *NPDEVICETABLE; typedef struct _UNITINFO UNITINFO; typedef struct _UNITINFO FAR *PUNITINFO; typedef struct _UNITINFO *NPUNITINFO; typedef struct _ADAPTERINFO ADAPTERINFO; typedef struct _ADAPTERINFO FAR *PADAPTERINFO; typedef struct _ADAPTERINFO *NPADAPTERINFO; typedef struct _GEOMETRY GEOMETRY; typedef struct _GEOMETRY FAR *PGEOMETRY; typedef struct _GEOMETRY *NPGEOMETRY; typedef struct _SCATGATENTRY SCATGATENTRY; typedef struct _SCATGATENTRY FAR *PSCATGATENTRY; typedef struct _SCATGATENTRY *NPSCATGATENTRY; /*--------------------------------------------------------------------------*/ /* Interface for calling ADD entry point */ /*--------------------------------------------------------------------------*/ /* VOID FAR *(ADDEP) (PIORBH); */ /*--------------------------------------------------------------------------*/ /* IORB Header */ /*--------------------------------------------------------------------------*/ #define DM_WORKSPACE_SIZE 20 #define ADD_WORKSPACE_SIZE 16 typedef struct _IORBH { /* IOH */ USHORT Length; /* IORB length */ USHORT UnitHandle; /* Unit identifier */ USHORT CommandCode; /* Command code */ USHORT CommandModifier; /* Command modifier */ USHORT RequestControl; /* Request control flags */ USHORT Status; /* Status */ USHORT ErrorCode; /* Error code */ ULONG Timeout; /* Cmd completion timeout(s) */ USHORT StatusBlockLen; /* Status block length */ NPBYTE pStatusBlock; /* Status block */ USHORT Reserved_1; /* Reserved, MBZ */ PIORB pNxtIORB; /* Pointer to next IORB */ PIORB (FAR *NotifyAddress)(PIORB); /* Notification address */ UCHAR DMWorkSpace[DM_WORKSPACE_SIZE]; /* For use by DM */ UCHAR ADDWorkSpace[ADD_WORKSPACE_SIZE]; /* For use by ADD */ } IORBH; /*--------------------------------------------------------------------------*/ /* IORB CommandCode and CommandModifier Codes */ /* Note: CommandCodes are prefixed by IOCC and CommandModifiers */ /* by IOCM. */ /*--------------------------------------------------------------------------*/ /*--------------------------------*/ /* +----M=Mandatory support */ /* | O=Optional support */ /* | */ /* V Notes */ /*--------------------------------*/ #define IOCC_CONFIGURATION 0x0001 /* */ #define IOCM_GET_DEVICE_TABLE 0x0001 /* M */ #define IOCM_COMPLETE_INIT 0x0002 /* O */ /*----------------------------------------*/ #define IOCC_UNIT_CONTROL 0x0002 /* */ #define IOCM_ALLOCATE_UNIT 0x0001 /* M */ #define IOCM_DEALLOCATE_UNIT 0x0002 /* M */ #define IOCM_CHANGE_UNITINFO 0x0003 /* M */ /*----------------------------------------*/ #define IOCC_GEOMETRY 0x0003 /* */ #define IOCM_GET_MEDIA_GEOMETRY 0x0001 /* M */ #define IOCM_SET_MEDIA_GEOMETRY 0x0002 /* O (M) >1 media type */ #define IOCM_GET_DEVICE_GEOMETRY 0x0003 /* M */ #define IOCM_SET_LOGICAL_GEOMETRY 0x0004 /* O (M) CHS addressable */ /*----------------------------------------*/ #define IOCC_EXECUTE_IO 0x0004 /* */ #define IOCM_READ 0x0001 /* M */ #define IOCM_READ_VERIFY 0x0002 /* M */ #define IOCM_READ_PREFETCH 0x0003 /* O */ #define IOCM_WRITE 0x0004 /* M */ #define IOCM_WRITE_VERIFY 0x0005 /* M */ /*----------------------------------------*/ #define IOCC_FORMAT 0x0005 /* */ #define IOCM_FORMAT_MEDIA 0x0001 /* O (M) If HW requires */ #define IOCM_FORMAT_TRACK 0x0002 /* O (M) If HW requires */ #define IOCM_FORMAT_PROGRESS 0x0003 /* O */ #define IOCC_UNIT_STATUS 0x0006 /* */ #define IOCM_GET_UNIT_STATUS 0x0001 /* M */ #define IOCM_GET_CHANGELINE_STATE 0x0002 /* O (Mandatory for diskette) */ #define IOCM_GET_MEDIA_SENSE 0x0003 /* O (Mandatory for diskette) */ #define IOCM_GET_LOCK_STATUS 0x0004 /* M */ /*----------------------------------------*/ #define IOCC_DEVICE_CONTROL 0x0007 /* */ #define IOCM_ABORT 0x0001 /* O (M) SCSI */ #define IOCM_RESET 0x0002 /* O (M) SCSI */ #define IOCM_SUSPEND 0x0003 /* O (M) Floppy driver */ #define IOCM_RESUME 0x0004 /* O (M) Floppy driver */ #define IOCM_LOCK_MEDIA 0x0005 /* M (O) Fixed media only */ #define IOCM_UNLOCK_MEDIA 0x0006 /* M (O) Fixed media only */ #define IOCM_EJECT_MEDIA 0x0007 /* M (O) SCSI and Floppy Driver */ /*----------------------------------------*/ #define IOCC_ADAPTER_PASSTHRU 0x0008 /* */ #define IOCM_EXECUTE_SCB 0x0001 /* O */ #define IOCM_EXECUTE_CDB 0x0002 /* O (M) SCSI adapters */ /*----------------------------------------*/ #define MAX_IOCC_COMMAND IOCC_ADAPTER_PASSTHRU /*--------------------------------------------------------------------------*/ /* Status flags returned in IORBH->Status */ /*--------------------------------------------------------------------------*/ #define IORB_DONE 0x0001 /* 1=Done, 0=In progress */ #define IORB_ERROR 0x0002 /* 1=Error, 0=No error */ #define IORB_RECOV_ERROR 0x0004 /* Recovered error */ #define IORB_STATUSBLOCK_AVAIL 0x0008 /* Status block available */ /*--------------------------------------------------------------------------*/ /* Error Codes returned in IORBH->ErrorCode */ /*--------------------------------------------------------------------------*/ #define IOERR_RETRY 0x8000 #define IOERR_CMD 0x0100 #define IOERR_CMD_NOT_SUPPORTED IOERR_CMD+1 #define IOERR_CMD_SYNTAX IOERR_CMD+2 #define IOERR_CMD_SGLIST_BAD IOERR_CMD+3 #define IOERR_CMD_SW_RESOURCE IOERR_CMD+IOERR_RETRY+4 #define IOERR_CMD_ABORTED IOERR_CMD+5 #define IOERR_CMD_ADD_SOFTWARE_FAILURE IOERR_CMD+6 #define IOERR_CMD_OS_SOFTWARE_FAILURE IOERR_CMD+7 #define IOERR_UNIT 0x0200 #define IOERR_UNIT_NOT_ALLOCATED IOERR_UNIT+1 #define IOERR_UNIT_ALLOCATED IOERR_UNIT+2 #define IOERR_UNIT_NOT_READY IOERR_UNIT+3 #define IOERR_UNIT_PWR_OFF IOERR_UNIT+4 #define IOERR_RBA 0x0300 #define IOERR_RBA_ADDRESSING_ERROR IOERR_RBA+IOERR_RETRY+1 #define IOERR_RBA_LIMIT IOERR_RBA+2 #define IOERR_RBA_CRC_ERROR IOERR_RBA+IOERR_RETRY+3 #define IOERR_MEDIA 0x0400 #define IOERR_MEDIA_NOT_FORMATTED IOERR_MEDIA+1 #define IOERR_MEDIA_NOT_SUPPORTED IOERR_MEDIA+2 #define IOERR_MEDIA_WRITE_PROTECT IOERR_MEDIA+3 #define IOERR_MEDIA_CHANGED IOERR_MEDIA+4 #define IOERR_MEDIA_NOT_PRESENT IOERR_MEDIA+5 #define IOERR_ADAPTER 0x0500 #define IOERR_ADAPTER_HOSTBUSCHECK IOERR_ADAPTER+1 #define IOERR_ADAPTER_DEVICEBUSCHECK IOERR_ADAPTER+IOERR_RETRY+2 #define IOERR_ADAPTER_OVERRUN IOERR_ADAPTER+IOERR_RETRY+3 #define IOERR_ADAPTER_UNDERRUN IOERR_ADAPTER+IOERR_RETRY+4 #define IOERR_ADAPTER_DIAGFAIL IOERR_ADAPTER+5 #define IOERR_ADAPTER_TIMEOUT IOERR_ADAPTER+IOERR_RETRY+6 #define IOERR_ADAPTER_DEVICE_TIMEOUT IOERR_ADAPTER+IOERR_RETRY+7 #define IOERR_ADAPTER_REQ_NOT_SUPPORTED IOERR_ADAPTER+8 #define IOERR_ADAPTER_REFER_TO_STATUS IOERR_ADAPTER+9 #define IOERR_ADAPTER_NONSPECIFIC IOERR_ADAPTER+10 #define IOERR_DEVICE 0x0600 #define IOERR_DEVICE_DEVICEBUSCHECK IOERR_DEVICE+IOERR_RETRY+1 #define IOERR_DEVICE_REQ_NOT_SUPPORTED IOERR_DEVICE+2 #define IOERR_DEVICE_DIAGFAIL IOERR_DEVICE+3 #define IOERR_DEVICE_BUSY IOERR_DEVICE+IOERR_RETRY+4 #define IOERR_DEVICE_OVERRUN IOERR_DEVICE+IOERR_RETRY+5 #define IOERR_DEVICE_UNDERRUN IOERR_DEVICE+IOERR_RETRY+6 #define IOERR_DEVICE_RESET IOERR_DEVICE+7 #define IOERR_DEVICE_NONSPECIFIC IOERR_DEVICE+8 /*--------------------------------------------------------------------------*/ /* Request Control flags in IORBH->RequestControl */ /*--------------------------------------------------------------------------*/ #define IORB_ASYNC_POST 0x0001 /* Asynchronous post enabled */ #define IORB_CHAIN 0x0002 /* IORB chain link enabled */ #define IORB_CHS_ADDRESSING 0x0004 /* CHS fmt addr in RBA field */ #define IORB_REQ_STATUSBLOCK 0x0008 /* Obtain status block data */ #define IORB_DISABLE_RETRY 0x0010 /* Disable retries in ADD */ /*--------------------------------------------------------------------------*/ /* ADAPTER CONFIGURATION IORB (for IOCC_CONFIGURATION) */ /*--------------------------------------------------------------------------*/ typedef struct _IORB_CONFIGURATION { /* IOCFG */ IORBH iorbh; /* IORB header */ DEVICETABLE far *pDeviceTable; /* Far pointer to adapt. dev. table */ USHORT DeviceTableLen ; /* Length of adapter device table */ } IORB_CONFIGURATION, FAR *PIORB_CONFIGURATION, *NPIORB_CONFIGURATION; /* Adapter device table returned by GET_DEVICE_TABLE */ typedef struct _DEVICETABLE { /* IODT */ UCHAR ADDLevelMajor; /* ADD major support level */ UCHAR ADDLevelMinor; /* ADD minor support level */ USHORT ADDHandle; /* ADD handle */ USHORT TotalAdapters; /* Number of adapters supported */ NPADAPTERINFO pAdapter [1]; /* Array of adapter info pointers */ } DEVICETABLE, FAR *PDEVICETABLE; /*--------------------------------------------------------------------------*/ /* Current ADD Level for DEVICETABLE->AddLevelMajor, AddLevelMinor */ /*--------------------------------------------------------------------------*/ #define ADD_LEVEL_MAJOR 0x01 #define ADD_LEVEL_MINOR 0x00 typedef struct _UNITINFO { /* IOUI */ USHORT AdapterIndex; /* nth adapter this driver */ USHORT UnitIndex; /* nth unit on this card */ USHORT UnitFlags; /* Unit flags */ USHORT Reserved; /* Reserved ; must be 0 */ USHORT UnitHandle; /* Assigned by ADD or filter */ USHORT FilterADDHandle; /* Handle of filter ADD 0 = None */ USHORT UnitType; /* Unit type */ USHORT QueuingCount; /* Recommended number to queue */ UCHAR UnitSCSITargetID; /* SCSI target ID (SCSI only) */ UCHAR UnitSCSILUN; /* SCSI log. unit (SCSI only) */ } UNITINFO; /*--------------------------------------------------------------------------*/ /* Unit Flags for UNITINFO->UnitFlags */ /*--------------------------------------------------------------------------*/ #define UF_REMOVABLE 0x0001 /* Media can be removed. */ #define UF_CHANGELINE 0x0002 /* ChangeLine supported */ #define UF_PREFETCH 0x0004 /* Supports prefetch read */ #define UF_A_DRIVE 0x0008 /* Manages A: */ #define UF_B_DRIVE 0x0010 /* Manages B: */ #define UF_NODASD_SUPT 0x0020 /* Suppress DASD Mgr support. */ #define UF_NOSCSI_SUPT 0x0040 /* Suppress SCSI Mgr support. */ #define UF_DEFECTIVE 0x0080 /* Device is defective. */ /*--------------------------------------------------------------------------*/ /* Unit Types for UNITINFO->UnitType */ /*--------------------------------------------------------------------------*/ #define UIB_TYPE_DISK 0x0000 /* All direct access devices */ #define UIB_TYPE_TAPE 0x0001 /* Sequential access devices */ #define UIB_TYPE_PRINTER 0x0002 /* Printer device */ #define UIB_TYPE_PROCESSOR 0x0003 /* Processor type device */ #define UIB_TYPE_WORM 0x0004 /* Write Once/Read Many device */ #define UIB_TYPE_CDROM 0x0005 /* CD ROM device */ #define UIB_TYPE_SCANNER 0x0006 /* Scanner device */ #define UIB_TYPE_OPTICAL_MEMORY 0x0007/* Some optical disk */ #define UIB_TYPE_CHANGER 0x0008 /* Changer device (such as juke box) */ #define UIB_TYPE_COMM 0x0009 /* Communication devices */ typedef struct _ADAPTERINFO { /* IOAI */ UCHAR AdapterName [17]; /* Adapter name ASCIIZ string */ UCHAR Reserved; /* */ USHORT AdapterUnits; /* Number of units this adapter */ USHORT AdapterDevBus; /* Bus Type - Adapter to device */ UCHAR AdapterIOAccess; /* I/O Type - Adapter to host */ UCHAR AdapterHostBus; /* Bus Type - Adapter to host */ UCHAR AdapterSCSITargetID;/* Adapter SCSI target ID */ UCHAR AdapterSCSILUN; /* Adapter SCSI LUN */ USHORT AdapterFlags; USHORT MaxHWSGList; /* Max HW S/G list entries */ ULONG MaxCDBTransferLength;/* Max data length for CDBs */ UNITINFO UnitInfo [1]; /* Unit info for each unit */ } ADAPTERINFO; /*--------------------------------------------------------------------------*/ /* Adapter Flags for ADAPTERINFO->AdapterFlags */ /*--------------------------------------------------------------------------*/ #define AF_16M 0x0001 /* Supports > 16M addresses */ #define AF_IBM_SCB 0x0002 /* Supports IBM SCB commands */ #define AF_HW_SCATGAT 0x0004 /* Supports scatter/gather in HW */ #define AF_CHS_ADDRESSING 0x0008 /* Supports CHS addressing in HW */ #define AF_ASSOCIATED_DEVBUS 0x0010 /* Supports > 1 Device Bus */ /*--------------------------------------------------------------------------*/ /* Adapter-to-Device protocol for ADAPTERINFO->AdapterDevBus */ /*--------------------------------------------------------------------------*/ #define AI_DEVBUS_OTHER 0x0000 #define AI_DEVBUS_ST506 0x0001 /* ST-506 CAM-I */ #define AI_DEVBUS_ST506_II 0x0002 /* ST-506 CAM-II */ #define AI_DEVBUS_ESDI 0x0003 /* ESDI */ #define AI_DEVBUS_FLOPPY 0x0004 /* Diskette */ #define AI_DEVBUS_SCSI_1 0x0005 #define AI_DEVBUS_SCSI_2 0x0006 #define AI_DEVBUS_SCSI_3 0x0007 #define AI_DEVBUS_NONSCSI_CDROM 0x0008 /* Non-SCSI CD-ROM interface bus */ /*--------------------------------------------------------------------------*/ /* Note: One of the following BUS WIDTH indicators must be */ /* OR'd with the above field. */ /*--------------------------------------------------------------------------*/ #define AI_DEVBUS_FAST_SCSI 0x0100 #define AI_DEVBUS_8BIT 0x0200 #define AI_DEVBUS_16BIT 0x0400 #define AI_DEVBUS_32BIT 0x0800 /*--------------------------------------------------------------------------*/ /* Adapter-to-Device protocol for ADAPTERINFO->AdapterIOAccess */ /*--------------------------------------------------------------------------*/ #define AI_IOACCESS_OTHER 0x00 #define AI_IOACCESS_BUS_MASTER 0x01 #define AI_IOACCESS_PIO 0x02 #define AI_IOACCESS_DMA_SLAVE 0x04 #define AI_IOACCESS_MEMORY_MAP 0x08 /*--------------------------------------------------------------------------*/ /* Adapter-to-Host bus type for ADAPTERINFO->AdapterHostBus */ /*--------------------------------------------------------------------------*/ #define AI_HOSTBUS_OTHER 0x00 #define AI_HOSTBUS_ISA 0x01 #define AI_HOSTBUS_EISA 0x02 #define AI_HOSTBUS_uCHNL 0x03 #define AI_HOSTBUS_UNKNOWN 0x0f /*--------------------------------------------------------------------------*/ /* Note: One of the following BUS WIDTH indicators must be */ /* OR'd with the above field. */ /*--------------------------------------------------------------------------*/ #define AI_BUSWIDTH_8BIT 0x10 #define AI_BUSWIDTH_16BIT 0x20 #define AI_BUSWIDTH_32BIT 0x30 #define AI_BUSWIDTH_64BIT 0x40 #define AI_BUSWIDTH_UNKNOWN 0xf0 /****************************************************************************/ /* UNIT CONTROL IORB (for IOCC_UNIT_CONTROL) */ /****************************************************************************/ typedef struct _IORB_UNIT_CONTROL { /* IOUC */ IORBH iorbh; /* IORB Header */ USHORT Flags; /* */ PUNITINFO pUnitInfo; /* For: IOCM_CHANGE_UNITINFO */ USHORT UnitInfoLen; /* Length of UnitInfo structure */ } IORB_UNIT_CONTROL, FAR *PIORB_UNIT_CONTROL, *NPIORB_UNIT_CONTROL; /****************************************************************************/ /* DASD GEOMETRY IORB (for IOCC_GEOMETRY) */ /****************************************************************************/ typedef struct _IORB_GEOMETRY { /* IOGG */ IORBH iorbh; /* IORB header */ PGEOMETRY pGeometry; /* Far pointer to GEOMETRY block */ USHORT GeometryLen; /* Length of GEOMETRY block */ } IORB_GEOMETRY, FAR *PIORB_GEOMETRY, *NPIORB_GEOMETRY; typedef struct _GEOMETRY { /* IOG */ ULONG TotalSectors; USHORT BytesPerSector; USHORT Reserved; USHORT NumHeads; ULONG TotalCylinders; USHORT SectorsPerTrack; } GEOMETRY, FAR *PGEOMETRY, *NPGEOMETRY; /****************************************************************************/ /* Scatter/Gather List Entry */ /****************************************************************************/ typedef struct _SCATGATENTRY { /* IOSG */ ULONG ppXferBuf; /* Physical pointer to xfer buffer */ ULONG XferBufLen; /* Length of transfer buffer */ } SCATGATENTRY, FAR *PSCATGATENTRY, *NPSCATGATENTRY; #define MAXSGLISTSIZE (sizeof(SCATGATENTRY)) * 16 /****************************************************************************/ /* EXECUTE_IO IORB (for IOCC_EXECUTE_IO) */ /****************************************************************************/ typedef struct _IORB_EXECUTEIO { /* IOXIO */ IORBH iorbh; /* IORB header */ USHORT cSGList; /* Count of S/G list elements */ PSCATGATENTRY pSGList; /* Far pointer to s/g list */ ULONG ppSGList; /* Phys. address of S/G list */ ULONG RBA; /* RBA starting address */ USHORT BlockCount; /* Block count */ USHORT BlocksXferred; /* Block done count */ USHORT BlockSize; /* Size of a block in bytes */ USHORT Flags; } IORB_EXECUTEIO, FAR *PIORB_EXECUTEIO, *NPIORB_EXECUTEIO; /****************************************************************************/ /* CHS Direct Addressing (Overlays RBA field) */ /****************************************************************************/ typedef struct _CHS_ADDR { /* IOCHS */ USHORT Cylinder; UCHAR Head; UCHAR Sector; } CHS_ADDR, FAR *PCHS_ADDR, *NPCHS_ADDR; /*--------------------------------------------------------------------------*/ /* IORB specific flags for IORB EXECUTE_IO->Flags */ /*--------------------------------------------------------------------------*/ #define XIO_DISABLE_HW_WRITE_CACHE 0x0001 #define XIO_DISABLE_HW_READ_CACHE 0x0002 /****************************************************************************/ /* FORMAT IORB (for IOCC_FORMAT) */ /****************************************************************************/ typedef struct _IORB_FORMAT { /* IOFMT */ IORBH iorbh; /* IORB Header */ USHORT cSGList; /* Count of S/G list elements */ PSCATGATENTRY pSGList; /* Far pointer to s/g list */ ULONG ppSGList; /* Phys. address of S/Glist */ USHORT FormatCmdLen; /* */ PBYTE pFormatCmd; /* SCSI CDB or track fmt cmd */ UCHAR Reserved_1 [8]; /* Reserved; must not be modified */ } IORB_FORMAT, FAR *PIORB_FORMAT, *NPIORB_FORMAT; typedef struct _FORMAT_CMD_TRACK { /* FMCT */ USHORT Flags; ULONG RBA; USHORT cTrackEntries; } FORMAT_CMD_TRACK, FAR *PFORMAT_CMD_TRACK, *NPFORMAT_CMD_TRAC ; /*--------------------------------------------------------------------------*/ /* Flags for FORMAT_CMD_TRACK->Flags */ /*--------------------------------------------------------------------------*/ #define FF_VERIFY 0x0001 /* Verify sectors after formatting. */ /****************************************************************************/ /* ADAPTER PASS THROUGH IORB (for IOCC_ADAPTER_PASSTHRU) */ /****************************************************************************/ typedef struct _IORB_ADAPTER_PASSTHRU { /* IOPT */ IORBH iorbh; /* IORB header */ USHORT cSGList; /* Count of S/G list elements */ PSCATGATENTRY pSGList; /* Far pointer to s/g list */ ULONG ppSGLIST; /* Phys. address of S/G list */ USHORT ControllerCmdLen; PBYTE pControllerCmd; ULONG ppSCB; /* Phys. pointer to SCB for SCB_PASSTHRU */ USHORT Flags; } IORB_ADAPTER_PASSTHRU, FAR *PIORB_ADAPTER_PASSTHRU, *NPIORB_ADAPTER_PASSTHRU; /*--------------------------------------------------------------------------*/ /* IORB specific flags for IORB_ADAPTER_PASSTHRU->Flags */ /* */ /* Note: These flags apply to IOCM_EXECUTE_CDB. */ /*--------------------------------------------------------------------------*/ #define PT_DIRECTION_IN 0x0001 /* Data xfer to host adapter */ /****************************************************************************/ /* UNIT STATUS IORB (for IOCC_UNIT_STATUS) */ /****************************************************************************/ typedef struct _IORB_UNIT_STATUS { /* IOUS */ IORBH iorbh ; USHORT UnitStatus ; } IORB_UNIT_STATUS, FAR *PIORB_UNIT_STATUS, *NPIORB_UNIT_STATUS; /*--------------------------------------------------------------------------*/ /* Unit Status for IORB_UNIT_STATUS->UnitStatus */ /* */ /* Note: These flags apply to IOCM_GET_UNIT_STATUS */ /*--------------------------------------------------------------------------*/ #define US_READY 0x0001 /* Unit ready */ #define US_POWER 0x0002 /* Unit powered on */ #define US_DEFECTIVE 0x0004 /* Unit operational */ /*--------------------------------------------------------------------------*/ /* Unit Status for IORB_UNIT_STATUS->UnitStatus */ /* */ /* Note: These flags apply to IOCM_GET_CHANGELINE_STATE */ /*--------------------------------------------------------------------------*/ #define US_CHANGELINE_ACTIVE 0x0001 /* ChangeLine state */ /*--------------------------------------------------------------------------*/ /* Unit Status for IORB_UNIT_STATUS->UnitStatus */ /* */ /* Note: These flags apply to IOCM_GET_MEDIA_SENSE */ /*--------------------------------------------------------------------------*/ #define US_MEDIA_UNKNOWN 0x0000 /* Unable to determine media */ #define US_MEDIA_720KB 0x0001 /* 720KB in 3.5" drive */ #define US_MEDIA_144MB 0x0002 /* 1.44MB in 3.5" drive */ #define US_MEDIA_288MB 0x0003 /* 2.88MB in 3.5" drive */ /****************************************************************************/ /* DEVICE CONTROL IORB (for IOCC_DEVICE_CONTROL */ /****************************************************************************/ typedef struct _IORB_DEVICE_CONTROL { /* IODC */ IORBH iorbh; /* IORB header */ USHORT Flags; USHORT Reserved; } IORB_DEVICE_CONTROL, FAR *PIORB_DEVICE_CONTROL, *NPIORB_DEVICE_CONTROL; /*--------------------------------------------------------------------------*/ /* IORB-specific flags for IORB_DEVICE_CONTROL->Flags */ /* */ /* Note: These flags apply to IOCM_SUSPEND */ /*--------------------------------------------------------------------------*/ #define DC_SUSPEND_DEFERRED 0x0000 /* Suspend after device idle */ #define DC_SUSPEND_IMMEDIATE 0x0001 /* Suspend after current request */ #define MAX_IORB_SIZE 128 |