📄 bdwtests.c
字号:
/*
*---------------------------------------------------------------------------
*
* I N T E L P R O P R I E T A R Y
*
* COPYRIGHT (c) 2001 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
*
*---------------------------------------------------------------------------
*/
#include "common_types.h"
#include "common_def.h"
#include "common.h"
#include "hal.h"
#include "ixf_api_d.h"
#include "ixf_api.h"
#include "diagstruct.h"
#include "bdw.h"
#include "ixf_api_sonet_d.h"
#include "ixf6048d.h"
#include "ixf6048.h"
#include "btables.h"
#include "bdwtests.h"
#include "i2c.h"
#include "i2c_test.h"
#include "bdwcommon.h"
#include "hal_ixdp2400.h"
#include "led.h"
#include "syslog.h"
#include "memory.h"
#include "common_types.h"
#include "common_def.h"
#include "diag_utils.h"
#include "uart.h"
/***********************************************************************
**** INTERNAL ROUTINES ****
***********************************************************************/
/******************************************************************
* Function : TurnPRBSOn
*-----------------------------------------------------------------
* Description : This routine places the device in PRBS mode and
* enable PRBS interrupts.
*-----------------------------------------------------------------
* Inputs : pChipData : Valid pointer to the device.
* chanNum : Specifies the channel number.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : None.
*-----------------------------------------------------------------
* Access Globals : None.
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
void
TurnPRBSOn(bb_ChipData_t *pChipData, int chanNum)
{
bb_ChipSegment_t section;
ushort regVal;
/* Assign the channel number */
section.group.channel = chanNum;
section.block.flow = BOTH_FLOWS;
/* Start PRBS Test */
IxfApiSetOpMode(pChipData, §ion, TEST_MODE, NULL);
/* Clear PRBS Interrupts */
IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINT, 1, ®Val);
/* Enable PRBS Interrupts */
//IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINTEN, 1, ®Val);
regVal = (1 << chanNum);
IxfApiGenericWrite(pChipData, TWO_BYTES, PRBSINTEN, 1, ®Val);
}
/******************************************************************
* Function : TurnPRBSOff
*-----------------------------------------------------------------
* Description : This routine disables PRBS interrupts.
*-----------------------------------------------------------------
* Inputs : pChipData : Valid pointer to the device.
* chanNum : Specifies the channel number.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : None.
*-----------------------------------------------------------------
* Access Globals : None.
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
void
TurnPRBSOff(bb_ChipData_t *pChipData, int chanNum)
{
ushort regVal;
/* Disable PRBS Interrupts */
IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINTEN, 1, ®Val);
regVal &= ~(1 << chanNum);
IxfApiGenericWrite(pChipData, TWO_BYTES, PRBSINTEN, 1, ®Val);
}
/******************************************************************
* Function : DumpRegAccessResults
*-----------------------------------------------------------------
* Description : This routine displays the results of the register
* access tests.
*-----------------------------------------------------------------
* Inputs : status : The results of the register access test.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : None.
*-----------------------------------------------------------------
* Access Globals : None.
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
void
DumpRegAccessResults(BDW_Status_t status)
{
// prepare structure for dumping
syslog.source_comp = MASTER_BATTERY_DIAG;
switch(status)
{
case BDW_FAIL:
syslog.type = TYPE_ERROR;
Set_LED("FAIL");
// prepare structure for dumping
strcpy(syslog.desc, "Register Access Test Failed");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("REGISTER ACCESS TEST FAIL!!!\n");
break;
case BDW_SUCCESS:
syslog.type = TYPE_ERROR;
Set_LED("OKAY");
// prepare structure for dumping
strcpy(syslog.desc, "Register Access Test Passed");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("REGISTER ACCESS TEST PASS!!!\n");
break;
default:
Set_LED("????");
eprintf("UNKNOWN RESULTS\n");
break;
}
}
/******************************************************************
* Function : DumpPRBSResults
*-----------------------------------------------------------------
* Description : This routine displays the results of the PRBS test.
*-----------------------------------------------------------------
* Inputs : status : The results of the PRBS test.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : None.
*-----------------------------------------------------------------
* Access Globals : None.
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
void
DumpPRBSResults(BDW_Status_t status)
{
// prepare structure for dumping
syslog.type = TYPE_ERROR;
syslog.source_comp = MASTER_BATTERY_DIAG;
switch(status)
{
case BDW_PRBS_TEST_ALREADY_RUNNING:
Set_LED("RUNN");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Test already running");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("PRBS TEST ALREADY RUNNING\n");
break;
case BDW_INVALID_CHANNEL:
Set_LED("CHAN");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Invalid Channel");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("INVALID CHANNEL\n");
break;
case BDW_UNKNOWN_MEDIA_CARD:
Set_LED("MEDI");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Unknown Media");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("UNKNOWN MEDIA CARD\n");
break;
case BDW_PRBS_INVALID_MODE:
Set_LED("MODE");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Invalid Mode");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("INVALID MODE\n");
break;
case BDW_PRBS_TEST_NOT_STARTED:
Set_LED("STRT");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Test not started");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("PRBS TEST NOT STARTED\n");
eprintf("PRBS TEST FAIL!!!\n");
break;
case BDW_PRBS_TESTED_ENDED_IN_ERROR:
Set_LED("FAIL");
// prepare structure for dumping
strcpy(syslog.desc, "PRBS Test Failed: Tested ended in error");
// write to syslog
syslog_dump(&syslog, sizeof(SYSLOG_DATA));
eprintf("PRBS TEST FAIL!!!\n");
break;
case BDW_SUCCESS:
Set_LED("OKAY");
eprintf("TEST PASS\n");
break;
default:
Set_LED("????");
eprintf("UNKNOWN RESULTS\n");
break;
}
}
/******************************************************************
* Function : StartPRBSLoopbackTest
*-----------------------------------------------------------------
* Description : This routine starts the PRBS loopback test.
*-----------------------------------------------------------------
* Inputs : pChipData : Valid chip handle pointer.
* chanNum : Specifies the channel number.
* mode : Specifies INTERNAL or EXTERNAL loopback
* Outputs : None.
*-----------------------------------------------------------------
* Returns : Status
*-----------------------------------------------------------------
* Access Globals : eduCommon structure
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
BDW_Status_t
StartPRBSLoopbackTest(bb_ChipData_t *pChipData, int chanNum,
LoopBackMode_t mode)
{
register eduCommon* acL = (eduCommon *) ACADDRESS;
const InitRegTable_t *pLoopIntInitTable;
const InitRegTable_t *pLoopExtInitTable;
ushort regVal = 0x0;
uint cnt = 0;
/* Check to see if we are Battey Drew */
if (!(strcmp(acL->i2cData.model_id, BATTETY_DREW_CARD)))
{
eprintf("SINGLE OC-48 Line card detected!!\n");
if (chanNum > 0)
{
return BDW_INVALID_CHANNEL;
}
/* Assign the Internal loopback initialization table */
pLoopIntInitTable = BDIntLoopbackArray;
/* Assign the External loopback initialization table */
pLoopExtInitTable = BDExtLoopbackArray;
}
/* Check to see if we are Battey Wallace */
else if (!(strcmp(acL->i2cData.model_id, BATTETY_WALLACE_CARD)))
{
eprintf("QUAD OC-12 Line card detected!!\n");
/* Assign the Internal loopback initialization table */
pLoopIntInitTable = BWIntLoopbackArray;
/* Assign the External loopback initialization table */
pLoopExtInitTable = BWExtLoopbackArray;
}
/* If not Drew or Wallace, then we are in trouble */
else
{
return BDW_UNKNOWN_MEDIA_CARD;
}
/* Save Channel number in global common structure. */
acL->prbsChanNum = chanNum;
/* Configure IXF6048 for PRBS internal or external loop back */
if (mode == INTERNAL)
{
/* Initialize Drew chip for internal loopback */
IxfApiInitChip(pChipData, (InitRegTable_t *) pLoopIntInitTable);
}
else if (mode == EXTERNAL)
{
/* Initialize Drew chip for internal loopback */
IxfApiInitChip(pChipData, (InitRegTable_t *) pLoopExtInitTable);
}
else
{
return BDW_PRBS_INVALID_MODE;
}
/* Sleep for 1 second */
OS_TASK_SLEEP(1);
do {
/* Clear the PRBS Interrupts if present before test begins */
IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINT, 1, ®Val);
cnt++;
if (cnt > 100)
break;
} while (regVal & (1 << chanNum));
if (cnt > 100)
{
eprintf("Could not clear the PRBS alarms before starting test.\n");
return BDW_FAIL;
}
eprintf("The PRBS interrupts are cleared.\n");
/* Start Prbs Testing */
TurnPRBSOn(pChipData, chanNum);
eprintf("The Test has started.\n");
return BDW_SUCCESS;
}
/******************************************************************
* Function : StopPRBSLoopbackTest
*-----------------------------------------------------------------
* Description : This routine stops the PRBS loopback test.
*-----------------------------------------------------------------
* Inputs : pChipData : Valid chip handle pointer.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : Status
*-----------------------------------------------------------------
* Access Globals : eduCommon structure
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
BDW_Status_t
StopPRBSLoopbackTest(bb_ChipData_t *pChipData)
{
register eduCommon* acL = (eduCommon *) ACADDRESS;
unsigned short chanNum;
/* Get channel number for the common structure */
chanNum = acL->prbsChanNum;
/* Stop PRBS Test */
TurnPRBSOff(pChipData, chanNum);
return BDW_SUCCESS;
}
/******************************************************************
* Function : CheckDefaultValues
*-----------------------------------------------------------------
* Description : This routine compares read data from the device
* to the expected reset defaults from the data sheet.
*-----------------------------------------------------------------
* Inputs : pChipData : Valid chip handle pointer.
* Outputs : None.
*-----------------------------------------------------------------
* Returns : Status
*-----------------------------------------------------------------
* Access Globals : eduCommon structure
*-----------------------------------------------------------------
* Comments : None.
******************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -