]> Pileus Git - ~andy/linux/blobdiff - include/linux/usb/ehci_def.h
Merge tag 'mmc-merge-for-3.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[~andy/linux] / include / linux / usb / ehci_def.h
index e49dfd45baa468eba946060b1cb3dddda9a2e3dc..7cc95ee3606bcc415978f316f5c1f0d94c2ca0bb 100644 (file)
 struct ehci_caps {
        /* these fields are specified as 8 and 16 bit registers,
         * but some hosts can't perform 8 or 16 bit PCI accesses.
+        * some hosts treat caplength and hciversion as parts of a 32-bit
+        * register, others treat them as two separate registers, this
+        * affects the memory map for big endian controllers.
         */
        u32             hc_capbase;
-#define HC_LENGTH(p)           (((p)>>00)&0x00ff)      /* bits 7:0 */
-#define HC_VERSION(p)          (((p)>>16)&0xffff)      /* bits 31:16 */
+#define HC_LENGTH(ehci, p)     (0x00ff&((p) >> /* bits 7:0 / offset 00h */ \
+                               (ehci_big_endian_capbase(ehci) ? 24 : 0)))
+#define HC_VERSION(ehci, p)    (0xffff&((p) >> /* bits 31:16 / offset 02h */ \
+                               (ehci_big_endian_capbase(ehci) ? 0 : 16)))
        u32             hcs_params;     /* HCSPARAMS - offset 0x4 */
 #define HCS_DEBUG_PORT(p)      (((p)>>20)&0xf) /* bits 23:20, debug port? */
 #define HCS_INDICATOR(p)       ((p)&(1 << 16)) /* true: has port indicators */
@@ -52,7 +57,7 @@ struct ehci_caps {
 #define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1))  /* true: periodic_size changes*/
 #define HCC_64BIT_ADDR(p)       ((p)&(1))       /* true: can use 64-bit addr */
        u8              portroute[8];    /* nibbles for routing - offset 0xC */
-} __attribute__ ((packed));
+};
 
 
 /* Section 2.3 Host Controller Operational Registers */
@@ -150,7 +155,7 @@ struct ehci_regs {
 #define PORT_CSC       (1<<1)          /* connect status change */
 #define PORT_CONNECT   (1<<0)          /* device connected */
 #define PORT_RWC_BITS   (PORT_CSC | PORT_PEC | PORT_OCC)
-} __attribute__ ((packed));
+};
 
 #define USBMODE                0x68            /* USB Device mode */
 #define USBMODE_SDIS   (1<<3)          /* Stream disable */
@@ -194,7 +199,7 @@ struct ehci_dbg_port {
        u32     data47;
        u32     address;
 #define DBGP_EPADDR(dev, ep)   (((dev)<<8)|(ep))
-} __attribute__ ((packed));
+};
 
 #ifdef CONFIG_EARLY_PRINTK_DBGP
 #include <linux/init.h>