BXE: fp memory allocation (faked) Alloc'd whatever size they wanted, but it's still in terms of the underlying mbuf structures.
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