BXE: basic probe
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 21 Jan 2015 23:13:48 +0000 (18:13 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:30 +0000 (10:12 -0500)
Then it bails out.

One difference between Plan 9 and BSD is when the ctlr gets allocated.  Plan 9
does it in the PCI/PNP stage.  In BSD, the sizeof (or something) is declared
earlier and someone else does it.  I think.  I'm less a fan of the latter part;
maybe I don't understand it.  But the pcidev->some_void_star = sc might be
useful.

kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h
kern/drivers/net/bxe/bxe_dev.c

index b7d43f9..c9f9303 100644 (file)
@@ -225,10 +225,10 @@ static struct bxe_device_type bxe_devs[] = {
 /*
  * FreeBSD device entry points.
  */
-static int bxe_probe(device_t);
-static int bxe_attach(device_t);
-static int bxe_detach(device_t);
-static int bxe_shutdown(device_t);
+static int bxe_probe(struct pci_device *);
+static int bxe_attach(struct pci_device *);
+static int bxe_detach(struct pci_device *);
+static int bxe_shutdown(struct pci_device *);
 
 /*
  * FreeBSD KLD module/device interface event handler method.
@@ -2497,22 +2497,21 @@ bxe_debug_print_ind_table(struct bxe_adapter               *sc,
  * This is the driver entry function called from the "kldload" command.
  *
  * Returns:
- *   BUS_PROBE_DEFAULT on success, positive value on failure.
+ *   0 on success, positive value on failure.
  */
-#warning "no probe function"
 
-static int
-bxe_probe(device_t dev)
+int bxe_probe(struct pci_device *dev)
 {
-#if 0
     struct bxe_adapter *sc;
     struct bxe_device_type *t;
     char *descbuf;
     uint16_t did, sdid, svid, vid;
 
     /* Find our device structure */
-    sc = device_get_softc(dev);
-    sc->pcidev= dev;
+               // BSD had the controllers already alloced.  Plan 9 does it after they
+               // are probed
+//    sc = device_get_softc(dev);
+//    sc->pcidev= dev;
     t = bxe_devs;
 
     /* Get the data for the device to be probed. */
@@ -2521,10 +2520,6 @@ bxe_probe(device_t dev)
     svid = pci_get_subvendor(dev);
     sdid = pci_get_subdevice(dev);
 
-    BLOGD(sc, DBG_LOAD,
-          "%s(); VID = 0x%04X, DID = 0x%04X, SVID = 0x%04X, "
-          "SDID = 0x%04X\n", __FUNCTION__, vid, did, svid, sdid);
-
     /* Look through the list of known devices for a match. */
     while (t->bxe_name != NULL) {
         if ((vid == t->bxe_vid) && (did == t->bxe_did) &&
@@ -2537,18 +2532,19 @@ bxe_probe(device_t dev)
             /* Print out the device identity. */
             snprintf(descbuf, BXE_DEVDESC_MAX,
                      "%s (%c%d) BXE v:%s\n", t->bxe_name,
-                     (((pcidev_read32(dev, PCIR_REVID) &
+                     (((pcidev_read32(dev, PCI_REVID_REG) &
                         0xf0) >> 4) + 'A'),
-                     (pcidev_read32(dev, PCIR_REVID) & 0xf),
+                     (pcidev_read32(dev, PCI_REVID_REG) & 0xf),
                      BXE_DRIVER_VERSION);
 
-            device_set_desc_copy(dev, descbuf);
+                       /* Could add this field to our pcidevs, might be useful */
+            //device_set_desc_copy(dev, descbuf);
+            printk(descbuf);
             kfree(descbuf); /* M_TEMP */
-            return (BUS_PROBE_DEFAULT);
+            return 0;
         }
         t++;
     }
-#endif
     return (ENXIO);
 }
 
@@ -16209,7 +16205,7 @@ bxe_add_sysctls(struct bxe_adapter *sc)
  *   0 = Success, >0 = Failure
  */
 static int
-bxe_attach(device_t dev)
+bxe_attach(struct bxe_adapter *sc)
 {
     struct bxe_adapter *sc;
 
@@ -16367,7 +16363,7 @@ bxe_attach(device_t dev)
  *   0 = Success, >0 = Failure
  */
 static int
-bxe_detach(device_t dev)
+bxe_detach(struct pcidev *dev)
 {
     struct bxe_adapter *sc;
     if_t ifp;
@@ -16442,7 +16438,7 @@ bxe_detach(device_t dev)
  *   Nothing
  */
 static int
-bxe_shutdown(device_t dev)
+bxe_shutdown(struct pcidev *dev)
 {
     struct bxe_adapter *sc;
 
index b792430..2db5d3a 100644 (file)
@@ -61,7 +61,6 @@ typedef uintptr_t bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
 typedef uintptr_t vm_offset_t;
-typedef int device_t;
 // WTF ...
 typedef uint64_t uintmax_t;
 
index 8b6efef..11e87ed 100644 (file)
@@ -328,13 +328,11 @@ static void bxepci(void)
                if (pcidev->class != 0x02 || pcidev->subclass != 0x00)
                        continue;
                id = pcidev->dev_id << 16 | pcidev->ven_id;
-               switch (id) {
-                       default:
-                               continue;
-                       /* TODO: cases for the IDs this driver supports */
-                       case 1:
-                               break;
-               }
+
+               extern int bxe_probe(struct pci_device *dev);
+               if (bxe_probe(pcidev))
+                       continue;
+
                printk("bxe driver found 0x%04x:%04x at %02x:%02x.%x\n",
                           pcidev->ven_id, pcidev->dev_id,
                           pcidev->bus, pcidev->dev, pcidev->func);
@@ -399,6 +397,9 @@ static int bxepnp(struct ether *edev)
         * MMIO/port setup */
        run_once(bxepci());
 
+
+return -1;
+
        /* Any adapter matches if no edev->port is supplied, otherwise the ports
         * must match. */
        for (;;) {      // check all ctlrs
@@ -444,5 +445,5 @@ static int bxepnp(struct ether *edev)
 
 linker_func_3(etherbxelink)
 {
-       //addethercard("bxe", bxepnp);
+       addethercard("bxe", bxepnp);
 }