Hello, Here are xhci patches for nick-nhusb branch.
nhusb-xhcireg_h.diff + Fix the name of multiple inclusion protection. nhusb-uhub_c.diff + Fix devices were not recognized at boot on some xhci (AFAIK Intel PCHs). -- t-hash
--- sys/dev/usb/xhcireg.h.orig 2015-09-13 18:38:00.000000000 +0900 +++ sys/dev/usb/xhcireg.h 2015-09-13 18:53:03.000000000 +0900 @@ -26,8 +26,8 @@ * SUCH DAMAGE. */ -#ifndef _XHCIREG_H_ -#define _XHCIREG_H_ +#ifndef _DEV_USB_XHCIREG_H_ +#define _DEV_USB_XHCIREG_H_ /* XHCI PCI config registers */ #define PCI_CBMEM 0x10 /* configuration base MEM */ @@ -470,4 +470,4 @@ struct xhci_erste { } __packed __aligned(XHCI_ERSTE_ALIGN); #define XHCI_ERSTE_SIZE sizeof(struct xhci_erste) -#endif /* _XHCIREG_H_ */ +#endif /* _DEV_USB_XHCIREG_H_ */
--- sys/dev/usb/uhub.c.orig 2015-06-07 01:42:33.000000000 +0900 +++ sys/dev/usb/uhub.c 2015-09-22 19:45:06.000000000 +0900 @@ -587,6 +587,13 @@ uhub_explore(struct usbd_device *dev) } } if (change & UPS_C_PORT_RESET) { + /* + * some xHCs set PortResetChange instead of CSC + * when port is reset. + */ + if ((status & UPS_CURRENT_CONNECT_STATUS) != 0) { + change |= UPS_C_CONNECT_STATUS; + } usbd_clear_port_feature(dev, port, UHF_C_PORT_RESET); } if (change & UPS_C_BH_PORT_RESET) {