home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 1997 Hardware / HARDWARE.ISO / hardware / asbnch / source / wnaspi32.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-20  |  9.2 KB  |  206 lines

  1. /****************************************************************************
  2. *                                                                           *
  3. * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY     *
  4. * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE       *
  5. * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR     *
  6. * PURPOSE.                                                                  *
  7. *                                                                           *
  8. * Copyright (C) 1993-95  Microsoft Corporation.  All Rights Reserved.       *
  9. *                                                                           *
  10. ****************************************************************************/
  11.  
  12. //***************************************************************************
  13. //
  14. // Name:           WNASPI32.H
  15. //
  16. // Description:    ASPI for Win32 definitions ('C' Language)
  17. //
  18. //***************************************************************************
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24. typedef void *LPSRB;
  25. typedef void (*PFNPOST)();
  26.  
  27. DWORD SendASPI32Command    (LPSRB);
  28. DWORD GetASPI32SupportInfo (VOID);
  29.  
  30. #define SENSE_LEN                    14            // Default sense buffer length
  31. #define SRB_DIR_SCSI                0x00        // Direction determined by SCSI                                                             // command
  32. #define SRB_DIR_IN                    0x08        // Transfer from SCSI target to                                                             // host
  33. #define SRB_DIR_OUT                    0x10        // Transfer from host to SCSI                                                             // target
  34. #define SRB_POSTING                    0x01        // Enable ASPI posting
  35. #define SRB_EVENT_NOTIFY            0x40        // Enable ASPI event notification
  36. #define SRB_ENABLE_RESIDUAL_COUNT    0x04        // Enable residual byte count                                                             // reporting
  37. #define SRB_DATA_SG_LIST            0x02        // Data buffer points to                                                                     // scatter-gather list
  38. #define WM_ASPIPOST                    0x4D42        // ASPI Post message
  39. //***************************************************************************
  40. //                         %%% ASPI Command Definitions %%%
  41. //***************************************************************************
  42. #define SC_HA_INQUIRY                0x00        // Host adapter inquiry
  43. #define SC_GET_DEV_TYPE                0x01        // Get device type
  44. #define SC_EXEC_SCSI_CMD            0x02        // Execute SCSI command
  45. #define SC_ABORT_SRB                0x03        // Abort an SRB
  46. #define SC_RESET_DEV                0x04        // SCSI bus device reset
  47. #define SC_GET_DISK_INFO            0x06        // Get Disk information
  48.  
  49. //***************************************************************************
  50. //                                  %%% SRB Status %%%
  51. //***************************************************************************
  52. #define SS_PENDING            0x00        // SRB being processed
  53. #define SS_COMP                0x01        // SRB completed without error
  54. #define SS_ABORTED            0x02        // SRB aborted
  55. #define SS_ABORT_FAIL        0x03        // Unable to abort SRB
  56. #define SS_ERR                 0x04        // SRB completed with error
  57.  
  58. #define SS_INVALID_CMD        0x80        // Invalid ASPI command
  59. #define SS_INVALID_HA        0x81        // Invalid host adapter number
  60. #define SS_NO_DEVICE        0x82        // SCSI device not installed
  61.                             
  62. #define SS_INVALID_SRB        0xE0        // Invalid parameter set in SRB
  63. #define SS_FAILED_INIT        0xE4        // ASPI for windows failed init
  64. #define SS_ASPI_IS_BUSY        0xE5        // No resources available to execute cmd
  65. #define SS_BUFFER_TO_BIG    0xE6        // Buffer size to big to handle!
  66.  
  67. //***************************************************************************
  68. //                            %%% Host Adapter Status %%%
  69. //***************************************************************************
  70. #define HASTAT_OK                    0x00    // Host adapter did not detect an                                                             // error
  71. #define HASTAT_SEL_TO                0x11    // Selection Timeout
  72. #define HASTAT_DO_DU                0x12    // Data overrun data underrun
  73. #define HASTAT_BUS_FREE                0x13    // Unexpected bus free
  74. #define HASTAT_PHASE_ERR            0x14    // Target bus phase sequence                                                                 // failure
  75. #define HASTAT_TIMEOUT                0x09    // Timed out while SRB was                                                                     waiting to beprocessed.
  76. #define HASTAT_COMMAND_TIMEOUT         0x0B    // While processing the SRB, the
  77.                                                             // adapter timed out.
  78. #define HASTAT_MESSAGE_REJECT        0x0D    // While processing SRB, the                                                                 // adapter received a MESSAGE                                                             // REJECT.
  79. #define HASTAT_BUS_RESET            0x0E    // A bus reset was detected.
  80. #define HASTAT_PARITY_ERROR            0x0F    // A parity error was detected.
  81. #define HASTAT_REQUEST_SENSE_FAILED    0x10    // The adapter failed in issuing
  82.                                                         //   REQUEST SENSE.
  83.  
  84. //***************************************************************************
  85. //             %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY %%%
  86. //***************************************************************************
  87. typedef struct {
  88.     BYTE    SRB_Cmd;                // ASPI command code = SC_HA_INQUIRY
  89.     BYTE    SRB_Status;                // ASPI command status byte
  90.     BYTE    SRB_HaId;                // ASPI host adapter number
  91.     BYTE    SRB_Flags;                // ASPI request flags
  92.     DWORD    SRB_Hdr_Rsvd;            // Reserved, MUST = 0
  93.     BYTE    HA_Count;                // Number of host adapters present
  94.     BYTE    HA_SCSI_ID;                // SCSI ID of host adapter
  95.     BYTE    HA_ManagerId[16];        // String describing the manager
  96.     BYTE    HA_Identifier[16];        // String describing the host adapter
  97.     BYTE    HA_Unique[16];            // Host Adapter Unique parameters
  98.     WORD    HA_Rsvd1;
  99.  
  100. } SRB_HAInquiry, *PSRB_HAInquiry;
  101.  
  102. //***************************************************************************
  103. //              %%% SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE %%%
  104. //***************************************************************************
  105. typedef struct {
  106.  
  107.     BYTE    SRB_Cmd;                // ASPI command code = SC_GET_DEV_TYPE
  108.     BYTE    SRB_Status;                // ASPI command status byte
  109.     BYTE    SRB_HaId;                // ASPI host adapter number
  110.     BYTE    SRB_Flags;                // Reserved
  111.     DWORD    SRB_Hdr_Rsvd;            // Reserved
  112.     BYTE    SRB_Target;                // Target's SCSI ID
  113.     BYTE    SRB_Lun;                // Target's LUN number
  114.     BYTE    SRB_DeviceType;            // Target's peripheral device type
  115.     BYTE    SRB_Rsvd1;
  116.  
  117. } SRB_GDEVBlock, *PSRB_GDEVBlock;
  118.  
  119. //***************************************************************************
  120. //          %%% SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD %%%
  121. //***************************************************************************
  122.  
  123. typedef struct {
  124.     BYTE    SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  125.     BYTE    SRB_Status;                // ASPI command status byte
  126.     BYTE    SRB_HaId;                // ASPI host adapter number
  127.     BYTE    SRB_Flags;                // ASPI request flags
  128.     DWORD    SRB_Hdr_Rsvd;            // Reserved
  129.     BYTE    SRB_Target;                // Target's SCSI ID
  130.     BYTE    SRB_Lun;                // Target's LUN number
  131.     WORD     SRB_Rsvd1;                // Reserved for Alignment
  132.     DWORD    SRB_BufLen;                // Data Allocation Length
  133.     BYTE    *SRB_BufPointer;        // Data Buffer Pointer
  134.     BYTE    SRB_SenseLen;            // Sense Allocation Length     
  135.     BYTE    SRB_CDBLen;                // CDB Length
  136.     BYTE    SRB_HaStat;                // Host Adapter Status
  137.     BYTE    SRB_TargStat;            // Target Status
  138.     void    *SRB_PostProc;            // Post routine
  139.     void    *SRB_Rsvd2;                // Reserved
  140.     BYTE    SRB_Rsvd3[16];            // Reserved for alignment
  141.     BYTE    CDBByte[16];            // SCSI CDB
  142.     BYTE    SenseArea[SENSE_LEN+2];    // Request Sense buffer
  143.  
  144. } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
  145.  
  146. //***************************************************************************
  147. //                  %%% SRB - ABORT AN SRB - SC_ABORT_SRB %%%
  148. //***************************************************************************
  149. typedef struct {
  150.  
  151.     BYTE    SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  152.     BYTE    SRB_Status;                // ASPI command status byte
  153.     BYTE    SRB_HaId;                // ASPI host adapter number
  154.     BYTE    SRB_Flags;                // Reserved
  155.     DWORD    SRB_Hdr_Rsvd;            // Reserved
  156.     void    *SRB_ToAbort;            // Pointer to SRB to abort
  157.  
  158. } SRB_Abort, *PSRB_Abort;
  159.  
  160. //***************************************************************************
  161. //                %%% SRB - BUS DEVICE RESET - SC_RESET_DEV %%%
  162. //***************************************************************************
  163. typedef struct {
  164.  
  165.     BYTE    SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  166.     BYTE    SRB_Status;                // ASPI command status byte
  167.     BYTE    SRB_HaId;                // ASPI host adapter number
  168.     BYTE    SRB_Flags;                // Reserved
  169.     DWORD    SRB_Hdr_Rsvd;            // Reserved
  170.     BYTE    SRB_Target;                // Target's SCSI ID
  171.     BYTE    SRB_Lun;                // Target's LUN number
  172.     BYTE     SRB_Rsvd1[12];            // Reserved for Alignment
  173.     BYTE    SRB_HaStat;                // Host Adapter Status
  174.     BYTE    SRB_TargStat;            // Target Status
  175.     void     *SRB_PostProc;            // Post routine
  176.     void    *SRB_Rsvd2;                // Reserved
  177.     BYTE    SRB_Rsvd3[16];            // Reserved
  178.     BYTE    CDBByte[16];            // SCSI CDB
  179.  
  180. } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
  181.  
  182. //***************************************************************************
  183. //                %%% SRB - GET DISK INFORMATION - SC_GET_DISK_INFO %%%
  184. //***************************************************************************
  185. typedef struct {
  186.  
  187.     BYTE    SRB_Cmd;                // ASPI command code = SC_EXEC_SCSI_CMD
  188.     BYTE    SRB_Status;                // ASPI command status byte
  189.     BYTE    SRB_HaId;                // ASPI host adapter number
  190.     BYTE    SRB_Flags;                // Reserved
  191.     DWORD    SRB_Hdr_Rsvd;            // Reserved
  192.     BYTE    SRB_Target;                // Target's SCSI ID
  193.     BYTE    SRB_Lun;                // Target's LUN number
  194.     BYTE     SRB_DriveFlags;            // Driver flags
  195.     BYTE    SRB_Int13HDriveInfo;    // Host Adapter Status
  196.     BYTE    SRB_Heads;                // Preferred number of heads translation
  197.     BYTE    SRB_Sectors;            // Preferred number of sectors translation
  198.     BYTE    SRB_Rsvd1[10];            // Reserved
  199. } SRB_GetDiskInfo, *PSRB_GetDiskInfo;
  200.  
  201.  
  202. #ifdef __cplusplus
  203. }
  204. #endif
  205. 
  206.