OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [s390/] [net/] [qeth.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * linux/drivers/s390/net/qeth.h
3
 *
4
 * Linux on zSeries OSA Express and HiperSockets support
5
 *
6
 * Copyright 2000,2003 IBM Corporation
7
 * Author(s): Utz Bacher <utz.bacher@de.ibm.com>
8
 *
9
 */
10
 
11
#ifndef __QETH_H__
12
#define __QETH_H__
13
 
14
#include <asm/qdio.h>
15
 
16
#define QETH_NAME " qeth"
17
 
18
#define VERSION_QETH_H "$Revision: 1.1.1.1 $"
19
 
20
/******************** CONFIG STUFF ***********************/
21
//#define QETH_DBF_LIKE_HELL
22
 
23
#ifdef CONFIG_QETH_IPV6
24
#define QETH_IPV6
25
#define QETH_VERSION_IPV6 ":IPv6"
26
#else
27
#define QETH_VERSION_IPV6 ""
28
#endif /* CONFIG_QETH_IPV6 */
29
 
30
#ifdef CONFIG_QETH_VLAN
31
#define QETH_VLAN
32
#define QETH_VERSION_VLAN ":VLAN"
33
#else
34
#define QETH_VERSION_VLAN ""
35
#endif /* CONFIG_QETH_VLAN */
36
 
37
/* these values match CHECKSUM_* in include/linux/skbuff.h */
38
#define SW_CHECKSUMMING 0
39
#define HW_CHECKSUMMING 1
40
#define NO_CHECKSUMMING 2
41
 
42
#define QETH_CHECKSUM_DEFAULT NO_CHECKSUMMING
43
 
44
#define QETH_DEFAULT_QUEUE 2
45
 
46
/******************** CONFIG STUFF END ***********************/
47
/********************* TUNING STUFF **************************/
48
#define HIGH_WATERMARK_PACK             5
49
#define LOW_WATERMARK_PACK              2
50
#define WATERMARK_FUZZ                  2
51
 
52
#define QETH_MAX_INPUT_THRESHOLD 500
53
#define QETH_MAX_OUTPUT_THRESHOLD 300 /* ? */
54
 
55
/* only the MAX values are used */
56
#define QETH_MIN_INPUT_THRESHOLD 1
57
#define QETH_MIN_OUTPUT_THRESHOLD 1
58
 
59
#define QETH_REQUEUE_THRESHOLD (card->options.inbound_buffer_count/4)
60
 
61
#ifdef CONFIG_QETH_PERF_STATS
62
#define QETH_PERFORMANCE_STATS
63
#endif /* CONFIG_QETH_PERF_STATS */
64
 
65
#define QETH_VERBOSE_LEVEL 7
66
 
67
#define PCI_THRESHOLD_A (card->options.inbound_buffer_count+1) /* buffers we have to be behind
68
                             before we get a PCI */
69
#define PCI_THRESHOLD_B 0 /* enqueued free buffers left before we get a PCI */
70
#define PCI_TIMER_VALUE 3 /* not used, unless the microcode gets patched */
71
 
72
#define DEFAULT_SPARE_BUFFERS 0
73
#define MAX_SPARE_BUFFERS 1024
74
#define SPAREBUF_MASK 65536
75
#define MAX_PORTNO 15
76
 
77
#define QETH_PROCFILE_NAME "qeth"
78
#define QETH_PERF_PROCFILE_NAME "qeth_perf"
79
#define QETH_IPA_PROCFILE_NAME "qeth_ipa_takeover"
80
 
81
#define SEND_RETRIES_ALLOWED 5
82
#define QETH_ROUTING_ATTEMPTS 2
83
 
84
#define QETH_HARDSETUP_LAPS 5
85
#define QETH_HARDSETUP_CLEAR_LAPS 3
86
#define QETH_RECOVERY_HARDSETUP_RETRY 2
87
 
88
/************************* DEBUG FACILITY STUFF *********************/
89
 
90
#define QETH_DBF_HEX(ex,name,level,addr,len) \
91
        do { \
92
        if (ex) \
93
                debug_exception(qeth_dbf_##name,level,(void*)addr,len); \
94
        else \
95
                debug_event(qeth_dbf_##name,level,(void*)addr,len); \
96
        } while (0)
97
#define QETH_DBF_TEXT(ex,name,level,text) \
98
        do { \
99
        if (ex) \
100
                debug_text_exception(qeth_dbf_##name,level,text); \
101
        else \
102
                debug_text_event(qeth_dbf_##name,level,text); \
103
        } while (0)
104
 
105
#define QETH_DBF_HEX0(ex,name,addr,len) QETH_DBF_HEX(ex,name,0,addr,len)
106
#define QETH_DBF_HEX1(ex,name,addr,len) QETH_DBF_HEX(ex,name,1,addr,len)
107
#define QETH_DBF_HEX2(ex,name,addr,len) QETH_DBF_HEX(ex,name,2,addr,len)
108
#define QETH_DBF_HEX3(ex,name,addr,len) QETH_DBF_HEX(ex,name,3,addr,len)
109
#define QETH_DBF_HEX4(ex,name,addr,len) QETH_DBF_HEX(ex,name,4,addr,len)
110
#define QETH_DBF_HEX5(ex,name,addr,len) QETH_DBF_HEX(ex,name,5,addr,len)
111
#define QETH_DBF_HEX6(ex,name,addr,len) QETH_DBF_HEX(ex,name,6,addr,len)
112
#ifdef QETH_DBF_LIKE_HELL
113
#endif /* QETH_DBF_LIKE_HELL */
114
 
115
#define QETH_DBF_TEXT0(ex,name,text) QETH_DBF_TEXT(ex,name,0,text)
116
#define QETH_DBF_TEXT1(ex,name,text) QETH_DBF_TEXT(ex,name,1,text)
117
#define QETH_DBF_TEXT2(ex,name,text) QETH_DBF_TEXT(ex,name,2,text)
118
#define QETH_DBF_TEXT3(ex,name,text) QETH_DBF_TEXT(ex,name,3,text)
119
#define QETH_DBF_TEXT4(ex,name,text) QETH_DBF_TEXT(ex,name,4,text)
120
#define QETH_DBF_TEXT5(ex,name,text) QETH_DBF_TEXT(ex,name,5,text)
121
#define QETH_DBF_TEXT6(ex,name,text) QETH_DBF_TEXT(ex,name,6,text)
122
#ifdef QETH_DBF_LIKE_HELL
123
#endif /* QETH_DBF_LIKE_HELL */
124
 
125
#define QETH_DBF_SETUP_NAME "qeth_setup"
126
#define QETH_DBF_SETUP_LEN 8
127
#define QETH_DBF_SETUP_INDEX 3
128
#define QETH_DBF_SETUP_NR_AREAS 1
129
#ifdef QETH_DBF_LIKE_HELL
130
#define QETH_DBF_SETUP_LEVEL 6
131
#else /* QETH_DBF_LIKE_HELL */
132
#define QETH_DBF_SETUP_LEVEL 3
133
#endif /* QETH_DBF_LIKE_HELL */
134
 
135
#define QETH_DBF_MISC_NAME "qeth_misc"
136
#define QETH_DBF_MISC_LEN 128
137
#define QETH_DBF_MISC_INDEX 1
138
#define QETH_DBF_MISC_NR_AREAS 1
139
#ifdef QETH_DBF_LIKE_HELL
140
#define QETH_DBF_MISC_LEVEL 6
141
#else /* QETH_DBF_LIKE_HELL */
142
#define QETH_DBF_MISC_LEVEL 2
143
#endif /* QETH_DBF_LIKE_HELL */
144
 
145
#define QETH_DBF_DATA_NAME "qeth_data"
146
#define QETH_DBF_DATA_LEN 96
147
#define QETH_DBF_DATA_INDEX 3
148
#define QETH_DBF_DATA_NR_AREAS 1
149
#ifdef QETH_DBF_LIKE_HELL
150
#define QETH_DBF_DATA_LEVEL 6
151
#else /* QETH_DBF_LIKE_HELL */
152
#define QETH_DBF_DATA_LEVEL 2
153
#endif /* QETH_DBF_LIKE_HELL */
154
 
155
#define QETH_DBF_CONTROL_NAME "qeth_control"
156
/* buffers are 255 bytes long, but no prob */
157
#define QETH_DBF_CONTROL_LEN 256
158
#define QETH_DBF_CONTROL_INDEX 3
159
#define QETH_DBF_CONTROL_NR_AREAS 2
160
#ifdef QETH_DBF_LIKE_HELL
161
#define QETH_DBF_CONTROL_LEVEL 6
162
#else /* QETH_DBF_LIKE_HELL */
163
#define QETH_DBF_CONTROL_LEVEL 2
164
#endif /* QETH_DBF_LIKE_HELL */
165
 
166
#define QETH_DBF_TRACE_NAME "qeth_trace"
167
#define QETH_DBF_TRACE_LEN 8
168
#ifdef QETH_DBF_LIKE_HELL
169
#define QETH_DBF_TRACE_INDEX 3
170
#else /* QETH_DBF_LIKE_HELL */
171
#define QETH_DBF_TRACE_INDEX 2
172
#endif /* QETH_DBF_LIKE_HELL */
173
#define QETH_DBF_TRACE_NR_AREAS 2
174
#ifdef QETH_DBF_LIKE_HELL
175
#define QETH_DBF_TRACE_LEVEL 6
176
#else /* QETH_DBF_LIKE_HELL */
177
#define QETH_DBF_TRACE_LEVEL 2
178
#endif /* QETH_DBF_LIKE_HELL */
179
 
180
#define QETH_DBF_SENSE_NAME "qeth_sense"
181
#define QETH_DBF_SENSE_LEN 64
182
#define QETH_DBF_SENSE_INDEX 1
183
#define QETH_DBF_SENSE_NR_AREAS 1
184
#ifdef QETH_DBF_LIKE_HELL
185
#define QETH_DBF_SENSE_LEVEL 6
186
#else /* QETH_DBF_LIKE_HELL */
187
#define QETH_DBF_SENSE_LEVEL 2
188
#endif /* QETH_DBF_LIKE_HELL */
189
 
190
 
191
#define QETH_DBF_QERR_NAME "qeth_qerr"
192
#define QETH_DBF_QERR_LEN 8
193
#define QETH_DBF_QERR_INDEX 1
194
#define QETH_DBF_QERR_NR_AREAS 2
195
#ifdef QETH_DBF_LIKE_HELL
196
#define QETH_DBF_QERR_LEVEL 6
197
#else /* QETH_DBF_LIKE_HELL */
198
#define QETH_DBF_QERR_LEVEL 2
199
#endif /* QETH_DBF_LIKE_HELL */
200
/****************** END OF DEBUG FACILITY STUFF *********************/
201
 
202
/********************* CARD DATA STUFF **************************/
203
 
204
#define QETH_MAX_PARAMS 150
205
 
206
#define QETH_CARD_TYPE_UNKNOWN  0
207
#define QETH_CARD_TYPE_OSAE     10
208
#define QETH_CARD_TYPE_IQD      1234
209
 
210
#define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x0101
211
#define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x0101
212
/* as soon as steve is ready:
213
#define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x4101
214
#define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x5101
215
*/
216
#define QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT 0x4108
217
#define QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT 0x5108
218
 
219
#define QETH_MAX_QUEUES 4
220
 
221
#define UNIQUE_ID_IF_CREATE_ADDR_FAILED 0xfffe
222
#define UNIQUE_ID_NOT_BY_CARD 0x10000
223
 
224
/* CU type & model, Dev type & model, card_type, odd_even_restriction, func level, no of queues, multicast is different (multicast-queue_no + 0x100) */
225
#define QETH_MODELLIST_ARRAY \
226
        {{0x1731,0x01,0x1732,0x01,QETH_CARD_TYPE_OSAE,1, \
227
          QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \
228
          QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \
229
          QETH_MAX_QUEUES,0}, \
230
         {0x1731,0x05,0x1732,0x05,QETH_CARD_TYPE_IQD,0, \
231
          QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT, \
232
          QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT, \
233
          QETH_MAX_QUEUES,0x103}, \
234
         {0,0,0,0,0,0,0,0,0}}
235
 
236
#define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18
237
 /* only the first two bytes are looked at in qeth_get_cardname_short */
238
#define QETH_MPC_LINK_TYPE_FAST_ETHERNET 0x01
239
#define QETH_MPC_LINK_TYPE_HSTR 0x02
240
#define QETH_MPC_LINK_TYPE_GIGABIT_ETHERNET 0x03
241
#define QETH_MPC_LINK_TYPE_LANE_ETH100 0x81
242
#define QETH_MPC_LINK_TYPE_LANE_TR 0x82
243
#define QETH_MPC_LINK_TYPE_LANE_ETH1000 0x83
244
#define QETH_MPC_LINK_TYPE_LANE 0x88
245
 
246
#define DEFAULT_ADD_HHLEN 0
247
#define MAX_ADD_HHLEN 1024
248
 
249
#define QETH_HEADER_SIZE        32
250
#define QETH_IP_HEADER_SIZE     40
251
#define QETH_HEADER_LEN_POS     8
252
/* flags for the header: */
253
#define QETH_HEADER_PASSTHRU    0x10
254
#define QETH_HEADER_IPV6        0x80
255
 
256
#define QETH_CAST_FLAGS         0x07
257
#define QETH_CAST_UNICAST       6
258
#define QETH_CAST_MULTICAST     4
259
#define QETH_CAST_BROADCAST     5
260
#define QETH_CAST_ANYCAST       7
261
#define QETH_CAST_NOCAST        0
262
 
263
/* VLAN defines */
264
#define QETH_EXT_HEADER_VLAN_FRAME        0x01
265
#define QETH_EXT_HEADER_TOKEN_ID          0x02
266
#define QETH_EXT_HEADER_INCLUDE_VLAN_TAG  0x04
267
 
268
#define QETH_EXT_HEADER_SRC_MAC_ADDRESS   0x08
269
#define QETH_EXT_HEADER_CSUM_HDR_REQ      0x10
270
#define QETH_EXT_HEADER_CSUM_TRANSP_REQ   0x20
271
#define QETH_EXT_HEADER_CSUM_TRANSP_FRAME_TYPE   0x40
272
 
273
#define QETH_UDP_CSUM_OFFSET    6
274
#define QETH_TCP_CSUM_OFFSET    16
275
 
276
#define QETH_VERIFY_IS_REAL_DEV               1
277
#define QETH_VERIFY_IS_VLAN_DEV               2
278
 
279
inline static unsigned int qeth_get_ipa_timeout(int cardtype)
280
{
281
        switch (cardtype) {
282
        case QETH_CARD_TYPE_IQD: return 2000;
283
        default: return 20000;
284
        }
285
}
286
 
287
inline static unsigned short qeth_get_additional_dev_flags(int cardtype)
288
{
289
        switch (cardtype) {
290
        case QETH_CARD_TYPE_IQD: return IFF_NOARP;
291
#ifdef QETH_IPV6
292
        default: return 0;
293
#else /* QETH_IPV6 */
294
        default: return IFF_NOARP;
295
#endif /* QETH_IPV6 */
296
        }
297
}
298
 
299
inline static int qeth_get_hlen(__u8 link_type)
300
{
301
#ifdef QETH_IPV6
302
        switch (link_type) {
303
        case QETH_MPC_LINK_TYPE_HSTR:
304
        case QETH_MPC_LINK_TYPE_LANE_TR:
305
                return QETH_HEADER_SIZE+TR_HLEN;
306
        default:
307
#ifdef QETH_VLAN
308
                return QETH_HEADER_SIZE+VLAN_ETH_HLEN;
309
#else
310
                return QETH_HEADER_SIZE+ETH_HLEN;
311
#endif
312
        }
313
#else /* QETH_IPV6 */
314
#ifdef QETH_VLAN
315
        return QETH_HEADER_SIZE+VLAN_HLEN;
316
#else
317
        return QETH_HEADER_SIZE;
318
#endif
319
 
320
#endif /* QETH_IPV6 */
321
}
322
 
323
int (*qeth_my_eth_header)(struct sk_buff *,struct net_device *,
324
        unsigned short,void *,void *,unsigned);
325
int (*qeth_my_tr_header)(struct sk_buff *,struct net_device *,
326
        unsigned short,void *,void *,unsigned);
327
int (*qeth_my_eth_rebuild_header)(struct sk_buff *);
328
int (*qeth_my_tr_rebuild_header)(struct sk_buff *);
329
int (*qeth_my_eth_header_cache)(struct neighbour *,struct hh_cache *);
330
void (*qeth_my_eth_header_cache_update)(struct hh_cache *,struct net_device *,
331
         unsigned char *);
332
 
333
#ifdef QETH_IPV6
334
typedef int (*__qeth_temp1)(struct sk_buff *,struct net_device *,
335
        unsigned short,void *,void *,unsigned);
336
inline static __qeth_temp1 qeth_get_hard_header(__u8 link_type)
337
{
338
        switch (link_type) {
339
#ifdef CONFIG_TR
340
        case QETH_MPC_LINK_TYPE_HSTR:
341
        case QETH_MPC_LINK_TYPE_LANE_TR:
342
                return qeth_my_tr_header;
343
#endif /* CONFIG_TR */
344
        default:
345
                return qeth_my_eth_header;
346
        }
347
}
348
 
349
typedef int (*__qeth_temp2)(struct sk_buff *);
350
inline static __qeth_temp2 qeth_get_rebuild_header(__u8 link_type)
351
{
352
        switch (link_type) {
353
#ifdef CONFIG_TR
354
        case QETH_MPC_LINK_TYPE_HSTR:
355
        case QETH_MPC_LINK_TYPE_LANE_TR:
356
                return qeth_my_tr_rebuild_header;
357
#endif /* CONFIG_TR */
358
        default:
359
                return qeth_my_eth_rebuild_header;
360
        }
361
}
362
 
363
typedef int (*__qeth_temp3)(struct neighbour *,struct hh_cache *);
364
inline static __qeth_temp3 qeth_get_hard_header_cache(__u8 link_type)
365
{
366
        switch (link_type) {
367
        case QETH_MPC_LINK_TYPE_HSTR:
368
        case QETH_MPC_LINK_TYPE_LANE_TR:
369
                return NULL;
370
        default:
371
                return qeth_my_eth_header_cache;
372
        }
373
}
374
 
375
typedef void (*__qeth_temp4)(struct hh_cache *,struct net_device *,
376
         unsigned char *);
377
inline static __qeth_temp4 qeth_get_header_cache_update(__u8 link_type)
378
{
379
        switch (link_type) {
380
        case QETH_MPC_LINK_TYPE_HSTR:
381
        case QETH_MPC_LINK_TYPE_LANE_TR:
382
                return NULL;
383
        default:
384
                return qeth_my_eth_header_cache_update;
385
        }
386
}
387
 
388
static unsigned short qeth_eth_type_trans(struct sk_buff *skb,
389
                                          struct net_device *dev)
390
{
391
        struct ethhdr *eth;
392
 
393
        skb->mac.raw=skb->data;
394
        skb_pull(skb,ETH_ALEN*2+sizeof(short));
395
        eth=skb->mac.ethernet;
396
 
397
        if(*eth->h_dest&1) {
398
                if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
399
                        skb->pkt_type=PACKET_BROADCAST;
400
                else
401
                        skb->pkt_type=PACKET_MULTICAST;
402
        } else {
403
                skb->pkt_type=PACKET_OTHERHOST;
404
        }
405
        if (ntohs(eth->h_proto)>=1536) return eth->h_proto;
406
        if (*(unsigned short *)(skb->data) == 0xFFFF)
407
                return htons(ETH_P_802_3);
408
        return htons(ETH_P_802_2);
409
}
410
 
411
typedef unsigned short (*__qeth_temp5)(struct sk_buff *,struct net_device *);
412
inline static __qeth_temp5 qeth_get_type_trans(__u8 link_type)
413
{
414
        switch (link_type) {
415
        case QETH_MPC_LINK_TYPE_HSTR:
416
        case QETH_MPC_LINK_TYPE_LANE_TR:
417
                return tr_type_trans;
418
        default:
419
                return qeth_eth_type_trans;
420
        }
421
}
422
#endif /* QETH_IPV6 */
423
 
424
inline static const char *qeth_get_link_type_name(int cardtype,__u8 linktype)
425
{
426
        switch (cardtype) {
427
        case QETH_CARD_TYPE_UNKNOWN: return "unknown";
428
        case QETH_CARD_TYPE_OSAE:
429
                switch (linktype) {
430
                case QETH_MPC_LINK_TYPE_FAST_ETHERNET: return "Fast Eth";
431
                case QETH_MPC_LINK_TYPE_HSTR: return "HSTR";
432
                case QETH_MPC_LINK_TYPE_GIGABIT_ETHERNET: return "Gigabit Eth";
433
                case QETH_MPC_LINK_TYPE_LANE_ETH100: return "LANE Eth100";
434
                case QETH_MPC_LINK_TYPE_LANE_TR: return "LANE TR";
435
                case QETH_MPC_LINK_TYPE_LANE_ETH1000: return "LANE Eth1000";
436
                default: return "unknown";
437
                }
438
        case QETH_CARD_TYPE_IQD: return "magic";
439
        default: return "unknown";
440
        }
441
}
442
 
443
inline static const char* qeth_get_dev_basename(int cardtype,__u8 link_type)
444
{
445
        switch (cardtype) {
446
        case QETH_CARD_TYPE_UNKNOWN: return "eth";
447
        case QETH_CARD_TYPE_OSAE: switch (link_type) {
448
                                  case QETH_MPC_LINK_TYPE_LANE_TR:
449
                                          /* fallthrough */
450
                                  case QETH_MPC_LINK_TYPE_HSTR: return "tr";
451
                                  default: return "eth";
452
                                  }
453
        case QETH_CARD_TYPE_IQD: return "hsi";
454
        default: return "eth";
455
        }
456
}
457
 
458
/* inbound: */
459
#define DEFAULT_BUFFER_SIZE 65536
460
#define DEFAULT_BUFFER_COUNT 128
461
#define BUFCNT_MIN 8
462
#define BUFCNT_MAX 128
463
#define BUFFER_SIZE (card->inbound_buffer_size)
464
#define BUFFER_MAX_ELEMENTS (BUFFER_SIZE>>12)
465
        /* 8k for each pair header-buffer: */
466
 
467
inline static int qeth_sbal_packing_on_card(int cardtype)
468
{
469
        switch (cardtype) {
470
        case QETH_CARD_TYPE_IQD: return 0;
471
        default: return 1;
472
        }
473
}
474
 
475
/* do it this way round -> __MODULE_STRING needs with */
476
/* QETH_PRIO_NICE_LEVELS a single number */
477
#define QETH_MAX_PRIO_QUEUES QETH_PRIO_NICE_LEVELS+1
478
 
479
static inline int qeth_sbalf15_in_retrieable_range(int sbalf15)
480
{
481
        return ( (sbalf15>=15) && (sbalf15<=31) );
482
}
483
 
484
#define INBOUND_BUFFER_POS(card,bufno,sbale) \
485
        ( (bufno&SPAREBUF_MASK)? \
486
          ( \
487
            (sparebufs[bufno&(~SPAREBUF_MASK)].buf+ \
488
             PAGE_SIZE*sbale) \
489
          ):( \
490
              (card->inbound_buffer_pool_entry[card-> \
491
               inbound_buffer_entry_no[bufno]][sbale]) \
492
            ) )
493
 
494
#define SPAREBUF_UNAVAIL 0
495
#define SPAREBUF_FREE 1
496
#define SPAREBUF_USED 2
497
 
498
typedef struct sparebufs_t {
499
        char *buf;
500
        atomic_t status;
501
} sparebufs_t;
502
 
503
#define SEND_STATE_INACTIVE             0
504
#define SEND_STATE_DONT_PACK            1
505
#define SEND_STATE_PACK                 2
506
 
507
#define QETH_LOCK_UNLOCKED 0
508
#define QETH_LOCK_NORMAL 1
509
#define QETH_LOCK_FLUSH 2
510
 
511
#define QETH_MAX_DEVICES 16
512
        /* DEPENDENCY ON QETH_MAX_DEVICES.
513
         *__MOUDLE_STRING expects simple literals */
514
#define QETH_MAX_DEVICES_TIMES_4 64
515
#define QETH_MAX_DEVNAMES 16
516
#define QETH_DEVNAME "eth"
517
 
518
#define QETH_TX_TIMEOUT 100*HZ /* 100 seconds */
519
 
520
#define QETH_REMOVE_WAIT_TIME 200
521
#define QETH_WAIT_FOR_THREAD_TIME 20
522
#define QETH_IDLE_WAIT_TIME 10
523
#define QETH_WAIT_BEFORE_2ND_DOIO 1000
524
 
525
#define QETH_MAX_PARM_LEN 128
526
 
527
#define QETH_FAKE_LL_LEN ETH_HLEN /* 14 */
528
#define QETH_FAKE_LL_PROT_LEN 2
529
#define QETH_FAKE_LL_ADDR_LEN ETH_ALEN /* 6 */
530
#define QETH_FAKE_LL_DEST_MAC_POS 0
531
#define QETH_FAKE_LL_SRC_MAC_POS 6
532
#define QETH_FAKE_LL_SRC_MAC_POS_IN_QDIO_HDR 6
533
#define QETH_FAKE_LL_PROT_POS 12 
534
#define QETH_FAKE_LL_V4_ADDR_POS 16
535
#define QETH_FAKE_LL_V6_ADDR_POS 24
536
 
537
#define DEV_NAME_LEN 16
538
#define IOCTL_MAX_TRANSFER_SIZE 65535
539
 
540
#define IP_TOS_LOWDELAY 0x10
541
#define IP_TOS_HIGHTHROUGHPUT 0x08
542
#define IP_TOS_HIGHRELIABILITY 0x04
543
#define IP_TOS_NOTIMPORTANT 0x02
544
 
545
#define QETH_RCD_LENGTH 128
546
 
547
#define __max(a,b) ( ((a)>(b))?(a):(b) )
548
#define __min(a,b) ( ((a)<(b))?(a):(b) )
549
#define QETH_BUFSIZE __max(__max(IPA_PDU_HEADER_SIZE+ \
550
                                 sizeof(arp_cmd_t),IPA_PDU_HEADER_SIZE+ \
551
                                 sizeof(ipa_cmd_t)),QETH_RCD_LENGTH)
552
 
553
#define QETH_FINAL_STATUS_TIMEOUT 1500
554
#define QETH_CLEAR_TIMEOUT 1500
555
#define QETH_RCD_TIMEOUT 1500
556
#define QETH_NOP_TIMEOUT 1500
557
#define QETH_QUIESCE_NETDEV_TIME 300
558
#define QETH_QUIESCE_WAIT_BEFORE_CLEAR 4000
559
#define QETH_QUIESCE_WAIT_AFTER_CLEAR 4000
560
 
561
#define NOP_STATE 0x1001
562
#define READ_CONF_DATA_STATE 0x1002
563
#define IDX_ACTIVATE_READ_STATE 0x1003
564
#define IDX_ACTIVATE_WRITE_STATE 0x1004
565
#define MPC_SETUP_STATE 0x1005
566
#define CLEAR_STATE 0x1006
567
#define IPA_CMD_STATE 0x1007
568
#define IPA_IOCTL_STATE 0x1009
569
#define IPA_SETIP_FLAG 0x100000
570
 
571
#define QETH_REMOVE_CARD_PROPER 1
572
#define QETH_REMOVE_CARD_QUICK 2
573
 
574
#define PARSE_AUTO 0
575
#define PARSE_ROUTING_TYPE 1
576
#define PARSE_CHECKSUMMING 2
577
#define PARSE_PRIO_QUEUEING 3
578
#define PARSE_STAYINMEM 4
579
#define PARSE_BUFFERCOUNT 5
580
#define PARSE_PORTNAME 6
581
#define PARSE_POLLTIME 7
582
#define PARSE_SPARE_BUFFERCOUNT 8
583
#define PARSE_PORTNO 9
584
#define PARSE_BROADCAST_MODE 10
585
#define PARSE_MACADDR_MODE 11
586
#define PARSE_MEMUSAGE 12
587
#define PARSE_ENA_IPAT 13
588
#define PARSE_FAKE_BROADCAST 14
589
#define PARSE_ADD_HHLEN 15
590
#define PARSE_ROUTING_TYPE4 16
591
#define PARSE_ROUTING_TYPE6 17
592
#define PARSE_FAKE_LL 18
593
#define PARSE_ASYNC_IQD 19
594
 
595
#define PARSE_COUNT 20
596
 
597
#define NO_PRIO_QUEUEING 0
598
#define PRIO_QUEUEING_PREC 1
599
#define PRIO_QUEUEING_TOS 2
600
#define NO_ROUTER 0
601
#define PRIMARY_ROUTER 1
602
#define SECONDARY_ROUTER 2
603
#define MULTICAST_ROUTER 3
604
#define PRIMARY_CONNECTOR 4
605
#define SECONDARY_CONNECTOR 5
606
#define ROUTER_MASK 0xf /* used to remove SET_ROUTING_FLAG
607
                           from routing_type */
608
#define RESET_ROUTING_FLAG 0x10 /* used to indicate, that setting
609
                                   the routing type is desired */
610
#define BROADCAST_ALLRINGS 0
611
#define BROADCAST_LOCAL 1
612
#define MACADDR_NONCANONICAL 0
613
#define MACADDR_CANONICAL 1
614
#define MEMUSAGE_DISCONTIG 0
615
#define MEMUSAGE_CONTIG 1
616
#define ENABLE_TAKEOVER 0
617
#define DISABLE_TAKEOVER 1
618
#define FAKE_BROADCAST 0
619
#define DONT_FAKE_BROADCAST 1
620
#define FAKE_LL 0
621
#define DONT_FAKE_LL 1
622
#define SYNC_IQD 0
623
#define ASYNC_IQD 1
624
 
625
#define QETH_BREAKOUT_LEAVE 1
626
#define QETH_BREAKOUT_AGAIN 2
627
 
628
#define QETH_WAIT_FOR_LOCK 0
629
#define QETH_DONT_WAIT_FOR_LOCK 1
630
#define QETH_LOCK_ALREADY_HELD 2
631
 
632
#define PROBLEM_CARD_HAS_STARTLANED 1
633
#define PROBLEM_RECEIVED_IDX_TERMINATE 2
634
#define PROBLEM_ACTIVATE_CHECK_CONDITION 3
635
#define PROBLEM_RESETTING_EVENT_INDICATOR 4
636
#define PROBLEM_COMMAND_REJECT 5
637
#define PROBLEM_ZERO_SENSE_DATA 6
638
#define PROBLEM_GENERAL_CHECK 7
639
#define PROBLEM_BAD_SIGA_RESULT 8
640
#define PROBLEM_USER_TRIGGERED_RECOVERY 9
641
#define PROBLEM_AFFE 10
642
#define PROBLEM_MACHINE_CHECK 11
643
#define PROBLEM_TX_TIMEOUT 12
644
 
645
#define SENSE_COMMAND_REJECT_BYTE 0
646
#define SENSE_COMMAND_REJECT_FLAG 0x80
647
#define SENSE_RESETTING_EVENT_BYTE 1
648
#define SENSE_RESETTING_EVENT_FLAG 0x80
649
 
650
#define DEFAULT_RCD_CMD 0x72
651
#define DEFAULT_RCD_COUNT 0x80
652
 
653
#define BUFFER_USED 1
654
#define BUFFER_UNUSED -1
655
 
656
/*typedef struct wait_queue* wait_queue_head_t; already typedefed in qdio.h */
657
 
658
typedef int (*reg_notifier_t)(struct notifier_block*);
659
 
660
typedef struct ipato_entry_t {
661
        int version;
662
        __u8 addr[16];
663
        int mask_bits;
664
        char dev_name[DEV_NAME_LEN];
665
        struct ipato_entry_t *next;
666
} ipato_entry_t;
667
 
668
typedef struct qeth_vipa_entry_t {
669
        int version;
670
        __u8 ip[16];
671
        int flag;
672
        volatile int state;
673
        struct qeth_vipa_entry_t *next;
674
} qeth_vipa_entry_t;
675
 
676
typedef struct ip_state_t {
677
        struct in_ifaddr *ip_ifa;       /* pointer to IPv4 adresses */
678
        struct inet6_ifaddr *ip6_ifa;
679
} ip_state_t;
680
 
681
struct qeth_ipm_mac {
682
        __u8 mac[ETH_ALEN];
683
        __u8 ip[16];
684
        struct qeth_ipm_mac *next;
685
};
686
 
687
typedef struct ip_mc_state_t {
688
        struct qeth_ipm_mac *ipm_ifa;
689
        struct qeth_ipm_mac *ipm6_ifa;
690
} ip_mc_state_t;
691
 
692
struct qeth_card_options {
693
        char devname[DEV_NAME_LEN];
694
        volatile int routing_type4;
695
#ifdef QETH_IPV6
696
        volatile int routing_type6;
697
#endif /* QETH_IPV6 */
698
        int checksum_type;
699
        int do_prio_queueing;
700
        int default_queue;
701
        int already_parsed[PARSE_COUNT];
702
        int inbound_buffer_count;
703
        __s32 memory_usage_in_k;
704
        int polltime;
705
        char portname[9];
706
        int portno;
707
        int memusage;
708
        int broadcast_mode;
709
        int macaddr_mode;
710
        int ena_ipat;
711
        int fake_broadcast;
712
        int add_hhlen;
713
        int fake_ll;
714
        int async_iqd;
715
};
716
 
717
typedef struct qeth_hdr_t {
718
        __u8 id;
719
        __u8 flags;
720
        __u16 inbound_checksum;
721
        __u32 token;
722
        __u16 length;
723
        __u8 vlan_prio;
724
        __u8 ext_flags;
725
        __u16 vlan_id;
726
        __u16 frame_offset;
727
        __u8 dest_addr[16];
728
} qeth_hdr_t;
729
 
730
typedef struct qeth_ringbuffer_element_t {
731
        struct sk_buff_head skb_list;
732
        int next_element_to_fill;
733
} __attribute__ ((packed)) qeth_ringbuffer_element_t;
734
 
735
typedef struct qeth_ringbuffer_t {
736
        qdio_buffer_t buffer[QDIO_MAX_BUFFERS_PER_Q];
737
        qeth_ringbuffer_element_t ringbuf_element[QDIO_MAX_BUFFERS_PER_Q];
738
} qeth_ringbuffer_t __attribute__ ((packed,aligned(PAGE_SIZE)));
739
 
740
typedef struct qeth_dma_stuff_t {
741
        unsigned char *sendbuf;
742
        unsigned char *recbuf;
743
        ccw1_t read_ccw;
744
        ccw1_t write_ccw;
745
} qeth_dma_stuff_t __attribute__ ((packed,aligned(PAGE_SIZE)));
746
 
747
typedef struct qeth_perf_stats_t {
748
        unsigned int skbs_rec;
749
        unsigned int bufs_rec;
750
 
751
        unsigned int skbs_sent;
752
        unsigned int bufs_sent;
753
 
754
        unsigned int skbs_sent_dont_pack;
755
        unsigned int bufs_sent_dont_pack;
756
        unsigned int skbs_sent_pack;
757
        unsigned int bufs_sent_pack;
758
        unsigned int skbs_sent_pack_better;
759
        unsigned int bufs_sent_pack_better;
760
 
761
        unsigned int sc_dp_p;
762
        unsigned int sc_p_dp;
763
 
764
        __u64 inbound_start_time;
765
        unsigned int inbound_cnt;
766
        unsigned int inbound_time;
767
        __u64 outbound_start_time;
768
        unsigned int outbound_cnt;
769
        unsigned int outbound_time;
770
} qeth_perf_stats_t;
771
 
772
/* ugly. I know. */
773
typedef struct qeth_card_t {                    /* pointed to by dev->priv */
774
        int easy_copy_cap;
775
 
776
        /* pointer to options (defaults + parameters) */
777
        struct qeth_card_options options;
778
 
779
        atomic_t is_startlaned; /* card did not get a stoplan */
780
                                /* also 0 when card is gone after a
781
                                   machine check */
782
 
783
        __u8 link_type;
784
 
785
        int do_pfix; /* to avoid doing diag98 for vm guest lan devices */
786
 
787
        /* inbound buffer management */
788
        atomic_t inbound_buffer_refcnt[QDIO_MAX_BUFFERS_PER_Q];
789
        qdio_buffer_t inbound_qdio_buffers[QDIO_MAX_BUFFERS_PER_Q];
790
        void *real_inb_buffer_addr[QDIO_MAX_BUFFERS_PER_Q]
791
                [QDIO_MAX_ELEMENTS_PER_BUFFER];
792
 
793
        /* inbound data area */
794
        void *inbound_buffer_pool_entry[QDIO_MAX_BUFFERS_PER_Q]
795
                [QDIO_MAX_ELEMENTS_PER_BUFFER];
796
        volatile int inbound_buffer_pool_entry_used[QDIO_MAX_BUFFERS_PER_Q];
797
        int inbound_buffer_entry_no[QDIO_MAX_BUFFERS_PER_Q];
798
 
799
        /* for requeueing of buffers */
800
        spinlock_t requeue_input_lock;
801
        atomic_t requeue_position;
802
        atomic_t requeue_counter;
803
 
804
        /* outbound QDIO stuff */
805
        volatile int send_state[QETH_MAX_QUEUES];
806
        volatile int outbound_first_free_buffer[QETH_MAX_QUEUES];
807
        atomic_t outbound_used_buffers[QETH_MAX_QUEUES];
808
        int outbound_buffer_send_state[QETH_MAX_QUEUES]
809
                [QDIO_MAX_BUFFERS_PER_Q];
810
        int send_retries[QETH_MAX_QUEUES][QDIO_MAX_BUFFERS_PER_Q];
811
        volatile int outbound_bytes_in_buffer[QETH_MAX_QUEUES];
812
        qeth_ringbuffer_t *outbound_ringbuffer[QETH_MAX_QUEUES];
813
        atomic_t outbound_ringbuffer_lock[QETH_MAX_QUEUES];
814
        atomic_t last_pci_pos[QETH_MAX_QUEUES];
815
 
816
#ifdef QETH_IPV6
817
        int (*hard_header)(struct sk_buff *,struct net_device *,
818
                           unsigned short,void *,void *,unsigned);
819
        int (*rebuild_header)(struct sk_buff *);
820
        int (*hard_header_cache)(struct neighbour *,struct hh_cache *);
821
        void (*header_cache_update)(struct hh_cache *,struct net_device *,
822
                                    unsigned char *);
823
        unsigned short (*type_trans)(struct sk_buff *,struct net_device *);
824
        int type_trans_correction;
825
#endif /* QETH_IPV6 */
826
 
827
#ifdef QETH_VLAN
828
        struct vlan_group *vlangrp;
829
        spinlock_t vlan_lock;
830
 
831
#endif
832
        char dev_name[DEV_NAME_LEN];            /* pointed to by dev->name */
833
        char dev_basename[DEV_NAME_LEN];
834
        struct net_device *dev;
835
        struct net_device_stats *stats;
836
 
837
        int no_queues;
838
 
839
#ifdef QETH_PERFORMANCE_STATS
840
        qeth_perf_stats_t perf_stats;
841
#endif /* QETH_PERFORMANCE_STATS */
842
 
843
        /* our state */
844
        atomic_t is_registered;         /* card registered as netdev? */
845
        atomic_t is_hardsetup;          /* card has gone through hardsetup */
846
        atomic_t is_softsetup;          /* card is setup by softsetup */
847
        atomic_t is_open;               /* card is in use */
848
        atomic_t is_gone;               /* after a msck */
849
 
850
        int has_irq;                    /* once a request_irq was successful */
851
 
852
        /* prevents deadlocks :-O */
853
        spinlock_t softsetup_lock;
854
        spinlock_t hardsetup_lock;
855
        spinlock_t ioctl_lock;
856
        atomic_t softsetup_thread_is_running;
857
        struct semaphore softsetup_thread_sem;
858
        struct tq_struct tqueue_sst;
859
 
860
        atomic_t escape_softsetup;      /* active, when recovery has to
861
                                           wait for softsetup */
862
        struct semaphore reinit_thread_sem;
863
        atomic_t in_recovery;
864
        atomic_t reinit_counter;
865
 
866
        /* problem management */
867
        atomic_t break_out;
868
        atomic_t problem;
869
        struct tq_struct tqueue;
870
 
871
        struct {
872
                __u32 trans_hdr;
873
                __u32 pdu_hdr;
874
                __u32 pdu_hdr_ack;
875
                __u32 ipa;
876
        } seqno;
877
 
878
        struct {
879
                __u32 issuer_rm_w;
880
                __u32 issuer_rm_r;
881
                __u32 cm_filter_w;
882
                __u32 cm_filter_r;
883
                __u32 cm_connection_w;
884
                __u32 cm_connection_r;
885
                __u32 ulp_filter_w;
886
                __u32 ulp_filter_r;
887
                __u32 ulp_connection_w;
888
                __u32 ulp_connection_r;
889
        } token;
890
 
891
        /* this is card-related */
892
        int type;
893
        __u16 func_level;
894
        int initial_mtu;
895
        int max_mtu;
896
        int inbound_buffer_size;
897
 
898
        int is_multicast_different; /* if multicast traffic is to be sent
899
                                       on a different queue, this is the
900
                                       queue+no_queues */
901
        int can_do_async_iqd; /* 1 only on IQD that provides async
902
                                 unicast sigas */
903
 
904
        __u32 ipa_supported;
905
        __u32 ipa_enabled;
906
        __u32 ipa6_supported;
907
        __u32 ipa6_enabled;
908
        __u32 adp_supported;
909
 
910
        atomic_t startlan_attempts;
911
        atomic_t enable_routing_attempts4;
912
        atomic_t rt4fld;
913
#ifdef QETH_IPV6
914
        atomic_t enable_routing_attempts6;
915
        atomic_t rt6fld;
916
#endif /* QETH_IPV6 */
917
        int unique_id;
918
 
919
        /* device and I/O data */
920
        int devno0;
921
        int devno1;
922
        int devno2;
923
        int irq0;
924
        int irq1;
925
        int irq2;
926
        unsigned short unit_addr2;
927
        unsigned short cula;
928
        unsigned short dev_type;
929
        unsigned char dev_model;
930
        unsigned short chpid;
931
        devstat_t *devstat0;
932
        devstat_t *devstat1;
933
        devstat_t *devstat2;
934
 
935
        unsigned char ipa_buf[QETH_BUFSIZE];
936
        unsigned char send_buf[QETH_BUFSIZE];
937
 
938
/* IOCTL Stuff */
939
        unsigned char *ioctl_data_buffer;
940
        unsigned char *ioctl_buffer_pointer;
941
        int ioctl_returncode;
942
        int ioctl_buffersize;
943
        int number_of_entries;
944
 
945
 
946
        atomic_t ioctl_data_has_arrived;
947
        wait_queue_head_t ioctl_wait_q;
948
        atomic_t ioctl_wait_q_active;
949
        spinlock_t ioctl_wait_q_lock;
950
 
951
/* stuff under 2 gb */
952
        qeth_dma_stuff_t *dma_stuff;
953
 
954
        unsigned int ipa_timeout;
955
 
956
        atomic_t write_busy;
957
 
958
        int read_state; /* only modified and read in the int handler */
959
 
960
        /* vipa stuff */
961
        rwlock_t vipa_list_lock;
962
        qeth_vipa_entry_t *vipa_list;
963
 
964
        /* state information when doing I/O */
965
        atomic_t shutdown_phase;
966
        volatile int save_state_flag;
967
        atomic_t data_has_arrived;
968
        wait_queue_head_t wait_q;
969
        atomic_t wait_q_active;
970
        spinlock_t wait_q_lock; /* for wait_q_active and wait_q */
971
 
972
        atomic_t final_status0;
973
        atomic_t final_status1;
974
        atomic_t final_status2;
975
        atomic_t clear_succeeded0;
976
        atomic_t clear_succeeded1;
977
        atomic_t clear_succeeded2;
978
 
979
        /* bookkeeping of IP and multicast addresses */
980
        ip_state_t ip_current_state;
981
        ip_state_t ip_new_state;
982
 
983
#ifdef CONFIG_IP_MULTICAST
984
        ip_mc_state_t ip_mc_current_state;
985
        ip_mc_state_t ip_mc_new_state;
986
#endif /* CONFIG_IF_MULTICAST */
987
 
988
        int broadcast_capable;
989
        int portname_required;
990
 
991
        int realloc_message;
992
 
993
        char level[QETH_MCL_LENGTH+1];
994
 
995
        volatile int saved_dev_flags;
996
 
997
        /* for our linked list */
998
        struct qeth_card_t *next;
999
} qeth_card_t;
1000
 
1001
typedef struct mydevreg_t {
1002
        devreg_t devreg;
1003
        struct mydevreg_t *next;
1004
        struct mydevreg_t *prev;
1005
} mydevreg_t;
1006
 
1007
inline static int qeth_get_arphrd_type(int cardtype,int linktype)
1008
{
1009
        switch (cardtype) {
1010
        case QETH_CARD_TYPE_OSAE: switch (linktype) {
1011
                                  case QETH_MPC_LINK_TYPE_LANE_TR:
1012
                                          /* fallthrough */
1013
                                  case QETH_MPC_LINK_TYPE_HSTR:
1014
                                          return ARPHRD_IEEE802;
1015
                                  default: return ARPHRD_ETHER;
1016
                                  }
1017
        case QETH_CARD_TYPE_IQD: return ARPHRD_ETHER;
1018
        default: return ARPHRD_ETHER;
1019
        }
1020
}
1021
 
1022
inline static int qeth_determine_easy_copy_cap(int cardtype)
1023
{
1024
        switch (cardtype) {
1025
        case QETH_CARD_TYPE_UNKNOWN: return 0; /* better be cautious */
1026
        case QETH_CARD_TYPE_OSAE: return 1;
1027
        case QETH_CARD_TYPE_IQD: return 0;
1028
        default: return 0; /* ?? */
1029
        }
1030
}
1031
inline static __u8 qeth_get_adapter_type_for_ipa(int link_type)
1032
{
1033
        switch (link_type) {
1034
        case QETH_MPC_LINK_TYPE_HSTR: return 2;
1035
        default: return 1;
1036
        }
1037
}
1038
 
1039
inline static const char *qeth_get_cardname(int cardtype)
1040
{
1041
        switch (cardtype) {
1042
        case QETH_CARD_TYPE_UNKNOWN: return "n unknown";
1043
        case QETH_CARD_TYPE_OSAE: return "n OSD Express";
1044
        case QETH_CARD_TYPE_IQD: return " HiperSockets";
1045
        default: return " strange";
1046
        }
1047
}
1048
 
1049
/* max length to be returned: 14 */
1050
inline static const char *qeth_get_cardname_short(int cardtype,__u8 link_type)
1051
{
1052
        switch (cardtype) {
1053
        case QETH_CARD_TYPE_UNKNOWN: return "unknown";
1054
        case QETH_CARD_TYPE_OSAE: switch (link_type) {
1055
                                  case QETH_MPC_LINK_TYPE_FAST_ETHERNET:
1056
                                          return "OSD_100";
1057
                                  case QETH_MPC_LINK_TYPE_HSTR:
1058
                                          return "HSTR";
1059
                                  case QETH_MPC_LINK_TYPE_GIGABIT_ETHERNET:
1060
                                          return "OSD_1000";
1061
                                  case QETH_MPC_LINK_TYPE_LANE_ETH100:
1062
                                          return "OSD_FE_LANE";
1063
                                  case QETH_MPC_LINK_TYPE_LANE_TR:
1064
                                          return "OSD_TR_LANE";
1065
                                  case QETH_MPC_LINK_TYPE_LANE_ETH1000:
1066
                                          return "OSD_GbE_LANE";
1067
                                  case QETH_MPC_LINK_TYPE_LANE:
1068
                                          return "OSD_ATM_LANE";
1069
                                  default: return "OSD_Express";
1070
                                  }
1071
        case QETH_CARD_TYPE_IQD: return "HiperSockets";
1072
        default: return " strange";
1073
        }
1074
}
1075
 
1076
inline static int qeth_mtu_is_valid(qeth_card_t *card,int mtu)
1077
{
1078
        switch (card->type) {
1079
        case QETH_CARD_TYPE_UNKNOWN: return 1;
1080
        case QETH_CARD_TYPE_OSAE: return ( (mtu>=576) && (mtu<=61440) );
1081
        case QETH_CARD_TYPE_IQD: return ( (mtu>=576) &&
1082
                                            (mtu<=card->max_mtu+4096-32) );
1083
        default: return 1;
1084
        }
1085
}
1086
 
1087
inline static int qeth_get_initial_mtu_for_card(qeth_card_t *card)
1088
{
1089
        switch (card->type) {
1090
        case QETH_CARD_TYPE_UNKNOWN: return 1500;
1091
        case QETH_CARD_TYPE_IQD: return card->max_mtu;
1092
        case QETH_CARD_TYPE_OSAE:
1093
                switch (card->link_type) {
1094
                case QETH_MPC_LINK_TYPE_HSTR:
1095
                case QETH_MPC_LINK_TYPE_LANE_TR:
1096
                        return 2000;
1097
                default:
1098
                        return 1492;
1099
                }
1100
        default: return 1500;
1101
        }
1102
}
1103
 
1104
inline static int qeth_get_max_mtu_for_card(int cardtype)
1105
{
1106
        switch (cardtype) {
1107
        case QETH_CARD_TYPE_UNKNOWN: return 61440;
1108
        case QETH_CARD_TYPE_OSAE: return 61440;
1109
        case QETH_CARD_TYPE_IQD: return 57344;
1110
        default: return 1500;
1111
        }
1112
}
1113
 
1114
inline static int qeth_get_mtu_out_of_mpc(int cardtype)
1115
{
1116
        switch (cardtype) {
1117
        case QETH_CARD_TYPE_IQD: return 1;
1118
        default: return 0;
1119
        }
1120
}
1121
 
1122
inline static int qeth_get_mtu_outof_framesize(int framesize)
1123
{
1124
        switch (framesize) {
1125
        case 0x4000: return 8192;
1126
        case 0x6000: return 16384;
1127
        case 0xa000: return 32768;
1128
        case 0xffff: return 57344;
1129
        default: return 0;
1130
        }
1131
}
1132
 
1133
inline static int qeth_get_buffersize_for_card(int cardtype)
1134
{
1135
        switch (cardtype) {
1136
        case QETH_CARD_TYPE_UNKNOWN: return 65536;
1137
        case QETH_CARD_TYPE_OSAE: return 65536;
1138
        case QETH_CARD_TYPE_IQD: return 16384;
1139
        default: return 65536;
1140
        }
1141
}
1142
 
1143
inline static int qeth_get_min_number_of_buffers(int cardtype)
1144
{
1145
        switch (cardtype) {
1146
        case QETH_CARD_TYPE_UNKNOWN: return 32;
1147
        case QETH_CARD_TYPE_OSAE: return 32;
1148
        case QETH_CARD_TYPE_IQD: return 64;
1149
        default: return 64;
1150
        }
1151
}
1152
 
1153
inline static int qeth_get_q_format(int cardtype)
1154
{
1155
        switch (cardtype) {
1156
        case QETH_CARD_TYPE_IQD: return 2;
1157
        default: return 0;
1158
        }
1159
}
1160
 
1161
inline static int qeth_get_device_tx_q_len(int cardtype)
1162
{
1163
        return 100;
1164
}
1165
 
1166
inline static int qeth_get_max_number_of_buffers(int cardtype)
1167
{
1168
        return 127;
1169
}
1170
 
1171
/******************** OUTPUT FACILITIES **************************/
1172
 
1173
#ifdef PRINT_INFO
1174
#undef PRINTK_HEADER
1175
#undef PRINT_STUPID
1176
#undef PRINT_ALL
1177
#undef PRINT_INFO
1178
#undef PRINT_WARN
1179
#undef PRINT_ERR
1180
#undef PRINT_CRIT
1181
#undef PRINT_ALERT
1182
#undef PRINT_EMERG
1183
#endif /* PRINT_INFO */
1184
 
1185
#define PRINTK_HEADER QETH_NAME ": "
1186
 
1187
#if QETH_VERBOSE_LEVEL>8
1188
#define PRINT_STUPID(x...) printk( KERN_DEBUG PRINTK_HEADER x)
1189
#else
1190
#define PRINT_STUPID(x...)
1191
#endif
1192
 
1193
#if QETH_VERBOSE_LEVEL>7
1194
#define PRINT_ALL(x...) printk( KERN_DEBUG PRINTK_HEADER x)
1195
#else
1196
#define PRINT_ALL(x...)
1197
#endif
1198
 
1199
#if QETH_VERBOSE_LEVEL>6
1200
#define PRINT_INFO(x...) printk( KERN_INFO PRINTK_HEADER x)
1201
#else
1202
#define PRINT_INFO(x...)
1203
#endif
1204
 
1205
#if QETH_VERBOSE_LEVEL>5
1206
#define PRINT_WARN(x...) printk( KERN_WARNING PRINTK_HEADER x)
1207
#else
1208
#define PRINT_WARN(x...)
1209
#endif
1210
 
1211
#if QETH_VERBOSE_LEVEL>4
1212
#define PRINT_ERR(x...) printk( KERN_ERR PRINTK_HEADER x)
1213
#else
1214
#define PRINT_ERR(x...)
1215
#endif
1216
 
1217
#if QETH_VERBOSE_LEVEL>3
1218
#define PRINT_CRIT(x...) printk( KERN_CRIT PRINTK_HEADER x)
1219
#else
1220
#define PRINT_CRIT(x...)
1221
#endif
1222
 
1223
#if QETH_VERBOSE_LEVEL>2
1224
#define PRINT_ALERT(x...) printk( KERN_ALERT PRINTK_HEADER x)
1225
#else
1226
#define PRINT_ALERT(x...)
1227
#endif
1228
 
1229
#if QETH_VERBOSE_LEVEL>1
1230
#define PRINT_EMERG(x...) printk( KERN_EMERG PRINTK_HEADER x)
1231
#else
1232
#define PRINT_EMERG(x...)
1233
#endif
1234
 
1235
#endif /* __QETH_H__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.