Page MenuHomeFreeBSD

D57198.id178455.diff
No OneTemporary

D57198.id178455.diff

diff --git a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
--- a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
+++ b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
@@ -78,7 +78,7 @@
struct rtwn_usb_softc *uc = RTWN_USB_SOFTC(sc);
struct r12a_softc *rs = sc->sc_priv;
- if (usbd_get_speed(uc->uc_udev) == USB_SPEED_SUPER) {
+ if (usbd_get_speed(uc->uc_udev) >= USB_SPEED_SUPER) {
rs->ac_usb_dma_size = 0x07;
rs->ac_usb_dma_time = 0x1a;
} else {
diff --git a/sys/dev/usb/controller/usb_controller.c b/sys/dev/usb/controller/usb_controller.c
--- a/sys/dev/usb/controller/usb_controller.c
+++ b/sys/dev/usb/controller/usb_controller.c
@@ -736,6 +736,18 @@
device_printf(bus->bdev, "5.0Gbps Super Speed USB v3.0\n");
break;
+ case USB_REV_3_1:
+ speed = USB_SPEED_SUPER_PLUS;
+ device_printf(bus->bdev,
+ "10Gbps Super Speed Plus USB v3.1\n");
+ break;
+
+ case USB_REV_3_2:
+ speed = USB_SPEED_SUPER_PLUS_GEN2_X2;
+ device_printf(bus->bdev,
+ "20Gbps Super Speed Plus USB v3.2\n");
+ break;
+
default:
device_printf(bus->bdev, "Unsupported USB revision\n");
#if USB_HAVE_ROOT_MOUNT_HOLD
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
--- a/sys/dev/usb/controller/xhci.c
+++ b/sys/dev/usb/controller/xhci.c
@@ -4465,9 +4465,9 @@
case USB_EP_MODE_DEFAULT:
return (0);
case USB_EP_MODE_STREAMS:
- if (xhcistreams == 0 ||
+ if (xhcistreams == 0 ||
(ep->edesc->bmAttributes & UE_XFERTYPE) != UE_BULK ||
- udev->speed != USB_SPEED_SUPER)
+ udev->speed < USB_SPEED_SUPER)
return (USB_ERR_INVAL);
return (0);
default:
diff --git a/sys/dev/usb/net/if_muge.c b/sys/dev/usb/net/if_muge.c
--- a/sys/dev/usb/net/if_muge.c
+++ b/sys/dev/usb/net/if_muge.c
@@ -817,6 +817,9 @@
/* XXX Flow control settings obtained from Microchip's driver. */
switch(usbd_get_speed(sc->sc_ue.ue_udev)) {
case USB_SPEED_SUPER:
+ case USB_SPEED_SUPER_PLUS:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
fct_flow = 0x817;
break;
case USB_SPEED_HIGH:
@@ -1023,6 +1026,9 @@
/* Configuring the burst cap. */
switch (usbd_get_speed(sc->sc_ue.ue_udev)) {
case USB_SPEED_SUPER:
+ case USB_SPEED_SUPER_PLUS:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
burst_cap = MUGE_DEFAULT_BURST_CAP_SIZE/MUGE_SS_USB_PKT_SIZE;
break;
case USB_SPEED_HIGH:
diff --git a/sys/dev/usb/net/if_ure.c b/sys/dev/usb/net/if_ure.c
--- a/sys/dev/usb/net/if_ure.c
+++ b/sys/dev/usb/net/if_ure.c
@@ -1151,6 +1151,9 @@
/* Set RX EARLY timeout and size */
if (sc->sc_flags & URE_FLAG_8153) {
switch (usbd_get_speed(sc->sc_ue.ue_udev)) {
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS:
case USB_SPEED_SUPER:
reg = URE_COALESCE_SUPER / 8;
break;
@@ -1700,7 +1703,7 @@
URE_CLRBIT_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA, URE_LED_MODE_MASK);
if ((sc->sc_chip & URE_CHIP_VER_5C10) &&
- usbd_get_speed(sc->sc_ue.ue_udev) != USB_SPEED_SUPER)
+ usbd_get_speed(sc->sc_ue.ue_udev) < USB_SPEED_SUPER)
val = URE_LPM_TIMER_500MS;
else
val = URE_LPM_TIMER_500US;
diff --git a/sys/dev/usb/storage/umass.c b/sys/dev/usb/storage/umass.c
--- a/sys/dev/usb/storage/umass.c
+++ b/sys/dev/usb/storage/umass.c
@@ -2409,6 +2409,13 @@
UMASS_FLOPPY_TRANSFER_SPEED;
} else {
switch (usbd_get_speed(sc->sc_udev)) {
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS:
+ cpi->base_transfer_speed =
+ 1000000;
+ cpi->maxio = maxphys;
+ break;
case USB_SPEED_SUPER:
cpi->base_transfer_speed =
UMASS_SUPER_TRANSFER_SPEED;
diff --git a/sys/dev/usb/template/usb_template.c b/sys/dev/usb/template/usb_template.c
--- a/sys/dev/usb/template/usb_template.c
+++ b/sys/dev/usb/template/usb_template.c
@@ -593,6 +593,15 @@
USETW(utd->udd.bcdUSB, 0x0300);
utd->udd.bMaxPacketSize = 9; /* 2**9 = 512 bytes */
break;
+ case USB_SPEED_SUPER_PLUS:
+ USETW(utd->udd.bcdUSB, 0x0310);
+ utd->udd.bMaxPacketSize = 9; /* 2**9 = 512 bytes */
+ break;
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
+ USETW(utd->udd.bcdUSB, 0x0320);
+ utd->udd.bMaxPacketSize = 9; /* 2**9 = 512 bytes */
+ break;
default:
temp->err = USB_ERR_INVAL;
break;
diff --git a/sys/dev/usb/usb_device.c b/sys/dev/usb/usb_device.c
--- a/sys/dev/usb/usb_device.c
+++ b/sys/dev/usb/usb_device.c
@@ -524,7 +524,7 @@
return;
/* check for SUPER-speed streams mode endpoint */
- if (udev->speed == USB_SPEED_SUPER && ecomp != NULL &&
+ if (udev->speed >= USB_SPEED_SUPER && ecomp != NULL &&
(edesc->bmAttributes & UE_XFERTYPE) == UE_BULK &&
(UE_GET_BULK_STREAMS(ecomp->bmAttributes) != 0)) {
usbd_set_endpoint_mode(udev, ep, USB_EP_MODE_STREAMS);
@@ -1856,15 +1856,17 @@
adev = udev;
hub = udev->parent_hub;
- while (hub) {
- if (hub->speed == USB_SPEED_HIGH) {
- udev->hs_hub_addr = hub->address;
- udev->parent_hs_hub = hub;
- udev->hs_port_no = adev->port_no;
- break;
+ if (udev->speed != USB_SPEED_HIGH) {
+ while (hub) {
+ if (hub->speed > udev->speed) {
+ udev->hs_hub_addr = hub->address;
+ udev->parent_hs_hub = hub;
+ udev->hs_port_no = adev->port_no;
+ break;
+ }
+ adev = hub;
+ hub = hub->parent_hub;
}
- adev = hub;
- hub = hub->parent_hub;
}
/* init the default endpoint */
diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c
--- a/sys/dev/usb/usb_request.c
+++ b/sys/dev/usb/usb_request.c
@@ -2081,8 +2081,7 @@
* Try to reset the High Speed parent HUB of a LOW- or FULL-
* speed device, if any.
*/
- if (udev->parent_hs_hub != NULL &&
- udev->speed != USB_SPEED_HIGH) {
+ if (udev->parent_hs_hub != NULL && udev->speed < USB_SPEED_HIGH) {
DPRINTF("Trying to reset parent High Speed TT.\n");
if (udev->parent_hs_hub == parent_hub &&
(uhub_count_active_host_ports(parent_hub, USB_SPEED_LOW) +
@@ -2103,7 +2102,7 @@
}
#endif
/* Try to warm reset first */
- if (parent_hub->speed == USB_SPEED_SUPER)
+ if (parent_hub->speed >= USB_SPEED_SUPER)
usbd_req_warm_reset_port(parent_hub, mtx, udev->port_no);
/* Try to reset the parent HUB port. */
diff --git a/sys/dev/usb/usb_transfer.c b/sys/dev/usb/usb_transfer.c
--- a/sys/dev/usb/usb_transfer.c
+++ b/sys/dev/usb/usb_transfer.c
@@ -407,6 +407,9 @@
max_packet_size &= 0x7FF;
break;
case USB_SPEED_SUPER:
+ case USB_SPEED_SUPER_PLUS:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
max_packet_count += (max_packet_size >> 11) & 3;
if (ecomp != NULL)
@@ -517,6 +520,9 @@
xfer->max_packet_size &= 0x7FF;
break;
case USB_SPEED_SUPER:
+ case USB_SPEED_SUPER_PLUS:
+ case USB_SPEED_SUPER_PLUS_X2:
+ case USB_SPEED_SUPER_PLUS_GEN2_X2:
xfer->max_packet_count += (xfer->max_packet_size >> 11) & 3;
if (ecomp != NULL)
@@ -3532,14 +3538,20 @@
[USB_SPEED_HIGH] = 1024,
[USB_SPEED_VARIABLE] = 1024,
[USB_SPEED_SUPER] = 1024,
+ [USB_SPEED_SUPER_PLUS] = 1024,
+ [USB_SPEED_SUPER_PLUS_X2] = 1024,
+ [USB_SPEED_SUPER_PLUS_GEN2_X2] = 1024,
};
static const uint16_t isoc_range_max[USB_SPEED_MAX] = {
- [USB_SPEED_LOW] = 0, /* invalid */
+ [USB_SPEED_LOW] = 0, /* invalid */
[USB_SPEED_FULL] = 1023,
[USB_SPEED_HIGH] = 1024,
[USB_SPEED_VARIABLE] = 3584,
[USB_SPEED_SUPER] = 1024,
+ [USB_SPEED_SUPER_PLUS] = 1024,
+ [USB_SPEED_SUPER_PLUS_X2] = 1024,
+ [USB_SPEED_SUPER_PLUS_GEN2_X2] = 1024,
};
static const uint16_t control_min[USB_SPEED_MAX] = {
@@ -3548,6 +3560,9 @@
[USB_SPEED_HIGH] = 64,
[USB_SPEED_VARIABLE] = 512,
[USB_SPEED_SUPER] = 512,
+ [USB_SPEED_SUPER_PLUS] = 512,
+ [USB_SPEED_SUPER_PLUS_X2] = 512,
+ [USB_SPEED_SUPER_PLUS_GEN2_X2] = 512,
};
static const uint16_t bulk_min[USB_SPEED_MAX] = {
@@ -3556,6 +3571,9 @@
[USB_SPEED_HIGH] = 512,
[USB_SPEED_VARIABLE] = 512,
[USB_SPEED_SUPER] = 1024,
+ [USB_SPEED_SUPER_PLUS] = 1024,
+ [USB_SPEED_SUPER_PLUS_X2] = 1024,
+ [USB_SPEED_SUPER_PLUS_GEN2_X2] = 1024,
};
uint16_t temp;

File Metadata

Mime Type
text/plain
Expires
Fri, Jul 24, 6:53 AM (16 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35434827
Default Alt Text
D57198.id178455.diff (7 KB)

Event Timeline