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

📄 txc_envoy_fifo_real.c

📁 TranSwitch Envoy CE2 & Envoy CE4 设备驱动及编程指南
💻 C
📖 第 1 页 / 共 3 页
字号:

    /* First, fill the batch platform header. This function requires 1
       register to be written */
    /* This function requires 5 registers to be written */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;


    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the data and masks for Mac Address */
    regData[0].data = ingressFifoTransferModeDataPtr->ingressFifoTransferMode;
    regData[0].mask = 0x1;

    ififoModeRegPtr = (ENVOY_IFIFO_MODE_STRUCT *) (baseAddr + ENVOY_IFIFO_MODE_OFFSET);
    regData[0].addr = (TXC_REG_32 *) &(ififoModeRegPtr->iFifoModeReg);

    error = TXC_BatchReg32BitWrite (&batchData); 

    return error;
}


/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_GetIngressFifoTransferModeReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_IfifoTransferModeGet
                API function.

   INPUTS:  Same as TXC_ENVOY_IfifoTransferModeGet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

   CAVEATS:  None.

   REVISION HISTORY:

    Rev       Date          Author               Description
   -----    -------      ------------         -----------------
   0.5.0    6/03/04      F. Giannella         Initial release (beta)
 *--------------------------------------------------------------------------*/

TXC_U16BIT ENVOY_GetIngressFifoTransferModeReal (TXC_U16BIT handle, 
           ENVOY_IFIFO_TRANSFER_MODE_STRUCT *iFifoTransferModeDataPtr)
{
    TXC_U16BIT error;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[3];
    TXC_REG_32 *baseAddr;
    ENVOY_IFIFO_MODE_STRUCT *ififoModeRegPtr;

    /* First, fill the batch platform header. This function requires 
       register to be read */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;

    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the address and mask to read */
    ififoModeRegPtr = (ENVOY_IFIFO_MODE_STRUCT *) (baseAddr + ENVOY_IFIFO_MODE_OFFSET);
    regData[0].addr = (TXC_REG_32 *) &(ififoModeRegPtr->iFifoModeReg);
    regData[0].mask = 0x1;

    /* Read the registers and return the data */    
    error = TXC_BatchReg32BitRead (&batchData);
    if (regData[0].data)
    {
        iFifoTransferModeDataPtr->ingressFifoTransferMode = ENVOY_IFIFO_STREAMING_MODE;
    }
    else
    {
        iFifoTransferModeDataPtr->ingressFifoTransferMode = ENVOY_IFIFO_STORE_AND_FWRD_MODE;
    }

    return error;
}


/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_SetEgressFifoTransferModeReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_EfifoTransferModeSet
                API function.

   INPUTS:  Same as TXC_ENVOY_EfifoTransferModeSet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

   CAVEATS:  None.

   REVISION HISTORY:

    Rev       Date          Author               Description
   -----    -------      ------------         -----------------
   0.5.0    6/03/04      F. Giannella         Initial release (beta)
 *--------------------------------------------------------------------------*/

TXC_U16BIT ENVOY_SetEgressFifoTransferModeReal (TXC_U16BIT handle,
           ENVOY_EFIFO_TRANSFER_MODE_STRUCT *eFifoTransferModeDataPtr)
{
    TXC_U16BIT error = TXC_NO_ERR;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32 *baseAddr;
    ENVOY_EFIFO_MODE_STRUCT *efifoModeRegPtr;

    /* First, fill the batch platform header. This function requires 1
       register to be written */
    /* This function requires 5 registers to be written */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;


    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the data and masks for Mac Address */
    regData[0].data = eFifoTransferModeDataPtr->egressFifoTransferMode;
    regData[0].mask = 0x1;

    efifoModeRegPtr = (ENVOY_EFIFO_MODE_STRUCT *) (baseAddr + ENVOY_EFIFO_MODE_OFFSET);
    regData[0].addr = (TXC_REG_32 *) &(efifoModeRegPtr->eFifoModeReg);

    error = TXC_BatchReg32BitWrite (&batchData); 

    return error;
}


/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_GetEgressFifoTransferModeReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_EfifoTransferModeGet
                API function.

   INPUTS:  Same as TXC_ENVOY_EfifoTransferModeGet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

   CAVEATS:  None.

   REVISION HISTORY:

    Rev       Date          Author               Description
   -----    -------      ------------         -----------------
   0.5.0    6/03/04      F. Giannella         Initial release (beta)
 *--------------------------------------------------------------------------*/

TXC_U16BIT ENVOY_GetEgressFifoTransferModeReal (TXC_U16BIT handle,
           ENVOY_EFIFO_TRANSFER_MODE_STRUCT *eFifoTransferModeDataPtr)
{
    TXC_U16BIT error;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32 *baseAddr;
    ENVOY_EFIFO_MODE_STRUCT *efifoModeRegPtr;

    /* First, fill the batch platform header. This function requires 
       register to be read */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;

    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the address and mask to read */
    efifoModeRegPtr = (ENVOY_EFIFO_MODE_STRUCT *) (baseAddr + ENVOY_EFIFO_MODE_OFFSET);
    regData[0].addr = (TXC_REG_32 *) &(efifoModeRegPtr->eFifoModeReg);
    regData[0].mask = 0x1;

    /* Read the registers and return the data */    
    error = TXC_BatchReg32BitRead (&batchData);
    if (error == TXC_NO_ERR)
    {
        if (regData[0].data)
        {
            eFifoTransferModeDataPtr->egressFifoTransferMode = ENVOY_EFIFO_STREAMING_MODE;
        }
        else
        {
            eFifoTransferModeDataPtr->egressFifoTransferMode = ENVOY_EFIFO_STORE_AND_FWRD_MODE;
        }
    }

    return error;
}

/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_SetEfifoStreamingCfgReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_EfifoStreamingCfgSet
                API function.

   INPUTS:  Same as TXC_ENVOY_EfifoStreamingCfgSet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

   CAVEATS:  None.

   REVISION HISTORY:

    Rev       Date          Author               Description
   -----    -------      ------------         -----------------
   0.5.0    6/03/04      F. Giannella         Initial release (beta)
 *--------------------------------------------------------------------------*/

TXC_U16BIT ENVOY_SetEfifoStreamingCfgReal (TXC_U16BIT handle, TXC_U16BIT port,
                          ENVOY_EFIFO_STREAMING_CFG_STRUCT  *eFifoStreamDataPtr)
{
    TXC_U16BIT error = TXC_NO_ERR;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32 *baseAddr;
    TXC_U16BIT portIdx;
    TXC_U16BIT startPort;
    TXC_U16BIT endPort;
    TXC_U16BIT portInc;
    ENVOY_EFIFO_PORT_STRM_THRSHLD_STRUCT *efifoStreamingRegPtr;

    /* determine if one EFIFO port is being reset or all ports */
    GetFifoPortRange(handle, port, &startPort, &endPort, &portInc); 

    /* First, fill the batch platform header. This function requires 1
       register to be written */
    /* This function requires 1 registers to be written */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;

    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the data and masks for Mac Address */
    regData[0].data = eFifoStreamDataPtr->egressFifoStreamingThreshold;
    regData[0].mask = 0x7;
    efifoStreamingRegPtr = (ENVOY_EFIFO_PORT_STRM_THRSHLD_STRUCT *) (baseAddr + ENVOY_EFIFO_PORT_STRM_THRSHLD_OFFSET);

    for (portIdx = startPort; portIdx < endPort; )
    {

        regData[0].addr = (TXC_REG_32 *) &efifoStreamingRegPtr->eFifoPortStreamThrshldReg[portIdx];

        /* Read the registers and return the data */

        error = TXC_BatchReg32BitWrite (&batchData); 

        portIdx += portInc;
    }

    return error;
}

/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_GetEfifoStreamingCfgReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_EfifoStreamingCfgGet
                API function.

   INPUTS:  Same as TXC_ENVOY_EfifoStreamingCfgGet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

   CAVEATS:  None.

   REVISION HISTORY:

    Rev       Date          Author               Description
   -----    -------      ------------         -----------------
   0.5.0    6/03/04      F. Giannella         Initial release (beta)
 *--------------------------------------------------------------------------*/

TXC_U16BIT ENVOY_GetEfifoStreamingCfgReal (TXC_U16BIT handle, TXC_U16BIT port,
           ENVOY_EFIFO_STREAMING_CFG_STRUCT  *eFifoStreamDataPtr)
{
    TXC_U16BIT error;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32 *baseAddr;
    ENVOY_EFIFO_PORT_STRM_THRSHLD_STRUCT *efifoStreamingRegPtr;

    /* First, fill the batch platform header. This function requires 
       register to be read */
    memset (&regData[0], 0, (sizeof(TXC_REG_ACCESS_32BIT_STRUCT) ) );
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;

    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    /* Setup the address and mask to read */
    efifoStreamingRegPtr = (ENVOY_EFIFO_PORT_STRM_THRSHLD_STRUCT *) (baseAddr + ENVOY_EFIFO_PORT_STRM_THRSHLD_OFFSET);
    regData[0].addr = (TXC_REG_32 *) &efifoStreamingRegPtr->eFifoPortStreamThrshldReg[port];
    regData[0].mask = 0x7;

    /* Read the registers and return the data */    
    error = TXC_BatchReg32BitRead (&batchData);

    if (error == TXC_NO_ERR)
    {
        switch (regData[0].data & 0x7)
        {
            case 0:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_64;
                break;

            case 1:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_128;
                break;


            case 2:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_256;
                break;

            case 3:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_512;
                break;

            case 4:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_768;
                break;

            case 5:
                eFifoStreamDataPtr->egressFifoStreamingThreshold = ENVOY_EFIFO_STREAMING_1544;
                break;

            default:
                break;  /* it should never happen */
        }
    }

    return error;
}

/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************

   FUNCTION:  ENVOY_SetFifoPortCtrlReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_FifoPortCtrlSet
                API function.

   INPUTS:  Same as TXC_ENVOY_FifoPortCtrlSet

   RETURNS:  TXC_NO_ERR or an appropriate specific error code listed in
   appendix.

⌨️ 快捷键说明

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