blob: 52910c9252c085c05cd3aa882f51cf72bb981107 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
Heiko Carstense018ba12006-02-01 03:06:31 -08002 * linux/drivers/s390/net/qeth_eddp.h
Linus Torvalds1da177e2005-04-16 15:20:36 -07003 *
Heiko Carstense018ba12006-02-01 03:06:31 -08004 * Header file for qeth enhanced device driver packing.
Linus Torvalds1da177e2005-04-16 15:20:36 -07005 *
6 * Copyright 2004 IBM Corporation
7 *
8 * Author(s): Thomas Spatzier <tspat@de.ibm.com>
9 *
Linus Torvalds1da177e2005-04-16 15:20:36 -070010 */
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 *
Ursula Brauna4c48a22007-05-02 15:17:11 +020037qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,
38 struct qeth_hdr *, unsigned char);
Linus Torvalds1da177e2005-04-16 15:20:36 -070039
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;
Al Viro5a5a8522006-11-14 21:43:44 -080058 __be16 vlan[2];
Linus Torvalds1da177e2005-04-16 15:20:36 -070059 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__ */