📄 mac_util.c
字号:
/*
*-------------------------------------------------------------------------------
*
* I N T E L P R O P R I E T A R Y
*
* COPYRIGHT (c) 2002 BY INTEL CORPORATION. ALL RIGHTS
* RESERVED. NO PART OF THIS PROGRAM OR PUBLICATION MAY
* BE REPRODUCED, TRANSMITTED, TRANSCRIBED, STORED IN A
* RETRIEVAL SYSTEM, OR TRANSLATED INTO ANY LANGUAGE OR COMPUTER
* LANGUAGE IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,
* MAGNETIC, OPTICAL, CHEMICAL, MANUAL, OR OTHERWISE, WITHOUT
* THE PRIOR WRITTEN PERMISSION OF :
*
* INTEL CORPORATION
*
* 2200 MISSION COLLEGE BLVD
*
* SANTA CLARA, CALIFORNIA 95052-8119
*
* ------------------------------------------------------------------------------
*/
/**
* System defined include files required.0
*/
/**
* User defined include files required.
*/
#include "mac_util.h"
#include "mac_init.h"
#include "diag.h"
#include "mac_diag.h"
#include "packet_pool.h"
#include "error_map.h"
#include "prototypes.h"
#include "register_map.h"
#include "i2c.h"
#include "cfg_utility.h"
#include "diagstruct.h"
/**
* These bit masks are used to set a bit in the mac_test_flag
* The corresponding diagnostic routine against the set bit is invoked.
*/
#define RMON_TEST_MASK 0x1 /* bit 0 */
#define PERPORT_TEST_MASK 0x2 /* bit 1 */
#define ATSCAN_TEST_MASK 0x4 /* bit 2 */
#define POWDN_TEST_MASK 0x8 /* bit 3 */
#define RESET_TEST_MASK 0x10 /* bit 4 */
#define WMARK_TEST_MASK 0x20 /* bit 5 */
#define VLPSE_TEST_MASK 0x40 /* bit 6 */
#define CRC_TEST_MASK 0x80 /* bit 7 */
#define PAD_TEST_MASK 0x100 /* bit 8 */
#define FRSZ_TEST_MASK 0x200 /* bit 9 */
#define MDIO_TEST_MASK 0x800 /* bit 11 */
#define LED_TEST_MASK 0x1000 /* bit 12 */
#define SPI3_TEST_MASK 0x2000 /* bit 13 */
#define I2C_TEST_MASK 0x4000 /* bit 14 */
#define SYSLB_TEST_MASK 0x8000 /* bit 15 */
#define LPBK_TEST_MASK 0x10000 /* bit 16 */
#define LRATE_TEST_MASK 0x20000 /* bit 17 */
#define ADR_FILTER_MASK 0x40000 /* bit 18 */
#define ALL_TESTS_MASK 0x80000 /* bit 19 */
#define REG_RD 0x100000 /* bit 20 */
#define REG_WR 0x200000 /* bit 21 */
#define RD_ALL_REGS 0x400000 /* bit 22 */
#define PHY_READ_ALL 0xF
#define PHY_REG_WRITE 0xD
#define INTERNAL_LPBK 0xE
#define I2C_EEPROM 0xA
#define TEST_LPBK_XSCALE 0xB
#define LINE_TEST_MASK 0xC
#define MDC_SEL_MASK 0xA1
unsigned int mac_test_flag = 0;
UINT32 *pl_sys_lb_data64_0;
UINT32 *pl_sys_lb_data64_1;
UINT32 *pl_sys_lb_data64_2;
UINT32 *pl_sys_lb_data64_3;
UINT32 *pl_sys_lb_data96_0;
UINT32 *pl_sys_lb_data96_1;
UINT32 *pl_sys_lb_data96_2;
UINT32 *pl_sys_lb_data96_3;
UINT32 *pl_sys_lb_data138_0;
UINT32 *pl_sys_lb_data138_1;
UINT32 *pl_sys_lb_data138_2;
UINT32 *pl_sys_lb_data138_3;
UINT32 PKT_4_SZ = 1*4;
UINT32 PKT_48_SZ = 11*4;
UINT32 PKT_96_SZ = 23*4;
UINT32 PKT_64_SZ = 15*4;
UINT32 PKT_138_SZ = 132;
UINT32 PKT_256_SZ = 256;
UINT32 PKT_512_SZ = 512;
UINT32 PKT_1024_SZ = 1024;
UINT32 PKT_1520_SZ = 1520;
UINT32 PKT_5K_SZ = 5*1024;
UINT32 PKT_10K_SZ = 11*1024;
/** Global variables **/
UINT32 total_args = 0, loop = 1, ports = 4;
UINT8 channel='0',test_opt='?' ;
UINT32 speed=1000;
UINT8 dplx='f',loopback_mode='e';
UINT8 test_param = '?';
UINT32 rxstat[4][30],txstat[4][30];
extern diag_error *p_aErrorMap;
char *aTestHelp[] =
{
"Syntax :",
"t mac <option> <test_param> [fiber mode] [1000] <port no.> <loop count>",
"where -",
"[fiber_mode] {f} -> tests run on fiber configuration.",
"[1000] -> speed",
"[port]: ",
" 0/1/2/3 -> Test is executed on one of these ports",
" 4 -> Test is executed on all ports",
"[loop count] -> Number of loops for the loopback test.",
"<option> <test_param>:",
"1. f u: Unicast address filtering",
"syntax: t mac f u f 1000 <port> <loop>",
"2. f m: Multicast address filtering",
"syntax: t mac f m f 1000 <port> <loop>",
"3. f b: Broadcast address filtering",
"syntax: t mac f b f 1000 <port> <loop>",
"4. s r: SPI-3 TERR signal test",
"syntax: t mac s r f 1000 <port> <loop>",
"5. s t: SPI-3 TPA/TENB signal test",
"syntax: t mac s t f 1000 <port> <loop>",
"6. s m: SPI-3 MPHY-32 mode/Inband addressing test",
"syntax: t mac s m f 1000 <port> <loop>",
"7. p: Per Port Register tests",
"syntax: t mac p",
"8. i: I2C tests",
"syntax: t mac i",
"9. m: MDIO test ",
"syntax: t mac m",
"10. m a: Autoscan test ",
"syntax: t mac m a",
"11. d e: Tx FIFO Padding test",
"syntax: t mac d e f 1000 <port> <loop>",
"12. d p: Rx FIFO Pre-pending test",
"syntax: t mac d p f 1000 <port> <loop>",
"13. v l: Vlan frame filtering test",
"syntax: t mac v l f 1000 <port> <loop>",
"14. v p: Pause frame filtering test",
"syntax: t mac v p f 1000 <port> <loop>",
"15. w r: Rx FIFO Power down test",
"syntax: t mac w r f 1000 <port> <loop>",
"16. w t: Tx FIFO Power down test",
"syntax: t mac w r f 1000 <port> <loop>",
"17. e r: Rx FIFO Reset test",
"syntax: t mac e r f 1000 <port> <loop>",
"18. e t: Tx FIFO Reset test",
"syntax: t mac e t f 1000 <port> <loop>",
"19. l d: LED test with Rx/Tx",
"syntax: t mac l d f 1000 <port> <loop>",
"20. l o: LED test with disabled ports",
"syntax: t mac l o f 1000 <port> <loop>",
"21. c a: CRC Append and Strip test",
"syntax: t mac c a f 1000 <port> <loop>",
"22. k t: Tx FIFO Watermark test",
"syntax: t mac k t f 1000 <port> <loop>",
"23. k r: Rx FIFO Watermark test",
"syntax: t mac k r f 1000 <port> <loop>",
"24. z c: Frame Size test",
"syntax: t mac z c f 1000 <port> <loop>",
"25 : RMON test: ",
" RxOctetsTotalOK/OctetsTransmittedOK",
" RxUCPckts/TxUCPkts",
" RxMCPkts/TxMCPkts",
" RxBCPkts/TxBCPkts",
" RxPkts64Octets/TxPkts64Octets",
" RxPkts65to127Octets/TxPkts65to127Octets",
" RxPkts128to255Octets/TxPkts128to255Octets",
"syntax: t mac r 1 f 1000 <port> <loop>",
"26 : RMON test: ",
" RxPkts256to511Octets/TxPkts256to511Octets",
" RxPkts512to1023Octets/TxPkts512to1023Octets",
" RxPkts1024to1518Octets/TxPkts1024to1518Octets",
" Rxpkts1519toMaxOctets/Txpkts1519toMaxOctets",
"syntax: t mac r j f 1000 <port> <loop>",
"27 : RMON test: ",
" Rx Tagged/Tx Tagged",
"syntax: t mac r 2 f 1000 <port> <loop>",
"28 : RMON test: ",
" PauseMacControlReceivedCounter/TxPauseFrames",
"syntax: t mac r 3 f 1000 <port> <loop>",
"29: RMON test: FCSError/CRCError",
"syntax: t mac r 4 f 1000 <port> <loop>",
"30: RMON test: Rx Runt Error test",
"syntax: t mac r 5 c 1000 <port> <loop>",
"31: RMON test: Rx Short Error test",
"syntax: t mac r 6 c 1000 <port> <loop>",
"32: RMON test: Tx Collision test",
"syntax: t mac r c c 1000 <port> <loop>",
"33: RMON test: Rx AlignError test",
"syntax: t mac r a c 1000 <port> <loop>",
"34: RMON test: Rx SequenceError test",
"syntax: t mac r s c 1000 <port> <loop>",
"35: RMON test: Rx LongError test",
"syntax: t mac r l c 1000 <port> <loop>",
"36: RMON test: Rx JabberError test",
"syntax: t mac r s c 1000 <port> <loop>",
"37: m s: MDC Speed Selection test",
"syntax: t mac m s",
};
#define aTestHelpSz (sizeof(aTestHelp) /sizeof(aTestHelp[0]))
UINT32 tx_data_pl[] = { RING_DATA_96_0, RING_DATA_96_1, RING_DATA_96_2, RING_DATA_96_3,
RING_DATA_96_0, RING_DATA_96_1, RING_DATA_96_2, RING_DATA_96_3,
RING_DATA_96_0, RING_DATA_96_1, RING_DATA_96_2, RING_DATA_96_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
};
UINT32 fs_tx_data_pl[] = { RING_DATA_96_0, RING_DATA_96_0, RING_DATA_96_0, RING_DATA_96_0,
RING_DATA_64_0, RING_DATA_64_0, RING_DATA_64_0, RING_DATA_64_0,
RING_DATA_138_0, RING_DATA_138_0, RING_DATA_138_0, RING_DATA_138_0,
RING_DATA_256_0, RING_DATA_256_0, RING_DATA_256_0, RING_DATA_256_0,
RING_DATA_512_0, RING_DATA_512_0, RING_DATA_512_0, RING_DATA_512_0,
RING_DATA_1024_0, RING_DATA_1024_0, RING_DATA_1024_0, RING_DATA_1024_0,
RING_DATA_1520_0, RING_DATA_1520_0, RING_DATA_1520_0, RING_DATA_1520_0,
RING_DATA_5K_0, RING_DATA_5K_0, RING_DATA_5K_0, RING_DATA_5K_0,
RING_DATA_10K_0, RING_DATA_10K_0, RING_DATA_10K_0, RING_DATA_10K_0
};
UINT32 fs_tx_data_pl_0[] = { RING_DATA_96_0, RING_DATA_64_0, RING_DATA_138_0,
RING_DATA_256_0, RING_DATA_512_0, RING_DATA_1024_0,
RING_DATA_1520_0, RING_DATA_5K_0, RING_DATA_10K_0
};
UINT32 fs_tx_data_pl_1[] = { RING_DATA_96_1, RING_DATA_64_1, RING_DATA_138_1,
RING_DATA_256_1, RING_DATA_512_1, RING_DATA_1024_1,
RING_DATA_1520_1, RING_DATA_5K_1, RING_DATA_10K_1
};
UINT32 fs_tx_data_pl_2[] = { RING_DATA_96_2, RING_DATA_64_2, RING_DATA_138_2,
RING_DATA_256_2, RING_DATA_512_2, RING_DATA_1024_2,
RING_DATA_1520_2, RING_DATA_5K_2, RING_DATA_10K_2
};
UINT32 fs_tx_data_pl_3[] = { RING_DATA_96_3, RING_DATA_64_3, RING_DATA_138_3,
RING_DATA_256_3, RING_DATA_512_3, RING_DATA_1024_3,
RING_DATA_1520_3, RING_DATA_5K_3, RING_DATA_10K_3
};
UINT32 tx_data_pl_0[] = { RING_DATA_96_0, RING_DATA_96_0, RING_DATA_96_0,
RING_DATA_64_0, RING_DATA_64_0, RING_DATA_64_0,
RING_DATA_138_0, RING_DATA_138_0, RING_DATA_138_0
};
UINT32 tx_data_pl_1[] = { RING_DATA_96_1, RING_DATA_96_1, RING_DATA_96_1,
RING_DATA_64_1, RING_DATA_64_1, RING_DATA_64_1,
RING_DATA_138_1, RING_DATA_138_1, RING_DATA_138_1
};
UINT32 tx_data_pl_2[] = { RING_DATA_96_2, RING_DATA_96_2, RING_DATA_96_2,
RING_DATA_64_2, RING_DATA_64_2, RING_DATA_64_2,
RING_DATA_138_2, RING_DATA_138_2, RING_DATA_138_2
};
UINT32 tx_data_pl_3[] = { RING_DATA_96_3, RING_DATA_96_3, RING_DATA_96_3,
RING_DATA_64_3, RING_DATA_64_3, RING_DATA_64_3,
RING_DATA_138_3, RING_DATA_138_3, RING_DATA_138_3
};
UINT32 tx_data_pl_48_0[] ={ RING_DATA_48_0, RING_DATA_48_0, RING_DATA_48_0,
RING_DATA_64_0, RING_DATA_64_0, RING_DATA_64_0,
RING_DATA_138_0, RING_DATA_138_0, RING_DATA_138_0
};
UINT32 tx_data_pl_48_1[] ={ RING_DATA_48_1, RING_DATA_48_1, RING_DATA_48_1,
RING_DATA_64_1, RING_DATA_64_1, RING_DATA_64_1,
RING_DATA_138_1, RING_DATA_138_1, RING_DATA_138_1
};
UINT32 tx_data_pl_48_2[] ={ RING_DATA_48_2, RING_DATA_48_2, RING_DATA_48_2,
RING_DATA_64_2, RING_DATA_64_2, RING_DATA_64_2,
RING_DATA_138_2, RING_DATA_138_2, RING_DATA_138_2
};
UINT32 tx_data_pl_48_3[] ={ RING_DATA_48_3, RING_DATA_48_3, RING_DATA_48_3,
RING_DATA_64_3, RING_DATA_64_3, RING_DATA_64_3,
RING_DATA_138_3, RING_DATA_138_3, RING_DATA_138_3
};
UINT32 tx_data_pl_48[] ={ RING_DATA_48_0, RING_DATA_48_1, RING_DATA_48_2, RING_DATA_48_3,
RING_DATA_48_0, RING_DATA_48_1, RING_DATA_48_2, RING_DATA_48_3,
RING_DATA_48_0, RING_DATA_48_1, RING_DATA_48_2, RING_DATA_48_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
};
UINT32 tx_data_pl_4_0[] ={ RING_DATA_4_0, RING_DATA_4_0, RING_DATA_4_0,
RING_DATA_64_0, RING_DATA_64_0, RING_DATA_64_0,
RING_DATA_138_0, RING_DATA_138_0, RING_DATA_138_0
};
UINT32 tx_data_pl_4_1[] ={ RING_DATA_4_1, RING_DATA_4_1, RING_DATA_4_1,
RING_DATA_64_1, RING_DATA_64_1, RING_DATA_64_1,
RING_DATA_138_1, RING_DATA_138_1, RING_DATA_138_1
};
UINT32 tx_data_pl_4_2[] ={ RING_DATA_4_2, RING_DATA_4_2, RING_DATA_4_2,
RING_DATA_64_2, RING_DATA_64_2, RING_DATA_64_2,
RING_DATA_138_2, RING_DATA_138_2, RING_DATA_138_2
};
UINT32 tx_data_pl_4_3[] ={ RING_DATA_4_3, RING_DATA_4_3, RING_DATA_4_3,
RING_DATA_64_3, RING_DATA_64_3, RING_DATA_64_3,
RING_DATA_138_3, RING_DATA_138_3, RING_DATA_138_3
};
UINT32 tx_data_pl_4[] ={ RING_DATA_4_0, RING_DATA_4_1, RING_DATA_4_2, RING_DATA_4_3,
RING_DATA_4_0, RING_DATA_4_1, RING_DATA_4_2, RING_DATA_4_3,
RING_DATA_4_0, RING_DATA_4_1, RING_DATA_4_2, RING_DATA_4_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_64_0, RING_DATA_64_1, RING_DATA_64_2, RING_DATA_64_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
RING_DATA_138_0, RING_DATA_138_1, RING_DATA_138_2, RING_DATA_138_3,
};
UINT32 PKT_SEQ_SZ = sizeof(tx_data_pl_0);
UINT32 ALL_PORT_PKT_SEQ_SZ = sizeof(tx_data_pl);
/**
* Extern function prototypes.
*/
extern void Disable_CPSR_Int(void);
extern void Enable_CPSR_Int(void);
extern void eprintf(char *f, ...);
extern UINT32 rmon_test(void);
extern UINT32 per_port_reg_test(void);
extern UINT32 autoscan_test(void);
extern UINT32 mdio_config_test(void);
extern UINT32 Rx_Tx_Watermark_test(void);
extern UINT32 LED_test(void);
extern UINT32 I2C_test(void);
extern UINT32 spi3_test(void);
extern UINT32 powerDown_test(void);
extern UINT32 reset_test(void);
extern UINT32 rx_tx_path_test(void);
extern UINT32 lpbk_test(void);
extern void make_ErrorMap(void);
extern void reg_write( volatile UINT32 offset, UINT32 val);
extern UINT32 reg_read( volatile UINT32 offset);
extern void test_lpbk(void);
extern UINT32 wmark_test(void);
extern int ctoi(char c);
extern UINT32 macScan(void);
extern UINT32 init_mac_dev (UINT32);
extern void gets(char *str, int len);
extern void gbe_mac_phy_write(UINT32, UINT32,UINT32);
extern UINT32 pl_SysLpbk_test(void);
extern int getCmdLine(char* cmdLine);
extern UINT32 gbe_mac_phy_read(UINT32 arg_PhyAddress, UINT32 arg_RegAddress);
extern unsigned int htoi(char *s);
extern void check_error_display_txstats(void);
/* Local function prototypes */
UINT32 validate_params(void);
void get_option_from_user(void);
UINT32 assign_pkt_pointers(UINT32 ports, UINT32 *pktptr, UINT32 cflag, UINT32 *pnum);
UINT32 cu_init(UINT32 set_int_lpbk);
UINT32 do_mac_test(void);
short check_autoneg_status(void);
/**
* Static function prototypes.
*/
static void show_options_help(void);
/**
* Function definitions.
*/
void mac_test(void)
{
register PDiagCommon acL = (PDiagCommon) ACADDRESS;
test_opt = acL->argv[2][0];
if(acL->HostType == MASTER) // if master NPU
{
/*
** initialize error map
*/
make_ErrorMap();
get_option_from_user();
if (do_mac_test() != DONE)
{
eprintf("Aborting Execution !\n");
return;
}
return;
}
}
void get_option_from_user(void)
{
short bad_option = 1;
switch (test_opt)
{
case 'q': mac_test_flag |= PHY_READ_ALL;
bad_option = 0;
break;
case 'b': mac_test_flag |= PHY_REG_WRITE;
bad_option = 0;
break;
case 'g': mac_test_flag |= RD_ALL_REGS;
bad_option = 0;
break;
case 'h': mac_test_flag |= REG_RD;
bad_option = 0;
break;
case 'y': mac_test_flag |= REG_WR;
bad_option = 0;
break;
case 'r': mac_test_flag |= RMON_TEST_MASK;
bad_option = 0;
break;
case 'f': mac_test_flag |= ADR_FILTER_MASK;
bad_option = 0;
break;
case 'p': mac_test_flag |= PERPORT_TEST_MASK;
bad_option = 0;
break;
case 'c': mac_test_flag |= CRC_TEST_MASK;
bad_option = 0;
break;
case 'd': mac_test_flag |= PAD_TEST_MASK;
bad_option = 0;
break;
case 'm': mac_test_flag |= MDIO_TEST_MASK;
bad_option = 0;
break;
case 'i': mac_test_flag |= I2C_TEST_MASK;
bad_option = 0;
break;
case 'v': mac_test_flag |= VLPSE_TEST_MASK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -