strmbase: Implement BasicAudio.
[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 #define IOCTL_ATA_PASS_THROUGH          CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
42 #define IOCTL_ATA_PASS_THROUGH_DIRECT   CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
43
44 #define SCSI_IOCTL_DATA_OUT             0
45 #define SCSI_IOCTL_DATA_IN              1
46 #define SCSI_IOCTL_DATA_UNSPECIFIED     2
47
48 typedef struct _SCSI_PASS_THROUGH {
49     USHORT       Length;
50     UCHAR        ScsiStatus;
51     UCHAR        PathId;
52     UCHAR        TargetId;
53     UCHAR        Lun;
54     UCHAR        CdbLength;
55     UCHAR        SenseInfoLength;
56     UCHAR        DataIn;
57     ULONG        DataTransferLength;
58     ULONG        TimeOutValue;
59     ULONG_PTR    DataBufferOffset;
60     ULONG        SenseInfoOffset;
61     UCHAR        Cdb[16];
62 } SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
63
64 typedef struct _SCSI_PASS_THROUGH_DIRECT {
65     USHORT       Length;
66     UCHAR        ScsiStatus;
67     UCHAR        PathId;
68     UCHAR        TargetId;
69     UCHAR        Lun;
70     UCHAR        CdbLength;
71     UCHAR        SenseInfoLength;
72     UCHAR        DataIn;
73     ULONG        DataTransferLength;
74     ULONG        TimeOutValue;
75     PVOID        DataBuffer;
76     ULONG        SenseInfoOffset;
77     UCHAR        Cdb[16];
78 } SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
79
80 typedef struct _SCSI_ADDRESS {
81     ULONG        Length;
82     UCHAR        PortNumber;
83     UCHAR        PathId;
84     UCHAR        TargetId;
85     UCHAR        Lun;
86 } SCSI_ADDRESS, *PSCSI_ADDRESS;
87
88 typedef struct _IO_SCSI_CAPABILITIES {
89     ULONG       Length;
90     ULONG       MaximumTransferLength;
91     ULONG       MaximumPhysicalPages;
92     ULONG       SupportedAsynchronousEvents;
93     ULONG       AlignmentMask;
94     BOOLEAN     TaggedQueuing;
95     BOOLEAN     AdapterScansDown;
96     BOOLEAN     AdapterUsesPio;
97 } IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
98
99 typedef struct _SCSI_BUS_DATA {
100     UCHAR NumberOfLogicalUnits;
101     UCHAR InitiatorBusId;
102     ULONG InquiryDataOffset;
103 } SCSI_BUS_DATA, *PSCSI_BUS_DATA;
104
105 typedef struct _SCSI_ADAPTER_BUS_INFO {
106     UCHAR NumberOfBuses;
107     SCSI_BUS_DATA BusData[1];
108 } SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
109
110 typedef struct _SCSI_INQUIRY_DATA {
111     UCHAR PathId;
112     UCHAR TargetId;
113     UCHAR Lun;
114     BOOLEAN DeviceClaimed;
115     ULONG InquiryDataLength;
116     ULONG NextInquiryDataOffset;
117     UCHAR InquiryData[1];
118 } SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
119
120 #ifdef __cplusplus
121 }
122 #endif
123
124 #endif /* _NTDDSCSI_H_ */