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