• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/dev/al_eth/

Lines Matching refs:rx_ring

1007 		struct al_eth_ring *ring = &adapter->rx_ring[i];
1048 struct al_eth_ring *rx_ring,
1074 error = bus_dmamap_load_mbuf_sg(rx_ring->dma_buf_tag, rx_info->dma_map,
1077 device_printf(rx_ring->dev, "failed to map mbuf, error = %d\n",
1095 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid];
1099 next_to_use = rx_ring->next_to_use;
1104 &rx_ring->rx_buffer_info[next_to_use];
1107 rx_ring, rx_info) < 0)) {
1113 rc = al_eth_rx_buffer_add(rx_ring->dma_q,
1121 next_to_use = AL_ETH_RX_RING_IDX_NEXT(rx_ring, next_to_use);
1127 qid, i, al_udma_available_get(rx_ring->dma_q));
1130 al_eth_rx_buffer_action(rx_ring->dma_q, i);
1132 rx_ring->next_to_use = next_to_use;
1458 struct al_eth_ring *rx_ring = arg;
1462 device_printf_dbg(rx_ring->dev, "%s for ring ID = %d\n", __func__,
1463 rx_ring->ring_id);
1469 if ((napi == 0) || (napi && rx_ring->enqueue_is_running == 0))
1470 taskqueue_enqueue(rx_ring->enqueue_tq, &rx_ring->enqueue_task);
1523 struct al_eth_ring *rx_ring, struct al_eth_pkt *hal_pkt,
1528 &rx_ring->rx_buffer_info[*next_to_clean];
1536 *next_to_clean = AL_ETH_RX_RING_IDX_NEXT(rx_ring,
1544 mbuf->m_pkthdr.rcvif = rx_ring->netdev;
1563 smbuf->m_pkthdr.rcvif = rx_ring->netdev;
1569 *next_to_clean = AL_ETH_RX_RING_IDX_NEXT(rx_ring,
1577 bus_dmamap_unload(rx_ring->dma_buf_tag, rx_info->dma_map);
1580 *next_to_clean = AL_ETH_RX_RING_IDX_NEXT(rx_ring, *next_to_clean);
1588 struct al_eth_ring *rx_ring = arg;
1591 unsigned int qid = rx_ring->ring_id;
1592 struct al_eth_pkt *hal_pkt = &rx_ring->hal_pkt;
1593 uint16_t next_to_clean = rx_ring->next_to_clean;
1599 rx_ring->enqueue_is_running = 1;
1606 descs = al_eth_pkt_rx(rx_ring->dma_q, hal_pkt);
1610 device_printf_dbg(rx_ring->dev, "rx_poll: q %d got packet "
1612 device_printf_dbg(rx_ring->dev, "rx_poll: q %d flags %x. "
1619 device_printf(rx_ring->dev, "receive packet with error. "
1621 next_to_clean = AL_ETH_RX_RING_IDX_ADD(rx_ring,
1627 mbuf = al_eth_rx_mbuf(rx_ring->adapter, rx_ring, hal_pkt, descs,
1632 next_to_clean = AL_ETH_RX_RING_IDX_ADD(rx_ring,
1637 if (__predict_true(rx_ring->netdev->if_capenable & IFCAP_RXCSUM ||
1638 rx_ring->netdev->if_capenable & IFCAP_RXCSUM_IPV6)) {
1639 al_eth_rx_checksum(rx_ring->adapter, hal_pkt, mbuf);
1652 if ((rx_ring->lro_enabled != 0) &&
1661 if (rx_ring->lro.lro_cnt != 0) {
1662 if (tcp_lro_rx(&rx_ring->lro, mbuf, 0) == 0)
1668 (*rx_ring->netdev->if_input)(rx_ring->netdev, mbuf);
1672 rx_ring->next_to_clean = next_to_clean;
1674 refill_required = al_udma_available_get(rx_ring->dma_q);
1675 refill_actual = al_eth_refill_rx_bufs(rx_ring->adapter, qid,
1679 device_printf_dbg(rx_ring->dev,
1683 while (((queued = LIST_FIRST(&rx_ring->lro.lro_active)) != NULL)) {
1685 tcp_lro_flush(&rx_ring->lro, queued);
1689 rx_ring->enqueue_is_running = 0;
1693 al_eth_irq_config(rx_ring->unmask_reg_offset, rx_ring->unmask_val);
2137 adapter->irq_tbl[irq_idx].data = &adapter->rx_ring[i];
2477 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid];
2478 struct device *dev = rx_ring->dev;
2479 struct al_udma_q_params *q_params = &rx_ring->q_params;
2483 size = sizeof(struct al_eth_rx_buffer) * rx_ring->sw_count;
2488 rx_ring->rx_buffer_info = malloc(size, M_IFAL, M_ZERO | M_WAITOK);
2489 if (rx_ring->rx_buffer_info == NULL)
2492 rx_ring->descs_size = rx_ring->hw_count * sizeof(union al_udma_desc);
2493 q_params->size = rx_ring->hw_count;
2498 (void**)&q_params->desc_base, rx_ring->descs_size);
2505 rx_ring->cdescs_size = rx_ring->hw_count * q_params->cdesc_size;
2509 (void**)&q_params->cdesc_base, rx_ring->cdescs_size);
2515 TASK_INIT(&rx_ring->enqueue_task, 0, al_eth_rx_recv_work, rx_ring);
2516 rx_ring->enqueue_tq = taskqueue_create_fast("al_rx_enque", M_NOWAIT,
2517 taskqueue_thread_enqueue, &rx_ring->enqueue_tq);
2518 taskqueue_start_threads(&rx_ring->enqueue_tq, 1, PI_NET, "%s rxeq",
2533 &rx_ring->dma_buf_tag);
2540 for (size = 0; size < rx_ring->sw_count; size++) {
2541 ret = bus_dmamap_create(rx_ring->dma_buf_tag, 0,
2542 &rx_ring->rx_buffer_info[size].dma_map);
2550 memset(q_params->cdesc_base, 0, rx_ring->cdescs_size);
2554 int err = tcp_lro_init(&rx_ring->lro);
2561 rx_ring->lro_enabled = TRUE;
2562 rx_ring->lro.ifp = adapter->netdev;
2566 rx_ring->next_to_clean = 0;
2567 rx_ring->next_to_use = 0;
2582 struct al_eth_ring *rx_ring = &adapter->rx_ring[qid];
2583 struct al_udma_q_params *q_params = &rx_ring->q_params;
2587 while (taskqueue_cancel(rx_ring->enqueue_tq,
2588 &rx_ring->enqueue_task, NULL)) {
2589 taskqueue_drain(rx_ring->enqueue_tq, &rx_ring->enqueue_task);
2592 taskqueue_free(rx_ring->enqueue_tq);
2594 for (size = 0; size < rx_ring->sw_count; size++) {
2595 m_freem(rx_ring->rx_buffer_info[size].m);
2596 rx_ring->rx_buffer_info[size].m = NULL;
2597 bus_dmamap_unload(rx_ring->dma_buf_tag,
2598 rx_ring->rx_buffer_info[size].dma_map);
2599 bus_dmamap_destroy(rx_ring->dma_buf_tag,
2600 rx_ring->rx_buffer_info[size].dma_map);
2602 bus_dma_tag_destroy(rx_ring->dma_buf_tag);
2604 free(rx_ring->rx_buffer_info, M_IFAL);
2605 rx_ring->rx_buffer_info = NULL;
2626 tcp_lro_free(&rx_ring->lro);
2641 if (adapter->rx_ring[i].q_params.desc_base != 0)
3097 q_params = &adapter->rx_ring[qid].q_params;