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

📄 mottsecdrv.c

📁 freescale mottsec 千兆单元驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:
** RETURNS: OK or ERROR*/LOCAL STATUS zxr10_motTsecInitParse    (    TSEC_DRV_CTRL *  pDrvCtrl,   /* pointer to TSEC_DRV_CTRL structure */    char     *  initString  /* parameter string */    ){    char *  tok;        /* an initString token */    char *  holder = NULL;  /* points to initString fragment beyond tok */    /* TSEC_DRV_CTRL 's external param */    /* global port */    tok = strtok_r (initString, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->globalPort = (UINT32) strtoul (tok, NULL, 16);    /* Device Address */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->tsecRegsPtr = (TSEC_REG_T *) strtoul (tok, NULL, 16);    pDrvCtrl->tsecMiiPtr  = pDrvCtrl->tsecRegsPtr;    /* RX_INT_VEC */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->vecRxNum = (int) strtoul (tok, NULL, 16);    /* TX_INT_VEC */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;        pDrvCtrl->vecTxNum = (int) strtoul (tok, NULL, 16);    /* ERR_INT_VEC */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->vecErrNum = (int) strtoul (tok, NULL, 16);    /* IntConnect */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->intConnect = (FUNCPTR) strtoul (tok, NULL, 16);    /* IntDisConnect */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->intDisConnect = (FUNCPTR) strtoul (tok, NULL, 16);    /* IntEnable */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->intEnable = (FUNCPTR) strtoul (tok, NULL, 16);    /* IntDisable */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->intDisable = (FUNCPTR) strtoul (tok, NULL, 16);    /* Max receive Frames */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->maxRxFrames = (UINT32) strtoul (tok, NULL, 16);    /* phy's external param */    /* phy address */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->phyAddr = (UINT32) strtoul (tok, NULL, 16);    /* phy int number */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->vecNum = (int) strtoul (tok, NULL, 16);    /* phy IntConnect */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->intConnect = (FUNCPTR) strtoul (tok, NULL, 16);    /* phy IntDisConnect */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->intDisConnect = (FUNCPTR) strtoul (tok, NULL, 16);    /* phy IntEnable */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->intEnable = (FUNCPTR) strtoul (tok, NULL, 16);    /* phy IntDisable */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->intDisable = (FUNCPTR) strtoul (tok, NULL, 16);    /* phy Read */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->read = (FUNCPTR) strtoul (tok, NULL, 16);    /* phy Write */    tok = strtok_r (NULL, ":", &holder);    if (tok == NULL)        return ERROR;    pDrvCtrl->phyInfo->write = (FUNCPTR) strtoul (tok, NULL, 16);    return (OK);}/********************************************************************************* zxr10_motTsecInitFunc - parse functions from initString** RETURNS: OK or ERROR*/LOCAL STATUS zxr10_motTsecInitFunc    (    TSEC_DRV_CTRL *  pDrvCtrl    ){    pDrvCtrl->enetEnable          = NULL;    pDrvCtrl->enetDisable         = NULL;    pDrvCtrl->initMacAddrGet      = Drv_FunctionMacAddrGet;    pDrvCtrl->extWriteL2AllocFunc = NULL;    pDrvCtrl->netJobAdd    = (FUNCPTR) fwdJobAdd;    pDrvCtrl->muxTxRestart = (FUNCPTR) muxTxRestart;    pDrvCtrl->muxError     = (FUNCPTR) muxError;    /* BSP call backs to driver */    /*    pDrvCtrl->initFuncs->miiPhyRead  = (FUNCPTR) zxr10_motTsecMiiPhyRead;    pDrvCtrl->initFuncs->miiPhyWrite = (FUNCPTR) zxr10_motTsecMiiPhyWrite;    */    return (OK);}LOCAL STATUS zxr10_motTsecInitVirCtrl(TSEC_DRV_CTRL *  pDrvCtrl){    pDrvCtrl->drvCtrl.start    = zxr10_motTsecStart;    pDrvCtrl->drvCtrl.stop     = zxr10_motTsecStop;        pDrvCtrl->drvCtrl.send     = zxr10_motTsecSend;    pDrvCtrl->drvCtrl.capacity = zxr10_motTsecCapacity;    pDrvCtrl->drvCtrl.ioctl    = zxr10_motTsecIoctl;    return (OK);}/********************************************************************************* zxr10_motTsecGracefulStop - Gracefully stops the device** This routine gracefully stops the device so MAC registers can be changed.**/LOCAL void zxr10_motTsecGracefulStop    (    TSEC_DRV_CTRL * pDrvCtrl    ){    TSEC_REG_T *tsecReg = pDrvCtrl->tsecRegsPtr;    int count = 0;    int intLevel;    volatile int ieventVal,tstatVal,rstatVal;    intLevel = intLock();    tstatVal = ZXR10_MOT_TSEC_TSTAT_REG;    ZXR10_MOT_TSEC_TSTAT_REG = tstatVal;    rstatVal = ZXR10_MOT_TSEC_RSTAT_REG;    ZXR10_MOT_TSEC_RSTAT_REG = rstatVal;    ieventVal = ZXR10_MOT_TSEC_IEVENT_REG;    ZXR10_MOT_TSEC_IEVENT_REG = ieventVal;    ZXR10_MOT_TSEC_DMACTRL_REG |= (ZXR10_MOT_TSEC_DMACTRL_GTS);    CACHE_PIPE_FLUSH();    while (ZXR10_MOT_TSEC_IEVENT_REG & (ZXR10_MOT_TSEC_IEVENT_GTSC))	{	    if (count < 100000)	        count++;	    else	        break;	}    ZXR10_MOT_TSEC_MACCFG1_REG &= (~(ZXR10_MOT_TSEC_MACCFG1_TX_EN | ZXR10_MOT_TSEC_MACCFG1_RX_EN));    /* This delay is required by the hardware */    ZXR10_MOT_TSEC_MS_DELAY(16);    ZXR10_MOT_TSEC_DMACTRL_REG |= ( ZXR10_MOT_TSEC_DMACTRL_GRS);    count = 0;    while (ZXR10_MOT_TSEC_IEVENT_REG & (ZXR10_MOT_TSEC_IEVENT_GRSC))	{	    if (count < 100000)	        count++;	    else	        break;	}    /* This delay is required by the hardware */    ZXR10_MOT_TSEC_MS_DELAY(32);    ZXR10_MOT_TSEC_MACCFG1_REG |= ( ZXR10_MOT_TSEC_MACCFG1_SOFT_RESET |			      ZXR10_MOT_TSEC_MACCFG1_RESET_RX_MC |			      ZXR10_MOT_TSEC_MACCFG1_RESET_TX_MC |			      ZXR10_MOT_TSEC_MACCFG1_RESET_RX_FUN |			      ZXR10_MOT_TSEC_MACCFG1_RESET_TX_FUN );    ZXR10_MOT_TSEC_MS_DELAY(32);    ZXR10_MOT_TSEC_MACCFG1_REG &= ~( ZXR10_MOT_TSEC_MACCFG1_SOFT_RESET |			      ZXR10_MOT_TSEC_MACCFG1_RESET_RX_MC |			      ZXR10_MOT_TSEC_MACCFG1_RESET_TX_MC |			      ZXR10_MOT_TSEC_MACCFG1_RESET_RX_FUN |			      ZXR10_MOT_TSEC_MACCFG1_RESET_TX_FUN) ;    ZXR10_MOT_TSEC_MS_DELAY(16);    intUnlock(intLevel);}/********************************************************************************* zxr10_motTsecRestart - Restarts device after zxr10_motTsecGracefulStop**/LOCAL void zxr10_motTsecRestart    (    TSEC_DRV_CTRL * pDrvCtrl    ){    TSEC_REG_T *tsecReg = pDrvCtrl->tsecRegsPtr;    volatile int rstatVal,tstatVal,ieventVal;    int intLevel;    tstatVal = ZXR10_MOT_TSEC_TSTAT_REG;    ZXR10_MOT_TSEC_TSTAT_REG = tstatVal;    rstatVal = ZXR10_MOT_TSEC_RSTAT_REG;    ZXR10_MOT_TSEC_RSTAT_REG = rstatVal;    ieventVal = ZXR10_MOT_TSEC_IEVENT_REG;    ZXR10_MOT_TSEC_IEVENT_REG = ieventVal;    ieventVal = ZXR10_MOT_TSEC_IEVENT_REG;    ZXR10_MOT_TSEC_RBASE_REG  = (UINT32) pDrvCtrl->pRbdBase;    ZXR10_MOT_TSEC_TBASE_REG  = (UINT32) pDrvCtrl->pTbdBase;    pDrvCtrl->rbdIndex = 0;    pDrvCtrl->tbdIndex = 0;    pDrvCtrl->tbdCleanIndex = 0;    /* Initialize the transmit buffer descripters */    if (zxr10_motTsecTbdInit(pDrvCtrl) == ERROR)    {        ZXR10_MOT_TSEC_LOG (ZXR10_MOT_TSEC_DBG_START, "zxr10_motTsecRestart Tbd Init error\n",1,2,3,4,5,6);        /* return ERROR; */    }    /* Initialize the receive buffer descripters */    if (zxr10_motTsecRbdInit(pDrvCtrl) == ERROR)    {        ZXR10_MOT_TSEC_LOG (ZXR10_MOT_TSEC_DBG_START, "zxr10_motTsecRestart Rbd Init error\n",1,2,3,4,5,6);        /* return ERROR; */    }    intLevel = intLock();    /* Enable Transmit and Receive */    ZXR10_MOT_TSEC_MACCFG1_REG |= (ZXR10_MOT_TSEC_MACCFG1_RX_EN | ZXR10_MOT_TSEC_MACCFG1_TX_EN);    /* This delay is required by the hardware */    ZXR10_MOT_TSEC_MS_DELAY(16);    /* Ensure graceful stop rx and tx isn't set */    ZXR10_MOT_TSEC_DMACTRL_REG &= (~(ZXR10_MOT_TSEC_DMACTRL_GTS | ZXR10_MOT_TSEC_DMACTRL_GRS));    ZXR10_MOT_TSEC_MS_DELAY(16);    intUnlock(intLevel);}/********************************************************************************* zxr10_motTsecInitParm -* RETURNS: OK or ERROR*/LOCAL STATUS zxr10_motTsecInitParm    (    TSEC_DRV_CTRL * pDrvCtrl    ){    int      i;    UINT32   flags;    UINT32   maccfg1Reg;    UINT32   maccfg2Reg;    UINT32   ecntrlReg;    UINT32   rctrlReg;    UINT32   tctrlReg;    UINT32   dmactrlReg;    UINT32   edisReg;    UINT32   tstatReg;    UINT32   txicReg;    UINT32   rstatReg;    UINT32   mrblrReg;    UINT32   ptvReg;    UINT32   tbipaReg;    UINT32   fifoTxThrReg;    UINT32   fifoTxStarveReg;    UINT32   fifoTxStarveShutoffReg;    UINT32   minflrReg;    UINT32   hafdupReg;    UINT32   ipgifgReg;    UINT32   maxfrmReg;    UINT32   ifstatReg;    UINT32   attrReg;    UINT32   attreliReg;    UINT32   miicfgReg;    UINT32   miicomReg;    UINT32   macIndividualHashReg[8];    UINT32   macGroupHashReg[8];    TSEC_REG_T * tsecMiiReg = pDrvCtrl->tsecMiiPtr;    ZXR10_MOT_TSEC_FRAME_SET(pDrvCtr

⌨️ 快捷键说明

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