/* VARIABLES ***************************************************************/
-static ULONG (NTAPI *GenericGetPciData)(IN PBUS_HANDLER BusHandler,
- IN PBUS_HANDLER RootHandler,
- IN PCI_SLOT_NUMBER SlotNumber,
- OUT PUCHAR Buffer,
- IN ULONG Offset,
- IN ULONG Length);
-static ULONG (NTAPI *GenericSetPciData)(IN PBUS_HANDLER BusHandler,
- IN PBUS_HANDLER RootHandler,
- IN PCI_SLOT_NUMBER SlotNumber,
- IN PUCHAR Buffer,
- IN ULONG Offset,
- IN ULONG Length);
+static pGetSetBusData GenericGetPciData;
+static pGetSetBusData GenericSetPciData;
/* FUNCTIONS ***************************************************************/
IN ULONG Offset,
IN ULONG Length)
{
- ULONG BusNumber = BusHandler->BusNumber;
+ ULONG BusNumber = BusHandler->BusNumber;
- DPRINT("HalpXboxGetPciData() called.\n");
- DPRINT(" BusNumber %lu\n", BusNumber);
- DPRINT(" SlotNumber %lu\n", SlotNumber);
- DPRINT(" Offset 0x%lx\n", Offset);
- DPRINT(" Length 0x%lx\n", Length);
+ DPRINT("HalpXboxGetPciData() called.\n");
+ DPRINT(" BusNumber %lu\n", BusNumber);
+ DPRINT(" SlotNumber %lu\n", SlotNumber);
+ DPRINT(" Offset 0x%lx\n", Offset);
+ DPRINT(" Length 0x%lx\n", Length);
- if ((0 == BusNumber && 0 == SlotNumber.u.bits.DeviceNumber &&
- (1 == SlotNumber.u.bits.FunctionNumber || 2 == SlotNumber.u.bits.FunctionNumber)) ||
- (1 == BusNumber && 0 != SlotNumber.u.bits.DeviceNumber))
+ if ((0 == BusNumber && 0 == SlotNumber.u.bits.DeviceNumber &&
+ (1 == SlotNumber.u.bits.FunctionNumber || 2 == SlotNumber.u.bits.FunctionNumber)) ||
+ (1 == BusNumber && 0 != SlotNumber.u.bits.DeviceNumber))
{
- DPRINT("Blacklisted PCI slot\n");
- if (0 == Offset && 2 <= Length)
+ DPRINT("Blacklisted PCI slot\n");
+ if (0 == Offset && 2 <= Length)
{
- *(PUSHORT)Buffer = PCI_INVALID_VENDORID;
- return 2;
+ *(PUSHORT)Buffer = PCI_INVALID_VENDORID;
+ return 2;
}
- return 0;
+ return 0;
}
- return GenericGetPciData(BusHandler, RootHandler, SlotNumber, Buffer, Offset, Length);
+ return GenericGetPciData(BusHandler, RootHandler, SlotNumber, Buffer, Offset, Length);
}
static ULONG NTAPI
IN ULONG Offset,
IN ULONG Length)
{
- ULONG BusNumber = BusHandler->BusNumber;
+ ULONG BusNumber = BusHandler->BusNumber;
- DPRINT("HalpXboxSetPciData() called.\n");
- DPRINT(" BusNumber %lu\n", BusNumber);
- DPRINT(" SlotNumber %lu\n", SlotNumber);
- DPRINT(" Offset 0x%lx\n", Offset);
- DPRINT(" Length 0x%lx\n", Length);
+ DPRINT("HalpXboxSetPciData() called.\n");
+ DPRINT(" BusNumber %lu\n", BusNumber);
+ DPRINT(" SlotNumber %lu\n", SlotNumber);
+ DPRINT(" Offset 0x%lx\n", Offset);
+ DPRINT(" Length 0x%lx\n", Length);
- if ((0 == BusNumber && 0 == SlotNumber.u.bits.DeviceNumber &&
- (1 == SlotNumber.u.bits.FunctionNumber || 2 == SlotNumber.u.bits.FunctionNumber)) ||
- (1 == BusNumber && 0 != SlotNumber.u.bits.DeviceNumber))
+ if ((0 == BusNumber && 0 == SlotNumber.u.bits.DeviceNumber &&
+ (1 == SlotNumber.u.bits.FunctionNumber || 2 == SlotNumber.u.bits.FunctionNumber)) ||
+ (1 == BusNumber && 0 != SlotNumber.u.bits.DeviceNumber))
{
- DPRINT1("Trying to set data on blacklisted PCI slot\n");
- return 0;
+ DPRINT1("Trying to set data on blacklisted PCI slot\n");
+ return 0;
}
- return GenericSetPciData(BusHandler, RootHandler, SlotNumber, Buffer, Offset, Length);
+ return GenericSetPciData(BusHandler, RootHandler, SlotNumber, Buffer, Offset, Length);
}
-void
-HalpXboxInitPciBus(ULONG BusNumber, PBUS_HANDLER BusHandler)
+VOID
+HalpXboxInitPciBus(PBUS_HANDLER BusHandler)
{
- if (0 == BusNumber || 1 == BusNumber)
- {
- GenericGetPciData = BusHandler->GetBusData;
- BusHandler->GetBusData = HalpXboxGetPciData;
- GenericSetPciData = BusHandler->SetBusData;
- BusHandler->SetBusData = HalpXboxSetPciData;
- }
+ /* Use our own handlers to prevent a freeze */
+ GenericGetPciData = BusHandler->GetBusData;
+ BusHandler->GetBusData = HalpXboxGetPciData;
+ GenericSetPciData = BusHandler->SetBusData;
+ BusHandler->SetBusData = HalpXboxSetPciData;
}
/* EOF */