home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ddrivers.zip
/
INCLUDE
/
ABIOS.H
next >
Wrap
Text File
|
1992-12-23
|
42KB
|
884 lines
// ABIOS Entry Point Codes
#define ABIOS_EP_START 0x00
#define ABIOS_EP_INTERRUPT 0x01
#define ABIOS_EP_TIMEOUT 0x02
// ABIOS Function Codes
#define ABFC_DEFAULT_INT_HANDLER 0x00
#define ABFC_RET_LID_PARMS 0x01
#define ABFC_READ_DEVICE_PARMS 0x03
#define ABFC_SET_DEVICE_PARMS 0x04
#define ABFC_RESET_DEVICE 0x05
// ABIOS Function Codes Specific to Diskette - Device ID 0x01
#define ABFC_DSKT_RESET_INTERRUPT 0x07
#define ABFC_DSKT_READ 0x08
#define ABFC_DSKT_WRITE 0x09
#define ABFC_DKST_FORMAT 0x0A
#define ABFC_DSKT_VERIFY 0x0B
#define ABFC_DSKT_READ_MEDIA_PARMS 0x0C
#define ABFC_DSKT_SET_MEDIA_TYPE 0x0D
#define ABFC_DSKT_READ_CHGSIGNAL 0x0E
#define ABFC_DSKT_TURN_OFF_MOTOR 0x0F
#define ABFC_DKST_INT_STATUS 0x10
#define ABFC_DSKT_GET_MEDIA_TYPE 0x11
// ABIOS Function Codes Specific to Fixed Disk - Device ID 0x02
#define ABFC_DISK_READ 0x08
#define ABFC_DISK_WRITE 0x09
#define ABFC_DISK_WRITE_VERIFY 0x0A
#define ABFC_DISK_VERIFY 0x0B
#define ABFC_DISK_INTERRUPT_STATUS 0x0C
#define ABFC_DISK_SET_DMA_PACING 0x10
#define ABFC_DISK_RET_DMA_PACING 0x11
#define ABFC_DISK_TRANSFER_SCB 0x12
#define ABFC_DISK_DEALLOC_LID 0x14
#define ABFC_DISK_GET_SCSI_PARMS 0x1A
// ABIOS Function Codes Specific to the SCSI Adapter - Device ID 0x17
#define ABFC_SCSIA_RET_DEVICE_CONFIG 0x0B
#define ABFC_SCSIA_RET_INTERRUPT_LID 0x0C
#define ABFC_SCSIA_ENABLE_CACHE 0x0D // ????
#define ABFC_SCSIA_DISABLE_CACHE 0x0E // ????
#define ABFC_SCSIA_CACHE_STATUS 0x0F // ????
#define ABFC_SCSIA_SET_DMA_PACING 0x10
#define ABFC_SCSIA_RET_DMA_PACING 0x11
#define ABFC_SCSIA_TRANSFER_SCB 0x12
// ABIOS Function Codes Specific to the SCSI Peripheral Type - Device ID 0x18
#define ABFC_SCSIP_SET_DEV_TIMEOUT 0x10
#define ABFC_SCSIP_READ_DEV_TIMEOUT 0x11
#define ABFC_SCSIP_TRANSFER_SCB 0x12
#define ABFC_SCSIP_DEALLOC_SCSI_DEV 0x14
#define ABFC_SCSIP_ALLOC_SCSI_DEV 0x15
#define ABFC_SCSIP_RET_TYPE_COUNT 0x16
#define ABFC_SCSIP_ABORT 0x17
// ABIOS Request Block Header
typedef struct _ABRBH { // ABH
USHORT Length; // 00H - Request Block Length
USHORT LID; // 02H - Logical ID
USHORT Unit; // 04H - Unit
USHORT Function; // 06H - Function
ULONG Reserved_1; // 08H - Reserved
USHORT RC; // 0CH - Return Code
USHORT Timeout; // 0EH - Time-Out
} ABRBH;
typedef ABRBH near *NPABRBH;
// Return LID Parms - 0x01
typedef struct _ABRB_RETLIDPARMS { // ABRLP
ABRBH abrbh; // 00H - Request Block Header
UCHAR HwIntLevel; // 10H - Hardware Interrupt Level
UCHAR ArbLevel; // 11H - Arbitration Level
USHORT DeviceID; // 12H - Device ID
USHORT cUnits; // 14H - Count of Units
USHORT LIDFlags; // 16H - Logical ID Flags
USHORT RBLength; // 18H - Request Block Length
UCHAR SecDeviceID; // 1AH - Secondary Device ID
UCHAR Revision; // 1BH - Revision
ULONG Reserved_1; // 1CH - Reserved, MBZ
} ABRB_RETLIDPARMS;
typedef ABRB_RETLIDPARMS near *NPABRB_RETLIDPARMS;
#define LF_16MB_SUPPORT 0x0020
#define LF_CONCURRENT 0x0008
#define LF_PHYSICAL_PTRS 0x0002
#define LF_LOGICAL_PTRS 0x0001
// Diagnostics
typedef struct _ABRBDIAGS { // ABD
UCHAR Reserved_5; // Reserved
UCHAR ErrorLogLength; // Error log length
UCHAR IntLevel; // Interrupt level
UCHAR ArbLevel; // Arbitration level
USHORT DeviceID; // Device ID
UCHAR CmdtoCtrlr; // Command to controller
UCHAR St0; //
UCHAR St1; //
UCHAR St2; //
UCHAR Cylinder; //
UCHAR Head; //
UCHAR Sector; //
UCHAR SectorSize; //
} ABRBDIAGS;
// Read Device Parms (Diskette) 0x03
typedef struct _ABRB_DSKT_READDEVPARMS { // AB1RDP
ABRBH abrbh; // 00H - Request Block Header
USHORT SectorsPerTrack; // 10H - Sectors per track
USHORT BlockSize; // 12H - Size of sector in bytes
USHORT DevCtrlFlags; // 14H - Device Control Flags
USHORT UnitType; // 16H - Diskette Unit Type
USHORT Reserved_1; // 18H - Reserved, MBZ
USHORT Undefined_1; // 1AH - Undefined
ULONG MotorOffTime; // 1CH - Motor off time (usecs)
ULONG MotorStartTime; // 20H - Motor start time (usecs)
USHORT Undefined_2; // 24H - Undefined
USHORT cCylinders; // 26H - Max Cylinders for drive
USHORT Undefined_3; // 28H - Undefined
UCHAR cHeads; // 2AH - Number of heads
UCHAR RetryCount; // 2BH - Recommended retry count
UCHAR FillByte; // 2CH - Fill byte for format
ULONG HeadSettleTime; // 2DH - Head Settle Time
UCHAR ReadGap; // 31H - Gap length for RWV
UCHAR FormatGap; // 32H - Gap length for format
UCHAR DataLen; // 33H - Data Length
} ABRB_DSKT_READDEVPARMS;
typedef ABRB_DSKT_READDEVPARMS near *NPABRB_DSKT_READDEVPARMS;
// BlockSize equates in ABRB_DSKT_READDEVPARMS & ABRB_DSKT_SETDEVPARMS
#define DP_BLOCKSIZE_256 0x01 // 256 bytes per sector
#define DP_BLOCKSIZE_512 0x02 // 512 bytes per sector
// DevCtrlFlag equates in ABRB_DSKT_READDEVPARMS
#define DP_ABDEFGAPLEN 0x0040 // ABIOS defines FORMAT GAP
#define DP_RECALREQUIRED 0x0008 // Recalibrate is required
#define DP_CONCURRENT_DSKT 0x0004 // Current diskette unit
#define DP_FORMATSUPPORTED 0x0002 // Format Unit supported
#define DP_CHANGELINE_AVAIL 0x0001 // Change line avail on drive
// UnitType equates in ABRB_DSKT_READDEVPARMS
#define DP_DRIVENOTPRES 0x00 // Drive not present
#define DP_DRIVETYPE_360KB 0x01 // 360 KB diskette drive
#define DP_DRIVETYPE_12OOKB 0x02 // 1.2 MB diskette drive
#define DP_DRIVETYPE_720KB 0x03 // 720 KB diskette drive
#define DP_DRIVETYPE_144OKB 0x04 // 1.44 MB diskette drive
#define DP_DRIVETYPE_2880KB 0x06 // 2.88 MB diskette drive
// Set Device Parms (Diskette) 0x04
typedef struct _ABRB_DSKT_SETDEVPARMS { // AB1SDP
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
USHORT BlockSize; // 12H - Block Size
UCHAR Undefined_1[29]; // 14H - Undefined
UCHAR ReadGap; // 31H - Gap length for RWV
UCHAR Undefined_2; // 32H - Undefined
UCHAR DataLen; // 33H - Data Length
} ABRB_DSKT_SETDEVPARMS;
typedef ABRB_DSKT_SETDEVPARMS near *NPABRB_DSKT_SETDEVPARMS;
// Reset/Initialize (Diskette) 0x05
typedef struct _ABRB_DSKT_RESET { // AB1RS
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
} ABRB_DSKT_RESET;
typedef ABRB_DSKT_RESET near *NPABRB_DSKT_RESET;
// Disable Interrupt (Diskette) 0x07
typedef struct _ABRB_DISABLE { // AB1DI
ABRBH abrbh; // 00H - Request Block Header
UCHAR Undefined_1[8]; // 10H - Undefined
USHORT Reserved_1; // 18H - Reserved, MBZ
} ABRB_DSKT_DISABLE;
typedef ABRB_DSKT_DISABLE near *NPABRB_DSKT_DISABLE;
// Read, Write, Verify (Diskette) 0x08,0x09,0x0B
typedef struct _ABRB_DSKT_RWV { // AB1RWV
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
ULONG pIObuffer; // 12H - Logical ptr to I/O buffer
ULONG Reserved_2; // 16H - Reserved, MBZ
ULONG ppIObuffer; // 1AH - Physical ptr to I/O buffer
USHORT Reserved_3; // 1EH - Reserved, MBZ
ULONG WaitTime; // 20H - Wait time before resuming
USHORT cSectors; // 24H - Count of sectors to xfer
USHORT Cylinder; // 26H - Cylinder number (0-based)
USHORT Undefined_1; // 28H - Undefined
UCHAR Head; // 2AH - Head number (0-based)
UCHAR Undefined_2[6]; // 2BH - Undefined
USHORT Sector; // 31H - Sector number (1-based)
ABRBDIAGS DiagS; // 33H - Diagnostic status
} ABRB_DSKT_RWV;
typedef ABRB_DSKT_RWV near *NPABRB_DSKT_RWV;
// Format (Diskette) 0x0A
typedef struct _ABRB_DSKT_FORMAT { // AB1FMT
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
ULONG pFormatTable; // 12H - Log ptr to format table
ULONG Reserved_2; // 16H - Reserved, MBZ
ULONG ppFormatTable; // 1AH - Phys ptr to format table
USHORT Reserved_3; // 1EH - Reserved, MBZ
ULONG WaitTime; // 20H - Wait time before resuming
USHORT Subfunction; // 24H - Subfunction number
USHORT Cylinder; // 26H - Cylinder number (0-based)
USHORT Undefined_1; // 28H - Undefined
UCHAR Head; // 2AH - Head number (0-based)
} ABRB_DSKT_FMT;
typedef ABRB_DSKT_FMT near *NPABRB_DSKT_FMT;
// Read Media Parms (Diskette) 0x0C
typedef struct _ABRB_DSKT_READMEDIAPARMS { // AB1RMP
ABRBH abrbh; // 00H - Request Block Header
USHORT SectorsPerTrack; // 10H - Sectors per track
USHORT BlockSize; // 12H - Size of sector in bytes
USHORT Undefined_1; // 14H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[14]; // 18H - Undefined
USHORT cCylinders; // 26H - Number of cylinders
USHORT Undefined_3; // 28H - Undefined
UCHAR cHeads; // 2AH - Number of heads
UCHAR Undefined_4[6]; // 2BH - Undefined
UCHAR ReadGap; // 31H - Gap length for RWV
UCHAR FormatGap; // 32H - Gap length for format
UCHAR DataLen; // 33H - Data Length
} ABRB_DSKT_READMEDIAPARMS;
typedef ABRB_DSKT_READMEDIAPARMS near *NPABRB_DSKT_READMEDIAPARMS;
// Set Media Type for Format (Diskette) 0x0D
typedef struct _ABRB_DSKT_SETMEDIATYPE { // AB1SMT
ABRBH abrbh; // 00H - Request Block Header
USHORT SectorsPerTrack; // 10H - Sectors per track
USHORT BlockSize; // 12H - Size of sector in bytes
USHORT Undefined_1; // 14H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[8]; // 18H - Undefined
ULONG WaitTime; // 20H - Wait time before resuming
USHORT Undefined_3; // 24H - Undefined
USHORT cTracks; // 26H - Number of tracks to format
ULONG Undefined_4; // 28H - Undefined
UCHAR FillByte; // 2CH - Fill byte for format
UCHAR Undefined_5[5]; // 2DH - Undefined
UCHAR FormatGap; // 32H - Gap length for format
} ABRB_DSKT_SETMEDIATYPE;
typedef ABRB_DSKT_SETMEDIATYPE near *NPABRB_DSKT_SETMEDIATYPE;
// Read Change Line Status (Diskette) 0x0E
typedef struct _ABRB_DSKT_READCHGLINE { // AB1RCL
ABRBH abrbh; // 00H - Request Block Header
UCHAR ChangeLineStatus; // 10H - Change Line status
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DSKT_READCHGLINE;
typedef ABRB_DSKT_READCHGLINE near *NPABRB_DSKT_READCHGLINE;
// ChangeLineStatus equates in ABRB_DSKT_REACHGLINE
#define CHANGELINE_INACTIVE 0x00 // Change Line Inactive
#define CHANGELINE_ACTIVE 0x06 // Change Line Active
// Turn Off Motor (Diskette) 0x0F
typedef struct _ABRB_DSKT_MOTOROFF { // AB1MO
ABRBH abrbh; // 00H - Request Block Header
UCHAR Undefined_1[6]; // 10H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DSKT_MOTOROFF;
typedef ABRB_DSKT_MOTOROFF near *NPABRB_DSKT_MOTOROFF;
// Interrupt Status (Diskette) 0x10
typedef struct _ABRB_DSKT_INTRSTATUS { // AB1IS
ABRBH abrbh; // 00H - Request Block Header
UCHAR InterruptStatus; // 10H - Interrupt Status
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DSKT_INTRSTATUS;
typedef ABRB_DSKT_INTRSTATUS near *NPABRB_DSKT_INTRSTATUS;
// InterruptStatus equates in ABRB_DSKT_INTRSTATUS
#define NO_INTERRUPT 0x00 // No Interrupt
#define INTERRUPT_PENDING 0x01 // Interrupt Pending
// Get Media Type (Diskette) 0x11
typedef struct _ABRB_DSKT_GETMEDIATYPE { // AB1GMT
ABRBH abrbh; // 00H - Request Block Header
UCHAR MediaType; // 10H - Diskette Media Type
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DSKT_GETMEDIATYPE;
typedef ABRB_DSKT_GETMEDIATYPE near *NPABRB_DSKT_GETMEDIATYPE;
// MediaType equates in ABRB_DSKT_GETMEDIATYPE
#define MEDIA1MB 0x03
#define MEDIA2MB 0x04
#define MEDIA4MB 0x06
// Read Device Parms (Fixed Disk) 0x03
typedef struct _ABRB_DISK_READDEVPARMS { // AB2RDP
ABRBH abrbh; // 00H - Request Block Header
USHORT SectorsPerTrack; // 10H - Sectors per track
USHORT BlockSize; // 12H - Size of sector in bytes
USHORT DevCtrlFlags; // 14H - Device Control Flags
UCHAR LUN; // 16H - Logical Unit Number (SCSI)
UCHAR Undefined_1; // 17H - Undefined
ULONG cCylinders; // 18H - Count of cylinders
UCHAR cHead; // 1CH - Count of heads
UCHAR RetryCount; // 1DH - Suggested retry count
USHORT Undefined_2; // 1EH - Undefined
ULONG cRBA; // 20H - Count of RBAs on this unit
ULONG Reserved_1; // 24H - Reserved
USHORT Reserved_2; // 28H - Reserved
USHORT Undefined_3; // 2AH - Undefined
USHORT MaxXferCount; // 2CH - Max blocks per transfer
} ABRB_DISK_READDEVPARMS;
typedef ABRB_DISK_READDEVPARMS near *NPABRB_DISK_READDEVPARMS;
// DevCtrlFlag equates in ABRB_DISK_READDEVPARMS
#define DP_SCBXFER 0x8000 // SCB Transfer Function supported
#define DP_SCSI_DEVICE 0x4000 // Drive is SCSI device
#define DP_FORMAT_UNIT 0x1000 // Format Unit supported
#define DP_FORMAT_TRACK 0x0800 // Format Track supported
#define DP_ST506 0x0400 // Drive is ST506 device
#define DP_CONCURRENT_DISK 0x0200 // Concurrent disk unit per LID
#define DP_EJECTABLE 0x0100 // Ejectable unit
#define DP_MEDIA_ORGANIZATION 0x0080 // 0=Random, 1=Sequential
#define DP_LOCKING_AVAIL 0x0040 // Locking capability supported
#define DP_READABLE 0x0020 // Unit is readable
#define DP_CACHE_AVAIL 0x0010 // Caching is supported
#define DP_WRITE_FREQUENCY 0x0008 // 0=Write once, 1=Write many
#define DP_CHGLINE_DISK 0x0004 // Change line supported
#define DP_POWER 0x0002 // 0=Power on, 1=Power off
#define DP_LOGDATAPTR 0x0001 // Device needs logical data poineter
// Reset/Initialize (Disk) 0x05
typedef struct _ABRB_DISK_RESET { // AB2RS
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
UCHAR Undefined_1[22]; // 12H - Undefined
ULONG WaitTime; // 28H - Wait time before resuming
} ABRB_DISK_RESET;
typedef ABRB_DISK_RESET near *NPABRB_DISK_RESET;
// Read, Write, WriteVerify, Verify (Fixed Disk) 0x08,0x09,0x0A,0x0B
typedef struct _ABRB_DISK_RWV { // AB2RWV
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
ULONG pIObuffer; // 12H - Logical ptr to I/O buffer
USHORT Reserved_2; // 16H - Reserved, MBZ
USHORT Reserved_3; // 18H - Reserved, MBZ
ULONG ppIObuffer; // 1AH - Physical ptr to I/O buffer
USHORT Reserved_4; // 1EH - Reserved, MBZ
ULONG RBA; // 20H - RBA
ULONG Reserved_5; // 24H - Reserved, MBZ
ULONG WaitTime; // 28H - Wait time before resuming
USHORT cBlocks; // 2CH - Count of blocks to xfer
UCHAR Flags; // 2EH - Flags
USHORT SoftError; // 2FH - Soft error word
} ABRB_DISK_RWV;
typedef ABRB_DISK_RWV near *NPABRB_DISK_RWV;
// Flags equates in ABRB_DSKT_RWV
#define RW_DONT_CACHE 0x01 // Dont cache this request
// Interrupt Status (Disk) 0x0C
typedef struct _ABRB_DISK_INTRSTATUS { // AB2IS
ABRBH abrbh; // 00H - Request Block Header
UCHAR InterruptStatus; // 10H - Interrupt Status
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DISK_INTRSTATUS;
typedef ABRB_DISK_INTRSTATUS near *NPABRB_DISK_INTRSTATUS;
// InterruptStatus equates in ABRB_DISK_INTRSTATUS
#define NO_INTERRUPT 0x00 // No Interrupt
#define INTERRUPT_PENDING 0x01 // Interrupt Pending
// Set DMA Pacing (Disk) 0x10
typedef struct _ABRB_DISK_SETDMAPACING { // AB2SDMA
ABRBH abrbh; // 00H - Request Block Header
UCHAR DMAPacing; // 10H - DMA Pacing value
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[16]; // 18H - Undefined
ULONG WaitTime; // 28H - Wait Time before resuming
} ABRB_DISK_SETDMAPACING;
typedef ABRB_DISK_SETDMAPACING near *NPABRB_DISK_SETDMAPACING;
// Return DMA Pacing (Disk) 0x11
typedef struct _ABRB_DISK_RETDMAPACING { // AB2RDMA
ABRBH abrbh; // 00H - Request Block Header
UCHAR DMAPacing; // 10H - Current DMA pacing value
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DISK_RETDMAPACING;
typedef ABRB_DISK_RETDMAPACING near *NPABRB_DISK_RETDMAPACING;
#ifndef INCL_NO_SCB
// Transfer SCB Request Block (Disk) 0x12
typedef struct _ABRB_DISK_XFERSCB { // AB2XSCB
ABRBH abrbh; // 00H - Request Block Header
ULONG ppSCB; // 10H - physical pointer to SCB
USHORT Reserved_1; // 14H - reserved, MBZ
PSCBHDR pSCBHdr; // 16H - logical pointer to SCB hdr
USHORT Undefined_1; // 1AH - Undefined
USHORT Reserved_2; // 1CH - reserved, MBZ
PSCBHDR pLastSCBHdr; // 1EH - logical ptr to last SCB hdr
ULONG Undefined_2; // 22H - Undefined
USHORT Reserved_3; // 26H - reserved, MBZ
ULONG WaitTime; // 28H - Wait time before resuming
USHORT Reserved_4; // 2CH - reserved, MBZ
UCHAR Flags; // 2EH - bits 7-1 reserved
// bit 0: 0-normal length SCB
// 1-long SCB
USHORT SoftError; // 2FH - Soft error word
UCHAR Undefined_3; // 31H - Undefined
UCHAR Status; // 32H - bits 7-1 reserved
// bit 0: 0-last SCB field not valid
// 1-last SCB field valid
} ABRB_DISK_XFERSCB;
typedef ABRB_DISK_XFERSCB near *NPABRB_DISK_XFERSCB;
#endif
// Deallocate LID (Disk) 0x14
typedef struct _ABRB_DISK_DEALLOCLID { // AB2DL
ABRBH abrbh; // 00H - Request Block Header
USHORT Undefined_1; // 10H - Undefined
USHORT SCSIdisknum; // 12H - SCSI disk number
USHORT Undefined_2; // 14H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_DISK_DEALLOCLID;
typedef ABRB_DISK_DEALLOCLID near *NPABRB_DISK_DEALLOCLID;
// Get SCSI Parms (Disk) 0x1A
typedef struct _ABRB_DISK_GETSCSIPARMS { // AB2GSP
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved
UCHAR PUN; // 12H - SCSI PUN
UCHAR LUN; // 13H - SCSI LUN
UCHAR LDN; // 14H - SCSI LDN
UCHAR AdapterIndex; // 15H - SCSI Adapter Index
USHORT Port; // 16H - SCSI base port address
} ABRB_DISK_GETSCSIPARMS;
typedef ABRB_DISK_GETSCSIPARMS near *NPABRB_DISK_GETSCSIPARMS;
// Reset/Initialize Adapter (SCSIA) 0x05
typedef struct _ABRB_SCSIA_RESET_INIT { // AB17RSET
ABRBH abrbh; // 00H - Request Block Header
UCHAR ResetType; // 10H - Reset type
UCHAR Undefined_1[5]; // 11H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[16]; // 18H - Undefined fields
ULONG WaitTime; // 28H - Wait time before resuming
UCHAR Undefined_3[6]; // 2CH - Undefined
UCHAR Status; // 32H - Status
} ABRB_SCSIA_RESET_INIT;
typedef ABRB_SCSIA_RESET_INIT near *NPABRB_SCSIA_RESET_INIT;
// Return Device Configuration Table (SCSIA) 0x0B
typedef struct _ABRB_SCSIA_RETDEVICECFGTBL { // AB17RDCT
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved
PBYTE pDevCfgTbl; // 12H - Logical ptr to table
USHORT Reserved_2; // 16H - Reserved
} ABRB_SCSIA_RETDEVICECFGTBL;
typedef ABRB_SCSIA_RETDEVICECFGTBL near *NPABRB_SCSIA_RETDEVICECFGTBL;
// Return Interrupting Locical ID (SCSIA) 0x0C
typedef struct _ABRB_RETINTRLID { // AB17RIL
ABRBH abrbh; // 00H - Request Block Header
UCHAR IntStatus; // 10H - Interrupt status
UCHAR Undefined_1; // 11H - Undefined
USHORT IntLID; // 12H - Interrupting LID
USHORT Undefined_2; // 14H - Undefined
USHORT Reserved_1; // 16H - Reserved
} ABRB_RETINTRLID;
typedef ABRB_RETINTRLID near *NPABRB_RETINTRLID;
// Use the same equates for IntStatus as those defined for Interrupt
// status in the Return Interrupt Status Disk ABIOS RB.
// Read Device Parms (SCSIP) 0x03
typedef struct _ABRB_SCSIP_READDEVPARMS { // AB18RDP
ABRBH abrbh; // 00H - Request Block Header
USHORT Reserved_1; // 10H - Reserved, MBZ
UCHAR SCB_Level; // 12H - SCB compatibility level
UCHAR AdapterIndex; // 13H - Adapter Index
USHORT DeviceFlags; // 14H - Device Flags
UCHAR LUN; // 16H - Logical Unit Number
UCHAR PUN; // 17H - Physical Unit Number
UCHAR Undefined_1[16]; // 18H - Undefined fields
USHORT Reserved_2; // 28H - Reserved, MBZ
} ABRB_SCSIP_READDEVPARMS;
typedef ABRB_SCSIP_READDEVPARMS near *NPABRB_SCSIP_READDEVPARMS;
// DeviceFlags equates in ABRB_SCSIP_READDEVPARMS
#define DEVDEFECTIVE 0x0001 // device found defective by POST
#define POWEROFF 0x0002 // device is currently powered off
#define CACHESUPPORT 0x0010 // Adpater card cache supported
// Reset/Initialize (SCSIP) 0x05
typedef struct _ABRB_SCSIP_RESET { // AB18RS
ABRBH abrbh; // 00H - Request Block Header
UCHAR Undefined_1[6]; // 10H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[16]; // 18H - Undefined fields
ULONG WaitTime; // 28H - Wait time before resuming
UCHAR Undefined_3[6]; // 2CH - Undefined
UCHAR Status; // 32H - Status
} ABRB_SCSIP_RESET;
typedef ABRB_SCSIP_RESET near *NPABRB_SCSIP_RESET;
// Set Device Time-Out (SCSIP) 0x10
typedef struct _ABRB_SCSIP_SETTIMEOUT { // AB18STO
ABRBH abrbh; // 00H - Request Block Header
UCHAR Timeout; // 10H - Time-out value
UCHAR Reserved_1; // 11H - Reserved, MBZ
UCHAR Undefined_1[4]; // 12H - Undefined
USHORT Reserved_2; // 16H - Reserved, MBZ
UCHAR Undefined_2[16]; // 18H - Undefined fields
ULONG WaitTime; // 28H - Wait time before resuming
UCHAR Undefined_3[6]; // 2CH - Undefined
UCHAR Status; // 32H - Status
} ABRB_SCSIP_SETTIMEOUT;
typedef ABRB_SCSIP_SETTIMEOUT near *NPABRB_SCSIP_SETTIMEOUT;
// Read Device Time-Out (SCSIP) 0x11
typedef struct _ABRB_SCSIP_READTIMEOUT { // AB18RTO
ABRBH abrbh; // 00H - Request Block Header
UCHAR Timeout; // 10H - Time-out value
UCHAR Reserved_1; // 11H - Reserved, MBZ
UCHAR Undefined_1[4]; // 12H - Undefined
USHORT Reserved_2; // 16H - Reserved, MBZ
} ABRB_SCSIP_READTIMEOUT;
typedef ABRB_SCSIP_READTIMEOUT near *NPABRB_SCSIP_READTIMEOUT;
// Transfer SCB (SCSIP) 0x12
typedef struct _ABRB_SCSIP_TRANSFERSCB { // AB18TSCB
ABRBH abrbh; // 00H - Request Block Header
ULONG ppSCB; // 10H - physical pointer to SCB
USHORT Reserved_1; // 14H - reserved, MBZ
PSCBHDR pSCBHdr; // 16H - logical pointer to SCB hdr
USHORT Undefined_1; // 1AH - Undefined
USHORT Reserved_2; // 1CH - reserved, MBZ
UCHAR Undefined_2[8]; // 1EH - Undefined
USHORT Reserved_3; // 26H - reserved, MBZ
ULONG WaitTime; // 28H - Wait time before resuming
USHORT Reserved_4; // 2CH - reserved, MBZ
UCHAR Flags; // 2EH - bits 7-1 reserved
// bit 0: 0-normal length SCB
// 1-long SCB
UCHAR Undefined_3[3]; // 2FH - Undefined
UCHAR Status; // 32H - bits 7-2 & 0 reserved
// bit 1: 0 - CCSB not reqrd
// 1 - CCSB needed
} ABRB_SCSIP_TRANSFERSCB;
typedef ABRB_SCSIP_TRANSFERSCB near *NPABRB_SCSIP_TRANSFERSCB;
#define NORMAL_SCB 0x00 // Flags - Normal length SCB
#define LONG_SCB 0x01 // Flags - Long SCB
#define TSB_NOT_REQD 0x00 // Status - TSB is not needed
#define TSB_NEEDED 0x02 // Status - TSB is needed
// Deallocate SCSI Peripheral Device (SCSIP) 0x14
typedef struct _ABRB_SCSIP_DEALLOC { // AB18DPD
ABRBH abrbh; // 00H - Request Block Header
UCHAR Undefined_1[6]; // 10H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_SCSIP_DEALLOC;
typedef ABRB_SCSIP_DEALLOC near *NPABRB_SCSIP_DEALLOC;
// Allocate SCSI Peripheral Device (SCSIP) 0x15
typedef struct _ABRB_SCSIP_ALLOC { // AB18APD
ABRBH abrbh; // 00H - Request Block Header
UCHAR DevType; // 10H - Device peripheral type
UCHAR DevFlags; // 11H - Device type flags
USHORT DevUnit; // 12H - nth device of this type
USHORT Undefined_1; // 14H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_SCSIP_ALLOC;
typedef ABRB_SCSIP_ALLOC near *NPABRB_SCSIP_ALLOC;
// DevFlags equates in RB_SCSIP_ALLOC
#define DEVTYPE_CDROM 0x05
#define DEVTYPE_REMOVABLE 0x80 // Device media is removable
// Return Peripheral Type Count (SCSIP) 0x16
typedef struct _ABRB_SCSIP_RETCOUNT { // AB18RC
ABRBH abrbh; // 00H - Request Block Header
UCHAR DevType; // 10H - Device Peripheral type
UCHAR DevFlags; // 11H - Device type flags
USHORT Undefined_1; // 12H - Undefined
USHORT DevCount; // 14H - Count of device type
USHORT Reserved_1; // 16H - Reserved, MBZ
} ABRB_SCSIP_RETCOUNT;
typedef ABRB_SCSIP_RETCOUNT near *NPABRB_SCSIP_RETCOUNT;
// Abort (SCSIP) 0x17
typedef struct _ABRB_SCSIP_ABORT { // AB18AB
ABRBH abrbh; // 00H - Request Block Header
UCHAR Undefined_1[6]; // 10H - Undefined
USHORT Reserved_1; // 16H - Reserved, MBZ
UCHAR Undefined_2[16]; // 18H - Undefined fields
ULONG WaitTime; // 28H - Wait time before resuming
UCHAR Undefined_3[6]; // 2CH - Undefined
UCHAR Status; // 32H - Status
} ABRB_SCSIP_ABORT;
typedef ABRB_SCSIP_ABORT near *NPABRB_SCSIP_ABORT;
#define GENERIC_ABRB_SIZE 128
// ABIOS Return Codes Common to all Functions
#define ABRC_COMPLETEOK 0x0000
#define ABRC_STAGEONINTERRUPT 0x0001
#define ABRC_STAGEONTIME 0x0002
#define ABRC_NOTMYINTERRUPT 0x0005
#define ABRC_ATTENTION 0x0009
#define ABRC_SPURIOUSINTERRUPT 0x0081
#define ABRC_BUSY 0x8000
#define ABRC_START 0xFFFF
#define ABRC_UNSUPPORTED_LID 0xC000
#define ABRC_UNSUPPORTED_FUNCTION 0xC001
#define ABRC_UNSUPPORRTED_UNIT 0xC003
#define ABRC_UNSUPPORTED_RB_LEN 0xC004
#define ABRC_INVALID_PARM 0xC005
#define ABRC_ERRORBIT 0x8000
#define ABRC_RETRYBIT 0x0100
#define ABRC_ERRORMSK 0x00FF
// ABIOS Return Codes Specific to Diskette - Device ID 0x01
#define ABRC_DSKT_WRITE_PROTECT 0x8003
#define ABRC_DSKT_MEDIA_CHANGED 0x8006
#define ABRC_DSKT_MEDIA_NOT_PRESENT 0x800D
#define ABRC_DSKT_NOCHGSIG 0x800E
#define ABRC_DSKT_INVALID_VALUE 0x800F
#define ABRC_DSKT_MEDIA_NOTSUPPORTED 0x8010
#define ABRC_DSKT_NO_MEDIA_SENSE 0x8011
#define ABRC_DSKT_RESET_FAIL 0x9009
#define ABRC_DSKT_ADDRMARK_NOTFND 0x9102
#define ABRC_DSKT_SECTOR_NOTFND 0x9104
#define ABRC_DSKT_DMA_IN_PROGRESS 0x9107
#define ABRC_DSKT_DMA_OVERRUN 0x9108
#define ABRC_DSKT_BAD_CRC 0x9110
#define ABRC_DSKT_BAD_CONTROLLER 0x9120 // A120,B020
#define ABRC_DSKT_BAD_SEEK 0x9140
#define ABRC_DSKT_GENERAL_ERROR 0x9180
#define ABRC_DSKT_UNKNOWN_MEDIA 0xC00C
// ABIOS Return Codes Specific to Disk - Device ID 0x02
#define ABRC_DISK_DEV_NOT_POWERED_ON 0x8001 //
#define ABRC_DISK_DEV_BLOCK_INIT_ERR 0x8002 //
#define ABRC_DISK_DEV_NOT_ALLOCATED 0x8003 //
#define ABRC_DISK_DMA_ARB_INVALID 0x800F //
#define ABRC_DISK_BAD_COMMAND 0x9001 // 9101,A001,B001,B101
#define ABRC_DISK_ADDRMARK_NOTFND 0x9002 // 9102,A002
#define ABRC_DISK_WRITE_PROTECT 0x9003 // 9103
#define ABRC_DISK_RECORD_NOTFND 0x9004 // 9104,A004
#define ABRC_DISK_RESET_FAIL 0x9005 // 9105,A005,A105
#define ABRC_DISK_MEDIA_CHANGED 0x9006 // 9106
#define ABRC_DISK_CTRL_PARM_FAIL 0x9007 // 9107,A007,A107
#define ABRC_DISK_DMA_FAIL 0x9008 // 9108
#define ABRC_DISK_DEFECTIVE_SECTOR 0x900A // A00A
#define ABRC_DISK_BAD_TRACK 0x900B // A00B
#define ABRC_DISK_FORMAT_ERROR 0x900D // A00D
#define ABRC_DISK_CAM_RV 0x900E // A00E
#define ABRC_DISK_CRC 0x9010 // A010
#define ABRC_DISK_DEVICE_FAILED 0x9014 // 9114
#define ABRC_DISK_BUS_FAULT 0x9015 // 9115
#define ABRC_DISK_BAD_CONTROLLER 0x9020 // 9120,A020,A120,B020,B120
#define ABRC_DISK_EQUIP_CHECK 0x9021 // 9121,A021,A121,B021,B121
#define ABRC_DISK_BAD_SEEK 0x9040 // 9140,A040,A140
#define ABRC_DISK_DEVICE_NORESPONSE 0x9080 // 9180,A080,A180,B080,B180
#define ABRC_DISK_DRIVE_NOTREADY 0x90AA // 91AA,A0AA,A1AA
#define ABRC_DISK_UNDEFINED_ERROR 0x90BB // 91BB,A0BB,A1BB,B0BB,B1BB
#define ABRC_DISK_WRITE_FAULT 0x90CC // 91CC,A0CC,A1CC
#define ABRC_DISK_STATUS_ERROR 0x90E0 // 91E0
#define ABRC_DISK_INCOMPLETE_SENSE 0x90FF // 91FF,A0FF,A1FF,B0FF,B1FF
#define ABRC_DISK_ECC_CORRECTED 0xA011 //
// Various diskette equates
// Equates specific to NEC Diskette Controller
#define ABNEC 0020 // Level of NEC Controller
#define NEC_DSKT_READ 0xE6
#define NEC_DSKT_WRITE 0xC5
#define NEC_DSKT_FORMAT 0x4D
// Other various diskette equates
#define ABDISKETTELID 0x0001
#define HW_CHANGELINE_ACTIVE 0x80
#define ABCHGLINEACTIVE 0x00FC
//**************************************************************
// Various Fixed Disk Equates
//**************************************************************
#define ABRB_NOCACHE 0x01 // ABRB_Flags bit 0, set=dont cache
#define ABRETRYCOUNT 0x05 // Device Error Retry Limit
//*****************************
// ABIOS Device IDs
//*****************************
#define DEVID_INTERNAL 0x00
#define DEVID_DISKETTE 0x01
#define DEVID_DISK 0x02
#define DEVID_VIDEO 0x03
#define DEVID_KEYBOARD 0x04
#define DEVID_PARALLEL 0x05
#define DEVID_ASYNC 0x06
#define DEVID_SYSTEMTIMER 0x07
#define DEVID_RTC 0x08
#define DEVID_SYSTEMSVCS 0x09
#define DEVID_NMI 0x0A
#define DEVID_MOUSE 0x0B
#define DEVID_NVRAM 0x0E
#define DEVID_DMA 0x0F
#define DEVID_POS 0x10
#define DEVID_SECURITY 0x16
#define DEVID_SCSIADAPTER 0x17
#define DEVID_GENERICSCSI 0x18