winaspi.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:10k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /*------------------------------------------------------------------------------
  2.  winaspi.h
  3. ------------------------------------------------------------------------------*/
  4. #define SS_PENDING         0x00  // SCSI request is in progress.
  5. #define SS_COMP            0x01  // SCSI Request Completed Without Error
  6. #define SS_ABORTED         0x02  // SCSI command has been aborted.
  7. #define SS_ERR             0x04  //  SCSI command has completed with an error.
  8. #define SS_INVALID_SRB     0xE0  // One or more parameters in the SCSI Request Block
  9.                                  // (SRB) are set incorrectly.
  10. #define SS_OLD_MANAGER     0xE1  // One or more ASPI for DOS managers are loaded which
  11.                                  // do not support ASPI for Win16.
  12. #define SS_ILLEGAL_MODE    0xE2  // This ASPI manager does not support this mode of
  13.                                  // Windows. You typically see this error code when
  14.                                  // running Windows in Real Mode.
  15. #define SS_NO_ASPI         0xE3  //  No ASPI managers are loaded. This typically occurs
  16.                                  //  when a DOS ASPI manager is not resident in memory.
  17. #define SS_FAILED_INIT     0xE4  //  For some reason, other than SS_OLD_MANAGER,
  18.                                  //  SS_ILLEGAL_MODE or SS_NO_ASPI, ASPI for Win16
  19.                                  //  could not properly initialize itself. This may be
  20.                                  //  caused by a lack of system resources.
  21. #define SS_ASPI_IS_BUSY    0xE5  //  The ASPI manager cannot handle the request at this
  22.                                  //  time. This error generally occurs if the ASPI
  23.                                  //  manager is already using up all of his resources
  24.                                  //  to execute other requests. Try resending the
  25.                                  //  command later.
  26. #define SS_BUFFER_TO_BIG   0xE6  //  The ASPI manager cannot handle the given transfer
  27. #define SS_INVALID_HA      0x81  //  Invalid Host Adapter Number
  28. #define SS_NO_DEVICE       0x82  //  SCSI Device Not Installed
  29. #define HASTAT_OK          0x00  //  Host adapter did not detect an error
  30. #define HASTAT_SEL_TO      0x11  //  Selection time-out
  31. #define HASTAT_DO_DU       0x12  //  Data overrun/underrun
  32. #define HASTAT_BUS_FREE    0x13  //  Unexpected Bus Free
  33. #define HASTAT_PHASE_ERR   0x14  //  Target Bus phase sequence failure
  34. #define STATUS_GOOD        0x00  //  No target status
  35. #define STATUS_CHKCOND     0x02  //  Check status (sense data is in SenseArea)
  36. #define STATUS_BUSY        0x08  //  Specified Target/LUN is busy
  37. #define STATUS_RESCONF     0x18  //  Reservation conflict
  38. #define SENSE_LEN          14
  39. #define SC_HA_INQUIRY      0x00
  40. #define SC_GET_DEV_TYPE    0x01
  41. #define SC_EXEC_SCSI_CMD   0x02
  42. #define SC_ABORT_SRB       0x03
  43. #define SC_RESET_DEV       0x04
  44. #define SRBF_POSTING       0x01
  45. #define SRBF_LINKED        0x02
  46. #define SRBF_NOLENCHECK    0x00  // direction ctrled by SCSI cmd
  47. #define SRBF_READ          0x08  // xfer to host, length checked
  48. #define SRBF_WRITE         0x10  // xfer to target, length checked
  49. #define SRBF_NOXFER        0x18  // no data transfer
  50. #define SRB_EVENT_NOTIFY   0x40
  51. /*
  52. typedef unsigned char BYTE;
  53. typedef unsigned int  WORD;
  54. typedef unsigned long DWORD;
  55. */
  56. typedef unsigned char * LPSRB;
  57. typedef struct
  58. {
  59.     BYTE        SRB_Cmd;            // ASPI command code = SC_HA_INQUIRY
  60.     BYTE        SRB_Status;         // ASPI command status byte
  61.     BYTE        SRB_HaId;           // ASPI host adapter number
  62.     BYTE        SRB_Flags;          // ASPI request flags
  63.     WORD        SRB_55AASignature;  // Extended signature bytes
  64.     WORD        SRB_ExtBufferSize;  // Extended buffer length
  65.     BYTE        HA_Count;           // Number of host adapters present
  66.     BYTE        HA_SCSI_ID;         // SCSI ID of host adapter
  67.     BYTE        HA_ManagerId[16];   // String describing the manager
  68.     BYTE        HA_Identifier[16];  // String describing the host adapter
  69.     BYTE        HA_Unique[16];      // Host Adapter Unique parameters
  70.     WORD        HA_ExtBuffer;       // Extended buffer area
  71. } SRB_HAInquiry;
  72. typedef struct
  73. {
  74.     BYTE        SRB_Cmd;            // ASPI command code = SC_GET_DEV_TYPE
  75.     BYTE        SRB_Status;         // ASPI command status byte
  76.     BYTE        SRB_HaId;           // ASPI host adapter number
  77.     BYTE        SRB_Flags;          // ASPI request flags
  78.     DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  79.     BYTE        SRB_Target;         // Target's SCSI ID
  80.     BYTE        SRB_Lun;            // Target's LUN number
  81.     BYTE        SRB_DeviceType;     // Target's peripheral device type
  82.     BYTE        SRB_Rsvd1;          // Reserved for alignment
  83. } SRB_GDEVBlock;
  84. typedef struct
  85. {                                       // Structure for 6-byte CDBs
  86.     BYTE        SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  87.     BYTE        SRB_Status;             // ASPI command status byte
  88.     BYTE        SRB_HaId;               // ASPI host adapter number
  89.     BYTE        SRB_Flags;              // ASPI request flags
  90.     DWORD       SRB_Hdr_Rsvd;           // Reserved, MUST = 0
  91.     BYTE        SRB_Target;             // Target's SCSI ID
  92.     BYTE        SRB_Lun;                // Target's LUN number
  93.     WORD        SRB_Rsvd1;              // Reserved for Alignment
  94.     DWORD       SRB_BufLen;             // Data Allocation LengthPG
  95.     BYTE        *SRB_BufPointer;        // Data Buffer Pointer
  96.     BYTE        SRB_SenseLen;           // Sense Allocation Length
  97.     BYTE        SRB_CDBLen;             // CDB Length = 6
  98.     BYTE        SRB_HaStat;             // Host Adapter Status
  99.     BYTE        SRB_TargStat;           // Target Status
  100.     void        (*SRB_PostProc)();      // Post routine
  101.     void        *SRB_Rsvd2;             // Reserved
  102.     BYTE        SRB_Rsvd3[16];          // Reserved for expansion
  103.     BYTE        CDBByte[16];            // SCSI CDB
  104.     BYTE        SenseArea[SENSE_LEN+2]; // Request Sense buffer
  105. } SRB_ExecSCSICmd6;
  106. typedef struct
  107. {                                       // Structure for 10-byte CDBs
  108.     BYTE        SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  109.     BYTE        SRB_Status;             // ASPI command status byte
  110.     BYTE        SRB_HaId;               // ASPI host adapter number
  111.     BYTE        SRB_Flags;              // ASPI request flags
  112.     DWORD       SRB_Hdr_Rsvd;           // Reserved, MUST = 0
  113.     BYTE        SRB_Target;             // Target's SCSI ID
  114.     BYTE        SRB_Lun;                // Target's LUN number
  115.     WORD        SRB_Rsvd1;              // Reserved, MUST = 0
  116.     DWORD       SRB_BufLen;             // Data Allocation Length
  117.     BYTE        *SRB_BufPointer;        // Data Buffer Pointer
  118.     BYTE        SRB_SenseLen;           // Sense Allocation Length
  119.     BYTE        SRB_CDBLen;             // CDB Length = 10
  120.     BYTE        SRB_HaStat;             // Host Adapter Status
  121.     BYTE        SRB_TargStat;           // Target Status
  122.     void        (*SRB_PostProc)();      // Post routine
  123.     void        *SRB_Rsvd2;             // Reserved
  124.     BYTE        SRB_Rsvd3[16];          // Reserved for expansion
  125.     BYTE        CDBByte[16];            // SCSI CDB
  126.     BYTE        SenseArea10[SENSE_LEN+2]; // Request Sense buffer
  127. } SRB_ExecSCSICmd10;
  128. typedef struct
  129. {
  130.     BYTE        SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  131.     BYTE        SRB_Status;             // ASPI command status byte
  132.     BYTE        SRB_HaId;               // ASPI host adapter number
  133.     BYTE        SRB_Flags;              // ASPI request flags
  134.     DWORD       SRB_Hdr_Rsvd;           // Reserved, MUST = 0
  135.     BYTE        SRB_Target;             // Target's SCSI ID
  136.     BYTE        SRB_Lun;                // Target's LUN number
  137.     WORD        SRB_Rsvd1;              // Reserved, MUST = 0
  138.     DWORD       SRB_BufLen;             // Data Allocation Length
  139.     BYTE        *SRB_BufPointer;        // Data Buffer Pointer
  140.     BYTE        SRB_SenseLen;           // Sense Allocation Length
  141.     BYTE        SRB_CDBLen;             // CDB Length = 10
  142.     BYTE        SRB_HaStat;             // Host Adapter Status
  143.     BYTE        SRB_TargStat;           // Target Status
  144.     void        (*SRB_PostProc)();      // Post routine
  145.     void        *SRB_Rsvd2;             // Reserved
  146.     BYTE        SRB_Rsvd3[16];          // Reserved for expansion
  147.     BYTE        CDBByte[16];            // SCSI CDB
  148.     BYTE        SenseArea12[SENSE_LEN+2]; // Request Sense buffer
  149. } SRB_ExecSCSICmd12;
  150. typedef struct
  151. {
  152.     BYTE        SRB_Cmd;            // ASPI command code = SC_ABORT_SRB
  153.     BYTE        SRB_Status;         // ASPI command status byte
  154.     BYTE        SRB_HaId;           // ASPI host adapter number
  155.     BYTE        SRB_Flags;          // ASPI request flags
  156.     DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  157.     void        *SRB_ToAbort;       // Pointer to SRB to abort
  158. } SRB_Abort;
  159. typedef struct
  160. {
  161.     BYTE        SRB_Cmd;            // ASPI command code = SC_RESET_DEV
  162.     BYTE        SRB_Status;         // ASPI command status byte
  163.     BYTE        SRB_HaId;           // ASPI host adapter number
  164.     BYTE        SRB_Flags;          // ASPI request flags
  165.     DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  166.     BYTE        SRB_Target;         // Target's SCSI ID
  167.     BYTE        SRB_Lun;            // Target's LUN number
  168.     BYTE        SRB_ResetRsvd1[12]; // Reserved, MUST = 0
  169.     BYTE        SRB_HaStat;         // Host Adapter Status
  170.     BYTE        SRB_TargStat;       // Target Status
  171.     void        *SRB_PostProc;      // Post routine
  172.     void        *SRB_Rsvd2;         // Reserved
  173.     BYTE        SRB_Rsvd3[32];      // Reserved
  174. } SRB_BusDeviceReset;
  175. typedef struct
  176. {
  177.   BYTE  res0;
  178.   BYTE  TRACK_adr_contrl;
  179.   BYTE  TRACK_nr;
  180.   BYTE  res1;
  181.   DWORD TRACK_abs_adr;
  182. } TRACK;
  183. typedef struct
  184. {
  185.     WORD        TOC_len; 
  186.     BYTE        TOC_first;
  187.     BYTE        TOC_last;
  188.     TRACK       track[99];
  189. } TOC;
  190. void ASPIPostProc6  (SRB_ExecSCSICmd6  *DoneSRB);
  191. void ASPIPostProc10 (SRB_ExecSCSICmd10 *DoneSRB);
  192. void ASPIPostProc12 (SRB_ExecSCSICmd12 *DoneSRB);