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

📄 bdwtests.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)  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, &section, TEST_MODE, NULL);

    /* Clear PRBS Interrupts */
    IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINT, 1, &regVal);

    /* Enable PRBS Interrupts */
    //IxfApiGenericRead(pChipData, TWO_BYTES, PRBSINTEN, 1, &regVal);
    regVal = (1 << chanNum);
    IxfApiGenericWrite(pChipData, TWO_BYTES, PRBSINTEN, 1, &regVal);
}

/******************************************************************
* 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, &regVal);
    regVal &= ~(1 << chanNum);
    IxfApiGenericWrite(pChipData, TWO_BYTES, PRBSINTEN, 1, &regVal);
}


/******************************************************************
* 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, &regVal);
        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 + -