diff --git a/sys/dev/usb/controller/xhci_pci.h b/sys/dev/usb/controller/xhci_pci.h new file mode 100644 --- /dev/null +++ b/sys/dev/usb/controller/xhci_pci.h @@ -0,0 +1,167 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2010-2022 Hans Petter Selasky + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#define PCI_XHCI_VENDORID_AMD 0x1022 +#define PCI_XHCI_VENDORID_INTEL 0x8086 +#define PCI_XHCI_VENDORID_VMWARE 0x15ad +#define PCI_XHCI_VENDORID_ZHAOXIN 0x1d17 + +static inline const char * +xhci_pci_match(device_t self) +{ + uint32_t device_id = pci_get_devid(self); + + switch (device_id) { + case 0x145c1022: + return ("AMD KERNCZ USB 3.0 controller"); + case 0x148c1022: + return ("AMD Starship USB 3.0 controller"); + case 0x149c1022: + return ("AMD Matisse USB 3.0 controller"); + case 0x15e01022: + case 0x15e11022: + return ("AMD Raven USB 3.1 controller"); + case 0x43ba1022: + return ("AMD X399 USB 3.0 controller"); + case 0x43b91022: /* X370 */ + case 0x43bb1022: /* B350 */ + return ("AMD 300 Series USB 3.1 controller"); + case 0x43d51022: + return ("AMD 400 Series USB 3.1 controller"); + case 0x78121022: + case 0x78141022: + case 0x79141022: + return ("AMD FCH USB 3.0 controller"); + + case 0x077815ad: + case 0x077915ad: + return ("VMware USB 3.0 controller"); + + case 0x145f1d94: + return ("Hygon USB 3.0 controller"); + + case 0x01941033: + return ("NEC uPD720200 USB 3.0 controller"); + case 0x00151912: + return ("NEC uPD720202 USB 3.0 controller"); + + case 0x10001b73: + return ("Fresco Logic FL1000G USB 3.0 controller"); + case 0x10091b73: + return ("Fresco Logic FL1009 USB 3.0 controller"); + case 0x11001b73: + return ("Fresco Logic FL1100 USB 3.0 controller"); + + case 0x10421b21: + return ("ASMedia ASM1042 USB 3.0 controller"); + case 0x11421b21: + return ("ASMedia ASM1042A USB 3.0 controller"); + case 0x13431b21: + return ("ASMedia ASM1143 USB 3.1 controller"); + case 0x32421b21: + return ("ASMedia ASM3242 USB 3.2 controller"); + + case 0x02ed8086: + return ("Intel Comet Lake PCH-LP USB 3.1 controller"); + case 0x0b278086: + return ("Intel Goshen Ridge Thunderbolt 4 USB controller"); + case 0x0f358086: + return ("Intel BayTrail USB 3.0 controller"); + case 0x11388086: + return ("Intel Maple Ridge Thunderbolt 4 USB controller"); + case 0x15c18086: + case 0x15d48086: + case 0x15db8086: + return ("Intel Alpine Ridge Thunderbolt 3 USB controller"); + case 0x15e98086: + case 0x15ec8086: + case 0x15f08086: + return ("Intel Titan Ridge Thunderbolt 3 USB controller"); + case 0x19d08086: + return ("Intel Denverton USB 3.0 controller"); + case 0x9c318086: + case 0x1e318086: + return ("Intel Panther Point USB 3.0 controller"); + case 0x22b58086: + return ("Intel Braswell USB 3.0 controller"); + case 0x31a88086: + return ("Intel Gemini Lake USB 3.0 controller"); + case 0x34ed8086: + return ("Intel Ice Lake-LP USB 3.1 controller"); + case 0x43ed8086: + return ("Intel Tiger Lake-H USB 3.2 controller"); + case 0x461e8086: + return ("Intel Alder Lake-P Thunderbolt 4 USB controller"); + case 0x51ed8086: + case 0x54ed8086: + case 0x5fed8086: + return ("Intel Alder Lake PCH USB 3.2 controller"); + case 0x5aa88086: + return ("Intel Apollo Lake USB 3.0 controller"); + case 0x7ae08086: + return ("Intel Alder Lake USB 3.2 controller"); + case 0x8a138086: + return ("Intel Ice Lake Thunderbolt 3 USB controller"); + case 0x8c318086: + return ("Intel Lynx Point USB 3.0 controller"); + case 0x8cb18086: + return ("Intel Wildcat Point USB 3.0 controller"); + case 0x8d318086: + return ("Intel Wellsburg USB 3.0 controller"); + case 0x9a138086: + return ("Intel Tiger Lake-LP Thunderbolt 4 USB controller"); + case 0x9a178086: + return ("Intel Tiger Lake-H Thunderbolt 4 USB controller"); + case 0x9cb18086: + return ("Broadwell Integrated PCH-LP chipset USB 3.0 controller"); + case 0x9d2f8086: + return ("Intel Sunrise Point-LP USB 3.0 controller"); + case 0xa0ed8086: + return ("Intel Tiger Lake-LP USB 3.2 controller"); + case 0xa12f8086: + return ("Intel Sunrise Point USB 3.0 controller"); + case 0xa1af8086: + return ("Intel Lewisburg USB 3.0 controller"); + case 0xa2af8086: + return ("Intel Union Point USB 3.0 controller"); + case 0xa36d8086: + return ("Intel Cannon Lake USB 3.1 controller"); + case 0xa71e8086: + return ("Intel Raptor Lake-P Thunderbolt 4 USB Controller"); + + case 0xa01b177d: + return ("Cavium ThunderX USB 3.0 controller"); + + case 0x1ada10de: + return ("NVIDIA TU106 USB 3.1 controller"); + + case 0x92021d17: + return ("Zhaoxin ZX-100 USB 3.0 controller"); + case 0x92031d17: + return ("Zhaoxin ZX-200 USB 3.0 controller"); + case 0x92041d17: + return ("Zhaoxin ZX-E USB 3.0 controller"); + + default: + break; + } + + if ((pci_get_class(self) == PCIC_SERIALBUS) + && (pci_get_subclass(self) == PCIS_SERIALBUS_USB) + && (pci_get_progif(self) == PCIP_SERIALBUS_USB_XHCI)) { + return ("XHCI (generic) USB 3.0 controller"); + } + return (NULL); /* dunno */ +} diff --git a/sys/dev/usb/controller/xhci_pci.c b/sys/dev/usb/controller/xhci_pci.c --- a/sys/dev/usb/controller/xhci_pci.c +++ b/sys/dev/usb/controller/xhci_pci.c @@ -56,14 +56,10 @@ #include #include #include +#include #include #include "usb_if.h" -#define PCI_XHCI_VENDORID_AMD 0x1022 -#define PCI_XHCI_VENDORID_INTEL 0x8086 -#define PCI_XHCI_VENDORID_VMWARE 0x15ad -#define PCI_XHCI_VENDORID_ZHAOXIN 0x1d17 - static device_probe_t xhci_pci_probe; static device_detach_t xhci_pci_detach; static usb_take_controller_t xhci_pci_take_controller; @@ -87,157 +83,6 @@ DRIVER_MODULE(xhci, pci, xhci_pci_driver, NULL, NULL); MODULE_DEPEND(xhci, usb, 1, 1, 1); -static const char * -xhci_pci_match(device_t self) -{ - uint32_t device_id = pci_get_devid(self); - - switch (device_id) { - case 0x145c1022: - return ("AMD KERNCZ USB 3.0 controller"); - case 0x148c1022: - return ("AMD Starship USB 3.0 controller"); - case 0x149c1022: - return ("AMD Matisse USB 3.0 controller"); - case 0x15b61022: - case 0x15b71022: - return ("AMD Raphael/Granite Ridge USB 3.1 controller"); - case 0x15b81022: - return ("AMD Raphael/Granite Ridge USB 2.0 controller"); - case 0x15e01022: - case 0x15e11022: - return ("AMD Raven USB 3.1 controller"); - case 0x43ba1022: - return ("AMD X399 USB 3.0 controller"); - case 0x43b91022: /* X370 */ - case 0x43bb1022: /* B350 */ - return ("AMD 300 Series USB 3.1 controller"); - case 0x43d51022: - return ("AMD 400 Series USB 3.1 controller"); - case 0x43f71022: - return ("AMD 600 Series USB 3.2 controller"); - case 0x78121022: - case 0x78141022: - case 0x79141022: - return ("AMD FCH USB 3.0 controller"); - - case 0x077815ad: - case 0x077915ad: - return ("VMware USB 3.0 controller"); - - case 0x145f1d94: - return ("Hygon USB 3.0 controller"); - - case 0x01941033: - return ("NEC uPD720200 USB 3.0 controller"); - case 0x00151912: - return ("NEC uPD720202 USB 3.0 controller"); - - case 0x10001b73: - return ("Fresco Logic FL1000G USB 3.0 controller"); - case 0x10091b73: - return ("Fresco Logic FL1009 USB 3.0 controller"); - case 0x11001b73: - return ("Fresco Logic FL1100 USB 3.0 controller"); - - case 0x10421b21: - return ("ASMedia ASM1042 USB 3.0 controller"); - case 0x11421b21: - return ("ASMedia ASM1042A USB 3.0 controller"); - case 0x13431b21: - return ("ASMedia ASM1143 USB 3.1 controller"); - case 0x32421b21: - return ("ASMedia ASM3242 USB 3.2 controller"); - - case 0x0b278086: - return ("Intel Goshen Ridge Thunderbolt 4 USB controller"); - case 0x0f358086: - return ("Intel BayTrail USB 3.0 controller"); - case 0x11388086: - return ("Intel Maple Ridge Thunderbolt 4 USB controller"); - case 0x15c18086: - case 0x15d48086: - case 0x15db8086: - return ("Intel Alpine Ridge Thunderbolt 3 USB controller"); - case 0x15e98086: - case 0x15ec8086: - case 0x15f08086: - return ("Intel Titan Ridge Thunderbolt 3 USB controller"); - case 0x19d08086: - return ("Intel Denverton USB 3.0 controller"); - case 0x9c318086: - case 0x1e318086: - return ("Intel Panther Point USB 3.0 controller"); - case 0x22b58086: - return ("Intel Braswell USB 3.0 controller"); - case 0x31a88086: - return ("Intel Gemini Lake USB 3.0 controller"); - case 0x34ed8086: - return ("Intel Ice Lake-LP USB 3.1 controller"); - case 0x43ed8086: - return ("Intel Tiger Lake-H USB 3.2 controller"); - case 0x461e8086: - return ("Intel Alder Lake-P Thunderbolt 4 USB controller"); - case 0x4b7d8086: - return ("Intel Elkhart Lake USB 3.1 controller"); - case 0x51ed8086: - return ("Intel Alder Lake USB 3.2 controller"); - case 0x5aa88086: - return ("Intel Apollo Lake USB 3.0 controller"); - case 0x7ae08086: - return ("Intel Alder Lake USB 3.2 controller"); - case 0x8a138086: - return ("Intel Ice Lake Thunderbolt 3 USB controller"); - case 0x8c318086: - return ("Intel Lynx Point USB 3.0 controller"); - case 0x8cb18086: - return ("Intel Wildcat Point USB 3.0 controller"); - case 0x8d318086: - return ("Intel Wellsburg USB 3.0 controller"); - case 0x9a138086: - return ("Intel Tiger Lake-LP Thunderbolt 4 USB controller"); - case 0x9a178086: - return ("Intel Tiger Lake-H Thunderbolt 4 USB controller"); - case 0x9cb18086: - return ("Broadwell Integrated PCH-LP chipset USB 3.0 controller"); - case 0x9d2f8086: - return ("Intel Sunrise Point-LP USB 3.0 controller"); - case 0xa0ed8086: - return ("Intel Tiger Lake-LP USB 3.2 controller"); - case 0xa12f8086: - return ("Intel Sunrise Point USB 3.0 controller"); - case 0xa1af8086: - return ("Intel Lewisburg USB 3.0 controller"); - case 0xa2af8086: - return ("Intel Union Point USB 3.0 controller"); - case 0xa36d8086: - return ("Intel Cannon Lake USB 3.1 controller"); - - case 0xa01b177d: - return ("Cavium ThunderX USB 3.0 controller"); - - case 0x1ada10de: - return ("NVIDIA TU106 USB 3.1 controller"); - - case 0x92021d17: - return ("Zhaoxin ZX-100 USB 3.0 controller"); - case 0x92031d17: - return ("Zhaoxin ZX-200 USB 3.0 controller"); - case 0x92041d17: - return ("Zhaoxin ZX-E USB 3.0 controller"); - - default: - break; - } - - if ((pci_get_class(self) == PCIC_SERIALBUS) - && (pci_get_subclass(self) == PCIS_SERIALBUS_USB) - && (pci_get_progif(self) == PCIP_SERIALBUS_USB_XHCI)) { - return ("XHCI (generic) USB 3.0 controller"); - } - return (NULL); /* dunno */ -} - static int xhci_pci_probe(device_t self) {