aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/usb/ohci_pci.c101
-rw-r--r--sys/dev/usb/uhci_pci.c116
-rw-r--r--sys/pci/ohci_pci.c101
-rw-r--r--sys/pci/uhci_pci.c116
4 files changed, 180 insertions, 254 deletions
diff --git a/sys/dev/usb/ohci_pci.c b/sys/dev/usb/ohci_pci.c
index 75e0aa5146cc..3c20ff723e05 100644
--- a/sys/dev/usb/ohci_pci.c
+++ b/sys/dev/usb/ohci_pci.c
@@ -64,6 +64,11 @@
#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000
#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000
+#define PCI_INTERFACE(d) (((d) >> 8) & 0xff)
+#define PCI_SUBCLASS(d) ((d) & PCI_SUBCLASS_MASK)
+#define PCI_CLASS(d) ((d) & PCI_CLASS_MASK)
+
+
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
@@ -72,13 +77,6 @@
#include <dev/usb/ohcireg.h>
#include <dev/usb/ohcivar.h>
-#define PCI_INTERFACE(d) (((d) >> 8) & 0xff)
-#define PCI_SUBCLASS(d) ((d) & PCI_SUBCLASS_MASK)
-#define PCI_CLASS(d) ((d) & PCI_CLASS_MASK)
-
-#define PCI_VENDOR(d) ((d) & 0xffff)
-#define PCI_DEVICE(d) (((d) >> 8) & 0xffff)
-
#define PCI_OHCI_VENDORID_ALI 0x10b9
#define PCI_OHCI_VENDORID_CMDTECH 0x1095
@@ -101,12 +99,10 @@ static const char *ohci_device_usb0673 = "CMD Tech 673 (USB0673) USB Host Contr
static const char *ohci_device_generic = "OHCI (generic) USB Host Controller";
-#define PCI_OHCI_BASE_REG 0x10
-
static const char *ohci_pci_probe __P((pcici_t, pcidi_t));
static void ohci_pci_attach __P((pcici_t, int));
-u_long ohci_count = 0; /* global counter for nr. of devices found */
+static u_long ohci_count = 0;
static struct pci_device ohci_pci_device = {
"ohci",
@@ -118,22 +114,24 @@ static struct pci_device ohci_pci_device = {
DATA_SET(pcidevice_set, ohci_pci_device);
+
static const char *
ohci_pci_probe(pcici_t config_id, pcidi_t device_id)
{
u_int32_t class;
- if (device_id == PCI_OHCI_DEVICEID_ALADDIN_V) {
+ switch(device_id) {
+ case PCI_OHCI_DEVICEID_ALADDIN_V:
return (ohci_device_aladdin_v);
- } else if (device_id == PCI_OHCI_DEVICEID_USB0670) {
+ case PCI_OHCI_DEVICEID_USB0670:
return (ohci_device_usb0670);
- } else if (device_id == PCI_OHCI_DEVICEID_USB0673) {
+ case PCI_OHCI_DEVICEID_USB0673:
return (ohci_device_usb0673);
- } else if (device_id == PCI_OHCI_DEVICEID_FIRELINK) {
+ case PCI_OHCI_DEVICEID_FIRELINK:
return (ohci_device_firelink);
- } else if (device_id == PCI_OHCI_DEVICEID_NEC) {
+ case PCI_OHCI_DEVICEID_NEC:
return (ohci_device_nec);
- } else {
+ default:
class = pci_conf_read(config_id, PCI_CLASS_REG);
if ( (PCI_CLASS(class) == PCI_CLASS_SERIALBUS)
&& (PCI_SUBCLASS(class) == PCI_SUBCLASS_SERIALBUS_USB)
@@ -148,83 +146,72 @@ ohci_pci_probe(pcici_t config_id, pcidi_t device_id)
static void
ohci_pci_attach(pcici_t config_id, int unit)
{
- int id;
- usbd_status r;
- ohci_softc_t *sc = NULL;
vm_offset_t pbase;
+ device_t usbus;
+ ohci_softc_t *sc;
+ usbd_status err;
+ int id;
sc = malloc(sizeof(ohci_softc_t), M_DEVBUF, M_NOWAIT);
/* Do not free it below, intr might use the sc */
if ( sc == NULL ) {
- printf("usb%d: could not allocate memory", unit);
+ printf("ohci%d: could not allocate memory", unit);
return;
}
memset(sc, 0, sizeof(ohci_softc_t));
if(!pci_map_mem(config_id, PCI_CBMEM,
(vm_offset_t *)&sc->sc_iobase, &pbase)) {
- printf("usb%d: could not map memory\n", unit);
+ printf("ohci%d: could not map memory\n", unit);
return;
}
- sc->unit = unit;
if ( !pci_map_int(config_id, (pci_inthand_t *)ohci_intr,
(void *) sc, &bio_imask)) {
- printf("usb%d: could not map irq\n", unit);
+ printf("ohci%d: could not map irq\n", unit);
return;
}
- /* Figure out vendor for root hub descriptor. */
- id = pci_conf_read(config_id, PCI_ID_REG);
- if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_ALI)
- sprintf(sc->sc_vendor, "AcerLabs");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_CMDTECH)
- sprintf(sc->sc_vendor, "CMDTECH");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_COMPAQ)
- sprintf(sc->sc_vendor, "Compaq");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_NEC)
- sprintf(sc->sc_vendor, "NEC");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_OPTI)
- sprintf(sc->sc_vendor, "OPTi");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_SIS)
- sprintf(sc->sc_vendor, "SiS");
- else
- sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id));
-
- sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc);
- if (!sc->sc_bus.bdev) {
- printf("%s%d: could not add USB device to root bus\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev));
+ usbus = device_add_child(root_bus, "usb", -1, sc);
+ if (!usbus) {
+ printf("ohci%d: could not add USB device to root bus\n", unit);
return;
}
+ id = pci_conf_read(config_id, PCI_ID_REG);
switch(id) {
case PCI_OHCI_DEVICEID_ALADDIN_V:
- device_set_desc(sc->sc_bus.bdev, ohci_device_aladdin_v);
+ device_set_desc(usbus, ohci_device_aladdin_v);
+ sprintf(sc->sc_vendor, "AcerLabs");
break;
case PCI_OHCI_DEVICEID_FIRELINK:
- device_set_desc(sc->sc_bus.bdev, ohci_device_firelink);
+ device_set_desc(usbus, ohci_device_firelink);
+ sprintf(sc->sc_vendor, "OPTi");
break;
case PCI_OHCI_DEVICEID_NEC:
- device_set_desc(sc->sc_bus.bdev, ohci_device_nec);
+ device_set_desc(usbus, ohci_device_nec);
+ sprintf(sc->sc_vendor, "NEC");
break;
case PCI_OHCI_DEVICEID_USB0670:
- device_set_desc(sc->sc_bus.bdev, ohci_device_usb0670);
+ device_set_desc(usbus, ohci_device_usb0670);
+ sprintf(sc->sc_vendor, "CMDTECH");
break;
case PCI_OHCI_DEVICEID_USB0673:
- device_set_desc(sc->sc_bus.bdev, ohci_device_usb0673);
+ device_set_desc(usbus, ohci_device_usb0673);
+ sprintf(sc->sc_vendor, "CMDTECH");
break;
default:
- printf("(New OHCI DeviceId=0x%08x)\n", id);
- device_set_desc(sc->sc_bus.bdev, ohci_device_generic);
+ if (bootverbose)
+ printf("(New OHCI DeviceId=0x%08x)\n", id);
+ device_set_desc(usbus, ohci_device_generic);
+ sprintf(sc->sc_vendor, "(unknown)");
}
- r = ohci_init(sc);
- if (r != USBD_NORMAL_COMPLETION) {
- printf("%s%d: init failed, error=%d\n",
- device_get_name(sc->sc_bus.bdev), unit ,r);
- device_delete_child(root_bus, sc->sc_bus.bdev);
+ sc->sc_bus.bdev = usbus;
+ err = ohci_init(sc);
+ if (err != USBD_NORMAL_COMPLETION) {
+ printf("ohci%d: init failed, error=%d\n", unit, err);
+ device_delete_child(root_bus, usbus);
}
return;
diff --git a/sys/dev/usb/uhci_pci.c b/sys/dev/usb/uhci_pci.c
index 8b8d9bbb4404..1eba53f97e57 100644
--- a/sys/dev/usb/uhci_pci.c
+++ b/sys/dev/usb/uhci_pci.c
@@ -1,4 +1,4 @@
-/* FreeBSD $Id: uhci_pci.c,v 1.1 1999/02/18 21:42:19 n_hibma Exp $ */
+/* FreeBSD $Id: uhci_pci.c,v 1.2 1999/03/23 21:37:45 n_hibma Exp $ */
/*
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -57,6 +57,11 @@
#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000
#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000
+#define PCI_INTERFACE(d) (((d)>>8)&0xff)
+#define PCI_SUBCLASS(d) ((d)&PCI_SUBCLASS_MASK)
+#define PCI_CLASS(d) ((d)&PCI_CLASS_MASK)
+
+
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
@@ -65,12 +70,6 @@
#include <dev/usb/uhcireg.h>
#include <dev/usb/uhcivar.h>
-#define PCI_INTERFACE(d) (((d)>>8)&0xff)
-#define PCI_SUBCLASS(d) ((d)&PCI_SUBCLASS_MASK)
-#define PCI_CLASS(d) ((d)&PCI_CLASS_MASK)
-
-#define PCI_VENDOR(d) ((d)&0xffff)
-#define PCI_DEVICE(d) (((d)>>8)&0xffff)
#define PCI_UHCI_VENDORID_INTEL 0x8086
#define PCI_UHCI_VENDORID_VIA 0x1106
@@ -89,7 +88,7 @@ static const char *uhci_device_generic = "UHCI (generic) USB Controller";
static const char *uhci_pci_probe __P((pcici_t, pcidi_t));
static void uhci_pci_attach __P((pcici_t, int));
-u_long uhci_count = 0; /* global counter for nr. of devices found */
+static u_long uhci_count = 0;
static struct pci_device uhci_pci_device = {
"uhci",
@@ -130,106 +129,83 @@ uhci_pci_attach(pcici_t config_id, int unit)
{
int id, legsup;
char *typestr;
- usbd_status r;
+ usbd_status err;
uhci_softc_t *sc = NULL;
+ device_t usbus;
sc = malloc(sizeof(uhci_softc_t), M_DEVBUF, M_NOWAIT);
/* Do not free it below, intr might use the sc */
if ( sc == NULL ) {
- printf("usb%d: could not allocate memory", unit);
+ printf("uhci%d: could not allocate memory", unit);
return;
}
memset(sc, 0, sizeof(uhci_softc_t));
- sc->sc_iobase = pci_conf_read(config_id,PCI_UHCI_BASE_REG) & 0xffe0;
- sc->unit = unit;
+ sc->sc_iobase = pci_conf_read(config_id, PCI_UHCI_BASE_REG) & 0xffe0;
if ( !pci_map_int(config_id, (pci_inthand_t *)uhci_intr,
(void *) sc, &bio_imask)) {
- printf("usb%d: could not map irq\n", unit);
+ printf("uhci%d: could not map irq\n", unit);
return;
}
-#ifndef USBVERBOSE
- if (bootverbose)
-#endif
- {
- switch(pci_conf_read(config_id, PCI_USBREV) & PCI_USBREV_MASK) {
- case PCI_USBREV_PRE_1_0:
- typestr = "pre 1.0";
- break;
- case PCI_USBREV_1_0:
- typestr = "1.0";
- break;
- default:
- typestr = "unknown";
- break;
- }
- printf("usb%d: USB version %s, chip rev. %d\n", unit, typestr,
- (int) pci_conf_read(config_id, PCIR_REVID) & 0xff);
- }
-
- /* Figure out vendor for root hub descriptor. */
- id = pci_conf_read(config_id, PCI_ID_REG);
- if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_INTEL)
- sprintf(sc->sc_vendor, "Intel");
- else if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_VIA)
- sprintf(sc->sc_vendor, "VIA");
- else
- sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id));
-
- /* We add a child to the root bus. After PCI configuration
- * has completed the root bus will start to probe and
- * attach all the devices attached to it, including our new
- * kid.
- *
- * FIXME Sometime in the future the UHCI controller itself will
- * become a kid of PCI device and this device add will no longer
- * be necessary.
- *
- * See README for an elaborate description of the bus
- * structure in spe.
- */
- sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc);
- if (!sc->sc_bus.bdev) {
+ usbus = device_add_child(root_bus, "usb", -1, sc);
+ if (!usbus) {
printf("usb%d: could not add USB device to root bus\n", unit);
return;
}
+ id = pci_conf_read(config_id, PCI_ID_REG);
switch (id) {
case PCI_UHCI_DEVICEID_PIIX3:
- device_set_desc(sc->sc_bus.bdev, uhci_device_piix3);
+ device_set_desc(usbus, uhci_device_piix3);
+ sprintf(sc->sc_vendor, "Intel");
break;
case PCI_UHCI_DEVICEID_PIIX4:
- device_set_desc(sc->sc_bus.bdev, uhci_device_piix4);
+ device_set_desc(usbus, uhci_device_piix4);
+ sprintf(sc->sc_vendor, "Intel");
break;
case PCI_UHCI_DEVICEID_VT83C572:
- device_set_desc(sc->sc_bus.bdev, uhci_device_vt83c572);
+ device_set_desc(usbus, uhci_device_vt83c572);
+ sprintf(sc->sc_vendor, "VIA");
break;
default:
printf("(New UHCI DeviceId=0x%08x)\n", id);
- device_set_desc(sc->sc_bus.bdev, uhci_device_generic);
+ device_set_desc(usbus, uhci_device_generic);
+ sprintf(sc->sc_vendor, "(0x%08x)", id);
+ }
+
+ if (bootverbose) {
+ switch(pci_conf_read(config_id, PCI_USBREV) & PCI_USBREV_MASK) {
+ case PCI_USBREV_PRE_1_0:
+ typestr = "pre 1.0";
+ break;
+ case PCI_USBREV_1_0:
+ typestr = "1.0";
+ break;
+ default:
+ typestr = "unknown";
+ break;
+ }
+ printf("uhci%d: USB version %s, chip rev. %d\n", unit, typestr,
+ (int) pci_conf_read(config_id, PCIR_REVID) & 0xff);
}
legsup = pci_conf_read(config_id, PCI_LEGSUP);
- if ( ! (legsup & PCI_LEGSUP_USBPIRQDEN) ) {
+ if ( !(legsup & PCI_LEGSUP_USBPIRQDEN) ) {
#if ! (defined(USBVERBOSE) || defined(USB_DEBUG))
if (bootverbose)
#endif
- printf("%s%d: PIRQD enable not set\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev));
+ printf("uhcis%d: PIRQD enable not set\n", unit);
legsup |= PCI_LEGSUP_USBPIRQDEN;
pci_conf_write(config_id, PCI_LEGSUP, legsup);
}
- r = uhci_init(sc);
- if (r != USBD_NORMAL_COMPLETION) {
- printf("%s%d: init failed, error=%d\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev),
- r);
- device_delete_child(root_bus, sc->sc_bus.bdev);
+ sc->sc_bus.bdev = usbus;
+ err = uhci_init(sc);
+ if (err != USBD_NORMAL_COMPLETION) {
+ printf("uhci%d: init failed, error=%d\n", unit, err);
+ device_delete_child(root_bus, usbus);
}
return;
diff --git a/sys/pci/ohci_pci.c b/sys/pci/ohci_pci.c
index 75e0aa5146cc..3c20ff723e05 100644
--- a/sys/pci/ohci_pci.c
+++ b/sys/pci/ohci_pci.c
@@ -64,6 +64,11 @@
#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000
#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000
+#define PCI_INTERFACE(d) (((d) >> 8) & 0xff)
+#define PCI_SUBCLASS(d) ((d) & PCI_SUBCLASS_MASK)
+#define PCI_CLASS(d) ((d) & PCI_CLASS_MASK)
+
+
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
@@ -72,13 +77,6 @@
#include <dev/usb/ohcireg.h>
#include <dev/usb/ohcivar.h>
-#define PCI_INTERFACE(d) (((d) >> 8) & 0xff)
-#define PCI_SUBCLASS(d) ((d) & PCI_SUBCLASS_MASK)
-#define PCI_CLASS(d) ((d) & PCI_CLASS_MASK)
-
-#define PCI_VENDOR(d) ((d) & 0xffff)
-#define PCI_DEVICE(d) (((d) >> 8) & 0xffff)
-
#define PCI_OHCI_VENDORID_ALI 0x10b9
#define PCI_OHCI_VENDORID_CMDTECH 0x1095
@@ -101,12 +99,10 @@ static const char *ohci_device_usb0673 = "CMD Tech 673 (USB0673) USB Host Contr
static const char *ohci_device_generic = "OHCI (generic) USB Host Controller";
-#define PCI_OHCI_BASE_REG 0x10
-
static const char *ohci_pci_probe __P((pcici_t, pcidi_t));
static void ohci_pci_attach __P((pcici_t, int));
-u_long ohci_count = 0; /* global counter for nr. of devices found */
+static u_long ohci_count = 0;
static struct pci_device ohci_pci_device = {
"ohci",
@@ -118,22 +114,24 @@ static struct pci_device ohci_pci_device = {
DATA_SET(pcidevice_set, ohci_pci_device);
+
static const char *
ohci_pci_probe(pcici_t config_id, pcidi_t device_id)
{
u_int32_t class;
- if (device_id == PCI_OHCI_DEVICEID_ALADDIN_V) {
+ switch(device_id) {
+ case PCI_OHCI_DEVICEID_ALADDIN_V:
return (ohci_device_aladdin_v);
- } else if (device_id == PCI_OHCI_DEVICEID_USB0670) {
+ case PCI_OHCI_DEVICEID_USB0670:
return (ohci_device_usb0670);
- } else if (device_id == PCI_OHCI_DEVICEID_USB0673) {
+ case PCI_OHCI_DEVICEID_USB0673:
return (ohci_device_usb0673);
- } else if (device_id == PCI_OHCI_DEVICEID_FIRELINK) {
+ case PCI_OHCI_DEVICEID_FIRELINK:
return (ohci_device_firelink);
- } else if (device_id == PCI_OHCI_DEVICEID_NEC) {
+ case PCI_OHCI_DEVICEID_NEC:
return (ohci_device_nec);
- } else {
+ default:
class = pci_conf_read(config_id, PCI_CLASS_REG);
if ( (PCI_CLASS(class) == PCI_CLASS_SERIALBUS)
&& (PCI_SUBCLASS(class) == PCI_SUBCLASS_SERIALBUS_USB)
@@ -148,83 +146,72 @@ ohci_pci_probe(pcici_t config_id, pcidi_t device_id)
static void
ohci_pci_attach(pcici_t config_id, int unit)
{
- int id;
- usbd_status r;
- ohci_softc_t *sc = NULL;
vm_offset_t pbase;
+ device_t usbus;
+ ohci_softc_t *sc;
+ usbd_status err;
+ int id;
sc = malloc(sizeof(ohci_softc_t), M_DEVBUF, M_NOWAIT);
/* Do not free it below, intr might use the sc */
if ( sc == NULL ) {
- printf("usb%d: could not allocate memory", unit);
+ printf("ohci%d: could not allocate memory", unit);
return;
}
memset(sc, 0, sizeof(ohci_softc_t));
if(!pci_map_mem(config_id, PCI_CBMEM,
(vm_offset_t *)&sc->sc_iobase, &pbase)) {
- printf("usb%d: could not map memory\n", unit);
+ printf("ohci%d: could not map memory\n", unit);
return;
}
- sc->unit = unit;
if ( !pci_map_int(config_id, (pci_inthand_t *)ohci_intr,
(void *) sc, &bio_imask)) {
- printf("usb%d: could not map irq\n", unit);
+ printf("ohci%d: could not map irq\n", unit);
return;
}
- /* Figure out vendor for root hub descriptor. */
- id = pci_conf_read(config_id, PCI_ID_REG);
- if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_ALI)
- sprintf(sc->sc_vendor, "AcerLabs");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_CMDTECH)
- sprintf(sc->sc_vendor, "CMDTECH");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_COMPAQ)
- sprintf(sc->sc_vendor, "Compaq");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_NEC)
- sprintf(sc->sc_vendor, "NEC");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_OPTI)
- sprintf(sc->sc_vendor, "OPTi");
- else if (PCI_VENDOR(id) == PCI_OHCI_VENDORID_SIS)
- sprintf(sc->sc_vendor, "SiS");
- else
- sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id));
-
- sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc);
- if (!sc->sc_bus.bdev) {
- printf("%s%d: could not add USB device to root bus\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev));
+ usbus = device_add_child(root_bus, "usb", -1, sc);
+ if (!usbus) {
+ printf("ohci%d: could not add USB device to root bus\n", unit);
return;
}
+ id = pci_conf_read(config_id, PCI_ID_REG);
switch(id) {
case PCI_OHCI_DEVICEID_ALADDIN_V:
- device_set_desc(sc->sc_bus.bdev, ohci_device_aladdin_v);
+ device_set_desc(usbus, ohci_device_aladdin_v);
+ sprintf(sc->sc_vendor, "AcerLabs");
break;
case PCI_OHCI_DEVICEID_FIRELINK:
- device_set_desc(sc->sc_bus.bdev, ohci_device_firelink);
+ device_set_desc(usbus, ohci_device_firelink);
+ sprintf(sc->sc_vendor, "OPTi");
break;
case PCI_OHCI_DEVICEID_NEC:
- device_set_desc(sc->sc_bus.bdev, ohci_device_nec);
+ device_set_desc(usbus, ohci_device_nec);
+ sprintf(sc->sc_vendor, "NEC");
break;
case PCI_OHCI_DEVICEID_USB0670:
- device_set_desc(sc->sc_bus.bdev, ohci_device_usb0670);
+ device_set_desc(usbus, ohci_device_usb0670);
+ sprintf(sc->sc_vendor, "CMDTECH");
break;
case PCI_OHCI_DEVICEID_USB0673:
- device_set_desc(sc->sc_bus.bdev, ohci_device_usb0673);
+ device_set_desc(usbus, ohci_device_usb0673);
+ sprintf(sc->sc_vendor, "CMDTECH");
break;
default:
- printf("(New OHCI DeviceId=0x%08x)\n", id);
- device_set_desc(sc->sc_bus.bdev, ohci_device_generic);
+ if (bootverbose)
+ printf("(New OHCI DeviceId=0x%08x)\n", id);
+ device_set_desc(usbus, ohci_device_generic);
+ sprintf(sc->sc_vendor, "(unknown)");
}
- r = ohci_init(sc);
- if (r != USBD_NORMAL_COMPLETION) {
- printf("%s%d: init failed, error=%d\n",
- device_get_name(sc->sc_bus.bdev), unit ,r);
- device_delete_child(root_bus, sc->sc_bus.bdev);
+ sc->sc_bus.bdev = usbus;
+ err = ohci_init(sc);
+ if (err != USBD_NORMAL_COMPLETION) {
+ printf("ohci%d: init failed, error=%d\n", unit, err);
+ device_delete_child(root_bus, usbus);
}
return;
diff --git a/sys/pci/uhci_pci.c b/sys/pci/uhci_pci.c
index 8b8d9bbb4404..1eba53f97e57 100644
--- a/sys/pci/uhci_pci.c
+++ b/sys/pci/uhci_pci.c
@@ -1,4 +1,4 @@
-/* FreeBSD $Id: uhci_pci.c,v 1.1 1999/02/18 21:42:19 n_hibma Exp $ */
+/* FreeBSD $Id: uhci_pci.c,v 1.2 1999/03/23 21:37:45 n_hibma Exp $ */
/*
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -57,6 +57,11 @@
#define PCI_SUBCLASS_SERIALBUS_USB 0x00030000
#define PCI_SUBCLASS_SERIALBUS_FIBER 0x00040000
+#define PCI_INTERFACE(d) (((d)>>8)&0xff)
+#define PCI_SUBCLASS(d) ((d)&PCI_SUBCLASS_MASK)
+#define PCI_CLASS(d) ((d)&PCI_CLASS_MASK)
+
+
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdivar.h>
@@ -65,12 +70,6 @@
#include <dev/usb/uhcireg.h>
#include <dev/usb/uhcivar.h>
-#define PCI_INTERFACE(d) (((d)>>8)&0xff)
-#define PCI_SUBCLASS(d) ((d)&PCI_SUBCLASS_MASK)
-#define PCI_CLASS(d) ((d)&PCI_CLASS_MASK)
-
-#define PCI_VENDOR(d) ((d)&0xffff)
-#define PCI_DEVICE(d) (((d)>>8)&0xffff)
#define PCI_UHCI_VENDORID_INTEL 0x8086
#define PCI_UHCI_VENDORID_VIA 0x1106
@@ -89,7 +88,7 @@ static const char *uhci_device_generic = "UHCI (generic) USB Controller";
static const char *uhci_pci_probe __P((pcici_t, pcidi_t));
static void uhci_pci_attach __P((pcici_t, int));
-u_long uhci_count = 0; /* global counter for nr. of devices found */
+static u_long uhci_count = 0;
static struct pci_device uhci_pci_device = {
"uhci",
@@ -130,106 +129,83 @@ uhci_pci_attach(pcici_t config_id, int unit)
{
int id, legsup;
char *typestr;
- usbd_status r;
+ usbd_status err;
uhci_softc_t *sc = NULL;
+ device_t usbus;
sc = malloc(sizeof(uhci_softc_t), M_DEVBUF, M_NOWAIT);
/* Do not free it below, intr might use the sc */
if ( sc == NULL ) {
- printf("usb%d: could not allocate memory", unit);
+ printf("uhci%d: could not allocate memory", unit);
return;
}
memset(sc, 0, sizeof(uhci_softc_t));
- sc->sc_iobase = pci_conf_read(config_id,PCI_UHCI_BASE_REG) & 0xffe0;
- sc->unit = unit;
+ sc->sc_iobase = pci_conf_read(config_id, PCI_UHCI_BASE_REG) & 0xffe0;
if ( !pci_map_int(config_id, (pci_inthand_t *)uhci_intr,
(void *) sc, &bio_imask)) {
- printf("usb%d: could not map irq\n", unit);
+ printf("uhci%d: could not map irq\n", unit);
return;
}
-#ifndef USBVERBOSE
- if (bootverbose)
-#endif
- {
- switch(pci_conf_read(config_id, PCI_USBREV) & PCI_USBREV_MASK) {
- case PCI_USBREV_PRE_1_0:
- typestr = "pre 1.0";
- break;
- case PCI_USBREV_1_0:
- typestr = "1.0";
- break;
- default:
- typestr = "unknown";
- break;
- }
- printf("usb%d: USB version %s, chip rev. %d\n", unit, typestr,
- (int) pci_conf_read(config_id, PCIR_REVID) & 0xff);
- }
-
- /* Figure out vendor for root hub descriptor. */
- id = pci_conf_read(config_id, PCI_ID_REG);
- if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_INTEL)
- sprintf(sc->sc_vendor, "Intel");
- else if (PCI_VENDOR(id) == PCI_UHCI_VENDORID_VIA)
- sprintf(sc->sc_vendor, "VIA");
- else
- sprintf(sc->sc_vendor, "(0x%04x)", PCI_VENDOR(id));
-
- /* We add a child to the root bus. After PCI configuration
- * has completed the root bus will start to probe and
- * attach all the devices attached to it, including our new
- * kid.
- *
- * FIXME Sometime in the future the UHCI controller itself will
- * become a kid of PCI device and this device add will no longer
- * be necessary.
- *
- * See README for an elaborate description of the bus
- * structure in spe.
- */
- sc->sc_bus.bdev = device_add_child(root_bus, "usb", unit, sc);
- if (!sc->sc_bus.bdev) {
+ usbus = device_add_child(root_bus, "usb", -1, sc);
+ if (!usbus) {
printf("usb%d: could not add USB device to root bus\n", unit);
return;
}
+ id = pci_conf_read(config_id, PCI_ID_REG);
switch (id) {
case PCI_UHCI_DEVICEID_PIIX3:
- device_set_desc(sc->sc_bus.bdev, uhci_device_piix3);
+ device_set_desc(usbus, uhci_device_piix3);
+ sprintf(sc->sc_vendor, "Intel");
break;
case PCI_UHCI_DEVICEID_PIIX4:
- device_set_desc(sc->sc_bus.bdev, uhci_device_piix4);
+ device_set_desc(usbus, uhci_device_piix4);
+ sprintf(sc->sc_vendor, "Intel");
break;
case PCI_UHCI_DEVICEID_VT83C572:
- device_set_desc(sc->sc_bus.bdev, uhci_device_vt83c572);
+ device_set_desc(usbus, uhci_device_vt83c572);
+ sprintf(sc->sc_vendor, "VIA");
break;
default:
printf("(New UHCI DeviceId=0x%08x)\n", id);
- device_set_desc(sc->sc_bus.bdev, uhci_device_generic);
+ device_set_desc(usbus, uhci_device_generic);
+ sprintf(sc->sc_vendor, "(0x%08x)", id);
+ }
+
+ if (bootverbose) {
+ switch(pci_conf_read(config_id, PCI_USBREV) & PCI_USBREV_MASK) {
+ case PCI_USBREV_PRE_1_0:
+ typestr = "pre 1.0";
+ break;
+ case PCI_USBREV_1_0:
+ typestr = "1.0";
+ break;
+ default:
+ typestr = "unknown";
+ break;
+ }
+ printf("uhci%d: USB version %s, chip rev. %d\n", unit, typestr,
+ (int) pci_conf_read(config_id, PCIR_REVID) & 0xff);
}
legsup = pci_conf_read(config_id, PCI_LEGSUP);
- if ( ! (legsup & PCI_LEGSUP_USBPIRQDEN) ) {
+ if ( !(legsup & PCI_LEGSUP_USBPIRQDEN) ) {
#if ! (defined(USBVERBOSE) || defined(USB_DEBUG))
if (bootverbose)
#endif
- printf("%s%d: PIRQD enable not set\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev));
+ printf("uhcis%d: PIRQD enable not set\n", unit);
legsup |= PCI_LEGSUP_USBPIRQDEN;
pci_conf_write(config_id, PCI_LEGSUP, legsup);
}
- r = uhci_init(sc);
- if (r != USBD_NORMAL_COMPLETION) {
- printf("%s%d: init failed, error=%d\n",
- device_get_name(sc->sc_bus.bdev),
- device_get_unit(sc->sc_bus.bdev),
- r);
- device_delete_child(root_bus, sc->sc_bus.bdev);
+ sc->sc_bus.bdev = usbus;
+ err = uhci_init(sc);
+ if (err != USBD_NORMAL_COMPLETION) {
+ printf("uhci%d: init failed, error=%d\n", unit, err);
+ device_delete_child(root_bus, usbus);
}
return;