1 /* $Id: scsiport.c,v 1.1 2001/07/21 07:30:26 ekohl Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/storage/scsiport/scsiport.c
6 * PURPOSE: SCSI port driver
7 * PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
10 #include <ddk/ntddk.h>
11 #include "../include/srb.h"
14 #define UNIMPLEMENTED do {DbgPrint("%s:%d: Function not implemented", __FILE__, __LINE__); for(;;);} while (0)
16 #define VERSION "0.0.1"
18 // ------------------------------------------------------- Public Interface
23 // This function initializes the driver.
29 // IN PDRIVER_OBJECT DriverObject System allocated Driver Object
31 // IN PUNICODE_STRING RegistryPath Name of registry driver service
38 DriverEntry(IN PDRIVER_OBJECT DriverObject
,
39 IN PUNICODE_STRING RegistryPath
)
41 DbgPrint("ScsiPort Driver %s\n", VERSION
);
42 return(STATUS_SUCCESS
);
47 ScsiDebugPrint(IN ULONG DebugPrintLevel
,
48 IN PCHAR DebugMessage
,
55 if (DebugPrintLevel
> InternalDebugLevel
)
59 va_start(ap
, DebugMessage
);
60 vsprintf(Buffer
, DebugMessage
, ap
);
68 ScsiPortCompleteRequest(IN PVOID HwDeviceExtension
,
79 ScsiPortConvertPhysicalAddressToUlong(IN SCSI_PHYSICAL_ADDRESS Address
)
81 return Address
.u
.LowPart
;
86 ScsiPortFlushDma(IN PVOID HwDeviceExtension
)
93 ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension
,
94 IN PVOID MappedAddress
)
101 ScsiPortGetBusData(IN PVOID DeviceExtension
,
102 IN ULONG BusDataType
,
103 IN ULONG SystemIoBusNumber
,
113 ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension
,
114 IN INTERFACE_TYPE BusType
,
115 IN ULONG SystemIoBusNumber
,
116 IN SCSI_PHYSICAL_ADDRESS IoAddress
,
117 IN ULONG NumberOfBytes
,
118 IN BOOLEAN InIoSpace
)
121 PHYSICAL_ADDRESS TranslatedAddress
;
122 PVOID VirtualAddress
;
126 AddressSpace
= (ULONG
)InIoSpace
;
128 if (!HalTranslateBusAddress(BusType
,
136 if (AddressSpace
!= 0)
137 return (PVOID
)TranslatedAddress
.u
.LowPart
;
139 VirtualAddress
= MmMapIoSpace(TranslatedAddress
,
143 Buffer
= ExAllocatePool(NonPagedPool
,0x20);
145 return VirtualAddress
;
147 return NULL
; /* ?? */
152 ScsiPortGetLogicalUnit(IN PVOID HwDeviceExtension
,
161 SCSI_PHYSICAL_ADDRESS STDCALL
162 ScsiPortGetPhysicalAddress(IN PVOID HwDeviceExtension
,
163 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
164 IN PVOID VirtualAddress
,
171 PSCSI_REQUEST_BLOCK STDCALL
172 ScsiPortGetSrb(IN PVOID DeviceExtension
,
183 ScsiPortGetUncachedExtension(IN PVOID HwDeviceExtension
,
184 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
185 IN ULONG NumberOfBytes
)
192 ScsiPortGetVirtualAddress(IN PVOID HwDeviceExtension
,
193 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
)
200 ScsiPortInitialize(IN PVOID Argument1
,
202 IN
struct _HW_INITIALIZATION_DATA
*HwInitializationData
,
206 return(STATUS_SUCCESS
);
211 ScsiPortIoMapTransfer(IN PVOID HwDeviceExtension
,
212 IN PSCSI_REQUEST_BLOCK Srb
,
213 IN ULONG LogicalAddress
,
221 ScsiPortLogError(IN PVOID HwDeviceExtension
,
222 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
234 ScsiPortMoveMemory(OUT PVOID Destination
,
238 RtlMoveMemory(Destination
,
245 ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType
,
246 IN PVOID HwDeviceExtension
,
254 ScsiPortSetBusDataByOffset(IN PVOID DeviceExtension
,
255 IN ULONG BusDataType
,
256 IN ULONG SystemIoBusNumber
,
262 return(HalSetBusDataByOffset(BusDataType
,
272 ScsiPortValidateRange(IN PVOID HwDeviceExtension
,
273 IN INTERFACE_TYPE BusType
,
274 IN ULONG SystemIoBusNumber
,
275 IN SCSI_PHYSICAL_ADDRESS IoAddress
,
276 IN ULONG NumberOfBytes
,
277 IN BOOLEAN InIoSpace
)