2 * PROJECT: ReactOS Storport Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Storport driver main file
5 * COPYRIGHT: Copyright 2017 Eric Kohl (eric.kohl@reactos.org)
8 /* INCLUDES *******************************************************************/
16 /* GLOBALS ********************************************************************/
21 /* FUNCTIONS ******************************************************************/
25 PortAddDriverInitData(
26 PDRIVER_OBJECT_EXTENSION DriverExtension
,
27 PHW_INITIALIZATION_DATA HwInitializationData
)
29 PDRIVER_INIT_DATA InitData
;
31 DPRINT1("PortAddDriverInitData()\n");
33 InitData
= ExAllocatePoolWithTag(NonPagedPool
,
34 sizeof(DRIVER_INIT_DATA
),
37 return STATUS_NO_MEMORY
;
39 RtlCopyMemory(&InitData
->HwInitData
,
41 sizeof(HW_INITIALIZATION_DATA
));
43 InsertHeadList(&DriverExtension
->InitDataListHead
,
46 return STATUS_SUCCESS
;
52 PortDeleteDriverInitData(
53 PDRIVER_OBJECT_EXTENSION DriverExtension
)
55 PDRIVER_INIT_DATA InitData
;
56 PLIST_ENTRY ListEntry
;
58 DPRINT1("PortDeleteDriverInitData()\n");
60 ListEntry
= DriverExtension
->InitDataListHead
.Flink
;
61 while (ListEntry
!= &DriverExtension
->InitDataListHead
)
63 InitData
= CONTAINING_RECORD(ListEntry
,
67 RemoveEntryList(&InitData
->Entry
);
69 ExFreePoolWithTag(InitData
,
72 ListEntry
= DriverExtension
->InitDataListHead
.Flink
;
77 PHW_INITIALIZATION_DATA
78 PortGetDriverInitData(
79 PDRIVER_OBJECT_EXTENSION DriverExtension
,
80 INTERFACE_TYPE InterfaceType
)
82 PDRIVER_INIT_DATA InitData
;
83 PLIST_ENTRY ListEntry
;
85 DPRINT1("PortGetDriverInitData()\n");
87 ListEntry
= DriverExtension
->InitDataListHead
.Flink
;
88 while (ListEntry
!= &DriverExtension
->InitDataListHead
)
90 InitData
= CONTAINING_RECORD(ListEntry
,
93 if (InitData
->HwInitData
.AdapterInterfaceType
== InterfaceType
)
94 return &InitData
->HwInitData
;
96 ListEntry
= ListEntry
->Flink
;
107 _In_ PDRIVER_OBJECT DriverObject
,
108 _In_ PDEVICE_OBJECT PhysicalDeviceObject
)
110 PDRIVER_OBJECT_EXTENSION DriverObjectExtension
;
111 PFDO_DEVICE_EXTENSION DeviceExtension
= NULL
;
112 WCHAR NameBuffer
[80];
113 UNICODE_STRING DeviceName
;
114 PDEVICE_OBJECT Fdo
= NULL
;
115 KLOCK_QUEUE_HANDLE LockHandle
;
118 DPRINT1("PortAddDevice(%p %p)\n",
119 DriverObject
, PhysicalDeviceObject
);
121 ASSERT(DriverObject
);
122 ASSERT(PhysicalDeviceObject
);
125 L
"\\Device\\RaidPort%lu",
127 RtlInitUnicodeString(&DeviceName
, NameBuffer
);
130 DPRINT1("Creating device: %wZ\n", &DeviceName
);
132 /* Create the port device */
133 Status
= IoCreateDevice(DriverObject
,
134 sizeof(FDO_DEVICE_EXTENSION
),
136 FILE_DEVICE_CONTROLLER
,
137 FILE_DEVICE_SECURE_OPEN
,
140 if (!NT_SUCCESS(Status
))
142 DPRINT1("IoCreateDevice() failed (Status 0x%08lx)\n", Status
);
146 DPRINT1("Created device: %wZ (%p)\n", &DeviceName
, Fdo
);
148 /* Initialize the device */
149 Fdo
->Flags
|= DO_DIRECT_IO
;
150 Fdo
->Flags
|= DO_POWER_PAGABLE
;
152 /* Initialize the device extension */
153 DeviceExtension
= (PFDO_DEVICE_EXTENSION
)Fdo
->DeviceExtension
;
154 RtlZeroMemory(DeviceExtension
, sizeof(FDO_DEVICE_EXTENSION
));
156 DeviceExtension
->ExtensionType
= FdoExtension
;
158 DeviceExtension
->Device
= Fdo
;
159 DeviceExtension
->PhysicalDevice
= PhysicalDeviceObject
;
161 DeviceExtension
->PnpState
= dsStopped
;
163 /* Attach the FDO to the device stack */
164 Status
= IoAttachDeviceToDeviceStackSafe(Fdo
,
165 PhysicalDeviceObject
,
166 &DeviceExtension
->LowerDevice
);
167 if (!NT_SUCCESS(Status
))
169 DPRINT1("IoAttachDeviceToDeviceStackSafe() failed (Status 0x%08lx)\n", Status
);
174 /* Insert the FDO to the drivers FDO list */
175 DriverObjectExtension
= IoGetDriverObjectExtension(DriverObject
,
177 ASSERT(DriverObjectExtension
->ExtensionType
== DriverExtension
);
179 DeviceExtension
->DriverExtension
= DriverObjectExtension
;
181 KeAcquireInStackQueuedSpinLock(&DriverObjectExtension
->AdapterListLock
,
184 InsertHeadList(&DriverObjectExtension
->AdapterListHead
,
185 &DeviceExtension
->AdapterListEntry
);
186 DriverObjectExtension
->AdapterCount
++;
188 KeReleaseInStackQueuedSpinLock(&LockHandle
);
190 /* The device has been initialized */
191 Fdo
->Flags
&= ~DO_DEVICE_INITIALIZING
;
193 DPRINT1("PortAddDevice() done (Status 0x%08lx)\n", Status
);
203 _In_ PDRIVER_OBJECT DriverObject
)
205 PDRIVER_OBJECT_EXTENSION DriverExtension
;
207 DPRINT1("PortUnload(%p)\n",
210 DriverExtension
= IoGetDriverObjectExtension(DriverObject
,
212 if (DriverExtension
!= NULL
)
214 PortDeleteDriverInitData(DriverExtension
);
223 IN PDEVICE_OBJECT DeviceObject
,
226 DPRINT1("PortDispatchCreate(%p %p)\n",
229 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
230 Irp
->IoStatus
.Information
= FILE_OPENED
;
232 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
234 return STATUS_SUCCESS
;
242 IN PDEVICE_OBJECT DeviceObject
,
245 DPRINT1("PortDispatchClose(%p %p)\n",
248 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
249 Irp
->IoStatus
.Information
= 0;
251 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
253 return STATUS_SUCCESS
;
260 PortDispatchDeviceControl(
261 IN PDEVICE_OBJECT DeviceObject
,
264 DPRINT1("PortDispatchDeviceControl(%p %p)\n",
267 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
268 Irp
->IoStatus
.Information
= 0;
270 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
272 return STATUS_SUCCESS
;
280 IN PDEVICE_OBJECT DeviceObject
,
283 DPRINT1("PortDispatchScsi(%p %p)\n",
286 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
287 Irp
->IoStatus
.Information
= 0;
289 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
291 return STATUS_SUCCESS
;
298 PortDispatchSystemControl(
299 IN PDEVICE_OBJECT DeviceObject
,
302 DPRINT1("PortDispatchSystemControl(%p %p)\n",
305 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
306 Irp
->IoStatus
.Information
= 0;
308 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
310 return STATUS_SUCCESS
;
318 IN PDEVICE_OBJECT DeviceObject
,
321 PFDO_DEVICE_EXTENSION DeviceExtension
;
323 DPRINT1("PortDispatchPnp(%p %p)\n",
326 DeviceExtension
= (PFDO_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
;
327 DPRINT1("ExtensionType: %u\n", DeviceExtension
->ExtensionType
);
329 switch (DeviceExtension
->ExtensionType
)
332 return PortFdoPnp(DeviceObject
,
336 return PortPdoPnp(DeviceObject
,
340 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
341 Irp
->IoStatus
.Information
= 0;
342 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
343 return STATUS_UNSUCCESSFUL
;
352 IN PDEVICE_OBJECT DeviceObject
,
355 DPRINT1("PortDispatchPower(%p %p)\n",
358 Irp
->IoStatus
.Status
= STATUS_SUCCESS
;
359 Irp
->IoStatus
.Information
= 0;
361 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
363 return STATUS_SUCCESS
;
367 /* PUBLIC FUNCTIONS ***********************************************************/
375 _In_ PDRIVER_OBJECT DriverObject
,
376 _In_ PUNICODE_STRING RegistryPath
)
378 DPRINT1("DriverEntry(%p %p)\n", DriverObject
, RegistryPath
);
379 return STATUS_SUCCESS
;
389 StorPortAllocateRegistryBuffer(
390 _In_ PVOID HwDeviceExtension
,
393 DPRINT1("StorPortAllocateRegistryBuffer()\n");
406 _In_ PVOID HwDeviceExtension
,
407 _In_ ULONG RequestsToComplete
)
409 DPRINT1("StorPortBuzy()\n");
421 StorPortCompleteRequest(
422 _In_ PVOID HwDeviceExtension
,
426 _In_ UCHAR SrbStatus
)
428 DPRINT1("StorPortCompleteRequest()\n");
439 StorPortConvertPhysicalAddressToUlong(
440 _In_ STOR_PHYSICAL_ADDRESS Address
)
442 DPRINT1("StorPortConvertPhysicalAddressToUlong()\n");
444 return Address
.u
.LowPart
;
452 STOR_PHYSICAL_ADDRESS
454 StorPortConvertUlongToPhysicalAddress(
455 _In_ ULONG_PTR UlongAddress
)
457 STOR_PHYSICAL_ADDRESS Address
;
459 DPRINT1("StorPortConvertUlongToPhysicalAddress()\n");
461 Address
.QuadPart
= UlongAddress
;
472 _In_ ULONG DebugPrintLevel
,
473 _In_ PCHAR DebugMessage
,
478 va_start(ap
, DebugMessage
);
479 vDbgPrintExWithPrefix("STORMINI: ", 0x58, DebugPrintLevel
, DebugMessage
, ap
);
491 _In_ PVOID HwDeviceExtension
,
495 _In_ ULONG RequestsToComplete
)
497 DPRINT1("StorPortDeviceBusy()\n");
510 _In_ PVOID HwDeviceExtension
,
515 DPRINT1("StorPortDeviceReady()\n");
527 StorPortFreeDeviceBase(
528 _In_ PVOID HwDeviceExtension
,
529 _In_ PVOID MappedAddress
)
531 DPRINT1("StorPortFreeDeviceBase(%p %p)\n",
532 HwDeviceExtension
, MappedAddress
);
542 StorPortFreeRegistryBuffer(
543 _In_ PVOID HwDeviceExtension
,
546 DPRINT1("StorPortFreeRegistryBuffer()\n");
558 _In_ PVOID DeviceExtension
,
559 _In_ ULONG BusDataType
,
560 _In_ ULONG SystemIoBusNumber
,
561 _In_ ULONG SlotNumber
,
562 _Out_
_When_(Length
!= 0, _Out_writes_bytes_(Length
)) PVOID Buffer
,
565 PMINIPORT_DEVICE_EXTENSION MiniportExtension
;
566 PBUS_INTERFACE_STANDARD Interface
;
569 DPRINT1("StorPortGetBusData(%p %lu %lu %lu %p %lu)\n",
570 DeviceExtension
, BusDataType
, SystemIoBusNumber
, SlotNumber
, Buffer
, Length
);
572 /* Get the miniport extension */
573 MiniportExtension
= CONTAINING_RECORD(DeviceExtension
,
574 MINIPORT_DEVICE_EXTENSION
,
576 DPRINT1("DeviceExtension %p MiniportExtension %p\n",
577 DeviceExtension
, MiniportExtension
);
579 Interface
= &MiniportExtension
->Miniport
->DeviceExtension
->BusInterface
;
581 if (BusDataType
== 4)
584 ReturnLength
= Interface
->GetBusData(Interface
->Context
,
589 DPRINT1("ReturnLength: %lu\n", ReturnLength
);
601 StorPortGetDeviceBase(
602 _In_ PVOID HwDeviceExtension
,
603 _In_ INTERFACE_TYPE BusType
,
604 _In_ ULONG SystemIoBusNumber
,
605 _In_ STOR_PHYSICAL_ADDRESS IoAddress
,
606 _In_ ULONG NumberOfBytes
,
607 _In_ BOOLEAN InIoSpace
)
609 PMINIPORT_DEVICE_EXTENSION MiniportExtension
;
611 PHYSICAL_ADDRESS TranslatedAddress
;
615 DPRINT1("StorPortGetDeviceBase(%p %lu %lu 0x%I64x %lu %u)\n",
616 HwDeviceExtension
, BusType
, SystemIoBusNumber
, IoAddress
.QuadPart
, NumberOfBytes
, InIoSpace
);
618 /* Get the miniport extension */
619 MiniportExtension
= CONTAINING_RECORD(HwDeviceExtension
,
620 MINIPORT_DEVICE_EXTENSION
,
622 DPRINT1("HwDeviceExtension %p MiniportExtension %p\n",
623 HwDeviceExtension
, MiniportExtension
);
625 if (!TranslateResourceListAddress(MiniportExtension
->Miniport
->DeviceExtension
,
633 DPRINT1("Checkpoint!\n");
637 DPRINT1("Translated Address: 0x%I64x\n", TranslatedAddress
.QuadPart
);
642 DPRINT1("Translated Address: %p\n", (PVOID
)(ULONG_PTR
)TranslatedAddress
.QuadPart
);
643 return (PVOID
)(ULONG_PTR
)TranslatedAddress
.QuadPart
;
646 /* In memory space */
647 MappedAddress
= MmMapIoSpace(TranslatedAddress
,
650 DPRINT1("Mapped Address: %p\n", MappedAddress
);
652 Status
= AllocateAddressMapping(&MiniportExtension
->Miniport
->DeviceExtension
->MappedAddressList
,
657 if (!NT_SUCCESS(Status
))
659 DPRINT1("Checkpoint!\n");
660 MappedAddress
= NULL
;
663 DPRINT1("Mapped Address: %p\n", MappedAddress
);
664 return MappedAddress
;
674 StorPortGetLogicalUnit(
675 _In_ PVOID HwDeviceExtension
,
680 DPRINT1("StorPortGetLogicalUnit()\n");
690 STOR_PHYSICAL_ADDRESS
692 StorPortGetPhysicalAddress(
693 _In_ PVOID HwDeviceExtension
,
694 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
695 _In_ PVOID VirtualAddress
,
698 STOR_PHYSICAL_ADDRESS PhysicalAddress
;
700 DPRINT1("StorPortGetPhysicalAddress(%p %p %p %p)\n",
701 HwDeviceExtension
, Srb
, VirtualAddress
, Length
);
705 PhysicalAddress
.QuadPart
= (LONGLONG
)0;
707 return PhysicalAddress
;
715 PSTOR_SCATTER_GATHER_LIST
717 StorPortGetScatterGatherList(
718 _In_ PVOID DeviceExtension
,
719 _In_ PSCSI_REQUEST_BLOCK Srb
)
721 DPRINT1("StorPortGetScatterGatherList()\n");
734 _In_ PVOID DeviceExtension
,
740 DPRINT("StorPortGetSrb()\n");
751 StorPortGetUncachedExtension(
752 _In_ PVOID HwDeviceExtension
,
753 _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
754 _In_ ULONG NumberOfBytes
)
756 DPRINT1("StorPortGetUncachedExtension(%p %p %lu)\n",
757 HwDeviceExtension
, ConfigInfo
, NumberOfBytes
);
769 StorPortGetVirtualAddress(
770 _In_ PVOID HwDeviceExtension
,
771 _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress
)
773 DPRINT1("StorPortGetVirtualAddress(%p %I64x)\n",
774 HwDeviceExtension
, PhysicalAddress
.QuadPart
);
787 _In_ PVOID Argument1
,
788 _In_ PVOID Argument2
,
789 _In_
struct _HW_INITIALIZATION_DATA
*HwInitializationData
,
790 _In_opt_ PVOID HwContext
)
792 PDRIVER_OBJECT DriverObject
= (PDRIVER_OBJECT
)Argument1
;
793 PUNICODE_STRING RegistryPath
= (PUNICODE_STRING
)Argument2
;
794 PDRIVER_OBJECT_EXTENSION DriverObjectExtension
;
795 NTSTATUS Status
= STATUS_SUCCESS
;
797 DPRINT1("StorPortInitialize(%p %p %p %p)\n",
798 Argument1
, Argument2
, HwInitializationData
, HwContext
);
800 DPRINT1("HwInitializationDataSize: %lu\n", HwInitializationData
->HwInitializationDataSize
);
801 DPRINT1("AdapterInterfaceType: %u\n", HwInitializationData
->AdapterInterfaceType
);
802 DPRINT1("HwInitialize: %p\n", HwInitializationData
->HwInitialize
);
803 DPRINT1("HwStartIo: %p\n", HwInitializationData
->HwStartIo
);
804 DPRINT1("HwInterrupt: %p\n", HwInitializationData
->HwInterrupt
);
805 DPRINT1("HwFindAdapter: %p\n", HwInitializationData
->HwFindAdapter
);
806 DPRINT1("HwResetBus: %p\n", HwInitializationData
->HwResetBus
);
807 DPRINT1("HwDmaStarted: %p\n", HwInitializationData
->HwDmaStarted
);
808 DPRINT1("HwAdapterState: %p\n", HwInitializationData
->HwAdapterState
);
809 DPRINT1("DeviceExtensionSize: %lu\n", HwInitializationData
->DeviceExtensionSize
);
810 DPRINT1("SpecificLuExtensionSize: %lu\n", HwInitializationData
->SpecificLuExtensionSize
);
811 DPRINT1("SrbExtensionSize: %lu\n", HwInitializationData
->SrbExtensionSize
);
812 DPRINT1("NumberOfAccessRanges: %lu\n", HwInitializationData
->NumberOfAccessRanges
);
814 /* Check parameters */
815 if ((DriverObject
== NULL
) ||
816 (RegistryPath
== NULL
) ||
817 (HwInitializationData
== NULL
))
819 DPRINT1("Invalid parameter!\n");
820 return STATUS_INVALID_PARAMETER
;
823 /* Check initialization data */
824 if ((HwInitializationData
->HwInitializationDataSize
< sizeof(HW_INITIALIZATION_DATA
)) ||
825 (HwInitializationData
->HwInitialize
== NULL
) ||
826 (HwInitializationData
->HwStartIo
== NULL
) ||
827 (HwInitializationData
->HwFindAdapter
== NULL
) ||
828 (HwInitializationData
->HwResetBus
== NULL
))
830 DPRINT1("Revision mismatch!\n");
831 return STATUS_REVISION_MISMATCH
;
834 DriverObjectExtension
= IoGetDriverObjectExtension(DriverObject
,
836 if (DriverObjectExtension
== NULL
)
838 DPRINT1("No driver object extension!\n");
840 Status
= IoAllocateDriverObjectExtension(DriverObject
,
842 sizeof(DRIVER_OBJECT_EXTENSION
),
843 (PVOID
*)&DriverObjectExtension
);
844 if (!NT_SUCCESS(Status
))
846 DPRINT1("IoAllocateDriverObjectExtension() failed (Status 0x%08lx)\n", Status
);
850 DPRINT1("Driver object extension created!\n");
852 /* Initialize the driver object extension */
853 RtlZeroMemory(DriverObjectExtension
,
854 sizeof(DRIVER_OBJECT_EXTENSION
));
856 DriverObjectExtension
->ExtensionType
= DriverExtension
;
857 DriverObjectExtension
->DriverObject
= DriverObject
;
859 InitializeListHead(&DriverObjectExtension
->AdapterListHead
);
860 KeInitializeSpinLock(&DriverObjectExtension
->AdapterListLock
);
862 InitializeListHead(&DriverObjectExtension
->InitDataListHead
);
865 DriverObject
->DriverExtension
->AddDevice
= PortAddDevice
;
866 // DriverObject->DriverStartIo = PortStartIo;
867 DriverObject
->DriverUnload
= PortUnload
;
868 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = PortDispatchCreate
;
869 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = PortDispatchClose
;
870 DriverObject
->MajorFunction
[IRP_MJ_DEVICE_CONTROL
] = PortDispatchDeviceControl
;
871 DriverObject
->MajorFunction
[IRP_MJ_SCSI
] = PortDispatchScsi
;
872 DriverObject
->MajorFunction
[IRP_MJ_POWER
] = PortDispatchPower
;
873 DriverObject
->MajorFunction
[IRP_MJ_SYSTEM_CONTROL
] = PortDispatchSystemControl
;
874 DriverObject
->MajorFunction
[IRP_MJ_PNP
] = PortDispatchPnp
;
877 /* Add the initialzation data to the driver extension */
878 Status
= PortAddDriverInitData(DriverObjectExtension
,
879 HwInitializationData
);
881 DPRINT1("StorPortInitialize() done (Status 0x%08lx)\n", Status
);
894 _In_ PVOID HwDeviceExtension
,
895 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
899 _In_ ULONG ErrorCode
,
902 DPRINT1("ScsiPortLogError() called\n");
903 DPRINT1("PathId: 0x%02x TargetId: 0x%02x Lun: 0x%02x ErrorCode: 0x%08lx UniqueId: 0x%08lx\n",
904 PathId
, TargetId
, Lun
, ErrorCode
, UniqueId
);
906 DPRINT1("ScsiPortLogError() done\n");
917 _Out_writes_bytes_(Length
) PVOID Destination
,
918 _In_reads_bytes_(Length
) PVOID Source
,
921 RtlMoveMemory(Destination
, Source
, Length
);
930 StorPortNotification(
931 _In_ SCSI_NOTIFICATION_TYPE NotificationType
,
932 _In_ PVOID HwDeviceExtension
,
935 DPRINT1("StorPortNotification()\n");
946 _In_ PVOID HwDeviceExtension
,
949 DPRINT1("StorPortPause()\n");
962 _In_ PVOID HwDeviceExtension
,
968 DPRINT1("StorPortPauseDevice()\n");
981 _In_ PVOID HwDeviceExtension
)
983 DPRINT1("StorPortReady()\n");
995 StorPortRegistryRead(
996 _In_ PVOID HwDeviceExtension
,
997 _In_ PUCHAR ValueName
,
1001 _In_ PULONG BufferLength
)
1003 DPRINT1("StorPortRegistryRead()\n");
1015 StorPortRegistryWrite(
1016 _In_ PVOID HwDeviceExtension
,
1017 _In_ PUCHAR ValueName
,
1021 _In_ ULONG BufferLength
)
1023 DPRINT1("StorPortRegistryWrite()\n");
1036 _In_ PVOID HwDeviceExtension
)
1038 DPRINT1("StorPortResume()\n");
1050 StorPortResumeDevice(
1051 _In_ PVOID HwDeviceExtension
,
1053 _In_ UCHAR TargetId
,
1056 DPRINT1("StorPortResumeDevice()\n");
1068 StorPortSetBusDataByOffset(
1069 _In_ PVOID DeviceExtension
,
1070 _In_ ULONG BusDataType
,
1071 _In_ ULONG SystemIoBusNumber
,
1072 _In_ ULONG SlotNumber
,
1073 _In_reads_bytes_(Length
) PVOID Buffer
,
1077 PMINIPORT_DEVICE_EXTENSION MiniportExtension
;
1078 PBUS_INTERFACE_STANDARD Interface
;
1081 DPRINT1("StorPortSetBusData(%p %lu %lu %lu %p %lu %lu)\n",
1082 DeviceExtension
, BusDataType
, SystemIoBusNumber
, SlotNumber
, Buffer
, Offset
, Length
);
1084 MiniportExtension
= CONTAINING_RECORD(DeviceExtension
,
1085 MINIPORT_DEVICE_EXTENSION
,
1087 DPRINT1("DeviceExtension %p MiniportExtension %p\n",
1088 DeviceExtension
, MiniportExtension
);
1090 Interface
= &MiniportExtension
->Miniport
->DeviceExtension
->BusInterface
;
1092 ReturnLength
= Interface
->SetBusData(Interface
->Context
,
1097 DPRINT1("ReturnLength: %lu\n", ReturnLength
);
1099 return ReturnLength
;
1109 StorPortSetDeviceQueueDepth(
1110 _In_ PVOID HwDeviceExtension
,
1112 _In_ UCHAR TargetId
,
1116 DPRINT1("StorPortSetDeviceQueueDepth()\n");
1128 StorPortStallExecution(
1131 KeStallExecutionProcessor(Delay
);
1141 StorPortSynchronizeAccess(
1142 _In_ PVOID HwDeviceExtension
,
1143 _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine
,
1144 _In_opt_ PVOID Context
)
1146 DPRINT1("StorPortSynchronizeAccess()\n");
1157 StorPortValidateRange(
1158 _In_ PVOID HwDeviceExtension
,
1159 _In_ INTERFACE_TYPE BusType
,
1160 _In_ ULONG SystemIoBusNumber
,
1161 _In_ STOR_PHYSICAL_ADDRESS IoAddress
,
1162 _In_ ULONG NumberOfBytes
,
1163 _In_ BOOLEAN InIoSpace
)
1165 DPRINT1("StorPortValidateRange()\n");