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