If the BIOS doesn't give up ownership of an EHCI controller, simply clear the
BIOS owned flag and clear all possibly enabled SMIs. It seems to be common practice to just ignore this error case, probably because there are enough broken BIOSs out there that do not correctly hand over the controller. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25918 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0ee6c1ea21
commit
a0ace2dff6
|
@ -194,11 +194,13 @@ EHCI::EHCI(pci_info *info, Stack *stack)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (legacySupport & EHCI_LEGSUP_BIOSOWNED) {
|
if (legacySupport & EHCI_LEGSUP_BIOSOWNED) {
|
||||||
// in any case disable interrupts so we do not flood the system
|
TRACE_ERROR(("usb_ehci: bios won't give up control over the host controller (ignoring)\n"));
|
||||||
// if the BIOS still decides to give up control
|
|
||||||
WriteOpReg(EHCI_USBINTR, 0);
|
// turn off the BIOS owned flag, clear all SMIs and continue
|
||||||
TRACE_ERROR(("usb_ehci: bios won't give up control over the host controller\n"));
|
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
||||||
return;
|
fPCIInfo->function, extendedCapPointer + 2, 1, 0);
|
||||||
|
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
||||||
|
fPCIInfo->function, extendedCapPointer + 4, 4, 0);
|
||||||
} else if (legacySupport & EHCI_LEGSUP_OSOWNED) {
|
} else if (legacySupport & EHCI_LEGSUP_OSOWNED) {
|
||||||
dprintf("usb_ehci: successfully took ownership of the host controller\n");
|
dprintf("usb_ehci: successfully took ownership of the host controller\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue