winedump: Decipher contents of a couple EMF records.
[wine] / include / ntddscsi.h
1 /*
2  * Definitions for scsi media access
3  *
4  * Copyright (C) 2002 Laurent Pinchart
5  * Copyright 2005 Ivan Leo Puoti
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 #ifndef _NTDDSCSI_H_
23 #define _NTDDSCSI_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
30
31 #define IOCTL_SCSI_PASS_THROUGH         CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
32 #define IOCTL_SCSI_MINIPORT             CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
33 #define IOCTL_SCSI_GET_INQUIRY_DATA     CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
34 #define IOCTL_SCSI_GET_CAPABILITIES     CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
35 #define IOCTL_SCSI_PASS_THROUGH_DIRECT  CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
36 #define IOCTL_SCSI_GET_ADDRESS          CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
37 #define IOCTL_SCSI_RESCAN_BUS           CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
38 #define IOCTL_SCSI_GET_DUMP_POINTERS    CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
39 #define IOCTL_SCSI_FREE_DUMP_POINTERS   CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)
40 #define IOCTL_IDE_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
41
42 #define SCSI_IOCTL_DATA_OUT             0
43 #define SCSI_IOCTL_DATA_IN              1
44 #define SCSI_IOCTL_DATA_UNSPECIFIED     2
45
46 typedef struct _SCSI_PASS_THROUGH {
47     USHORT       Length;
48     UCHAR        ScsiStatus;
49     UCHAR        PathId;
50     UCHAR        TargetId;
51     UCHAR        Lun;
52     UCHAR        CdbLength;
53     UCHAR        SenseInfoLength;
54     UCHAR        DataIn;
55     ULONG        DataTransferLength;
56     ULONG        TimeOutValue;
57     ULONG_PTR    DataBufferOffset;
58     ULONG        SenseInfoOffset;
59     UCHAR        Cdb[16];
60 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
61
62 typedef struct _SCSI_PASS_THROUGH_DIRECT {
63     USHORT       Length;
64     UCHAR        ScsiStatus;
65     UCHAR        PathId;
66     UCHAR        TargetId;
67     UCHAR        Lun;
68     UCHAR        CdbLength;
69     UCHAR        SenseInfoLength;
70     UCHAR        DataIn;
71     ULONG        DataTransferLength;
72     ULONG        TimeOutValue;
73     PVOID        DataBuffer;
74     ULONG        SenseInfoOffset;
75     UCHAR        Cdb[16];
76 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
77
78 typedef struct _SCSI_ADDRESS {
79     ULONG        Length;
80     UCHAR        PortNumber;
81     UCHAR        PathId;
82     UCHAR        TargetId;
83     UCHAR        Lun;
84 } SCSI_ADDRESS, *PSCSI_ADDRESS;
85
86 typedef struct _IO_SCSI_CAPABILITIES {
87     ULONG       Length;
88     ULONG       MaximumTransferLength;
89     ULONG       MaximumPhysicalPages;
90     ULONG       SupportedAsynchronousEvents;
91     ULONG       AlignmentMask;
92     BOOLEAN     TaggedQueuing;
93     BOOLEAN     AdapterScansDown;
94     BOOLEAN     AdapterUsesPio;
95 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
96
97 typedef struct _SCSI_BUS_DATA {
98     UCHAR NumberOfLogicalUnits;
99     UCHAR InitiatorBusId;
100     ULONG InquiryDataOffset;
101 } SCSI_BUS_DATA, *PSCSI_BUS_DATA;
102
103 typedef struct _SCSI_ADAPTER_BUS_INFO {
104     UCHAR NumberOfBuses;
105     SCSI_BUS_DATA BusData[1];
106 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
107
108 typedef struct _SCSI_INQUIRY_DATA {
109     UCHAR PathId;
110     UCHAR TargetId;
111     UCHAR Lun;
112     BOOLEAN DeviceClaimed;
113     ULONG InquiryDataLength;
114     ULONG NextInquiryDataOffset;
115     UCHAR InquiryData[1];
116 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
117
118 #ifdef __cplusplus
119 }
120 #endif
121
122 #endif /* _NTDDSCSI_H_ */