summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c
diff options
context:
space:
mode:
authorMarian Chereji <marian.chereji@freescale.com>2014-12-04 11:05:01 (GMT)
committerHonghua Yin <Hong-Hua.Yin@freescale.com>2015-03-17 07:01:03 (GMT)
commit71702d053d60b5d53931f7d8cd62e1a9e37c7939 (patch)
treece57401c8a40a29997421ba6ee11e271c2d84f9e /drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_ioctls_fm.c
parent7a590b6c487881f36caf0369455c39b2b31ae5f6 (diff)
downloadlinux-fsl-qoriq-71702d053d60b5d53931f7d8cd62e1a9e37c7939.tar.xz
fmd: Render match table key statistics accessible from user space
The key statistics for match tables are not accessible from user space using fmlib. This update implements the support for the function FM_PCD_MatchTableGetKeyStatistics to be accessible from user space. Signed-off-by: Marian Chereji <marian.chereji@freescale.com> Change-Id: Ibcf40fdcf7a60afc65b2f926c2a1474513ae8950 Reviewed-on: http://git.am.freescale.net:8181/25376 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Mandy Lavi <Mandy.Lavi@freescale.com> Reviewed-by: Honghua Yin <Hong-Hua.Yin@freescale.com>
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.c156
1 files changed, 116 insertions, 40 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 75c628a..ffa1a2d 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
@@ -1957,62 +1957,138 @@ invalid_port_id:
#if defined(CONFIG_COMPAT)
+ case FM_PCD_IOC_MATCH_TABLE_GET_KEY_STAT_COMPAT:
+#endif
+ case FM_PCD_IOC_MATCH_TABLE_GET_KEY_STAT:
+ {
+ ioc_fm_pcd_cc_tbl_get_stats_t param;
+
+#if defined(CONFIG_COMPAT)
+ if (compat)
+ {
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
+
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t *) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ if (!compat_param)
+ RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
+
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ if (copy_from_user(compat_param,
+ (ioc_compat_fm_pcd_cc_tbl_get_stats_t *)compat_ptr(arg),
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t)))
+ {
+ XX_Free(compat_param);
+ RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
+ }
+
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_US_TO_K);
+
+ XX_Free(compat_param);
+ }
+ else
+#endif
+ {
+ if (copy_from_user(&param, (ioc_fm_pcd_cc_tbl_get_stats_t *)arg,
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
+ RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
+ }
+
+
+ err = FM_PCD_MatchTableGetKeyStatistics((t_Handle) param.id,
+ param.key_index,
+ (t_FmPcdCcKeyStatistics *) &param.statistics);
+
+#if defined(CONFIG_COMPAT)
+ if (compat)
+ {
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
+
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t*) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ if (!compat_param)
+ RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
+
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_K_TO_US);
+ if (copy_to_user((ioc_compat_fm_pcd_cc_tbl_get_stats_t*) compat_ptr(arg),
+ compat_param,
+ sizeof(ioc_compat_fm_pcd_cc_tbl_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_cc_tbl_get_stats_t *)arg,
+ &param,
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
+ RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG);
+ }
+
+ break;
+ }
+
+
+#if defined(CONFIG_COMPAT)
case FM_PCD_IOC_MATCH_TABLE_GET_MISS_STAT_COMPAT:
#endif
case FM_PCD_IOC_MATCH_TABLE_GET_MISS_STAT:
{
- ioc_fm_pcd_cc_tbl_get_miss_params_t param;
+ ioc_fm_pcd_cc_tbl_get_stats_t param;
#if defined(CONFIG_COMPAT)
if (compat)
{
- ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *compat_param;
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
- compat_param = (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *) XX_Malloc(
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t *) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (!compat_param)
RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
- memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (copy_from_user(compat_param,
- (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *)compat_ptr(arg),
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t)))
+ (ioc_compat_fm_pcd_cc_tbl_get_stats_t *)compat_ptr(arg),
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t)))
{
XX_Free(compat_param);
RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
}
- compat_copy_fm_pcd_cc_tbl_get_miss(compat_param, &param, COMPAT_US_TO_K);
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_US_TO_K);
XX_Free(compat_param);
}
else
#endif
{
- if (copy_from_user(&param, (ioc_fm_pcd_cc_tbl_get_miss_params_t *)arg,
- sizeof(ioc_fm_pcd_cc_tbl_get_miss_params_t)))
+ if (copy_from_user(&param, (ioc_fm_pcd_cc_tbl_get_stats_t *)arg,
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
}
err = FM_PCD_MatchTableGetMissStatistics((t_Handle) param.id,
- (t_FmPcdCcKeyStatistics *) &param.miss_statistics);
+ (t_FmPcdCcKeyStatistics *) &param.statistics);
#if defined(CONFIG_COMPAT)
if (compat)
{
- ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *compat_param;
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
- compat_param = (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t*) XX_Malloc(
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t*) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (!compat_param)
RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
- memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
- compat_copy_fm_pcd_cc_tbl_get_miss(compat_param, &param, COMPAT_K_TO_US);
- if (copy_to_user((ioc_compat_fm_pcd_cc_tbl_get_miss_params_t*) compat_ptr(arg),
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_K_TO_US);
+ if (copy_to_user((ioc_compat_fm_pcd_cc_tbl_get_stats_t*) compat_ptr(arg),
compat_param,
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t))){
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t))){
XX_Free(compat_param);
RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG);
}
@@ -2021,9 +2097,9 @@ invalid_port_id:
else
#endif
{
- if (copy_to_user((ioc_fm_pcd_hash_table_params_t *)arg,
+ if (copy_to_user((ioc_fm_pcd_cc_tbl_get_stats_t *)arg,
&param,
- sizeof(ioc_fm_pcd_cc_tbl_get_miss_params_t)))
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG);
}
@@ -2036,58 +2112,58 @@ invalid_port_id:
#endif
case FM_PCD_IOC_HASH_TABLE_GET_MISS_STAT:
{
- ioc_fm_pcd_cc_tbl_get_miss_params_t param;
+ ioc_fm_pcd_cc_tbl_get_stats_t param;
#if defined(CONFIG_COMPAT)
if (compat)
{
- ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *compat_param;
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
- compat_param = (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *) XX_Malloc(
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t *) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (!compat_param)
RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
- memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (copy_from_user(compat_param,
- (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *)compat_ptr(arg),
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t)))
+ (ioc_compat_fm_pcd_cc_tbl_get_stats_t *)compat_ptr(arg),
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t)))
{
XX_Free(compat_param);
RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
}
- compat_copy_fm_pcd_cc_tbl_get_miss(compat_param, &param, COMPAT_US_TO_K);
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_US_TO_K);
XX_Free(compat_param);
}
else
#endif
{
- if (copy_from_user(&param, (ioc_fm_pcd_cc_tbl_get_miss_params_t *)arg,
- sizeof(ioc_fm_pcd_cc_tbl_get_miss_params_t)))
+ if (copy_from_user(&param, (ioc_fm_pcd_cc_tbl_get_stats_t *)arg,
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG);
}
err = FM_PCD_HashTableGetMissStatistics((t_Handle) param.id,
- (t_FmPcdCcKeyStatistics *) &param.miss_statistics);
+ (t_FmPcdCcKeyStatistics *) &param.statistics);
#if defined(CONFIG_COMPAT)
if (compat)
{
- ioc_compat_fm_pcd_cc_tbl_get_miss_params_t *compat_param;
+ ioc_compat_fm_pcd_cc_tbl_get_stats_t *compat_param;
- compat_param = (ioc_compat_fm_pcd_cc_tbl_get_miss_params_t*) XX_Malloc(
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
+ compat_param = (ioc_compat_fm_pcd_cc_tbl_get_stats_t*) XX_Malloc(
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
if (!compat_param)
RETURN_ERROR(MINOR, E_NO_MEMORY, ("IOCTL FM PCD"));
- memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t));
- compat_copy_fm_pcd_cc_tbl_get_miss(compat_param, &param, COMPAT_K_TO_US);
- if (copy_to_user((ioc_compat_fm_pcd_cc_tbl_get_miss_params_t*) compat_ptr(arg),
+ memset(compat_param, 0, sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t));
+ compat_copy_fm_pcd_cc_tbl_get_stats(compat_param, &param, COMPAT_K_TO_US);
+ if (copy_to_user((ioc_compat_fm_pcd_cc_tbl_get_stats_t*) compat_ptr(arg),
compat_param,
- sizeof(ioc_compat_fm_pcd_cc_tbl_get_miss_params_t))){
+ sizeof(ioc_compat_fm_pcd_cc_tbl_get_stats_t))){
XX_Free(compat_param);
RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG);
}
@@ -2096,9 +2172,9 @@ invalid_port_id:
else
#endif
{
- if (copy_to_user((ioc_fm_pcd_hash_table_params_t *)arg,
+ if (copy_to_user((ioc_fm_pcd_cc_tbl_get_stats_t *)arg,
&param,
- sizeof(ioc_fm_pcd_cc_tbl_get_miss_params_t)))
+ sizeof(ioc_fm_pcd_cc_tbl_get_stats_t)))
RETURN_ERROR(MINOR, E_READ_FAILED, NO_MSG);
}