BXE: use separate lists for 9ns and BSD stuff

The old prev list was supposed to be for something else.  We'll just use our
own TAILQ for the ctlr list.
diff --git a/kern/drivers/net/bxe/bxe.c b/kern/drivers/net/bxe/bxe.c
index 81ccc42..22e361e 100644
--- a/kern/drivers/net/bxe/bxe.c
+++ b/kern/drivers/net/bxe/bxe.c
@@ -250,9 +250,9 @@
 };
 
 #endif
-qlock_t bxe_prev_mtx;
-struct bxe_prev_list bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
+#define BXE_PREV_WAIT_NEEDED 1
 
+qlock_t bxe_prev_mtx;
 struct bxe_prev_list_node {
     LIST_ENTRY(bxe_prev_list_node) node;
     uint8_t bus;
@@ -261,7 +261,7 @@
     uint8_t aer; /* XXX automatic error recovery */
     uint8_t undi;
 };
-//static LIST_HEAD(, bxe_prev_list_node) bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
+static LIST_HEAD(, bxe_prev_list_node) bxe_prev_list = LIST_HEAD_INITIALIZER(bxe_prev_list);
 
 /* Tunable device values... */
 
@@ -15636,7 +15636,7 @@
     BLOGD(sc, DBG_LOAD,
           "Marked path %d/%d/%d - finished previous unload\n",
           sc->pcie_bus, sc->pcie_device, SC_PATH(sc));
-    //    LIST_INSERT_HEAD(&bxe_prev_list, tmp, node);
+          LIST_INSERT_HEAD(&bxe_prev_list, tmp, node);
 
     qunlock(&bxe_prev_mtx);
 
diff --git a/kern/drivers/net/bxe/bxe.h b/kern/drivers/net/bxe/bxe.h
index 9de3bd0..9913779 100644
--- a/kern/drivers/net/bxe/bxe.h
+++ b/kern/drivers/net/bxe/bxe.h
@@ -1320,7 +1320,7 @@
 	 * has a first element of 'void *if_softc' (which is us). XXX
 	 */
 	if_t 	    ifp;
-	LIST_ENTRY(bxe_adapter)		node;
+	TAILQ_ENTRY(bxe_adapter)		link9ns;
 	/* OS defined structs */
 	struct net_device *netdev;
 	struct pci_device *pcidev;
@@ -2274,10 +2274,8 @@
 void bxe_dump_mbuf_data(struct bxe_adapter *sc, char *pTag,
                         struct mbuf *m, uint8_t contents);
 
-/* Defined in bxe.c, init'd in bxereset or something in bxe_dev.c */
+/* Declared in bxe.c, init'd in pnp */
 extern qlock_t bxe_prev_mtx;
-LIST_HEAD(bxe_prev_list, bxe_adapter);
-extern struct bxe_prev_list bxe_prev_list;
 
 /***********/
 /* INLINES */
diff --git a/kern/drivers/net/bxe/bxe_dev.c b/kern/drivers/net/bxe/bxe_dev.c
index 0283204..0e1fecb 100644
--- a/kern/drivers/net/bxe/bxe_dev.c
+++ b/kern/drivers/net/bxe/bxe_dev.c
@@ -26,6 +26,10 @@
 /* We're required to print out stats at some point.  Here are a couple from
  * igbe, as an example. */
 
+spinlock_t bxe_adapter_tq_lock = SPINLOCK_INITIALIZER;
+TAILQ_HEAD(bxe_adapter_tq, bxe_adapter);
+struct bxe_adapter_tq bxe_adapter_tq = TAILQ_HEAD_INITIALIZER(bxe_adapter_tq);
+
 static char *statistics[Nstatistics] = {
 	"CRC Error",
 	"Alignment Error",
@@ -372,10 +376,9 @@
 			continue;
 		}
 
-		/* BSD used mutexes for this list for other reasons */
-		qlock(&bxe_prev_mtx);
-		LIST_INSERT_HEAD(&bxe_prev_list, ctlr, node);
-		qunlock(&bxe_prev_mtx);
+		spin_lock(&bxe_adapter_tq_lock);
+		TAILQ_INSERT_TAIL(&bxe_adapter_tq, ctlr, link9ns);
+		spin_unlock(&bxe_adapter_tq_lock);
 	}
 }
 
@@ -390,15 +393,15 @@
 	 * MMIO/port setup */
 	run_once(bxepci());
 
-	qlock(&bxe_prev_mtx);
-	LIST_FOREACH(ctlr, &bxe_prev_list, node) {
+	spin_lock(&bxe_adapter_tq_lock);
+	TAILQ_FOREACH(ctlr, &bxe_adapter_tq, link9ns) {
 		/* just take the first inactive ctlr on the list */
 		if (ctlr->active)
 			continue;
 		ctlr->active = 1;
 		break;
 	}
-	qunlock(&bxe_prev_mtx);
+	spin_unlock(&bxe_adapter_tq_lock);
 	if (ctlr == NULL)
 		return -1;