^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _TSO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _TSO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <net/ip.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define TSO_HEADER_SIZE 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) struct tso_t {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) int next_frag_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) int size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) u16 ip_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) u8 tlen; /* transport header len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) bool ipv6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) u32 tcp_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) int tso_count_descs(const struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) void tso_build_hdr(const struct sk_buff *skb, char *hdr, struct tso_t *tso,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) int size, bool is_last);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) void tso_build_data(const struct sk_buff *skb, struct tso_t *tso, int size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) int tso_start(struct sk_buff *skb, struct tso_t *tso);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #endif /* _TSO_H */