Merge branch 'post-2.6.15' of git://brick.kernel.dk/data/git/linux-2.6-block
[sfrench/cifs-2.6.git] / drivers / message / i2o / i2o_lan.h
1 /*
2  *      i2o_lan.h                       I2O LAN Class definitions
3  *
4  *      I2O LAN CLASS OSM               May 26th 2000
5  *
6  *      (C) Copyright 1999, 2000        University of Helsinki,
7  *                                      Department of Computer Science
8  *
9  *      This code is still under development / test.
10  *
11  *      Author:         Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
12  *                      Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
13  *                      Taneli Vähäkangas <Taneli.Vahakangas@cs.Helsinki.FI>
14  */
15
16 #ifndef _I2O_LAN_H
17 #define _I2O_LAN_H
18
19 /* Default values for tunable parameters first */
20
21 #define I2O_LAN_MAX_BUCKETS_OUT 96
22 #define I2O_LAN_BUCKET_THRESH   18      /* 9 buckets in one message */
23 #define I2O_LAN_RX_COPYBREAK    200
24 #define I2O_LAN_TX_TIMEOUT      (1*HZ)
25 #define I2O_LAN_TX_BATCH_MODE   2       /* 2=automatic, 1=on, 0=off */
26 #define I2O_LAN_EVENT_MASK      0       /* 0=None, 0xFFC00002=All */
27
28 /* LAN types */
29 #define I2O_LAN_ETHERNET        0x0030
30 #define I2O_LAN_100VG           0x0040
31 #define I2O_LAN_TR              0x0050
32 #define I2O_LAN_FDDI            0x0060
33 #define I2O_LAN_FIBRE_CHANNEL   0x0070
34 #define I2O_LAN_UNKNOWN         0x00000000
35
36 /* Connector types */
37
38 /* Ethernet */
39 #define I2O_LAN_AUI             (I2O_LAN_ETHERNET << 4) + 0x00000001
40 #define I2O_LAN_10BASE5         (I2O_LAN_ETHERNET << 4) + 0x00000002
41 #define I2O_LAN_FIORL           (I2O_LAN_ETHERNET << 4) + 0x00000003
42 #define I2O_LAN_10BASE2         (I2O_LAN_ETHERNET << 4) + 0x00000004
43 #define I2O_LAN_10BROAD36       (I2O_LAN_ETHERNET << 4) + 0x00000005
44 #define I2O_LAN_10BASE_T        (I2O_LAN_ETHERNET << 4) + 0x00000006
45 #define I2O_LAN_10BASE_FP       (I2O_LAN_ETHERNET << 4) + 0x00000007
46 #define I2O_LAN_10BASE_FB       (I2O_LAN_ETHERNET << 4) + 0x00000008
47 #define I2O_LAN_10BASE_FL       (I2O_LAN_ETHERNET << 4) + 0x00000009
48 #define I2O_LAN_100BASE_TX      (I2O_LAN_ETHERNET << 4) + 0x0000000A
49 #define I2O_LAN_100BASE_FX      (I2O_LAN_ETHERNET << 4) + 0x0000000B
50 #define I2O_LAN_100BASE_T4      (I2O_LAN_ETHERNET << 4) + 0x0000000C
51 #define I2O_LAN_1000BASE_SX     (I2O_LAN_ETHERNET << 4) + 0x0000000D
52 #define I2O_LAN_1000BASE_LX     (I2O_LAN_ETHERNET << 4) + 0x0000000E
53 #define I2O_LAN_1000BASE_CX     (I2O_LAN_ETHERNET << 4) + 0x0000000F
54 #define I2O_LAN_1000BASE_T      (I2O_LAN_ETHERNET << 4) + 0x00000010
55
56 /* AnyLAN */
57 #define I2O_LAN_100VG_ETHERNET  (I2O_LAN_100VG << 4) + 0x00000001
58 #define I2O_LAN_100VG_TR        (I2O_LAN_100VG << 4) + 0x00000002
59
60 /* Token Ring */
61 #define I2O_LAN_4MBIT           (I2O_LAN_TR << 4) + 0x00000001
62 #define I2O_LAN_16MBIT          (I2O_LAN_TR << 4) + 0x00000002
63
64 /* FDDI */
65 #define I2O_LAN_125MBAUD        (I2O_LAN_FDDI << 4) + 0x00000001
66
67 /* Fibre Channel */
68 #define I2O_LAN_POINT_POINT     (I2O_LAN_FIBRE_CHANNEL << 4) + 0x00000001
69 #define I2O_LAN_ARB_LOOP        (I2O_LAN_FIBRE_CHANNEL << 4) + 0x00000002
70 #define I2O_LAN_PUBLIC_LOOP     (I2O_LAN_FIBRE_CHANNEL << 4) + 0x00000003
71 #define I2O_LAN_FABRIC          (I2O_LAN_FIBRE_CHANNEL << 4) + 0x00000004
72
73 #define I2O_LAN_EMULATION       0x00000F00
74 #define I2O_LAN_OTHER           0x00000F01
75 #define I2O_LAN_DEFAULT         0xFFFFFFFF
76
77 /* LAN class functions */
78
79 #define LAN_PACKET_SEND         0x3B
80 #define LAN_SDU_SEND            0x3D
81 #define LAN_RECEIVE_POST        0x3E
82 #define LAN_RESET               0x35
83 #define LAN_SUSPEND             0x37
84
85 /* LAN DetailedStatusCode defines */
86 #define I2O_LAN_DSC_SUCCESS                     0x00
87 #define I2O_LAN_DSC_DEVICE_FAILURE              0x01
88 #define I2O_LAN_DSC_DESTINATION_NOT_FOUND       0x02
89 #define I2O_LAN_DSC_TRANSMIT_ERROR              0x03
90 #define I2O_LAN_DSC_TRANSMIT_ABORTED            0x04
91 #define I2O_LAN_DSC_RECEIVE_ERROR               0x05
92 #define I2O_LAN_DSC_RECEIVE_ABORTED             0x06
93 #define I2O_LAN_DSC_DMA_ERROR                   0x07
94 #define I2O_LAN_DSC_BAD_PACKET_DETECTED         0x08
95 #define I2O_LAN_DSC_OUT_OF_MEMORY               0x09
96 #define I2O_LAN_DSC_BUCKET_OVERRUN              0x0A
97 #define I2O_LAN_DSC_IOP_INTERNAL_ERROR          0x0B
98 #define I2O_LAN_DSC_CANCELED                    0x0C
99 #define I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT 0x0D
100 #define I2O_LAN_DSC_DEST_ADDRESS_DETECTED       0x0E
101 #define I2O_LAN_DSC_DEST_ADDRESS_OMITTED        0x0F
102 #define I2O_LAN_DSC_PARTIAL_PACKET_RETURNED     0x10
103 #define I2O_LAN_DSC_SUSPENDED                   0x11
104
105 struct i2o_packet_info {
106         u32 offset:24;
107         u32 flags:8;
108         u32 len:24;
109         u32 status:8;
110 };
111
112 struct i2o_bucket_descriptor {
113         u32 context;            /* FIXME: 64bit support */
114         struct i2o_packet_info packet_info[1];
115 };
116
117 /* Event Indicator Mask Flags for LAN OSM */
118
119 #define I2O_LAN_EVT_LINK_DOWN           0x01
120 #define I2O_LAN_EVT_LINK_UP             0x02
121 #define I2O_LAN_EVT_MEDIA_CHANGE        0x04
122
123 #include <linux/netdevice.h>
124 #include <linux/fddidevice.h>
125
126 struct i2o_lan_local {
127         u8 unit;
128         struct i2o_device *i2o_dev;
129
130         struct fddi_statistics stats;   /* see also struct net_device_stats */
131         unsigned short (*type_trans) (struct sk_buff *, struct net_device *);
132         atomic_t buckets_out;   /* nbr of unused buckets on DDM */
133         atomic_t tx_out;        /* outstanding TXes */
134         u8 tx_count;            /* packets in one TX message frame */
135         u16 tx_max_out;         /* DDM's Tx queue len */
136         u8 sgl_max;             /* max SGLs in one message frame */
137         u32 m;                  /* IOP address of the batch msg frame */
138
139         struct work_struct i2o_batch_send_task;
140         int send_active;
141         struct sk_buff **i2o_fbl;       /* Free bucket list (to reuse skbs) */
142         int i2o_fbl_tail;
143         spinlock_t fbl_lock;
144
145         spinlock_t tx_lock;
146
147         u32 max_size_mc_table;  /* max number of multicast addresses */
148
149         /* LAN OSM configurable parameters are here: */
150
151         u16 max_buckets_out;    /* max nbr of buckets to send to DDM */
152         u16 bucket_thresh;      /* send more when this many used */
153         u16 rx_copybreak;
154
155         u8 tx_batch_mode;       /* Set when using batch mode sends */
156         u32 i2o_event_mask;     /* To turn on interesting event flags */
157 };
158
159 #endif                          /* _I2O_LAN_H */