https://git.reactos.org/?p=reactos.git;a=commitdiff;h=251bf491270ce95e4bb62…
commit 251bf491270ce95e4bb62e21ce1f976d1a75b0b5
Author:     Stanislav Motylkov <x86corez(a)gmail.com>
AuthorDate: Sat Aug 17 20:03:39 2019 +0300
Commit:     Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sat Aug 17 21:19:28 2019 +0200
    [HAL] Xbox needs more PCI blacklisting!
    CORE-16216
---
 hal/halx86/legacy/bus/pcibus.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
diff --git a/hal/halx86/legacy/bus/pcibus.c b/hal/halx86/legacy/bus/pcibus.c
index 93ed9cb5ca1..a0aff2c70da 100644
--- a/hal/halx86/legacy/bus/pcibus.c
+++ b/hal/halx86/legacy/bus/pcibus.c
@@ -325,6 +325,21 @@ HalpValidPCISlot(IN PBUS_HANDLER BusHandler,
     if (Slot.u.bits.Reserved) return FALSE;
     if (Slot.u.bits.DeviceNumber >= BusData->MaxDevice) return FALSE;
+#ifdef SARCH_XBOX
+    /* Trying to get PCI config data from devices 0:0:1 and 0:0:2 will completely
+     * hang the Xbox. Also, the device number doesn't seem to be decoded for the
+     * video card, so it appears to be present on 1:0:0 - 1:31:0.
+     * We hack around these problems by indicating "device not present" for
devices
+     * 0:0:1, 0:0:2, 1:1:0, 1:2:0, 1:3:0, ...., 1:31:0 */
+    if ((BusHandler->BusNumber == 0 && Slot.u.bits.DeviceNumber == 0
&&
+        (Slot.u.bits.FunctionNumber == 1 || Slot.u.bits.FunctionNumber == 2)) ||
+        (BusHandler->BusNumber == 1 && Slot.u.bits.DeviceNumber != 0))
+    {
+        DPRINT("HalpValidPCISlot(): Blacklisted PCI slot (%d:%d:%d)\n",
BusHandler->BusNumber, Slot.u.bits.DeviceNumber, Slot.u.bits.FunctionNumber);
+        return FALSE;
+    }
+#endif
+
     /* Function 0 doesn't need checking */
     if (!Slot.u.bits.FunctionNumber) return TRUE;