diff options
| -rw-r--r-- | common/usb_hub.c | 40 | ||||
| -rw-r--r-- | include/usb_defs.h | 39 | 
2 files changed, 51 insertions, 28 deletions
| diff --git a/common/usb_hub.c b/common/usb_hub.c index 4fbfacf24..0d79ec3ea 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -170,14 +170,24 @@ static struct usb_hub_device *usb_hub_allocate(void)  static inline char *portspeed(int portstatus)  { -	if (portstatus & (1 << USB_PORT_FEAT_SUPERSPEED)) -		return "5 Gb/s"; -	else if (portstatus & (1 << USB_PORT_FEAT_HIGHSPEED)) -		return "480 Mb/s"; -	else if (portstatus & (1 << USB_PORT_FEAT_LOWSPEED)) -		return "1.5 Mb/s"; -	else -		return "12 Mb/s"; +	char *speed_str; + +	switch (portstatus & USB_PORT_STAT_SPEED_MASK) { +	case USB_PORT_STAT_SUPER_SPEED: +		speed_str = "5 Gb/s"; +		break; +	case USB_PORT_STAT_HIGH_SPEED: +		speed_str = "480 Mb/s"; +		break; +	case USB_PORT_STAT_LOW_SPEED: +		speed_str = "1.5 Mb/s"; +		break; +	default: +		speed_str = "12 Mb/s"; +		break; +	} + +	return speed_str;  }  int hub_port_reset(struct usb_device *dev, int port, @@ -275,14 +285,20 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)  	/* Allocate a new device struct for it */  	usb = usb_alloc_new_device(dev->controller); -	if (portstatus & USB_PORT_STAT_SUPER_SPEED) +	switch (portstatus & USB_PORT_STAT_SPEED_MASK) { +	case USB_PORT_STAT_SUPER_SPEED:  		usb->speed = USB_SPEED_SUPER; -	else if (portstatus & USB_PORT_STAT_HIGH_SPEED) +		break; +	case USB_PORT_STAT_HIGH_SPEED:  		usb->speed = USB_SPEED_HIGH; -	else if (portstatus & USB_PORT_STAT_LOW_SPEED) +		break; +	case USB_PORT_STAT_LOW_SPEED:  		usb->speed = USB_SPEED_LOW; -	else +		break; +	default:  		usb->speed = USB_SPEED_FULL; +		break; +	}  	dev->children[port] = usb;  	usb->parent = dev; diff --git a/include/usb_defs.h b/include/usb_defs.h index 6ce679140..4f3601a16 100644 --- a/include/usb_defs.h +++ b/include/usb_defs.h @@ -215,8 +215,6 @@  #define USB_PORT_FEAT_POWER          8  #define USB_PORT_FEAT_LOWSPEED       9  #define USB_PORT_FEAT_HIGHSPEED      10 -#define USB_PORT_FEAT_FULLSPEED      11 -#define USB_PORT_FEAT_SUPERSPEED     12  #define USB_PORT_FEAT_C_CONNECTION   16  #define USB_PORT_FEAT_C_ENABLE       17  #define USB_PORT_FEAT_C_SUSPEND      18 @@ -224,6 +222,17 @@  #define USB_PORT_FEAT_C_RESET        20  #define USB_PORT_FEAT_TEST           21 +/* + * Changes to Port feature numbers for Super speed, + * from USB 3.0 spec Table 10-8 + */ +#define USB_SS_PORT_FEAT_U1_TIMEOUT	23 +#define USB_SS_PORT_FEAT_U2_TIMEOUT	24 +#define USB_SS_PORT_FEAT_C_LINK_STATE	25 +#define USB_SS_PORT_FEAT_C_CONFIG_ERROR	26 +#define USB_SS_PORT_FEAT_BH_RESET	28 +#define USB_SS_PORT_FEAT_C_BH_RESET	29 +  /* wPortStatus bits */  #define USB_PORT_STAT_CONNECTION    0x0001  #define USB_PORT_STAT_ENABLE        0x0002 @@ -233,20 +242,18 @@  #define USB_PORT_STAT_POWER         0x0100  #define USB_PORT_STAT_LOW_SPEED     0x0200  #define USB_PORT_STAT_HIGH_SPEED    0x0400	/* support for EHCI */ -#define USB_PORT_STAT_FULL_SPEED    0x0800 -#define USB_PORT_STAT_SUPER_SPEED   0x1000	/* support for XHCI */ -#define USB_PORT_STAT_SPEED	\ -	(USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED | \ -	USB_PORT_STAT_FULL_SPEED | USB_PORT_STAT_SUPER_SPEED) +#define USB_PORT_STAT_SUPER_SPEED   0x0600	/* faking support to XHCI */ +#define USB_PORT_STAT_SPEED_MASK	\ +	(USB_PORT_STAT_LOW_SPEED | USB_PORT_STAT_HIGH_SPEED)  /* - * Additions to wPortStatus bit field from USB 3.0 - * See USB 3.0 spec Table 10-10 + * Changes to wPortStatus bit field in USB 3.0 + * See USB 3.0 spec Table 10-11   */ -#define USB_PORT_STAT_LINK_STATE	0x01e0 +#define USB_SS_PORT_STAT_LINK_STATE	0x01e0  #define USB_SS_PORT_STAT_POWER		0x0200  #define USB_SS_PORT_STAT_SPEED		0x1c00 -#define USB_PORT_STAT_SPEED_5GBPS	0x0000 +#define USB_SS_PORT_STAT_SPEED_5GBPS	0x0000  /* wPortChange bits */  #define USB_PORT_STAT_C_CONNECTION  0x0001 @@ -256,12 +263,12 @@  #define USB_PORT_STAT_C_RESET       0x0010  /* - * Addition to wPortChange bit fields form USB 3.0 - * See USB 3.0 spec Table 10-11 + * Changes to wPortChange bit fields in USB 3.0 + * See USB 3.0 spec Table 10-12   */ -#define USB_PORT_STAT_C_BH_RESET	0x0020 -#define USB_PORT_STAT_C_LINK_STATE	0x0040 -#define USB_PORT_STAT_C_CONFIG_ERROR	0x0080 +#define USB_SS_PORT_STAT_C_BH_RESET	0x0020 +#define USB_SS_PORT_STAT_C_LINK_STATE	0x0040 +#define USB_SS_PORT_STAT_C_CONFIG_ERROR	0x0080  /* wHubCharacteristics (masks) */  #define HUB_CHAR_LPSM               0x0003 |