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
;
610 PHYSICAL_ADDRESS TranslatedAddress
;
614 DPRINT1("StorPortGetDeviceBase(%p %lu %lu 0x%I64x %lu %u)\n",
615 HwDeviceExtension
, BusType
, SystemIoBusNumber
, IoAddress
.QuadPart
, NumberOfBytes
, InIoSpace
);
617 /* Get the miniport extension */
618 MiniportExtension
= CONTAINING_RECORD(HwDeviceExtension
,
619 MINIPORT_DEVICE_EXTENSION
,
621 DPRINT1("HwDeviceExtension %p MiniportExtension %p\n",
622 HwDeviceExtension
, MiniportExtension
);
624 if (!TranslateResourceListAddress(MiniportExtension
->Miniport
->DeviceExtension
,
632 DPRINT1("Checkpoint!\n");
636 DPRINT1("Translated Address: 0x%I64x\n", TranslatedAddress
.QuadPart
);
641 DPRINT1("Translated Address: %p\n", (PVOID
)(ULONG_PTR
)TranslatedAddress
.QuadPart
);
642 return (PVOID
)(ULONG_PTR
)TranslatedAddress
.QuadPart
;
645 /* In memory space */
646 MappedAddress
= MmMapIoSpace(TranslatedAddress
,
649 DPRINT1("Mapped Address: %p\n", MappedAddress
);
651 Status
= AllocateAddressMapping(&MiniportExtension
->Miniport
->DeviceExtension
->MappedAddressList
,
656 if (!NT_SUCCESS(Status
))
658 DPRINT1("Checkpoint!\n");
659 MappedAddress
= NULL
;
662 DPRINT1("Mapped Address: %p\n", MappedAddress
);
663 return MappedAddress
;
673 StorPortGetLogicalUnit(
674 _In_ PVOID HwDeviceExtension
,
679 DPRINT1("StorPortGetLogicalUnit()\n");
689 STOR_PHYSICAL_ADDRESS
691 StorPortGetPhysicalAddress(
692 _In_ PVOID HwDeviceExtension
,
693 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
694 _In_ PVOID VirtualAddress
,
697 STOR_PHYSICAL_ADDRESS PhysicalAddress
;
699 DPRINT1("StorPortGetPhysicalAddress(%p %p %p %p)\n",
700 HwDeviceExtension
, Srb
, VirtualAddress
, Length
);
704 PhysicalAddress
.QuadPart
= (LONGLONG
)0;
706 return PhysicalAddress
;
714 PSTOR_SCATTER_GATHER_LIST
716 StorPortGetScatterGatherList(
717 _In_ PVOID DeviceExtension
,
718 _In_ PSCSI_REQUEST_BLOCK Srb
)
720 DPRINT1("StorPortGetScatterGatherList()\n");
733 _In_ PVOID DeviceExtension
,
739 DPRINT("StorPortGetSrb()\n");
750 StorPortGetUncachedExtension(
751 _In_ PVOID HwDeviceExtension
,
752 _In_ PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
753 _In_ ULONG NumberOfBytes
)
755 PMINIPORT_DEVICE_EXTENSION MiniportExtension
;
756 PFDO_DEVICE_EXTENSION DeviceExtension
;
757 PHYSICAL_ADDRESS LowestAddress
, HighestAddress
, Alignment
;
759 DPRINT1("StorPortGetUncachedExtension(%p %p %lu)\n",
760 HwDeviceExtension
, ConfigInfo
, NumberOfBytes
);
762 /* Get the miniport extension */
763 MiniportExtension
= CONTAINING_RECORD(HwDeviceExtension
,
764 MINIPORT_DEVICE_EXTENSION
,
766 DPRINT1("HwDeviceExtension %p MiniportExtension %p\n",
767 HwDeviceExtension
, MiniportExtension
);
769 DeviceExtension
= MiniportExtension
->Miniport
->DeviceExtension
;
771 /* Return the uncached extension base address if we already have one */
772 if (DeviceExtension
->UncachedExtensionBase
!= NULL
)
773 return DeviceExtension
->UncachedExtensionBase
;
775 // FIXME: Set DMA stuff here?
777 /* Allocate the uncached extension */
778 Alignment
.QuadPart
= 0;
779 LowestAddress
.QuadPart
= 0;
780 HighestAddress
.QuadPart
= 0x00000000FFFFFFFF;
781 DeviceExtension
->UncachedExtensionBase
= MmAllocateContiguousMemorySpecifyCache(NumberOfBytes
,
786 if (DeviceExtension
->UncachedExtensionBase
== NULL
)
789 DeviceExtension
->UncachedExtensionSize
= NumberOfBytes
;
791 return DeviceExtension
->UncachedExtensionBase
;
801 StorPortGetVirtualAddress(
802 _In_ PVOID HwDeviceExtension
,
803 _In_ STOR_PHYSICAL_ADDRESS PhysicalAddress
)
805 DPRINT1("StorPortGetVirtualAddress(%p %I64x)\n",
806 HwDeviceExtension
, PhysicalAddress
.QuadPart
);
819 _In_ PVOID Argument1
,
820 _In_ PVOID Argument2
,
821 _In_
struct _HW_INITIALIZATION_DATA
*HwInitializationData
,
822 _In_opt_ PVOID HwContext
)
824 PDRIVER_OBJECT DriverObject
= (PDRIVER_OBJECT
)Argument1
;
825 PUNICODE_STRING RegistryPath
= (PUNICODE_STRING
)Argument2
;
826 PDRIVER_OBJECT_EXTENSION DriverObjectExtension
;
827 NTSTATUS Status
= STATUS_SUCCESS
;
829 DPRINT1("StorPortInitialize(%p %p %p %p)\n",
830 Argument1
, Argument2
, HwInitializationData
, HwContext
);
832 DPRINT1("HwInitializationDataSize: %lu\n", HwInitializationData
->HwInitializationDataSize
);
833 DPRINT1("AdapterInterfaceType: %u\n", HwInitializationData
->AdapterInterfaceType
);
834 DPRINT1("HwInitialize: %p\n", HwInitializationData
->HwInitialize
);
835 DPRINT1("HwStartIo: %p\n", HwInitializationData
->HwStartIo
);
836 DPRINT1("HwInterrupt: %p\n", HwInitializationData
->HwInterrupt
);
837 DPRINT1("HwFindAdapter: %p\n", HwInitializationData
->HwFindAdapter
);
838 DPRINT1("HwResetBus: %p\n", HwInitializationData
->HwResetBus
);
839 DPRINT1("HwDmaStarted: %p\n", HwInitializationData
->HwDmaStarted
);
840 DPRINT1("HwAdapterState: %p\n", HwInitializationData
->HwAdapterState
);
841 DPRINT1("DeviceExtensionSize: %lu\n", HwInitializationData
->DeviceExtensionSize
);
842 DPRINT1("SpecificLuExtensionSize: %lu\n", HwInitializationData
->SpecificLuExtensionSize
);
843 DPRINT1("SrbExtensionSize: %lu\n", HwInitializationData
->SrbExtensionSize
);
844 DPRINT1("NumberOfAccessRanges: %lu\n", HwInitializationData
->NumberOfAccessRanges
);
846 /* Check parameters */
847 if ((DriverObject
== NULL
) ||
848 (RegistryPath
== NULL
) ||
849 (HwInitializationData
== NULL
))
851 DPRINT1("Invalid parameter!\n");
852 return STATUS_INVALID_PARAMETER
;
855 /* Check initialization data */
856 if ((HwInitializationData
->HwInitializationDataSize
< sizeof(HW_INITIALIZATION_DATA
)) ||
857 (HwInitializationData
->HwInitialize
== NULL
) ||
858 (HwInitializationData
->HwStartIo
== NULL
) ||
859 (HwInitializationData
->HwFindAdapter
== NULL
) ||
860 (HwInitializationData
->HwResetBus
== NULL
))
862 DPRINT1("Revision mismatch!\n");
863 return STATUS_REVISION_MISMATCH
;
866 DriverObjectExtension
= IoGetDriverObjectExtension(DriverObject
,
868 if (DriverObjectExtension
== NULL
)
870 DPRINT1("No driver object extension!\n");
872 Status
= IoAllocateDriverObjectExtension(DriverObject
,
874 sizeof(DRIVER_OBJECT_EXTENSION
),
875 (PVOID
*)&DriverObjectExtension
);
876 if (!NT_SUCCESS(Status
))
878 DPRINT1("IoAllocateDriverObjectExtension() failed (Status 0x%08lx)\n", Status
);
882 DPRINT1("Driver object extension created!\n");
884 /* Initialize the driver object extension */
885 RtlZeroMemory(DriverObjectExtension
,
886 sizeof(DRIVER_OBJECT_EXTENSION
));
888 DriverObjectExtension
->ExtensionType
= DriverExtension
;
889 DriverObjectExtension
->DriverObject
= DriverObject
;
891 InitializeListHead(&DriverObjectExtension
->AdapterListHead
);
892 KeInitializeSpinLock(&DriverObjectExtension
->AdapterListLock
);
894 InitializeListHead(&DriverObjectExtension
->InitDataListHead
);
897 DriverObject
->DriverExtension
->AddDevice
= PortAddDevice
;
898 // DriverObject->DriverStartIo = PortStartIo;
899 DriverObject
->DriverUnload
= PortUnload
;
900 DriverObject
->MajorFunction
[IRP_MJ_CREATE
] = PortDispatchCreate
;
901 DriverObject
->MajorFunction
[IRP_MJ_CLOSE
] = PortDispatchClose
;
902 DriverObject
->MajorFunction
[IRP_MJ_DEVICE_CONTROL
] = PortDispatchDeviceControl
;
903 DriverObject
->MajorFunction
[IRP_MJ_SCSI
] = PortDispatchScsi
;
904 DriverObject
->MajorFunction
[IRP_MJ_POWER
] = PortDispatchPower
;
905 DriverObject
->MajorFunction
[IRP_MJ_SYSTEM_CONTROL
] = PortDispatchSystemControl
;
906 DriverObject
->MajorFunction
[IRP_MJ_PNP
] = PortDispatchPnp
;
909 /* Add the initialzation data to the driver extension */
910 Status
= PortAddDriverInitData(DriverObjectExtension
,
911 HwInitializationData
);
913 DPRINT1("StorPortInitialize() done (Status 0x%08lx)\n", Status
);
926 _In_ PVOID HwDeviceExtension
,
927 _In_opt_ PSCSI_REQUEST_BLOCK Srb
,
931 _In_ ULONG ErrorCode
,
934 DPRINT1("ScsiPortLogError() called\n");
935 DPRINT1("PathId: 0x%02x TargetId: 0x%02x Lun: 0x%02x ErrorCode: 0x%08lx UniqueId: 0x%08lx\n",
936 PathId
, TargetId
, Lun
, ErrorCode
, UniqueId
);
938 DPRINT1("ScsiPortLogError() done\n");
949 _Out_writes_bytes_(Length
) PVOID Destination
,
950 _In_reads_bytes_(Length
) PVOID Source
,
953 RtlMoveMemory(Destination
, Source
, Length
);
962 StorPortNotification(
963 _In_ SCSI_NOTIFICATION_TYPE NotificationType
,
964 _In_ PVOID HwDeviceExtension
,
967 DPRINT1("StorPortNotification()\n");
978 _In_ PVOID HwDeviceExtension
,
981 DPRINT1("StorPortPause()\n");
994 _In_ PVOID HwDeviceExtension
,
1000 DPRINT1("StorPortPauseDevice()\n");
1013 _In_ PVOID HwDeviceExtension
)
1015 DPRINT1("StorPortReady()\n");
1027 StorPortRegistryRead(
1028 _In_ PVOID HwDeviceExtension
,
1029 _In_ PUCHAR ValueName
,
1033 _In_ PULONG BufferLength
)
1035 DPRINT1("StorPortRegistryRead()\n");
1047 StorPortRegistryWrite(
1048 _In_ PVOID HwDeviceExtension
,
1049 _In_ PUCHAR ValueName
,
1053 _In_ ULONG BufferLength
)
1055 DPRINT1("StorPortRegistryWrite()\n");
1068 _In_ PVOID HwDeviceExtension
)
1070 DPRINT1("StorPortResume()\n");
1082 StorPortResumeDevice(
1083 _In_ PVOID HwDeviceExtension
,
1085 _In_ UCHAR TargetId
,
1088 DPRINT1("StorPortResumeDevice()\n");
1100 StorPortSetBusDataByOffset(
1101 _In_ PVOID DeviceExtension
,
1102 _In_ ULONG BusDataType
,
1103 _In_ ULONG SystemIoBusNumber
,
1104 _In_ ULONG SlotNumber
,
1105 _In_reads_bytes_(Length
) PVOID Buffer
,
1109 PMINIPORT_DEVICE_EXTENSION MiniportExtension
;
1110 PBUS_INTERFACE_STANDARD Interface
;
1113 DPRINT1("StorPortSetBusData(%p %lu %lu %lu %p %lu %lu)\n",
1114 DeviceExtension
, BusDataType
, SystemIoBusNumber
, SlotNumber
, Buffer
, Offset
, Length
);
1116 MiniportExtension
= CONTAINING_RECORD(DeviceExtension
,
1117 MINIPORT_DEVICE_EXTENSION
,
1119 DPRINT1("DeviceExtension %p MiniportExtension %p\n",
1120 DeviceExtension
, MiniportExtension
);
1122 Interface
= &MiniportExtension
->Miniport
->DeviceExtension
->BusInterface
;
1124 ReturnLength
= Interface
->SetBusData(Interface
->Context
,
1129 DPRINT1("ReturnLength: %lu\n", ReturnLength
);
1131 return ReturnLength
;
1141 StorPortSetDeviceQueueDepth(
1142 _In_ PVOID HwDeviceExtension
,
1144 _In_ UCHAR TargetId
,
1148 DPRINT1("StorPortSetDeviceQueueDepth()\n");
1160 StorPortStallExecution(
1163 KeStallExecutionProcessor(Delay
);
1173 StorPortSynchronizeAccess(
1174 _In_ PVOID HwDeviceExtension
,
1175 _In_ PSTOR_SYNCHRONIZED_ACCESS SynchronizedAccessRoutine
,
1176 _In_opt_ PVOID Context
)
1178 DPRINT1("StorPortSynchronizeAccess()\n");
1189 StorPortValidateRange(
1190 _In_ PVOID HwDeviceExtension
,
1191 _In_ INTERFACE_TYPE BusType
,
1192 _In_ ULONG SystemIoBusNumber
,
1193 _In_ STOR_PHYSICAL_ADDRESS IoAddress
,
1194 _In_ ULONG NumberOfBytes
,
1195 _In_ BOOLEAN InIoSpace
)
1197 DPRINT1("StorPortValidateRange()\n");