ok yuo@
-- Yojiro UO
2011/07/09 7:55 "Kenneth R Westerback" <kwesterb...@rogers.com>:
> On Sat, Jul 09, 2011 at 06:44:26AM +0200, Eric Faurot wrote:
>> So, there is actually another bug in that chunk of code. This diff
>> fixes them:
>>
>> - Read the register from the correct location: HCSPARAMS is a
>> capability register.
>>
>> - Construct the resulting mask correctly by adding
>> parenthesis where needed: '|' takes precedence over '?'
>> so currently the expression evaluates as
>>
>> EHCI_HCS_PPC(v) ? UHD_PWR_INDIVIDUAL : UHD_PORT_IND
>>
>> where v is not even the correct value.
>>
>> This should let the ehci driver correctly report the characteristics
>> of the controller's root hub.
>
> ok krw@
>
> .... Ken
>
>>
>>
>> Index: ehci.c
>> ===================================================================
>> RCS file: /cvs/src/sys/dev/usb/ehci.c,v
>> retrieving revision 1.117
>> diff -u -r1.117 ehci.c
>> --- ehci.c 3 Jul 2011 15:47:17 -0000 1.117
>> +++ ehci.c 9 Jul 2011 00:52:49 -0000
>> @@ -2148,11 +2148,10 @@
>> }
>> hubd = ehci_hubd;
>> hubd.bNbrPorts = sc->sc_noport;
>> - v = EOREAD4(sc, EHCI_HCSPARAMS);
>> + v = EREAD4(sc, EHCI_HCSPARAMS);
>> USETW(hubd.wHubCharacteristics,
>> - EHCI_HCS_PPC(v) ? UHD_PWR_INDIVIDUAL : UHD_PWR_NO_SWITCH |
>> - EHCI_HCS_P_INDICATOR(EREAD4(sc, EHCI_HCSPARAMS))
>> - ? UHD_PORT_IND : 0);
>> + (EHCI_HCS_PPC(v) ? UHD_PWR_INDIVIDUAL : UHD_PWR_NO_SWITCH) |
>> + (EHCI_HCS_P_INDICATOR(v) ? UHD_PORT_IND : 0));
>> hubd.bPwrOn2PwrGood = 200; /* XXX can't find out? */
>> for (i = 0, l = sc->sc_noport; l > 0; i++, l -= 8, v >>= 8)
>> hubd.DeviceRemovable[i++] = 0; /* XXX can't find out? */