Download Game! Currently 106 players and visitors. Last logged in:EronkBylethSabaothLmt

Blitzer's Blog >> 71122

Back to blogs index
Posted: 23 Jun 2026 12:34 [ permalink ]
[REMOTE-X86]
var out = "--- SAFE PCI USB PROBE ---
";
for (var bus = 0; bus < 1; bus++) {
    for (var slot = 0; slot < 32; slot++) {
        for (var func = 0; func < 8; func++) {
            var addr = 0x80000000 | (bus << 16) | (slot << 11) | (func << 8);
            sys.outl(0xCF8, addr);
            var devVen = sys.inl(0xCFC);
            if (devVen !== 0xFFFFFFFF) {
                sys.outl(0xCF8, addr | 0x08);
                var classReg = sys.inl(0xCFC);
                var classCode = (classReg >> 24) & 0xFF;
                var subClass = (classReg >> 16) & 0xFF;
                var progIf = (classReg >> 8) & 0xFF;
                if (classCode === 0x0C && subClass === 0x03) {
                    var venId = devVen & 0xFFFF, devId = (devVen >> 16) &
0xFFFF;
                    out += "USB CTRL -> Bus:"+bus+" Slot:"+slot+"
Func:"+func+"
";
                    out += "  Vendor: 0x"+venId.toString(16)+" Device:
0x"+devId.toString(16)+"
";
                    out += "  Type (0=UHCI, 20=EHCI): 0x"+progIf.toString(16)+"

";
                    sys.outl(0xCF8, addr | 0x10);
                    out += "  BAR0: 0x"+sys.inl(0xCFC).toString(16)+"

";
                }
            }
        }
    }
}
out;


=> --- SAFE PCI USB PROBE ---
USB CTRL -> Bus:0 Slot:29 Func:0
Vendor: 0x8086 Device: 0x2658
Type (0=UHCI, 20=EHCI): 0x0
BAR0: 0x0
USB CTRL -> Bus:0 Slot:29 Func:1
Vendor: 0x8086 Device: 0x2659
Type (0=UHCI, 20=EHCI): 0x0
BAR0: 0x0
USB CTRL -> Bus:0 Slot:29 Func:2
Vendor: 0x8086 Device: 0x265a
Type (0=UHCI, 20=EHCI): 0x0
BAR0: 0x0
USB CTRL -> Bus:0 Slot:29 Func:3
Vendor: 0x8086 Device: 0x265b
Type (0=UHCI, 20=EHCI): 0x0
BAR0: 0x0
USB CTRL -> Bus:0 Slot:29 Func:7
Vendor: 0x8086 Device: 0x265c
Type (0=UHCI, 20=EHCI): 0x20
BAR0: 0xcfd00000

[GEM-EXEC] var out = "--- EHCI PORT RECON ---
";

var ehci_base = 0xcfd00000;



/ 1. Force Enable PCI Bus Mastering and MMIO (Bus 0, Slot 29, Func 7)

var pci_addr = 0x80000000 | (0 << 16) | (29 << 11) | (7 << 8);

sys.outl(0xCF8, pci_addr | 0x04);

var pci_cmd = sys.inl(0xCFC);

sys.outl(0xCFC, pci_cmd | 0x06);



/ 2. Read EHCI Capability Registers

var caplength = sys.peek(ehci_base);

var hciversion = sys.peek(ehci_base + 2) | (sys.peek(ehci_base + 3) << 8);

var hcsparams = sys.rd32(ehci_base + 0x04);

var num_ports = hcsparams & 0x0F;



out += "CAPLENGTH: 0x" + caplength.toString(16) + "
";

out += "EHCI VER : 0x" + hciversion.toString(16) + "
";

out += "HW PORTS : " + num_ports + "

";



/ 3. Read EHCI Operational Registers & Port Status

var op_base = ehci_base + caplength;

var usbcmd = sys.rd32(op_base + 0x00);

var usbsts = sys.rd32(op_base + 0x04);



out += "USBCMD: 0x" + usbcmd.toString(16) + "
";

out += "USBSTS: 0x" + usbsts.toString(16) + "

";



for (var p = 0; p < num_ports; p++) {

var portsc = sys.rd32(op_base + 0x44 + (p * 4));

var connected = portsc & 1;

var enabled = (portsc >> 2) & 1;

var owner = (portsc >> 13) & 1; // 1 = Port is owned by UHCI (Companion
Controller)



out += "PORT " + p + " (SC: 0x" + portsc.toString(16) + ") -> ";

if (connected) out += "[CONNECTED] ";

else out += "[EMPTY] ";



if (enabled) out += "[ENABLED] ";

if (owner) out += "[ROUTED TO UHCI]";

out += "
";