/* * Some type definitions for OS/2 2.x/3.x driver request packets. */ #ifdef __cplusplus extern "C" { #endif #if __WATCOMC__ >= 1000 #pragma pack(push,1); #else #pragma pack(1); #endif /* * Look at \WATCOM\H\OS2\DEVSYM.INC for a description * of the Device Driver Request Packet Definitions */ typedef struct REQP_HEADER REQP_HEADER; struct REQP_HEADER { BYTE length; // Length of request packet BYTE unit; // Unit code (B) BYTE command; // Command code USHORT status; // Status code ULONG res1; // Flags REQP_HEADER FAR *next; // Link to next request packet in queue }; typedef struct { REQP_HEADER header; union{ struct{ BYTE res; // Unused ULONG devhlp; // Address of Dev Help entry point PCHAR parms; // Command-line arguments BYTE drive; // Drive number of first unit } in; struct { BYTE units; // Number of supported units USHORT finalcs; // Offset to end of code USHORT finalds; // Offset of end of data PVOID bpb; // BIOS parameter block } out; }; } REQP_INIT; typedef struct { REQP_HEADER header; BYTE media; // Media descriptor ULONG transaddr; // Transfer physical address USHORT count; // bytes/sectors count ULONG start; // Starting sector for block device HFILE fileid; // System file number } REQP_RWV; typedef struct{ REQP_HEADER header; HFILE fileid; // System file number } REQP_OPENCLOSE; typedef enum { RPERR = 0x8000, // Error RPDEV = 0x4000, // Device-specific error code RPBUSY = 0x0200, // Device is busy RPDONE = 0x0100, // Command complete RPERR_PROTECT = 0x8000, // Write-protect error RPERR_UNIT = 0x8001, // Unknown unit RPERR_READY = 0x8002, // Not ready RPERR_COMMAND = 0x8003, // Unknown command RPERR_CRC = 0x8004, // CRC error RPERR_LENGTH = 0x8005, // Bad request length RPERR_SEEK = 0x8006, // Seek error RPERR_FORMAT = 0x8007, // Unknown media RPERR_SECTOR = 0x8008, // Sector not found RPERR_PAPER = 0x8009, // Out of paper RPERR_WRITE = 0x800A, // Write fault RPERR_READ = 0x800B, // Read fault RPERR_GENERAL = 0x800C, // General failure RPERR_DISK = 0x800D, // Disk change RPERR_MEDIA = 0x8010, // Uncertain media RPERR_INTERRUPTED = 0x8011, // Call interrupted (character) RPERR_MONITOR = 0x8012, // Monitors unsupported RPERR_PARAMETER = 0x8013, // Invalid parameter RPERR_USE = 0x8014, // Device in use RPERR_INIT = 0x8015, // Non-critical init failure } REQP_status; typedef union { REQP_HEADER header; REQP_INIT init; REQP_RWV rwv; REQP_OPENCLOSE openclose; } REQP_ANY; /* * Look at \WATCOM\H\OS2\DEVCMD.INC for a list * of the Device Driver Request Packet Commands */ typedef enum { RP_INIT = 0x00, RP_MEDIA_CHECK = 0x01, RP_BUILD_BPB = 0x02, RP_READ = 0x04, RP_READ_NO_WAIT = 0x05, RP_INPUT_STATUS = 0x06, RP_INPUT_FLUSH = 0x07, RP_WRITE = 0x08, RP_WRITE_VERIFY = 0x09, RP_OUTPUT_STATUS = 0x0a, RP_OUTPUT_FLUSH = 0x0b, RP_OPEN = 0x0d, RP_CLOSE = 0x0e, RP_REMOVABLE = 0x0f, RP_IOCTL = 0x10, RP_RESET = 0x11, RP_GET_DRIVE_MAP = 0x12, RP_SET_DRIVE_MAP = 0x13, RP_DEINSTALL = 0x14, RP_PARTITIONABLE = 0x16, RP_GET_FIXED_MAP = 0x17, RP_SHUTDOWN = 0x1c, RP_GET_DRIVER_CAPS = 0x1d, RP_END } REQP_command; #if __WATCOMC__ >= 1000 #pragma pack(pop); #else #pragma pack(); #endif #ifdef __cplusplus }; #endif