135 lines
4.3 KiB
C
135 lines
4.3 KiB
C
/*
|
|
* 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
|