Lines Matching refs:st

169 static int tso_start(struct tso_state *st, struct efx_nic *efx,  in tso_start()  argument
177 st->ip_off = skb_network_header(skb) - skb->data; in tso_start()
178 st->tcp_off = skb_transport_header(skb) - skb->data; in tso_start()
179 header_len = st->tcp_off + (tcp_hdr(skb)->doff << 2u); in tso_start()
181 st->header_len = header_len; in tso_start()
182 st->in_len = in_len; in tso_start()
183 if (st->protocol == htons(ETH_P_IP)) { in tso_start()
184 st->ip_base_len = st->header_len - st->ip_off; in tso_start()
185 st->ipv4_id = ntohs(ip_hdr(skb)->id); in tso_start()
187 st->ip_base_len = st->header_len - st->tcp_off; in tso_start()
188 st->ipv4_id = 0; in tso_start()
190 st->seqnum = ntohl(tcp_hdr(skb)->seq); in tso_start()
196 st->out_len = skb->len - header_len; in tso_start()
200 st->header_dma_addr = dma_addr; in tso_start()
201 st->header_unmap_len = skb_headlen(skb); in tso_start()
202 st->dma_addr = dma_addr + header_len; in tso_start()
203 st->unmap_len = 0; in tso_start()
208 static int tso_get_fragment(struct tso_state *st, struct efx_nic *efx, in tso_get_fragment() argument
211 st->unmap_addr = skb_frag_dma_map(&efx->pci_dev->dev, frag, 0, in tso_get_fragment()
213 if (likely(!dma_mapping_error(&efx->pci_dev->dev, st->unmap_addr))) { in tso_get_fragment()
214 st->unmap_len = skb_frag_size(frag); in tso_get_fragment()
215 st->in_len = skb_frag_size(frag); in tso_get_fragment()
216 st->dma_addr = st->unmap_addr; in tso_get_fragment()
234 struct tso_state *st) in tso_fill_packet_with_fragment() argument
239 if (st->in_len == 0) in tso_fill_packet_with_fragment()
241 if (st->packet_space == 0) in tso_fill_packet_with_fragment()
244 EFX_WARN_ON_ONCE_PARANOID(st->in_len <= 0); in tso_fill_packet_with_fragment()
245 EFX_WARN_ON_ONCE_PARANOID(st->packet_space <= 0); in tso_fill_packet_with_fragment()
247 n = min(st->in_len, st->packet_space); in tso_fill_packet_with_fragment()
249 st->packet_space -= n; in tso_fill_packet_with_fragment()
250 st->out_len -= n; in tso_fill_packet_with_fragment()
251 st->in_len -= n; in tso_fill_packet_with_fragment()
253 efx_tx_queue_insert(tx_queue, st->dma_addr, n, &buffer); in tso_fill_packet_with_fragment()
255 if (st->out_len == 0) { in tso_fill_packet_with_fragment()
259 } else if (st->packet_space != 0) { in tso_fill_packet_with_fragment()
263 if (st->in_len == 0) { in tso_fill_packet_with_fragment()
265 buffer->unmap_len = st->unmap_len; in tso_fill_packet_with_fragment()
267 st->unmap_len = 0; in tso_fill_packet_with_fragment()
270 st->dma_addr += n; in tso_fill_packet_with_fragment()
287 struct tso_state *st) in tso_start_new_packet() argument
291 bool is_last = st->out_len <= skb_shinfo(skb)->gso_size; in tso_start_new_packet()
295 st->packet_space = skb_shinfo(skb)->gso_size; in tso_start_new_packet()
298 st->packet_space = st->out_len; in tso_start_new_packet()
302 if (WARN_ON(!st->header_unmap_len)) in tso_start_new_packet()
317 ESF_DZ_TX_TSO_IP_ID, st->ipv4_id, in tso_start_new_packet()
318 ESF_DZ_TX_TSO_TCP_SEQNO, st->seqnum); in tso_start_new_packet()
325 buffer->dma_addr = st->header_dma_addr; in tso_start_new_packet()
326 buffer->len = st->header_len; in tso_start_new_packet()
329 buffer->unmap_len = st->header_unmap_len; in tso_start_new_packet()
334 st->header_unmap_len = 0; in tso_start_new_packet()
341 st->seqnum += skb_shinfo(skb)->gso_size; in tso_start_new_packet()
344 ++st->ipv4_id; in tso_start_new_packet()