BXE: interrupt registration
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Jan 2015 21:30:39 +0000 (16:30 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:30 +0000 (10:12 -0500)
Can alloc, but can't teardown.  We need to do it at boot time too, since our
register_irq does the MMIO allocation and everything - which needs to happen
while booting = 1;

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

index 4c9f8ce..d6a48f1 100644 (file)
@@ -134,6 +134,16 @@ typedef uintptr_t bus_space_tag_t;
 #define bus_dmamap_create(...) (0)
 #define bus_dmamap_destroy(...)
 
+/* We should be fine with irq = 0.  When we use BusPCI, it is ignored.  We
+ * might need to deal with the filter too. */
+#define bus_setup_intr(pci, res, flags, filter, handler, arg, tag)             \
+       register_irq(0, (handler), (arg),                                          \
+                 MKBUS(BusPCI, (pci)->bus, (pci)->dev, (pci)->func))
+#define bus_teardown_intr(...)
+#define bus_describe_intr(...)
+#define bus_bind_intr(...)
+
+
 /* Bus read/write barrier methods.
  *
  *      void bus_space_barrier(bus_space_tag_t tag, bus_space_handle_t bsh,
index 3fec514..f3121cb 100644 (file)
@@ -6669,7 +6669,9 @@ bxe_alloc_rx_sge_mbuf(struct bxe_fastpath *fp,
 static __noinline int
 bxe_alloc_fp_buffers(struct bxe_adapter *sc)
 {
-#if 0
+       // XME
+       return 0; // at least fake success so we can get through some of the init
+#if 0 // AKAROS_PORT
     struct bxe_fastpath *fp;
     int i, j, rc = 0;
     int ring_prod, cqe_ring_prod;
@@ -9040,8 +9042,7 @@ bxe_task_fp(struct bxe_fastpath *fp)
  * then calls a separate routine to handle the various
  * interrupt causes: link, RX, and TX.
  */
-static void
-bxe_intr_legacy(void *xsc)
+static void bxe_intr_legacy(struct hw_trapframe *hw_tf, void *xsc)
 {
     struct bxe_adapter *sc = (struct bxe_adapter *)xsc;
     struct bxe_fastpath *fp;
@@ -9113,8 +9114,7 @@ bxe_intr_legacy(void *xsc)
 }
 
 /* slowpath interrupt entry point */
-static void
-bxe_intr_sp(void *xsc)
+static void bxe_intr_sp(struct hw_trapframe *hw_tf, void *xsc)
 {
     struct bxe_adapter *sc = (struct bxe_adapter *)xsc;
 
@@ -9128,8 +9128,7 @@ bxe_intr_sp(void *xsc)
 }
 
 /* fastpath interrupt entry point */
-static void
-bxe_intr_fp(void *xfp)
+static void bxe_intr_fp(struct hw_trapframe *hw_tf, void *xfp)
 {
     struct bxe_fastpath *fp = (struct bxe_fastpath *)xfp;
     struct bxe_adapter *sc = fp->sc;
@@ -9221,7 +9220,13 @@ bxe_interrupt_free(struct bxe_adapter *sc)
 static int
 bxe_interrupt_alloc(struct bxe_adapter *sc)
 {
-               // XME
+       /* BSD did a bunch of allocs, with various fallbacks.  We don't bother.
+        * When the NIC loads, we'll just register the irq, which also allocs the
+        * vectors and whatnot.  Due to how the vmem mapping code works, we need to
+        * do that at runtime.  If we get to be more flexible in the future, we
+        * could do the vector and MMIO work here, with the actual registration
+        * later. */
+       sc->intr_count = sc->num_queues + 1;
     return 0;
 #if 0
     int msix_count = 0;
@@ -9516,7 +9521,7 @@ bxe_interrupt_attach(struct bxe_adapter *sc)
         bus_describe_intr(sc->pcidev, sc->intr[0].resource,
                           sc->intr[0].tag, "sp");
 
-        /* bus_bind_intr(sc->pcidev, sc->intr[0].resource, 0); */
+        bus_bind_intr(sc->pcidev, sc->intr[0].resource, 0);
 
         /* initialize the fastpath vectors (note the first was used for sp) */
         for (i = 0; i < sc->num_queues; i++) {
@@ -13177,8 +13182,7 @@ bxe_stop_locked(struct bxe_adapter *sc)
  * Returns:
  *   void
  */
-static void
-bxe_init(void *xsc)
+void bxe_init(void *xsc)
 {
     struct bxe_adapter *sc = (struct bxe_adapter *)xsc;
 
@@ -16209,6 +16213,9 @@ int bxe_attach(struct bxe_adapter *sc)
 {
        struct pci_device *dev = sc->pcidev;
 
+       /* XME: Remove me */
+       sc->debug = DBG_ALL & ~DBG_REGS;
+
     BLOGD(sc, DBG_LOAD, "Starting attach...\n");
 
     sc->state = BXE_STATE_CLOSED;
index 21518c6..0283204 100644 (file)
@@ -306,6 +306,10 @@ static int bxereset(struct bxe_adapter *ctlr)
 extern int bxe_attach(struct bxe_adapter *sc);
        bxe_attach(ctlr);
 
+       /* normally done during BSD's ifconfig */
+extern void bxe_init(void *xsc);
+       bxe_init(ctlr);
+
 //     if (igbedetach(ctlr))
 //             return -1;
 
@@ -355,9 +359,6 @@ static void bxepci(void)
                if (ctlr == NULL)
                        error(Enomem);
 
-               /* TODO: Remove me */
-               ctlr->debug = 0xFFFFFFFF; /* flying monkeys     */
-
                spinlock_init_irqsave(&ctlr->imlock);
                spinlock_init_irqsave(&ctlr->tlock);
                qlock_init(&ctlr->alock);
@@ -422,7 +423,6 @@ static int bxepnp(struct ether *edev)
        edev->netif.promiscuous = bxepromiscuous;
        edev->netif.multicast = bxemulticast;
 
-       register_irq(edev->irq, bxeinterrupt, edev, edev->tbdf);
        return 0;
 }