xref: /qemu/include/hw/usb/ehci-regs.h (revision 175de524)
1381626a9SGerd Hoffmann #ifndef HW_USB_EHCI_REGS_H
2*175de524SMarkus Armbruster #define HW_USB_EHCI_REGS_H
3381626a9SGerd Hoffmann 
4381626a9SGerd Hoffmann /* Capability Registers Base Address - section 2.2 */
5381626a9SGerd Hoffmann #define CAPLENGTH        0x0000  /* 1-byte, 0x0001 reserved */
6381626a9SGerd Hoffmann #define HCIVERSION       0x0002  /* 2-bytes, i/f version # */
7381626a9SGerd Hoffmann #define HCSPARAMS        0x0004  /* 4-bytes, structural params */
8381626a9SGerd Hoffmann #define HCCPARAMS        0x0008  /* 4-bytes, capability params */
9381626a9SGerd Hoffmann #define EECP             HCCPARAMS + 1
10381626a9SGerd Hoffmann #define HCSPPORTROUTE1   0x000c
11381626a9SGerd Hoffmann #define HCSPPORTROUTE2   0x0010
12381626a9SGerd Hoffmann 
13381626a9SGerd Hoffmann #define USBCMD           0x0000
14381626a9SGerd Hoffmann #define USBCMD_RUNSTOP   (1 << 0)      // run / Stop
15381626a9SGerd Hoffmann #define USBCMD_HCRESET   (1 << 1)      // HC Reset
16381626a9SGerd Hoffmann #define USBCMD_FLS       (3 << 2)      // Frame List Size
17381626a9SGerd Hoffmann #define USBCMD_FLS_SH    2             // Frame List Size Shift
18381626a9SGerd Hoffmann #define USBCMD_PSE       (1 << 4)      // Periodic Schedule Enable
19381626a9SGerd Hoffmann #define USBCMD_ASE       (1 << 5)      // Asynch Schedule Enable
20381626a9SGerd Hoffmann #define USBCMD_IAAD      (1 << 6)      // Int Asynch Advance Doorbell
21381626a9SGerd Hoffmann #define USBCMD_LHCR      (1 << 7)      // Light Host Controller Reset
22381626a9SGerd Hoffmann #define USBCMD_ASPMC     (3 << 8)      // Async Sched Park Mode Count
23381626a9SGerd Hoffmann #define USBCMD_ASPME     (1 << 11)     // Async Sched Park Mode Enable
24381626a9SGerd Hoffmann #define USBCMD_ITC       (0x7f << 16)  // Int Threshold Control
25381626a9SGerd Hoffmann #define USBCMD_ITC_SH    16            // Int Threshold Control Shift
26381626a9SGerd Hoffmann 
27381626a9SGerd Hoffmann #define USBSTS           0x0004
28381626a9SGerd Hoffmann #define USBSTS_RO_MASK   0x0000003f
29381626a9SGerd Hoffmann #define USBSTS_INT       (1 << 0)      // USB Interrupt
30381626a9SGerd Hoffmann #define USBSTS_ERRINT    (1 << 1)      // Error Interrupt
31381626a9SGerd Hoffmann #define USBSTS_PCD       (1 << 2)      // Port Change Detect
32381626a9SGerd Hoffmann #define USBSTS_FLR       (1 << 3)      // Frame List Rollover
33381626a9SGerd Hoffmann #define USBSTS_HSE       (1 << 4)      // Host System Error
34381626a9SGerd Hoffmann #define USBSTS_IAA       (1 << 5)      // Interrupt on Async Advance
35381626a9SGerd Hoffmann #define USBSTS_HALT      (1 << 12)     // HC Halted
36381626a9SGerd Hoffmann #define USBSTS_REC       (1 << 13)     // Reclamation
37381626a9SGerd Hoffmann #define USBSTS_PSS       (1 << 14)     // Periodic Schedule Status
38381626a9SGerd Hoffmann #define USBSTS_ASS       (1 << 15)     // Asynchronous Schedule Status
39381626a9SGerd Hoffmann 
40381626a9SGerd Hoffmann /*
41381626a9SGerd Hoffmann  *  Interrupt enable bits correspond to the interrupt active bits in USBSTS
42381626a9SGerd Hoffmann  *  so no need to redefine here.
43381626a9SGerd Hoffmann  */
44381626a9SGerd Hoffmann #define USBINTR              0x0008
45381626a9SGerd Hoffmann #define USBINTR_MASK         0x0000003f
46381626a9SGerd Hoffmann 
47381626a9SGerd Hoffmann #define FRINDEX              0x000c
48381626a9SGerd Hoffmann #define CTRLDSSEGMENT        0x0010
49381626a9SGerd Hoffmann #define PERIODICLISTBASE     0x0014
50381626a9SGerd Hoffmann #define ASYNCLISTADDR        0x0018
51381626a9SGerd Hoffmann #define ASYNCLISTADDR_MASK   0xffffffe0
52381626a9SGerd Hoffmann 
53381626a9SGerd Hoffmann #define CONFIGFLAG           0x0040
54381626a9SGerd Hoffmann 
55381626a9SGerd Hoffmann /*
56381626a9SGerd Hoffmann  * Bits that are reserved or are read-only are masked out of values
57381626a9SGerd Hoffmann  * written to us by software
58381626a9SGerd Hoffmann  */
59381626a9SGerd Hoffmann #define PORTSC_RO_MASK       0x007001c0
60381626a9SGerd Hoffmann #define PORTSC_RWC_MASK      0x0000002a
61381626a9SGerd Hoffmann #define PORTSC_WKOC_E        (1 << 22)    // Wake on Over Current Enable
62381626a9SGerd Hoffmann #define PORTSC_WKDS_E        (1 << 21)    // Wake on Disconnect Enable
63381626a9SGerd Hoffmann #define PORTSC_WKCN_E        (1 << 20)    // Wake on Connect Enable
64381626a9SGerd Hoffmann #define PORTSC_PTC           (15 << 16)   // Port Test Control
65381626a9SGerd Hoffmann #define PORTSC_PTC_SH        16           // Port Test Control shift
66381626a9SGerd Hoffmann #define PORTSC_PIC           (3 << 14)    // Port Indicator Control
67381626a9SGerd Hoffmann #define PORTSC_PIC_SH        14           // Port Indicator Control Shift
68381626a9SGerd Hoffmann #define PORTSC_POWNER        (1 << 13)    // Port Owner
69381626a9SGerd Hoffmann #define PORTSC_PPOWER        (1 << 12)    // Port Power
70381626a9SGerd Hoffmann #define PORTSC_LINESTAT      (3 << 10)    // Port Line Status
71381626a9SGerd Hoffmann #define PORTSC_LINESTAT_SH   10           // Port Line Status Shift
72381626a9SGerd Hoffmann #define PORTSC_PRESET        (1 << 8)     // Port Reset
73381626a9SGerd Hoffmann #define PORTSC_SUSPEND       (1 << 7)     // Port Suspend
74381626a9SGerd Hoffmann #define PORTSC_FPRES         (1 << 6)     // Force Port Resume
75381626a9SGerd Hoffmann #define PORTSC_OCC           (1 << 5)     // Over Current Change
76381626a9SGerd Hoffmann #define PORTSC_OCA           (1 << 4)     // Over Current Active
77381626a9SGerd Hoffmann #define PORTSC_PEDC          (1 << 3)     // Port Enable/Disable Change
78381626a9SGerd Hoffmann #define PORTSC_PED           (1 << 2)     // Port Enable/Disable
79381626a9SGerd Hoffmann #define PORTSC_CSC           (1 << 1)     // Connect Status Change
80381626a9SGerd Hoffmann #define PORTSC_CONNECT       (1 << 0)     // Current Connect Status
81381626a9SGerd Hoffmann 
82381626a9SGerd Hoffmann #endif /* HW_USB_EHCI_REGS_H */
83