35 if ((PciConfig->VendorID == CurrentDevice->
PciConfig.VendorID) &&
36 (PciConfig->DeviceID == CurrentDevice->
PciConfig.DeviceID) &&
44 CurrentEntry = CurrentEntry->
Flink;
101 for (FunctionNumber = 0; FunctionNumber <
PCI_MAX_FUNCTION; FunctionNumber++)
103 SlotNumber.u.bits.FunctionNumber = FunctionNumber;
105 DPRINT(
"Bus %1lu Device %2lu Func %1lu\n",
121 PciConfig.VendorID == 0)
123 if (FunctionNumber == 0)
133 DPRINT(
"Bus %1lu Device %2lu Func %1lu VenID 0x%04hx DevID 0x%04hx\n",
171 PciConfig.VendorID = 0xDEAD;
172 PciConfig.DeviceID = 0xBEEF;
193 if ((FunctionNumber == 0) &&
194 ((PciConfig.HeaderType & 0x80) == 0))
232 ErrorOccurred =
FALSE;
238 if (
Irp->IoStatus.Information)
242 DPRINT1(
"FIXME: leaking old bus relations\n");
259 PdoDeviceExtension =
NULL;
274 DPRINT(
"IoCreateDevice() failed with status 0x%X\n",
Status);
276 ErrorOccurred =
TRUE;
280 Device->Pdo->Flags &= ~DO_DEVICE_INITIALIZING;
303 ErrorOccurred =
TRUE;
314 ErrorOccurred =
TRUE;
323 ErrorOccurred =
TRUE;
332 ErrorOccurred =
TRUE;
341 ErrorOccurred =
TRUE;
350 ErrorOccurred =
TRUE;
363 CurrentEntry = CurrentEntry->
Flink;
370 if (PdoDeviceExtension)
410 DPRINT(
"No allocated resources sent to driver\n");
416 DPRINT(
"Not enough allocated resources sent to driver\n");
431 ResourceDescriptor = &
AllocatedResources->List[0].PartialResourceList.PartialDescriptors[
i];
432 switch (ResourceDescriptor->
Type)
435 if (FoundBusNumber || ResourceDescriptor->
u.
BusNumber.Length < 1)
441 DPRINT(
"Found bus number resource: %lu\n", DeviceExtension->
BusNumber);
442 FoundBusNumber =
TRUE;
446 DPRINT(
"Unknown resource descriptor type 0x%x\n", ResourceDescriptor->
Type);
460 Irp->IoStatus.Information = 0;
527 DPRINT(
"IRP_MN_START_DEVICE received\n");
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
static NTSTATUS FdoStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
static NTSTATUS FdoEnumerateDevices(PDEVICE_OBJECT DeviceObject)
NTSTATUS FdoPowerControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
static BOOLEAN PciIsDebuggingDevice(_In_ ULONG Bus, _In_ PCI_SLOT_NUMBER SlotNumber)
static NTSTATUS FdoLocateChildDevice(PPCI_DEVICE *Device, PFDO_DEVICE_EXTENSION DeviceExtension, PCI_SLOT_NUMBER SlotNumber, PPCI_COMMON_CONFIG PciConfig)
NTSTATUS FdoPnpControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
static NTSTATUS FdoQueryBusRelations(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, PIO_STACK_LOCATION IrpSp)
_In_ PCHAR _In_ ULONG DeviceNumber
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
struct _PDO_DEVICE_EXTENSION * PPDO_DEVICE_EXTENSION
_In_ PIO_STACK_LOCATION IrpSp
NTHALAPI ULONG NTAPI HalGetBusData(BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
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 CmResourceTypeBusNumber
PLIST_ENTRY NTAPI ExInterlockedInsertTailList(IN OUT PLIST_ENTRY ListHead, IN OUT PLIST_ENTRY ListEntry, IN OUT PKSPIN_LOCK Lock)
#define ExFreePoolWithTag(_P, _T)
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PCM_RESOURCE_LIST * AllocatedResources
#define FILE_AUTOGENERATED_DEVICE_NAME
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define UNREFERENCED_PARAMETER(P)
#define IRP_MN_SURPRISE_REMOVAL
#define IoSkipCurrentIrpStackLocation(Irp)
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)
VOID NTAPI IoDetachDevice(IN PDEVICE_OBJECT TargetDevice)
VOID NTAPI IoDeleteDevice(IN PDEVICE_OBJECT DeviceObject)
#define IoCompleteRequest
BOOLEAN NTAPI IoForwardIrpSynchronously(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NTAPI PoStartNextPowerIrp(IN PIRP Irp)
#define STATUS_REVISION_MISMATCH
PCI_TYPE1_CFG_CYCLE_BITS PciDebuggingDevice[2]
NTSTATUS PciCreateInstanceIDString(PUNICODE_STRING InstanceID, PPCI_DEVICE Device)
NTSTATUS PciCreateDeviceDescriptionString(PUNICODE_STRING DeviceDescription, PPCI_DEVICE Device)
NTSTATUS PciCreateDeviceIDString(PUNICODE_STRING DeviceID, PPCI_DEVICE Device)
NTSTATUS PciCreateCompatibleIDsString(PUNICODE_STRING CompatibleIDs, PPCI_DEVICE Device)
NTSTATUS PciCreateHardwareIDsString(PUNICODE_STRING HardwareIDs, PPCI_DEVICE Device)
NTSTATUS PciCreateDeviceLocationString(PUNICODE_STRING DeviceLocation, PPCI_DEVICE Device)
PPCI_DRIVER_EXTENSION DriverExtension
BOOLEAN HasDebuggingDevice
#define FILE_DEVICE_CONTROLLER
PDEVICE_OBJECT DeviceObject
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@424 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@424::@432 BusNumber
PDEVICE_OBJECT Objects[1]
LIST_ENTRY DeviceListHead
KSPIN_LOCK DeviceListLock
struct _IO_STACK_LOCATION::@4104::@4141 StartDevice
struct _IO_STACK_LOCATION::@4104::@4129 QueryDeviceRelations
union _IO_STACK_LOCATION::@1619 Parameters
struct _LIST_ENTRY * Flink
PCI_SLOT_NUMBER SlotNumber
PCI_COMMON_CONFIG PciConfig
union _PCI_SLOT_NUMBER::@4148 u
UNICODE_STRING DeviceDescription
UNICODE_STRING CompatibleIDs
UNICODE_STRING InstanceID
UNICODE_STRING HardwareIDs
UNICODE_STRING DeviceLocation
COMMON_DEVICE_EXTENSION Common
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDEVICE Device
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
#define IRP_MN_CANCEL_STOP_DEVICE
#define PCI_INVALID_VENDORID
#define IRP_MN_QUERY_PNP_DEVICE_STATE
#define PCI_SUBCLASS_SB_IEEE1394
#define IRP_MN_START_DEVICE
#define IRP_MN_DEVICE_USAGE_NOTIFICATION
#define IRP_MN_REMOVE_DEVICE
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS
#define IRP_MN_QUERY_DEVICE_RELATIONS
#define PCI_COMMON_HDR_LENGTH
#define IRP_MN_QUERY_STOP_DEVICE
#define IRP_MN_QUERY_CAPABILITIES
struct _DEVICE_RELATIONS DEVICE_RELATIONS
#define IRP_MN_CANCEL_REMOVE_DEVICE
#define PCI_CLASS_SERIAL_BUS_CTLR
#define IRP_MN_STOP_DEVICE
#define IRP_MN_QUERY_REMOVE_DEVICE
#define ObReferenceObject