remove the old broadcom wl driver for linux 2.4
[openwrt/openwrt.git] / target / linux / generic-2.4 / files / crypto / ocf / kirkwood / mvHal / mv_hal / eth / gbe / mvEthDebug.c
1 /*******************************************************************************
2 Copyright (C) Marvell International Ltd. and its affiliates
3
4 This software file (the "File") is owned and distributed by Marvell
5 International Ltd. and/or its affiliates ("Marvell") under the following
6 alternative licensing terms. Once you have made an election to distribute the
7 File under one of the following license alternatives, please (i) delete this
8 introductory statement regarding license alternatives, (ii) delete the two
9 license alternatives that you have not elected to use and (iii) preserve the
10 Marvell copyright notice above.
11
12 ********************************************************************************
13 Marvell Commercial License Option
14
15 If you received this File from Marvell and you have entered into a commercial
16 license agreement (a "Commercial License") with Marvell, the File is licensed
17 to you under the terms of the applicable Commercial License.
18
19 ********************************************************************************
20 Marvell GPL License Option
21
22 If you received this File from Marvell, you may opt to use, redistribute and/or
23 modify this File in accordance with the terms and conditions of the General
24 Public License Version 2, June 1991 (the "GPL License"), a copy of which is
25 available along with the File in the license.txt file or by writing to the Free
26 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
27 on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
28
29 THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
30 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
31 DISCLAIMED. The GPL License provides additional details about this warranty
32 disclaimer.
33 ********************************************************************************
34 Marvell BSD License Option
35
36 If you received this File from Marvell, you may opt to use, redistribute and/or
37 modify this File under the following licensing terms.
38 Redistribution and use in source and binary forms, with or without modification,
39 are permitted provided that the following conditions are met:
40
41 * Redistributions of source code must retain the above copyright notice,
42 this list of conditions and the following disclaimer.
43
44 * Redistributions in binary form must reproduce the above copyright
45 notice, this list of conditions and the following disclaimer in the
46 documentation and/or other materials provided with the distribution.
47
48 * Neither the name of Marvell nor the names of its contributors may be
49 used to endorse or promote products derived from this software without
50 specific prior written permission.
51
52 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
53 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
54 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
55 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
56 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
57 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
58 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
59 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
60 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
61 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
62
63 *******************************************************************************/
64
65 /*******************************************************************************
66 * mvEthDebug.c - Source file for user friendly debug functions
67 *
68 * DESCRIPTION:
69 *
70 * DEPENDENCIES:
71 * None.
72 *
73 *******************************************************************************/
74
75 #include "mvOs.h"
76 #include "mvCommon.h"
77 #include "mvTypes.h"
78 #include "mv802_3.h"
79 #include "mvDebug.h"
80 #include "ctrlEnv/mvCtrlEnvLib.h"
81 #include "eth-phy/mvEthPhy.h"
82 #include "eth/mvEth.h"
83 #include "eth/gbe/mvEthDebug.h"
84
85 /* #define mvOsPrintf printf */
86
87 void mvEthPortShow(void* pHndl);
88 void mvEthQueuesShow(void* pHndl, int rxQueue, int txQueue, int mode);
89
90 /******************************************************************************/
91 /* Debug functions */
92 /******************************************************************************/
93 void ethRxCoal(int port, int usec)
94 {
95 void* pHndl;
96
97 pHndl = mvEthPortHndlGet(port);
98 if(pHndl != NULL)
99 {
100 mvEthRxCoalSet(pHndl, usec);
101 }
102 }
103
104 void ethTxCoal(int port, int usec)
105 {
106 void* pHndl;
107
108 pHndl = mvEthPortHndlGet(port);
109 if(pHndl != NULL)
110 {
111 mvEthTxCoalSet(pHndl, usec);
112 }
113 }
114
115 #if (MV_ETH_VERSION >= 4)
116 void ethEjpModeSet(int port, int mode)
117 {
118 void* pHndl;
119
120 pHndl = mvEthPortHndlGet(port);
121 if(pHndl != NULL)
122 {
123 mvEthEjpModeSet(pHndl, mode);
124 }
125 }
126 #endif /* (MV_ETH_VERSION >= 4) */
127
128 void ethBpduRxQ(int port, int bpduQueue)
129 {
130 void* pHndl;
131
132 pHndl = mvEthPortHndlGet(port);
133 if(pHndl != NULL)
134 {
135 mvEthBpduRxQueue(pHndl, bpduQueue);
136 }
137 }
138
139 void ethArpRxQ(int port, int arpQueue)
140 {
141 void* pHndl;
142
143 pHndl = mvEthPortHndlGet(port);
144 if(pHndl != NULL)
145 {
146 mvEthArpRxQueue(pHndl, arpQueue);
147 }
148 }
149
150 void ethTcpRxQ(int port, int tcpQueue)
151 {
152 void* pHndl;
153
154 pHndl = mvEthPortHndlGet(port);
155 if(pHndl != NULL)
156 {
157 mvEthTcpRxQueue(pHndl, tcpQueue);
158 }
159 }
160
161 void ethUdpRxQ(int port, int udpQueue)
162 {
163 void* pHndl;
164
165 pHndl = mvEthPortHndlGet(port);
166 if(pHndl != NULL)
167 {
168 mvEthUdpRxQueue(pHndl, udpQueue);
169 }
170 }
171
172 void ethTxPolicyRegs(int port)
173 {
174 int queue;
175 ETH_PORT_CTRL* pPortCtrl = (ETH_PORT_CTRL*)mvEthPortHndlGet(port);
176
177 if(pPortCtrl == NULL)
178 {
179 return;
180 }
181 mvOsPrintf("Port #%d TX Policy: EJP=%d, TXQs: ",
182 port, pPortCtrl->portConfig.ejpMode);
183 for(queue=0; queue<MV_ETH_TX_Q_NUM; queue++)
184 {
185 if(pPortCtrl->txQueueConfig[queue].descrNum > 0)
186 mvOsPrintf("%d, ", queue);
187 }
188 mvOsPrintf("\n");
189
190 mvOsPrintf("\n\t TX policy Port #%d configuration registers\n", port);
191
192 mvOsPrintf("ETH_TX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
193 ETH_TX_QUEUE_COMMAND_REG(port),
194 MV_REG_READ( ETH_TX_QUEUE_COMMAND_REG(port) ) );
195
196 mvOsPrintf("ETH_TX_FIXED_PRIO_CFG_REG : 0x%X = 0x%08x\n",
197 ETH_TX_FIXED_PRIO_CFG_REG(port),
198 MV_REG_READ( ETH_TX_FIXED_PRIO_CFG_REG(port) ) );
199
200 mvOsPrintf("ETH_TX_TOKEN_RATE_CFG_REG : 0x%X = 0x%08x\n",
201 ETH_TX_TOKEN_RATE_CFG_REG(port),
202 MV_REG_READ( ETH_TX_TOKEN_RATE_CFG_REG(port) ) );
203
204 mvOsPrintf("ETH_MAX_TRANSMIT_UNIT_REG : 0x%X = 0x%08x\n",
205 ETH_MAX_TRANSMIT_UNIT_REG(port),
206 MV_REG_READ( ETH_MAX_TRANSMIT_UNIT_REG(port) ) );
207
208 mvOsPrintf("ETH_TX_TOKEN_BUCKET_SIZE_REG : 0x%X = 0x%08x\n",
209 ETH_TX_TOKEN_BUCKET_SIZE_REG(port),
210 MV_REG_READ( ETH_TX_TOKEN_BUCKET_SIZE_REG(port) ) );
211
212 mvOsPrintf("ETH_TX_TOKEN_BUCKET_COUNT_REG : 0x%X = 0x%08x\n",
213 ETH_TX_TOKEN_BUCKET_COUNT_REG(port),
214 MV_REG_READ( ETH_TX_TOKEN_BUCKET_COUNT_REG(port) ) );
215
216 for(queue=0; queue<MV_ETH_MAX_TXQ; queue++)
217 {
218 mvOsPrintf("\n\t TX policy Port #%d, Queue #%d configuration registers\n", port, queue);
219
220 mvOsPrintf("ETH_TXQ_TOKEN_COUNT_REG : 0x%X = 0x%08x\n",
221 ETH_TXQ_TOKEN_COUNT_REG(port, queue),
222 MV_REG_READ( ETH_TXQ_TOKEN_COUNT_REG(port, queue) ) );
223
224 mvOsPrintf("ETH_TXQ_TOKEN_CFG_REG : 0x%X = 0x%08x\n",
225 ETH_TXQ_TOKEN_CFG_REG(port, queue),
226 MV_REG_READ( ETH_TXQ_TOKEN_CFG_REG(port, queue) ) );
227
228 mvOsPrintf("ETH_TXQ_ARBITER_CFG_REG : 0x%X = 0x%08x\n",
229 ETH_TXQ_ARBITER_CFG_REG(port, queue),
230 MV_REG_READ( ETH_TXQ_ARBITER_CFG_REG(port, queue) ) );
231 }
232 mvOsPrintf("\n");
233 }
234
235 /* Print important registers of Ethernet port */
236 void ethPortRegs(int port)
237 {
238 mvOsPrintf("\n\t ethGiga #%d port Registers:\n", port);
239
240 mvOsPrintf("ETH_PORT_STATUS_REG : 0x%X = 0x%08x\n",
241 ETH_PORT_STATUS_REG(port),
242 MV_REG_READ( ETH_PORT_STATUS_REG(port) ) );
243
244 mvOsPrintf("ETH_PORT_SERIAL_CTRL_REG : 0x%X = 0x%08x\n",
245 ETH_PORT_SERIAL_CTRL_REG(port),
246 MV_REG_READ( ETH_PORT_SERIAL_CTRL_REG(port) ) );
247
248 mvOsPrintf("ETH_PORT_CONFIG_REG : 0x%X = 0x%08x\n",
249 ETH_PORT_CONFIG_REG(port),
250 MV_REG_READ( ETH_PORT_CONFIG_REG(port) ) );
251
252 mvOsPrintf("ETH_PORT_CONFIG_EXTEND_REG : 0x%X = 0x%08x\n",
253 ETH_PORT_CONFIG_EXTEND_REG(port),
254 MV_REG_READ( ETH_PORT_CONFIG_EXTEND_REG(port) ) );
255
256 mvOsPrintf("ETH_SDMA_CONFIG_REG : 0x%X = 0x%08x\n",
257 ETH_SDMA_CONFIG_REG(port),
258 MV_REG_READ( ETH_SDMA_CONFIG_REG(port) ) );
259
260 mvOsPrintf("ETH_TX_FIFO_URGENT_THRESH_REG : 0x%X = 0x%08x\n",
261 ETH_TX_FIFO_URGENT_THRESH_REG(port),
262 MV_REG_READ( ETH_TX_FIFO_URGENT_THRESH_REG(port) ) );
263
264 mvOsPrintf("ETH_RX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
265 ETH_RX_QUEUE_COMMAND_REG(port),
266 MV_REG_READ( ETH_RX_QUEUE_COMMAND_REG(port) ) );
267
268 mvOsPrintf("ETH_TX_QUEUE_COMMAND_REG : 0x%X = 0x%08x\n",
269 ETH_TX_QUEUE_COMMAND_REG(port),
270 MV_REG_READ( ETH_TX_QUEUE_COMMAND_REG(port) ) );
271
272 mvOsPrintf("ETH_INTR_CAUSE_REG : 0x%X = 0x%08x\n",
273 ETH_INTR_CAUSE_REG(port),
274 MV_REG_READ( ETH_INTR_CAUSE_REG(port) ) );
275
276 mvOsPrintf("ETH_INTR_EXTEND_CAUSE_REG : 0x%X = 0x%08x\n",
277 ETH_INTR_CAUSE_EXT_REG(port),
278 MV_REG_READ( ETH_INTR_CAUSE_EXT_REG(port) ) );
279
280 mvOsPrintf("ETH_INTR_MASK_REG : 0x%X = 0x%08x\n",
281 ETH_INTR_MASK_REG(port),
282 MV_REG_READ( ETH_INTR_MASK_REG(port) ) );
283
284 mvOsPrintf("ETH_INTR_EXTEND_MASK_REG : 0x%X = 0x%08x\n",
285 ETH_INTR_MASK_EXT_REG(port),
286 MV_REG_READ( ETH_INTR_MASK_EXT_REG(port) ) );
287
288 mvOsPrintf("ETH_RX_DESCR_STAT_CMD_REG : 0x%X = 0x%08x\n",
289 ETH_RX_DESCR_STAT_CMD_REG(port, 0),
290 MV_REG_READ( ETH_RX_DESCR_STAT_CMD_REG(port, 0) ) );
291
292 mvOsPrintf("ETH_RX_BYTE_COUNT_REG : 0x%X = 0x%08x\n",
293 ETH_RX_BYTE_COUNT_REG(port, 0),
294 MV_REG_READ( ETH_RX_BYTE_COUNT_REG(port, 0) ) );
295
296 mvOsPrintf("ETH_RX_BUF_PTR_REG : 0x%X = 0x%08x\n",
297 ETH_RX_BUF_PTR_REG(port, 0),
298 MV_REG_READ( ETH_RX_BUF_PTR_REG(port, 0) ) );
299
300 mvOsPrintf("ETH_RX_CUR_DESC_PTR_REG : 0x%X = 0x%08x\n",
301 ETH_RX_CUR_DESC_PTR_REG(port, 0),
302 MV_REG_READ( ETH_RX_CUR_DESC_PTR_REG(port, 0) ) );
303 }
304
305
306 /* Print Giga Ethernet UNIT registers */
307 void ethRegs(int port)
308 {
309 mvOsPrintf("ETH_PHY_ADDR_REG : 0x%X = 0x%08x\n",
310 ETH_PHY_ADDR_REG(port),
311 MV_REG_READ(ETH_PHY_ADDR_REG(port)) );
312
313 mvOsPrintf("ETH_UNIT_INTR_CAUSE_REG : 0x%X = 0x%08x\n",
314 ETH_UNIT_INTR_CAUSE_REG(port),
315 MV_REG_READ( ETH_UNIT_INTR_CAUSE_REG(port)) );
316
317 mvOsPrintf("ETH_UNIT_INTR_MASK_REG : 0x%X = 0x%08x\n",
318 ETH_UNIT_INTR_MASK_REG(port),
319 MV_REG_READ( ETH_UNIT_INTR_MASK_REG(port)) );
320
321 mvOsPrintf("ETH_UNIT_ERROR_ADDR_REG : 0x%X = 0x%08x\n",
322 ETH_UNIT_ERROR_ADDR_REG(port),
323 MV_REG_READ(ETH_UNIT_ERROR_ADDR_REG(port)) );
324
325 mvOsPrintf("ETH_UNIT_INT_ADDR_ERROR_REG : 0x%X = 0x%08x\n",
326 ETH_UNIT_INT_ADDR_ERROR_REG(port),
327 MV_REG_READ(ETH_UNIT_INT_ADDR_ERROR_REG(port)) );
328
329 }
330
331 /******************************************************************************/
332 /* MIB Counters functions */
333 /******************************************************************************/
334
335 /*******************************************************************************
336 * ethClearMibCounters - Clear all MIB counters
337 *
338 * DESCRIPTION:
339 * This function clears all MIB counters of a specific ethernet port.
340 * A read from the MIB counter will reset the counter.
341 *
342 * INPUT:
343 * int port - Ethernet Port number.
344 *
345 * RETURN: None
346 *
347 *******************************************************************************/
348 void ethClearCounters(int port)
349 {
350 void* pHndl;
351
352 pHndl = mvEthPortHndlGet(port);
353 if(pHndl != NULL)
354 mvEthMibCountersClear(pHndl);
355
356 return;
357 }
358
359
360 /* Print counters of the Ethernet port */
361 void ethPortCounters(int port)
362 {
363 MV_U32 regValue, regValHigh;
364 void* pHndl;
365
366 pHndl = mvEthPortHndlGet(port);
367 if(pHndl == NULL)
368 return;
369
370 mvOsPrintf("\n\t Port #%d MIB Counters\n\n", port);
371
372 mvOsPrintf("GoodFramesReceived = %u\n",
373 mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FRAMES_RECEIVED, NULL));
374 mvOsPrintf("BadFramesReceived = %u\n",
375 mvEthMibCounterRead(pHndl, ETH_MIB_BAD_FRAMES_RECEIVED, NULL));
376 mvOsPrintf("BroadcastFramesReceived = %u\n",
377 mvEthMibCounterRead(pHndl, ETH_MIB_BROADCAST_FRAMES_RECEIVED, NULL));
378 mvOsPrintf("MulticastFramesReceived = %u\n",
379 mvEthMibCounterRead(pHndl, ETH_MIB_MULTICAST_FRAMES_RECEIVED, NULL));
380
381 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_OCTETS_RECEIVED_LOW,
382 &regValHigh);
383 mvOsPrintf("GoodOctetsReceived = 0x%08x%08x\n",
384 regValHigh, regValue);
385
386 mvOsPrintf("\n");
387 mvOsPrintf("GoodFramesSent = %u\n",
388 mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FRAMES_SENT, NULL));
389 mvOsPrintf("BroadcastFramesSent = %u\n",
390 mvEthMibCounterRead(pHndl, ETH_MIB_BROADCAST_FRAMES_SENT, NULL));
391 mvOsPrintf("MulticastFramesSent = %u\n",
392 mvEthMibCounterRead(pHndl, ETH_MIB_MULTICAST_FRAMES_SENT, NULL));
393
394 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_OCTETS_SENT_LOW,
395 &regValHigh);
396 mvOsPrintf("GoodOctetsSent = 0x%08x%08x\n", regValHigh, regValue);
397
398
399 mvOsPrintf("\n\t FC Control Counters\n");
400
401 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_UNREC_MAC_CONTROL_RECEIVED, NULL);
402 mvOsPrintf("UnrecogMacControlReceived = %u\n", regValue);
403
404 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_GOOD_FC_RECEIVED, NULL);
405 mvOsPrintf("GoodFCFramesReceived = %u\n", regValue);
406
407 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_FC_RECEIVED, NULL);
408 mvOsPrintf("BadFCFramesReceived = %u\n", regValue);
409
410 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_FC_SENT, NULL);
411 mvOsPrintf("FCFramesSent = %u\n", regValue);
412
413
414 mvOsPrintf("\n\t RX Errors\n");
415
416 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_OCTETS_RECEIVED, NULL);
417 mvOsPrintf("BadOctetsReceived = %u\n", regValue);
418
419 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_UNDERSIZE_RECEIVED, NULL);
420 mvOsPrintf("UndersizeFramesReceived = %u\n", regValue);
421
422 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_FRAGMENTS_RECEIVED, NULL);
423 mvOsPrintf("FragmentsReceived = %u\n", regValue);
424
425 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_OVERSIZE_RECEIVED, NULL);
426 mvOsPrintf("OversizeFramesReceived = %u\n", regValue);
427
428 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_JABBER_RECEIVED, NULL);
429 mvOsPrintf("JabbersReceived = %u\n", regValue);
430
431 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_MAC_RECEIVE_ERROR, NULL);
432 mvOsPrintf("MacReceiveErrors = %u\n", regValue);
433
434 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_BAD_CRC_EVENT, NULL);
435 mvOsPrintf("BadCrcReceived = %u\n", regValue);
436
437 mvOsPrintf("\n\t TX Errors\n");
438
439 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_INTERNAL_MAC_TRANSMIT_ERR, NULL);
440 mvOsPrintf("TxMacErrors = %u\n", regValue);
441
442 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_EXCESSIVE_COLLISION, NULL);
443 mvOsPrintf("TxExcessiveCollisions = %u\n", regValue);
444
445 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_COLLISION, NULL);
446 mvOsPrintf("TxCollisions = %u\n", regValue);
447
448 regValue = mvEthMibCounterRead(pHndl, ETH_MIB_LATE_COLLISION, NULL);
449 mvOsPrintf("TxLateCollisions = %u\n", regValue);
450
451
452 mvOsPrintf("\n");
453 regValue = MV_REG_READ( ETH_RX_DISCARD_PKTS_CNTR_REG(port));
454 mvOsPrintf("Rx Discard packets counter = %u\n", regValue);
455
456 regValue = MV_REG_READ(ETH_RX_OVERRUN_PKTS_CNTR_REG(port));
457 mvOsPrintf("Rx Overrun packets counter = %u\n", regValue);
458 }
459
460 /* Print RMON counters of the Ethernet port */
461 void ethPortRmonCounters(int port)
462 {
463 void* pHndl;
464
465 pHndl = mvEthPortHndlGet(port);
466 if(pHndl == NULL)
467 return;
468
469 mvOsPrintf("\n\t Port #%d RMON MIB Counters\n\n", port);
470
471 mvOsPrintf("64 ByteFramesReceived = %u\n",
472 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_64_OCTETS, NULL));
473 mvOsPrintf("65...127 ByteFramesReceived = %u\n",
474 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_65_TO_127_OCTETS, NULL));
475 mvOsPrintf("128...255 ByteFramesReceived = %u\n",
476 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_128_TO_255_OCTETS, NULL));
477 mvOsPrintf("256...511 ByteFramesReceived = %u\n",
478 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_256_TO_511_OCTETS, NULL));
479 mvOsPrintf("512...1023 ByteFramesReceived = %u\n",
480 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_512_TO_1023_OCTETS, NULL));
481 mvOsPrintf("1024...Max ByteFramesReceived = %u\n",
482 mvEthMibCounterRead(pHndl, ETH_MIB_FRAMES_1024_TO_MAX_OCTETS, NULL));
483 }
484
485 /* Print port information */
486 void ethPortStatus(int port)
487 {
488 void* pHndl;
489
490 pHndl = mvEthPortHndlGet(port);
491 if(pHndl != NULL)
492 {
493 mvEthPortShow(pHndl);
494 }
495 }
496
497 /* Print port queues information */
498 void ethPortQueues(int port, int rxQueue, int txQueue, int mode)
499 {
500 void* pHndl;
501
502 pHndl = mvEthPortHndlGet(port);
503 if(pHndl != NULL)
504 {
505 mvEthQueuesShow(pHndl, rxQueue, txQueue, mode);
506 }
507 }
508
509 void ethUcastSet(int port, char* macStr, int queue)
510 {
511 void* pHndl;
512 MV_U8 macAddr[MV_MAC_ADDR_SIZE];
513
514 pHndl = mvEthPortHndlGet(port);
515 if(pHndl != NULL)
516 {
517 mvMacStrToHex(macStr, macAddr);
518 mvEthMacAddrSet(pHndl, macAddr, queue);
519 }
520 }
521
522
523 void ethPortUcastShow(int port)
524 {
525 MV_U32 unicastReg, macL, macH;
526 int i, j;
527
528 macL = MV_REG_READ(ETH_MAC_ADDR_LOW_REG(port));
529 macH = MV_REG_READ(ETH_MAC_ADDR_HIGH_REG(port));
530
531 mvOsPrintf("\n\t Port #%d Unicast MAC table: %02x:%02x:%02x:%02x:%02x:%02x\n\n",
532 port, ((macH >> 24) & 0xff), ((macH >> 16) & 0xff),
533 ((macH >> 8) & 0xff), (macH & 0xff),
534 ((macL >> 8) & 0xff), (macL & 0xff) );
535
536 for (i=0; i<4; i++)
537 {
538 unicastReg = MV_REG_READ( (ETH_DA_FILTER_UCAST_BASE(port) + i*4));
539 for(j=0; j<4; j++)
540 {
541 MV_U8 macEntry = (unicastReg >> (8*j)) & 0xFF;
542
543 mvOsPrintf("%X: %8s, Q = %d\n", i*4+j,
544 (macEntry & BIT0) ? "Accept" : "Reject", (macEntry >> 1) & 0x7);
545 }
546 }
547 }
548
549 void ethMcastAdd(int port, char* macStr, int queue)
550 {
551 void* pHndl;
552 MV_U8 macAddr[MV_MAC_ADDR_SIZE];
553
554 pHndl = mvEthPortHndlGet(port);
555 if(pHndl != NULL)
556 {
557 mvMacStrToHex(macStr, macAddr);
558 mvEthMcastAddrSet(pHndl, macAddr, queue);
559 }
560 }
561
562 void ethPortMcast(int port)
563 {
564 int tblIdx, regIdx;
565 MV_U32 regVal;
566
567 mvOsPrintf("\n\t Port #%d Special (IP) Multicast table: 01:00:5E:00:00:XX\n\n",
568 port);
569
570 for(tblIdx=0; tblIdx<(256/4); tblIdx++)
571 {
572 regVal = MV_REG_READ((ETH_DA_FILTER_SPEC_MCAST_BASE(port) + tblIdx*4));
573 for(regIdx=0; regIdx<4; regIdx++)
574 {
575 if((regVal & (0x01 << (regIdx*8))) != 0)
576 {
577 mvOsPrintf("0x%02X: Accepted, rxQ = %d\n",
578 tblIdx*4+regIdx, ((regVal >> (regIdx*8+1)) & 0x07));
579 }
580 }
581 }
582 mvOsPrintf("\n\t Port #%d Other Multicast table\n\n", port);
583 for(tblIdx=0; tblIdx<(256/4); tblIdx++)
584 {
585 regVal = MV_REG_READ((ETH_DA_FILTER_OTH_MCAST_BASE(port) + tblIdx*4));
586 for(regIdx=0; regIdx<4; regIdx++)
587 {
588 if((regVal & (0x01 << (regIdx*8))) != 0)
589 {
590 mvOsPrintf("Crc8=0x%02X: Accepted, rxQ = %d\n",
591 tblIdx*4+regIdx, ((regVal >> (regIdx*8+1)) & 0x07));
592 }
593 }
594 }
595 }
596
597
598 /* Print status of Ethernet port */
599 void mvEthPortShow(void* pHndl)
600 {
601 MV_U32 regValue, rxCoal, txCoal;
602 int speed, queue, port;
603 ETH_PORT_CTRL* pPortCtrl = (ETH_PORT_CTRL*)pHndl;
604
605 port = pPortCtrl->portNo;
606
607 regValue = MV_REG_READ( ETH_PORT_STATUS_REG(port) );
608
609 mvOsPrintf("\n\t ethGiga #%d port Status: 0x%04x = 0x%08x\n\n",
610 port, ETH_PORT_STATUS_REG(port), regValue);
611
612 mvOsPrintf("descInSram=%d, descSwCoher=%d\n",
613 ethDescInSram, ethDescSwCoher);
614
615 if(regValue & ETH_GMII_SPEED_1000_MASK)
616 speed = 1000;
617 else if(regValue & ETH_MII_SPEED_100_MASK)
618 speed = 100;
619 else
620 speed = 10;
621
622 mvEthCoalGet(pPortCtrl, &rxCoal, &txCoal);
623
624 /* Link, Speed, Duplex, FlowControl */
625 mvOsPrintf("Link=%s, Speed=%d, Duplex=%s, RxFlowControl=%s",
626 (regValue & ETH_LINK_UP_MASK) ? "UP" : "DOWN",
627 speed,
628 (regValue & ETH_FULL_DUPLEX_MASK) ? "FULL" : "HALF",
629 (regValue & ETH_ENABLE_RCV_FLOW_CTRL_MASK) ? "ENABLE" : "DISABLE");
630
631 mvOsPrintf("\n");
632
633 mvOsPrintf("RxCoal = %d usec, TxCoal = %d usec\n",
634 rxCoal, txCoal);
635
636 mvOsPrintf("rxDefQ=%d, arpQ=%d, bpduQ=%d, tcpQ=%d, udpQ=%d\n\n",
637 pPortCtrl->portConfig.rxDefQ, pPortCtrl->portConfig.rxArpQ,
638 pPortCtrl->portConfig.rxBpduQ,
639 pPortCtrl->portConfig.rxTcpQ, pPortCtrl->portConfig.rxUdpQ);
640
641 /* Print all RX and TX queues */
642 for(queue=0; queue<MV_ETH_RX_Q_NUM; queue++)
643 {
644 mvOsPrintf("RX Queue #%d: base=0x%lx, free=%d\n",
645 queue, (MV_ULONG)pPortCtrl->rxQueue[queue].pFirstDescr,
646 mvEthRxResourceGet(pPortCtrl, queue) );
647 }
648 mvOsPrintf("\n");
649 for(queue=0; queue<MV_ETH_TX_Q_NUM; queue++)
650 {
651 mvOsPrintf("TX Queue #%d: base=0x%lx, free=%d\n",
652 queue, (MV_ULONG)pPortCtrl->txQueue[queue].pFirstDescr,
653 mvEthTxResourceGet(pPortCtrl, queue) );
654 }
655 }
656
657 /* Print RX and TX queue of the Ethernet port */
658 void mvEthQueuesShow(void* pHndl, int rxQueue, int txQueue, int mode)
659 {
660 ETH_PORT_CTRL *pPortCtrl = (ETH_PORT_CTRL*)pHndl;
661 ETH_QUEUE_CTRL *pQueueCtrl;
662 MV_U32 regValue;
663 ETH_RX_DESC *pRxDescr;
664 ETH_TX_DESC *pTxDescr;
665 int i, port = pPortCtrl->portNo;
666
667 if( (rxQueue >=0) && (rxQueue < MV_ETH_RX_Q_NUM) )
668 {
669 pQueueCtrl = &(pPortCtrl->rxQueue[rxQueue]);
670 mvOsPrintf("Port #%d, RX Queue #%d\n\n", port, rxQueue);
671
672 mvOsPrintf("CURR_RX_DESC_PTR : 0x%X = 0x%08x\n",
673 ETH_RX_CUR_DESC_PTR_REG(port, rxQueue),
674 MV_REG_READ( ETH_RX_CUR_DESC_PTR_REG(port, rxQueue)));
675
676
677 if(pQueueCtrl->pFirstDescr != NULL)
678 {
679 mvOsPrintf("pFirstDescr=0x%lx, pLastDescr=0x%lx, numOfResources=%d\n",
680 (MV_ULONG)pQueueCtrl->pFirstDescr, (MV_ULONG)pQueueCtrl->pLastDescr,
681 pQueueCtrl->resource);
682 mvOsPrintf("pCurrDescr: 0x%lx, pUsedDescr: 0x%lx\n",
683 (MV_ULONG)pQueueCtrl->pCurrentDescr,
684 (MV_ULONG)pQueueCtrl->pUsedDescr);
685
686 if(mode == 1)
687 {
688 pRxDescr = (ETH_RX_DESC*)pQueueCtrl->pFirstDescr;
689 i = 0;
690 do
691 {
692 mvOsPrintf("%3d. desc=%08x (%08x), cmd=%08x, data=%4d, buf=%4d, buf=%08x, pkt=%lx, os=%lx\n",
693 i, (MV_U32)pRxDescr, (MV_U32)ethDescVirtToPhy(pQueueCtrl, (MV_U8*)pRxDescr),
694 pRxDescr->cmdSts, pRxDescr->byteCnt, (MV_U32)pRxDescr->bufSize,
695 (unsigned int)pRxDescr->bufPtr, (MV_ULONG)pRxDescr->returnInfo,
696 ((MV_PKT_INFO*)pRxDescr->returnInfo)->osInfo);
697
698 ETH_DESCR_INV(pPortCtrl, pRxDescr);
699 pRxDescr = RX_NEXT_DESC_PTR(pRxDescr, pQueueCtrl);
700 i++;
701 } while (pRxDescr != pQueueCtrl->pFirstDescr);
702 }
703 }
704 else
705 mvOsPrintf("RX Queue #%d is NOT CREATED\n", rxQueue);
706 }
707
708 if( (txQueue >=0) && (txQueue < MV_ETH_TX_Q_NUM) )
709 {
710 pQueueCtrl = &(pPortCtrl->txQueue[txQueue]);
711 mvOsPrintf("Port #%d, TX Queue #%d\n\n", port, txQueue);
712
713 regValue = MV_REG_READ( ETH_TX_CUR_DESC_PTR_REG(port, txQueue));
714 mvOsPrintf("CURR_TX_DESC_PTR : 0x%X = 0x%08x\n",
715 ETH_TX_CUR_DESC_PTR_REG(port, txQueue), regValue);
716
717 if(pQueueCtrl->pFirstDescr != NULL)
718 {
719 mvOsPrintf("pFirstDescr=0x%lx, pLastDescr=0x%lx, numOfResources=%d\n",
720 (MV_ULONG)pQueueCtrl->pFirstDescr,
721 (MV_ULONG)pQueueCtrl->pLastDescr,
722 pQueueCtrl->resource);
723 mvOsPrintf("pCurrDescr: 0x%lx, pUsedDescr: 0x%lx\n",
724 (MV_ULONG)pQueueCtrl->pCurrentDescr,
725 (MV_ULONG)pQueueCtrl->pUsedDescr);
726
727 if(mode == 1)
728 {
729 pTxDescr = (ETH_TX_DESC*)pQueueCtrl->pFirstDescr;
730 i = 0;
731 do
732 {
733 mvOsPrintf("%3d. desc=%08x (%08x), cmd=%08x, data=%4d, buf=%08x, pkt=%lx, os=%lx\n",
734 i, (MV_U32)pTxDescr, (MV_U32)ethDescVirtToPhy(pQueueCtrl, (MV_U8*)pTxDescr),
735 pTxDescr->cmdSts, pTxDescr->byteCnt,
736 (MV_U32)pTxDescr->bufPtr, (MV_ULONG)pTxDescr->returnInfo,
737 pTxDescr->returnInfo ? (((MV_PKT_INFO*)pTxDescr->returnInfo)->osInfo) : 0x0);
738
739 ETH_DESCR_INV(pPortCtrl, pTxDescr);
740 pTxDescr = TX_NEXT_DESC_PTR(pTxDescr, pQueueCtrl);
741 i++;
742 } while (pTxDescr != pQueueCtrl->pFirstDescr);
743 }
744 }
745 else
746 mvOsPrintf("TX Queue #%d is NOT CREATED\n", txQueue);
747 }
748 }