Lines Matching refs:st

1012 static int tso_start(struct tso_state *st, struct efx_nic *efx,  in tso_start()  argument
1020 st->ip_off = skb_network_header(skb) - skb->data; in tso_start()
1021 st->tcp_off = skb_transport_header(skb) - skb->data; in tso_start()
1022 header_len = st->tcp_off + (tcp_hdr(skb)->doff << 2u); in tso_start()
1024 st->header_len = header_len; in tso_start()
1025 st->in_len = in_len; in tso_start()
1026 if (st->protocol == htons(ETH_P_IP)) { in tso_start()
1027 st->ip_base_len = st->header_len - st->ip_off; in tso_start()
1028 st->ipv4_id = ntohs(ip_hdr(skb)->id); in tso_start()
1030 st->ip_base_len = st->header_len - st->tcp_off; in tso_start()
1031 st->ipv4_id = 0; in tso_start()
1033 st->seqnum = ntohl(tcp_hdr(skb)->seq); in tso_start()
1039 st->out_len = skb->len - header_len; in tso_start()
1042 st->header_unmap_len = 0; in tso_start()
1045 st->dma_flags = 0; in tso_start()
1046 st->unmap_len = 0; in tso_start()
1052 st->dma_flags = EFX_TX_BUF_MAP_SINGLE; in tso_start()
1053 st->dma_addr = dma_addr; in tso_start()
1054 st->unmap_addr = dma_addr; in tso_start()
1055 st->unmap_len = in_len; in tso_start()
1059 st->header_dma_addr = dma_addr; in tso_start()
1060 st->header_unmap_len = skb_headlen(skb); in tso_start()
1061 st->dma_flags = 0; in tso_start()
1062 st->dma_addr = dma_addr + header_len; in tso_start()
1063 st->unmap_len = 0; in tso_start()
1069 static int tso_get_fragment(struct tso_state *st, struct efx_nic *efx, in tso_get_fragment() argument
1072 st->unmap_addr = skb_frag_dma_map(&efx->pci_dev->dev, frag, 0, in tso_get_fragment()
1074 if (likely(!dma_mapping_error(&efx->pci_dev->dev, st->unmap_addr))) { in tso_get_fragment()
1075 st->dma_flags = 0; in tso_get_fragment()
1076 st->unmap_len = skb_frag_size(frag); in tso_get_fragment()
1077 st->in_len = skb_frag_size(frag); in tso_get_fragment()
1078 st->dma_addr = st->unmap_addr; in tso_get_fragment()
1096 struct tso_state *st) in tso_fill_packet_with_fragment() argument
1101 if (st->in_len == 0) in tso_fill_packet_with_fragment()
1103 if (st->packet_space == 0) in tso_fill_packet_with_fragment()
1106 EFX_BUG_ON_PARANOID(st->in_len <= 0); in tso_fill_packet_with_fragment()
1107 EFX_BUG_ON_PARANOID(st->packet_space <= 0); in tso_fill_packet_with_fragment()
1109 n = min(st->in_len, st->packet_space); in tso_fill_packet_with_fragment()
1111 st->packet_space -= n; in tso_fill_packet_with_fragment()
1112 st->out_len -= n; in tso_fill_packet_with_fragment()
1113 st->in_len -= n; in tso_fill_packet_with_fragment()
1115 efx_tx_queue_insert(tx_queue, st->dma_addr, n, &buffer); in tso_fill_packet_with_fragment()
1117 if (st->out_len == 0) { in tso_fill_packet_with_fragment()
1121 } else if (st->packet_space != 0) { in tso_fill_packet_with_fragment()
1125 if (st->in_len == 0) { in tso_fill_packet_with_fragment()
1127 buffer->unmap_len = st->unmap_len; in tso_fill_packet_with_fragment()
1129 buffer->flags |= st->dma_flags; in tso_fill_packet_with_fragment()
1130 st->unmap_len = 0; in tso_fill_packet_with_fragment()
1133 st->dma_addr += n; in tso_fill_packet_with_fragment()
1148 struct tso_state *st) in tso_start_new_packet() argument
1152 bool is_last = st->out_len <= skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1156 st->packet_space = skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1159 st->packet_space = st->out_len; in tso_start_new_packet()
1163 if (!st->header_unmap_len) { in tso_start_new_packet()
1170 header = efx_tsoh_get_buffer(tx_queue, buffer, st->header_len); in tso_start_new_packet()
1174 tsoh_th = (struct tcphdr *)(header + st->tcp_off); in tso_start_new_packet()
1177 memcpy(header, skb->data, st->header_len); in tso_start_new_packet()
1179 tsoh_th->seq = htonl(st->seqnum); in tso_start_new_packet()
1182 ip_length = st->ip_base_len + st->packet_space; in tso_start_new_packet()
1184 if (st->protocol == htons(ETH_P_IP)) { in tso_start_new_packet()
1186 (struct iphdr *)(header + st->ip_off); in tso_start_new_packet()
1189 tsoh_iph->id = htons(st->ipv4_id); in tso_start_new_packet()
1192 (struct ipv6hdr *)(header + st->ip_off); in tso_start_new_packet()
1214 ESF_DZ_TX_TSO_IP_ID, st->ipv4_id, in tso_start_new_packet()
1215 ESF_DZ_TX_TSO_TCP_SEQNO, st->seqnum); in tso_start_new_packet()
1222 buffer->dma_addr = st->header_dma_addr; in tso_start_new_packet()
1223 buffer->len = st->header_len; in tso_start_new_packet()
1226 buffer->unmap_len = st->header_unmap_len; in tso_start_new_packet()
1231 st->header_unmap_len = 0; in tso_start_new_packet()
1239 st->seqnum += skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1242 ++st->ipv4_id; in tso_start_new_packet()