Lines Matching refs:st

1011 static int tso_start(struct tso_state *st, struct efx_nic *efx,  in tso_start()  argument
1019 st->ip_off = skb_network_header(skb) - skb->data; in tso_start()
1020 st->tcp_off = skb_transport_header(skb) - skb->data; in tso_start()
1021 header_len = st->tcp_off + (tcp_hdr(skb)->doff << 2u); in tso_start()
1023 st->header_len = header_len; in tso_start()
1024 st->in_len = in_len; in tso_start()
1025 if (st->protocol == htons(ETH_P_IP)) { in tso_start()
1026 st->ip_base_len = st->header_len - st->ip_off; in tso_start()
1027 st->ipv4_id = ntohs(ip_hdr(skb)->id); in tso_start()
1029 st->ip_base_len = st->header_len - st->tcp_off; in tso_start()
1030 st->ipv4_id = 0; in tso_start()
1032 st->seqnum = ntohl(tcp_hdr(skb)->seq); in tso_start()
1038 st->out_len = skb->len - header_len; in tso_start()
1041 st->header_unmap_len = 0; in tso_start()
1044 st->dma_flags = 0; in tso_start()
1045 st->unmap_len = 0; in tso_start()
1051 st->dma_flags = EFX_TX_BUF_MAP_SINGLE; in tso_start()
1052 st->dma_addr = dma_addr; in tso_start()
1053 st->unmap_addr = dma_addr; in tso_start()
1054 st->unmap_len = in_len; in tso_start()
1058 st->header_dma_addr = dma_addr; in tso_start()
1059 st->header_unmap_len = skb_headlen(skb); in tso_start()
1060 st->dma_flags = 0; in tso_start()
1061 st->dma_addr = dma_addr + header_len; in tso_start()
1062 st->unmap_len = 0; in tso_start()
1068 static int tso_get_fragment(struct tso_state *st, struct efx_nic *efx, in tso_get_fragment() argument
1071 st->unmap_addr = skb_frag_dma_map(&efx->pci_dev->dev, frag, 0, in tso_get_fragment()
1073 if (likely(!dma_mapping_error(&efx->pci_dev->dev, st->unmap_addr))) { in tso_get_fragment()
1074 st->dma_flags = 0; in tso_get_fragment()
1075 st->unmap_len = skb_frag_size(frag); in tso_get_fragment()
1076 st->in_len = skb_frag_size(frag); in tso_get_fragment()
1077 st->dma_addr = st->unmap_addr; in tso_get_fragment()
1095 struct tso_state *st) in tso_fill_packet_with_fragment() argument
1100 if (st->in_len == 0) in tso_fill_packet_with_fragment()
1102 if (st->packet_space == 0) in tso_fill_packet_with_fragment()
1105 EFX_BUG_ON_PARANOID(st->in_len <= 0); in tso_fill_packet_with_fragment()
1106 EFX_BUG_ON_PARANOID(st->packet_space <= 0); in tso_fill_packet_with_fragment()
1108 n = min(st->in_len, st->packet_space); in tso_fill_packet_with_fragment()
1110 st->packet_space -= n; in tso_fill_packet_with_fragment()
1111 st->out_len -= n; in tso_fill_packet_with_fragment()
1112 st->in_len -= n; in tso_fill_packet_with_fragment()
1114 efx_tx_queue_insert(tx_queue, st->dma_addr, n, &buffer); in tso_fill_packet_with_fragment()
1116 if (st->out_len == 0) { in tso_fill_packet_with_fragment()
1120 } else if (st->packet_space != 0) { in tso_fill_packet_with_fragment()
1124 if (st->in_len == 0) { in tso_fill_packet_with_fragment()
1126 buffer->unmap_len = st->unmap_len; in tso_fill_packet_with_fragment()
1128 buffer->flags |= st->dma_flags; in tso_fill_packet_with_fragment()
1129 st->unmap_len = 0; in tso_fill_packet_with_fragment()
1132 st->dma_addr += n; in tso_fill_packet_with_fragment()
1147 struct tso_state *st) in tso_start_new_packet() argument
1151 bool is_last = st->out_len <= skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1155 st->packet_space = skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1158 st->packet_space = st->out_len; in tso_start_new_packet()
1162 if (!st->header_unmap_len) { in tso_start_new_packet()
1169 header = efx_tsoh_get_buffer(tx_queue, buffer, st->header_len); in tso_start_new_packet()
1173 tsoh_th = (struct tcphdr *)(header + st->tcp_off); in tso_start_new_packet()
1176 memcpy(header, skb->data, st->header_len); in tso_start_new_packet()
1178 tsoh_th->seq = htonl(st->seqnum); in tso_start_new_packet()
1181 ip_length = st->ip_base_len + st->packet_space; in tso_start_new_packet()
1183 if (st->protocol == htons(ETH_P_IP)) { in tso_start_new_packet()
1185 (struct iphdr *)(header + st->ip_off); in tso_start_new_packet()
1188 tsoh_iph->id = htons(st->ipv4_id); in tso_start_new_packet()
1191 (struct ipv6hdr *)(header + st->ip_off); in tso_start_new_packet()
1213 ESF_DZ_TX_TSO_IP_ID, st->ipv4_id, in tso_start_new_packet()
1214 ESF_DZ_TX_TSO_TCP_SEQNO, st->seqnum); in tso_start_new_packet()
1221 buffer->dma_addr = st->header_dma_addr; in tso_start_new_packet()
1222 buffer->len = st->header_len; in tso_start_new_packet()
1225 buffer->unmap_len = st->header_unmap_len; in tso_start_new_packet()
1230 st->header_unmap_len = 0; in tso_start_new_packet()
1238 st->seqnum += skb_shinfo(skb)->gso_size; in tso_start_new_packet()
1241 ++st->ipv4_id; in tso_start_new_packet()