📄 rmon_diag.c
字号:
{
orig_data_size = PKT_138_SZ;
pl_sys_lb_data = (UINT32 *)pl_sys_lb_data138_3;
}
else
{
eprintf("pkt size mismatch !! port = %d\n",rx_port_num);
mailbox_value = NOT_COMPLETE;
flag = ERROR; // Set flag as error
rxflag[rx_port_num] = ERROR;
break;
}
}
//eprintf("packet ******\n");
for (ctr = 0; ctr < orig_data_size; ctr+=4)
{
// Read the DRAM for the longword that was received
temp = GET32(dram_addr + ctr);
//eprintf("dram data = 0x%08X\n",temp);
//eprintf("pkt data = 0x%08X\n",pl_sys_lb_data[(ctr / 4)]);
// Compare with original value
if (temp != pl_sys_lb_data[(ctr / 4)])
{
mailbox_value = ERROR_PATTERN;
eprintf("Packet:%d Longword:%d Expected:0x%X Received:0x%X\n", (rx_count + 1), (ctr / 4), pl_sys_lb_data[(ctr / 4)], temp);
flag = ERROR; // Set flag as error
rxflag[rx_port_num] = ERROR;
break;
}
}
if (flag == ERROR)
{
eprintf("1. break. \n");
break;
}
hal_delay_us(800);
}
if (flag == ERROR)
{
break;
}
}
#endif // skip receive process.
if (flag == ERROR)
{
break;
}
loop_count++;
if (forever && KEYPRESS)
{
break;
}
}
while ((loop_count != loop) || forever);
}
eprintf("\n");
if(dcache_status != 0) // if dcache was originally ON
{
dcache_on();
}
if (loop == 0)
loop = loop_count;
rmon_flag = ERROR;
switch(test_param)
{
case 'c' :
if (get_TX_collisions())
{
rmon_flag = OK;
eprintf("\nTx Collisions Test PASSED..\n");
}
break;
break;
case 'a':
if(get_Rx_AlignError())
{
rmon_flag = OK;
eprintf("\nRx AlignError Test PASSED..\n");
}
case 's':
if(get_Rx_SeqError())
{
rmon_flag = OK;
eprintf("\nRx Sequence Error Test PASSED..\n");
}
break;
case 'l':
if(get_Rx_LongError())
{
rmon_flag = OK;
eprintf("\nRx Long Error Test PASSED..\n");
}
break;
case 'b':
if(get_Rx_JabberError())
{
rmon_flag = OK;
eprintf("\nRx Jabber Error Test PASSED..\n");
}
break;
}
if (rmon_flag==OK)
{
Set_LED("PASS");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_PASS;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
}
else
{
if (mailbox_value == INIT_ERROR)
{
eprintf("The slave NPU did not succeed in loading the microcode to its microengines\n");
}
else if (mailbox_value == NOT_RECEIVED)
{
eprintf("There was no sign that the expected packet was received\n");
}
else if (mailbox_value == ERROR_PATTERN)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same as the packet transmitted.\n");
}
else if (mailbox_value == INCORRECT_SIZE)
{
eprintf("mailbox = 0x%x\n",mailbox_value);
eprintf("The packet received was not the same size as the packet transmitted.\n");
}
/* get statistics from Vallejo */
//get_stats();
// prepare structure for dumping
syslog.type = TYPE_ERROR;
syslog.source_comp = MASTER_DIAG; // Determine master/slave
switch(test_param)
{
case 'c' :
eprintf("\nTx Collisions Test FAILED..\n");
strcpy(syslog.desc, "Tx Collisions Test FAILED");
break;
case 'd':
eprintf("\nRx DataError Test FAILED..\n");
strcpy(syslog.desc, "Rx DataError Test FAILED..");
break;
case 'a':
eprintf("\nRx AlignError Test FAILED..\n");
strcpy(syslog.desc, "Rx AlignError Test FAILED..");
break;
case 's':
eprintf("\nRx Sequence Error Test FAILED..\n");
strcpy(syslog.desc, "Rx Sequence Error Test FAILED..");
break;
case 'y':
eprintf("\nRx Symbol Error Test FAILED..\n");
strcpy(syslog.desc, "Rx Symbol Error Test FAILED..");
break;
case 'l':
eprintf("\nRx Long Error Test FAILED..\n");
strcpy(syslog.desc, "Rx Long Error Test FAILED..");
break;
case 'b':
eprintf("\nRx Jabber Error Test FAILED..\n");
strcpy(syslog.desc, "Rx Jabber Error Test FAILED..");
break;
}
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
Set_LED("FAIL");
slowport_code[0] = SP_XSC;
slowport_code[1] = SP_FAIL;
dump_slowport(slowport_code, 2, SP_NON_FATAL);
acL->Err = ERROR;
}
Clear_All_ME();
}
else
{
eprintf("\nThis test cannot be run directly on the Slave console\n");
return DONE; // To indicate that the slave does not do this.
}
return DONE;
}
int get_TX_collisions(void)
{
int port=0,res=0;
UINT32 txSingleCollisions[4];
UINT32 txMultipleCollisions[4];
UINT32 txTotalCollisions[4];
UINT32 txExcvCollisions[4];
short test_passed = 0,iteration,port_ctr;
if (ports == 4)
iteration = 4;
else
iteration = 1;
spConfig();
for(port=0; port<=3;port++)
{
txSingleCollisions[port] = reg_read((port*PORTSZ)+TX_SINGLE_COLLISION);
txMultipleCollisions[port] = reg_read((port*PORTSZ)+TX_MUL_COLLISION);
txTotalCollisions[port] = reg_read((port*PORTSZ)+TX_TOTAL_COLLISION);
txExcvCollisions[port] = reg_read((port*PORTSZ)+TX_EXCV_COLLISION);
/* Reading the total packets received */
eprintf("Total UC pkts : %x\n",reg_read((port*PORTSZ+TX_UC_PKTS)));
eprintf("Total MC pkts : %x\n",reg_read(((port*PORTSZ)+TX_MC_PKTS)));
eprintf("Total BC pkts : %x\n",reg_read(((port*PORTSZ)+TX_BC_PKTS)));
eprintf("Port: %d Total collisions : %x\n",port,txTotalCollisions[port]);
eprintf("Tx deferred : %x\n",reg_read(((port*PORTSZ)+TX_DEFERRED_ERR)));
eprintf("Port: %d Tx Single collisions : %x\n",port,txSingleCollisions[port]);
eprintf("Port: %d Tx multiple collisions : %x\n",port,txMultipleCollisions[port]);
eprintf("Late collisons : %x\n",reg_read(((port*PORTSZ)+LATE_COLLISION)));
eprintf("Excessive collisions : %x\n",reg_read(((port*PORTSZ)+TX_EXCV_COLLISION)));
eprintf("Excessive deferred : %x\n",reg_read(((port*PORTSZ)+TX_EXCV_DEFERRED_ERR)));
}
spRestore();
port = 0;
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if (ports == 4)
port = port_ctr;
else
port = ports;
if ((txSingleCollisions[port] > 0) || (txMultipleCollisions[port] > 0) || (txTotalCollisions[port] > 0) || (txExcvCollisions[port] > 0))
res |= 1<< port;
}
if ((res == 0xF) || (res & (1<<ports)))
test_passed = 1;
return test_passed;
}
int get_Rx_AlignError(void)
{
int port=0,res=0;
UINT32 rxAlignError[4];
short test_passed = 0,iteration,port_ctr;
if (ports == 4)
iteration = 4;
else
iteration = 1;
spConfig();
for(port=0; port<=3;port++)
{
/* Reading the total packets received */
rxAlignError[port] = reg_read(port*PORTSZ+RX_ALIGN_ERR);
eprintf("Port %d: Rx Data Error: %x\n",port, rxAlignError[port]);
}
spRestore();
port = 0;
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if (ports == 4)
port = port_ctr;
else
port = ports;
if (rxAlignError[port] > 0)
res|=1<<port;
}
if ((res == 0xF) || (res & (1<<ports)))
test_passed = 1;
return test_passed;
}
int get_Rx_SeqError(void)
{
int port=0,res=0;
UINT32 rxSeqError[4];
short test_passed = 0,iteration,port_ctr;
if (ports == 4)
iteration = 4;
else
iteration = 1;
spConfig();
for(port=0; port<=3;port++)
{
/* Reading the total packets received */
rxSeqError[port] = reg_read(port*PORTSZ+RX_ALIGN_ERR);
eprintf("Port %d: Rx Data Error: %x\n",port, rxSeqError[port]);
}
spRestore();
port = 0;
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if (ports == 4)
port = port_ctr;
else
port = ports;
if (rxSeqError[port] > 0)
res|=1<<port;
}
if ((res == 0xF) || (res & (1<<ports)))
test_passed = 1;
return test_passed;
}
int get_Rx_LongError(void)
{
int port=0,res=0;
UINT32 rxLongError[4];
short test_passed = 0,iteration,port_ctr;
if (ports == 4)
iteration = 4;
else
iteration = 1;
spConfig();
for(port=0; port<=3;port++)
{
/* Reading the total packets received */
rxLongError[port] = reg_read(port*PORTSZ+RX_LONG_ERR);
eprintf("Port %d: Rx Data Error: %x\n",port, rxLongError[port]);
}
spRestore();
port =0;
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if (ports == 4)
port = port_ctr;
else
port = ports;
if (rxLongError[port] > 0)
res|=1<<port;
}
if ((res == 0xF) || (res & (1<<ports)))
test_passed = 1;
return test_passed;
}
int get_Rx_JabberError(void)
{
int port=0,res=0;
UINT32 rxJabError[4];
short test_passed = 0,iteration,port_ctr;
if (ports == 4)
iteration = 4;
else
iteration = 1;
spConfig();
for(port=0; port<=3;port++)
{
/* Reading the total packets received */
rxJabError[port] = reg_read(port*PORTSZ+RX_JABBER_ERR);
eprintf("Port %d: Rx Data Error: %x\n",port, rxJabError[port]);
}
spRestore();
port = 0;
for(port_ctr=0; port_ctr<iteration;port_ctr++)
{
if (ports == 4)
port = port_ctr;
else
port = ports;
if (rxJabError[port] > 0)
res|=1<<port;
}
if ((res == 0xF) || (res & (1<<ports)))
test_passed = 1;
return test_passed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -