diff --git a/kern/drivers/net/bxe/bsd_bus.h b/kern/drivers/net/bxe/bsd_bus.h
index 993f09c..3e7c9eb 100644
--- a/kern/drivers/net/bxe/bsd_bus.h
+++ b/kern/drivers/net/bxe/bsd_bus.h
@@ -104,7 +104,7 @@
 typedef uintptr_t bus_size_t;
 typedef uintptr_t bus_space_handle_t;
 typedef void *bus_dma_tag_t;
-typedef uintptr_t bus_dmamap_t;
+typedef void *bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
 
@@ -154,6 +154,16 @@
 #define bus_describe_intr(...)
 #define bus_bind_intr(...)
 
+/* This is supposed to be an mbuf chain.  Just give them a blob for now */
+#define m_getjcl(ign1, ign2, ign3, _size) kzmalloc((_size), KMALLOC_WAIT)
+#define m_freem(m) kfree(m)
+#define m_free(m) kfree(m)
+#define bus_dmamap_load_mbuf_sg(_tag, _map, _mbuf, _segs, _nsegs, _flag)       \
+({                                                                             \
+	(_segs)[0] = PADDR((_mbuf));                                               \
+	*(_nsegs) = 1;                                                             \
+	0;                                                                         \
+})
 
 /* Bus read/write barrier methods.
  *
diff --git a/kern/drivers/net/bxe/bxe.c b/kern/drivers/net/bxe/bxe.c
index 23bb258..21eca85 100644
--- a/kern/drivers/net/bxe/bxe.c
+++ b/kern/drivers/net/bxe/bxe.c
@@ -278,7 +278,7 @@
 //           &bxe_interrupt_mode, 0, "Interrupt (MSI-X/MSI/INTx) mode");
 
 /* Number of Queues: 0 (Auto) or 1 to 16 (fixed queue number) */
-static int bxe_queue_count = 4;
+static int bxe_queue_count = 0;
 //SYSCTL_INT(_hw_bxe, OID_AUTO, queue_count, CTLFLAG_RDTUN,
 //           &bxe_queue_count, 0, "Multi-Queue queue count");
 
@@ -6479,9 +6479,6 @@
                      uint16_t            prev_index,
                      uint16_t            index)
 {
-	// XME
-	assert(0);
-#if 0 // AKAROS_PORT
     struct bxe_sw_rx_bd *rx_buf;
     struct eth_rx_bd *rx_bd;
     bus_dma_segment_t segs[1];
@@ -6501,7 +6498,7 @@
     fp->eth_q_stats.mbuf_alloc_rx++;
 
     /* initialize the mbuf buffer length */
-    m->m_pkthdr.len = m->m_len = fp->rx_buf_size;
+    //m->m_pkthdr.len = m->m_len = fp->rx_buf_size;
 
     /* map the mbuf into non-paged pool */
     rc = bus_dmamap_load_mbuf_sg(fp->rx_mbuf_tag,
@@ -6515,7 +6512,7 @@
     }
 
     /* all mbufs must map to a single segment */
-    KASSERT((nsegs == 1), ("Too many segments, %d returned!", nsegs));
+    assert(nsegs == 1);
 
     /* release any existing RX BD mbuf mappings */
 
@@ -6555,21 +6552,16 @@
     rx_buf->m = m;
 
     rx_bd = &fp->rx_chain[index];
-    rx_bd->addr_hi = cpu_to_le32(U64_HI(segs[0].ds_addr));
-    rx_bd->addr_lo = cpu_to_le32(U64_LO(segs[0].ds_addr));
+    rx_bd->addr_hi = cpu_to_le32(U64_HI(segs));
+    rx_bd->addr_lo = cpu_to_le32(U64_LO(segs));
 
     return (rc);
-#endif
-    return -1;
 }
 
 static int
 bxe_alloc_rx_tpa_mbuf(struct bxe_fastpath *fp,
                       int                 queue)
 {
-	// XME
-	assert(0);
-#if 0 // AKAROS_PORT
     struct bxe_sw_tpa_info *tpa_info = &fp->rx_tpa_info[queue];
     bus_dma_segment_t segs[1];
     bus_dmamap_t map;
@@ -6587,7 +6579,7 @@
     fp->eth_q_stats.mbuf_alloc_tpa++;
 
     /* initialize the mbuf buffer length */
-    m->m_pkthdr.len = m->m_len = fp->rx_buf_size;
+    //m->m_pkthdr.len = m->m_len = fp->rx_buf_size;
 
     /* map the mbuf into non-paged pool */
     rc = bus_dmamap_load_mbuf_sg(fp->rx_mbuf_tag,
@@ -6601,7 +6593,7 @@
     }
 
     /* all mbufs must map to a single segment */
-    KASSERT((nsegs == 1), ("Too many segments, %d returned!", nsegs));
+    assert(nsegs == 1);
 
     /* release any existing TPA mbuf mapping */
     if (tpa_info->bd.m_map != NULL) {
@@ -6620,8 +6612,6 @@
     tpa_info->seg = segs[0];
 
     return (rc);
-#endif
-    return 1;
 }
 
 /*
@@ -6633,9 +6623,6 @@
 bxe_alloc_rx_sge_mbuf(struct bxe_fastpath *fp,
                       uint16_t            index)
 {
-	// XME
-	assert(0);
-#if 0 // AKAROS_PORT
     struct bxe_sw_rx_bd *sge_buf;
     struct eth_rx_sge *sge;
     bus_dma_segment_t segs[1];
@@ -6654,7 +6641,7 @@
     fp->eth_q_stats.mbuf_alloc_sge++;
 
     /* initialize the mbuf buffer length */
-    m->m_pkthdr.len = m->m_len = SGE_PAGE_SIZE;
+    //m->m_pkthdr.len = m->m_len = SGE_PAGE_SIZE;
 
     /* map the SGE mbuf into non-paged pool */
     rc = bus_dmamap_load_mbuf_sg(fp->rx_sge_mbuf_tag,
@@ -6668,7 +6655,7 @@
     }
 
     /* all mbufs must map to a single segment */
-    KASSERT((nsegs == 1), ("Too many segments, %d returned!", nsegs));
+    assert(nsegs == 1);
 
     sge_buf = &fp->rx_sge_mbuf_chain[index];
 
@@ -6688,20 +6675,15 @@
     sge_buf->m = m;
 
     sge = &fp->rx_sge_chain[index];
-    sge->addr_hi = cpu_to_le32(U64_HI(segs[0].ds_addr));
-    sge->addr_lo = cpu_to_le32(U64_LO(segs[0].ds_addr));
+    sge->addr_hi = cpu_to_le32(U64_HI(segs));
+    sge->addr_lo = cpu_to_le32(U64_LO(segs));
 
     return (rc);
-#endif
-    return -1;
 }
 
 static __noinline int
 bxe_alloc_fp_buffers(struct bxe_adapter *sc)
 {
-	// 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;
@@ -6789,8 +6771,6 @@
     bxe_free_sge_chain(fp);
 
     return (ENOBUFS);
-#endif
-    return -1;
 }
 
 static void
