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

📄 txc_envoy_pkt_ctrl_real.c

📁 TranSwitch Envoy CE2 & Envoy CE4 设备驱动及编程指南
💻 C
📖 第 1 页 / 共 2 页
字号:
        portIdx = portIdx + portInc;
    }
    return error;
}


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

   FUNCTION:  ENVOY_GetIngressPacketCtrlReal

   DESCRIPTION: This function actually processess the TXC_ENVOY_IngressPacketCtrlGet

   INPUTS:  Same as TXC_ENVOY_IngressPacketCtrlGet

   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_GetIngressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port, 
                      ENVOY_INGRESS_PKT_CTRL_STRUCT *ingressPktCtrlDataPtr)
{
    TXC_U16BIT error;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32              *baseAddr;
    ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;

    /* First, fill the batch platform header. This function requires 1
       register to be read */
    memset (&regData[0], 0, (1 * 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);
    macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) (baseAddr+macPktCtrlOffset[port] );

    /* Setup the addresses and masks to read */
    regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
    regData[0].mask = 0x3F400001;

    /* Read the registers and return the data */    
    error = TXC_BatchReg32BitRead (&batchData);
    if (error == TXC_NO_ERR)
    {
        /* Copy the MAC Address */

        ingressPktCtrlDataPtr->ingressDiscardErroredFramesEnable = (regData[0].data >> 27) & 0x1;
        ingressPktCtrlDataPtr->ingressDiscardTruncatedFramesEnable = (regData[0].data >> 24) & 0x1;
        ingressPktCtrlDataPtr->ingressDiscardLengthMismatchEnable = (regData[0].data >> 25) & 0x1;
        ingressPktCtrlDataPtr->ingressDiscardCrcMismatchEnable = (regData[0].data >> 26) & 0x1;
        ingressPktCtrlDataPtr->ingressDiscardAddressMismatchEnable = (regData[0].data >> 29) & 0x1;
        ingressPktCtrlDataPtr->ingressCrcRemoveEnable = (regData[0].data >> 22) & 0x1;
        ingressPktCtrlDataPtr->ingressPauseFrameDiscardEnable = (regData[0].data >> 28) & 0x1;
        ingressPktCtrlDataPtr->ingressPrependEnable = regData[0].data & 0x1;
    }
    return error;
}




/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
                                                                             
   FUNCTION:  ENVOY_SetEgressPacketCtrlReal                                           
                                                                             
   DESCRIPTION: This function actually processess the TXC_ENVOY_EgressPacketCtrlSet
                API function.
                                                                             
   INPUTS:  Same as TXC_ENVOY_EgressPacketCtrlSet                            
                                                                             
   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_SetEgressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port, 
                     ENVOY_EGRESS_PKT_CTRL_STRUCT *egressPktCtrlDataPtr)
{
    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_REG_32 *portAddr;
    TXC_U16BIT portIdx;
    TXC_U16BIT endPort;
    TXC_U16BIT startPort;
    TXC_U16BIT portInc;
    ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;
    
    /* First, fill the batch platform header. This function requires 4
       registers to be written */
    /* This function requires 5 registers to be written */
    batchData.regDataPtr = &regData[0];
    batchData.writeVerifyFlag = TXC_WRITE_VERIFY_FLAG;
    batchData.semId = ENVOY_DbGetSemId();
    batchData.regCount = 1;

    memset ( (char *)regData, 0, sizeof(regData) );

    /* determine if one MAC port is being configured or all ports */
    GetPktCtrlPortRange(handle, port, &startPort, &endPort, &portInc);
        
    /* determine the base address of the device */
    baseAddr = (TXC_REG_32 *) ENVOY_DbGetDeviceAddr (handle);

    regData[0].data = egressPktCtrlDataPtr->egressAddrSubstEnable << 21;
    regData[0].data |= egressPktCtrlDataPtr->egressPauseFrmDiscEnable << 2;
    regData[0].data |= egressPktCtrlDataPtr->egressStripEnable << 1;

    regData[0].mask = 0x200006;

    /* loop thru all ports setting up the MAC interface parameters */
    for (portIdx = startPort; portIdx < endPort; )
    {
        portAddr = baseAddr + macPktCtrlOffset[portIdx];
        macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) portAddr;

        regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
        
        error = TXC_BatchReg32BitWrite (&batchData); 
        if (error != TXC_NO_ERR)
            return(error);

        portIdx = portIdx + portInc;
    }
    return error;
}


/************************************************************************************/
/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/************************************************************************************
                                                                             
   FUNCTION:  ENVOY_GetEgressPacketCtrlReal                                           
                                                                             
   DESCRIPTION: This function actually processess the TXC_ENVOY_EgressPacketCtrlGet
                API function.
                                                                             
   INPUTS:  Same as TXC_ENVOY_EgressPacketCtrlGet                            
                                                                             
   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_GetEgressPacketCtrlReal (TXC_U16BIT handle, TXC_U16BIT port, 
                     ENVOY_EGRESS_PKT_CTRL_STRUCT *egressPktCtrlDataPtr)
{
    TXC_U16BIT error;
    TXC_BATCH_REG_ACCESS_32BIT_STRUCT batchData;
    TXC_REG_ACCESS_32BIT_STRUCT regData[1];
    TXC_REG_32              *baseAddr;
    ENVOY_MAC_PKT_CTRL_STRUCT *macPktCtrlRegPtr;

    /* First, fill the batch platform header. This function requires 1
       register to be read */
    memset (&regData[0], 0, (1 * 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);
    macPktCtrlRegPtr = (ENVOY_MAC_PKT_CTRL_STRUCT *) (baseAddr+macPktCtrlOffset[port] );

    /* Setup the addresses and masks to read */
    regData[0].addr = (TXC_REG_32 *) &(macPktCtrlRegPtr->frameCtrlReg);
    regData[0].mask = 0x200006;

    /* Read the registers and return the data */
    error = TXC_BatchReg32BitRead (&batchData);
    if (error == TXC_NO_ERR)
    {
        egressPktCtrlDataPtr->egressAddrSubstEnable = (regData[0].data >> 21) & 0x1;
        egressPktCtrlDataPtr->egressPauseFrmDiscEnable = (regData[0].data >> 2) & 0x1;
        egressPktCtrlDataPtr->egressStripEnable = (regData[0].data >> 1) & 0x1;
    }
    return error;
}



#endif /* ENVOY_VIRTUAL_DEVICE_MODE */


/****************************************************************************
 **                              End of Module                             **
 ****************************************************************************/

⌨️ 快捷键说明

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