/* * drivers/s390/net/qeth_core_offl.h * * Copyright IBM Corp. 2007 * Author(s): Thomas Spatzier , * Frank Blaschka */ #ifndef __QETH_CORE_OFFL_H__ #define __QETH_CORE_OFFL_H__ struct qeth_eddp_element { u32 flags; u32 length; void *addr; }; struct qeth_eddp_context { atomic_t refcnt; enum qeth_large_send_types type; int num_pages; /* # of allocated pages */ u8 **pages; /* pointers to pages */ int offset; /* offset in ctx during creation */ int num_elements; /* # of required 'SBALEs' */ struct qeth_eddp_element *elements; /* array of 'SBALEs' */ int elements_per_skb; /* # of 'SBALEs' per skb **/ }; struct qeth_eddp_context_reference { struct list_head list; struct qeth_eddp_context *ctx; }; struct qeth_eddp_data { struct qeth_hdr qh; struct ethhdr mac; __be16 vlan[2]; union { struct { struct iphdr h; u8 options[40]; } ip4; struct { struct ipv6hdr h; } ip6; } nh; u8 nhl; void *nh_in_ctx; /* address of nh within the ctx */ union { struct { struct tcphdr h; u8 options[40]; } tcp; } th; u8 thl; void *th_in_ctx; /* address of th within the ctx */ struct sk_buff *skb; int skb_offset; int frag; int frag_offset; } __attribute__ ((packed)); extern struct qeth_eddp_context *qeth_eddp_create_context(struct qeth_card *, struct sk_buff *, struct qeth_hdr *, unsigned char); extern void qeth_eddp_put_context(struct qeth_eddp_context *); extern int qeth_eddp_fill_buffer(struct qeth_qdio_out_q *, struct qeth_eddp_context *, int); extern void qeth_eddp_buf_release_contexts(struct qeth_qdio_out_buffer *); extern int qeth_eddp_check_buffers_for_context(struct qeth_qdio_out_q *, struct qeth_eddp_context *); void qeth_tso_fill_header(struct qeth_card *, struct qeth_hdr *, struct sk_buff *); void qeth_tx_csum(struct sk_buff *skb); #endif /* __QETH_CORE_EDDP_H__ */