diff options
author | Yin Honghua-R63875 <Hong-Hua.Yin@freescale.com> | 2015-11-24 06:43:01 (GMT) |
---|---|---|
committer | Yin Honghua-R63875 <Hong-Hua.Yin@freescale.com> | 2015-11-24 06:43:01 (GMT) |
commit | fd8e7c71bf30389a5145efc9d088775e0f22402c (patch) | |
tree | 948300f57ef8d1bca163fbc1102ccb480ee6ef87 /drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c | |
parent | 1c291fd8f4204f5515e27cbd2e7413320efd3b0b (diff) | |
parent | a9d0ea5a4d3b679ae3316c93b455d2ccc993772d (diff) | |
download | linux-fsl-qoriq-fd8e7c71bf30389a5145efc9d088775e0f22402c.tar.xz |
Merge pull request #69 in SDK/linux-devel from ~R27762/linux-devel:add_hm_node_stats to master
* commit 'a9d0ea5a4d3b679ae3316c93b455d2ccc993772d':
fmd: Render header manip node statistics available in user space
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c')
-rw-r--r-- | drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c | 71 |
1 files changed, 71 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 caebc2e..b25ff3d 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 @@ -2893,6 +2893,77 @@ invalid_port_id: break; } +#if defined(CONFIG_COMPAT) + case FM_PCD_IOC_MANIP_GET_STATS_COMPAT: +#endif + case FM_PCD_IOC_MANIP_GET_STATS: + { + ioc_fm_pcd_manip_get_stats_t param; + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_manip_get_stats_t *compat_param; + + compat_param = (ioc_compat_fm_pcd_manip_get_stats_t *) XX_Malloc( + sizeof(ioc_compat_fm_pcd_manip_get_stats_t)); + if (!compat_param) + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_manip_get_stats_t)); + if (copy_from_user(compat_param, + (ioc_compat_fm_pcd_manip_get_stats_t *)compat_ptr(arg), + sizeof(ioc_compat_fm_pcd_manip_get_stats_t))) + { + XX_Free(compat_param); + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + + compat_copy_fm_pcd_manip_get_stats(compat_param, ¶m, COMPAT_US_TO_K); + + XX_Free(compat_param); + } + else +#endif + { + if (copy_from_user(¶m, (ioc_fm_pcd_manip_get_stats_t *)arg, + sizeof(ioc_fm_pcd_manip_get_stats_t))) + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); + } + + err = FM_PCD_ManipGetStatistics((t_Handle) param.id, + (t_FmPcdManipStats*) ¶m.stats); + +#if defined(CONFIG_COMPAT) + if (compat) + { + ioc_compat_fm_pcd_manip_get_stats_t *compat_param; + + compat_param = (ioc_compat_fm_pcd_manip_get_stats_t*) XX_Malloc( + sizeof(ioc_compat_fm_pcd_manip_get_stats_t)); + if (!compat_param) + RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD")); + + memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_manip_get_stats_t)); + compat_copy_fm_pcd_manip_get_stats(compat_param, ¶m, COMPAT_K_TO_US); + if (copy_to_user((ioc_compat_fm_pcd_manip_get_stats_t*) compat_ptr(arg), + compat_param, + sizeof(ioc_compat_fm_pcd_manip_get_stats_t))){ + XX_Free(compat_param); + RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG); + } + XX_Free(compat_param); + } + else +#endif + if (copy_to_user((ioc_fm_pcd_manip_get_stats_t *)arg, + ¶m, + sizeof(ioc_fm_pcd_manip_get_stats_t))) + RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG); + + break; + } + #if (DPAA_VERSION >= 11) #if defined(CONFIG_COMPAT) case FM_PCD_IOC_FRM_REPLIC_GROUP_SET_COMPAT: |