| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | #ifndef _TSO_H | 
 | #define _TSO_H | 
 |  | 
 | #include <linux/skbuff.h> | 
 | #include <net/ip.h> | 
 |  | 
 | #define TSO_HEADER_SIZE		256 | 
 |  | 
 | struct tso_t { | 
 | 	int	next_frag_idx; | 
 | 	int	size; | 
 | 	void	*data; | 
 | 	u16	ip_id; | 
 | 	u8	tlen; /* transport header len */ | 
 | 	bool	ipv6; | 
 | 	u32	tcp_seq; | 
 | }; | 
 |  | 
 | /* Calculate the worst case buffer count */ | 
 | static inline int tso_count_descs(const struct sk_buff *skb) | 
 | { | 
 | 	return skb_shinfo(skb)->gso_segs * 2 + skb_shinfo(skb)->nr_frags; | 
 | } | 
 |  | 
 | void tso_build_hdr(const struct sk_buff *skb, char *hdr, struct tso_t *tso, | 
 | 		   int size, bool is_last); | 
 | void tso_build_data(const struct sk_buff *skb, struct tso_t *tso, int size); | 
 | int tso_start(struct sk_buff *skb, struct tso_t *tso); | 
 |  | 
 | #endif	/* _TSO_H */ |