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

📄 dpx_api.c

📁 交换机中常用芯片链路复用7350的驱动源代码(vxworks中实现)
💻 C
📖 第 1 页 / 共 5 页
字号:
    	sysDuplexRawRead(pBaseAddr + DPX_REG_RXD1_HSS_CFG, u1TestValue );
        if((u1TestValue&0xDF) != (DPX_REGISTER_TEST_VALUE&0xDF))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_RXD1_HSS_CFG, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }


    	sysDuplexRawRead(pBaseAddr + DPX_REG_RXD2_HSS_CFG, u1TestValue);
        if((u1TestValue&0xDF) != (DPX_REGISTER_TEST_VALUE&0xDF))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_RXD2_HSS_CFG, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }


    	sysDuplexRawRead(pBaseAddr + DPX_REG_RXD1_HSS_INT_EN, u1TestValue);
        if((u1TestValue&0x7F) != (DPX_REGISTER_TEST_VALUE&0x7F))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_RXD1_HSS_INT_EN, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }
 

     	sysDuplexRawRead(pBaseAddr + DPX_REG_RXD2_HSS_INT_EN, u1TestValue);
        if((u1TestValue&0x7F) != (DPX_REGISTER_TEST_VALUE&0x7F))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_RXD2_HSS_INT_EN, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }


        sysDuplexRawRead(pBaseAddr + DPX_REG_TX_LC_FIFO_CTL, u1TestValue);
        if((u1TestValue&0x03) != (DPX_REGISTER_TEST_VALUE&0x03))
        {
#if DPX_DEBUG_MSG_ON
             printf("dpxRegisterTest: DPX_REG_TX_LC_FIFO_CTL, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }

    	sysDuplexRawRead(pBaseAddr + DPX_REG_TX_LC_FIFO_DEPTH, u1TestValue);
        if((u1TestValue&0x3F) != (DPX_REGISTER_TEST_VALUE&0x3F))
        {
#if DPX_DEBUG_MSG_ON
             printf("dpxRegisterTest: DPX_REG_TX_LC_FIFO_DEPTH, 0x%x\n", u1TestValue);
#endif 
             return DPX_ERR_FAILURE;
        }


    	sysDuplexRawRead(pBaseAddr + DPX_REG_TX_LC_FIFO_READY, u1TestValue);
        if((u1TestValue&0x3F) != (DPX_REGISTER_TEST_VALUE&0x3F))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_TX_LC_FIFO_READY, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }

    	sysDuplexRawRead(pBaseAddr + DPX_REG_TX_HSS_CFG, u1TestValue);
        if((u1TestValue&0xDF) != (DPX_REGISTER_TEST_VALUE&0xDF))
        {
#if DPX_DEBUG_MSG_ON        
             printf("dpxRegisterTest: DPX_REG_TX_HSS_CFG, 0x%x\n", u1TestValue);
#endif
             return DPX_ERR_FAILURE;
        }


    	/* set the Device state to DPX_PRESENT by duplexReset */
        duplexReset(duplex);
        psDpxDdb->eDevState = DPX_PRESENT;

    }
    return (ErrorCode);
}


 /*******************************************************************************
**
**  duplexLoopback
**  ___________________________________________________________________________ 
**
**  DESCRIPTION:   Enable/disable a diagnostic or line loopback of
**                 the specified high-speed serial link.
**
**  VALID STATES:  DPX_ACTIVE or DPX_INIT or DPX_PRESENT
**
**  SIDE EFFECTS:  None
**
**  INPUTS:	       duplex - device handler
**                 u1HssLnkId - serial link identifier: DPX_RXD1 or DPX_RXD2
**                 u1LpbType - type of loop back; can be one of - 
**                             DPX_DIAG_LPBK 
**                             DPX_LINE_LPBK 
**                 u1Enable - loopback operation requested; can be one of - 
**                            DPX_LPBK_SET  
**                            DPX_LPBK_RESET
**
**  OUTPUTS:       None
**
**  RETURN CODES:
**                 DPX_SUCCESS  
**                 DPX_ERR_INVALID_DEVICE  (invalid device handle) 
**                 DPX_ERR_INVALID_LPBK_TYPE
**                 DPX_ERR_INVALID_LNK_ID
**                 DPX_ERR_INVALID_FLAG (invalid loopback flag)
**
*******************************************************************************/
INT4 duplexLoopback(DUPLEX duplex, UINT1 u1HssLnkId, UINT1 u1LpbkType,
                    UINT1 u1Enable)
{
    UINT1 u1DdbIdx; 
    INT4 ErrorCode;
    sDPX_DDB *psDpxDdb;
    UINT1 u1Mask = 0;
    
    /* validate the passing parameters */
    if(u1HssLnkId == DPX_RXD1)
    { 
        if(u1LpbkType == DPX_DIAG_LPBK)
        {
            u1Mask = DPX_MASK_SER_LNK_MNT_DLB1;
        }
        else if (u1LpbkType == DPX_LINE_LPBK)
        {
            u1Mask = DPX_MASK_SER_LNK_MNT_MLB1;
        }
        else
             return(DPX_ERR_INVALID_LPBK_TYPE);
       
    }
    else if (u1HssLnkId == DPX_RXD2)
    {
        if(u1LpbkType == DPX_DIAG_LPBK)
        {
            u1Mask = DPX_MASK_SER_LNK_MNT_DLB2;
        }
        else if (u1LpbkType == DPX_LINE_LPBK)
        {
            u1Mask = DPX_MASK_SER_LNK_MNT_MLB2;
        }
        else
             return(DPX_ERR_INVALID_LPBK_TYPE);
    }
    else
        return(DPX_ERR_INVALID_LNK_ID);
        
    psDpxDdb = (sDPX_DDB *)duplex;
    
    /* validating the device handler */
    ErrorCode = duplexFindDev(psDpxDdb, (UINT1*)&u1DdbIdx);

    if(ErrorCode == DPX_SUCCESS)
    {
        if(u1Enable == DPX_LPBK_RESET) 
        {
            duplexClearRegBits(psDpxDdb->u4BaseAddr, DPX_REG_SER_LNK_MNT, 
                                                                       u1Mask);
            
        }
        else if(u1Enable == DPX_LPBK_SET)
        {
           duplexSetRegBits(psDpxDdb->u4BaseAddr, DPX_REG_SER_LNK_MNT, u1Mask); 
        }
        else
           return(DPX_ERR_INVALID_FLAG);
    }
    return(ErrorCode);    
}




/*******************************************************************************
**
**  duplexRemoteReset
**  ___________________________________________________________________________ 
**
**  DESCRIPTION:  used to reset other devices by driving the RSTOB output pin of 
**                DUPLEX device low and then back to high impedance state.
**
**  VALID STATES: All states except DPX_EMPTY
**
**  SIDE EFFECTS: None
**
**  INPUTS:       duplex - pointer to DDB, or device handler
**
**  OUTPUTS:      None
**
**  RETURN CODES:
**                 DPX_SUCCESS  
**                 DPX_ERR_INVALID_DEVICE  (invalid device handle) 
**
*******************************************************************************/
INT4 duplexRemoteReset(DUPLEX duplex)
{
    UINT1 u1DdbIdx; 
    INT4 ErrorCode;
    sDPX_DDB *psDpxDdb;
    UINT u1Value = 0;
    
    psDpxDdb = (sDPX_DDB *)duplex;
    
    /* validating the device handler */
    ErrorCode = duplexFindDev(psDpxDdb, (UINT1*)&u1DdbIdx);

    if(ErrorCode == DPX_SUCCESS)
    {
    
        /* toggle the RESETO bit of Master Config register */
        /* peek */
	    sysDuplexRawRead((INT1 *)(psDpxDdb->u4BaseAddr+DPX_REG_MASTER_CFG), 
                                                                      u1Value);

	    /* set  the RESETO bit */
        u1Value |= (DPX_MASK_MASTER_CFG_RESETO);
  	    sysDuplexRawWrite((INT1 *)(psDpxDdb->u4BaseAddr+DPX_REG_MASTER_CFG),
                                                                       u1Value);

        /* clear the RESETO bit */
        u1Value &= (~DPX_MASK_MASTER_CFG_RESETO);  
	    sysDuplexRawWrite((INT1 *)(psDpxDdb->u4BaseAddr+DPX_REG_MASTER_CFG),
                                                                       u1Value);
            
    }
    
    return(ErrorCode);
}




/*******************************************************************************
**
**  duplexHssActiveLnkGetCfg
**  ___________________________________________________________________________ 
**
**  DESCRIPTION:  used to obtain information about the active link selection
**                method configured in the Master Configuration register.
**
**  VALID STATES: DPX_INIT, DPX_ACTIVE
**
**  SIDE EFFECTS: None
**
**  INPUTS:       duplex - pointer to DDB, or device handler
**
**  OUTPUTS:      peLnkSel - specifies the HSS link selection; can be one of
**                              DPX_RX_HSS_LNK_SELECT_AUTO
**                              DPX_RX_HSS_LNK_SELECT_RXD1
**                              DPX_RX_HSS_LNK_SELECT_RXD2
**
**  RETURN CODES:
**                 DPX_SUCCESS  
**                 DPX_ERR_INVALID_DEVICE  (invalid device handle) 
**                 DPX_ERR_INVALID_STATE (invalid state)
**
*******************************************************************************/
INT4 duplexHssActiveLnkGetCfg(DUPLEX duplex, eHSS_LNK_SEL *peLnkSel)
{
    UINT1 u1DdbIdx; 
    INT4 ErrorCode;
    sDPX_DDB *psDpxDdb;
    UINT u1Value = 0;
    eHSS_LNK_SEL eLnkSel;
    
    psDpxDdb = (sDPX_DDB *)duplex;
    
    /* validating the device handler */
    ErrorCode = duplexFindDev(psDpxDdb, (UINT1*)&u1DdbIdx);

    if(ErrorCode == DPX_SUCCESS)
    {
        if((psDpxDdb->eDevState == DPX_INIT) ||
                                          ( psDpxDdb->eDevState == DPX_ACTIVE))
        {
	       sysDuplexRawRead((INT1 *)(psDpxDdb->u4BaseAddr+DPX_REG_MASTER_CFG), 
                                                                      u1Value);
                   
           if(u1Value &  DPX_MASK_MASTER_CFG_RXAUTOSEL)
              eLnkSel =  DPX_RX_HSS_LNK_SELECT_AUTO;
           else
           {
               if(u1Value &  DPX_MASK_MASTER_CFG_ACTIVE)
                   eLnkSel = DPX_RX_HSS_LNK_SELECT_RXD2;
               else
                   eLnkSel = DPX_RX_HSS_LNK_SELECT_RXD1;
           }
           
           *peLnkSel = eLnkSel;
        }

        else
            return(DPX_ERR_INVALID_STATE);
            
    }
    
    return(ErrorCode);
}




/*******************************************************************************
**
**  duplexHssActiveLnkSetCfg
**  ___________________________________________________________________________ 
**
**  DESCRIPTION:  used to select the active link selection of the DUPLEX device.
**                The selection can be automatically by the device or specified
**                explicitly by the microprocessor.
**
**  VALID STATES: DPX_INIT, DPX_ACTIVE
**
**  SIDE EFFECTS: None
**
**  INPUTS:       duplex - pointer to DDB, or device handler
**
**  OUTPUTS:      eLnkSel - specifies the HSS link selection; can be one of
**                              DPX_RX_HSS_LNK_SELECT_AUTO
**                              DPX_RX_HSS_LNK_SELECT_RXD1
**                              DPX_RX_HSS_LNK_SELECT_RXD2
**
**  RETURN CODES:
**                 DPX_SUCCESS  
**                 DPX_ERR_INVALID_DEVICE  (invalid device handle) 
**                 DPX_ERR_INVALID_STATE (invalid state)
**
*******************************************************************************/
INT4 duplexHssActiveLnkSetCfg(DUPLEX duplex, eHSS_LNK_SEL eLnkSel)
{
    UINT1 u1DdbIdx; 
    INT4 ErrorCode;
    sDPX_DDB *psDpxDdb;
    UINT u1Value = 0;
    
    psDpxDdb = (sDPX_DDB *)duplex;
    
    /* validating the device handler */
    ErrorCode = duplexFindDev(psDpxDdb, (UINT1*)&u1DdbIdx);

    if(ErrorCode == DPX_SUCCESS)
    {
        if((psDpxDdb->eDevState == DPX_INIT) ||
                                          ( psDpxDdb->eDevState == DPX_ACTIVE))
        {
           /* peek */
           sysDuplexRawRead((INT1 *)(psDpxDdb->u4BaseAddr+DPX_REG_MASTER_CFG), 
                                                                      u1Value);
       
           i

⌨️ 快捷键说明

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