Revert "EHCI USB: process the extended capabilities chain"
This reverts commit 137135a10d
.
Change-Id: I6e6ef1933b3b3f5eda7278d37b673eefe2867c2a
This commit is contained in:
parent
137135a10d
commit
c91002a1db
|
@ -252,53 +252,54 @@ EHCI::EHCI(pci_info *info, Stack *stack)
|
||||||
|
|
||||||
uint32 extendedCapPointer = ReadCapReg32(EHCI_HCCPARAMS) >> EHCI_ECP_SHIFT;
|
uint32 extendedCapPointer = ReadCapReg32(EHCI_HCCPARAMS) >> EHCI_ECP_SHIFT;
|
||||||
extendedCapPointer &= EHCI_ECP_MASK;
|
extendedCapPointer &= EHCI_ECP_MASK;
|
||||||
for (uint32 eec = extendedCapPointer; eec != 0; extendedCapPointer = EHCI_EECP_NEXT(eec)) {
|
if (extendedCapPointer > 0) {
|
||||||
TRACE("extended capabilities register at %" B_PRIu32 "\n",
|
TRACE("extended capabilities register at %" B_PRIu32 "\n",
|
||||||
extendedCapPointer);
|
extendedCapPointer);
|
||||||
|
|
||||||
eec = sPCIModule->read_pci_config(fPCIInfo->bus,
|
uint32 legacySupport = sPCIModule->read_pci_config(fPCIInfo->bus,
|
||||||
fPCIInfo->device, fPCIInfo->function, extendedCapPointer, 4);
|
fPCIInfo->device, fPCIInfo->function, extendedCapPointer, 4);
|
||||||
|
if ((legacySupport & EHCI_LEGSUP_CAPID_MASK) == EHCI_LEGSUP_CAPID) {
|
||||||
|
if ((legacySupport & EHCI_LEGSUP_BIOSOWNED) != 0) {
|
||||||
|
TRACE_ALWAYS("the host controller is bios owned, claiming"
|
||||||
|
" ownership\n");
|
||||||
|
|
||||||
if ((eec & EHCI_LEGSUP_CAPID_MASK) != EHCI_LEGSUP_CAPID)
|
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
||||||
continue;
|
fPCIInfo->function, extendedCapPointer + 3, 1, 1);
|
||||||
|
|
||||||
uint32 legacySupport = eec;
|
for (int32 i = 0; i < 20; i++) {
|
||||||
|
legacySupport = sPCIModule->read_pci_config(fPCIInfo->bus,
|
||||||
|
fPCIInfo->device, fPCIInfo->function,
|
||||||
|
extendedCapPointer, 4);
|
||||||
|
|
||||||
if ((legacySupport & EHCI_LEGSUP_BIOSOWNED) != 0) {
|
if ((legacySupport & EHCI_LEGSUP_BIOSOWNED) == 0)
|
||||||
TRACE_ALWAYS("the host controller is bios owned, claiming"
|
break;
|
||||||
" ownership\n");
|
|
||||||
|
|
||||||
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
TRACE_ALWAYS("controller is still bios owned, waiting\n");
|
||||||
fPCIInfo->function, extendedCapPointer + 3, 1, 1);
|
snooze(50000);
|
||||||
|
}
|
||||||
for (int32 i = 0; i < 20; i++) {
|
|
||||||
legacySupport = sPCIModule->read_pci_config(fPCIInfo->bus,
|
|
||||||
fPCIInfo->device, fPCIInfo->function,
|
|
||||||
extendedCapPointer, 4);
|
|
||||||
|
|
||||||
if ((legacySupport & EHCI_LEGSUP_BIOSOWNED) == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
TRACE_ALWAYS("controller is still bios owned, waiting\n");
|
|
||||||
snooze(50000);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (legacySupport & EHCI_LEGSUP_BIOSOWNED) {
|
if (legacySupport & EHCI_LEGSUP_BIOSOWNED) {
|
||||||
TRACE_ERROR("bios won't give up control over the host "
|
TRACE_ERROR("bios won't give up control over the host "
|
||||||
"controller (ignoring)\n");
|
"controller (ignoring)\n");
|
||||||
} else if (legacySupport & EHCI_LEGSUP_OSOWNED) {
|
} else if (legacySupport & EHCI_LEGSUP_OSOWNED) {
|
||||||
|
TRACE_ALWAYS(
|
||||||
|
"successfully took ownership of the host controller\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force off the BIOS owned flag, and clear all SMIs. Some BIOSes
|
||||||
|
// do indicate a successful handover but do not remove their SMIs
|
||||||
|
// and then freeze the system when interrupts are generated.
|
||||||
|
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
||||||
|
fPCIInfo->function, extendedCapPointer + 2, 1, 0);
|
||||||
|
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
||||||
|
fPCIInfo->function, extendedCapPointer + 4, 4, 0);
|
||||||
|
} else {
|
||||||
TRACE_ALWAYS(
|
TRACE_ALWAYS(
|
||||||
"successfully took ownership of the host controller\n");
|
"extended capability is not a legacy support register\n");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
// Force off the BIOS owned flag, and clear all SMIs. Some BIOSes
|
TRACE_ALWAYS("no extended capabilities register\n");
|
||||||
// do indicate a successful handover but do not remove their SMIs
|
|
||||||
// and then freeze the system when interrupts are generated.
|
|
||||||
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
|
||||||
fPCIInfo->function, extendedCapPointer + 2, 1, 0);
|
|
||||||
sPCIModule->write_pci_config(fPCIInfo->bus, fPCIInfo->device,
|
|
||||||
fPCIInfo->function, extendedCapPointer + 4, 4, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// disable interrupts
|
// disable interrupts
|
||||||
|
|
|
@ -103,7 +103,6 @@
|
||||||
// Extended Capabilities
|
// Extended Capabilities
|
||||||
#define EHCI_ECP_SHIFT 8 // Extended Capability Pointer
|
#define EHCI_ECP_SHIFT 8 // Extended Capability Pointer
|
||||||
#define EHCI_ECP_MASK 0xff
|
#define EHCI_ECP_MASK 0xff
|
||||||
#define EHCI_EECP_NEXT(x) (((x) >> 8) & 0xff)
|
|
||||||
#define EHCI_LEGSUP_CAPID_MASK 0xff
|
#define EHCI_LEGSUP_CAPID_MASK 0xff
|
||||||
#define EHCI_LEGSUP_CAPID 0x01
|
#define EHCI_LEGSUP_CAPID 0x01
|
||||||
#define EHCI_LEGSUP_OSOWNED (1 << 24) // OS Owned Semaphore
|
#define EHCI_LEGSUP_OSOWNED (1 << 24) // OS Owned Semaphore
|
||||||
|
|
Loading…
Reference in New Issue