1 /* $Id: srb.h,v 1.1 2001/07/21 07:29:53 ekohl Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/storage/include/srb.c
6 * PURPOSE: SCSI port driver definitions
7 * PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
10 #ifndef __STORAGE_INCLUDE_SRB_H
11 #define __STORAGE_INCLUDE_SRB_H
13 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
, *PSCSI_PHYSICAL_ADDRESS
;
16 typedef struct _ACCESS_RANGE
18 SCSI_PHYSICAL_ADDRESS RangeStart
;
20 BOOLEAN RangeInMemory
;
21 }ACCESS_RANGE
, *PACCESS_RANGE
;
24 typedef struct _PORT_CONFIGURATION_INFORMATION
27 ULONG SystemIoBusNumber
;
28 INTERFACE_TYPE AdapterInterfaceType
;
29 ULONG BusInterruptLevel
;
30 ULONG BusInterruptVector
;
31 KINTERRUPT_MODE InterruptMode
;
32 ULONG MaximumTransferLength
;
33 ULONG NumberOfPhysicalBreaks
;
39 ULONG NumberOfAccessRanges
;
40 ACCESS_RANGE (*AccessRanges
)[];
43 CCHAR InitiatorBusId
[8];
44 BOOLEAN ScatterGather
;
47 BOOLEAN AdapterScansDown
;
48 BOOLEAN AtdiskPrimaryClaimed
;
49 BOOLEAN AtdiskSecondaryClaimed
;
50 BOOLEAN Dma32BitAddresses
;
53 BOOLEAN NeedPhysicalAddresses
;
54 BOOLEAN TaggedQueuing
;
55 BOOLEAN AutoRequestSense
;
56 BOOLEAN MultipleRequestPerLu
;
58 BOOLEAN RealModeInitialized
;
59 BOOLEAN BufferAccessScsiPortControlled
;
60 UCHAR MaximumNumberOfTargets
;
61 UCHAR ReservedUchars
[2];
63 ULONG BusInterruptLevel2
;
64 ULONG BusInterruptVector2
;
65 KINTERRUPT_MODE InterruptMode2
;
70 ULONG DeviceExtensionSize
;
71 ULONG SpecificLuExtensionSize
;
72 ULONG SrbExtensionSize
;
73 } PORT_CONFIGURATION_INFORMATION
, *PPORT_CONFIGURATION_INFORMATION
;
75 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
78 typedef struct _SCSI_REQUEST_BLOCK
80 USHORT Length
; // 0x00
81 UCHAR Function
; // 0x02
82 UCHAR SrbStatus
; // 0x03
83 UCHAR ScsiStatus
; // 0x04
85 UCHAR TargetId
; // 0x06
87 UCHAR QueueTag
; // 0x08
88 UCHAR QueueAction
; // 0x09
89 UCHAR CdbLength
; // 0x0A
90 UCHAR SenseInfoBufferLength
; // 0x0B
91 ULONG SrbFlags
; // 0x0C
92 ULONG DataTransferLength
; // 0x10
93 ULONG TimeOutValue
; // 0x14
94 PVOID DataBuffer
; // 0x18
95 PVOID SenseInfoBuffer
; // 0x1C
96 struct _SCSI_REQUEST_BLOCK
*NextSrb
; // 0x20
97 PVOID OriginalRequest
; // 0x24
98 PVOID SrbExtension
; // 0x28
99 ULONG QueueSortKey
; // 0x2C
100 UCHAR Cdb
[16]; // 0x30
101 } SCSI_REQUEST_BLOCK
, *PSCSI_REQUEST_BLOCK
;
103 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
106 typedef enum _SCSI_NOTIFICATION_TYPE
112 CallDisableInterrupts
,
113 CallEnableInterrupts
,
115 } SCSI_NOTIFICATION_TYPE
, *PSCSI_NOTIFICATION_TYPE
;
118 typedef BOOLEAN STDCALL
119 (*PHW_INITIALIZE
)(IN PVOID DeviceExtension
);
121 typedef BOOLEAN STDCALL
122 (*PHW_STARTIO
)(IN PVOID DeviceExtension
,
123 IN PSCSI_REQUEST_BLOCK Srb
);
125 typedef BOOLEAN STDCALL
126 (*PHW_INTERRUPT
)(IN PVOID DeviceExtension
);
129 (*PHW_TIMER
)(IN PVOID DeviceExtension
);
132 (*PHW_DMA_STARTED
)(IN PVOID DeviceExtension
);
134 typedef ULONG STDCALL
135 (*PHW_FIND_ADAPTER
)(IN PVOID DeviceExtension
,
137 IN PVOID BusInformation
,
138 IN PCHAR ArgumentString
,
139 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
142 typedef BOOLEAN STDCALL
143 (*PHW_RESET_BUS
)(IN PVOID DeviceExtension
,
146 typedef BOOLEAN STDCALL
147 (*PHW_ADAPTER_STATE
)(IN PVOID DeviceExtension
,
149 IN BOOLEAN SaveState
);
151 typedef struct _HW_INITIALIZATION_DATA
153 ULONG HwInitializationDataSize
;
154 INTERFACE_TYPE AdapterInterfaceType
;
155 PHW_INITIALIZE HwInitialize
;
156 PHW_STARTIO HwStartIo
;
157 PHW_INTERRUPT HwInterrupt
;
158 PHW_FIND_ADAPTER HwFindAdapter
;
159 PHW_RESET_BUS HwResetBus
;
160 PHW_DMA_STARTED HwDmaStarted
;
161 PHW_ADAPTER_STATE HwAdapterState
;
162 ULONG DeviceExtensionSize
;
163 ULONG SpecificLuExtensionSize
;
164 ULONG SrbExtensionSize
;
165 ULONG NumberOfAccessRanges
;
168 BOOLEAN NeedPhysicalAddresses
;
169 BOOLEAN TaggedQueuing
;
170 BOOLEAN AutoRequestSense
;
171 BOOLEAN MultipleRequestPerLu
;
172 BOOLEAN ReceiveEvent
;
173 USHORT VendorIdLength
;
175 USHORT ReservedUshort
;
176 USHORT DeviceIdLength
;
178 } HW_INITIALIZATION_DATA
, *PHW_INITIALIZATION_DATA
;
181 /* FUNCTIONS ****************************************************************/
185 IN ULONG DebugPrintLevel
,
186 IN PCHAR DebugMessage
,
192 ScsiPortCompleteRequest (
193 IN PVOID HwDeviceExtension
,
202 ScsiPortConvertPhysicalAddressToUlong (
203 IN SCSI_PHYSICAL_ADDRESS Address
206 SCSI_PHYSICAL_ADDRESS
208 ScsiPortConvertUlongToPhysicalAddress (
209 IN ULONG UlongAddress
215 IN PVOID HwDeviceExtension
220 ScsiPortFreeDeviceBase (
221 IN PVOID HwDeviceExtension
,
222 IN PVOID MappedAddress
228 IN PVOID DeviceExtension
,
229 IN ULONG BusDataType
,
230 IN ULONG SystemIoBusNumber
,
238 ScsiPortGetDeviceBase (
239 IN PVOID HwDeviceExtension
,
240 IN INTERFACE_TYPE BusType
,
241 IN ULONG SystemIoBusNumber
,
242 IN SCSI_PHYSICAL_ADDRESS IoAddress
,
243 IN ULONG NumberOfBytes
,
249 ScsiPortGetLogicalUnit (
250 IN PVOID HwDeviceExtension
,
256 SCSI_PHYSICAL_ADDRESS
258 ScsiPortGetPhysicalAddress (
259 IN PVOID HwDeviceExtension
,
260 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
261 IN PVOID VirtualAddress
,
268 IN PVOID DeviceExtension
,
277 ScsiPortGetUncachedExtension (
278 IN PVOID HwDeviceExtension
,
279 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
280 IN ULONG NumberOfBytes
285 ScsiPortGetVirtualAddress (
286 IN PVOID HwDeviceExtension
,
287 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
295 IN
struct _HW_INITIALIZATION_DATA
*HwInitializationData
,
301 ScsiPortIoMapTransfer (
302 IN PVOID HwDeviceExtension
,
303 IN PSCSI_REQUEST_BLOCK Srb
,
304 IN ULONG LogicalAddress
,
311 IN PVOID HwDeviceExtension
,
312 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
323 OUT PVOID Destination
,
329 ScsiPortNotification (
330 IN SCSI_NOTIFICATION_TYPE NotificationType
,
331 IN PVOID HwDeviceExtension
,
337 ScsiPortReadPortUchar (
343 ScsiPortReadPortUlong (
349 ScsiPortReadPortUshort (
353 #endif /* __STORAGE_INCLUDE_SRB_H */