⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_util.c

📁 开发Inetl IXP2400平台所必须的硬件诊断和测试程序。该软件包支持的功能包括CPU基本功能检测
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 *-------------------------------------------------------------------------------
 *                                                                      
 *                  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 + -