Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/e1000/igb_txrx.c
Show First 20 Lines • Show All 146 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
igb_tx_ctx_setup(struct tx_ring *txr, if_pkt_info_t pi, u32 *cmd_type_len, u32 *olinfo_status) | igb_tx_ctx_setup(struct tx_ring *txr, if_pkt_info_t pi, u32 *cmd_type_len, u32 *olinfo_status) | ||||
{ | { | ||||
struct e1000_adv_tx_context_desc *TXD; | struct e1000_adv_tx_context_desc *TXD; | ||||
struct adapter *adapter = txr->adapter; | struct adapter *adapter = txr->adapter; | ||||
u32 vlan_macip_lens, type_tucmd_mlhl; | u32 vlan_macip_lens, type_tucmd_mlhl; | ||||
u32 mss_l4len_idx; | u32 mss_l4len_idx; | ||||
mss_l4len_idx = vlan_macip_lens = type_tucmd_mlhl = 0; | mss_l4len_idx = vlan_macip_lens = type_tucmd_mlhl = 0; | ||||
int offload = TRUE; | |||||
/* First check if TSO is to be used */ | /* First check if TSO is to be used */ | ||||
if (pi->ipi_csum_flags & CSUM_TSO) | if (pi->ipi_csum_flags & CSUM_TSO) | ||||
return (igb_tso_setup(txr, pi, cmd_type_len, olinfo_status)); | return (igb_tso_setup(txr, pi, cmd_type_len, olinfo_status)); | ||||
/* Indicate the whole packet as payload when not doing TSO */ | /* Indicate the whole packet as payload when not doing TSO */ | ||||
*olinfo_status |= pi->ipi_len << E1000_ADVTXD_PAYLEN_SHIFT; | *olinfo_status |= pi->ipi_len << E1000_ADVTXD_PAYLEN_SHIFT; | ||||
Show All 17 Lines | igb_tx_ctx_setup(struct tx_ring *txr, if_pkt_info_t pi, u32 *cmd_type_len, u32 *olinfo_status) | ||||
switch(pi->ipi_etype) { | switch(pi->ipi_etype) { | ||||
case ETHERTYPE_IP: | case ETHERTYPE_IP: | ||||
type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV4; | type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV4; | ||||
break; | break; | ||||
case ETHERTYPE_IPV6: | case ETHERTYPE_IPV6: | ||||
type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV6; | type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_IPV6; | ||||
break; | break; | ||||
default: | default: | ||||
offload = FALSE; | |||||
break; | break; | ||||
} | } | ||||
vlan_macip_lens |= pi->ipi_ip_hlen; | vlan_macip_lens |= pi->ipi_ip_hlen; | ||||
type_tucmd_mlhl |= E1000_ADVTXD_DCMD_DEXT | E1000_ADVTXD_DTYP_CTXT; | type_tucmd_mlhl |= E1000_ADVTXD_DCMD_DEXT | E1000_ADVTXD_DTYP_CTXT; | ||||
switch (pi->ipi_ipproto) { | switch (pi->ipi_ipproto) { | ||||
case IPPROTO_TCP: | case IPPROTO_TCP: | ||||
if (pi->ipi_csum_flags & (CSUM_IP_TCP | CSUM_IP6_TCP)) | if (pi->ipi_csum_flags & (CSUM_IP_TCP | CSUM_IP6_TCP)) { | ||||
type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_TCP; | type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_TCP; | ||||
*olinfo_status |= E1000_TXD_POPTS_TXSM << 8; | |||||
} | |||||
break; | break; | ||||
case IPPROTO_UDP: | case IPPROTO_UDP: | ||||
if (pi->ipi_csum_flags & (CSUM_IP_UDP | CSUM_IP6_UDP)) | if (pi->ipi_csum_flags & (CSUM_IP_UDP | CSUM_IP6_UDP)) { | ||||
type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_UDP; | type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_UDP; | ||||
*olinfo_status |= E1000_TXD_POPTS_TXSM << 8; | |||||
} | |||||
break; | break; | ||||
case IPPROTO_SCTP: | case IPPROTO_SCTP: | ||||
if (pi->ipi_csum_flags & (CSUM_IP_SCTP | CSUM_IP6_SCTP)) | if (pi->ipi_csum_flags & (CSUM_IP_SCTP | CSUM_IP6_SCTP)) { | ||||
type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_SCTP; | type_tucmd_mlhl |= E1000_ADVTXD_TUCMD_L4T_SCTP; | ||||
*olinfo_status |= E1000_TXD_POPTS_TXSM << 8; | |||||
} | |||||
break; | break; | ||||
default: | default: | ||||
offload = FALSE; | |||||
break; | break; | ||||
} | } | ||||
if (offload) /* For the TX descriptor setup */ | |||||
*olinfo_status |= E1000_TXD_POPTS_TXSM << 8; | |||||
/* 82575 needs the queue index added */ | /* 82575 needs the queue index added */ | ||||
if (adapter->hw.mac.type == e1000_82575) | if (adapter->hw.mac.type == e1000_82575) | ||||
mss_l4len_idx = txr->me << 4; | mss_l4len_idx = txr->me << 4; | ||||
/* Now copy bits into descriptor */ | /* Now copy bits into descriptor */ | ||||
TXD->vlan_macip_lens = htole32(vlan_macip_lens); | TXD->vlan_macip_lens = htole32(vlan_macip_lens); | ||||
TXD->type_tucmd_mlhl = htole32(type_tucmd_mlhl); | TXD->type_tucmd_mlhl = htole32(type_tucmd_mlhl); | ||||
▲ Show 20 Lines • Show All 361 Lines • Show Last 20 Lines |