Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-2.6] / drivers / s390 / net / qeth_core_offl.h
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__ */