home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / aspisrc.zip / dev / DEVRP.H < prev    next >
C/C++ Source or Header  |  1998-11-29  |  7KB  |  204 lines

  1.  
  2.  
  3. // Prevent multiple inclusion
  4. #if !defined(DevRP_h)
  5. #define DevRP_h 1
  6.  
  7. #if !defined(__WATCOMC__) || !defined(__cplusplus)
  8. #error C++ must be used for strict type checking
  9. #endif
  10.  
  11.  
  12. // Include the fundamental type definitions
  13. #include "DevType.h"
  14.  
  15.  
  16. // Device driver request packet (B=block devices, C=character devices)
  17. struct        RP
  18.   {
  19.   BYTE        Length;         // Length of request packet
  20.   BYTE        Unit;           // Unit code (B)
  21.   BYTE        Command;        // Command code
  22.   WORD16      Status;         // Status code
  23.   BYTE        Flags;          // Flags
  24.   BYTE        Reserved[3];    // Reserved
  25.   RP FAR*     Link;           // Link to next request packet in queue
  26.   };
  27.  
  28. // Request packet 00 (BC): Initialization
  29. struct        RPInit          : public RP
  30.   {
  31.   union
  32.     {
  33.     struct
  34.       {
  35.       BYTE    Reserved;       // Unused
  36.       WORD32  DevHlp;         // Address of DevHlp entry point
  37.       CHAR FAR* Args;         // Command-line arguments
  38.       BYTE    Drive;          // Drive number of first unit (B)
  39.       } In;
  40.     struct
  41.       {
  42.       BYTE    Units;          // Number of supported units (B)
  43.       WORD16  FinalCS;        // Offset of last resident code
  44.       WORD16  FinalDS;        // Offset of last resident data
  45.       VOID FAR* Bpb;          // BIOS parameter block (B)
  46.       } Out;
  47.     };
  48.   };
  49.  
  50. // Request packet 01 (B ): Media check
  51. struct        RPMediaCheck    : public RP
  52.   {
  53.   BYTE        Media;          // Media descriptor
  54.   BYTE        Result;         // -1 = Changed, 0 = Unsure, 1 = Unchanged
  55.   CHAR FAR*   PrevVolID;      // Pointer to previous volume ID
  56.   };
  57.  
  58. // Request packet 02 (B ): Build BIOS parameter block
  59. struct        RPBuildBPB      : public RP
  60.   {
  61.   BYTE        Media;          // Media descriptor
  62.   VOID FAR*   Transfer;       // Transfer virtual address
  63.   VOID FAR*   Bpb;            // Pointer to BPB table
  64.   BYTE        Drive;          // Drive number
  65.   };
  66.  
  67. // Request packet 04 (BC): Read
  68. // Request packet 08 (BC): Write
  69. // Request packet 09 (BC): Write verify
  70. struct        RPRWV           : public RP
  71.   {
  72.   BYTE        Media;          // Media descriptor
  73.   PHYSICAL    Transfer;       // Transfer physical address
  74.   WORD16      Count;          // Number of bytes (C) or sectors (B)
  75.   WORD32      Start;          // Starting sector number (B)
  76.   HFILE       FileID;         // System file number
  77.   };
  78.  
  79. // Request packet 05 ( C): Nondestructive read with no wait
  80. struct        RPReadNoWait    : public RP
  81.   {
  82.   BYTE        Data;           // Return character
  83.   };
  84.  
  85. // Request packet 06 ( C): Input status
  86. // Request packet 0A ( C): Output status
  87. struct        RPIOStatus      : public RP
  88.   {
  89.   };
  90.  
  91. // Request packet 07 ( C): Input flush
  92. // Request packet 0B ( C): Output flush
  93. struct        RPIOFlush       : public RP
  94.   {
  95.   };
  96.  
  97. // Request packet 0D (BC): Open
  98. // Request packet 0E (BC): Close
  99. struct        RPOpenClose     : public RP
  100.   {
  101.   HFILE       FileID;         // System file number
  102.   };
  103.  
  104. // Request packet 0F (B ): Removable media check
  105. struct        RPRemovable     : public RP
  106.   {
  107.   };
  108.  
  109. // Request packet 10 (BC): IO Control
  110. struct        RPIOCtl         : public RP
  111.   {
  112.   BYTE        Category;       // Category code
  113.   BYTE        Function;       // Function code
  114.   BYTE FAR*   ParmPacket;     // Parameter packet
  115.   BYTE FAR*   DataPacket;     // Data packet
  116.   HFILE       FileID;         // System file number
  117.   WORD16      ParmLength;     // Parameter packet length
  118.   WORD16      DataLength;     // Data packet length
  119.   };
  120.  
  121. // Request packet 11 (B ): Reset media
  122. struct        RPReset         : public RP
  123.   {
  124.   };
  125.  
  126. // Request packet 12 (B ): Get logical unit
  127. // Request packet 13 (B ): Set logical unit
  128. struct        RPUnit          : public RP
  129.   {
  130.   };
  131.  
  132. // Request packet 14 ( C): Deinstall character device driver
  133. struct        RPDeinstall     : public RP
  134.   {
  135.   };
  136.  
  137. // Request packet 16 (B ): Count partitionable fixed disks
  138. struct        RPPartitionable : public RP
  139.   {
  140.   BYTE        Count;          // Number of partitionable fixed disks
  141.   WORD32      Reserved;       // Reserved
  142.   };
  143.  
  144. // Request packet 17 (B ): Get logical unit mapping of fixed disk
  145. struct        RPUnitMap       : public RP
  146.   {
  147.   WORD32      Units;          // Bitmap of supported logical units
  148.   WORD32      Reserved;       // Reserved
  149.   };
  150.  
  151. // Request packet 1C (BC): Notify start or end of system shutdown
  152. struct        RPShutdown      : public RP
  153.   {
  154.   BYTE        Function;       // Shutdown code: 0 = start, 1 = end
  155.   WORD32      Reserved;       // Reserved
  156.   };
  157.  
  158. // Request packet 1D (B ): Get driver capabilities
  159. struct        RPDriverCaps    : public RP
  160.   {
  161.   BYTE        Reserved[3];    // Reserved
  162.   VOID FAR*   DCS;            // Pointer to driver capabilities structure
  163.   VOID FAR*   VCS;            // Pointer to volume characteristics structure
  164.   };
  165.  
  166. // Request packet 1F (BC): Notify end of initialization
  167. struct        RPInitComplete  : public RP
  168.   {
  169.   };
  170.  
  171.  
  172.  
  173. // RP Result codes
  174.  
  175. #define RPERR                 0x8000      // Error
  176. #define RPDEV                 0x4000      // Device-specific error code
  177. #define RPBUSY                0x0200      // Device is busy
  178. #define RPDONE                0x0100      // Command complete
  179.  
  180. #define RPERR_PROTECT         0x8000      // Write-protect error
  181. #define RPERR_UNIT            0x8001      // Unknown unit
  182. #define RPERR_READY           0x8002      // Not ready
  183. #define RPERR_COMMAND         0x8003      // Unknown command
  184. #define RPERR_CRC             0x8004      // CRC error
  185. #define RPERR_LENGTH          0x8005      // Bad request length
  186. #define RPERR_SEEK            0x8006      // Seek error
  187. #define RPERR_FORMAT          0x8007      // Unknown media
  188. #define RPERR_SECTOR          0x8008      // Sector not found
  189. #define RPERR_PAPER           0x8009      // Out of paper
  190. #define RPERR_WRITE           0x800A      // Write fault
  191. #define RPERR_READ            0x800B      // Read fault
  192. #define RPERR_GENERAL         0x800C      // General failure
  193. #define RPERR_DISK            0x800D      // Disk change
  194. #define RPERR_MEDIA           0x8010      // Uncertain media
  195. #define RPERR_INTERRUPTED     0x8011      // Call interrupted (character)
  196. #define RPERR_MONITOR         0x8012      // Monitors unsupported
  197. #define RPERR_PARAMETER       0x8013      // Invalid parameter
  198. #define RPERR_USE             0x8014      // Device in use
  199. #define RPERR_INIT            0x8015      // Non-critical init failure
  200.  
  201.  
  202.  
  203. #endif // DevRP_h
  204.