linux/drivers/s390/net/qeth_eddp.h
<<
>>
Prefs
   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