diff options
author | Mandy Lavi <mandy.lavi@freescale.com> | 2013-04-24 07:56:04 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-29 20:22:02 (GMT) |
commit | 5045184a0cc3283bcd30d3bbebff6188d30e9fce (patch) | |
tree | f47057a56b74a822fe8329767802f4ff59711e3f /drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c | |
parent | 56206bd9f58df8e2a1640c523d6f7fa392e580d1 (diff) | |
download | linux-fsl-qoriq-5045184a0cc3283bcd30d3bbebff6188d30e9fce.tar.xz |
fmd21 integration
Signed-off-by: Mandy Lavi <mandy.lavi@freescale.com>
Prev fmd integration was fmd19
Diffs from fmd19 to fmd21:
Added kgHashShift to t_FmPcdHashTableParams
Added nonConsistentSp to t_FmPcdManipReassemIpStats
sp - 2 layers separation - for future flib integration
rtc - 2 layers separation - for future flib integration
PFC enhancement (B4 Rev2 FMAN)
API addition (for B4 rev 2): FM_PORT_SetPfcPrioritiesMappingToQmanWQ
File fsl_fman.h renamed to lnxwrp_fsl_fman.h
The name fsl_fman.h has been applied to other fman internal header file
In dpaa_eth:
Due to renaming of fsl_fman.h to lnxwrp_fsl_fman.h
The relevant include lines in some of the files had to change accordingly
Change-Id: I8f25c758963a44a75ca8676aad45f7f96767b0b5
Reviewed-on: http://git.am.freescale.net:8181/2069
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c')
-rw-r--r-- | drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c | 225 |
1 files changed, 125 insertions, 100 deletions
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c index e6c8d2d..60f71d7 100644 --- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c +++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/Pcd/fm_manip.c @@ -397,7 +397,7 @@ static t_Error BuildHmct(t_FmPcdManip *p_Manip, t_FmPcdManipParams *p_FmPcdManip tmpReg = 0; ASSERT_COND(p_TmpData); - for (i=0; i<FM_PCD_MANIP_DSCP_VALUES; i++) + for (i=0; i<HMCD_DSCP_VALUES; i++) { /* first we build from each 8 values a 32bit register */ tmpReg |= (p_FmPcdManipParams->u.hdr.fieldUpdateParams.u.vlan.u.dscpToVpri.dscpToVpriTable[i]) << (32-4*(j+1)); @@ -834,9 +834,11 @@ static t_Error CreateManipActionShadow(t_FmPcdManip *p_Manip, t_FmPcdManipParams static t_Error CreateManipActionBackToOrig(t_FmPcdManip *p_Manip, t_FmPcdManipParams *p_FmPcdManipParams) { - uint8_t *p_WholeHmct, *p_TmpHmctPtr, *p_TmpDataPtr; + uint8_t *p_WholeHmct = NULL, *p_TmpHmctPtr, *p_TmpDataPtr; t_FmPcdManip *p_CurManip = p_Manip; + UNUSED(p_WholeHmct); + /* Build the new table in the shadow */ if (!MANIP_IS_UNIFIED(p_Manip)) BuildHmct(p_Manip, p_FmPcdManipParams, p_Manip->p_Hmct, p_Manip->p_Data, FALSE); @@ -2187,92 +2189,7 @@ static t_Error UpdateIndxStats(t_Handle h_FmPcd, return E_OK; } -#endif /* FM_CAPWAP_SUPPORT */ -static t_Error FmPcdManipInitUpdate(t_Handle h_FmPcd, - t_Handle h_PcdParams, - t_Handle h_FmPort, - t_Handle h_Manip, - t_Handle h_Ad, - bool validate, - int level, - t_Handle h_FmTree) -{ - t_FmPcdManip *p_Manip = (t_FmPcdManip *)h_Manip; - t_Error err = E_OK; - - SANITY_CHECK_RETURN_ERROR(h_Manip,E_INVALID_HANDLE); - - UNUSED(level); - UNUSED(h_FmPcd); - UNUSED(h_FmTree); - - switch (p_Manip->opcode) - { - case (HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX): - err = UpdateInitMvIntFrameHeaderFromFrameToBufferPrefix(h_FmPort, p_Manip, h_Ad, validate); - break; -#ifdef FM_CAPWAP_SUPPORT - case (HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER): - if (!p_Manip->h_Frag) - break; - case (HMAN_OC_CAPWAP_FRAGMENTATION): - err = UpdateInitCapwapFragmentation(h_FmPort, p_Manip, h_Ad, validate, h_FmTree); - break; - case (HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST): - if (p_Manip->h_Frag) - err = UpdateInitCapwapReasm(h_FmPcd, h_FmPort, p_Manip, h_Ad, validate); - break; - case (HMAN_OC_CAPWAP_INDEXED_STATS): - err = UpdateIndxStats(h_FmPcd, h_FmPort, p_Manip); - break; -#endif /* FM_CAPWAP_SUPPORT */ - case (HMAN_OC_IP_REASSEMBLY): - err = UpdateInitIpReasm(h_FmPcd, h_PcdParams, h_FmPort, p_Manip, h_Ad, validate); - break; - default: - return E_OK; - } - - return err; -} - -static t_Error FmPcdManipModifyUpdate(t_Handle h_Manip, t_Handle h_Ad, bool validate, int level, t_Handle h_FmTree) -{ - - t_FmPcdManip *p_Manip = (t_FmPcdManip *)h_Manip; - t_Error err = E_OK; - - UNUSED(level); - - switch (p_Manip->opcode) - { - case (HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX): - RETURN_ERROR(MAJOR, E_INVALID_STATE, ("modify node with this type of manipulation is not suppported")); - case (HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST): - - if (p_Manip->h_Frag) - { - if (!(p_Manip->shadowUpdateParams & NUM_OF_TASKS) && - !(p_Manip->shadowUpdateParams & OFFSET_OF_DATA) && - !(p_Manip->shadowUpdateParams & OFFSET_OF_PR)) - RETURN_ERROR(MAJOR, E_INVALID_STATE, ("modify node with this type of manipulation requires manipulation be updated previously in SetPcd function")); - } - break; -#ifdef FM_CAPWAP_SUPPORT - case (HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER): - if (p_Manip->h_Frag) - err = UpdateModifyCapwapFragmenation(p_Manip, h_Ad, validate, h_FmTree); - break; -#endif /* FM_CAPWAP_SUPPORT */ - default: - return E_OK; - } - - return err; -} - -#ifdef FM_CAPWAP_SUPPORT static t_Error GetPrOffsetByHeaderOrField(t_FmManipHdrInfo *p_HdrInfo, uint8_t *parseArrayOffset) { e_NetHeaderType hdr = p_HdrInfo->hdr; @@ -2867,6 +2784,9 @@ static t_Error IpReassemblyStats(t_FmPcdManip *p_Manip, t_FmPcdManipReassemIpSta p_Stats->externalBufferBusy = GET_UINT32(p_Manip->ipReassmParams.p_IpReassCommonTbl->totalExternalBufferBusy); p_Stats->sgFragments = GET_UINT32(p_Manip->ipReassmParams.p_IpReassCommonTbl->totalSgFragmentCounter); p_Stats->dmaSemaphoreDepletion = GET_UINT32(p_Manip->ipReassmParams.p_IpReassCommonTbl->totalDmaSemaphoreDepletionCounter); +#if (DPAA_VERSION >= 11) + p_Stats->nonConsistentSp = GET_UINT32(p_Manip->ipReassmParams.p_IpReassCommonTbl->totalNCSPCounter); +#endif /* (DPAA_VERSION >= 11) */ if (p_Manip->ipReassmParams.p_Ipv4ReassTbl) { @@ -3241,6 +3161,38 @@ static t_Error IPManip(t_FmPcdManip *p_Manip) return err; } +static t_Error UpdateInitIpFrag(t_Handle h_FmPcd, + t_Handle h_PcdParams, + t_Handle h_FmPort, + t_FmPcdManip *p_Manip, + t_Handle h_Ad, + bool validate) +{ + t_FmPortGetSetCcParams fmPortGetSetCcParams; + t_Error err; + + SANITY_CHECK_RETURN_ERROR(p_Manip, E_INVALID_HANDLE); + SANITY_CHECK_RETURN_ERROR((p_Manip->opcode == HMAN_OC_IP_FRAGMENTATION), E_INVALID_STATE); + SANITY_CHECK_RETURN_ERROR(h_FmPcd, E_INVALID_HANDLE); + SANITY_CHECK_RETURN_ERROR(h_FmPort, E_INVALID_HANDLE); + + UNUSED(h_FmPcd); + UNUSED(h_Ad); + UNUSED(h_PcdParams); + UNUSED(validate); + UNUSED(p_Manip); + + fmPortGetSetCcParams.setCcParams.type = 0; + fmPortGetSetCcParams.getCcParams.type = MANIP_EXTRA_SPACE; + if ((err = FmPortGetSetCcParams(h_FmPort, &fmPortGetSetCcParams)) != E_OK) + RETURN_ERROR(MAJOR, err, NO_MSG); + + if (!fmPortGetSetCcParams.getCcParams.internalBufferOffset) + DBG(WARNING, ("manipExtraSpace must be larger than '0'")); + + return E_OK; +} + static t_Error IPSecManip(t_FmPcdManipParams *p_ManipParams, t_FmPcdManip *p_Manip) { @@ -3439,6 +3391,92 @@ static void BuildHmtd(uint8_t *p_Dest, uint8_t *p_Src, uint8_t *p_Hmcd, t_FmPcd REPORT_ERROR(MINOR, err, ("Failed in dynamic manip change, continued to the rest of the owners.")); } +static t_Error FmPcdManipInitUpdate(t_Handle h_FmPcd, + t_Handle h_PcdParams, + t_Handle h_FmPort, + t_Handle h_Manip, + t_Handle h_Ad, + bool validate, + int level, + t_Handle h_FmTree) +{ + t_FmPcdManip *p_Manip = (t_FmPcdManip *)h_Manip; + t_Error err = E_OK; + + SANITY_CHECK_RETURN_ERROR(h_Manip,E_INVALID_HANDLE); + + UNUSED(level); + UNUSED(h_FmPcd); + UNUSED(h_FmTree); + + switch (p_Manip->opcode) + { + case (HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX): + err = UpdateInitMvIntFrameHeaderFromFrameToBufferPrefix(h_FmPort, p_Manip, h_Ad, validate); + break; +#ifdef FM_CAPWAP_SUPPORT + case (HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER): + if (!p_Manip->h_Frag) + break; + case (HMAN_OC_CAPWAP_FRAGMENTATION): + err = UpdateInitCapwapFragmentation(h_FmPort, p_Manip, h_Ad, validate, h_FmTree); + break; + case (HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST): + if (p_Manip->h_Frag) + err = UpdateInitCapwapReasm(h_FmPcd, h_FmPort, p_Manip, h_Ad, validate); + break; + case (HMAN_OC_CAPWAP_INDEXED_STATS): + err = UpdateIndxStats(h_FmPcd, h_FmPort, p_Manip); + break; +#endif /* FM_CAPWAP_SUPPORT */ + case (HMAN_OC_IP_REASSEMBLY): + err = UpdateInitIpReasm(h_FmPcd, h_PcdParams, h_FmPort, p_Manip, h_Ad, validate); + break; + case (HMAN_OC_IP_FRAGMENTATION): + err = UpdateInitIpFrag(h_FmPcd, h_PcdParams, h_FmPort, p_Manip, h_Ad, validate); + break; + default: + return E_OK; + } + + return err; +} + +static t_Error FmPcdManipModifyUpdate(t_Handle h_Manip, t_Handle h_Ad, bool validate, int level, t_Handle h_FmTree) +{ + + t_FmPcdManip *p_Manip = (t_FmPcdManip *)h_Manip; + t_Error err = E_OK; + + UNUSED(level); + + switch (p_Manip->opcode) + { + case (HMAN_OC_MV_INT_FRAME_HDR_FROM_FRM_TO_BUFFER_PREFFIX): + RETURN_ERROR(MAJOR, E_INVALID_STATE, ("modify node with this type of manipulation is not suppported")); + case (HMAN_OC_CAPWAP_RMV_DTLS_IF_EXIST): + + if (p_Manip->h_Frag) + { + if (!(p_Manip->shadowUpdateParams & NUM_OF_TASKS) && + !(p_Manip->shadowUpdateParams & OFFSET_OF_DATA) && + !(p_Manip->shadowUpdateParams & OFFSET_OF_PR)) + RETURN_ERROR(MAJOR, E_INVALID_STATE, ("modify node with this type of manipulation requires manipulation be updated previously in SetPcd function")); + } + break; +#ifdef FM_CAPWAP_SUPPORT + case (HMAN_OC_INSRT_HDR_BY_TEMPL_N_OR_FRAG_AFTER): + if (p_Manip->h_Frag) + err = UpdateModifyCapwapFragmenation(p_Manip, h_Ad, validate, h_FmTree); + break; +#endif /* FM_CAPWAP_SUPPORT */ + default: + return E_OK; + } + + return err; +} + /*****************************************************************************/ /* Inter-module API routines */ /*****************************************************************************/ @@ -3550,19 +3588,6 @@ t_Error FmPcdManipCheckParamsForCcNextEngine(t_FmPcdCcNextEngineParams *p_FmPcdC *requiredAction = UPDATE_NIA_ENQ_WITHOUT_DMA; break; case (HMAN_OC_IP_FRAGMENTATION): -#if (DPAA_VERSION == 10) - if (!(p_FmPcdCcNextEngineParams->nextEngine == e_FM_PCD_DONE)) - RETURN_ERROR(MAJOR, E_INVALID_STATE, - ("For this type of header manipulation has to be nextEngine e_FM_PCD_DONE")); -#else - if (!((p_FmPcdCcNextEngineParams->nextEngine == e_FM_PCD_DONE) || - (p_FmPcdCcNextEngineParams->nextEngine == e_FM_PCD_PLCR))) - RETURN_ERROR(MAJOR, E_INVALID_STATE, - ("For this type of header manipulation has to be nextEngine " - "e_FM_PCD_DONE or e_FM_PCD_PLCR")); -#endif /* (DPAA_VERSION == 10) */ - p_Manip->ownerTmp++; - break; case (HMAN_OC_IP_REASSEMBLY): if (p_FmPcdCcNextEngineParams->nextEngine != e_FM_PCD_DONE) RETURN_ERROR(MAJOR, E_INVALID_STATE, ("For this type of header manipulation has to be nextEngine e_FM_PCD_DONE")); |