Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/ena/ena.c
Show First 20 Lines • Show All 362 Lines • ▼ Show 20 Lines | ena_init_io_rings_common(struct ena_adapter *adapter, struct ena_ring *ring, | ||||
uint16_t qid) | uint16_t qid) | ||||
{ | { | ||||
ring->qid = qid; | ring->qid = qid; | ||||
ring->adapter = adapter; | ring->adapter = adapter; | ||||
ring->ena_dev = adapter->ena_dev; | ring->ena_dev = adapter->ena_dev; | ||||
ring->first_interrupt = false; | ring->first_interrupt = false; | ||||
ring->no_interrupt_event_cnt = 0; | ring->no_interrupt_event_cnt = 0; | ||||
ring->rx_mbuf_sz = ena_mbuf_sz; | |||||
} | } | ||||
static void | static void | ||||
ena_init_io_rings(struct ena_adapter *adapter) | ena_init_io_rings(struct ena_adapter *adapter) | ||||
{ | { | ||||
struct ena_com_dev *ena_dev; | struct ena_com_dev *ena_dev; | ||||
struct ena_ring *txr, *rxr; | struct ena_ring *txr, *rxr; | ||||
struct ena_que *que; | struct ena_que *que; | ||||
▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | ena_setup_rx_dma_tag(struct ena_adapter *adapter) | ||||
int ret; | int ret; | ||||
/* Create DMA tag for Rx buffers*/ | /* Create DMA tag for Rx buffers*/ | ||||
ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */ | ret = bus_dma_tag_create(bus_get_dma_tag(adapter->pdev), /* parent */ | ||||
1, 0, /* alignment, bounds */ | 1, 0, /* alignment, bounds */ | ||||
ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */ | ENA_DMA_BIT_MASK(adapter->dma_width), /* lowaddr of excl window */ | ||||
BUS_SPACE_MAXADDR, /* highaddr of excl window */ | BUS_SPACE_MAXADDR, /* highaddr of excl window */ | ||||
NULL, NULL, /* filter, filterarg */ | NULL, NULL, /* filter, filterarg */ | ||||
MJUM16BYTES, /* maxsize */ | ena_mbuf_sz, /* maxsize */ | ||||
adapter->max_rx_sgl_size, /* nsegments */ | adapter->max_rx_sgl_size, /* nsegments */ | ||||
MJUM16BYTES, /* maxsegsize */ | ena_mbuf_sz, /* maxsegsize */ | ||||
0, /* flags */ | 0, /* flags */ | ||||
NULL, /* lockfunc */ | NULL, /* lockfunc */ | ||||
NULL, /* lockarg */ | NULL, /* lockarg */ | ||||
&adapter->rx_buf_tag); | &adapter->rx_buf_tag); | ||||
return (ret); | return (ret); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 436 Lines • ▼ Show 20 Lines | ena_alloc_rx_mbuf(struct ena_adapter *adapter, | ||||
int nsegs, error; | int nsegs, error; | ||||
int mlen; | int mlen; | ||||
/* if previous allocated frag is not used */ | /* if previous allocated frag is not used */ | ||||
if (unlikely(rx_info->mbuf != NULL)) | if (unlikely(rx_info->mbuf != NULL)) | ||||
return (0); | return (0); | ||||
/* Get mbuf using UMA allocator */ | /* Get mbuf using UMA allocator */ | ||||
rx_info->mbuf = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, MJUM16BYTES); | rx_info->mbuf = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, | ||||
rx_ring->rx_mbuf_sz); | |||||
if (unlikely(rx_info->mbuf == NULL)) { | if (unlikely(rx_info->mbuf == NULL)) { | ||||
counter_u64_add(rx_ring->rx_stats.mjum_alloc_fail, 1); | counter_u64_add(rx_ring->rx_stats.mjum_alloc_fail, 1); | ||||
rx_info->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); | rx_info->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); | ||||
if (unlikely(rx_info->mbuf == NULL)) { | if (unlikely(rx_info->mbuf == NULL)) { | ||||
counter_u64_add(rx_ring->rx_stats.mbuf_alloc_fail, 1); | counter_u64_add(rx_ring->rx_stats.mbuf_alloc_fail, 1); | ||||
return (ENOMEM); | return (ENOMEM); | ||||
} | } | ||||
mlen = MCLBYTES; | mlen = MCLBYTES; | ||||
} else { | } else { | ||||
mlen = MJUM16BYTES; | mlen = rx_ring->rx_mbuf_sz; | ||||
} | } | ||||
/* Set mbuf length*/ | /* Set mbuf length*/ | ||||
rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen; | rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen; | ||||
/* Map packets for DMA */ | /* Map packets for DMA */ | ||||
ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, | ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, | ||||
"Using tag %p for buffers' DMA mapping, mbuf %p len: %d\n", | "Using tag %p for buffers' DMA mapping, mbuf %p len: %d\n", | ||||
adapter->rx_buf_tag,rx_info->mbuf, rx_info->mbuf->m_len); | adapter->rx_buf_tag,rx_info->mbuf, rx_info->mbuf->m_len); | ||||
▲ Show 20 Lines • Show All 2,609 Lines • Show Last 20 Lines |