MOXA linux-2.6.x / linux-2.6.9-uc0 from sdlinux-moxaart.tgz
[linux-2.6.9-moxart.git] / drivers / net / mv643xx_eth.h
blob46a057d0c31f4a82a84bb28b398b7769fdde0b77
1 #ifndef __MV64340_ETH_H__
2 #define __MV64340_ETH_H__
4 #include <linux/version.h>
5 #include <linux/module.h>
6 #include <linux/kernel.h>
7 #include <linux/spinlock.h>
8 #include <linux/workqueue.h>
10 #include <linux/mv643xx.h>
12 #define BIT0 0x00000001
13 #define BIT1 0x00000002
14 #define BIT2 0x00000004
15 #define BIT3 0x00000008
16 #define BIT4 0x00000010
17 #define BIT5 0x00000020
18 #define BIT6 0x00000040
19 #define BIT7 0x00000080
20 #define BIT8 0x00000100
21 #define BIT9 0x00000200
22 #define BIT10 0x00000400
23 #define BIT11 0x00000800
24 #define BIT12 0x00001000
25 #define BIT13 0x00002000
26 #define BIT14 0x00004000
27 #define BIT15 0x00008000
28 #define BIT16 0x00010000
29 #define BIT17 0x00020000
30 #define BIT18 0x00040000
31 #define BIT19 0x00080000
32 #define BIT20 0x00100000
33 #define BIT21 0x00200000
34 #define BIT22 0x00400000
35 #define BIT23 0x00800000
36 #define BIT24 0x01000000
37 #define BIT25 0x02000000
38 #define BIT26 0x04000000
39 #define BIT27 0x08000000
40 #define BIT28 0x10000000
41 #define BIT29 0x20000000
42 #define BIT30 0x40000000
43 #define BIT31 0x80000000
46 * The first part is the high level driver of the gigE ethernet ports.
49 #define ETH_PORT0_IRQ_NUM 48 /* main high register, bit0 */
50 #define ETH_PORT1_IRQ_NUM ETH_PORT0_IRQ_NUM+1 /* main high register, bit1 */
51 #define ETH_PORT2_IRQ_NUM ETH_PORT0_IRQ_NUM+2 /* main high register, bit1 */
53 /* Checksum offload for Tx works */
54 #define MV64340_CHECKSUM_OFFLOAD_TX
55 #define MV64340_NAPI
56 #define MV64340_TX_FAST_REFILL
57 #undef MV64340_COAL
59 /*
60 * Number of RX / TX descriptors on RX / TX rings.
61 * Note that allocating RX descriptors is done by allocating the RX
62 * ring AND a preallocated RX buffers (skb's) for each descriptor.
63 * The TX descriptors only allocates the TX descriptors ring,
64 * with no pre allocated TX buffers (skb's are allocated by higher layers.
67 /* Default TX ring size is 1000 descriptors */
68 #define MV64340_TX_QUEUE_SIZE 1000
70 /* Default RX ring size is 400 descriptors */
71 #define MV64340_RX_QUEUE_SIZE 400
73 #define MV64340_TX_COAL 100
74 #ifdef MV64340_COAL
75 #define MV64340_RX_COAL 100
76 #endif
80 * The second part is the low level driver of the gigE ethernet ports. *
85 * Header File for : MV-643xx network interface header
87 * DESCRIPTION:
88 * This header file contains macros typedefs and function declaration for
89 * the Marvell Gig Bit Ethernet Controller.
91 * DEPENDENCIES:
92 * None.
96 /* Default port configuration value */
97 #define PORT_CONFIG_VALUE \
98 ETH_UNICAST_NORMAL_MODE | \
99 ETH_DEFAULT_RX_QUEUE_0 | \
100 ETH_DEFAULT_RX_ARP_QUEUE_0 | \
101 ETH_RECEIVE_BC_IF_NOT_IP_OR_ARP | \
102 ETH_RECEIVE_BC_IF_IP | \
103 ETH_RECEIVE_BC_IF_ARP | \
104 ETH_CAPTURE_TCP_FRAMES_DIS | \
105 ETH_CAPTURE_UDP_FRAMES_DIS | \
106 ETH_DEFAULT_RX_TCP_QUEUE_0 | \
107 ETH_DEFAULT_RX_UDP_QUEUE_0 | \
108 ETH_DEFAULT_RX_BPDU_QUEUE_0
110 /* Default port extend configuration value */
111 #define PORT_CONFIG_EXTEND_VALUE \
112 ETH_SPAN_BPDU_PACKETS_AS_NORMAL | \
113 ETH_PARTITION_DISABLE
116 /* Default sdma control value */
117 #define PORT_SDMA_CONFIG_VALUE \
118 ETH_RX_BURST_SIZE_16_64BIT | \
119 GT_ETH_IPG_INT_RX(0) | \
120 ETH_TX_BURST_SIZE_16_64BIT;
122 #define GT_ETH_IPG_INT_RX(value) \
123 ((value & 0x3fff) << 8)
125 /* Default port serial control value */
126 #define PORT_SERIAL_CONTROL_VALUE \
127 ETH_FORCE_LINK_PASS | \
128 ETH_ENABLE_AUTO_NEG_FOR_DUPLX | \
129 ETH_DISABLE_AUTO_NEG_FOR_FLOW_CTRL | \
130 ETH_ADV_SYMMETRIC_FLOW_CTRL | \
131 ETH_FORCE_FC_MODE_NO_PAUSE_DIS_TX | \
132 ETH_FORCE_BP_MODE_NO_JAM | \
133 BIT9 | \
134 ETH_DO_NOT_FORCE_LINK_FAIL | \
135 ETH_RETRANSMIT_16_ATTEMPTS | \
136 ETH_ENABLE_AUTO_NEG_SPEED_GMII | \
137 ETH_DTE_ADV_0 | \
138 ETH_DISABLE_AUTO_NEG_BYPASS | \
139 ETH_AUTO_NEG_NO_CHANGE | \
140 ETH_MAX_RX_PACKET_9700BYTE | \
141 ETH_CLR_EXT_LOOPBACK | \
142 ETH_SET_FULL_DUPLEX_MODE | \
143 ETH_ENABLE_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX
145 #define RX_BUFFER_MAX_SIZE 0x4000000
146 #define TX_BUFFER_MAX_SIZE 0x4000000
148 /* MAC accepet/reject macros */
149 #define ACCEPT_MAC_ADDR 0
150 #define REJECT_MAC_ADDR 1
152 /* Buffer offset from buffer pointer */
153 #define RX_BUF_OFFSET 0x2
155 /* Gigabit Ethernet Unit Global Registers */
157 /* MIB Counters register definitions */
158 #define ETH_MIB_GOOD_OCTETS_RECEIVED_LOW 0x0
159 #define ETH_MIB_GOOD_OCTETS_RECEIVED_HIGH 0x4
160 #define ETH_MIB_BAD_OCTETS_RECEIVED 0x8
161 #define ETH_MIB_INTERNAL_MAC_TRANSMIT_ERR 0xc
162 #define ETH_MIB_GOOD_FRAMES_RECEIVED 0x10
163 #define ETH_MIB_BAD_FRAMES_RECEIVED 0x14
164 #define ETH_MIB_BROADCAST_FRAMES_RECEIVED 0x18
165 #define ETH_MIB_MULTICAST_FRAMES_RECEIVED 0x1c
166 #define ETH_MIB_FRAMES_64_OCTETS 0x20
167 #define ETH_MIB_FRAMES_65_TO_127_OCTETS 0x24
168 #define ETH_MIB_FRAMES_128_TO_255_OCTETS 0x28
169 #define ETH_MIB_FRAMES_256_TO_511_OCTETS 0x2c
170 #define ETH_MIB_FRAMES_512_TO_1023_OCTETS 0x30
171 #define ETH_MIB_FRAMES_1024_TO_MAX_OCTETS 0x34
172 #define ETH_MIB_GOOD_OCTETS_SENT_LOW 0x38
173 #define ETH_MIB_GOOD_OCTETS_SENT_HIGH 0x3c
174 #define ETH_MIB_GOOD_FRAMES_SENT 0x40
175 #define ETH_MIB_EXCESSIVE_COLLISION 0x44
176 #define ETH_MIB_MULTICAST_FRAMES_SENT 0x48
177 #define ETH_MIB_BROADCAST_FRAMES_SENT 0x4c
178 #define ETH_MIB_UNREC_MAC_CONTROL_RECEIVED 0x50
179 #define ETH_MIB_FC_SENT 0x54
180 #define ETH_MIB_GOOD_FC_RECEIVED 0x58
181 #define ETH_MIB_BAD_FC_RECEIVED 0x5c
182 #define ETH_MIB_UNDERSIZE_RECEIVED 0x60
183 #define ETH_MIB_FRAGMENTS_RECEIVED 0x64
184 #define ETH_MIB_OVERSIZE_RECEIVED 0x68
185 #define ETH_MIB_JABBER_RECEIVED 0x6c
186 #define ETH_MIB_MAC_RECEIVE_ERROR 0x70
187 #define ETH_MIB_BAD_CRC_EVENT 0x74
188 #define ETH_MIB_COLLISION 0x78
189 #define ETH_MIB_LATE_COLLISION 0x7c
191 /* Port serial status reg (PSR) */
192 #define ETH_INTERFACE_GMII_MII 0
193 #define ETH_INTERFACE_PCM BIT0
194 #define ETH_LINK_IS_DOWN 0
195 #define ETH_LINK_IS_UP BIT1
196 #define ETH_PORT_AT_HALF_DUPLEX 0
197 #define ETH_PORT_AT_FULL_DUPLEX BIT2
198 #define ETH_RX_FLOW_CTRL_DISABLED 0
199 #define ETH_RX_FLOW_CTRL_ENBALED BIT3
200 #define ETH_GMII_SPEED_100_10 0
201 #define ETH_GMII_SPEED_1000 BIT4
202 #define ETH_MII_SPEED_10 0
203 #define ETH_MII_SPEED_100 BIT5
204 #define ETH_NO_TX 0
205 #define ETH_TX_IN_PROGRESS BIT7
206 #define ETH_BYPASS_NO_ACTIVE 0
207 #define ETH_BYPASS_ACTIVE BIT8
208 #define ETH_PORT_NOT_AT_PARTITION_STATE 0
209 #define ETH_PORT_AT_PARTITION_STATE BIT9
210 #define ETH_PORT_TX_FIFO_NOT_EMPTY 0
211 #define ETH_PORT_TX_FIFO_EMPTY BIT10
214 /* These macros describes the Port configuration reg (Px_cR) bits */
215 #define ETH_UNICAST_NORMAL_MODE 0
216 #define ETH_UNICAST_PROMISCUOUS_MODE BIT0
217 #define ETH_DEFAULT_RX_QUEUE_0 0
218 #define ETH_DEFAULT_RX_QUEUE_1 BIT1
219 #define ETH_DEFAULT_RX_QUEUE_2 BIT2
220 #define ETH_DEFAULT_RX_QUEUE_3 (BIT2 | BIT1)
221 #define ETH_DEFAULT_RX_QUEUE_4 BIT3
222 #define ETH_DEFAULT_RX_QUEUE_5 (BIT3 | BIT1)
223 #define ETH_DEFAULT_RX_QUEUE_6 (BIT3 | BIT2)
224 #define ETH_DEFAULT_RX_QUEUE_7 (BIT3 | BIT2 | BIT1)
225 #define ETH_DEFAULT_RX_ARP_QUEUE_0 0
226 #define ETH_DEFAULT_RX_ARP_QUEUE_1 BIT4
227 #define ETH_DEFAULT_RX_ARP_QUEUE_2 BIT5
228 #define ETH_DEFAULT_RX_ARP_QUEUE_3 (BIT5 | BIT4)
229 #define ETH_DEFAULT_RX_ARP_QUEUE_4 BIT6
230 #define ETH_DEFAULT_RX_ARP_QUEUE_5 (BIT6 | BIT4)
231 #define ETH_DEFAULT_RX_ARP_QUEUE_6 (BIT6 | BIT5)
232 #define ETH_DEFAULT_RX_ARP_QUEUE_7 (BIT6 | BIT5 | BIT4)
233 #define ETH_RECEIVE_BC_IF_NOT_IP_OR_ARP 0
234 #define ETH_REJECT_BC_IF_NOT_IP_OR_ARP BIT7
235 #define ETH_RECEIVE_BC_IF_IP 0
236 #define ETH_REJECT_BC_IF_IP BIT8
237 #define ETH_RECEIVE_BC_IF_ARP 0
238 #define ETH_REJECT_BC_IF_ARP BIT9
239 #define ETH_TX_AM_NO_UPDATE_ERROR_SUMMARY BIT12
240 #define ETH_CAPTURE_TCP_FRAMES_DIS 0
241 #define ETH_CAPTURE_TCP_FRAMES_EN BIT14
242 #define ETH_CAPTURE_UDP_FRAMES_DIS 0
243 #define ETH_CAPTURE_UDP_FRAMES_EN BIT15
244 #define ETH_DEFAULT_RX_TCP_QUEUE_0 0
245 #define ETH_DEFAULT_RX_TCP_QUEUE_1 BIT16
246 #define ETH_DEFAULT_RX_TCP_QUEUE_2 BIT17
247 #define ETH_DEFAULT_RX_TCP_QUEUE_3 (BIT17 | BIT16)
248 #define ETH_DEFAULT_RX_TCP_QUEUE_4 BIT18
249 #define ETH_DEFAULT_RX_TCP_QUEUE_5 (BIT18 | BIT16)
250 #define ETH_DEFAULT_RX_TCP_QUEUE_6 (BIT18 | BIT17)
251 #define ETH_DEFAULT_RX_TCP_QUEUE_7 (BIT18 | BIT17 | BIT16)
252 #define ETH_DEFAULT_RX_UDP_QUEUE_0 0
253 #define ETH_DEFAULT_RX_UDP_QUEUE_1 BIT19
254 #define ETH_DEFAULT_RX_UDP_QUEUE_2 BIT20
255 #define ETH_DEFAULT_RX_UDP_QUEUE_3 (BIT20 | BIT19)
256 #define ETH_DEFAULT_RX_UDP_QUEUE_4 (BIT21
257 #define ETH_DEFAULT_RX_UDP_QUEUE_5 (BIT21 | BIT19)
258 #define ETH_DEFAULT_RX_UDP_QUEUE_6 (BIT21 | BIT20)
259 #define ETH_DEFAULT_RX_UDP_QUEUE_7 (BIT21 | BIT20 | BIT19)
260 #define ETH_DEFAULT_RX_BPDU_QUEUE_0 0
261 #define ETH_DEFAULT_RX_BPDU_QUEUE_1 BIT22
262 #define ETH_DEFAULT_RX_BPDU_QUEUE_2 BIT23
263 #define ETH_DEFAULT_RX_BPDU_QUEUE_3 (BIT23 | BIT22)
264 #define ETH_DEFAULT_RX_BPDU_QUEUE_4 BIT24
265 #define ETH_DEFAULT_RX_BPDU_QUEUE_5 (BIT24 | BIT22)
266 #define ETH_DEFAULT_RX_BPDU_QUEUE_6 (BIT24 | BIT23)
267 #define ETH_DEFAULT_RX_BPDU_QUEUE_7 (BIT24 | BIT23 | BIT22)
270 /* These macros describes the Port configuration extend reg (Px_cXR) bits*/
271 #define ETH_CLASSIFY_EN BIT0
272 #define ETH_SPAN_BPDU_PACKETS_AS_NORMAL 0
273 #define ETH_SPAN_BPDU_PACKETS_TO_RX_QUEUE_7 BIT1
274 #define ETH_PARTITION_DISABLE 0
275 #define ETH_PARTITION_ENABLE BIT2
278 /* Tx/Rx queue command reg (RQCR/TQCR)*/
279 #define ETH_QUEUE_0_ENABLE BIT0
280 #define ETH_QUEUE_1_ENABLE BIT1
281 #define ETH_QUEUE_2_ENABLE BIT2
282 #define ETH_QUEUE_3_ENABLE BIT3
283 #define ETH_QUEUE_4_ENABLE BIT4
284 #define ETH_QUEUE_5_ENABLE BIT5
285 #define ETH_QUEUE_6_ENABLE BIT6
286 #define ETH_QUEUE_7_ENABLE BIT7
287 #define ETH_QUEUE_0_DISABLE BIT8
288 #define ETH_QUEUE_1_DISABLE BIT9
289 #define ETH_QUEUE_2_DISABLE BIT10
290 #define ETH_QUEUE_3_DISABLE BIT11
291 #define ETH_QUEUE_4_DISABLE BIT12
292 #define ETH_QUEUE_5_DISABLE BIT13
293 #define ETH_QUEUE_6_DISABLE BIT14
294 #define ETH_QUEUE_7_DISABLE BIT15
297 /* These macros describes the Port Sdma configuration reg (SDCR) bits */
298 #define ETH_RIFB BIT0
299 #define ETH_RX_BURST_SIZE_1_64BIT 0
300 #define ETH_RX_BURST_SIZE_2_64BIT BIT1
301 #define ETH_RX_BURST_SIZE_4_64BIT BIT2
302 #define ETH_RX_BURST_SIZE_8_64BIT (BIT2 | BIT1)
303 #define ETH_RX_BURST_SIZE_16_64BIT BIT3
304 #define ETH_BLM_RX_NO_SWAP BIT4
305 #define ETH_BLM_RX_BYTE_SWAP 0
306 #define ETH_BLM_TX_NO_SWAP BIT5
307 #define ETH_BLM_TX_BYTE_SWAP 0
308 #define ETH_DESCRIPTORS_BYTE_SWAP BIT6
309 #define ETH_DESCRIPTORS_NO_SWAP 0
310 #define ETH_TX_BURST_SIZE_1_64BIT 0
311 #define ETH_TX_BURST_SIZE_2_64BIT BIT22
312 #define ETH_TX_BURST_SIZE_4_64BIT BIT23
313 #define ETH_TX_BURST_SIZE_8_64BIT (BIT23 | BIT22)
314 #define ETH_TX_BURST_SIZE_16_64BIT BIT24
318 /* These macros describes the Port serial control reg (PSCR) bits */
319 #define ETH_SERIAL_PORT_DISABLE 0
320 #define ETH_SERIAL_PORT_ENABLE BIT0
321 #define ETH_FORCE_LINK_PASS BIT1
322 #define ETH_DO_NOT_FORCE_LINK_PASS 0
323 #define ETH_ENABLE_AUTO_NEG_FOR_DUPLX 0
324 #define ETH_DISABLE_AUTO_NEG_FOR_DUPLX BIT2
325 #define ETH_ENABLE_AUTO_NEG_FOR_FLOW_CTRL 0
326 #define ETH_DISABLE_AUTO_NEG_FOR_FLOW_CTRL BIT3
327 #define ETH_ADV_NO_FLOW_CTRL 0
328 #define ETH_ADV_SYMMETRIC_FLOW_CTRL BIT4
329 #define ETH_FORCE_FC_MODE_NO_PAUSE_DIS_TX 0
330 #define ETH_FORCE_FC_MODE_TX_PAUSE_DIS BIT5
331 #define ETH_FORCE_BP_MODE_NO_JAM 0
332 #define ETH_FORCE_BP_MODE_JAM_TX BIT7
333 #define ETH_FORCE_BP_MODE_JAM_TX_ON_RX_ERR BIT8
334 #define ETH_FORCE_LINK_FAIL 0
335 #define ETH_DO_NOT_FORCE_LINK_FAIL BIT10
336 #define ETH_RETRANSMIT_16_ATTEMPTS 0
337 #define ETH_RETRANSMIT_FOREVER BIT11
338 #define ETH_DISABLE_AUTO_NEG_SPEED_GMII BIT13
339 #define ETH_ENABLE_AUTO_NEG_SPEED_GMII 0
340 #define ETH_DTE_ADV_0 0
341 #define ETH_DTE_ADV_1 BIT14
342 #define ETH_DISABLE_AUTO_NEG_BYPASS 0
343 #define ETH_ENABLE_AUTO_NEG_BYPASS BIT15
344 #define ETH_AUTO_NEG_NO_CHANGE 0
345 #define ETH_RESTART_AUTO_NEG BIT16
346 #define ETH_MAX_RX_PACKET_1518BYTE 0
347 #define ETH_MAX_RX_PACKET_1522BYTE BIT17
348 #define ETH_MAX_RX_PACKET_1552BYTE BIT18
349 #define ETH_MAX_RX_PACKET_9022BYTE (BIT18 | BIT17)
350 #define ETH_MAX_RX_PACKET_9192BYTE BIT19
351 #define ETH_MAX_RX_PACKET_9700BYTE (BIT19 | BIT17)
352 #define ETH_SET_EXT_LOOPBACK BIT20
353 #define ETH_CLR_EXT_LOOPBACK 0
354 #define ETH_SET_FULL_DUPLEX_MODE BIT21
355 #define ETH_SET_HALF_DUPLEX_MODE 0
356 #define ETH_ENABLE_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX BIT22
357 #define ETH_DISABLE_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX 0
358 #define ETH_SET_GMII_SPEED_TO_10_100 0
359 #define ETH_SET_GMII_SPEED_TO_1000 BIT23
360 #define ETH_SET_MII_SPEED_TO_10 0
361 #define ETH_SET_MII_SPEED_TO_100 BIT24
364 /* SMI reg */
365 #define ETH_SMI_BUSY BIT28 /* 0 - Write, 1 - Read */
366 #define ETH_SMI_READ_VALID BIT27 /* 0 - Write, 1 - Read */
367 #define ETH_SMI_OPCODE_WRITE 0 /* Completion of Read operation */
368 #define ETH_SMI_OPCODE_READ BIT26 /* Operation is in progress */
370 /* SDMA command status fields macros */
372 /* Tx & Rx descriptors status */
373 #define ETH_ERROR_SUMMARY (BIT0)
375 /* Tx & Rx descriptors command */
376 #define ETH_BUFFER_OWNED_BY_DMA (BIT31)
378 /* Tx descriptors status */
379 #define ETH_LC_ERROR (0 )
380 #define ETH_UR_ERROR (BIT1 )
381 #define ETH_RL_ERROR (BIT2 )
382 #define ETH_LLC_SNAP_FORMAT (BIT9 )
384 /* Rx descriptors status */
385 #define ETH_CRC_ERROR (0 )
386 #define ETH_OVERRUN_ERROR (BIT1 )
387 #define ETH_MAX_FRAME_LENGTH_ERROR (BIT2 )
388 #define ETH_RESOURCE_ERROR ((BIT2 | BIT1))
389 #define ETH_VLAN_TAGGED (BIT19)
390 #define ETH_BPDU_FRAME (BIT20)
391 #define ETH_TCP_FRAME_OVER_IP_V_4 (0 )
392 #define ETH_UDP_FRAME_OVER_IP_V_4 (BIT21)
393 #define ETH_OTHER_FRAME_TYPE (BIT22)
394 #define ETH_LAYER_2_IS_ETH_V_2 (BIT23)
395 #define ETH_FRAME_TYPE_IP_V_4 (BIT24)
396 #define ETH_FRAME_HEADER_OK (BIT25)
397 #define ETH_RX_LAST_DESC (BIT26)
398 #define ETH_RX_FIRST_DESC (BIT27)
399 #define ETH_UNKNOWN_DESTINATION_ADDR (BIT28)
400 #define ETH_RX_ENABLE_INTERRUPT (BIT29)
401 #define ETH_LAYER_4_CHECKSUM_OK (BIT30)
403 /* Rx descriptors byte count */
404 #define ETH_FRAME_FRAGMENTED (BIT2)
406 /* Tx descriptors command */
407 #define ETH_LAYER_4_CHECKSUM_FIRST_DESC (BIT10)
408 #define ETH_FRAME_SET_TO_VLAN (BIT15)
409 #define ETH_TCP_FRAME (0 )
410 #define ETH_UDP_FRAME (BIT16)
411 #define ETH_GEN_TCP_UDP_CHECKSUM (BIT17)
412 #define ETH_GEN_IP_V_4_CHECKSUM (BIT18)
413 #define ETH_ZERO_PADDING (BIT19)
414 #define ETH_TX_LAST_DESC (BIT20)
415 #define ETH_TX_FIRST_DESC (BIT21)
416 #define ETH_GEN_CRC (BIT22)
417 #define ETH_TX_ENABLE_INTERRUPT (BIT23)
418 #define ETH_AUTO_MODE (BIT30)
420 /* typedefs */
422 typedef enum _eth_func_ret_status {
423 ETH_OK, /* Returned as expected. */
424 ETH_ERROR, /* Fundamental error. */
425 ETH_RETRY, /* Could not process request. Try later. */
426 ETH_END_OF_JOB, /* Ring has nothing to process. */
427 ETH_QUEUE_FULL, /* Ring resource error. */
428 ETH_QUEUE_LAST_RESOURCE /* Ring resources about to exhaust. */
429 } ETH_FUNC_RET_STATUS;
431 typedef enum _eth_target {
432 ETH_TARGET_DRAM,
433 ETH_TARGET_DEVICE,
434 ETH_TARGET_CBS,
435 ETH_TARGET_PCI0,
436 ETH_TARGET_PCI1
437 } ETH_TARGET;
439 /* These are for big-endian machines. Little endian needs different
440 * definitions.
442 #if defined(__BIG_ENDIAN)
443 struct eth_rx_desc {
444 u16 byte_cnt; /* Descriptor buffer byte count */
445 u16 buf_size; /* Buffer size */
446 u32 cmd_sts; /* Descriptor command status */
447 u32 next_desc_ptr; /* Next descriptor pointer */
448 u32 buf_ptr; /* Descriptor buffer pointer */
451 struct eth_tx_desc {
452 u16 byte_cnt; /* buffer byte count */
453 u16 l4i_chk; /* CPU provided TCP checksum */
454 u32 cmd_sts; /* Command/status field */
455 u32 next_desc_ptr; /* Pointer to next descriptor */
456 u32 buf_ptr; /* pointer to buffer for this descriptor */
459 #elif defined(__LITTLE_ENDIAN)
460 struct eth_rx_desc {
461 u32 cmd_sts; /* Descriptor command status */
462 u16 buf_size; /* Buffer size */
463 u16 byte_cnt; /* Descriptor buffer byte count */
464 u32 buf_ptr; /* Descriptor buffer pointer */
465 u32 next_desc_ptr; /* Next descriptor pointer */
468 struct eth_tx_desc {
469 u32 cmd_sts; /* Command/status field */
470 u16 l4i_chk; /* CPU provided TCP checksum */
471 u16 byte_cnt; /* buffer byte count */
472 u32 buf_ptr; /* pointer to buffer for this descriptor */
473 u32 next_desc_ptr; /* Pointer to next descriptor */
475 #else
476 #error One of __BIG_ENDIAN or __LITTLE_ENDIAN must be defined
477 #endif
479 /* Unified struct for Rx and Tx operations. The user is not required to */
480 /* be familier with neither Tx nor Rx descriptors. */
481 struct pkt_info {
482 unsigned short byte_cnt; /* Descriptor buffer byte count */
483 unsigned short l4i_chk; /* Tx CPU provided TCP Checksum */
484 unsigned int cmd_sts; /* Descriptor command status */
485 dma_addr_t buf_ptr; /* Descriptor buffer pointer */
486 struct sk_buff * return_info; /* User resource return information */
490 /* Ethernet port specific infomation */
492 struct mv64340_private {
493 int port_num; /* User Ethernet port number */
494 u8 port_mac_addr[6]; /* User defined port MAC address. */
495 u32 port_config; /* User port configuration value */
496 u32 port_config_extend; /* User port config extend value */
497 u32 port_sdma_config; /* User port SDMA config value */
498 u32 port_serial_control; /* User port serial control value */
499 u32 port_tx_queue_command; /* Port active Tx queues summary */
500 u32 port_rx_queue_command; /* Port active Rx queues summary */
502 int rx_resource_err; /* Rx ring resource error flag */
503 int tx_resource_err; /* Tx ring resource error flag */
505 /* Tx/Rx rings managment indexes fields. For driver use */
507 /* Next available and first returning Rx resource */
508 int rx_curr_desc_q, rx_used_desc_q;
510 /* Next available and first returning Tx resource */
511 int tx_curr_desc_q, tx_used_desc_q;
512 #ifdef MV64340_CHECKSUM_OFFLOAD_TX
513 int tx_first_desc_q;
514 #endif
516 #ifdef MV64340_TX_FAST_REFILL
517 u32 tx_clean_threshold;
518 #endif
520 volatile struct eth_rx_desc * p_rx_desc_area;
521 dma_addr_t rx_desc_dma;
522 unsigned int rx_desc_area_size;
523 struct sk_buff * rx_skb[MV64340_RX_QUEUE_SIZE];
525 volatile struct eth_tx_desc * p_tx_desc_area;
526 dma_addr_t tx_desc_dma;
527 unsigned int tx_desc_area_size;
528 struct sk_buff * tx_skb[MV64340_TX_QUEUE_SIZE];
530 struct work_struct tx_timeout_task;
533 * Former struct mv64340_eth_priv members start here
535 struct net_device_stats stats;
536 spinlock_t lock;
537 /* Size of Tx Ring per queue */
538 unsigned int tx_ring_size;
539 /* Ammont of SKBs outstanding on Tx queue */
540 unsigned int tx_ring_skbs;
541 /* Size of Rx Ring per queue */
542 unsigned int rx_ring_size;
543 /* Ammount of SKBs allocated to Rx Ring per queue */
544 unsigned int rx_ring_skbs;
547 * rx_task used to fill RX ring out of bottom half context
549 struct work_struct rx_task;
552 * Used in case RX Ring is empty, which can be caused when
553 * system does not have resources (skb's)
555 struct timer_list timeout;
556 long rx_task_busy __attribute__ ((aligned(SMP_CACHE_BYTES)));
557 unsigned rx_timer_flag;
559 u32 rx_int_coal;
560 u32 tx_int_coal;
563 /* ethernet.h API list */
565 /* Port operation control routines */
566 static void eth_port_init(struct mv64340_private *mp);
567 static void eth_port_reset(unsigned int eth_port_num);
568 static int eth_port_start(struct mv64340_private *mp);
570 static void ethernet_set_config_reg(unsigned int eth_port_num,
571 unsigned int value);
572 static unsigned int ethernet_get_config_reg(unsigned int eth_port_num);
574 /* Port MAC address routines */
575 static void eth_port_uc_addr_set(unsigned int eth_port_num,
576 unsigned char *p_addr);
578 /* PHY and MIB routines */
579 static int ethernet_phy_reset(unsigned int eth_port_num);
581 static int eth_port_write_smi_reg(unsigned int eth_port_num,
582 unsigned int phy_reg,
583 unsigned int value);
585 static int eth_port_read_smi_reg(unsigned int eth_port_num,
586 unsigned int phy_reg,
587 unsigned int *value);
589 static void eth_clear_mib_counters(unsigned int eth_port_num);
591 /* Port data flow control routines */
592 static ETH_FUNC_RET_STATUS eth_port_send(struct mv64340_private *mp,
593 struct pkt_info * p_pkt_info);
594 static ETH_FUNC_RET_STATUS eth_tx_return_desc(struct mv64340_private *mp,
595 struct pkt_info * p_pkt_info);
596 static ETH_FUNC_RET_STATUS eth_port_receive(struct mv64340_private *mp,
597 struct pkt_info * p_pkt_info);
598 static ETH_FUNC_RET_STATUS eth_rx_return_buff(struct mv64340_private *mp,
599 struct pkt_info * p_pkt_info);
601 #endif /* __MV64340_ETH_H__ */