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