filkra wrote:
Brendan wrote:
More specifically; I'm wondering if the problem is that you haven't done BIOS handoff on the companion controller/s.
I agree with Brendan on this. Please let us know what you find out.
filkra wrote:
Is it necessary to configure the UHCI companion controllers (I don't want to support USB 1.0/1.1 yet)? In my understanding, if I set CF to 1 all ports should be routed to the EHCI and the UHCI shouldn't receive any events from the ports.
Only if all devices are high- or super-speed devices. As soon as you plug in a full- or low-speed device the EHCI will hand it over to the companion controller. However, newer machines are now including Rate Matching Hubs on port 0 of the EHCI and not including any companion controllers. This is easier and cheaper on the hardware side, but now you must support external hubs.
filkra wrote:
//EDIT
Turns out I used bitsets wrong (I think). I declared the Extended Capabilites Pointer as
Code:
uint32_t eecp:8;
inside my struct, which then pointed to the wrong address. Now, I use
Code:
uint8_t eecp:8;
instead and get the right offset in PCI space. The last thing I have to check now is wether I implemented the BIOS handoff correctly. I will keep you updated. Thanks for all the replies!
I don't like using "bitsets", AKA Bit Fields. Each compiler implements them differently since they are compiler specific. If you end up continuing to use them, make sure and enclose them in #ifdef/#elif/#endif statements, including an #if for each compiler you want to use (even if only one) and being sure to include the #else and stating "#error, unknown bit field usage...". i.e.:
Code:
#ifdef COMPILER_BRAND_A
// bit fields go here
#elif defined COMPLER_BRAND_B
// bit fields go here for this compiler
#else
#error "Hey, you need to specify/define the bitfields for this compiler
#endif
Ben