Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
s390
net
qeth_core.h
Go to the documentation of this file.
1
/*
2
* Copyright IBM Corp. 2007
3
* Author(s): Utz Bacher <
[email protected]
>,
4
* Frank Pavlic <
[email protected]
>,
5
* Thomas Spatzier <
[email protected]
>,
6
* Frank Blaschka <
[email protected]
>
7
*/
8
9
#ifndef __QETH_CORE_H__
10
#define __QETH_CORE_H__
11
12
#include <
linux/if.h
>
13
#include <linux/if_arp.h>
14
#include <
linux/etherdevice.h
>
15
#include <linux/if_vlan.h>
16
#include <linux/ctype.h>
17
#include <linux/in6.h>
18
#include <linux/bitops.h>
19
#include <
linux/seq_file.h
>
20
#include <linux/ethtool.h>
21
22
#include <
net/ipv6.h
>
23
#include <
net/if_inet6.h
>
24
#include <
net/addrconf.h
>
25
26
#include <asm/debug.h>
27
#include <
asm/qdio.h
>
28
#include <
asm/ccwdev.h
>
29
#include <
asm/ccwgroup.h
>
30
#include <asm/sysinfo.h>
31
32
#include "
qeth_core_mpc.h
"
33
37
enum
qeth_dbf_names
{
38
QETH_DBF_SETUP
,
39
QETH_DBF_MSG
,
40
QETH_DBF_CTRL
,
41
QETH_DBF_INFOS
/* must be last element */
42
};
43
44
struct
qeth_dbf_info
{
45
char
name
[
DEBUG_MAX_NAME_LEN
];
46
int
pages
;
47
int
areas
;
48
int
len
;
49
int
level
;
50
struct
debug_view
*
view
;
51
debug_info_t
*
id
;
52
};
53
54
#define QETH_DBF_CTRL_LEN 256
55
56
#define QETH_DBF_TEXT(name, level, text) \
57
debug_text_event(qeth_dbf[QETH_DBF_##name].id, level, text)
58
59
#define QETH_DBF_HEX(name, level, addr, len) \
60
debug_event(qeth_dbf[QETH_DBF_##name].id, level, (void *)(addr), len)
61
62
#define QETH_DBF_MESSAGE(level, text...) \
63
debug_sprintf_event(qeth_dbf[QETH_DBF_MSG].id, level, text)
64
65
#define QETH_DBF_TEXT_(name, level, text...) \
66
qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text)
67
68
#define QETH_CARD_TEXT(card, level, text) \
69
debug_text_event(card->debug, level, text)
70
71
#define QETH_CARD_HEX(card, level, addr, len) \
72
debug_event(card->debug, level, (void *)(addr), len)
73
74
#define QETH_CARD_MESSAGE(card, text...) \
75
debug_sprintf_event(card->debug, level, text)
76
77
#define QETH_CARD_TEXT_(card, level, text...) \
78
qeth_dbf_longtext(card->debug, level, text)
79
80
#define SENSE_COMMAND_REJECT_BYTE 0
81
#define SENSE_COMMAND_REJECT_FLAG 0x80
82
#define SENSE_RESETTING_EVENT_BYTE 1
83
#define SENSE_RESETTING_EVENT_FLAG 0x80
84
85
/*
86
* Common IO related definitions
87
*/
88
#define CARD_RDEV(card) card->read.ccwdev
89
#define CARD_WDEV(card) card->write.ccwdev
90
#define CARD_DDEV(card) card->data.ccwdev
91
#define CARD_BUS_ID(card) dev_name(&card->gdev->dev)
92
#define CARD_RDEV_ID(card) dev_name(&card->read.ccwdev->dev)
93
#define CARD_WDEV_ID(card) dev_name(&card->write.ccwdev->dev)
94
#define CARD_DDEV_ID(card) dev_name(&card->data.ccwdev->dev)
95
#define CHANNEL_ID(channel) dev_name(&channel->ccwdev->dev)
96
100
struct
qeth_perf_stats
{
101
unsigned
int
bufs_rec
;
102
unsigned
int
bufs_sent
;
103
104
unsigned
int
skbs_sent_pack
;
105
unsigned
int
bufs_sent_pack
;
106
107
unsigned
int
sc_dp_p
;
108
unsigned
int
sc_p_dp
;
109
/* qdio_cq_handler: number of times called, time spent in */
110
__u64
cq_start_time
;
111
unsigned
int
cq_cnt
;
112
unsigned
int
cq_time
;
113
/* qdio_input_handler: number of times called, time spent in */
114
__u64
inbound_start_time
;
115
unsigned
int
inbound_cnt
;
116
unsigned
int
inbound_time
;
117
/* qeth_send_packet: number of times called, time spent in */
118
__u64
outbound_start_time
;
119
unsigned
int
outbound_cnt
;
120
unsigned
int
outbound_time
;
121
/* qdio_output_handler: number of times called, time spent in */
122
__u64
outbound_handler_start_time
;
123
unsigned
int
outbound_handler_cnt
;
124
unsigned
int
outbound_handler_time
;
125
/* number of calls to and time spent in do_QDIO for inbound queue */
126
__u64
inbound_do_qdio_start_time
;
127
unsigned
int
inbound_do_qdio_cnt
;
128
unsigned
int
inbound_do_qdio_time
;
129
/* number of calls to and time spent in do_QDIO for outbound queues */
130
__u64
outbound_do_qdio_start_time
;
131
unsigned
int
outbound_do_qdio_cnt
;
132
unsigned
int
outbound_do_qdio_time
;
133
unsigned
int
large_send_bytes
;
134
unsigned
int
large_send_cnt
;
135
unsigned
int
sg_skbs_sent
;
136
unsigned
int
sg_frags_sent
;
137
/* initial values when measuring starts */
138
unsigned
long
initial_rx_packets
;
139
unsigned
long
initial_tx_packets
;
140
/* inbound scatter gather data */
141
unsigned
int
sg_skbs_rx
;
142
unsigned
int
sg_frags_rx
;
143
unsigned
int
sg_alloc_page_rx
;
144
unsigned
int
tx_csum
;
145
unsigned
int
tx_lin
;
146
};
147
148
/* Routing stuff */
149
struct
qeth_routing_info
{
150
enum
qeth_routing_types
type
;
151
};
152
153
/* IPA stuff */
154
struct
qeth_ipa_info
{
155
__u32
supported_funcs
;
156
__u32
enabled_funcs
;
157
};
158
159
static
inline
int
qeth_is_ipa_supported(
struct
qeth_ipa_info
*
ipa
,
160
enum
qeth_ipa_funcs
func
)
161
{
162
return
(ipa->
supported_funcs
& func);
163
}
164
165
static
inline
int
qeth_is_ipa_enabled(
struct
qeth_ipa_info
*
ipa
,
166
enum
qeth_ipa_funcs
func
)
167
{
168
return
(ipa->
supported_funcs
& ipa->
enabled_funcs
& func);
169
}
170
171
#define qeth_adp_supported(c, f) \
172
qeth_is_ipa_supported(&c->options.adp, f)
173
#define qeth_adp_enabled(c, f) \
174
qeth_is_ipa_enabled(&c->options.adp, f)
175
#define qeth_is_supported(c, f) \
176
qeth_is_ipa_supported(&c->options.ipa4, f)
177
#define qeth_is_enabled(c, f) \
178
qeth_is_ipa_enabled(&c->options.ipa4, f)
179
#define qeth_is_supported6(c, f) \
180
qeth_is_ipa_supported(&c->options.ipa6, f)
181
#define qeth_is_enabled6(c, f) \
182
qeth_is_ipa_enabled(&c->options.ipa6, f)
183
#define qeth_is_ipafunc_supported(c, prot, f) \
184
((prot == QETH_PROT_IPV6) ? \
185
qeth_is_supported6(c, f) : qeth_is_supported(c, f))
186
#define qeth_is_ipafunc_enabled(c, prot, f) \
187
((prot == QETH_PROT_IPV6) ? \
188
qeth_is_enabled6(c, f) : qeth_is_enabled(c, f))
189
190
#define QETH_IDX_FUNC_LEVEL_OSD 0x0101
191
#define QETH_IDX_FUNC_LEVEL_IQD 0x4108
192
193
#define QETH_MODELLIST_ARRAY \
194
{{0x1731, 0x01, 0x1732, QETH_CARD_TYPE_OSD, QETH_MAX_QUEUES, 0}, \
195
{0x1731, 0x05, 0x1732, QETH_CARD_TYPE_IQD, QETH_MAX_QUEUES, 0x103}, \
196
{0x1731, 0x06, 0x1732, QETH_CARD_TYPE_OSN, QETH_MAX_QUEUES, 0}, \
197
{0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSM, QETH_MAX_QUEUES, 0}, \
198
{0x1731, 0x02, 0x1732, QETH_CARD_TYPE_OSX, QETH_MAX_QUEUES, 0}, \
199
{0, 0, 0, 0, 0, 0} }
200
#define QETH_CU_TYPE_IND 0
201
#define QETH_CU_MODEL_IND 1
202
#define QETH_DEV_TYPE_IND 2
203
#define QETH_DEV_MODEL_IND 3
204
#define QETH_QUEUE_NO_IND 4
205
#define QETH_MULTICAST_IND 5
206
207
#define QETH_REAL_CARD 1
208
#define QETH_VLAN_CARD 2
209
#define QETH_BUFSIZE 4096
210
214
#define QETH_TX_TIMEOUT 100 * HZ
215
#define QETH_RCD_TIMEOUT 60 * HZ
216
#define QETH_RECLAIM_WORK_TIME HZ
217
#define QETH_HEADER_SIZE 32
218
#define QETH_MAX_PORTNO 15
219
220
/*IPv6 address autoconfiguration stuff*/
221
#define UNIQUE_ID_IF_CREATE_ADDR_FAILED 0xfffe
222
#define UNIQUE_ID_NOT_BY_CARD 0x10000
223
224
/*****************************************************************************/
225
/* QDIO queue and buffer handling */
226
/*****************************************************************************/
227
#define QETH_MAX_QUEUES 4
228
#define QETH_IN_BUF_SIZE_DEFAULT 65536
229
#define QETH_IN_BUF_COUNT_DEFAULT 64
230
#define QETH_IN_BUF_COUNT_HSDEFAULT 128
231
#define QETH_IN_BUF_COUNT_MIN 8
232
#define QETH_IN_BUF_COUNT_MAX 128
233
#define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12)
234
#define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \
235
((card)->qdio.in_buf_pool.buf_count / 2)
236
237
/* buffers we have to be behind before we get a PCI */
238
#define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1)
239
/*enqueued free buffers left before we get a PCI*/
240
#define QETH_PCI_THRESHOLD_B(card) 0
241
/*not used unless the microcode gets patched*/
242
#define QETH_PCI_TIMER_VALUE(card) 3
243
244
/* priority queing */
245
#define QETH_PRIOQ_DEFAULT QETH_NO_PRIO_QUEUEING
246
#define QETH_DEFAULT_QUEUE 2
247
#define QETH_NO_PRIO_QUEUEING 0
248
#define QETH_PRIO_Q_ING_PREC 1
249
#define QETH_PRIO_Q_ING_TOS 2
250
#define IP_TOS_LOWDELAY 0x10
251
#define IP_TOS_HIGHTHROUGHPUT 0x08
252
#define IP_TOS_HIGHRELIABILITY 0x04
253
#define IP_TOS_NOTIMPORTANT 0x02
254
255
/* Packing */
256
#define QETH_LOW_WATERMARK_PACK 2
257
#define QETH_HIGH_WATERMARK_PACK 5
258
#define QETH_WATERMARK_PACK_FUZZ 1
259
260
#define QETH_IP_HEADER_SIZE 40
261
262
/* large receive scatter gather copy break */
263
#define QETH_RX_SG_CB (PAGE_SIZE >> 1)
264
#define QETH_RX_PULL_LEN 256
265
266
struct
qeth_hdr_layer3
{
267
__u8
id
;
268
__u8
flags
;
269
__u16
inbound_checksum
;
/*TSO:__u16 seqno */
270
__u32
token
;
/*TSO: __u32 reserved */
271
__u16
length
;
272
__u8
vlan_prio
;
273
__u8
ext_flags
;
274
__u16
vlan_id
;
275
__u16
frame_offset
;
276
__u8
dest_addr
[16];
277
}
__attribute__
((packed));
278
279
struct
qeth_hdr_layer2
{
280
__u8
id
;
281
__u8
flags
[3];
282
__u8
port_no
;
283
__u8
hdr_length
;
284
__u16
pkt_length
;
285
__u16
seq_no
;
286
__u16
vlan_id
;
287
__u32
reserved
;
288
__u8
reserved2
[16];
289
}
__attribute__
((packed));
290
291
struct
qeth_hdr_osn
{
292
__u8
id
;
293
__u8
reserved
;
294
__u16
seq_no
;
295
__u16
reserved2
;
296
__u16
control_flags
;
297
__u16
pdu_length
;
298
__u8
reserved3
[18];
299
__u32
ccid
;
300
}
__attribute__
((packed));
301
302
struct
qeth_hdr
{
303
union
{
304
struct
qeth_hdr_layer2
l2
;
305
struct
qeth_hdr_layer3
l3
;
306
struct
qeth_hdr_osn
osn
;
307
}
hdr
;
308
}
__attribute__
((packed));
309
310
/*TCP Segmentation Offload header*/
311
struct
qeth_hdr_ext_tso
{
312
__u16
hdr_tot_len
;
313
__u8
imb_hdr_no
;
314
__u8
reserved
;
315
__u8
hdr_type
;
316
__u8
hdr_version
;
317
__u16
hdr_len
;
318
__u32
payload_len
;
319
__u16
mss
;
320
__u16
dg_hdr_len
;
321
__u8
padding
[16];
322
}
__attribute__
((packed));
323
324
struct
qeth_hdr_tso
{
325
struct
qeth_hdr
hdr
;
/*hdr->hdr.l3.xxx*/
326
struct
qeth_hdr_ext_tso
ext
;
327
}
__attribute__
((packed));
328
329
330
/* flags for qeth_hdr.flags */
331
#define QETH_HDR_PASSTHRU 0x10
332
#define QETH_HDR_IPV6 0x80
333
#define QETH_HDR_CAST_MASK 0x07
334
enum
qeth_cast_flags
{
335
QETH_CAST_UNICAST
= 0x06,
336
QETH_CAST_MULTICAST
= 0x04,
337
QETH_CAST_BROADCAST
= 0x05,
338
QETH_CAST_ANYCAST
= 0x07,
339
QETH_CAST_NOCAST
= 0x00,
340
};
341
342
enum
qeth_layer2_frame_flags
{
343
QETH_LAYER2_FLAG_MULTICAST
= 0x01,
344
QETH_LAYER2_FLAG_BROADCAST
= 0x02,
345
QETH_LAYER2_FLAG_UNICAST
= 0x04,
346
QETH_LAYER2_FLAG_VLAN
= 0x10,
347
};
348
349
enum
qeth_header_ids
{
350
QETH_HEADER_TYPE_LAYER3
= 0x01,
351
QETH_HEADER_TYPE_LAYER2
= 0x02,
352
QETH_HEADER_TYPE_TSO
= 0x03,
353
QETH_HEADER_TYPE_OSN
= 0x04,
354
};
355
/* flags for qeth_hdr.ext_flags */
356
#define QETH_HDR_EXT_VLAN_FRAME 0x01
357
#define QETH_HDR_EXT_TOKEN_ID 0x02
358
#define QETH_HDR_EXT_INCLUDE_VLAN_TAG 0x04
359
#define QETH_HDR_EXT_SRC_MAC_ADDR 0x08
360
#define QETH_HDR_EXT_CSUM_HDR_REQ 0x10
361
#define QETH_HDR_EXT_CSUM_TRANSP_REQ 0x20
362
#define QETH_HDR_EXT_UDP 0x40
/*bit off for TCP*/
363
364
static
inline
int
qeth_is_last_sbale(
struct
qdio_buffer_element
*sbale)
365
{
366
return
(sbale->
eflags
&
SBAL_EFLAGS_LAST_ENTRY
);
367
}
368
369
enum
qeth_qdio_buffer_states
{
370
/*
371
* inbound: read out by driver; owned by hardware in order to be filled
372
* outbound: owned by driver in order to be filled
373
*/
374
QETH_QDIO_BUF_EMPTY
,
375
/*
376
* inbound: filled by hardware; owned by driver in order to be read out
377
* outbound: filled by driver; owned by hardware in order to be sent
378
*/
379
QETH_QDIO_BUF_PRIMED
,
380
/*
381
* inbound: not applicable
382
* outbound: identified to be pending in TPQ
383
*/
384
QETH_QDIO_BUF_PENDING
,
385
/*
386
* inbound: not applicable
387
* outbound: found in completion queue
388
*/
389
QETH_QDIO_BUF_IN_CQ
,
390
/*
391
* inbound: not applicable
392
* outbound: handled via transfer pending / completion queue
393
*/
394
QETH_QDIO_BUF_HANDLED_DELAYED
,
395
};
396
397
enum
qeth_qdio_info_states
{
398
QETH_QDIO_UNINITIALIZED
,
399
QETH_QDIO_ALLOCATED
,
400
QETH_QDIO_ESTABLISHED
,
401
QETH_QDIO_CLEANING
402
};
403
404
struct
qeth_buffer_pool_entry
{
405
struct
list_head
list
;
406
struct
list_head
init_list
;
407
void
*
elements
[
QDIO_MAX_ELEMENTS_PER_BUFFER
];
408
};
409
410
struct
qeth_qdio_buffer_pool
{
411
struct
list_head
entry_list
;
412
int
buf_count
;
413
};
414
415
struct
qeth_qdio_buffer
{
416
struct
qdio_buffer
*
buffer
;
417
/* the buffer pool entry currently associated to this buffer */
418
struct
qeth_buffer_pool_entry
*
pool_entry
;
419
struct
sk_buff
*
rx_skb
;
420
};
421
422
struct
qeth_qdio_q
{
423
struct
qdio_buffer
qdio_bufs
[
QDIO_MAX_BUFFERS_PER_Q
];
424
struct
qeth_qdio_buffer
bufs
[
QDIO_MAX_BUFFERS_PER_Q
];
425
int
next_buf_to_init
;
426
}
__attribute__
((
aligned
(256)));
427
428
struct
qeth_qdio_out_buffer
{
429
struct
qdio_buffer
*
buffer
;
430
atomic_t
state
;
431
int
next_element_to_fill
;
432
struct
sk_buff_head
skb_list
;
433
int
is_header
[16];
434
435
struct
qaob
*
aob
;
436
struct
qeth_qdio_out_q
*
q
;
437
struct
qeth_qdio_out_buffer
*
next_pending
;
438
};
439
440
struct
qeth_card
;
441
442
enum
qeth_out_q_states
{
443
QETH_OUT_Q_UNLOCKED
,
444
QETH_OUT_Q_LOCKED
,
445
QETH_OUT_Q_LOCKED_FLUSH
,
446
};
447
448
struct
qeth_qdio_out_q
{
449
struct
qdio_buffer
qdio_bufs
[
QDIO_MAX_BUFFERS_PER_Q
];
450
struct
qeth_qdio_out_buffer
*
bufs
[
QDIO_MAX_BUFFERS_PER_Q
];
451
struct
qdio_outbuf_state
*
bufstates
;
/* convenience pointer */
452
int
queue_no
;
453
struct
qeth_card
*
card
;
454
atomic_t
state
;
455
int
do_pack
;
456
/*
457
* index of buffer to be filled by driver; state EMPTY or PACKING
458
*/
459
int
next_buf_to_fill
;
460
/*
461
* number of buffers that are currently filled (PRIMED)
462
* -> these buffers are hardware-owned
463
*/
464
atomic_t
used_buffers
;
465
/* indicates whether PCI flag must be set (or if one is outstanding) */
466
atomic_t
set_pci_flags_count
;
467
}
__attribute__
((
aligned
(256)));
468
469
struct
qeth_qdio_info
{
470
atomic_t
state
;
471
/* input */
472
int
no_in_queues
;
473
struct
qeth_qdio_q
*
in_q
;
474
struct
qeth_qdio_q
*
c_q
;
475
struct
qeth_qdio_buffer_pool
in_buf_pool
;
476
struct
qeth_qdio_buffer_pool
init_pool
;
477
int
in_buf_size
;
478
479
/* output */
480
int
no_out_queues
;
481
struct
qeth_qdio_out_q
**
out_qs
;
482
struct
qdio_outbuf_state
*
out_bufstates
;
483
484
/* priority queueing */
485
int
do_prio_queueing
;
486
int
default_out_queue
;
487
};
488
489
enum
qeth_send_errors
{
490
QETH_SEND_ERROR_NONE
,
491
QETH_SEND_ERROR_LINK_FAILURE
,
492
QETH_SEND_ERROR_RETRY
,
493
QETH_SEND_ERROR_KICK_IT
,
494
};
495
496
#define QETH_ETH_MAC_V4 0x0100
/* like v4 */
497
#define QETH_ETH_MAC_V6 0x3333
/* like v6 */
498
/* tr mc mac is longer, but that will be enough to detect mc frames */
499
#define QETH_TR_MAC_NC 0xc000
/* non-canonical */
500
#define QETH_TR_MAC_C 0x0300
/* canonical */
501
502
#define DEFAULT_ADD_HHLEN 0
503
#define MAX_ADD_HHLEN 1024
504
508
#define QETH_CMD_BUFFER_NO 8
509
513
enum
qeth_channel_states
{
514
CH_STATE_UP
,
515
CH_STATE_DOWN
,
516
CH_STATE_ACTIVATING
,
517
CH_STATE_HALTED
,
518
CH_STATE_STOPPED
,
519
CH_STATE_RCD
,
520
CH_STATE_RCD_DONE
,
521
};
525
enum
qeth_card_states
{
526
CARD_STATE_DOWN
,
527
CARD_STATE_HARDSETUP
,
528
CARD_STATE_SOFTSETUP
,
529
CARD_STATE_UP
,
530
CARD_STATE_RECOVER
,
531
};
532
536
enum
qeth_prot_versions
{
537
QETH_PROT_IPV4
= 0x0004,
538
QETH_PROT_IPV6
= 0x0006,
539
};
540
541
enum
qeth_ip_types
{
542
QETH_IP_TYPE_NORMAL
,
543
QETH_IP_TYPE_VIPA
,
544
QETH_IP_TYPE_RXIP
,
545
QETH_IP_TYPE_DEL_ALL_MC
,
546
};
547
548
enum
qeth_cmd_buffer_state
{
549
BUF_STATE_FREE
,
550
BUF_STATE_LOCKED
,
551
BUF_STATE_PROCESSED
,
552
};
553
554
enum
qeth_cq
{
555
QETH_CQ_DISABLED
= 0,
556
QETH_CQ_ENABLED
= 1,
557
QETH_CQ_NOTAVAILABLE
= 2,
558
};
559
560
struct
qeth_ipato
{
561
int
enabled
;
562
int
invert4
;
563
int
invert6
;
564
struct
list_head
entries
;
565
};
566
567
struct
qeth_channel
;
568
569
struct
qeth_cmd_buffer
{
570
enum
qeth_cmd_buffer_state
state
;
571
struct
qeth_channel
*
channel
;
572
unsigned
char
*
data
;
573
int
rc
;
574
void
(*
callback
) (
struct
qeth_channel
*,
struct
qeth_cmd_buffer
*);
575
};
576
580
struct
qeth_channel
{
581
enum
qeth_channel_states
state
;
582
struct
ccw1
ccw
;
583
spinlock_t
iob_lock
;
584
wait_queue_head_t
wait_q
;
585
struct
tasklet_struct
irq_tasklet
;
586
struct
ccw_device
*
ccwdev
;
587
/*command buffer for control data*/
588
struct
qeth_cmd_buffer
iob
[
QETH_CMD_BUFFER_NO
];
589
atomic_t
irq_pending
;
590
int
io_buf_no
;
591
int
buf_no
;
592
};
593
597
struct
qeth_token
{
598
__u32
issuer_rm_w
;
599
__u32
issuer_rm_r
;
600
__u32
cm_filter_w
;
601
__u32
cm_filter_r
;
602
__u32
cm_connection_w
;
603
__u32
cm_connection_r
;
604
__u32
ulp_filter_w
;
605
__u32
ulp_filter_r
;
606
__u32
ulp_connection_w
;
607
__u32
ulp_connection_r
;
608
};
609
610
struct
qeth_seqno
{
611
__u32
trans_hdr
;
612
__u32
pdu_hdr
;
613
__u32
pdu_hdr_ack
;
614
__u16
ipa
;
615
__u32
pkt_seqno
;
616
};
617
618
struct
qeth_reply
{
619
struct
list_head
list
;
620
wait_queue_head_t
wait_q
;
621
int
(*
callback
)(
struct
qeth_card
*,
struct
qeth_reply
*,
622
unsigned
long
);
623
u32
seqno
;
624
unsigned
long
offset
;
625
atomic_t
received
;
626
int
rc
;
627
void
*
param
;
628
struct
qeth_card
*
card
;
629
atomic_t
refcnt
;
630
};
631
632
633
struct
qeth_card_blkt
{
634
int
time_total
;
635
int
inter_packet
;
636
int
inter_packet_jumbo
;
637
};
638
639
#define QETH_BROADCAST_WITH_ECHO 0x01
640
#define QETH_BROADCAST_WITHOUT_ECHO 0x02
641
#define QETH_LAYER2_MAC_READ 0x01
642
#define QETH_LAYER2_MAC_REGISTERED 0x02
643
struct
qeth_card_info
{
644
unsigned
short
unit_addr2
;
645
unsigned
short
cula
;
646
unsigned
short
chpid
;
647
__u16
func_level
;
648
char
mcl_level
[
QETH_MCL_LENGTH
+ 1];
649
int
guestlan
;
650
int
mac_bits
;
651
int
portname_required
;
652
int
portno
;
653
char
portname
[9];
654
enum
qeth_card_types
type
;
655
enum
qeth_link_types
link_type
;
656
int
is_multicast_different
;
657
int
initial_mtu
;
658
int
max_mtu
;
659
int
broadcast_capable
;
660
int
unique_id
;
661
struct
qeth_card_blkt
blkt
;
662
__u32
csum_mask
;
663
__u32
tx_csum_mask
;
664
enum
qeth_ipa_promisc_modes
promisc_mode
;
665
__u32
diagass_support
;
666
__u32
hwtrap
;
667
};
668
669
struct
qeth_card_options
{
670
struct
qeth_routing_info
route4
;
671
struct
qeth_ipa_info
ipa4
;
672
struct
qeth_ipa_info
adp
;
/*Adapter parameters*/
673
struct
qeth_routing_info
route6
;
674
struct
qeth_ipa_info
ipa6
;
675
int
fake_broadcast
;
676
int
add_hhlen
;
677
int
layer2
;
678
int
performance_stats
;
679
int
rx_sg_cb
;
680
enum
qeth_ipa_isolation_modes
isolation
;
681
int
sniffer
;
682
enum
qeth_cq
cq
;
683
char
hsuid
[9];
684
};
685
686
/*
687
* thread bits for qeth_card thread masks
688
*/
689
enum
qeth_threads
{
690
QETH_RECOVER_THREAD
= 1,
691
};
692
693
struct
qeth_osn_info
{
694
int
(*
assist_cb
)(
struct
net_device
*
dev
,
void
*
data
);
695
int
(*
data_cb
)(
struct
sk_buff
*
skb
);
696
};
697
698
enum
qeth_discipline_id
{
699
QETH_DISCIPLINE_LAYER3
= 0,
700
QETH_DISCIPLINE_LAYER2
= 1,
701
};
702
703
struct
qeth_discipline
{
704
void
(*
start_poll
)(
struct
ccw_device
*,
int
,
unsigned
long
);
705
qdio_handler_t
*
input_handler
;
706
qdio_handler_t
*
output_handler
;
707
int
(*
recover
)(
void
*
ptr
);
708
int
(*
setup
) (
struct
ccwgroup_device
*);
709
void
(*
remove
) (
struct
ccwgroup_device
*);
710
int
(*
set_online
) (
struct
ccwgroup_device
*);
711
int
(*
set_offline
) (
struct
ccwgroup_device
*);
712
void
(*
shutdown
)(
struct
ccwgroup_device
*);
713
int
(*
prepare
) (
struct
ccwgroup_device
*);
714
void
(*
complete
) (
struct
ccwgroup_device
*);
715
int
(*
freeze
)(
struct
ccwgroup_device
*);
716
int
(*
thaw
) (
struct
ccwgroup_device
*);
717
int
(*
restore
)(
struct
ccwgroup_device
*);
718
};
719
720
struct
qeth_vlan_vid
{
721
struct
list_head
list
;
722
unsigned
short
vid
;
723
};
724
725
struct
qeth_mc_mac
{
726
struct
list_head
list
;
727
__u8
mc_addr
[
MAX_ADDR_LEN
];
728
unsigned
char
mc_addrlen
;
729
int
is_vmac
;
730
};
731
732
struct
qeth_rx
{
733
int
b_count
;
734
int
b_index
;
735
struct
qdio_buffer_element
*
b_element
;
736
int
e_offset
;
737
int
qdio_err
;
738
};
739
740
#define QETH_NAPI_WEIGHT 128
741
742
struct
qeth_card
{
743
struct
list_head
list
;
744
enum
qeth_card_states
state
;
745
int
lan_online
;
746
spinlock_t
lock
;
747
struct
ccwgroup_device
*
gdev
;
748
struct
qeth_channel
read
;
749
struct
qeth_channel
write
;
750
struct
qeth_channel
data
;
751
752
struct
net_device
*
dev
;
753
struct
net_device_stats
stats
;
754
755
struct
qeth_card_info
info
;
756
struct
qeth_token
token
;
757
struct
qeth_seqno
seqno
;
758
struct
qeth_card_options
options
;
759
760
wait_queue_head_t
wait_q
;
761
spinlock_t
vlanlock
;
762
spinlock_t
mclock
;
763
unsigned
long
active_vlans
[
BITS_TO_LONGS
(
VLAN_N_VID
)];
764
struct
list_head
vid_list
;
765
struct
list_head
mc_list
;
766
struct
work_struct
kernel_thread_starter
;
767
spinlock_t
thread_mask_lock
;
768
unsigned
long
thread_start_mask
;
769
unsigned
long
thread_allowed_mask
;
770
unsigned
long
thread_running_mask
;
771
spinlock_t
ip_lock
;
772
struct
list_head
ip_list
;
773
struct
list_head
*
ip_tbd_list
;
774
struct
qeth_ipato
ipato
;
775
struct
list_head
cmd_waiter_list
;
776
/* QDIO buffer handling */
777
struct
qeth_qdio_info
qdio
;
778
struct
qeth_perf_stats
perf_stats
;
779
int
read_or_write_problem
;
780
struct
qeth_osn_info
osn_info
;
781
struct
qeth_discipline
*
discipline
;
782
atomic_t
force_alloc_skb
;
783
struct
service_level
qeth_service_level
;
784
struct
qdio_ssqd_desc
ssqd
;
785
debug_info_t
*
debug
;
786
struct
mutex
conf_mutex
;
787
struct
mutex
discipline_mutex
;
788
struct
napi_struct
napi
;
789
struct
qeth_rx
rx
;
790
struct
delayed_work
buffer_reclaim_work
;
791
int
reclaim_index
;
792
};
793
794
struct
qeth_card_list_struct
{
795
struct
list_head
list
;
796
rwlock_t
rwlock
;
797
};
798
799
struct
qeth_trap_id
{
800
__u16
lparnr
;
801
char
vmname
[8];
802
__u8
chpid
;
803
__u8
ssid
;
804
__u16
devno
;
805
}
__packed
;
806
807
/*some helper functions*/
808
#define QETH_CARD_IFNAME(card) (((card)->dev)? (card)->dev->name : "")
809
810
static
inline
struct
qeth_card
*CARD_FROM_CDEV(
struct
ccw_device
*
cdev
)
811
{
812
struct
qeth_card
*
card
=
dev_get_drvdata
(&((
struct
ccwgroup_device
*)
813
dev_get_drvdata
(&cdev->
dev
))->dev);
814
return
card
;
815
}
816
817
static
inline
int
qeth_get_micros(
void
)
818
{
819
return
(
int
) (
get_clock
() >> 12);
820
}
821
822
static
inline
int
qeth_get_ip_version(
struct
sk_buff
*
skb
)
823
{
824
struct
ethhdr
*ehdr = (
struct
ethhdr
*)skb->
data
;
825
switch (ehdr->
h_proto
) {
826
case
ETH_P_IPV6
:
827
return
6;
828
case
ETH_P_IP
:
829
return
4;
830
default
:
831
return
0;
832
}
833
}
834
835
static
inline
void
qeth_put_buffer_pool_entry(
struct
qeth_card
*
card
,
836
struct
qeth_buffer_pool_entry
*
entry
)
837
{
838
list_add_tail
(&entry->
list
, &card->
qdio
.in_buf_pool.entry_list);
839
}
840
841
static
inline
int
qeth_is_diagass_supported(
struct
qeth_card
*
card
,
842
enum
qeth_diags_cmds
cmd
)
843
{
844
return
card->
info
.diagass_support & (
__u32
)cmd;
845
}
846
847
extern
struct
qeth_discipline
qeth_l2_discipline
;
848
extern
struct
qeth_discipline
qeth_l3_discipline
;
849
extern
const
struct
attribute_group
*
qeth_generic_attr_groups
[];
850
extern
const
struct
attribute_group
*
qeth_osn_attr_groups
[];
851
852
const
char
*
qeth_get_cardname_short
(
struct
qeth_card
*);
853
int
qeth_realloc_buffer_pool
(
struct
qeth_card
*,
int
);
854
int
qeth_core_load_discipline
(
struct
qeth_card
*,
enum
qeth_discipline_id
);
855
void
qeth_core_free_discipline
(
struct
qeth_card
*);
856
void
qeth_buffer_reclaim_work
(
struct
work_struct
*);
857
858
/* exports for qeth discipline device drivers */
859
extern
struct
qeth_card_list_struct
qeth_core_card_list
;
860
extern
struct
kmem_cache
*
qeth_core_header_cache
;
861
extern
struct
qeth_dbf_info
qeth_dbf
[
QETH_DBF_INFOS
];
862
863
void
qeth_set_allowed_threads
(
struct
qeth_card
*,
unsigned
long
,
int
);
864
int
qeth_threads_running
(
struct
qeth_card
*,
unsigned
long
);
865
int
qeth_wait_for_threads
(
struct
qeth_card
*,
unsigned
long
);
866
int
qeth_do_run_thread
(
struct
qeth_card
*,
unsigned
long
);
867
void
qeth_clear_thread_start_bit
(
struct
qeth_card
*,
unsigned
long
);
868
void
qeth_clear_thread_running_bit
(
struct
qeth_card
*,
unsigned
long
);
869
int
qeth_core_hardsetup_card
(
struct
qeth_card
*);
870
void
qeth_print_status_message
(
struct
qeth_card
*);
871
int
qeth_init_qdio_queues
(
struct
qeth_card
*);
872
int
qeth_send_startlan
(
struct
qeth_card
*);
873
int
qeth_send_stoplan
(
struct
qeth_card
*);
874
int
qeth_send_ipa_cmd
(
struct
qeth_card
*,
struct
qeth_cmd_buffer
*,
875
int
(*reply_cb)
876
(
struct
qeth_card
*,
struct
qeth_reply
*,
unsigned
long
),
877
void
*);
878
struct
qeth_cmd_buffer
*
qeth_get_ipacmd_buffer
(
struct
qeth_card
*,
879
enum
qeth_ipa_cmds
,
enum
qeth_prot_versions
);
880
int
qeth_query_setadapterparms
(
struct
qeth_card
*);
881
int
qeth_check_qdio_errors
(
struct
qeth_card
*,
struct
qdio_buffer
*,
882
unsigned
int
,
const
char
*);
883
void
qeth_queue_input_buffer
(
struct
qeth_card
*,
int
);
884
struct
sk_buff
*
qeth_core_get_next_skb
(
struct
qeth_card
*,
885
struct
qeth_qdio_buffer
*,
struct
qdio_buffer_element
**,
int
*,
886
struct
qeth_hdr
**);
887
void
qeth_schedule_recovery
(
struct
qeth_card
*);
888
void
qeth_qdio_start_poll
(
struct
ccw_device
*,
int
,
unsigned
long
);
889
void
qeth_qdio_input_handler
(
struct
ccw_device
*,
890
unsigned
int
,
unsigned
int
,
int
,
891
int
,
unsigned
long
);
892
void
qeth_qdio_output_handler
(
struct
ccw_device
*,
unsigned
int
,
893
int
,
int
,
int
,
unsigned
long
);
894
void
qeth_clear_ipacmd_list
(
struct
qeth_card
*);
895
int
qeth_qdio_clear_card
(
struct
qeth_card
*,
int
);
896
void
qeth_clear_working_pool_list
(
struct
qeth_card
*);
897
void
qeth_clear_cmd_buffers
(
struct
qeth_channel
*);
898
void
qeth_clear_qdio_buffers
(
struct
qeth_card
*);
899
void
qeth_setadp_promisc_mode
(
struct
qeth_card
*);
900
struct
net_device_stats
*
qeth_get_stats
(
struct
net_device
*);
901
int
qeth_change_mtu
(
struct
net_device
*,
int
);
902
int
qeth_setadpparms_change_macaddr
(
struct
qeth_card
*);
903
void
qeth_tx_timeout
(
struct
net_device
*);
904
void
qeth_prepare_control_data
(
struct
qeth_card
*,
int
,
905
struct
qeth_cmd_buffer
*);
906
void
qeth_release_buffer
(
struct
qeth_channel
*,
struct
qeth_cmd_buffer
*);
907
void
qeth_prepare_ipa_cmd
(
struct
qeth_card
*,
struct
qeth_cmd_buffer
*,
char
);
908
struct
qeth_cmd_buffer
*
qeth_wait_for_buffer
(
struct
qeth_channel
*);
909
int
qeth_mdio_read
(
struct
net_device
*,
int
,
int
);
910
int
qeth_snmp_command
(
struct
qeth_card
*,
char
__user *);
911
int
qeth_query_oat_command
(
struct
qeth_card
*,
char
__user *);
912
struct
qeth_cmd_buffer
*
qeth_get_adapter_cmd
(
struct
qeth_card
*,
__u32
,
__u32
);
913
int
qeth_default_setadapterparms_cb
(
struct
qeth_card
*,
struct
qeth_reply
*,
914
unsigned
long
);
915
int
qeth_send_control_data
(
struct
qeth_card
*,
int
,
struct
qeth_cmd_buffer
*,
916
int
(*reply_cb)(
struct
qeth_card
*,
struct
qeth_reply
*,
unsigned
long
),
917
void
*reply_param);
918
int
qeth_get_priority_queue
(
struct
qeth_card
*,
struct
sk_buff
*,
int
,
int
);
919
int
qeth_get_elements_no
(
struct
qeth_card
*,
void
*,
struct
sk_buff
*,
int
);
920
int
qeth_do_send_packet_fast
(
struct
qeth_card
*,
struct
qeth_qdio_out_q
*,
921
struct
sk_buff
*,
struct
qeth_hdr
*,
int
,
int
,
int
);
922
int
qeth_do_send_packet
(
struct
qeth_card
*,
struct
qeth_qdio_out_q
*,
923
struct
sk_buff
*,
struct
qeth_hdr
*,
int
);
924
int
qeth_core_get_sset_count
(
struct
net_device
*,
int
);
925
void
qeth_core_get_ethtool_stats
(
struct
net_device
*,
926
struct
ethtool_stats
*,
u64
*);
927
void
qeth_core_get_strings
(
struct
net_device
*,
u32
,
u8
*);
928
void
qeth_core_get_drvinfo
(
struct
net_device
*,
struct
ethtool_drvinfo
*);
929
void
qeth_dbf_longtext
(
debug_info_t
*
id
,
int
level
,
char
*
text
, ...);
930
int
qeth_core_ethtool_get_settings
(
struct
net_device
*,
struct
ethtool_cmd
*);
931
int
qeth_set_access_ctrl_online
(
struct
qeth_card
*
card
);
932
int
qeth_hdr_chk_and_bounce
(
struct
sk_buff
*,
int
);
933
int
qeth_configure_cq
(
struct
qeth_card
*,
enum
qeth_cq
);
934
int
qeth_hw_trap
(
struct
qeth_card
*,
enum
qeth_diags_trap_action
);
935
int
qeth_query_ipassists
(
struct
qeth_card
*,
enum
qeth_prot_versions
prot);
936
937
/* exports for OSN */
938
int
qeth_osn_assist
(
struct
net_device
*,
void
*,
int
);
939
int
qeth_osn_register
(
unsigned
char
*read_dev_no,
struct
net_device
**,
940
int
(*assist_cb)(
struct
net_device
*,
void
*),
941
int
(*data_cb)(
struct
sk_buff
*));
942
void
qeth_osn_deregister
(
struct
net_device
*);
943
944
#endif
/* __QETH_CORE_H__ */
Generated on Thu Jan 10 2013 14:18:11 for Linux Kernel by
1.8.2