35#ifndef IXGBE_STANDALONE_BUILD
70 .ift_legacy_intr = NULL
82 uint32_t vlan_macip_lens, type_tucmd_mlhl;
83 uint32_t olinfo_status, mss_l4len_idx, pktlen, offload;
87 olinfo_status = mss_l4len_idx = vlan_macip_lens = type_tucmd_mlhl = 0;
98 if (pi->ipi_ehdrlen == 0) {
99 ehdrlen = ETHER_HDR_LEN;
100 ehdrlen += (pi->ipi_vtag != 0) ? ETHER_VLAN_ENCAP_LEN : 0;
102 ehdrlen = pi->ipi_ehdrlen;
105 pktlen = pi->ipi_len;
107 if (pi->ipi_csum_flags & CSUM_TSO) {
109 pktlen = pi->ipi_len - ehdrlen - pi->ipi_ip_hlen - pi->ipi_tcp_hlen;
116 if (pi->ipi_flags & IPI_TX_IPV4) {
119 if (pi->ipi_csum_flags & (CSUM_IP|CSUM_TSO))
121 }
else if (pi->ipi_flags & IPI_TX_IPV6)
126 vlan_macip_lens |= pi->ipi_ip_hlen;
128 switch (pi->ipi_ipproto) {
130 if (pi->ipi_csum_flags & (CSUM_IP_TCP | CSUM_IP6_TCP | CSUM_TSO))
136 if (pi->ipi_csum_flags & (CSUM_IP_UDP | CSUM_IP6_UDP))
142 if (pi->ipi_csum_flags & (CSUM_IP_SCTP | CSUM_IP6_SCTP))
163 return (olinfo_status);
173 if_softc_ctx_t scctx = sc->
shared;
176 int nsegs = pi->ipi_nsegs;
177 bus_dma_segment_t *segs = pi->ipi_segs;
180 int i, j, first, pidx_last;
181 uint32_t olinfo_status, cmd, flags;
187 if (pi->ipi_mflags & M_VLANTAG)
190 i = first = pi->ipi_pidx;
192 ntxd = scctx->isc_ntxd[0];
203 if (pi->ipi_csum_flags & CSUM_TSO) {
208 if (++i == scctx->isc_ntxd[0])
217 for (j = 0; j < nsegs; j++) {
221 seglen = segs[j].ds_len;
228 if (++i == scctx->isc_ntxd[0]) {
239 txr->
bytes += pi->ipi_len;
240 pi->ipi_new_pidx = i;
267 if_softc_ctx_t scctx = sc->
shared;
270 qidx_t processed = 0;
272 qidx_t cur, prev, ntxd, rs_cidx;
280 cur = txr->
tx_rsq[rs_cidx];
293 ntxd = scctx->isc_ntxd[0];
296 delta = (int32_t)cur - (int32_t)prev;
303 rs_cidx = (rs_cidx + 1) & (ntxd - 1);
307 cur = txr->
tx_rsq[rs_cidx];
328 uint32_t next_pidx, pidx;
331 paddrs = iru->iru_paddrs;
332 pidx = iru->iru_pidx;
333 count = iru->iru_count;
335 for (i = 0, next_pidx = pidx; i < count; i++) {
337 if (++next_pidx ==
sc->
shared->isc_nrxd[0])
368 nrxd = sc->
shared->isc_nrxd[0];
369 for (cnt = 0, i = pidx; cnt < nrxd && cnt <= budget;) {
396 if_softc_ctx_t scctx = sc->
shared;
403 uint32_t staterr = 0;
429 if_inc_counter(ri->iri_ifp, IFCOUNTER_IERRORS, 1);
434 ri->iri_frags[i].irf_flid = 0;
435 ri->iri_frags[i].irf_idx = cidx;
436 ri->iri_frags[i].irf_len = len;
437 if (++cidx == sc->
shared->isc_nrxd[0])
448 if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
454 if (ri->iri_rsstype == M_HASHTYPE_OPAQUE)
455 ri->iri_rsstype = M_HASHTYPE_NONE;
457 ri->iri_rsstype = M_HASHTYPE_OPAQUE_HASH;
461 ri->iri_flags |= M_VLANTAG;
478 uint16_t status = (uint16_t)staterr;
479 uint8_t errors = (uint8_t)(staterr >> 24);
487 ri->iri_csum_flags = (CSUM_IP_CHECKED | CSUM_IP_VALID);
494 ri->iri_csum_flags |= CSUM_SCTP_VALID;
496 ri->iri_csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
497 ri->iri_csum_data = htons(0xffff);
512 return M_HASHTYPE_RSS_TCP_IPV4;
514 return M_HASHTYPE_RSS_IPV4;
516 return M_HASHTYPE_RSS_TCP_IPV6;
518 return M_HASHTYPE_RSS_IPV6_EX;
520 return M_HASHTYPE_RSS_IPV6;
522 return M_HASHTYPE_RSS_TCP_IPV6_EX;
524 return M_HASHTYPE_RSS_UDP_IPV4;
526 return M_HASHTYPE_RSS_UDP_IPV6;
528 return M_HASHTYPE_RSS_UDP_IPV6_EX;
530 return M_HASHTYPE_OPAQUE;
static int ixgbe_tx_ctx_setup(struct ixgbe_adv_tx_context_desc *, if_pkt_info_t)
static void ixgbe_isc_txd_flush(void *, uint16_t, qidx_t)
static int ixgbe_isc_txd_encap(void *, if_pkt_info_t)
static void ixgbe_isc_rxd_flush(void *, uint16_t, uint8_t, qidx_t)
static void ixgbe_isc_rxd_refill(void *, if_rxd_update_t)
static int ixgbe_isc_rxd_pkt_get(void *, if_rxd_info_t)
static int ixgbe_isc_rxd_available(void *, uint16_t, qidx_t, qidx_t)
static void ixgbe_rx_checksum(uint32_t, if_rxd_info_t, uint32_t)
static int ixgbe_determine_rsstype(uint16_t pkt_info)
void ixgbe_if_enable_intr(if_ctx_t ctx)
static int ixgbe_isc_txd_credits_update(void *, uint16_t, bool)
struct if_txrx ixgbe_txrx
#define IXGBE_FEATURE_NEEDS_CTXD
#define IXGBE_FEATURE_RSS
#define IXGBE_WRITE_REG(a, reg, val)
#define IXGBE_RXDADV_ERR_FRAME_ERR_MASK
#define IXGBE_RXD_STAT_VP
#define IXGBE_ADVTXD_MACLEN_SHIFT
#define IXGBE_RXDADV_RSSTYPE_IPV6
#define IXGBE_RXDADV_RSSTYPE_IPV4_TCP
#define IXGBE_TXD_CMD_EOP
#define IXGBE_TXD_POPTS_IXSM
#define IXGBE_RXDADV_RSSTYPE_IPV6_TCP
#define IXGBE_ADVTXD_TUCMD_IPV6
#define IXGBE_RXDADV_RSSTYPE_IPV6_UDP
#define IXGBE_ADVTXD_DCMD_IFCS
#define IXGBE_ADVTXD_TUCMD_IPV4
#define IXGBE_TXD_STAT_DD
#define IXGBE_ADVTXD_DCMD_DEXT
#define IXGBE_ADVTXD_PAYLEN_SHIFT
#define IXGBE_ADVTXD_DTYP_DATA
#define IXGBE_ADVTXD_DTYP_CTXT
#define IXGBE_ADVTXD_TUCMD_L4T_UDP
#define IXGBE_TXD_POPTS_TXSM
#define IXGBE_ADVTXD_DCMD_TSE
#define IXGBE_RXD_STAT_DD
#define IXGBE_RXD_STAT_L4CS
#define IXGBE_RXDADV_PKTTYPE_SCTP
#define IXGBE_RXDADV_RSSTYPE_IPV4
#define IXGBE_RXDADV_RSSTYPE_IPV6_TCP_EX
#define IXGBE_RXDADV_RSSTYPE_IPV6_UDP_EX
#define IXGBE_RXDADV_RSSTYPE_MASK
#define IXGBE_ADVTXD_L4LEN_SHIFT
#define IXGBE_ADVTXD_MSS_SHIFT
#define IXGBE_ADVTXD_DCMD_VLE
#define IXGBE_RXD_STAT_IPCS
#define IXGBE_RXDADV_PKTTYPE_MASK
#define IXGBE_RXD_ERR_IPE
#define IXGBE_RXD_ERR_TCPE
#define IXGBE_ADVTXD_VLAN_SHIFT
#define IXGBE_ADVTXD_TUCMD_L4T_TCP
#define IXGBE_RXDADV_RSSTYPE_IPV6_EX
#define IXGBE_RXDADV_PKTTYPE_ETQF
#define IXGBE_RXDADV_RSSTYPE_IPV4_UDP
#define IXGBE_ADVTXD_TUCMD_L4T_SCTP
#define IXGBE_RXD_STAT_EOP
struct ix_tx_queue * tx_queues
struct ix_rx_queue * rx_queues
union ixgbe_adv_rx_desc * rx_base
union ixgbe_adv_tx_desc * tx_base
struct ixgbe_adv_rx_desc::@11::@12 lower
struct ixgbe_adv_rx_desc::@11::@13 upper
struct ixgbe_adv_rx_desc::@10 read
union ixgbe_adv_rx_desc::@11::@12::@15 hi_dword
struct ixgbe_adv_rx_desc::@11::@12::@14::@16 hs_rss
union ixgbe_adv_rx_desc::@11::@12::@14 lo_dword
struct ixgbe_adv_rx_desc::@11 wb
struct ixgbe_adv_tx_desc::@9 wb
struct ixgbe_adv_tx_desc::@8 read