📄 frsize_diag.c
字号:
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 + -