diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src')
3 files changed, 118 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c index 9224703..caebc2e 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c @@ -1024,6 +1024,94 @@ Status: feature not supported } #if defined(CONFIG_COMPAT) + case FM_PCD_IOC_KG_SCHEME_GET_CNTR_COMPAT: +#endif + case FM_PCD_IOC_KG_SCHEME_GET_CNTR: + { + ioc_fm_pcd_kg_scheme_spc_t *param; + + param = (ioc_fm_pcd_kg_scheme_spc_t *) XX_Malloc(sizeof(ioc_fm_pcd_kg_scheme_spc_t)); + if (!param) + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + + memset(param, 0, sizeof(ioc_fm_pcd_kg_scheme_spc_t)); + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param = NULL; + + compat_param = (ioc_compat_fm_pcd_kg_scheme_spc_t *) XX_Malloc( + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + if (!compat_param) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + } + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + + if (copy_from_user(compat_param, (ioc_compat_fm_pcd_kg_scheme_spc_t *) compat_ptr(arg), + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t))) + { + XX_Free(compat_param); + XX_Free(param); + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + + compat_copy_fm_pcd_kg_scheme_spc(compat_param, param, COMPAT_US_TO_K); + + XX_Free(compat_param); + } + else +#endif + { + if (copy_from_user(param, (ioc_fm_pcd_kg_scheme_spc_t *)arg, + sizeof(ioc_fm_pcd_kg_scheme_spc_t))) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + } + + param->val = FM_PCD_KgSchemeGetCounter((t_Handle)param->id); + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param; + + compat_param = (ioc_compat_fm_pcd_kg_scheme_spc_t *) XX_Malloc( + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + if (!compat_param) + { + XX_Free(param); + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + } + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t)); + compat_copy_fm_pcd_kg_scheme_spc(compat_param, param, COMPAT_K_TO_US); + if (copy_to_user((ioc_compat_fm_pcd_kg_scheme_spc_t *)compat_ptr(arg), + compat_param, + sizeof(ioc_compat_fm_pcd_kg_scheme_spc_t))) + err = E_READ_FAILED; + + XX_Free(compat_param); + } + else +#endif + { + if (copy_to_user((ioc_fm_pcd_kg_scheme_spc_t *)arg, + param, + sizeof(ioc_fm_pcd_kg_scheme_spc_t))) + err = E_READ_FAILED; + } + + XX_Free(param); + break; + } + +#if defined(CONFIG_COMPAT) case FM_PCD_IOC_KG_SCHEME_DELETE_COMPAT: #endif case FM_PCD_IOC_KG_SCHEME_DELETE: diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c index ea0885a..baf2a33 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.c @@ -518,6 +518,7 @@ void compat_copy_fm_pcd_hash_table( param->hash_res_mask = compat_param->hash_res_mask; param->hash_shift = compat_param->hash_shift; param->match_key_size = compat_param->match_key_size; + param->aging_support = compat_param->aging_support; param->id = compat_pcd_id2ptr(compat_param->id); } else @@ -528,6 +529,7 @@ void compat_copy_fm_pcd_hash_table( compat_param->hash_res_mask = param->hash_res_mask; compat_param->hash_shift = param->hash_shift; compat_param->match_key_size = param->match_key_size; + compat_param->aging_support = param->aging_support; compat_param->id = compat_add_ptr2id(param->id, FM_MAP_TYPE_PCD_NODE); } @@ -733,6 +735,22 @@ void compat_copy_fm_pcd_kg_scheme( _fm_cpt_dbg(compat," ...->}\n"); } +void compat_copy_fm_pcd_kg_scheme_spc( + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param, + ioc_fm_pcd_kg_scheme_spc_t *param, + uint8_t compat) +{ + if (compat == COMPAT_US_TO_K) + { + param->id = compat_pcd_id2ptr(compat_param->id); + param->val = compat_param->val; + } else { + compat_param->id = compat_pcd_ptr2id(param->id); + compat_param->val = param->val; + } +} + + void compat_copy_fm_pcd_kg_scheme_select( ioc_compat_fm_pcd_kg_scheme_select_t *compat_param, ioc_fm_pcd_kg_scheme_select_t *param, diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h index d89a64d..e2f779a 100644 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm_compat.h @@ -296,6 +296,7 @@ typedef struct ioc_compat_fm_pcd_hash_table_params_t { uint16_t hash_res_mask; uint8_t hash_shift; uint8_t match_key_size; + bool aging_support; ioc_compat_fm_pcd_cc_next_engine_params_t cc_next_engine_params_for_miss; compat_uptr_t id; } ioc_compat_fm_pcd_hash_table_params_t; @@ -537,6 +538,12 @@ typedef struct ioc_compat_fm_vsp_prs_result_params_t { compat_uptr_t p_fm_vsp; compat_uptr_t p_data; } ioc_compat_fm_vsp_prs_result_params_t; + +typedef struct ioc_compat_fm_pcd_kg_scheme_spc_t { + uint32_t val; + compat_uptr_t id; +} ioc_compat_fm_pcd_kg_scheme_spc_t; + #endif /* (DPAA_VERSION >= 11) */ typedef struct ioc_compat_fm_ctrl_mon_counters_params_t { @@ -710,6 +717,11 @@ void compat_copy_fm_vsp_prs_result_params( ioc_compat_fm_vsp_prs_result_params_t *compat_param, ioc_fm_vsp_prs_result_params_t *param, uint8_t compat); + +void compat_copy_fm_pcd_kg_scheme_spc( + ioc_compat_fm_pcd_kg_scheme_spc_t *compat_param, + ioc_fm_pcd_kg_scheme_spc_t *param, + uint8_t compat); #endif /* (DPAA_VERSION >= 11) */ /* } pcd compat functions */ #endif |