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/G list */
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_TRACK;
/*--------------------------------------------------------------------------*/
/* 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
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ