Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / drivers / s390 / net / qeth.h
1 #ifndef __QETH_H__
2 #define __QETH_H__
3
4 #include <linux/if.h>
5 #include <linux/if_arp.h>
6
7 #include <linux/if_tr.h>
8 #include <linux/trdevice.h>
9 #include <linux/etherdevice.h>
10 #include <linux/if_vlan.h>
11 #include <linux/ctype.h>
12
13 #include <net/ipv6.h>
14 #include <linux/in6.h>
15 #include <net/if_inet6.h>
16 #include <net/addrconf.h>
17
18
19 #include <linux/bitops.h>
20
21 #include <asm/debug.h>
22 #include <asm/qdio.h>
23 #include <asm/ccwdev.h>
24 #include <asm/ccwgroup.h>
25
26 #include "qeth_mpc.h"
27
28 #ifdef CONFIG_QETH_IPV6
29 #define QETH_VERSION_IPV6       ":IPv6"
30 #else
31 #define QETH_VERSION_IPV6       ""
32 #endif
33 #ifdef CONFIG_QETH_VLAN
34 #define QETH_VERSION_VLAN       ":VLAN"
35 #else
36 #define QETH_VERSION_VLAN       ""
37 #endif
38
39 /**
40  * Debug Facility stuff
41  */
42 #define QETH_DBF_SETUP_NAME "qeth_setup"
43 #define QETH_DBF_SETUP_LEN 8
44 #define QETH_DBF_SETUP_PAGES 8
45 #define QETH_DBF_SETUP_NR_AREAS 1
46 #define QETH_DBF_SETUP_LEVEL 5
47
48 #define QETH_DBF_MISC_NAME "qeth_misc"
49 #define QETH_DBF_MISC_LEN 128
50 #define QETH_DBF_MISC_PAGES 2
51 #define QETH_DBF_MISC_NR_AREAS 1
52 #define QETH_DBF_MISC_LEVEL 2
53
54 #define QETH_DBF_DATA_NAME "qeth_data"
55 #define QETH_DBF_DATA_LEN 96
56 #define QETH_DBF_DATA_PAGES 8
57 #define QETH_DBF_DATA_NR_AREAS 1
58 #define QETH_DBF_DATA_LEVEL 2
59
60 #define QETH_DBF_CONTROL_NAME "qeth_control"
61 #define QETH_DBF_CONTROL_LEN 256
62 #define QETH_DBF_CONTROL_PAGES 8
63 #define QETH_DBF_CONTROL_NR_AREAS 2
64 #define QETH_DBF_CONTROL_LEVEL 5
65
66 #define QETH_DBF_TRACE_NAME "qeth_trace"
67 #define QETH_DBF_TRACE_LEN 8
68 #define QETH_DBF_TRACE_PAGES 4
69 #define QETH_DBF_TRACE_NR_AREAS 2
70 #define QETH_DBF_TRACE_LEVEL 3
71 extern debug_info_t *qeth_dbf_trace;
72
73 #define QETH_DBF_SENSE_NAME "qeth_sense"
74 #define QETH_DBF_SENSE_LEN 64
75 #define QETH_DBF_SENSE_PAGES 2
76 #define QETH_DBF_SENSE_NR_AREAS 1
77 #define QETH_DBF_SENSE_LEVEL 2
78
79 #define QETH_DBF_QERR_NAME "qeth_qerr"
80 #define QETH_DBF_QERR_LEN 8
81 #define QETH_DBF_QERR_PAGES 2
82 #define QETH_DBF_QERR_NR_AREAS 2
83 #define QETH_DBF_QERR_LEVEL 2
84
85 #define QETH_DBF_TEXT(name,level,text) \
86         do { \
87                 debug_text_event(qeth_dbf_##name,level,text); \
88         } while (0)
89
90 #define QETH_DBF_HEX(name,level,addr,len) \
91         do { \
92                 debug_event(qeth_dbf_##name,level,(void*)(addr),len); \
93         } while (0)
94
95 DECLARE_PER_CPU(char[256], qeth_dbf_txt_buf);
96
97 #define QETH_DBF_TEXT_(name,level,text...)                              \
98         do {                                                            \
99                 char* dbf_txt_buf = get_cpu_var(qeth_dbf_txt_buf);      \
100                 sprintf(dbf_txt_buf, text);                             \
101                 debug_text_event(qeth_dbf_##name,level,dbf_txt_buf);    \
102                 put_cpu_var(qeth_dbf_txt_buf);                          \
103         } while (0)
104
105 #define QETH_DBF_SPRINTF(name,level,text...) \
106         do { \
107                 debug_sprintf_event(qeth_dbf_trace, level, ##text ); \
108                 debug_sprintf_event(qeth_dbf_trace, level, text ); \
109         } while (0)
110
111 /**
112  * some more debug stuff
113  */
114 #define PRINTK_HEADER   "qeth: "
115
116 #define HEXDUMP16(importance,header,ptr) \
117 PRINT_##importance(header "%02x %02x %02x %02x  %02x %02x %02x %02x  " \
118                    "%02x %02x %02x %02x  %02x %02x %02x %02x\n", \
119                    *(((char*)ptr)),*(((char*)ptr)+1),*(((char*)ptr)+2), \
120                    *(((char*)ptr)+3),*(((char*)ptr)+4),*(((char*)ptr)+5), \
121                    *(((char*)ptr)+6),*(((char*)ptr)+7),*(((char*)ptr)+8), \
122                    *(((char*)ptr)+9),*(((char*)ptr)+10),*(((char*)ptr)+11), \
123                    *(((char*)ptr)+12),*(((char*)ptr)+13), \
124                    *(((char*)ptr)+14),*(((char*)ptr)+15)); \
125 PRINT_##importance(header "%02x %02x %02x %02x  %02x %02x %02x %02x  " \
126                    "%02x %02x %02x %02x  %02x %02x %02x %02x\n", \
127                    *(((char*)ptr)+16),*(((char*)ptr)+17), \
128                    *(((char*)ptr)+18),*(((char*)ptr)+19), \
129                    *(((char*)ptr)+20),*(((char*)ptr)+21), \
130                    *(((char*)ptr)+22),*(((char*)ptr)+23), \
131                    *(((char*)ptr)+24),*(((char*)ptr)+25), \
132                    *(((char*)ptr)+26),*(((char*)ptr)+27), \
133                    *(((char*)ptr)+28),*(((char*)ptr)+29), \
134                    *(((char*)ptr)+30),*(((char*)ptr)+31));
135
136 static inline void
137 qeth_hex_dump(unsigned char *buf, size_t len)
138 {
139         size_t i;
140
141         for (i = 0; i < len; i++) {
142                 if (i && !(i % 16))
143                         printk("\n");
144                 printk("%02x ", *(buf + i));
145         }
146         printk("\n");
147 }
148
149 #define SENSE_COMMAND_REJECT_BYTE 0
150 #define SENSE_COMMAND_REJECT_FLAG 0x80
151 #define SENSE_RESETTING_EVENT_BYTE 1
152 #define SENSE_RESETTING_EVENT_FLAG 0x80
153
154 /*
155  * Common IO related definitions
156  */
157 extern struct device *qeth_root_dev;
158 extern struct ccw_driver qeth_ccw_driver;
159 extern struct ccwgroup_driver qeth_ccwgroup_driver;
160
161 #define CARD_RDEV(card) card->read.ccwdev
162 #define CARD_WDEV(card) card->write.ccwdev
163 #define CARD_DDEV(card) card->data.ccwdev
164 #define CARD_BUS_ID(card) card->gdev->dev.bus_id
165 #define CARD_RDEV_ID(card) card->read.ccwdev->dev.bus_id
166 #define CARD_WDEV_ID(card) card->write.ccwdev->dev.bus_id
167 #define CARD_DDEV_ID(card) card->data.ccwdev->dev.bus_id
168 #define CHANNEL_ID(channel) channel->ccwdev->dev.bus_id
169
170 #define CARD_FROM_CDEV(cdev) (struct qeth_card *) \
171                 ((struct ccwgroup_device *)cdev->dev.driver_data)\
172                 ->dev.driver_data;
173
174 /**
175  * card stuff
176  */
177 struct qeth_perf_stats {
178         unsigned int bufs_rec;
179         unsigned int bufs_sent;
180
181         unsigned int skbs_sent_pack;
182         unsigned int bufs_sent_pack;
183
184         unsigned int sc_dp_p;
185         unsigned int sc_p_dp;
186         /* qdio_input_handler: number of times called, time spent in */
187         __u64 inbound_start_time;
188         unsigned int inbound_cnt;
189         unsigned int inbound_time;
190         /* qeth_send_packet: number of times called, time spent in */
191         __u64 outbound_start_time;
192         unsigned int outbound_cnt;
193         unsigned int outbound_time;
194         /* qdio_output_handler: number of times called, time spent in */
195         __u64 outbound_handler_start_time;
196         unsigned int outbound_handler_cnt;
197         unsigned int outbound_handler_time;
198         /* number of calls to and time spent in do_QDIO for inbound queue */
199         __u64 inbound_do_qdio_start_time;
200         unsigned int inbound_do_qdio_cnt;
201         unsigned int inbound_do_qdio_time;
202         /* number of calls to and time spent in do_QDIO for outbound queues */
203         __u64 outbound_do_qdio_start_time;
204         unsigned int outbound_do_qdio_cnt;
205         unsigned int outbound_do_qdio_time;
206         /* eddp data */
207         unsigned int large_send_bytes;
208         unsigned int large_send_cnt;
209         unsigned int sg_skbs_sent;
210         unsigned int sg_frags_sent;
211         /* initial values when measuring starts */
212         unsigned long initial_rx_packets;
213         unsigned long initial_tx_packets;
214         /* inbound scatter gather data */
215         unsigned int sg_skbs_rx;
216         unsigned int sg_frags_rx;
217         unsigned int sg_alloc_page_rx;
218 };
219
220 /* Routing stuff */
221 struct qeth_routing_info {
222         enum qeth_routing_types type;
223 };
224
225 /* IPA stuff */
226 struct qeth_ipa_info {
227         __u32 supported_funcs;
228         __u32 enabled_funcs;
229 };
230
231 static inline int
232 qeth_is_ipa_supported(struct qeth_ipa_info *ipa, enum qeth_ipa_funcs func)
233 {
234         return (ipa->supported_funcs & func);
235 }
236
237 static inline int
238 qeth_is_ipa_enabled(struct qeth_ipa_info *ipa, enum qeth_ipa_funcs func)
239 {
240         return (ipa->supported_funcs & ipa->enabled_funcs & func);
241 }
242
243 #define qeth_adp_supported(c,f) \
244         qeth_is_ipa_supported(&c->options.adp, f)
245 #define qeth_adp_enabled(c,f) \
246         qeth_is_ipa_enabled(&c->options.adp, f)
247 #define qeth_is_supported(c,f) \
248         qeth_is_ipa_supported(&c->options.ipa4, f)
249 #define qeth_is_enabled(c,f) \
250         qeth_is_ipa_enabled(&c->options.ipa4, f)
251 #ifdef CONFIG_QETH_IPV6
252 #define qeth_is_supported6(c,f) \
253         qeth_is_ipa_supported(&c->options.ipa6, f)
254 #define qeth_is_enabled6(c,f) \
255         qeth_is_ipa_enabled(&c->options.ipa6, f)
256 #else /* CONFIG_QETH_IPV6 */
257 #define qeth_is_supported6(c,f) 0
258 #define qeth_is_enabled6(c,f) 0
259 #endif /* CONFIG_QETH_IPV6 */
260 #define qeth_is_ipafunc_supported(c,prot,f) \
261          (prot==QETH_PROT_IPV6)? qeth_is_supported6(c,f):qeth_is_supported(c,f)
262 #define qeth_is_ipafunc_enabled(c,prot,f) \
263          (prot==QETH_PROT_IPV6)? qeth_is_enabled6(c,f):qeth_is_enabled(c,f)
264
265
266 #define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x0101
267 #define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x0101
268 #define QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT 0x4108
269 #define QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT 0x5108
270
271 #define QETH_MODELLIST_ARRAY \
272         {{0x1731,0x01,0x1732,0x01,QETH_CARD_TYPE_OSAE,1, \
273         QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \
274         QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \
275         QETH_MAX_QUEUES,0}, \
276         {0x1731,0x05,0x1732,0x05,QETH_CARD_TYPE_IQD,0, \
277         QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT, \
278         QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT, \
279         QETH_MAX_QUEUES,0x103}, \
280         {0x1731,0x06,0x1732,0x06,QETH_CARD_TYPE_OSN,0, \
281         QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \
282         QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \
283         QETH_MAX_QUEUES,0}, \
284         {0,0,0,0,0,0,0,0,0}}
285
286 #define QETH_REAL_CARD          1
287 #define QETH_VLAN_CARD          2
288 #define QETH_BUFSIZE            4096
289
290 /**
291  * some more defs
292  */
293 #define IF_NAME_LEN             16
294 #define QETH_TX_TIMEOUT         100 * HZ
295 #define QETH_RCD_TIMEOUT        60 * HZ
296 #define QETH_HEADER_SIZE        32
297 #define MAX_PORTNO              15
298 #define QETH_FAKE_LL_LEN_ETH    ETH_HLEN
299 #define QETH_FAKE_LL_LEN_TR     (sizeof(struct trh_hdr)-TR_MAXRIFLEN+sizeof(struct trllc))
300 #define QETH_FAKE_LL_V6_ADDR_POS 24
301
302 /*IPv6 address autoconfiguration stuff*/
303 #define UNIQUE_ID_IF_CREATE_ADDR_FAILED 0xfffe
304 #define UNIQUE_ID_NOT_BY_CARD           0x10000
305
306 /*****************************************************************************/
307 /* QDIO queue and buffer handling                                            */
308 /*****************************************************************************/
309 #define QETH_MAX_QUEUES 4
310 #define QETH_IN_BUF_SIZE_DEFAULT 65536
311 #define QETH_IN_BUF_COUNT_DEFAULT 16
312 #define QETH_IN_BUF_COUNT_MIN 8
313 #define QETH_IN_BUF_COUNT_MAX 128
314 #define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12)
315 #define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \
316                 ((card)->qdio.in_buf_pool.buf_count / 2)
317
318 /* buffers we have to be behind before we get a PCI */
319 #define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1)
320 /*enqueued free buffers left before we get a PCI*/
321 #define QETH_PCI_THRESHOLD_B(card) 0
322 /*not used unless the microcode gets patched*/
323 #define QETH_PCI_TIMER_VALUE(card) 3
324
325 #define QETH_MIN_INPUT_THRESHOLD 1
326 #define QETH_MAX_INPUT_THRESHOLD 500
327 #define QETH_MIN_OUTPUT_THRESHOLD 1
328 #define QETH_MAX_OUTPUT_THRESHOLD 300
329
330 /* priority queing */
331 #define QETH_PRIOQ_DEFAULT QETH_NO_PRIO_QUEUEING
332 #define QETH_DEFAULT_QUEUE    2
333 #define QETH_NO_PRIO_QUEUEING 0
334 #define QETH_PRIO_Q_ING_PREC  1
335 #define QETH_PRIO_Q_ING_TOS   2
336 #define IP_TOS_LOWDELAY 0x10
337 #define IP_TOS_HIGHTHROUGHPUT 0x08
338 #define IP_TOS_HIGHRELIABILITY 0x04
339 #define IP_TOS_NOTIMPORTANT 0x02
340
341 /* Packing */
342 #define QETH_LOW_WATERMARK_PACK  2
343 #define QETH_HIGH_WATERMARK_PACK 5
344 #define QETH_WATERMARK_PACK_FUZZ 1
345
346 #define QETH_IP_HEADER_SIZE 40
347
348 /* large receive scatter gather copy break */
349 #define QETH_RX_SG_CB (PAGE_SIZE >> 1)
350
351 struct qeth_hdr_layer3 {
352         __u8  id;
353         __u8  flags;
354         __u16 inbound_checksum; /*TSO:__u16 seqno */
355         __u32 token;            /*TSO: __u32 reserved */
356         __u16 length;
357         __u8  vlan_prio;
358         __u8  ext_flags;
359         __u16 vlan_id;
360         __u16 frame_offset;
361         __u8  dest_addr[16];
362 } __attribute__ ((packed));
363
364 struct qeth_hdr_layer2 {
365         __u8 id;
366         __u8 flags[3];
367         __u8 port_no;
368         __u8 hdr_length;
369         __u16 pkt_length;
370         __u16 seq_no;
371         __u16 vlan_id;
372         __u32 reserved;
373         __u8 reserved2[16];
374 } __attribute__ ((packed));
375
376 struct qeth_hdr_osn {
377         __u8 id;
378         __u8 reserved;
379         __u16 seq_no;
380         __u16 reserved2;
381         __u16 control_flags;
382         __u16 pdu_length;
383         __u8 reserved3[18];
384         __u32 ccid;
385 } __attribute__ ((packed));
386
387 struct qeth_hdr {
388         union {
389                 struct qeth_hdr_layer2 l2;
390                 struct qeth_hdr_layer3 l3;
391                 struct qeth_hdr_osn    osn;
392         } hdr;
393 } __attribute__ ((packed));
394
395 /*TCP Segmentation Offload header*/
396 struct qeth_hdr_ext_tso {
397         __u16 hdr_tot_len;
398         __u8  imb_hdr_no;
399         __u8  reserved;
400         __u8  hdr_type;
401         __u8  hdr_version;
402         __u16 hdr_len;
403         __u32 payload_len;
404         __u16 mss;
405         __u16 dg_hdr_len;
406         __u8  padding[16];
407 } __attribute__ ((packed));
408
409 struct qeth_hdr_tso {
410         struct qeth_hdr hdr;    /*hdr->hdr.l3.xxx*/
411         struct qeth_hdr_ext_tso ext;
412 } __attribute__ ((packed));
413
414
415 /* flags for qeth_hdr.flags */
416 #define QETH_HDR_PASSTHRU 0x10
417 #define QETH_HDR_IPV6     0x80
418 #define QETH_HDR_CAST_MASK 0x07
419 enum qeth_cast_flags {
420         QETH_CAST_UNICAST   = 0x06,
421         QETH_CAST_MULTICAST = 0x04,
422         QETH_CAST_BROADCAST = 0x05,
423         QETH_CAST_ANYCAST   = 0x07,
424         QETH_CAST_NOCAST    = 0x00,
425 };
426
427 enum qeth_layer2_frame_flags {
428         QETH_LAYER2_FLAG_MULTICAST = 0x01,
429         QETH_LAYER2_FLAG_BROADCAST = 0x02,
430         QETH_LAYER2_FLAG_UNICAST   = 0x04,
431         QETH_LAYER2_FLAG_VLAN      = 0x10,
432 };
433
434 enum qeth_header_ids {
435         QETH_HEADER_TYPE_LAYER3 = 0x01,
436         QETH_HEADER_TYPE_LAYER2 = 0x02,
437         QETH_HEADER_TYPE_TSO    = 0x03,
438         QETH_HEADER_TYPE_OSN    = 0x04,
439 };
440 /* flags for qeth_hdr.ext_flags */
441 #define QETH_HDR_EXT_VLAN_FRAME       0x01
442 #define QETH_HDR_EXT_TOKEN_ID         0x02
443 #define QETH_HDR_EXT_INCLUDE_VLAN_TAG 0x04
444 #define QETH_HDR_EXT_SRC_MAC_ADDR     0x08
445 #define QETH_HDR_EXT_CSUM_HDR_REQ     0x10
446 #define QETH_HDR_EXT_CSUM_TRANSP_REQ  0x20
447 #define QETH_HDR_EXT_UDP_TSO          0x40 /*bit off for TCP*/
448
449 static inline int
450 qeth_is_last_sbale(struct qdio_buffer_element *sbale)
451 {
452         return (sbale->flags & SBAL_FLAGS_LAST_ENTRY);
453 }
454
455 enum qeth_qdio_buffer_states {
456         /*
457          * inbound: read out by driver; owned by hardware in order to be filled
458          * outbound: owned by driver in order to be filled
459          */
460         QETH_QDIO_BUF_EMPTY,
461         /*
462          * inbound: filled by hardware; owned by driver in order to be read out
463          * outbound: filled by driver; owned by hardware in order to be sent
464          */
465         QETH_QDIO_BUF_PRIMED,
466 };
467
468 enum qeth_qdio_info_states {
469         QETH_QDIO_UNINITIALIZED,
470         QETH_QDIO_ALLOCATED,
471         QETH_QDIO_ESTABLISHED,
472         QETH_QDIO_CLEANING
473 };
474
475 struct qeth_buffer_pool_entry {
476         struct list_head list;
477         struct list_head init_list;
478         void *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
479 };
480
481 struct qeth_qdio_buffer_pool {
482         struct list_head entry_list;
483         int buf_count;
484 };
485
486 struct qeth_qdio_buffer {
487         struct qdio_buffer *buffer;
488         volatile enum qeth_qdio_buffer_states state;
489         /* the buffer pool entry currently associated to this buffer */
490         struct qeth_buffer_pool_entry *pool_entry;
491 };
492
493 struct qeth_qdio_q {
494         struct qdio_buffer qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
495         struct qeth_qdio_buffer bufs[QDIO_MAX_BUFFERS_PER_Q];
496         /*
497          * buf_to_init means "buffer must be initialized by driver and must
498          * be made available for hardware" -> state is set to EMPTY
499          */
500         volatile int next_buf_to_init;
501 } __attribute__ ((aligned(256)));
502
503 /* possible types of qeth large_send support */
504 enum qeth_large_send_types {
505         QETH_LARGE_SEND_NO,
506         QETH_LARGE_SEND_EDDP,
507         QETH_LARGE_SEND_TSO,
508 };
509
510 struct qeth_qdio_out_buffer {
511         struct qdio_buffer *buffer;
512         atomic_t state;
513         volatile int next_element_to_fill;
514         struct sk_buff_head skb_list;
515         struct list_head ctx_list;
516 };
517
518 struct qeth_card;
519
520 enum qeth_out_q_states {
521        QETH_OUT_Q_UNLOCKED,
522        QETH_OUT_Q_LOCKED,
523        QETH_OUT_Q_LOCKED_FLUSH,
524 };
525
526 struct qeth_qdio_out_q {
527         struct qdio_buffer qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
528         struct qeth_qdio_out_buffer bufs[QDIO_MAX_BUFFERS_PER_Q];
529         int queue_no;
530         struct qeth_card *card;
531         atomic_t state;
532         volatile int do_pack;
533         /*
534          * index of buffer to be filled by driver; state EMPTY or PACKING
535          */
536         volatile int next_buf_to_fill;
537         /*
538          * number of buffers that are currently filled (PRIMED)
539          * -> these buffers are hardware-owned
540          */
541         atomic_t used_buffers;
542         /* indicates whether PCI flag must be set (or if one is outstanding) */
543         atomic_t set_pci_flags_count;
544 } __attribute__ ((aligned(256)));
545
546 struct qeth_qdio_info {
547         atomic_t state;
548         /* input */
549         struct qeth_qdio_q *in_q;
550         struct qeth_qdio_buffer_pool in_buf_pool;
551         struct qeth_qdio_buffer_pool init_pool;
552         int in_buf_size;
553
554         /* output */
555         int no_out_queues;
556         struct qeth_qdio_out_q **out_qs;
557
558         /* priority queueing */
559         int do_prio_queueing;
560         int default_out_queue;
561 };
562
563 enum qeth_send_errors {
564         QETH_SEND_ERROR_NONE,
565         QETH_SEND_ERROR_LINK_FAILURE,
566         QETH_SEND_ERROR_RETRY,
567         QETH_SEND_ERROR_KICK_IT,
568 };
569
570 #define QETH_ETH_MAC_V4      0x0100 /* like v4 */
571 #define QETH_ETH_MAC_V6      0x3333 /* like v6 */
572 /* tr mc mac is longer, but that will be enough to detect mc frames */
573 #define QETH_TR_MAC_NC       0xc000 /* non-canonical */
574 #define QETH_TR_MAC_C        0x0300 /* canonical */
575
576 #define DEFAULT_ADD_HHLEN 0
577 #define MAX_ADD_HHLEN 1024
578
579 /**
580  * buffer stuff for read channel
581  */
582 #define QETH_CMD_BUFFER_NO      8
583
584 /**
585  *  channel state machine
586  */
587 enum qeth_channel_states {
588         CH_STATE_UP,
589         CH_STATE_DOWN,
590         CH_STATE_ACTIVATING,
591         CH_STATE_HALTED,
592         CH_STATE_STOPPED,
593         CH_STATE_RCD,
594         CH_STATE_RCD_DONE,
595 };
596 /**
597  * card state machine
598  */
599 enum qeth_card_states {
600         CARD_STATE_DOWN,
601         CARD_STATE_HARDSETUP,
602         CARD_STATE_SOFTSETUP,
603         CARD_STATE_UP,
604         CARD_STATE_RECOVER,
605 };
606
607 /**
608  * Protocol versions
609  */
610 enum qeth_prot_versions {
611         QETH_PROT_IPV4 = 0x0004,
612         QETH_PROT_IPV6 = 0x0006,
613 };
614
615 enum qeth_ip_types {
616         QETH_IP_TYPE_NORMAL,
617         QETH_IP_TYPE_VIPA,
618         QETH_IP_TYPE_RXIP,
619         QETH_IP_TYPE_DEL_ALL_MC,
620 };
621
622 enum qeth_cmd_buffer_state {
623         BUF_STATE_FREE,
624         BUF_STATE_LOCKED,
625         BUF_STATE_PROCESSED,
626 };
627 /**
628  * IP address and multicast list
629  */
630 struct qeth_ipaddr {
631         struct list_head entry;
632         enum qeth_ip_types type;
633         enum qeth_ipa_setdelip_flags set_flags;
634         enum qeth_ipa_setdelip_flags del_flags;
635         int is_multicast;
636         volatile int users;
637         enum qeth_prot_versions proto;
638         unsigned char mac[OSA_ADDR_LEN];
639         union {
640                 struct {
641                         unsigned int addr;
642                         unsigned int mask;
643                 } a4;
644                 struct {
645                         struct in6_addr addr;
646                         unsigned int pfxlen;
647                 } a6;
648         } u;
649 };
650
651 struct qeth_ipato_entry {
652         struct list_head entry;
653         enum qeth_prot_versions proto;
654         char addr[16];
655         int mask_bits;
656 };
657
658 struct qeth_ipato {
659         int enabled;
660         int invert4;
661         int invert6;
662         struct list_head entries;
663 };
664
665 struct qeth_channel;
666
667 struct qeth_cmd_buffer {
668         enum qeth_cmd_buffer_state state;
669         struct qeth_channel *channel;
670         unsigned char *data;
671         int rc;
672         void (*callback) (struct qeth_channel *, struct qeth_cmd_buffer *);
673 };
674
675
676 /**
677  * definition of a qeth channel, used for read and write
678  */
679 struct qeth_channel {
680         enum qeth_channel_states state;
681         struct ccw1 ccw;
682         spinlock_t iob_lock;
683         wait_queue_head_t wait_q;
684         struct tasklet_struct irq_tasklet;
685         struct ccw_device *ccwdev;
686 /*command buffer for control data*/
687         struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO];
688         atomic_t irq_pending;
689         volatile int io_buf_no;
690         volatile int buf_no;
691 };
692
693 /**
694  *  OSA card related definitions
695  */
696 struct qeth_token {
697         __u32 issuer_rm_w;
698         __u32 issuer_rm_r;
699         __u32 cm_filter_w;
700         __u32 cm_filter_r;
701         __u32 cm_connection_w;
702         __u32 cm_connection_r;
703         __u32 ulp_filter_w;
704         __u32 ulp_filter_r;
705         __u32 ulp_connection_w;
706         __u32 ulp_connection_r;
707 };
708
709 struct qeth_seqno {
710         __u32 trans_hdr;
711         __u32 pdu_hdr;
712         __u32 pdu_hdr_ack;
713         __u16 ipa;
714         __u32 pkt_seqno;
715 };
716
717 struct qeth_reply {
718         struct list_head list;
719         wait_queue_head_t wait_q;
720         int (*callback)(struct qeth_card *,struct qeth_reply *,unsigned long);
721         u32 seqno;
722         unsigned long offset;
723         atomic_t received;
724         int rc;
725         void *param;
726         struct qeth_card *card;
727         atomic_t refcnt;
728 };
729
730
731 struct qeth_card_blkt {
732         int time_total;
733         int inter_packet;
734         int inter_packet_jumbo;
735 };
736
737 #define QETH_BROADCAST_WITH_ECHO    0x01
738 #define QETH_BROADCAST_WITHOUT_ECHO 0x02
739 #define QETH_LAYER2_MAC_READ        0x01
740 #define QETH_LAYER2_MAC_REGISTERED  0x02
741 struct qeth_card_info {
742         unsigned short unit_addr2;
743         unsigned short cula;
744         unsigned short chpid;
745         __u16 func_level;
746         char mcl_level[QETH_MCL_LENGTH + 1];
747         int guestlan;
748         int mac_bits;
749         int portname_required;
750         int portno;
751         char portname[9];
752         enum qeth_card_types type;
753         enum qeth_link_types link_type;
754         int is_multicast_different;
755         int initial_mtu;
756         int max_mtu;
757         int broadcast_capable;
758         int unique_id;
759         struct qeth_card_blkt blkt;
760         __u32 csum_mask;
761         enum qeth_ipa_promisc_modes promisc_mode;
762 };
763
764 struct qeth_card_options {
765         struct qeth_routing_info route4;
766         struct qeth_ipa_info ipa4;
767         struct qeth_ipa_info adp; /*Adapter parameters*/
768 #ifdef CONFIG_QETH_IPV6
769         struct qeth_routing_info route6;
770         struct qeth_ipa_info ipa6;
771 #endif /* QETH_IPV6 */
772         enum qeth_checksum_types checksum_type;
773         int broadcast_mode;
774         int macaddr_mode;
775         int fake_broadcast;
776         int add_hhlen;
777         int fake_ll;
778         int layer2;
779         enum qeth_large_send_types large_send;
780         int performance_stats;
781         int rx_sg_cb;
782 };
783
784 /*
785  * thread bits for qeth_card thread masks
786  */
787 enum qeth_threads {
788         QETH_SET_IP_THREAD  = 1,
789         QETH_RECOVER_THREAD = 2,
790         QETH_SET_PROMISC_MODE_THREAD = 4,
791 };
792
793 struct qeth_osn_info {
794         int (*assist_cb)(struct net_device *dev, void *data);
795         int (*data_cb)(struct sk_buff *skb);
796 };
797
798 struct qeth_card {
799         struct list_head list;
800         enum qeth_card_states state;
801         int lan_online;
802         spinlock_t lock;
803 /*hardware and sysfs stuff*/
804         struct ccwgroup_device *gdev;
805         struct qeth_channel read;
806         struct qeth_channel write;
807         struct qeth_channel data;
808
809         struct net_device *dev;
810         struct net_device_stats stats;
811
812         struct qeth_card_info info;
813         struct qeth_token token;
814         struct qeth_seqno seqno;
815         struct qeth_card_options options;
816
817         wait_queue_head_t wait_q;
818 #ifdef CONFIG_QETH_VLAN
819         spinlock_t vlanlock;
820         struct vlan_group *vlangrp;
821 #endif
822         struct work_struct kernel_thread_starter;
823         spinlock_t thread_mask_lock;
824         volatile unsigned long thread_start_mask;
825         volatile unsigned long thread_allowed_mask;
826         volatile unsigned long thread_running_mask;
827         spinlock_t ip_lock;
828         struct list_head ip_list;
829         struct list_head *ip_tbd_list;
830         struct qeth_ipato ipato;
831         struct list_head cmd_waiter_list;
832         /* QDIO buffer handling */
833         struct qeth_qdio_info qdio;
834         struct qeth_perf_stats perf_stats;
835         int use_hard_stop;
836         int (*orig_hard_header)(struct sk_buff *,struct net_device *,
837                                 unsigned short,void *,void *,unsigned);
838         struct qeth_osn_info osn_info;
839         atomic_t force_alloc_skb;
840 };
841
842 struct qeth_card_list_struct {
843         struct list_head list;
844         rwlock_t rwlock;
845 };
846
847 extern struct qeth_card_list_struct qeth_card_list;
848
849 /*notifier list */
850 struct qeth_notify_list_struct {
851         struct list_head list;
852         struct task_struct *task;
853         int signum;
854 };
855 extern spinlock_t qeth_notify_lock;
856 extern struct list_head qeth_notify_list;
857
858 /*some helper functions*/
859
860 #define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
861
862 static inline __u8
863 qeth_get_ipa_adp_type(enum qeth_link_types link_type)
864 {
865         switch (link_type) {
866         case QETH_LINK_TYPE_HSTR:
867                 return 2;
868         default:
869                 return 1;
870         }
871 }
872
873 static inline struct sk_buff *
874 qeth_realloc_headroom(struct qeth_card *card, struct sk_buff *skb, int size)
875 {
876         struct sk_buff *new_skb = skb;
877
878         if (skb_headroom(skb) >= size)
879                 return skb;
880         new_skb = skb_realloc_headroom(skb, size);
881         if (!new_skb) 
882                 PRINT_ERR("Could not realloc headroom for qeth_hdr "
883                           "on interface %s", QETH_CARD_IFNAME(card));
884         return new_skb;
885 }
886
887 static inline struct sk_buff *
888 qeth_pskb_unshare(struct sk_buff *skb, gfp_t pri)
889 {
890         struct sk_buff *nskb;
891         if (!skb_cloned(skb))
892                 return skb;
893         nskb = skb_copy(skb, pri);
894         return nskb;
895 }
896
897 static inline void *
898 qeth_push_skb(struct qeth_card *card, struct sk_buff *skb, int size)
899 {
900         void *hdr;
901
902         hdr = (void *) skb_push(skb, size);
903         /*
904          * sanity check, the Linux memory allocation scheme should
905          * never present us cases like this one (the qdio header size plus
906          * the first 40 bytes of the paket cross a 4k boundary)
907          */
908         if ((((unsigned long) hdr) & (~(PAGE_SIZE - 1))) !=
909             (((unsigned long) hdr + size +
910               QETH_IP_HEADER_SIZE) & (~(PAGE_SIZE - 1)))) {
911                 PRINT_ERR("Misaligned packet on interface %s. Discarded.",
912                           QETH_CARD_IFNAME(card));
913                 return NULL;
914         }
915         return hdr;
916 }
917
918
919 static inline int
920 qeth_get_hlen(__u8 link_type)
921 {
922 #ifdef CONFIG_QETH_IPV6
923         switch (link_type) {
924         case QETH_LINK_TYPE_HSTR:
925         case QETH_LINK_TYPE_LANE_TR:
926                 return sizeof(struct qeth_hdr_tso) + TR_HLEN;
927         default:
928 #ifdef CONFIG_QETH_VLAN
929                 return sizeof(struct qeth_hdr_tso) + VLAN_ETH_HLEN;
930 #else
931                 return sizeof(struct qeth_hdr_tso) + ETH_HLEN;
932 #endif
933         }
934 #else  /* CONFIG_QETH_IPV6 */
935 #ifdef CONFIG_QETH_VLAN
936         return sizeof(struct qeth_hdr_tso) + VLAN_HLEN;
937 #else
938         return sizeof(struct qeth_hdr_tso);
939 #endif
940 #endif /* CONFIG_QETH_IPV6 */
941 }
942
943 static inline unsigned short
944 qeth_get_netdev_flags(struct qeth_card *card)
945 {
946         if (card->options.layer2 &&
947            (card->info.type == QETH_CARD_TYPE_OSAE))
948                 return 0;
949         switch (card->info.type) {
950         case QETH_CARD_TYPE_IQD:
951         case QETH_CARD_TYPE_OSN:
952                 return IFF_NOARP;
953 #ifdef CONFIG_QETH_IPV6
954         default:
955                 return 0;
956 #else
957         default:
958                 return IFF_NOARP;
959 #endif
960         }
961 }
962
963 static inline int
964 qeth_get_initial_mtu_for_card(struct qeth_card * card)
965 {
966         switch (card->info.type) {
967         case QETH_CARD_TYPE_UNKNOWN:
968                 return 1500;
969         case QETH_CARD_TYPE_IQD:
970                 return card->info.max_mtu;
971         case QETH_CARD_TYPE_OSAE:
972                 switch (card->info.link_type) {
973                 case QETH_LINK_TYPE_HSTR:
974                 case QETH_LINK_TYPE_LANE_TR:
975                         return 2000;
976                 default:
977                         return 1492;
978                 }
979         default:
980                 return 1500;
981         }
982 }
983
984 static inline int
985 qeth_get_max_mtu_for_card(int cardtype)
986 {
987         switch (cardtype) {
988
989         case QETH_CARD_TYPE_UNKNOWN:
990         case QETH_CARD_TYPE_OSAE:
991         case QETH_CARD_TYPE_OSN:
992                 return 61440;
993         case QETH_CARD_TYPE_IQD:
994                 return 57344;
995         default:
996                 return 1500;
997         }
998 }
999
1000 static inline int
1001 qeth_get_mtu_out_of_mpc(int cardtype)
1002 {
1003         switch (cardtype) {
1004         case QETH_CARD_TYPE_IQD:
1005                 return 1;
1006         default:
1007                 return 0;
1008         }
1009 }
1010
1011 static inline int
1012 qeth_get_mtu_outof_framesize(int framesize)
1013 {
1014         switch (framesize) {
1015         case 0x4000:
1016                 return 8192;
1017         case 0x6000:
1018                 return 16384;
1019         case 0xa000:
1020                 return 32768;
1021         case 0xffff:
1022                 return 57344;
1023         default:
1024                 return 0;
1025         }
1026 }
1027
1028 static inline int
1029 qeth_mtu_is_valid(struct qeth_card * card, int mtu)
1030 {
1031         switch (card->info.type) {
1032         case QETH_CARD_TYPE_OSAE:
1033                 return ((mtu >= 576) && (mtu <= 61440));
1034         case QETH_CARD_TYPE_IQD:
1035                 return ((mtu >= 576) &&
1036                         (mtu <= card->info.max_mtu + 4096 - 32));
1037         case QETH_CARD_TYPE_OSN:
1038         case QETH_CARD_TYPE_UNKNOWN:
1039         default:
1040                 return 1;
1041         }
1042 }
1043
1044 static inline int
1045 qeth_get_arphdr_type(int cardtype, int linktype)
1046 {
1047         switch (cardtype) {
1048         case QETH_CARD_TYPE_OSAE:
1049         case QETH_CARD_TYPE_OSN:
1050                 switch (linktype) {
1051                 case QETH_LINK_TYPE_LANE_TR:
1052                 case QETH_LINK_TYPE_HSTR:
1053                         return ARPHRD_IEEE802_TR;
1054                 default:
1055                         return ARPHRD_ETHER;
1056                 }
1057         case QETH_CARD_TYPE_IQD:
1058         default:
1059                 return ARPHRD_ETHER;
1060         }
1061 }
1062
1063 static inline int
1064 qeth_get_micros(void)
1065 {
1066         return (int) (get_clock() >> 12);
1067 }
1068
1069 static inline int
1070 qeth_get_qdio_q_format(struct qeth_card *card)
1071 {
1072         switch (card->info.type) {
1073         case QETH_CARD_TYPE_IQD:
1074                 return 2;
1075         default:
1076                 return 0;
1077         }
1078 }
1079
1080 static inline int
1081 qeth_isxdigit(char * buf)
1082 {
1083         while (*buf) {
1084                 if (!isxdigit(*buf++))
1085                         return 0;
1086         }
1087         return 1;
1088 }
1089
1090 static inline void
1091 qeth_ipaddr4_to_string(const __u8 *addr, char *buf)
1092 {
1093         sprintf(buf, "%i.%i.%i.%i", addr[0], addr[1], addr[2], addr[3]);
1094 }
1095
1096 static inline int
1097 qeth_string_to_ipaddr4(const char *buf, __u8 *addr)
1098 {
1099         int count = 0, rc = 0;
1100         int in[4];
1101         char c;
1102
1103         rc = sscanf(buf, "%u.%u.%u.%u%c",
1104                     &in[0], &in[1], &in[2], &in[3], &c);
1105         if (rc != 4 && (rc != 5 || c != '\n'))
1106                 return -EINVAL;
1107         for (count = 0; count < 4; count++) {
1108                 if (in[count] > 255)
1109                         return -EINVAL;
1110                 addr[count] = in[count];
1111         }
1112         return 0;
1113 }
1114
1115 static inline void
1116 qeth_ipaddr6_to_string(const __u8 *addr, char *buf)
1117 {
1118         sprintf(buf, "%02x%02x:%02x%02x:%02x%02x:%02x%02x"
1119                      ":%02x%02x:%02x%02x:%02x%02x:%02x%02x",
1120                      addr[0], addr[1], addr[2], addr[3],
1121                      addr[4], addr[5], addr[6], addr[7],
1122                      addr[8], addr[9], addr[10], addr[11],
1123                      addr[12], addr[13], addr[14], addr[15]);
1124 }
1125
1126 static inline int
1127 qeth_string_to_ipaddr6(const char *buf, __u8 *addr)
1128 {
1129         const char *end, *end_tmp, *start;
1130         __u16 *in;
1131         char num[5];
1132         int num2, cnt, out, found, save_cnt;
1133         unsigned short in_tmp[8] = {0, };
1134
1135         cnt = out = found = save_cnt = num2 = 0;
1136         end = start = buf;
1137         in = (__u16 *) addr;
1138         memset(in, 0, 16);
1139         while (*end) {
1140                 end = strchr(start,':');
1141                 if (end == NULL) {
1142                         end = buf + strlen(buf);
1143                         if ((end_tmp = strchr(start, '\n')) != NULL)
1144                                 end = end_tmp;
1145                         out = 1;
1146                 }
1147                 if ((end - start)) {
1148                         memset(num, 0, 5);
1149                         if ((end - start) > 4)
1150                                 return -EINVAL;
1151                         memcpy(num, start, end - start);
1152                         if (!qeth_isxdigit(num))
1153                                 return -EINVAL;
1154                         sscanf(start, "%x", &num2);
1155                         if (found)
1156                                 in_tmp[save_cnt++] = num2;
1157                         else
1158                                 in[cnt++] = num2;
1159                         if (out)
1160                                 break;
1161                 } else {
1162                         if (found)
1163                                 return -EINVAL;
1164                         found = 1;
1165                 }
1166                 start = ++end;
1167         }
1168         if (cnt + save_cnt > 8)
1169                 return -EINVAL;
1170         cnt = 7;
1171         while (save_cnt)
1172                 in[cnt--] = in_tmp[--save_cnt];
1173         return 0;
1174 }
1175
1176 static inline void
1177 qeth_ipaddr_to_string(enum qeth_prot_versions proto, const __u8 *addr,
1178                       char *buf)
1179 {
1180         if (proto == QETH_PROT_IPV4)
1181                 qeth_ipaddr4_to_string(addr, buf);
1182         else if (proto == QETH_PROT_IPV6)
1183                 qeth_ipaddr6_to_string(addr, buf);
1184 }
1185
1186 static inline int
1187 qeth_string_to_ipaddr(const char *buf, enum qeth_prot_versions proto,
1188                       __u8 *addr)
1189 {
1190         if (proto == QETH_PROT_IPV4)
1191                 return qeth_string_to_ipaddr4(buf, addr);
1192         else if (proto == QETH_PROT_IPV6)
1193                 return qeth_string_to_ipaddr6(buf, addr);
1194         else
1195                 return -EINVAL;
1196 }
1197
1198 extern int
1199 qeth_setrouting_v4(struct qeth_card *);
1200 extern int
1201 qeth_setrouting_v6(struct qeth_card *);
1202
1203 extern int
1204 qeth_add_ipato_entry(struct qeth_card *, struct qeth_ipato_entry *);
1205
1206 extern void
1207 qeth_del_ipato_entry(struct qeth_card *, enum qeth_prot_versions, u8 *, int);
1208
1209 extern int
1210 qeth_add_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1211
1212 extern void
1213 qeth_del_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1214
1215 extern int
1216 qeth_add_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1217
1218 extern void
1219 qeth_del_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1220
1221 extern int
1222 qeth_notifier_register(struct task_struct *, int );
1223
1224 extern int
1225 qeth_notifier_unregister(struct task_struct * );
1226
1227 extern void
1228 qeth_schedule_recovery(struct qeth_card *);
1229
1230 extern int
1231 qeth_realloc_buffer_pool(struct qeth_card *, int);
1232
1233 extern int
1234 qeth_set_large_send(struct qeth_card *, enum qeth_large_send_types);
1235
1236 extern void
1237 qeth_fill_header(struct qeth_card *, struct qeth_hdr *,
1238                  struct sk_buff *, int, int);
1239 extern void
1240 qeth_flush_buffers(struct qeth_qdio_out_q *, int, int, int);
1241
1242 extern int
1243 qeth_osn_assist(struct net_device *, void *, int);
1244
1245 extern int
1246 qeth_osn_register(unsigned char *read_dev_no,
1247                  struct net_device **,
1248                  int (*assist_cb)(struct net_device *, void *),
1249                  int (*data_cb)(struct sk_buff *));
1250
1251 extern void
1252 qeth_osn_deregister(struct net_device *);
1253
1254 #endif /* __QETH_H__ */