1 /* @(#)spti-wnt.h 1.3 11/08/02 2004-2011 J. Schilling */ 2 /* 3 * distilled information from various header files from Microsoft's 4 * DDK for Windows NT 4.0 5 */ 6 #ifndef _SCSIPT_H_INC 7 #define _SCSIPT_H_INC 8 9 #include <schily/windows.h> 10 11 typedef struct { 12 USHORT Length; 13 UCHAR ScsiStatus; 14 UCHAR PathId; 15 UCHAR TargetId; 16 UCHAR Lun; 17 UCHAR CdbLength; 18 UCHAR SenseInfoLength; 19 UCHAR DataIn; 20 ULONG DataTransferLength; 21 ULONG TimeOutValue; 22 ULONG DataBufferOffset; 23 ULONG SenseInfoOffset; 24 UCHAR Cdb[16]; 25 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; 26 27 28 typedef struct { 29 USHORT Length; 30 UCHAR ScsiStatus; 31 UCHAR PathId; 32 UCHAR TargetId; 33 UCHAR Lun; 34 UCHAR CdbLength; 35 UCHAR SenseInfoLength; 36 UCHAR DataIn; 37 ULONG DataTransferLength; 38 ULONG TimeOutValue; 39 PVOID DataBuffer; 40 ULONG SenseInfoOffset; 41 UCHAR Cdb[16]; 42 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT; 43 44 45 typedef struct { 46 SCSI_PASS_THROUGH spt; 47 ULONG Filler; 48 UCHAR ucSenseBuf[32]; 49 UCHAR ucDataBuf[512]; 50 } SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS; 51 52 53 typedef struct { 54 SCSI_PASS_THROUGH_DIRECT spt; 55 ULONG Filler; 56 UCHAR ucSenseBuf[32]; 57 } SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, *PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER; 58 59 60 61 typedef struct { 62 UCHAR NumberOfLogicalUnits; 63 UCHAR InitiatorBusId; 64 ULONG InquiryDataOffset; 65 } SCSI_BUS_DATA, *PSCSI_BUS_DATA; 66 67 68 typedef struct { 69 UCHAR NumberOfBusses; 70 SCSI_BUS_DATA BusData[1]; 71 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO; 72 73 74 typedef struct { 75 UCHAR PathId; 76 UCHAR TargetId; 77 UCHAR Lun; 78 BOOLEAN DeviceClaimed; 79 ULONG InquiryDataLength; 80 ULONG NextInquiryDataOffset; 81 UCHAR InquiryData[1]; 82 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA; 83 84 85 typedef struct { 86 ULONG Length; 87 UCHAR PortNumber; 88 UCHAR PathId; 89 UCHAR TargetId; 90 UCHAR Lun; 91 } SCSI_ADDRESS, *PSCSI_ADDRESS; 92 93 94 /* 95 * method codes 96 */ 97 #define METHOD_BUFFERED 0 98 #define METHOD_IN_DIRECT 1 99 #define METHOD_OUT_DIRECT 2 100 #define METHOD_NEITHER 3 101 102 /* 103 * file access values 104 * 105 * These are #defined already when we include a MSC windows.h 106 */ 107 #ifndef FILE_ANY_ACCESS 108 #define FILE_ANY_ACCESS 0 109 #endif 110 #ifndef FILE_READ_ACCESS 111 #define FILE_READ_ACCESS 0x0001 112 #endif 113 #ifndef FILE_WRITE_ACCESS 114 #define FILE_WRITE_ACCESS 0x0002 115 #endif 116 117 118 #define IOCTL_SCSI_BASE 0x00000004 119 120 /* 121 * constants for DataIn member of SCSI_PASS_THROUGH* structures 122 */ 123 #define SCSI_IOCTL_DATA_OUT 0 124 #define SCSI_IOCTL_DATA_IN 1 125 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 126 127 /* 128 * Standard IOCTL define 129 */ 130 #ifndef CTL_CODE 131 #define CTL_CODE(DevType, Function, Method, Access) \ 132 (((DevType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 133 #endif 134 135 /* 136 * These are in ntddscsi.h with MSC 137 */ 138 #define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 139 #define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 140 #define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS) 141 #define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS) 142 #define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 143 #define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS) 144 145 #endif 146