📄 mottsecdrv.c
字号:
** 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 + -