Home | History | Annotate | Download | only in pci

Lines Matching defs:mbuf

44 #include <sys/mbuf.h>
74 static int ena_mq_start(struct ifnet *, struct mbuf *);
173 static struct mbuf* ena_rx_mbuf(struct ena_ring *,
177 struct ena_com_rx_ctx *, struct mbuf *);
180 struct mbuf **mbuf);
181 static int ena_xmit_mbuf(struct ena_ring *, struct mbuf **);
185 static void ena_tx_csum(struct ena_com_tx_ctx *, struct mbuf *);
206 struct mbuf *);
754 struct mbuf *m;
772 m_freem(tx_ring->tx_buffer_info[i].mbuf);
773 tx_ring->tx_buffer_info[i].mbuf = NULL;
960 m_freem(rx_ring->rx_buffer_info[i].mbuf);
961 rx_ring->rx_buffer_info[i].mbuf = NULL;
1030 if (unlikely(rx_info->mbuf != NULL))
1033 rx_info->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
1034 if (unlikely(rx_info->mbuf == NULL)) {
1040 /* Set mbuf length*/
1041 rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen;
1045 "Using tag %p for buffers' DMA mapping, mbuf %p len: %d",
1046 adapter->sc_dmat,rx_info->mbuf, rx_info->mbuf->m_len);
1048 rx_info->mbuf, BUS_DMA_NOWAIT);
1050 ena_trace(ENA_WARNING, "failed to map mbuf, error: %d, "
1065 "ALLOC RX BUF: mbuf %p, rx_info %p, len %d, paddr %#jx\n",
1066 rx_info->mbuf, rx_info,ena_buf->len, (uintmax_t)ena_buf->paddr);
1071 m_freem(rx_info->mbuf);
1072 rx_info->mbuf = NULL;
1081 if (rx_info->mbuf == NULL) {
1087 m_freem(rx_info->mbuf);
1088 rx_info->mbuf = NULL;
1166 if (rx_info->mbuf != NULL)
1216 if (tx_info->mbuf == NULL)
1221 "free uncompleted tx mbuf qid %d idx 0x%x",
1226 "free uncompleted tx mbuf qid %d idx 0x%x",
1231 m_free(tx_info->mbuf);
1232 tx_info->mbuf = NULL;
1284 if (tx_info->mbuf != NULL)
1288 if (tx_info->mbuf == NULL)
1290 "tx_info doesn't have valid mbuf\n");
1384 * descriptors. We find the related mbuf chain in a map (index in an array)
1413 struct mbuf *mbuf;
1425 mbuf = tx_info->mbuf;
1427 tx_info->mbuf = NULL;
1435 ena_trace(ENA_DBG | ENA_TXPTH, "tx: q %d mbuf %p completed",
1436 tx_ring->qid, mbuf);
1438 m_freem(mbuf);
1480 struct mbuf *mbuf)
1485 mbuf->m_pkthdr.flowid = ena_rx_ctx->hash;
1489 M_HASHTYPE_SET(mbuf, M_HASHTYPE_OPAQUE_HASH);
1497 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_TCP_IPV4);
1500 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV4);
1503 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV4);
1509 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_TCP_IPV6);
1512 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_UDP_IPV6);
1515 M_HASHTYPE_SET(mbuf, M_HASHTYPE_RSS_IPV6);
1519 M_HASHTYPE_SET(mbuf, M_HASHTYPE_NONE);
1522 M_HASHTYPE_SET(mbuf, M_HASHTYPE_OPAQUE_HASH);
1525 mbuf->m_pkthdr.flowid = rx_ring->qid;
1526 M_HASHTYPE_SET(mbuf, M_HASHTYPE_NONE);
1532 * ena_rx_mbuf - assemble mbuf from descriptors
1539 static struct mbuf*
1543 struct mbuf *mbuf;
1555 if (unlikely(rx_info->mbuf == NULL)) {
1556 device_printf(adapter->pdev, "NULL mbuf in rx_info");
1560 ena_trace(ENA_DBG | ENA_RXPTH, "rx_info %p, mbuf %p, paddr %jx",
1561 rx_info, rx_info->mbuf, (uintmax_t)rx_info->ena_buf.paddr);
1563 mbuf = rx_info->mbuf;
1564 KASSERT(mbuf->m_flags & M_PKTHDR);
1565 mbuf->m_pkthdr.len = len;
1566 mbuf->m_len = len;
1567 m_set_rcvif(mbuf, rx_ring->que->adapter->ifp);
1569 /* Fill mbuf with hash key and it's interpretation for optimization */
1571 ena_rx_hash_mbuf(rx_ring, ena_rx_ctx, mbuf);
1574 ena_trace(ENA_DBG | ENA_RXPTH, "rx mbuf %p, flags=0x%x, len: %d",
1575 mbuf, mbuf->m_flags, mbuf->m_pkthdr.len);
1580 rx_info->mbuf = NULL;
1594 if (unlikely(rx_info->mbuf == NULL)) {
1595 device_printf(adapter->pdev, "NULL mbuf in rx_info");
1606 m_freem(mbuf);
1610 if (unlikely(m_append(mbuf, len, rx_info->mbuf->m_data) == 0)) {
1612 ena_trace(ENA_WARNING, "Failed to append Rx mbuf %p",
1613 mbuf);
1617 "rx mbuf updated. len %d", mbuf->m_pkthdr.len);
1619 /* Free already appended mbuf, it won't be useful anymore */
1621 m_freem(rx_info->mbuf);
1622 rx_info->mbuf = NULL;
1630 return (mbuf);
1634 * ena_rx_checksum - indicate in mbuf if hw indicated a good cksum
1638 struct mbuf *mbuf)
1643 mbuf->m_pkthdr.csum_flags |= M_CSUM_IPv4;
1646 mbuf->m_pkthdr.csum_flags |= M_CSUM_IPv4_BAD;
1655 mbuf->m_pkthdr.csum_flags |= (ena_rx_ctx->l4_proto == ENA_ETH_IO_L4_PROTO_TCP) ? M_CSUM_TCPv4 : M_CSUM_UDPv4;
1658 mbuf->m_pkthdr.csum_flags |= M_CSUM_TCP_UDP_BAD;
1669 mbuf->m_pkthdr.csum_flags |= (ena_rx_ctx->l4_proto == ENA_ETH_IO_L4_PROTO_TCP) ? M_CSUM_TCPv6 : M_CSUM_UDPv6;
1672 mbuf->m_pkthdr.csum_flags |= M_CSUM_TCP_UDP_BAD;
1688 struct mbuf *mbuf;
1729 /* Receive mbuf from the ring */
1730 mbuf = ena_rx_mbuf(rx_ring, rx_ring->ena_bufs,
1734 if (unlikely(mbuf == NULL)) {
1752 ena_rx_checksum(rx_ring, &ena_rx_ctx, mbuf);
1757 mbuf->m_pkthdr.len);
1759 mbuf->m_pkthdr.len);
1768 ((mbuf->m_pkthdr.csum_flags & CSUM_IP_VALID) != 0) &&
1777 (tcp_lro_rx(&rx_ring->lro, mbuf, 0) == 0))
1783 "calling if_input() with mbuf %p", mbuf);
1784 if_percpuq_enqueue(ifp->if_percpuq, mbuf);
2669 ena_tx_csum(struct ena_com_tx_ctx *ena_tx_ctx, struct mbuf *mbuf)
2685 u32 mss = mbuf->m_pkthdr.tso_segsz;
2690 mss = mbuf->m_pkthdr.len; /* XXX don't have tso_segsz */
2693 if ((mbuf->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0)
2696 if ((mbuf->m_pkthdr.csum_flags & CSUM_OFFLOAD) != 0)
2705 eh = mtod(mbuf, struct ether_vlan_header *);
2714 ip = (struct ip *)(mbuf->m_data + ehdrlen);
2718 if ((mbuf->m_pkthdr.csum_flags & M_CSUM_IPv4) != 0) {
2721 if ((mbuf->m_pkthdr.csum_flags & (M_CSUM_TSOv4 | M_CSUM_TSOv6)) != 0) {
2741 if ((mbuf->m_pkthdr.csum_flags &
2748 if ((mbuf->m_pkthdr.csum_flags &
2765 ena_check_and_collapse_mbuf(struct ena_ring *tx_ring, struct mbuf **mbuf)
2768 struct mbuf *collapsed_mbuf;
2772 num_frags = ena_mbuf_count(*mbuf);
2779 collapsed_mbuf = m_collapse(*mbuf, M_NOWAIT,
2786 /* If mbuf was collapsed successfully, original mbuf is released. */
2787 *mbuf = collapsed_mbuf;
2793 ena_xmit_mbuf(struct ena_ring *tx_ring, struct mbuf **mbuf)
2816 rc = ena_check_and_collapse_mbuf(tx_ring, mbuf);
2819 "Failed to collapse mbuf! err: %d", rc);
2827 tx_info->mbuf = *mbuf;
2832 ena_trace(ENA_DBG | ENA_TXPTH, "Tx: %d bytes", (*mbuf)->m_pkthdr.len);
2837 * guaranteed that all packet headers will be in the 1st mbuf, setting
2845 *mbuf, BUS_DMA_NOWAIT);
2852 tx_info->mbuf = NULL;
2874 ena_tx_csum(&ena_tx_ctx, *mbuf);
2886 (*mbuf)->m_pkthdr.len);
2890 (*mbuf)->m_pkthdr.len);
2906 tx_info->mbuf = NULL;
2915 struct mbuf *mbuf;
2941 if ((mbuf = pcq_get(tx_ring->br)) == NULL)
2944 ena_trace(ENA_DBG | ENA_TXPTH, "\ndequeued mbuf %p with flags %#x and"
2946 mbuf, mbuf->m_flags, (uint64_t)mbuf->m_pkthdr.csum_flags);
2948 if (likely((ret = ena_xmit_mbuf(tx_ring, &mbuf)) == 0)) {
2951 mbuf->m_pkthdr.len);
2952 if (ISSET(mbuf->m_flags, M_MCAST))
2956 m_freem(mbuf);
2973 bpf_mtap(adapter->ifp, mbuf, BPF_D_OUT);
3019 ena_mq_start(struct ifnet *ifp, struct mbuf *m)
3023 struct mbuf *is_drbr_empty;