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__ */
|