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

📄 frsize_diag.c

📁 开发Inetl IXP2400平台所必须的硬件诊断和测试程序。该软件包支持的功能包括CPU基本功能检测
💻 C
📖 第 1 页 / 共 3 页
字号:
				if (rxflag[rxport[ports]] == OK)
				{
					flag = OK;
				}
				else 
				{
					flag = ERROR;
				}
			}
		}

		if ((ports == 4) && (temp == 2))
		{
			flag = OK;		
		}	

		if((ports == 4) && (cflag))
			per_port_pkts = packet_num/2;
		else if((ports == 4) && (!cflag))
			per_port_pkts = packet_num/4;
		else 
			per_port_pkts = packet_num;
		
		eprintf("Received : %d\r",packet_num);

		PUT32((PCI_LOCAL_CSR_BASE + MAILBOX_1_OFF), PACKET_RECEIVED);
		// mailbox 2 has  : loop_count (31:16) and port (15:0)
		mailbox2_val = GET32(PCI_LOCAL_CSR_BASE + MAILBOX_2_OFF);
		mailbox2_val = (mailbox2_val >> 16) & 0x7FFF;
		
		if ((forever && mailbox2_val) || (flag == ERROR))
		{
			break;
		}

	}	// end of while loop

	eprintf("\n");
	
	switch(ports)
	{
		case 0:
		case 1:
		case 2:
		case 3:
				if (!cflag)
				{
					if (pass_port[ports] == 1)
					{	
						eprintf("Received %d packets on Port %d\n",packet_num,ports);
					}
				}
				else
				{
					if (pass_port[rxport[ports]] == 1)
					{	
						eprintf("Received %d packets on Port %d\n",packet_num,rxport[ports]);
					}
				}
				break;
		case 4:
				if (!cflag)
				{
					for (ctr=0; ctr<4; ctr++)
					{
						if (pass_port[ctr] == 1)
						{
							eprintf("Received: %d on port %d\n", packet_num/4, ctr);
						}
						
					}
				}
				else
				{
					for (ctr=0; ctr<2; ctr++)
					{
						if (pass_port[ctr*2+1] == 1)
						{
							eprintf("Received: %d on port %d\n", packet_num/2, ctr*2+1);
						}
						
					}
				}

				break;
	}
	
	if (flag == OK)
	{
		eprintf("Slave writing Test Complete \n"); 	
		PUT32((PCI_LOCAL_CSR_BASE + MAILBOX_0_OFF), TEST_COMPLETE);
	}
	else
	{
		eprintf("Slave writing : 0x%x\n",mailbox_value);
		PUT32((PCI_LOCAL_CSR_BASE + MAILBOX_0_OFF), mailbox_value);
	}

	if(dcache_status != 0)	// if dcache was originally ON
	{
		dcache_on();
	}

	Clear_All_ME();
}

void write_pkt_to_dram(void)
{
	int ctr=0;
	UINT32 addr=0;

	if ((ports == 0) || (ports == 1) || (ports == 2) || (ports == 3)|| (ports == 4))
	{
		for (ctr = 0; ctr < PKT_96_SZ; ctr+=4)
		{
			PUT32((DRAM_BASE_SRC + ((RING_DATA_96_0 >> 8) & (MASK_16BIT << 8)) + ctr), data96_0[(ctr / 4)]);
		}
	
		for (ctr = 0; ctr < PKT_64_SZ; ctr+=4)
		{
			PUT32((DRAM_BASE_SRC + ((RING_DATA_64_0 >> 8) & (MASK_16BIT << 8)) + ctr), data64_0[(ctr / 4)]);
		}
	
		for (ctr = 0; ctr < PKT_138_SZ; ctr+=4)
		{
			PUT32((DRAM_BASE_SRC + ((RING_DATA_138_0 >> 8) & (MASK_16BIT << 8)) + ctr), data138_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_256_SZ; ctr+=4)
		{
			addr = (RING_DATA_256_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + addr + ctr), data256_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_512_SZ; ctr+=4)
		{
			addr = (RING_DATA_512_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + addr + ctr), data512_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_1024_SZ; ctr+=4)
		{
			addr = (RING_DATA_1024_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + addr + ctr), data1024_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_1520_SZ; ctr+=4)
		{
			addr = (RING_DATA_1520_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + 0x1000 + addr + ctr), data1520_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_5K_SZ; ctr+=4)
		{
			addr = (RING_DATA_5K_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + addr + 0x1000 + ctr), data5K_0[(ctr / 4)]);
		}
		for (ctr = 0; ctr < PKT_10K_SZ; ctr+=4)
		{
			addr = (RING_DATA_10K_0 >> 16) << 8;
			PUT32((DRAM_BASE_SRC + addr + 0x2000 + ctr), data10K_0[(ctr / 4)]);
		}

	}
}

void verify_frame(UINT32 pkt_size, UINT32*ds, UINT32*media_lb_data, UINT32 rx_port_num)
{
	UINT32 orig_data_size=0;

	if ((pkt_size == (RING_DATA_96_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_96_0 >> 20) & MASK_8BIT)))
	{
		orig_data_size = PKT_96_SZ;
		media_lb_data = (UINT32 *)data96_0;
	}
	else if ((pkt_size == (RING_DATA_64_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_64_0 >> 20) & MASK_8BIT)))
	{
		orig_data_size = PKT_64_SZ;
		media_lb_data = (UINT32 *)data64_0;
	}
	else if ((pkt_size == (RING_DATA_138_0 & MASK_16BIT)) && (rx_port_num == ((RING_DATA_138_0 >> 20) & MASK_8BIT)))
	{
		orig_data_size = PKT_138_SZ;
		media_lb_data = (UINT32 *)data138_0;
	}

	*ds = orig_data_size;

}

UINT32 get_pkt_seq(UINT32 **pktptr, UINT32 *num_frames,UINT32 cflag,UINT32 port)
{
	UINT32 iteration=0,pnum = *num_frames;
	UINT32 **ptr = pktptr;
	
	switch(port)
	{
		case 0: *ptr = fs_tx_data_pl_0;
				pnum = PKT_SEQ_SZ/4; 
				iteration = 1;
				break;
		case 1: *ptr = fs_tx_data_pl_0;
				pnum = PKT_SEQ_SZ/4;
				iteration = 1;
				break;
		case 2: *ptr = fs_tx_data_pl_0;
				pnum = PKT_SEQ_SZ/4;
				iteration = 1;
				break;
		case 3: *ptr = fs_tx_data_pl_0;
				pnum = PKT_SEQ_SZ/4;
				iteration = 1;
				break;
		case 4: *ptr = fs_tx_data_pl;
				pnum = ALL_PORT_PKT_SEQ_SZ/(4*4);
				if (cflag)
					iteration = 2;
				else
					iteration = 4;
				break;
	}

	*num_frames = pnum;
	return iteration;
}



void makePkt(UINT32 size)
{

	int i=0;
	UINT32 WORD = 0x00101010;

	switch (size)
	{
	case 0x100 : 
		for (i=0;i<=size/4;i++)
		{
			data256_0[i] = WORD;
			WORD+=0x10;
		}
		break;
	case 0x200 : 
		WORD = 0x00101010;
		for (i=0;i<=size/4;i++)
		{
			data512_0[i] = WORD;
			WORD+=0x10;
		}
		break;
	case 0x400 : 
		WORD = 0x00101010;
		for (i=0;i<=size/4;i++)
		{
			data1024_0[i] = WORD;
			WORD+=0x10;
		}
		break;
	case 0x5F0 : 
		WORD = 0x00101010;
		for (i=0;i<=size/4;i++)
		{
			data1520_0[i] = WORD;
			WORD+=0x10;
		}
		break;

	case 0x1400 : 
		WORD = 0x00101010;
		for (i=0;i<=size/4;i++)
		{
			data5K_0[i] = WORD;
			WORD+=0x10;
		}

		break;
	case 0x2800 : 
		WORD = 0x00101010;
		for (i=0;i<=size/4;i++)
		{
			data10K_0[i] = WORD;
			WORD+=0x5;
		}

		data5K_0[0] = 0x00101010;
		break;

	case 0x2C00 : 
		WORD = 0x00202020;
		for (i=0;i<=size/4;i++)
		{
			data10K_0[i] = WORD;
			WORD+=0x5;
		}

		data5K_0[0] = 0x00101010;
		break;

	default:
		eprintf("Invalid size \n");
		return;
	}
}

short verify_error(short cflag)
{
	UINT32 rxLongError[4],rxJabberError[4];
	short test_passed = 0,iteration,port,port_ctr;
	short rxok=0;

	if (ports == 4)
		if (!cflag)
			iteration = 4;
		else
			iteration = 2;
	else
		iteration = 1;

	spConfig();
    for(port=0; port<4;port++)
    {	
		/* Reading Rx Stat regs */
		rxLongError[port] = reg_read(((port*PORTSZ)+0x30));  
		rxJabberError[port] = reg_read(((port*PORTSZ)+0x31)); 
	}

	for(port_ctr=0; port_ctr<iteration;port_ctr++)
	{
		if ((!cflag) && (ports == 4))
			port = port_ctr;
		if ((cflag) && (ports == 4))
		{
			port = port_ctr*2;
			port = rxport[port];
		}
		if ((!cflag) && (ports != 4))
			port = ports;
		if ((cflag) && (ports != 4))
			port = rxport[ports];

		switch(test_param)
		{
		case 'l':
				eprintf("RX LongErrors = \t%d on port %d\n",rxLongError[port],port);
				if (rxLongError[port] == loop)
				{
					eprintf("Rx LongError Register test, OK , Port %d\n",port);
					rxok ++ ;
				}
				else
				{
					eprintf("Rx LongError Register test, FAILED , Port %d\n",port);
				}

				break;
		case 'b':
				eprintf("RX LongErrors = \t%d on port %d\n",rxJabberError[port],port);
				if (rxJabberError[port] == loop)
				{
					eprintf("Rx JabberError Register test, OK , Port %d\n",port);
					rxok ++ ;
				}
				else
				{
					eprintf("Rx JabberError Register test, FAILED , Port %d\n",port);
				}
				break;
		}
	}
	if (((iteration == 1) && rxok)  ||
		((iteration == 2) && (rxok == 2) ) ||
		((iteration == 4) && (rxok==4) ))
	{
		eprintf("\nRMON stat test PASSED. \n");
		test_passed = 1;
	}

	return test_passed;
}

short verify_stats(short cflag)
{
	UINT32 rx256pkts[4],rx512pkts[4],rx1024pkts[4],rxBigpkts[4]; 
	UINT32 tx256pkts[4],tx512pkts[4],tx1024pkts[4],txBigpkts[4]; 

	short test_passed = 0,iteration,port,port_ctr;
	short rxok=0,txok=0;

	if (ports == 4)
		if (!cflag)
			iteration = 4;
		else
			iteration = 2;
	else
		iteration = 1;

	spConfig();

    for(port=0; port<4;port++)
    {	
		/* Reading Rx Stat regs */
		rx256pkts[port] = reg_read(((port*PORTSZ)+RX_PKTS_256_511));  
		rx512pkts[port] = reg_read(((port*PORTSZ)+RX_PKTS_512_1023));  
		rx1024pkts[port] = reg_read(((port*PORTSZ)+RX_PKTS_1024_1518));  
		rxBigpkts[port] = reg_read(((port*PORTSZ)+RX_PKTS_1519_MAX)); 

		/* Reading Tx stat */
		tx256pkts[port] = reg_read(((port*PORTSZ)+TX_PKTS_256_511));  
		tx512pkts[port] = reg_read(((port*PORTSZ)+TX_PKTS_512_1023));  
		tx1024pkts[port] = reg_read(((port*PORTSZ)+TX_PKTS_1024_1518));  
		txBigpkts[port] = reg_read(((port*PORTSZ)+TX_PKTS_1519_MAX));  		
	}

	spRestore();

	for(port_ctr=0; port_ctr<iteration;port_ctr++)
	{
		if ((!cflag) && (ports == 4))
			port = port_ctr;
		if ((cflag) && (ports == 4))
		{
			port = port_ctr*2;
			port = rxport[port];
		}
		if ((!cflag) && (ports != 4))
			port = ports;
		if ((cflag) && (ports != 4))
			port = rxport[ports];

		eprintf("RX 256 byte pkts = \t%d on port %d\n",rx256pkts[port],port);
		eprintf("RX 512 byte pkts = \t%d on port %d\n",rx512pkts[port],port);
		eprintf("RX 1024 byte pkts = \t%d on port %d\n",rx1024pkts[port],port);
		eprintf("RX Big pkts = \t%d on port %d\n",rxBigpkts[port],port);

		if ((rx256pkts[port] == loop) &&
			(rx512pkts[port] == loop) &&
			(rx1024pkts[port] == loop) &&
			(rxBigpkts[port] == 3*loop))
		{
			eprintf("RMON Rx stat test, OK , Port %d\n",port);
			rxok ++ ;
		}
		else
		{
			eprintf("RMON Rx stat test, FAILED , Port %d\n",port);
		}

		if (cflag)
			port=rxport[port];

		eprintf("TX 256 byte pkts = \t%d on port %d\n",tx256pkts[port],port);
		eprintf("TX 512 byte pkts = \t%d on port %d\n",tx512pkts[port],port);
		eprintf("TX 1024 byte pkts = \t%d on port %d\n",tx1024pkts[port],port);
		eprintf("TX Big pkts = \t%d on port %d\n",txBigpkts[port],port);

		if ((tx256pkts[port] == loop) &&
			(tx512pkts[port] == loop) &&
			(tx1024pkts[port] == loop) &&
			(txBigpkts[port] == 3*loop))
		{
			eprintf("RMON Tx stat test, OK , Port %d\n",port);
			txok++ ;
		}
		else
		{
			eprintf("RMON Tx stat test, FAILED , Port %d\n",port);
		}

	}

	if (((iteration == 1) && rxok && txok) ||
		((iteration == 2) && (rxok == 2) && (txok==2)) ||
		((iteration == 4) && (rxok==4) && (txok==4)))
	{
		eprintf("\nRMON stat test passed. \n");
		test_passed = 1;
	}

	return test_passed;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -