Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #pragma once
  2.  
  3. // some defines from Windows 2000 DDK
  4.  
  5.  
  6. #define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7. #define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
  8. #define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
  9.  
  10. typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
  11.     USHORT UnitId;              // Unit identifier.
  12.     USHORT LedFlags;            // LED indicator state.
  13. } KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;
  14.  
  15. #define KEYBOARD_CAPS_LOCK_ON     4
  16. #define KEYBOARD_NUM_LOCK_ON      2
  17. #define KEYBOARD_SCROLL_LOCK_ON   1
  18.  
  19.  
  20.  
  21.  
  22.  
  23. #define FILE_DEVICE_CONTROLLER          0x00000004
  24. #define IOCTL_SCSI_BASE                 FILE_DEVICE_CONTROLLER
  25.  
  26. #define IOCTL_SCSI_PASS_THROUGH         CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  27. #define IOCTL_SCSI_PASS_THROUGH_DIRECT  CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  28. #define IOCTL_SCSI_MINIPORT             CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  29.  
  30. #define SCSI_IOCTL_DATA_OUT          0
  31. #define SCSI_IOCTL_DATA_IN           1
  32. #define SCSI_IOCTL_DATA_UNSPECIFIED  2
  33.  
  34. typedef struct _SCSI_PASS_THROUGH_DIRECT {
  35.     USHORT Length;
  36.     UCHAR ScsiStatus;
  37.     UCHAR PathId;
  38.     UCHAR TargetId;
  39.     UCHAR Lun;
  40.     UCHAR CdbLength;
  41.     UCHAR SenseInfoLength;
  42.     UCHAR DataIn;
  43.     ULONG DataTransferLength;
  44.     ULONG TimeOutValue;
  45.     PVOID DataBuffer;
  46.     ULONG SenseInfoOffset;
  47.     UCHAR Cdb[16];
  48. } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
  49.  
  50. #pragma pack(push, cdb, 1)
  51. typedef union _CDB
  52. {
  53.     //
  54.     // Standard 6-byte CDB
  55.     //
  56.  
  57.     struct _CDB6READWRITE {
  58.         UCHAR OperationCode;
  59.         UCHAR LogicalBlockMsb1 : 5;
  60.         UCHAR LogicalUnitNumber : 3;
  61.         UCHAR LogicalBlockMsb0;
  62.         UCHAR LogicalBlockLsb;
  63.         UCHAR TransferBlocks;
  64.         UCHAR Control;
  65.     } CDB6READWRITE, *PCDB6READWRITE;
  66.  
  67.     //
  68.     // SCSI Inquiry CDB
  69.     //
  70.  
  71.     struct _CDB6INQUIRY {
  72.         UCHAR OperationCode;
  73.         UCHAR Reserved1 : 5;
  74.         UCHAR LogicalUnitNumber : 3;
  75.         UCHAR PageCode;
  76.         UCHAR IReserved;
  77.         UCHAR AllocationLength;
  78.         UCHAR Control;
  79.     } CDB6INQUIRY, *PCDB6INQUIRY;
  80.  
  81.     //
  82.     // Mode sense
  83.     //
  84.  
  85.     struct _MODE_SENSE10 {
  86.         UCHAR OperationCode;
  87.         UCHAR Reserved1 : 3;
  88.         UCHAR Dbd : 1;
  89.         UCHAR Reserved2 : 1;
  90.         UCHAR LogicalUnitNumber : 3;
  91.         UCHAR PageCode : 6;
  92.         UCHAR Pc : 2;
  93.         UCHAR Reserved3[4];
  94.         UCHAR AllocationLength[2];
  95.         UCHAR Control;
  96.     } MODE_SENSE10, *PMODE_SENSE10;
  97.  
  98.     //
  99.     // Mode select
  100.     //
  101.  
  102.     struct _MODE_SELECT10 {
  103.         UCHAR OperationCode;
  104.         UCHAR SPBit : 1;
  105.         UCHAR Reserved1 : 3;
  106.         UCHAR PFBit : 1;
  107.         UCHAR LogicalUnitNumber : 3;
  108.         UCHAR Reserved2[5];
  109.         UCHAR ParameterListLength[2];
  110.         UCHAR Control;
  111.     } MODE_SELECT10, *PMODE_SELECT10;
  112.  
  113.     //
  114.     // Standard 10-byte CDB
  115.  
  116.     struct _CDB10 {
  117.         UCHAR OperationCode;
  118.         UCHAR RelativeAddress : 1;
  119.         UCHAR Reserved1 : 2;
  120.         UCHAR ForceUnitAccess : 1;
  121.         UCHAR DisablePageOut : 1;
  122.         UCHAR LogicalUnitNumber : 3;
  123.         UCHAR LogicalBlockByte0;
  124.         UCHAR LogicalBlockByte1;
  125.         UCHAR LogicalBlockByte2;
  126.         UCHAR LogicalBlockByte3;
  127.         UCHAR Reserved2;
  128.         UCHAR TransferBlocksMsb;
  129.         UCHAR TransferBlocksLsb;
  130.         UCHAR Control;
  131.     } CDB10;
  132.  
  133.     //
  134.     // Standard 12-byte CDB
  135.     //
  136.  
  137.     struct _CDB12 {
  138.         UCHAR OperationCode;
  139.         UCHAR RelativeAddress : 1;
  140.         UCHAR Reserved1 : 2;
  141.         UCHAR ForceUnitAccess : 1;
  142.         UCHAR DisablePageOut : 1;
  143.         UCHAR LogicalUnitNumber : 3;
  144.         UCHAR LogicalBlock[4];
  145.         UCHAR TransferLength[4];
  146.         UCHAR Reserved2;
  147.         UCHAR Control;
  148.     } CDB12;
  149.  
  150.     struct _START_STOP {
  151.         UCHAR OperationCode;    // 0x1B - SCSIOP_START_STOP_UNIT
  152.         UCHAR Immediate: 1;
  153.         UCHAR Reserved1 : 4;
  154.         UCHAR LogicalUnitNumber : 3;
  155.         UCHAR Reserved2[2];
  156.         UCHAR Start : 1;
  157.         UCHAR LoadEject : 1;
  158.         UCHAR Reserved3 : 6;
  159.         UCHAR Control;
  160.     } START_STOP;
  161.  
  162.     ULONG AsUlong[4];
  163.     UCHAR AsByte[16];
  164.  
  165. } CDB, *PCDB;
  166. #pragma pack(pop, cdb)
  167.  
  168. typedef struct _INQUIRYDATA
  169. {
  170.     UCHAR DeviceType : 5;
  171.     UCHAR DeviceTypeQualifier : 3;
  172.     UCHAR DeviceTypeModifier : 7;
  173.     UCHAR RemovableMedia : 1;
  174.     UCHAR Versions;
  175.     UCHAR ResponseDataFormat : 4;
  176.     UCHAR HiSupport : 1;
  177.     UCHAR NormACA : 1;
  178.     UCHAR ReservedBit : 1;
  179.     UCHAR AERC : 1;
  180.     UCHAR AdditionalLength;
  181.     UCHAR Reserved[2];
  182.     UCHAR SoftReset : 1;
  183.     UCHAR CommandQueue : 1;
  184.     UCHAR Reserved2 : 1;
  185.     UCHAR LinkedCommands : 1;
  186.     UCHAR Synchronous : 1;
  187.     UCHAR Wide16Bit : 1;
  188.     UCHAR Wide32Bit : 1;
  189.     UCHAR RelativeAddressing : 1;
  190.     UCHAR VendorId[8];
  191.     UCHAR ProductId[16];
  192.     UCHAR ProductRevisionLevel[4];
  193.     UCHAR VendorSpecific[20];
  194.     UCHAR Reserved3[40];
  195. } INQUIRYDATA, *PINQUIRYDATA;
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205. /****************************************************************************
  206. *                                                                           *
  207. * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY     *
  208. * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE       *
  209. * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR     *
  210. * PURPOSE.                                                                  *
  211. *                                                                           *
  212. * Copyright (C) 1993-95  Microsoft Corporation.  All Rights Reserved.       *
  213. *                                                                           *
  214. ****************************************************************************/
  215.  
  216. //***************************************************************************
  217. //
  218. // Name:              WNASPI32.H
  219. //
  220. // Description: ASPI for Win32 definitions ('C' Language)
  221. //
  222. //***************************************************************************
  223.  
  224. #ifdef __cplusplus
  225. extern "C" {
  226. #endif
  227.  
  228. typedef void *LPSRB;
  229. typedef void (*PFNPOST)();
  230.  
  231. DWORD SendASPI32Command    (LPSRB);
  232. DWORD GetASPI32SupportInfo (VOID);
  233.  
  234. #define SENSE_LEN                                       14                      // Default sense buffer length
  235. #define SRB_DIR_SCSI                            0x00            // Direction determined by SCSI                                                                                                                         // command
  236. #define SRB_DIR_IN                                      0x08            // Transfer from SCSI target to                                                                                                                         // host
  237. #define SRB_DIR_OUT                                     0x10            // Transfer from host to SCSI                                                                                                                   // target
  238. #define SRB_POSTING                                     0x01            // Enable ASPI posting
  239. #define SRB_EVENT_NOTIFY            0x40        // Enable ASPI event notification
  240. #define SRB_ENABLE_RESIDUAL_COUNT       0x04            // Enable residual byte count                                                                                                                   // reporting
  241. #define SRB_DATA_SG_LIST                        0x02            // Data buffer points to                                                                                                                                        // scatter-gather list
  242. #define WM_ASPIPOST                                     0x4D42          // ASPI Post message
  243. //***************************************************************************
  244. //                                               %%% ASPI Command Definitions %%%
  245. //***************************************************************************
  246. #define SC_HA_INQUIRY                           0x00            // Host adapter inquiry
  247. #define SC_GET_DEV_TYPE                         0x01            // Get device type
  248. #define SC_EXEC_SCSI_CMD                        0x02            // Execute SCSI command
  249. #define SC_ABORT_SRB                            0x03            // Abort an SRB
  250. #define SC_RESET_DEV                            0x04            // SCSI bus device reset
  251. #define SC_GET_DISK_INFO                        0x06            // Get Disk information
  252.  
  253. //***************************************************************************
  254. //                                                                %%% SRB Status %%%
  255. //***************************************************************************
  256. #define SS_PENDING                      0x00            // SRB being processed
  257. #define SS_COMP                         0x01            // SRB completed without error
  258. #define SS_ABORTED                      0x02            // SRB aborted
  259. #define SS_ABORT_FAIL           0x03            // Unable to abort SRB
  260. #define SS_ERR                          0x04            // SRB completed with error
  261.  
  262. #define SS_INVALID_CMD          0x80            // Invalid ASPI command
  263. #define SS_INVALID_HA           0x81            // Invalid host adapter number
  264. #define SS_NO_DEVICE            0x82            // SCSI device not installed
  265.  
  266. #define SS_INVALID_SRB          0xE0            // Invalid parameter set in SRB
  267. #define SS_FAILED_INIT          0xE4            // ASPI for windows failed init
  268. #define SS_ASPI_IS_BUSY         0xE5            // No resources available to execute cmd
  269. #define SS_BUFFER_TO_BIG        0xE6            // Buffer size to big to handle!
  270.  
  271. //***************************************************************************
  272. //                                                      %%% Host Adapter Status %%%
  273. //***************************************************************************
  274. #define HASTAT_OK                                       0x00    // Host adapter did not detect an                                                                                                                       // error
  275. #define HASTAT_SEL_TO                           0x11    // Selection Timeout
  276. #define HASTAT_DO_DU                            0x12    // Data overrun data underrun
  277. #define HASTAT_BUS_FREE                         0x13    // Unexpected bus free
  278. #define HASTAT_PHASE_ERR                        0x14    // Target bus phase sequence                                                                                                                            // failure
  279. #define HASTAT_TIMEOUT                          0x09    // Timed out while SRB was                                                                                                                                      waiting to beprocessed.
  280. #define HASTAT_COMMAND_TIMEOUT          0x0B    // While processing the SRB, the
  281.                                                                                                                         // adapter timed out.
  282. #define HASTAT_MESSAGE_REJECT           0x0D    // While processing SRB, the                                                                                                                            // adapter received a MESSAGE                                                                                                                   // REJECT.
  283. #define HASTAT_BUS_RESET                        0x0E    // A bus reset was detected.
  284. #define HASTAT_PARITY_ERROR                     0x0F    // A parity error was detected.
  285. #define HASTAT_REQUEST_SENSE_FAILED     0x10    // The adapter failed in issuing
  286.                                                                                                                 //   REQUEST SENSE.
  287.  
  288. //***************************************************************************
  289. //                       %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY %%%
  290. //***************************************************************************
  291. typedef struct {
  292.         BYTE    SRB_Cmd;                                // ASPI command code = SC_HA_INQUIRY
  293.         BYTE    SRB_Status;                             // ASPI command status byte
  294.         BYTE    SRB_HaId;                               // ASPI host adapter number
  295.         BYTE    SRB_Flags;                              // ASPI request flags
  296.         DWORD   SRB_Hdr_Rsvd;                   // Reserved, MUST = 0
  297.         BYTE    HA_Count;                               // Number of host adapters present
  298.         BYTE    HA_SCSI_ID;                             // SCSI ID of host adapter
  299.         BYTE    HA_ManagerId[16];               // String describing the manager
  300.         BYTE    HA_Identifier[16];              // String describing the host adapter
  301.         BYTE    HA_Unique[16];                  // Host Adapter Unique parameters
  302.         WORD    HA_Rsvd1;
  303.  
  304. } SRB_HAInquiry, *PSRB_HAInquiry;
  305.  
  306. //***************************************************************************
  307. //                        %%% SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE %%%
  308. //***************************************************************************
  309. typedef struct {
  310.  
  311.         BYTE    SRB_Cmd;                                // ASPI command code = SC_GET_DEV_TYPE
  312.         BYTE    SRB_Status;                             // ASPI command status byte
  313.         BYTE    SRB_HaId;                               // ASPI host adapter number
  314.         BYTE    SRB_Flags;                              // Reserved
  315.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  316.         BYTE    SRB_Target;                             // Target's SCSI ID
  317.         BYTE    SRB_Lun;                                // Target's LUN number
  318.         BYTE    SRB_DeviceType;                 // Target's peripheral device type
  319.         BYTE    SRB_Rsvd1;
  320.  
  321. } SRB_GDEVBlock, *PSRB_GDEVBlock;
  322.  
  323. //***************************************************************************
  324. //                %%% SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD %%%
  325. //***************************************************************************
  326.  
  327. typedef struct {
  328.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  329.         BYTE    SRB_Status;                             // ASPI command status byte
  330.         BYTE    SRB_HaId;                               // ASPI host adapter number
  331.         BYTE    SRB_Flags;                              // ASPI request flags
  332.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  333.         BYTE    SRB_Target;                             // Target's SCSI ID
  334.         BYTE    SRB_Lun;                                // Target's LUN number
  335.         WORD    SRB_Rsvd1;                              // Reserved for Alignment
  336.         DWORD   SRB_BufLen;                             // Data Allocation Length
  337.         BYTE    *SRB_BufPointer;                // Data Buffer Pointer
  338.         BYTE    SRB_SenseLen;                   // Sense Allocation Length
  339.         BYTE    SRB_CDBLen;                             // CDB Length
  340.         BYTE    SRB_HaStat;                             // Host Adapter Status
  341.         BYTE    SRB_TargStat;                   // Target Status
  342.         void    *SRB_PostProc;                  // Post routine
  343.         void    *SRB_Rsvd2;                             // Reserved
  344.         BYTE    SRB_Rsvd3[16];                  // Reserved for alignment
  345.         BYTE    CDBByte[16];                    // SCSI CDB
  346.         BYTE    SenseArea[SENSE_LEN+2]; // Request Sense buffer
  347.  
  348. } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
  349.  
  350. //***************************************************************************
  351. //                                %%% SRB - ABORT AN SRB - SC_ABORT_SRB %%%
  352. //***************************************************************************
  353. typedef struct {
  354.  
  355.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  356.         BYTE    SRB_Status;                             // ASPI command status byte
  357.         BYTE    SRB_HaId;                               // ASPI host adapter number
  358.         BYTE    SRB_Flags;                              // Reserved
  359.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  360.         void    *SRB_ToAbort;                   // Pointer to SRB to abort
  361.  
  362. } SRB_Abort, *PSRB_Abort;
  363.  
  364. //***************************************************************************
  365. //                              %%% SRB - BUS DEVICE RESET - SC_RESET_DEV %%%
  366. //***************************************************************************
  367. typedef struct {
  368.  
  369.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  370.         BYTE    SRB_Status;                             // ASPI command status byte
  371.         BYTE    SRB_HaId;                               // ASPI host adapter number
  372.         BYTE    SRB_Flags;                              // Reserved
  373.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  374.         BYTE    SRB_Target;                             // Target's SCSI ID
  375.         BYTE    SRB_Lun;                                // Target's LUN number
  376.         BYTE    SRB_Rsvd1[12];                  // Reserved for Alignment
  377.         BYTE    SRB_HaStat;                             // Host Adapter Status
  378.         BYTE    SRB_TargStat;                   // Target Status
  379.         void    *SRB_PostProc;                  // Post routine
  380.         void    *SRB_Rsvd2;                             // Reserved
  381.         BYTE    SRB_Rsvd3[16];                  // Reserved
  382.         BYTE    CDBByte[16];                    // SCSI CDB
  383.  
  384. } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
  385.  
  386. //***************************************************************************
  387. //                              %%% SRB - GET DISK INFORMATION - SC_GET_DISK_INFO %%%
  388. //***************************************************************************
  389. typedef struct {
  390.  
  391.         BYTE    SRB_Cmd;                                // ASPI command code = SC_EXEC_SCSI_CMD
  392.         BYTE    SRB_Status;                             // ASPI command status byte
  393.         BYTE    SRB_HaId;                               // ASPI host adapter number
  394.         BYTE    SRB_Flags;                              // Reserved
  395.         DWORD   SRB_Hdr_Rsvd;                   // Reserved
  396.         BYTE    SRB_Target;                             // Target's SCSI ID
  397.         BYTE    SRB_Lun;                                // Target's LUN number
  398.         BYTE    SRB_DriveFlags;                 // Driver flags
  399.         BYTE    SRB_Int13HDriveInfo;    // Host Adapter Status
  400.         BYTE    SRB_Heads;                              // Preferred number of heads translation
  401.         BYTE    SRB_Sectors;                    // Preferred number of sectors translation
  402.         BYTE    SRB_Rsvd1[10];                  // Reserved
  403. } SRB_GetDiskInfo, *PSRB_GetDiskInfo;
  404.  
  405.  
  406. //
  407. // SCSI CDB operation codes
  408. //
  409.  
  410. // 6-byte commands:
  411. #define SCSIOP_TEST_UNIT_READY          0x00
  412.  
  413. // 10-byte commands
  414. #define SCSIOP_START_STOP_UNIT          0x1B
  415. #define SCSIOP_READ                     0x28
  416. #define SCSIOP_READ_TOC                 0x43
  417.  
  418. // 12-byte commands
  419. #define SCSIOP_SET_CD_SPEED             0xBB
  420.  
  421. #ifdef __cplusplus
  422. }
  423. #endif
  424.  
  425.