blob: 3e4d525ad33c6313851a54f601a9409f6c293d9c [file] [log] [blame]
Laurent Pinchart0314a652002-05-01 22:01:30 +00001/*
Ivan Leo Puoti010eadf2005-05-23 09:54:02 +00002 * Definitions for scsi media access
Laurent Pinchart0314a652002-05-01 22:01:30 +00003 *
4 * Copyright (C) 2002 Laurent Pinchart
Ivan Leo Puoti010eadf2005-05-23 09:54:02 +00005 * Copyright 2005 Ivan Leo Puoti
Laurent Pinchart0314a652002-05-01 22:01:30 +00006 *
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
Jonathan Ernst360a3f92006-05-18 14:49:52 +020019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
Laurent Pinchart0314a652002-05-01 22:01:30 +000020 */
21
22#ifndef _NTDDSCSI_H_
23#define _NTDDSCSI_H_
24
25#ifdef __cplusplus
26extern "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
46typedef 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
62typedef 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
78typedef struct _SCSI_ADDRESS {
79 ULONG Length;
80 UCHAR PortNumber;
81 UCHAR PathId;
82 UCHAR TargetId;
83 UCHAR Lun;
84} SCSI_ADDRESS, *PSCSI_ADDRESS;
85
Eric Pouech1bb38592003-06-13 16:33:50 +000086typedef 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
Ivan Leo Puoti010eadf2005-05-23 09:54:02 +000097typedef struct _SCSI_BUS_DATA {
98 UCHAR NumberOfLogicalUnits;
99 UCHAR InitiatorBusId;
100 ULONG InquiryDataOffset;
101} SCSI_BUS_DATA, *PSCSI_BUS_DATA;
102
103typedef struct _SCSI_ADAPTER_BUS_INFO {
104 UCHAR NumberOfBuses;
105 SCSI_BUS_DATA BusData[1];
106} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
107
108typedef 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
Laurent Pinchart0314a652002-05-01 22:01:30 +0000118#ifdef __cplusplus
119}
120#endif
121
122#endif /* _NTDDSCSI_H_ */