1 /* 2 * drivers/s390/net/qeth_core_offl.h 3 * 4 * Copyright IBM Corp. 2007 5 * Author(s): Thomas Spatzier <tspat@de.ibm.com>, 6 * Frank Blaschka <frank.blaschka@de.ibm.com> 7 */ 8 9 #ifndef __QETH_CORE_OFFL_H__ 10 #define __QETH_CORE_OFFL_H__ 11 12 struct qeth_eddp_element { 13 u32 flags; 14 u32 length; 15 void *addr; 16 }; 17 18 struct qeth_eddp_context { 19 atomic_t refcnt; 20 enum qeth_large_send_types type; 21 int num_pages; /* # of allocated pages */ 22 u8 **pages; /* pointers to pages */ 23 int offset; /* offset in ctx during creation */ 24 int num_elements; /* # of required 'SBALEs' */ 25 struct qeth_eddp_element *elements; /* array of 'SBALEs' */ 26 int elements_per_skb; /* # of 'SBALEs' per skb **/ 27 }; 28 29 struct qeth_eddp_context_reference { 30 struct list_head list; 31 struct qeth_eddp_context *ctx; 32 }; 33 34 struct qeth_eddp_data { 35 struct qeth_hdr qh; 36 struct ethhdr mac; 37 __be16 vlan[2]; 38 union { 39 struct { 40 struct iphdr h; 41 u8 options[40]; 42 } ip4; 43 struct { 44 struct ipv6hdr h; 45 } ip6; 46 } nh; 47 u8 nhl; 48 void *nh_in_ctx; /* address of nh within the ctx */ 49 union { 50 struct { 51 struct tcphdr h; 52 u8 options[40]; 53 } tcp; 54 } th; 55 u8 thl; 56 void *th_in_ctx; /* address of th within the ctx */ 57 struct sk_buff *skb; 58 int skb_offset; 59 int frag; 60 int frag_offset; 61 } __attribute__ ((packed)); 62 63 extern struct qeth_eddp_context *qeth_eddp_create_context(struct qeth_card *, 64 struct sk_buff *, struct qeth_hdr *, unsigned char); 65 extern void qeth_eddp_put_context(struct qeth_eddp_context *); 66 extern int qeth_eddp_fill_buffer(struct qeth_qdio_out_q *, 67 struct qeth_eddp_context *, int); 68 extern void qeth_eddp_buf_release_contexts(struct qeth_qdio_out_buffer *); 69 extern int qeth_eddp_check_buffers_for_context(struct qeth_qdio_out_q *, 70 struct qeth_eddp_context *); 71 72 void qeth_tso_fill_header(struct qeth_card *, struct qeth_hdr *, 73 struct sk_buff *); 74 void qeth_tx_csum(struct sk_buff *skb); 75 76 #endif /* __QETH_CORE_EDDP_H__ */ 77