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
lcs.h
Go to the documentation of this file.
1
/*lcs.h*/
2
3
#include <
linux/interrupt.h
>
4
#include <linux/netdevice.h>
5
#include <
linux/skbuff.h
>
6
#include <
linux/workqueue.h
>
7
#include <
asm/ccwdev.h
>
8
9
#define LCS_DBF_TEXT(level, name, text) \
10
do { \
11
debug_text_event(lcs_dbf_##name, level, text); \
12
} while (0)
13
14
#define LCS_DBF_HEX(level,name,addr,len) \
15
do { \
16
debug_event(lcs_dbf_##name,level,(void*)(addr),len); \
17
} while (0)
18
19
/* Allow to sort out low debug levels early to avoid wasted sprints */
20
static
inline
int
lcs_dbf_passes(
debug_info_t
*dbf_grp,
int
level
)
21
{
22
return
(level <= dbf_grp->level);
23
}
24
25
#define LCS_DBF_TEXT_(level,name,text...) \
26
do { \
27
if (lcs_dbf_passes(lcs_dbf_##name, level)) { \
28
sprintf(debug_buffer, text); \
29
debug_text_event(lcs_dbf_##name, level, debug_buffer); \
30
} \
31
} while (0)
32
36
#define CARD_FROM_DEV(cdev) \
37
(struct lcs_card *) dev_get_drvdata( \
38
&((struct ccwgroup_device *)dev_get_drvdata(&cdev->dev))->dev);
39
43
enum
lcs_channel_types
{
44
/* Device is not a channel */
45
lcs_channel_type_none
,
46
47
/* Device is a 2216 channel */
48
lcs_channel_type_parallel
,
49
50
/* Device is a 2216 channel */
51
lcs_channel_type_2216
,
52
53
/* Device is a OSA2 card */
54
lcs_channel_type_osa2
55
};
56
60
#define LCS_CCW_WRITE 0x01
61
#define LCS_CCW_READ 0x02
62
#define LCS_CCW_TRANSFER 0x08
63
67
#define LCS_CMD_STARTLAN 0x01
68
#define LCS_CMD_STOPLAN 0x02
69
#define LCS_CMD_LANSTAT 0x04
70
#define LCS_CMD_STARTUP 0x07
71
#define LCS_CMD_SHUTDOWN 0x08
72
#define LCS_CMD_QIPASSIST 0xb2
73
#define LCS_CMD_SETIPM 0xb4
74
#define LCS_CMD_DELIPM 0xb5
75
76
#define LCS_INITIATOR_TCPIP 0x00
77
#define LCS_INITIATOR_LGW 0x01
78
#define LCS_STD_CMD_SIZE 16
79
#define LCS_MULTICAST_CMD_SIZE 404
80
84
/* Not supported by LCS */
85
#define LCS_IPASS_ARP_PROCESSING 0x0001
86
#define LCS_IPASS_IN_CHECKSUM_SUPPORT 0x0002
87
#define LCS_IPASS_OUT_CHECKSUM_SUPPORT 0x0004
88
#define LCS_IPASS_IP_FRAG_REASSEMBLY 0x0008
89
#define LCS_IPASS_IP_FILTERING 0x0010
90
/* Supported by lcs 3172 */
91
#define LCS_IPASS_IPV6_SUPPORT 0x0020
92
#define LCS_IPASS_MULTICAST_SUPPORT 0x0040
93
97
#define LCS_SENSE_BYTE_0 0
98
#define LCS_SENSE_BYTE_1 1
99
#define LCS_SENSE_BYTE_2 2
100
#define LCS_SENSE_BYTE_3 3
101
#define LCS_SENSE_INTERFACE_DISCONNECT 0x01
102
#define LCS_SENSE_EQUIPMENT_CHECK 0x10
103
#define LCS_SENSE_BUS_OUT_CHECK 0x20
104
#define LCS_SENSE_INTERVENTION_REQUIRED 0x40
105
#define LCS_SENSE_CMD_REJECT 0x80
106
#define LCS_SENSE_RESETTING_EVENT 0x80
107
#define LCS_SENSE_DEVICE_ONLINE 0x20
108
112
#define LCS_FRAME_TYPE_CONTROL 0
113
#define LCS_FRAME_TYPE_ENET 1
114
#define LCS_FRAME_TYPE_TR 2
115
#define LCS_FRAME_TYPE_FDDI 7
116
#define LCS_FRAME_TYPE_AUTO -1
117
121
#define LCS_ILLEGAL_OFFSET 0xffff
122
#define LCS_IOBUFFERSIZE 0x5000
123
#define LCS_NUM_BUFFS 32
/* needs to be power of 2 */
124
#define LCS_MAC_LENGTH 6
125
#define LCS_INVALID_PORT_NO -1
126
#define LCS_LANCMD_TIMEOUT_DEFAULT 5
127
131
#define LCS_IPM_STATE_SET_REQUIRED 0
132
#define LCS_IPM_STATE_DEL_REQUIRED 1
133
#define LCS_IPM_STATE_ON_CARD 2
134
139
#define LCS_IPASS_ARP_PROCESSING 0x0001
140
#define LCS_IPASS_INBOUND_CSUM_SUPP 0x0002
141
#define LCS_IPASS_OUTBOUND_CSUM_SUPP 0x0004
142
#define LCS_IPASS_IP_FRAG_REASSEMBLY 0x0008
143
#define LCS_IPASS_IP_FILTERING 0x0010
144
#define LCS_IPASS_IPV6_SUPPORT 0x0020
145
#define LCS_IPASS_MULTICAST_SUPPORT 0x0040
146
150
enum
lcs_buffer_states
{
151
LCS_BUF_STATE_EMPTY
,
/* buffer is empty */
152
LCS_BUF_STATE_LOCKED
,
/* buffer is locked, don't touch */
153
LCS_BUF_STATE_READY
,
/* buffer is ready for read/write */
154
LCS_BUF_STATE_PROCESSED
,
155
};
156
160
enum
lcs_channel_states
{
161
LCS_CH_STATE_INIT
,
162
LCS_CH_STATE_HALTED
,
163
LCS_CH_STATE_STOPPED
,
164
LCS_CH_STATE_RUNNING
,
165
LCS_CH_STATE_SUSPENDED
,
166
LCS_CH_STATE_CLEARED
,
167
LCS_CH_STATE_ERROR
,
168
};
169
173
enum
lcs_dev_states
{
174
DEV_STATE_DOWN
,
175
DEV_STATE_UP
,
176
DEV_STATE_RECOVER
,
177
};
178
179
enum
lcs_threads
{
180
LCS_SET_MC_THREAD
= 1,
181
LCS_RECOVERY_THREAD
= 2,
182
};
183
187
struct
lcs_header
{
188
__u16
offset
;
189
__u8
type
;
190
__u8
slot
;
191
}
__attribute__
((packed));
192
193
struct
lcs_ip_mac_pair
{
194
__be32
ip_addr
;
195
__u8
mac_addr
[
LCS_MAC_LENGTH
];
196
__u8
reserved
[2];
197
}
__attribute__
((packed));
198
199
struct
lcs_ipm_list
{
200
struct
list_head
list
;
201
struct
lcs_ip_mac_pair
ipm
;
202
__u8
ipm_state
;
203
};
204
205
struct
lcs_cmd
{
206
__u16
offset
;
207
__u8
type
;
208
__u8
slot
;
209
__u8
cmd_code
;
210
__u8
initiator
;
211
__u16
sequence_no
;
212
__u16
return_code
;
213
union
{
214
struct
{
215
__u8
lan_type
;
216
__u8
portno
;
217
__u16
parameter_count
;
218
__u8
operator_flags
[3];
219
__u8
reserved
[3];
220
}
lcs_std_cmd
;
221
struct
{
222
__u16
unused1
;
223
__u16
buff_size
;
224
__u8
unused2
[6];
225
}
lcs_startup
;
226
struct
{
227
__u8
lan_type
;
228
__u8
portno
;
229
__u8
unused
[10];
230
__u8
mac_addr
[
LCS_MAC_LENGTH
];
231
__u32
num_packets_deblocked
;
232
__u32
num_packets_blocked
;
233
__u32
num_packets_tx_on_lan
;
234
__u32
num_tx_errors_detected
;
235
__u32
num_tx_packets_disgarded
;
236
__u32
num_packets_rx_from_lan
;
237
__u32
num_rx_errors_detected
;
238
__u32
num_rx_discarded_nobuffs_avail
;
239
__u32
num_rx_packets_too_large
;
240
}
lcs_lanstat_cmd
;
241
#ifdef CONFIG_IP_MULTICAST
242
struct
{
243
__u8
lan_type
;
244
__u8
portno
;
245
__u16
num_ip_pairs;
246
__u16
ip_assists_supported
;
247
__u16
ip_assists_enabled
;
248
__u16
version
;
249
struct
{
250
struct
lcs_ip_mac_pair
251
ip_mac_pair[32];
252
__u32
response_data;
253
} lcs_ipass_ctlmsg
__attribute
((packed));
254
} lcs_qipassist
__attribute__
((packed));
255
#endif
/*CONFIG_IP_MULTICAST */
256
}
cmd
__attribute__
((packed));
257
}
__attribute__
((packed));
258
262
struct
lcs_card
;
263
struct
lcs_channel
;
264
268
struct
lcs_buffer
{
269
enum
lcs_buffer_states
state
;
270
void
*
data
;
271
int
count
;
272
/* Callback for completion notification. */
273
void
(*
callback
)(
struct
lcs_channel
*,
struct
lcs_buffer
*);
274
};
275
276
struct
lcs_reply
{
277
struct
list_head
list
;
278
__u16
sequence_no
;
279
atomic_t
refcnt
;
280
/* Callback for completion notification. */
281
void
(*
callback
)(
struct
lcs_card
*,
struct
lcs_cmd
*);
282
wait_queue_head_t
wait_q
;
283
struct
lcs_card
*
card
;
284
int
received
;
285
int
rc
;
286
};
287
291
struct
lcs_channel
{
292
enum
lcs_channel_states
state
;
293
struct
ccw_device
*
ccwdev
;
294
struct
ccw1
ccws
[
LCS_NUM_BUFFS
+ 1];
295
wait_queue_head_t
wait_q
;
296
struct
tasklet_struct
irq_tasklet
;
297
struct
lcs_buffer
iob
[
LCS_NUM_BUFFS
];
298
int
io_idx
;
299
int
buf_idx
;
300
};
301
302
306
struct
lcs_card
{
307
spinlock_t
lock
;
308
spinlock_t
ipm_lock
;
309
enum
lcs_dev_states
state
;
310
struct
net_device
*
dev
;
311
struct
net_device_stats
stats
;
312
__be16
(*
lan_type_trans
)(
struct
sk_buff
*
skb
,
313
struct
net_device
*
dev
);
314
struct
ccwgroup_device
*
gdev
;
315
struct
lcs_channel
read
;
316
struct
lcs_channel
write
;
317
struct
lcs_buffer
*
tx_buffer
;
318
int
tx_emitted
;
319
struct
list_head
lancmd_waiters
;
320
int
lancmd_timeout
;
321
322
struct
work_struct
kernel_thread_starter
;
323
spinlock_t
mask_lock
;
324
unsigned
long
thread_start_mask
;
325
unsigned
long
thread_running_mask
;
326
unsigned
long
thread_allowed_mask
;
327
wait_queue_head_t
wait_q
;
328
329
#ifdef CONFIG_IP_MULTICAST
330
struct
list_head
ipm_list;
331
#endif
332
__u8
mac
[
LCS_MAC_LENGTH
];
333
__u16
ip_assists_supported
;
334
__u16
ip_assists_enabled
;
335
__s8
lan_type
;
336
__u32
pkt_seq
;
337
__u16
sequence_no
;
338
__s16
portno
;
339
/* Some info copied from probeinfo */
340
u8
device_forced
;
341
u8
max_port_no
;
342
u8
hint_port_no
;
343
s16
port_protocol_no
;
344
}
__attribute__
((
aligned
(8)));
345
Generated on Thu Jan 10 2013 14:18:09 for Linux Kernel by
1.8.2