Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/hyperv/netvsc/if_hn.c
Show First 20 Lines • Show All 1,778 Lines • ▼ Show 20 Lines | hn_rndis_pktinfo_append(struct rndis_packet_msg *pkt, size_t pktsize, | ||||
pi = (struct rndis_pktinfo *)((uint8_t *)pkt + pkt->rm_pktinfooffset + | pi = (struct rndis_pktinfo *)((uint8_t *)pkt + pkt->rm_pktinfooffset + | ||||
pkt->rm_pktinfolen); | pkt->rm_pktinfolen); | ||||
pkt->rm_pktinfolen += pi_size; | pkt->rm_pktinfolen += pi_size; | ||||
pi->rm_size = pi_size; | pi->rm_size = pi_size; | ||||
pi->rm_type = pi_type; | pi->rm_type = pi_type; | ||||
pi->rm_pktinfooffset = RNDIS_PKTINFO_OFFSET; | pi->rm_pktinfooffset = RNDIS_PKTINFO_OFFSET; | ||||
/* Update RNDIS packet msg length */ | |||||
pkt->rm_len += pi_size; | |||||
return (pi->rm_data); | return (pi->rm_data); | ||||
} | } | ||||
static __inline int | static __inline int | ||||
hn_flush_txagg(struct ifnet *ifp, struct hn_tx_ring *txr) | hn_flush_txagg(struct ifnet *ifp, struct hn_tx_ring *txr) | ||||
{ | { | ||||
struct hn_txdesc *txd; | struct hn_txdesc *txd; | ||||
struct mbuf *m; | struct mbuf *m; | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | if (pkt_size < txr->hn_chim_size) { | ||||
if (chim != NULL) | if (chim != NULL) | ||||
pkt = chim; | pkt = chim; | ||||
} else { | } else { | ||||
if (txr->hn_agg_txd != NULL) | if (txr->hn_agg_txd != NULL) | ||||
hn_flush_txagg(ifp, txr); | hn_flush_txagg(ifp, txr); | ||||
} | } | ||||
pkt->rm_type = REMOTE_NDIS_PACKET_MSG; | pkt->rm_type = REMOTE_NDIS_PACKET_MSG; | ||||
pkt->rm_len = sizeof(*pkt) + m_head->m_pkthdr.len; | pkt->rm_len = m_head->m_pkthdr.len; | ||||
pkt->rm_dataoffset = 0; | pkt->rm_dataoffset = 0; | ||||
pkt->rm_datalen = m_head->m_pkthdr.len; | pkt->rm_datalen = m_head->m_pkthdr.len; | ||||
pkt->rm_oobdataoffset = 0; | pkt->rm_oobdataoffset = 0; | ||||
pkt->rm_oobdatalen = 0; | pkt->rm_oobdatalen = 0; | ||||
pkt->rm_oobdataelements = 0; | pkt->rm_oobdataelements = 0; | ||||
pkt->rm_pktinfooffset = sizeof(*pkt); | pkt->rm_pktinfooffset = sizeof(*pkt); | ||||
pkt->rm_pktinfolen = 0; | pkt->rm_pktinfolen = 0; | ||||
pkt->rm_vchandle = 0; | pkt->rm_vchandle = 0; | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | #endif /* INET6 || INET */ | ||||
if (m_head->m_pkthdr.csum_flags & (CSUM_IP_TCP | CSUM_IP6_TCP)) | if (m_head->m_pkthdr.csum_flags & (CSUM_IP_TCP | CSUM_IP6_TCP)) | ||||
*pi_data |= NDIS_TXCSUM_INFO_TCPCS; | *pi_data |= NDIS_TXCSUM_INFO_TCPCS; | ||||
else if (m_head->m_pkthdr.csum_flags & | else if (m_head->m_pkthdr.csum_flags & | ||||
(CSUM_IP_UDP | CSUM_IP6_UDP)) | (CSUM_IP_UDP | CSUM_IP6_UDP)) | ||||
*pi_data |= NDIS_TXCSUM_INFO_UDPCS; | *pi_data |= NDIS_TXCSUM_INFO_UDPCS; | ||||
} | } | ||||
pkt_hlen = pkt->rm_pktinfooffset + pkt->rm_pktinfolen; | pkt_hlen = pkt->rm_pktinfooffset + pkt->rm_pktinfolen; | ||||
/* Fixup RNDIS packet message total length */ | |||||
pkt->rm_len += pkt_hlen; | |||||
/* Convert RNDIS packet message offsets */ | /* Convert RNDIS packet message offsets */ | ||||
pkt->rm_dataoffset = hn_rndis_pktmsg_offset(pkt_hlen); | pkt->rm_dataoffset = hn_rndis_pktmsg_offset(pkt_hlen); | ||||
pkt->rm_pktinfooffset = hn_rndis_pktmsg_offset(pkt->rm_pktinfooffset); | pkt->rm_pktinfooffset = hn_rndis_pktmsg_offset(pkt->rm_pktinfooffset); | ||||
/* | /* | ||||
* Fast path: Chimney sending. | * Fast path: Chimney sending. | ||||
*/ | */ | ||||
if (chim != NULL) { | if (chim != NULL) { | ||||
▲ Show 20 Lines • Show All 3,731 Lines • Show Last 20 Lines |