| 1 | #ifndef HW_USB_EHCI_REGS_H |
| 2 | #define HW_USB_EHCI_REGS_H |
| 3 | |
| 4 | /* Capability Registers Base Address - section 2.2 */ |
| 5 | #define CAPLENGTH 0x0000 /* 1-byte, 0x0001 reserved */ |
| 6 | #define HCIVERSION 0x0002 /* 2-bytes, i/f version # */ |
| 7 | #define HCSPARAMS 0x0004 /* 4-bytes, structural params */ |
| 8 | #define HCCPARAMS 0x0008 /* 4-bytes, capability params */ |
| 9 | #define EECP HCCPARAMS + 1 |
| 10 | #define HCSPPORTROUTE1 0x000c |
| 11 | #define HCSPPORTROUTE2 0x0010 |
| 12 | |
| 13 | #define USBCMD 0x0000 |
| 14 | #define USBCMD_RUNSTOP (1 << 0) // run / Stop |
| 15 | #define USBCMD_HCRESET (1 << 1) // HC Reset |
| 16 | #define USBCMD_FLS (3 << 2) // Frame List Size |
| 17 | #define USBCMD_FLS_SH 2 // Frame List Size Shift |
| 18 | #define USBCMD_PSE (1 << 4) // Periodic Schedule Enable |
| 19 | #define USBCMD_ASE (1 << 5) // Asynch Schedule Enable |
| 20 | #define USBCMD_IAAD (1 << 6) // Int Asynch Advance Doorbell |
| 21 | #define USBCMD_LHCR (1 << 7) // Light Host Controller Reset |
| 22 | #define USBCMD_ASPMC (3 << 8) // Async Sched Park Mode Count |
| 23 | #define USBCMD_ASPME (1 << 11) // Async Sched Park Mode Enable |
| 24 | #define USBCMD_ITC (0x7f << 16) // Int Threshold Control |
| 25 | #define USBCMD_ITC_SH 16 // Int Threshold Control Shift |
| 26 | |
| 27 | #define USBSTS 0x0004 |
| 28 | #define USBSTS_RO_MASK 0x0000003f |
| 29 | #define USBSTS_INT (1 << 0) // USB Interrupt |
| 30 | #define USBSTS_ERRINT (1 << 1) // Error Interrupt |
| 31 | #define USBSTS_PCD (1 << 2) // Port Change Detect |
| 32 | #define USBSTS_FLR (1 << 3) // Frame List Rollover |
| 33 | #define USBSTS_HSE (1 << 4) // Host System Error |
| 34 | #define USBSTS_IAA (1 << 5) // Interrupt on Async Advance |
| 35 | #define USBSTS_HALT (1 << 12) // HC Halted |
| 36 | #define USBSTS_REC (1 << 13) // Reclamation |
| 37 | #define USBSTS_PSS (1 << 14) // Periodic Schedule Status |
| 38 | #define USBSTS_ASS (1 << 15) // Asynchronous Schedule Status |
| 39 | |
| 40 | /* |
| 41 | * Interrupt enable bits correspond to the interrupt active bits in USBSTS |
| 42 | * so no need to redefine here. |
| 43 | */ |
| 44 | #define USBINTR 0x0008 |
| 45 | #define USBINTR_MASK 0x0000003f |
| 46 | |
| 47 | #define FRINDEX 0x000c |
| 48 | #define CTRLDSSEGMENT 0x0010 |
| 49 | #define PERIODICLISTBASE 0x0014 |
| 50 | #define ASYNCLISTADDR 0x0018 |
| 51 | #define ASYNCLISTADDR_MASK 0xffffffe0 |
| 52 | |
| 53 | #define CONFIGFLAG 0x0040 |
| 54 | |
| 55 | /* |
| 56 | * Bits that are reserved or are read-only are masked out of values |
| 57 | * written to us by software |
| 58 | */ |
| 59 | #define PORTSC_RO_MASK 0x007001c0 |
| 60 | #define PORTSC_RWC_MASK 0x0000002a |
| 61 | #define PORTSC_WKOC_E (1 << 22) // Wake on Over Current Enable |
| 62 | #define PORTSC_WKDS_E (1 << 21) // Wake on Disconnect Enable |
| 63 | #define PORTSC_WKCN_E (1 << 20) // Wake on Connect Enable |
| 64 | #define PORTSC_PTC (15 << 16) // Port Test Control |
| 65 | #define PORTSC_PTC_SH 16 // Port Test Control shift |
| 66 | #define PORTSC_PIC (3 << 14) // Port Indicator Control |
| 67 | #define PORTSC_PIC_SH 14 // Port Indicator Control Shift |
| 68 | #define PORTSC_POWNER (1 << 13) // Port Owner |
| 69 | #define PORTSC_PPOWER (1 << 12) // Port Power |
| 70 | #define PORTSC_LINESTAT (3 << 10) // Port Line Status |
| 71 | #define PORTSC_LINESTAT_SH 10 // Port Line Status Shift |
| 72 | #define PORTSC_PRESET (1 << 8) // Port Reset |
| 73 | #define PORTSC_SUSPEND (1 << 7) // Port Suspend |
| 74 | #define PORTSC_FPRES (1 << 6) // Force Port Resume |
| 75 | #define PORTSC_OCC (1 << 5) // Over Current Change |
| 76 | #define PORTSC_OCA (1 << 4) // Over Current Active |
| 77 | #define PORTSC_PEDC (1 << 3) // Port Enable/Disable Change |
| 78 | #define PORTSC_PED (1 << 2) // Port Enable/Disable |
| 79 | #define PORTSC_CSC (1 << 1) // Connect Status Change |
| 80 | #define PORTSC_CONNECT (1 << 0) // Current Connect Status |
| 81 | |
| 82 | #endif /* HW_USB_EHCI_REGS_H */ |