19 #undef ScsiPortMoveMemory 219 Srb->DataTransferLength = 0;
242 DPRINT(
"ScsiPortCompleteRequest() called\n");
246 MiniPortDeviceExtension);
249 for (
UINT8 pathId = 0; pathId < DeviceExtension->NumberOfBuses; pathId++)
256 lunEntry = lunEntry->
Flink)
269 DPRINT1(
"Completing abort request without setting SrbStatus!\n");
310 DPRINT(
"ScsiPortFlushDma()\n");
329 MiniPortDeviceExtension);
332 NextMa = DeviceExtension->MappedAddressList;
343 if (NextMa == DeviceExtension->MappedAddressList)
378 DPRINT(
"ScsiPortGetBusData()\n");
408 DPRINT(
"ScsiPortSetBusDataByOffset()\n");
438 MiniPortDeviceExtension);
461 if (DeviceBase ==
NULL)
462 return MappedAddress;
467 DeviceBase->
BusNumber = SystemIoBusNumber;
471 DeviceExtension->MappedAddressList = DeviceBase;
473 return MappedAddress;
488 DPRINT(
"ScsiPortGetLogicalUnit() called\n");
492 MiniPortDeviceExtension);
495 if (!DeviceExtension->LunExtensionSize)
511 return (LunExtension + 1);
531 DPRINT(
"ScsiPortGetPhysicalAddress(%p %p %p %p)\n",
536 MiniPortDeviceExtension);
546 else if (DeviceExtension->MapRegisters)
590 DPRINT1(
"ScsiPortGetSrb() unimplemented\n");
606 ULONG MapRegistersCount;
609 DPRINT(
"ScsiPortGetUncachedExtension(%p %p %lu)\n",
614 MiniPortDeviceExtension);
619 DPRINT1(
"The HBA has already got a common DMA buffer!\n");
649 DPRINT1(
"HalGetAdapter() failed\n");
654 if (ConfigInfo->NumberOfPhysicalBreaks != 0 &&
655 MapRegistersCount > ConfigInfo->NumberOfPhysicalBreaks)
658 ConfigInfo->NumberOfPhysicalBreaks;
667 DeviceExtension->SupportsAutoSense = ConfigInfo->AutoRequestSense;
675 DeviceExtension->NeedSrbExtensionAlloc =
TRUE;
682 DPRINT1(
"SpiAllocateCommonBuffer() failed with Status = 0x%08X!\n",
Status);
703 if (DeviceExtension->SupportsAutoSense)
725 &DeviceExtension->PhysicalAddress,
746 CommonBufferLength -= NonCachedSize;
754 if (DeviceExtension->NeedSrbExtensionAlloc)
757 DeviceExtension->SrbDataCount = CommonBufferLength /
BufSize;
761 DeviceExtension->FreeSrbExtensions = SrbExtension;
764 while (CommonBufferLength >= 2 *
BufSize)
767 SrbExtension = *SrbExtension;
788 DPRINT(
"ScsiPortGetVirtualAddress(%p %I64x)\n",
793 MiniPortDeviceExtension);
848 ULONG DeviceExtensionSize;
849 ULONG PortConfigSize;
864 DPRINT (
"ScsiPortInitialize() called!\n");
881 if (!driverExtension)
886 (
PVOID *)&driverExtension);
890 DPRINT1(
"Failed to allocate the driver extension! Status 0x%x\n",
Status);
949 DPRINT(
"MaxBus: %lu\n", MaxBus);
953 WCHAR NameBuffer[27];
956 L"\\Device\\ScsiPort%lu",
960 DPRINT1(
"Failed to allocate memory for device name!\n");
962 PortDeviceObject =
NULL;
979 DPRINT1(
"IoCreateDevice call failed! (Status 0x%lX)\n",
Status);
980 PortDeviceObject =
NULL;
993 DeviceExtension->Common.DeviceObject = PortDeviceObject;
994 DeviceExtension->Common.IsFDO =
TRUE;
995 DeviceExtension->Length = DeviceExtensionSize;
1008 DeviceExtension->LunExtensionSize =
1015 DeviceExtension->RequestsNumber = 16;
1026 DeviceExtension->TimerCount = -1;
1046 if (DeviceExtension->PortConfig ==
NULL)
1055 DeviceExtension->PortConfig,
1060 DPRINT(
"SpiCreatePortConfig() failed with Status 0x%08X\n",
Status);
1064 PortConfig = DeviceExtension->PortConfig;
1101 DeviceExtension->PortConfig =
NULL;
1104 goto CreatePortConfig;
1110 DeviceExtension->PortConfig =
NULL;
1112 goto CreatePortConfig;
1126 PortConfig, &Again);
1128 DPRINT(
"HwFindAdapter() Result: %lu Again: %s\n",
Result, (Again) ?
"True" :
"False");
1131 if (DeviceExtension->MapRegisterBase !=
NULL)
1133 ExFreePool(DeviceExtension->MapRegisterBase);
1134 DeviceExtension->MapRegisterBase =
NULL;
1148 DeviceExtension->PortConfig =
NULL;
1150 goto CreatePortConfig;
1159 "ScsiPortInitialize(): Found HBA! (%x), adapter Id %d\n",
1190 DPRINT1(
"IoReportDetectedDevice failed. Status: 0x%x\n",
Status);
1197 ASSERT(DeviceExtension->Common.LowerDevice);
1213 DeviceExtension->CachesData = PortConfig->
CachesData;
1214 DeviceExtension->ReceiveEvent = PortConfig->
ReceiveEvent;
1215 DeviceExtension->SupportsTaggedQueuing = PortConfig->
TaggedQueuing;
1219 size_t BusConfigSize = DeviceExtension->NumberOfBuses *
sizeof(*DeviceExtension->Buses);
1221 if (!DeviceExtension->Buses)
1223 DPRINT1(
"Out of resources!\n");
1229 for (
UINT8 pathId = 0; pathId < DeviceExtension->NumberOfBuses; pathId++)
1231 DeviceExtension->Buses[pathId].BusIdentifier =
1232 DeviceExtension->PortConfig->InitiatorBusId[pathId];
1244 if (DeviceExtension->SupportsTaggedQueuing || DeviceExtension->MultipleReqsPerLun)
1246 DeviceExtension->NeedSrbDataAlloc =
TRUE;
1250 DeviceExtension->NeedSrbDataAlloc =
FALSE;
1257 DeviceExtension->MapBuffers = PortConfig->
MapBuffers;
1263 DPRINT1(
"DMA is not supported yet\n");
1271 DeviceExtension->NeedSrbExtensionAlloc =
TRUE;
1282 if (DeviceExtension->NeedSrbDataAlloc)
1287 if (DeviceExtension->SrbDataCount != 0)
1288 Count = DeviceExtension->SrbDataCount;
1290 Count = DeviceExtension->RequestsNumber * 2;
1295 if (SrbData ==
NULL)
1300 DeviceExtension->SrbInfo = SrbData;
1301 DeviceExtension->FreeSrbInfo = SrbData;
1302 DeviceExtension->SrbDataCount =
Count;
1325 PortCapabilities->
TaggedQueuing = DeviceExtension->SupportsTaggedQueuing;
1351 DPRINT1(
"Failed to start the legacy adapter. Status 0x%x\n",
Status);
1357 FirstConfigCall =
FALSE;
1392 DPRINT(
"ScsiPortInitialize() done, Status = 0x%08X, DeviceFound = %d!\n",
1407 DPRINT1(
"ScsiPortIoMapTransfer()\n");
1425 DPRINT1(
"ScsiPortLogError() called\n");
1426 DPRINT1(
"PathId: 0x%02x TargetId: 0x%02x Lun: 0x%02x ErrorCode: 0x%08lx UniqueId: 0x%08lx\n",
1432 DPRINT(
"ScsiPortLogError() done\n");
1458 DPRINT(
"ScsiPortNotification() called\n");
1463 DPRINT(
"DeviceExtension %p\n", DeviceExtension);
1476 DPRINT(
"Notify: RequestComplete (Srb %p)\n",
Srb);
1519 DeviceExtension->InterruptData.CompletedRequests = SrbData;
1525 DPRINT(
"Notify: NextRequest\n");
1541 "Notify: NextLuRequest(PathId %u TargetId %u Lun %u)\n",
PathId,
TargetId,
Lun);
1561 LunExtension->
ReadyLun = DeviceExtension->InterruptData.ReadyLun;
1562 DeviceExtension->InterruptData.ReadyLun = LunExtension;
1567 DPRINT(
"Notify: ResetDetected\n");
1573 DPRINT1(
"UNIMPLEMENTED SCSI Notification called: CallDisableInterrupts!\n");
1577 DPRINT1(
"UNIMPLEMENTED SCSI Notification called: CallEnableInterrupts!\n");
1581 DPRINT(
"Notify: RequestTimerCall\n");
1588 DPRINT1(
"UNIMPLEMENTED SCSI Notification called: BusChangeDetected!\n");
1613 DPRINT(
"ScsiPortValidateRange()\n");
1635 for (
Index = 0;
Index < ResourceDescriptor->PartialResourceList.Count;
Index++)
1637 PartialData = &ResourceDescriptor->PartialResourceList.PartialDescriptors[
Index];
1639 switch (PartialData->
Type)
1643 if (RangeNumber < HwInitializationData->NumberOfAccessRanges)
1645 AccessRange = &((*(PortConfig->AccessRanges))[RangeNumber]);
1657 if (RangeNumber < HwInitializationData->NumberOfAccessRanges)
1659 AccessRange = &((*(PortConfig->AccessRanges))[RangeNumber]);
1674 PortConfig->BusInterruptLevel = PartialData->
u.
Interrupt.Level;
1675 PortConfig->BusInterruptVector = PartialData->
u.
Interrupt.Vector;
1680 PortConfig->InterruptMode =
Latched;
1690 PortConfig->BusInterruptLevel2 = PartialData->
u.
Interrupt.Level;
1691 PortConfig->BusInterruptVector2 = PartialData->
u.
Interrupt.Vector;
1696 PortConfig->InterruptMode2 =
Latched;
1711 PortConfig->DmaChannel = PartialData->
u.
Dma.Channel;
1712 PortConfig->DmaPort = PartialData->
u.
Dma.Port;
1724 PortConfig->DmaChannel2 = PartialData->
u.
Dma.Channel;
1725 PortConfig->DmaPort2 = PartialData->
u.
Dma.Port;
1748 ULONG ListLength = 0,
i, FullSize;
1777 Interrupt = DeviceExtension->InterruptCount;
1806 ResourceList->List[0].PartialResourceList.Count = ListLength;
1807 ResourceDescriptor =
ResourceList->List[0].PartialResourceList.PartialDescriptors;
1834 ResourceDescriptor++;
1856 ResourceDescriptor->
u.
Interrupt.Affinity = 0;
1858 ResourceDescriptor++;
1869 ResourceDescriptor->
Flags = 0;
1879 ResourceDescriptor->
u.
Dma.Channel = 0;
1882 ResourceDescriptor->
u.
Dma.Port = 0;
1884 ResourceDescriptor++;
1905 ULONG FunctionNumber;
1906 CHAR VendorIdString[8];
1907 CHAR DeviceIdString[8];
1912 DPRINT (
"SpiGetPciConfiguration() called\n");
1922 for (FunctionNumber = NextSlotNumber->u.bits.FunctionNumber; FunctionNumber <
PCI_MAX_FUNCTION; FunctionNumber++)
1924 SlotNumber.u.bits.FunctionNumber = FunctionNumber;
1945 sprintf (VendorIdString,
"%04hx", PciConfig.VendorID);
1946 sprintf (DeviceIdString,
"%04hx", PciConfig.DeviceID);
1955 DPRINT(
"Found device 0x%04hx 0x%04hx at %1lu %2lu %1lu\n",
1986 NextSlotNumber->u.bits.FunctionNumber = FunctionNumber + 1;
1989 PortConfig->SlotNumber =
SlotNumber.u.AsULONG;
1993 NextSlotNumber->u.bits.FunctionNumber = 0;
1996 NextSlotNumber->u.bits.DeviceNumber = 0;
1997 DPRINT (
"No device found\n");
2029 DPRINT(
"ScsiPortCreateClose()\n");
2093 while (TotalLength < Srb->DataTransferLength)
2095 if (!ScatterGatherList)
2103 &ScatterGatherList->
Length,
2107 ScatterGatherList++;
2129 DPRINT(
"ScsiPortIsr() called!\n");
2148 DeviceExtension->CurrentIrp,
2163 DPRINT(
"SpiProcessTimeout() entered\n");
2165 DeviceExtension->TimerCount = -1;
2181 DPRINT(
"Resetting the bus\n");
2183 for (Bus = 0; Bus < DeviceExtension->NumberOfBuses; Bus++)
2189 DeviceExtension->TimerCount = 4;
2215 DeviceExtension->TimerCount = 4;
2243 DPRINT(
"ScsiPortIoTimer()\n");
2251 if (DeviceExtension->TimerCount > 0)
2254 DeviceExtension->TimerCount--;
2256 if (DeviceExtension->TimerCount == 0)
2261 DeviceExtension->Common.DeviceObject))
2263 DPRINT(
"Error happened during processing timeout, but nothing critical\n");
2274 for (
UINT8 pathId = 0; pathId < DeviceExtension->NumberOfBuses; pathId++)
2280 lunEntry = lunEntry->
Flink)
2286 if (!(LunExtension->
Flags &
2289 DPRINT(
"Retrying busy request\n");
2311 DPRINT(
"Request timed out, resetting bus\n");
2345 DPRINT(
"Miniport timer DPC\n");
2353 if (DeviceExtension->HwScsiTimer !=
NULL)
2364 DeviceExtension->Common.DeviceObject,
2382 WCHAR DeviceBuffer[16];
2383 WCHAR StrBuffer[512];
2423 for (Bus = 0; Bus < 8; Bus++)
2442 DeviceExtension->Common.DeviceObject->DriverObject->HardwareDatabase,
2454 swprintf(StrBuffer,
L"ScsiAdapter\\%lu",
2476 DPRINT(
"Hardware info found at %S\n", StrBuffer);
2665 DPRINT(
"Bad data type for MaximumLogicalUnit\n");
2669 DeviceExtension->MaxLunCount = *((
PUCHAR)
2676 DPRINT(
"MaximumLogicalUnit = %d\n", DeviceExtension->MaxLunCount);
2686 DPRINT(
"Bad data type for InitiatorTargetId\n");
2690 ConfigInfo->InitiatorBusId[0] = *((
PUCHAR)
2694 if (ConfigInfo->InitiatorBusId[0] > ConfigInfo->MaximumNumberOfTargets - 1)
2695 ConfigInfo->InitiatorBusId[0] = (
CCHAR)-1;
2697 DPRINT(
"InitiatorTargetId = %d\n", ConfigInfo->InitiatorBusId[0]);
2704 DPRINT(
"ScsiDebug key not supported\n");
2711 DPRINT1(
"Breakpoint on entry requested!\n");
2716 if (
_wcsnicmp(KeyValueInformation->
Name,
L"DisableSynchronousTransfers",
2720 DPRINT(
"Synch transfers disabled\n");
2728 DPRINT(
"Disconnects disabled\n");
2732 if (
_wcsnicmp(KeyValueInformation->
Name,
L"DisableTaggedQueuing",
2735 InternalConfigInfo->DisableTaggedQueueing =
TRUE;
2736 DPRINT(
"Tagged queueing disabled\n");
2740 if (
_wcsnicmp(KeyValueInformation->
Name,
L"DisableMultipleRequests",
2743 InternalConfigInfo->DisableMultipleLun =
TRUE;
2744 DPRINT(
"Multiple requests disabled\n");
2756 if (InternalConfigInfo->Parameter !=
NULL)
2763 if (InternalConfigInfo->Parameter !=
NULL)
2769 InternalConfigInfo->Parameter,
2770 (PCCHAR)KeyValueInformation + KeyValueInformation->
DataOffset,
2779 (
PWSTR)((PCCHAR)KeyValueInformation + KeyValueInformation->
DataOffset);
2793 InternalConfigInfo->Parameter =
NULL;
2799 DPRINT(
"Found driver parameter\n");
2808 DPRINT(
"Bad data type for MaximumSGList\n");
2824 DPRINT(
"MaximumSGList = %d\n", ConfigInfo->NumberOfPhysicalBreaks);
2833 DPRINT(
"NumberOfRequests has wrong data type\n");
2840 if (DeviceExtension->RequestsNumber < 16)
2842 DeviceExtension->RequestsNumber = 16;
2844 else if (DeviceExtension->RequestsNumber > 512)
2846 DeviceExtension->RequestsNumber = 512;
2849 DPRINT(
"Number Of Requests = %d\n", DeviceExtension->RequestsNumber);
2861 DPRINT(
"Bad data type for ResourceList\n");
2866 DPRINT(
"Found ResourceList\n");
2873 ConfigInfo->SystemIoBusNumber = FullResource->
BusNumber;
2886 DPRINT(
"Resource data is of incorrect size\n");
2890 switch (PartialDescriptor->
Type)
2893 if (RangeCount >= ConfigInfo->NumberOfAccessRanges)
2895 DPRINT(
"Too many access ranges\n");
2899 InternalConfigInfo->AccessRanges[RangeCount].RangeInMemory =
FALSE;
2900 InternalConfigInfo->AccessRanges[RangeCount].RangeStart = PartialDescriptor->
u.
Port.Start;
2901 InternalConfigInfo->AccessRanges[RangeCount].RangeLength = PartialDescriptor->
u.
Port.Length;
2907 if (RangeCount >= ConfigInfo->NumberOfAccessRanges)
2909 DPRINT(
"Too many access ranges\n");
2913 InternalConfigInfo->AccessRanges[RangeCount].RangeInMemory =
TRUE;
2914 InternalConfigInfo->AccessRanges[RangeCount].RangeStart = PartialDescriptor->
u.
Memory.Start;
2915 InternalConfigInfo->AccessRanges[RangeCount].RangeLength = PartialDescriptor->
u.
Memory.Length;
2924 ConfigInfo->BusInterruptLevel =
2927 ConfigInfo->BusInterruptVector =
2934 ConfigInfo->BusInterruptLevel2 =
2937 ConfigInfo->BusInterruptVector2 =
2950 ConfigInfo->DmaChannel = PartialDescriptor->
u.
Dma.Channel;
2951 ConfigInfo->DmaPort = PartialDescriptor->
u.
Dma.Port;
2963 ConfigInfo->DmaChannel2 = PartialDescriptor->
u.
Dma.Channel;
2964 ConfigInfo->DmaPort2 = PartialDescriptor->
u.
Dma.Port;
2981 (
PCHAR) (PartialDescriptor + 1) - (
PCHAR)FullResource +
2985 DPRINT(
"Resource data length is incorrect");
3046 #undef ScsiPortConvertPhysicalAddressToUlong 3053 DPRINT(
"ScsiPortConvertPhysicalAddressToUlong()\n");
struct _LIST_ENTRY * PLIST_ENTRY
struct _SCSI_REQUEST_BLOCK_INFO * CompletedRequests
#define DO_DEVICE_INITIALIZING
struct _RESETBUS_PARAMS * PRESETBUS_PARAMS
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
#define STATUS_REVISION_MISMATCH
#define SRBEV_SCSI_ASYNC_NOTIFICATION
FORCEINLINE VOID IoInitializeDpcRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIO_DPC_ROUTINE DpcRoutine)
#define CM_RESOURCE_DMA_16
struct _CM_RESOURCE_LIST * PCM_RESOURCE_LIST
enum _IO_ALLOCATION_ACTION IO_ALLOCATION_ACTION
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
VOID NTAPI SpiCompleteRequest(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK_INFO SrbInfo, IN UCHAR SrbStatus)
#define STATUS_DEVICE_DOES_NOT_EXIST
PVOID NTAPI ScsiPortGetUncachedExtension(IN PVOID HwDeviceExtension, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN ULONG NumberOfBytes)
#define CmResourceTypeDeviceSpecific
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
#define SP_UNINITIALIZED_VALUE
ULONG SupportedAsynchronousEvents
#define STATUS_INSUFFICIENT_RESOURCES
_In_ NDIS_ERROR_CODE ErrorCode
_In_ ULONG _In_ ULONG _In_ ULONG Length
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
enum _INTERFACE_TYPE INTERFACE_TYPE
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR _In_ UCHAR Lun
PSCSI_PORT_DEVICE_EXTENSION DeviceExtension
_IRQL_requires_same_ _In_opt_ PVOID Argument1
#define ALIGN_UP(size, type)
BOOLEAN DisableMultipleLun
NTSTATUS NTAPI IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress, IN ULONG DriverObjectExtensionSize, OUT PVOID *DriverObjectExtension)
#define OBJ_CASE_INSENSITIVE
enum _SCSI_NOTIFICATION_TYPE SCSI_NOTIFICATION_TYPE
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
#define MmGetMdlVirtualAddress(_Mdl)
PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID)
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375::@380 Memory
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR PathId
#define SRB_FLAGS_IS_ACTIVE
struct _DEVICE_OBJECT * PDEVICE_OBJECT
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
VOID SpiInitOpenKeys(_Inout_ PCONFIGURATION_INFO ConfigInfo, _In_ PSCSI_PORT_DRIVER_EXTENSION DriverExtension)
PHYSICAL_ADDRESS NTAPI IoMapTransfer(IN PADAPTER_OBJECT AdapterObject, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, IN OUT PULONG Length, IN BOOLEAN WriteToDevice)
IO_SCSI_CAPABILITIES PortCapabilities
enum _BUS_DATA_TYPE BUS_DATA_TYPE
_In_ ULONG _In_ BOOLEAN _In_ ULONG _In_ UCHAR _In_ UCHAR TargetId
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
#define SCSI_MAXIMUM_LOGICAL_UNITS
KSYNCHRONIZE_ROUTINE ScsiPortStartPacket
#define SCSI_PORT_DISABLE_INTERRUPTS
struct SCSI_PORT_DEVICE_EXTENSION * PSCSI_PORT_DEVICE_EXTENSION
NTSTATUS NTAPI SpQueryDeviceCallout(IN PVOID Context, IN PUNICODE_STRING PathName, IN INTERFACE_TYPE BusType, IN ULONG BusNumber, IN PKEY_VALUE_FULL_INFORMATION *BusInformation, IN CONFIGURATION_TYPE ControllerType, IN ULONG ControllerNumber, IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, IN CONFIGURATION_TYPE PeripheralType, IN ULONG PeripheralNumber, IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation)
VOID NTAPI KeAcquireSpinLockAtDpcLevel(IN PKSPIN_LOCK SpinLock)
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
static VOID NTAPI ScsiPortIoTimer(PDEVICE_OBJECT DeviceObject, PVOID Context)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA _In_ PVOID HwContext
ULONG NumberOfMapRegisters
ULONG NTAPI ScsiPortSetBusDataByOffset(IN PVOID DeviceExtension, IN ULONG BusDataType, IN ULONG SystemIoBusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
BOOLEAN MultipleRequestPerLu
VOID NTAPI ScsiPortCompleteRequest(IN PVOID HwDeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN UCHAR SrbStatus)
static VOID SpiParseDeviceInfo(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, IN HANDLE Key, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN PCONFIGURATION_INFO InternalConfigInfo, IN PUCHAR Buffer)
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_opt_ PCUNICODE_STRING UnicodeString
IO_DPC_ROUTINE ScsiPortDpcForIsr
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
PDEVICE_OBJECT PhysicalDeviceObject
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
#define SCSI_PORT_NOTIFICATION_NEEDED
#define OBJ_KERNEL_HANDLE
void __cdecl __debugbreak(void)
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
DRIVER_DISPATCH ScsiPortDispatchScsi
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR
NTSTATUS PdoDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
SCSI_PHYSICAL_ADDRESS NTAPI ScsiPortGetPhysicalAddress(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN PVOID VirtualAddress, OUT ULONG *Length)
#define CM_RESOURCE_MEMORY_READ_WRITE
#define CmResourceTypePort
#define DEVICE_DESCRIPTION_VERSION
PVOID MiniPortDeviceExtension
#define RtlMoveMemory(Destination, Source, Length)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
BOOLEAN NTAPI ScsiPortIsr(_In_ PKINTERRUPT Interrupt, _In_ PVOID ServiceContext)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375::@381 Dma
VOID NTAPI SpiMiniportTimerDpc(IN struct _KDPC *Dpc, IN PVOID DeviceObject, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375::@378 Interrupt
PVOID NTAPI ScsiPortGetDeviceBase(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, IN ULONG SystemIoBusNumber, IN SCSI_PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfBytes, IN BOOLEAN InIoSpace)
ULONG MaximumPhysicalPages
#define STATUS_INTERNAL_ERROR
#define sprintf(buf, format,...)
_In_ WDF_SPECIAL_FILE_TYPE NotificationType
VOID NTAPI ScsiPortFreeDeviceBase(IN PVOID HwDeviceExtension, IN PVOID MappedAddress)
CM_PARTIAL_RESOURCE_LIST PartialResourceList
_In_ PDEVICE_OBJECT DeviceObject
static PCM_RESOURCE_LIST SpiConfigToResource(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, PPORT_CONFIGURATION_INFORMATION PortConfig)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
BOOLEAN NeedPhysicalAddresses
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define FILE_DEVICE_CONTROLLER
IO_ALLOCATION_ACTION NTAPI SpiAdapterControl(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID MapRegisterBase, PVOID Context)
BOOLEAN NTAPI SpiProcessTimeout(PVOID ServiceContext)
BOOLEAN NTAPI SpiResetBus(PVOID ServiceContext)
#define SCSI_MAXIMUM_TARGETS_PER_BUS
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375 u
#define SRB_FLAGS_SGLIST_FROM_POOL
#define SCSI_PORT_NEXT_REQUEST_READY
VOID NTAPI ScsiPortIoMapTransfer(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb, IN PVOID LogicalAddress, IN ULONG Length)
PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack(IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice)
struct _CM_SCSI_DEVICE_DATA * PCM_SCSI_DEVICE_DATA
PHW_INITIALIZE HwInitialize
struct _SENSE_DATA SENSE_DATA
struct _CM_FULL_RESOURCE_DESCRIPTOR * PCM_FULL_RESOURCE_DESCRIPTOR
VOID __cdecl ScsiDebugPrint(IN ULONG DebugPrintLevel, IN PCCHAR DebugMessage, IN ...)
ULONG NTAPI ScsiPortInitialize(IN PVOID Argument1, IN PVOID Argument2, IN PHW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext OPTIONAL)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
#define CM_RESOURCE_DMA_32
static NTSTATUS SpiCreatePortConfig(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, PHW_INITIALIZATION_DATA HwInitData, PCONFIGURATION_INFO InternalConfigInfo, PPORT_CONFIGURATION_INFORMATION ConfigInfo, BOOLEAN FirstCall)
VOID NTAPI IoStartPacket(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PULONG Key, IN PDRIVER_CANCEL CancelFunction)
#define SRB_STATUS_PENDING
#define CM_RESOURCE_DMA_8_AND_16
struct _SCSI_REQUEST_BLOCK_INFO * PSCSI_REQUEST_BLOCK_INFO
PACCESS_RANGE AccessRanges
PSCSI_SG_ADDRESS ScatterGather
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define IoCompleteRequest
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
struct _MAPPED_ADDRESS * NextMappedAddress
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFKEY * Key
NTHALAPI ULONG NTAPI HalGetInterruptVector(INTERFACE_TYPE, ULONG, ULONG, ULONG, PKIRQL, PKAFFINITY)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
#define REG_FULL_RESOURCE_DESCRIPTOR
PSCSI_REQUEST_BLOCK NTAPI ScsiPortGetSrb(IN PVOID DeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN LONG QueueTag)
NTHALAPI NTSTATUS NTAPI HalAssignSlotResources(PUNICODE_STRING, PUNICODE_STRING, PDRIVER_OBJECT, PDEVICE_OBJECT, INTERFACE_TYPE, ULONG, ULONG, PCM_RESOURCE_LIST *)
NTSTATUS NTAPI ScsiPortDeviceControl(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static NTSTATUS SpiAllocateCommonBuffer(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, ULONG NonCachedSize)
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
#define SCSI_PORT_RESET_REQUEST
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
NTSTATUS NTAPI IoQueryDeviceDescription(PINTERFACE_TYPE BusType OPTIONAL, PULONG BusNumber OPTIONAL, PCONFIGURATION_TYPE ControllerType OPTIONAL, PULONG ControllerNumber OPTIONAL, PCONFIGURATION_TYPE PeripheralType OPTIONAL, PULONG PeripheralNumber OPTIONAL, PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, PVOID Context)
struct _LIST_ENTRY * Flink
#define PCI_INVALID_VENDORID
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375::@384 DeviceSpecificData
#define NT_SUCCESS(StatCode)
_In_ WDFCOLLECTION _In_ ULONG Index
SCSI_REQUEST_BLOCK_INFO SrbInfo
#define LUNEX_NEED_REQUEST_SENSE
NTSTATUS NTAPI IoInitializeTimer(IN PDEVICE_OBJECT DeviceObject, IN PIO_TIMER_ROUTINE TimerRoutine, IN PVOID Context)
PVOID NTAPI ScsiPortGetLogicalUnit(IN PVOID HwDeviceExtension, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun)
NTSTATUS FdoStartAdapter(_In_ PSCSI_PORT_DEVICE_EXTENSION PortExtension)
VOID NTAPI KeReleaseSpinLockFromDpcLevel(IN PKSPIN_LOCK SpinLock)
#define KeAcquireSpinLock(sl, irql)
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@375::@377 Port
FORCEINLINE VOID IoRequestDpc(_Inout_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Irp, _In_opt_ __drv_aliasesMem PVOID Context)
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
#define SP_RETURN_NOT_FOUND
PDEVICE_OBJECT DeviceObject
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define _strnicmp(_String1, _String2, _MaxCount)
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
ULONG NTAPI ScsiPortConvertPhysicalAddressToUlong(IN SCSI_PHYSICAL_ADDRESS Address)
VOID NTAPI ScsiPortUnload(_In_ PDRIVER_OBJECT DriverObject)
SCSI_PHYSICAL_ADDRESS RangeStart
#define ExAllocatePoolWithTag(hernya, size, tag)
#define BYTES_TO_PAGES(Size)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
#define SRB_FLAGS_DISABLE_DISCONNECT
struct _PORT_CONFIGURATION_INFORMATION PORT_CONFIGURATION_INFORMATION
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
VOID __cdecl ScsiPortNotification(IN SCSI_NOTIFICATION_TYPE NotificationType, IN PVOID HwDeviceExtension, IN ...)
#define CM_RESOURCE_DMA_8
PDRIVER_UNLOAD DriverUnload
PVOID NTAPI IoGetDriverObjectExtension(IN PDRIVER_OBJECT DriverObject, IN PVOID ClientIdentificationAddress)
ULONG MaximumTransferLength
struct _SCSI_PORT_LUN_EXTENSION * CompletedAbortRequests
struct _SCSI_PORT_DEVICE_EXTENSION SCSI_PORT_DEVICE_EXTENSION
VOID FdoScanAdapter(_In_ PSCSI_PORT_DEVICE_EXTENSION PortExtension)
ULONG AlignmentRequirement
struct _CM_RESOURCE_LIST CM_RESOURCE_LIST
ULONG NumberOfAccessRanges
BOOLEAN NTAPI HalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
#define FILE_WORD_ALIGNMENT
NTSTATUS NTAPI IoReportDetectedDevice(_In_ PDRIVER_OBJECT DriverObject, _In_ INTERFACE_TYPE LegacyBusType, _In_ ULONG BusNumber, _In_ ULONG SlotNumber, _In_opt_ PCM_RESOURCE_LIST ResourceList, _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements, _In_ BOOLEAN ResourceAssigned, _Inout_ PDEVICE_OBJECT *DeviceObject)
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
PDRIVER_OBJECT DriverObject
PHYSICAL_ADDRESS PhysicalAddress
_In_ PSCSI_REQUEST_BLOCK _In_opt_ PVOID _In_ ULONG _In_ BOOLEAN WriteToDevice
#define SRB_FUNCTION_ABORT_COMMAND
SCSI_SG_ADDRESS ScatterGatherList[MAX_SG_LIST]
_In_ ULONG _In_ ULONG Offset
IO_ALLOCATION_ACTION NTAPI ScsiPortAllocateAdapterChannel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID MapRegisterBase, IN PVOID Context)
ULONG NTAPI ScsiPortGetBusData(IN PVOID DeviceExtension, IN ULONG BusDataType, IN ULONG SystemIoBusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
NTSTATUS FdoRemoveAdapter(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension)
_Inout_ struct _IRP _In_ PVOID MapRegisterBase
#define InterlockedIncrement
PADAPTER_OBJECT AdapterObject
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define ROUND_TO_PAGES(Size)
#define CM_RESOURCE_PORT_IO
#define InitializeListHead(ListHead)
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
int __cdecl vsprintf(char *_Dest, const char *_Format, va_list _Args)
NTSTATUS NTAPI ScsiPortDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCOMMONBUFFER * CommonBuffer
#define ALIGN_UP_POINTER(ptr, type)
PHW_INTERRUPT HwInterrupt
static BOOLEAN SpiGetPciConfigData(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject, IN struct _HW_INITIALIZATION_DATA *HwInitializationData, IN OUT PPORT_CONFIGURATION_INFORMATION PortConfig, IN PUNICODE_STRING RegistryPath, IN ULONG BusNumber, IN OUT PPCI_SLOT_NUMBER NextSlotNumber)
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
#define SRB_FLAGS_DATA_OUT
#define KeReleaseSpinLock(sl, irql)
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
#define CmResourceTypeInterrupt
UNICODE_STRING * PUNICODE_STRING
struct _SCSI_PORT_LUN_EXTENSION * ReadyLun
SCSI_PORT_COMMON_EXTENSION Common
DRIVER_STARTIO ScsiPortStartIo
static NTSTATUS NTAPI ScsiPortCreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
BOOLEAN NTAPI ScsiPortValidateRange(IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, IN ULONG SystemIoBusNumber, IN SCSI_PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfBytes, IN BOOLEAN InIoSpace)
void int int ULONGLONG int va_list * ap
#define SCSI_MINIMUM_PHYSICAL_BREAKS
VOID(NTAPI * PHW_TIMER)(IN PVOID DeviceExtension)
#define CM_RESOURCE_INTERRUPT_LATCHED
#define SRB_FUNCTION_EXECUTE_SCSI
PSCSI_REQUEST_BLOCK_INFO SpiGetSrbData(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _In_ PSCSI_PORT_LUN_EXTENSION LunExtension, _In_ UCHAR QueueTag)
INTERFACE_TYPE AdapterInterfaceType
NTSTATUS NTAPI IoCreateDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG DeviceExtensionSize, IN PUNICODE_STRING DeviceName, IN DEVICE_TYPE DeviceType, IN ULONG DeviceCharacteristics, IN BOOLEAN Exclusive, OUT PDEVICE_OBJECT *DeviceObject)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTHALAPI ULONG NTAPI HalGetBusData(BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG)
#define RtlZeroMemory(Destination, Length)
#define SRB_STATUS_SUCCESS
#define InitializeObjectAttributes(p, n, a, r, s)
BOOLEAN NTAPI KeSynchronizeExecution(IN OUT PKINTERRUPT Interrupt, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID SynchronizeContext OPTIONAL)
NTSTATUS FdoDispatchPnp(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
#define SCSI_MAXIMUM_PHYSICAL_BREAKS
#define RtlCopyMemory(Destination, Source, Length)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
#define FILE_DEVICE_SECURE_OPEN
static VOID SpiResourceToConfig(IN PHW_INITIALIZATION_DATA HwInitializationData, IN PCM_FULL_RESOURCE_DESCRIPTOR ResourceDescriptor, IN PPORT_CONFIGURATION_INFORMATION PortConfig)
PSCSI_PORT_LUN_EXTENSION GetLunByPath(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension, _In_ UCHAR PathId, _In_ UCHAR TargetId, _In_ UCHAR Lun)
VOID NTAPI ScsiPortLogError(IN PVOID HwDeviceExtension, IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, IN UCHAR PathId, IN UCHAR TargetId, IN UCHAR Lun, IN ULONG ErrorCode, IN ULONG UniqueId)
#define ExFreePoolWithTag(_P, _T)
PVOID NTAPI ScsiPortGetVirtualAddress(IN PVOID HwDeviceExtension, IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
_In_ PCHAR _In_ ULONG DeviceNumber
IN PSCSI_REQUEST_BLOCK Srb
_In_ WDFDEVICE _In_ PPNP_BUS_INFORMATION BusInformation
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define CmResourceTypeMemory
DRIVER_DISPATCH ScsiPortDispatchPower
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define SCSI_PORT_TIMER_NEEDED
ULONG NTAPI HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
PVOID NTAPI HalAllocateCommonBuffer(IN PADAPTER_OBJECT AdapterObject, IN ULONG Length, IN PPHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled)
#define SCSI_PORT_RESET_REPORTED
BOOLEAN DisableTaggedQueueing
UNICODE_STRING RegistryPath
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
struct _IO_SCSI_CAPABILITIES IO_SCSI_CAPABILITIES
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
#define LUNEX_FROZEN_QUEUE
NTSTATUS NTAPI ScsiPortAddDevice(_In_ PDRIVER_OBJECT DriverObject, _In_ PDEVICE_OBJECT PhysicalDeviceObject)
struct _KEY_VALUE_FULL_INFORMATION * PKEY_VALUE_FULL_INFORMATION
struct _DRIVER_OBJECT * PDRIVER_OBJECT
NTSTATUS FdoCallHWInitialize(_In_ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension)
Calls HwInitialize routine of the miniport and sets up interrupts Should be called inside ScsiPortIni...
VOID NTAPI ScsiPortMoveMemory(IN PVOID WriteBuffer, IN PVOID ReadBuffer, IN ULONG Length)
_Must_inspect_result_ _In_ PVOID _In_ struct _HW_INITIALIZATION_DATA * HwInitializationData
#define CmResourceTypeDma
PADAPTER_OBJECT NTAPI HalGetAdapter(IN PDEVICE_DESCRIPTION DeviceDescription, OUT PULONG NumberOfMapRegisters)
VOID NTAPI ScsiPortFlushDma(IN PVOID DeviceExtension)
#define IRP_MJ_DEVICE_CONTROL
PULONG MinorVersion OPTIONAL