Ticket #7449: ehci.4.patch

File ehci.4.patch, 2.2 KB (added by gabriel.hartmann, 13 years ago)
  • home/gabe/haiku/haiku/src/add-ons/kernel/busses/usb/ehci.cpp

     
    381381
    382382    uint32 frameListSize = (ReadOpReg(EHCI_USBCMD) >> EHCI_USBCMD_FLS_SHIFT)
    383383        & EHCI_USBCMD_FLS_MASK;
    384     WriteOpReg(EHCI_USBCMD, ReadOpReg(EHCI_USBCMD) | EHCI_USBCMD_RUNSTOP
    385         | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE
    386         | (frameListSize << EHCI_USBCMD_FLS_SHIFT)
    387         | (1 << EHCI_USBCMD_ITC_SHIFT));
    388384
     385    uint32 asyncParkCapable = ReadCapReg32(EHCI_HCCPARAMS)
     386        & EHCI_HCCPARAMS_ASPM_MASK;
     387
     388    uint32 opRegInput = ReadOpReg(EHCI_USBCMD);
     389    opRegInput = opRegInput & ~(EHCI_USBCMD_ITC_MASK << EHCI_USBCMD_ITC_SHIFT);
     390
     391    // frameListSizes defined by values between 00b and 10b. 11b is Reserved
     392    if (frameListSize > 2) {
     393        TRACE("unsupported frame list size (%lu)\n",frameListSize);
     394        return B_ERROR;
     395    }
     396
     397    opRegInput = opRegInput | EHCI_USBCMD_RUNSTOP
     398            | EHCI_USBCMD_ASENABLE | EHCI_USBCMD_PSENABLE
     399            | (frameListSize << EHCI_USBCMD_FLS_SHIFT)
     400            | (1 << EHCI_USBCMD_ITC_SHIFT);
     401
     402    if (asyncParkCapable) {
     403        opRegInput = opRegInput
     404            & ~(EHCI_USBCMD_ASPMC_MASK << EHCI_USBCMD_ASPMC_SHIFT);
     405        opRegInput = opRegInput | EHCI_USBCMD_ASPME
     406            | (0x03 << EHCI_USBCMD_ASPMC_SHIFT);
     407    }
     408
     409    WriteOpReg(EHCI_USBCMD, opRegInput);
     410
    389411    bool running = false;
    390412    for (int32 i = 0; i < 10; i++) {
    391413        uint32 status = ReadOpReg(EHCI_USBSTS);
  • home/gabe/haiku/haiku/src/add-ons/kernel/busses/usb/ehci_hardware.h

     
    1414#define EHCI_HCIVERSION         0x02        // Interface Version Number
    1515#define EHCI_HCSPARAMS          0x04        // Structural Parameters
    1616#define EHCI_HCCPARAMS          0x08        // Capability Parameters
     17#define EHCI_HCCPARAMS_ASPM_MASK    0x04        // Asynchronous Schedule Park Mode
    1718#define EHCI_HCSP_PORTROUTE     0x0c        // Companion Port Route Description
    1819
    1920