On Fri, Sep 07, 2012 at 05:33:29PM +0800, Lan Tianyu wrote:
> On 2012/9/5 22:39, Alan Stern wrote:
> >On Wed, 5 Sep 2012, Lan Tianyu wrote:
> >
> >>This is copied from xhci_usb3_hub_descriptor().
> >>
> >>struct usb_hub_descriptor {
> >>    __u8  bDescLength;
> >>    __u8  bDescriptorType;
> >>    __u8  bNbrPorts;
> >>    __le16 wHubCharacteristics;
> >>    __u8  bPwrOn2PwrGood;
> >>    __u8  bHubContrCurrent;
> >>
> >>    /* 2.0 and 3.0 hubs differ here */
> >>    union {
> >>            struct {
> >>                    /* add 1 bit for hub status change; round to bytes */
> >>                    __u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
> >>                    __u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
> >>            }  __attribute__ ((packed)) hs;
> >>
> >>            struct {
> >>                    __u8 bHubHdrDecLat;
> >>                    __u16 wHubDelay;
> >>                    __u16 DeviceRemovable;
> >>            }  __attribute__ ((packed)) ss;
> >>    } u;
> >>} __attribute__ ((packed));
> >>
> >>The struct has been defined with __attribute__ ((packed)). So there is
> >>no alignment problem. Or we can
> >>    hub->descriptor->u.ss.DeviceRemovable = (__force __u16)
> >>                    cpu_to_le16(port_removable);
> >>I think we also should define wHubDelay and DeviceRemovable as __le16
> >>for ss since they are little-endian order, right?
> >
> >Yes.  Ask Sarah about changing it.
> hi Sarah:
>       Do you have some comments about this?

Go ahead and change the xhci-hub.c code to remove the __force once you
change the usb_hub_descriptor's wHubDelay and DeviceRemovable fields to
__le16.  They should have been marked as little endian from the
beginning.

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to