| From 60f5101cdfbabd4cc29c02d69aa43a84fab52cf7 Mon Sep 17 00:00:00 2001 |
| From: Iordache Florinel-R70177 <florinel.iordache@nxp.com> |
| Date: Thu, 12 Oct 2017 11:13:41 +0300 |
| Subject: [PATCH] Extend FM MAC Statistics with frame size counters (request |
| from Nokia) |
| |
| Signed-off-by: Iordache Florinel-R70177 <florinel.iordache@nxp.com> |
| --- |
| .../freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c | 1 + |
| .../freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c | 16 ++++++ |
| .../freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h | 1 + |
| .../sdk_fman/Peripherals/FM/MAC/fman_memac.c | 21 ++++++++ |
| .../freescale/sdk_fman/Peripherals/FM/MAC/memac.c | 57 ++++++++++++++++++++++ |
| .../freescale/sdk_fman/Peripherals/FM/MAC/tgec.c | 42 ++++++++++++++++ |
| .../sdk_fman/inc/Peripherals/fm_mac_ext.h | 28 +++++++++++ |
| .../freescale/sdk_fman/inc/flib/fsl_fman_memac.h | 7 +++ |
| .../sdk_fman/src/inc/wrapper/lnxwrp_exp_sym.h | 2 + |
| .../sdk_fman/src/wrapper/lnxwrp_ioctls_fm.c | 41 ++++++++++++++++ |
| .../uapi/linux/fmd/Peripherals/fm_port_ioctls.h | 25 ++++++++++ |
| 11 files changed, 241 insertions(+) |
| |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c |
| @@ -1389,6 +1389,7 @@ static void InitFmMacControllerDriver(t_ |
| |
| p_FmMacControllerDriver->f_FM_MAC_ResetCounters = DtsecResetCounters; |
| p_FmMacControllerDriver->f_FM_MAC_GetStatistics = DtsecGetStatistics; |
| + p_FmMacControllerDriver->f_FM_MAC_GetFrameSizeCounters = NULL; |
| |
| p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr = DtsecModifyMacAddress; |
| p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr = DtsecAddHashMacAddress; |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c |
| @@ -461,6 +461,22 @@ t_Error FM_MAC_GetStatistics (t_Handle h |
| |
| /* ......................................................................... */ |
| |
| +t_Error FM_MAC_GetFrameSizeCounters(t_Handle h_FmMac, t_FmMacFrameSizeCounters *p_FrameSizeCounters, e_CommMode type) |
| +{ |
| + t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac; |
| + |
| + SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE); |
| + |
| + memset(p_FrameSizeCounters, 0, sizeof(t_FmMacFrameSizeCounters)); |
| + |
| + if (p_FmMacControllerDriver->f_FM_MAC_GetFrameSizeCounters) |
| + return p_FmMacControllerDriver->f_FM_MAC_GetFrameSizeCounters(h_FmMac, p_FrameSizeCounters, type); |
| + |
| + RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG); |
| +} |
| + |
| +/* ......................................................................... */ |
| + |
| t_Error FM_MAC_ModifyMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr) |
| { |
| t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac; |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h |
| @@ -106,6 +106,7 @@ typedef struct { |
| |
| t_Error (*f_FM_MAC_ResetCounters) (t_Handle h_FmMac); |
| t_Error (*f_FM_MAC_GetStatistics) (t_Handle h_FmMac, t_FmMacStatistics *p_Statistics); |
| + t_Error (*f_FM_MAC_GetFrameSizeCounters) (t_Handle h_FmMac, t_FmMacFrameSizeCounters *p_FrameSizeCounters, e_CommMode type); |
| |
| t_Error (*f_FM_MAC_ModifyMacAddr) (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr); |
| t_Error (*f_FM_MAC_AddHashMacAddr) (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr); |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fman_memac.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fman_memac.c |
| @@ -360,24 +360,45 @@ uint64_t fman_memac_get_counter(struct m |
| case E_MEMAC_COUNTER_R64: |
| ret_val = GET_MEMAC_CNTR_64(r64); |
| break; |
| + case E_MEMAC_COUNTER_T64: |
| + ret_val = GET_MEMAC_CNTR_64(t64); |
| + break; |
| case E_MEMAC_COUNTER_R127: |
| ret_val = GET_MEMAC_CNTR_64(r127); |
| break; |
| + case E_MEMAC_COUNTER_T127: |
| + ret_val = GET_MEMAC_CNTR_64(t127); |
| + break; |
| case E_MEMAC_COUNTER_R255: |
| ret_val = GET_MEMAC_CNTR_64(r255); |
| break; |
| + case E_MEMAC_COUNTER_T255: |
| + ret_val = GET_MEMAC_CNTR_64(t255); |
| + break; |
| case E_MEMAC_COUNTER_R511: |
| ret_val = GET_MEMAC_CNTR_64(r511); |
| break; |
| + case E_MEMAC_COUNTER_T511: |
| + ret_val = GET_MEMAC_CNTR_64(t511); |
| + break; |
| case E_MEMAC_COUNTER_R1023: |
| ret_val = GET_MEMAC_CNTR_64(r1023); |
| break; |
| + case E_MEMAC_COUNTER_T1023: |
| + ret_val = GET_MEMAC_CNTR_64(t1023); |
| + break; |
| case E_MEMAC_COUNTER_R1518: |
| ret_val = GET_MEMAC_CNTR_64(r1518); |
| break; |
| + case E_MEMAC_COUNTER_T1518: |
| + ret_val = GET_MEMAC_CNTR_64(t1518); |
| + break; |
| case E_MEMAC_COUNTER_R1519X: |
| ret_val = GET_MEMAC_CNTR_64(r1519x); |
| break; |
| + case E_MEMAC_COUNTER_T1519X: |
| + ret_val = GET_MEMAC_CNTR_64(t1519x); |
| + break; |
| case E_MEMAC_COUNTER_RFRG: |
| ret_val = GET_MEMAC_CNTR_64(rfrg); |
| break; |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/memac.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/memac.c |
| @@ -593,6 +593,62 @@ static t_Error MemacGetStatistics(t_Hand |
| |
| /* ......................................................................... */ |
| |
| +static t_Error MemacGetFrameSizeCounters(t_Handle h_Memac, t_FmMacFrameSizeCounters *p_FrameSizeCounters, e_CommMode type) |
| +{ |
| + t_Memac *p_Memac = (t_Memac *)h_Memac; |
| + |
| + SANITY_CHECK_RETURN_ERROR(p_Memac, E_NULL_POINTER); |
| + SANITY_CHECK_RETURN_ERROR(!p_Memac->p_MemacDriverParam, E_INVALID_STATE); |
| + SANITY_CHECK_RETURN_ERROR(p_FrameSizeCounters, E_NULL_POINTER); |
| + |
| + switch (type) |
| + { |
| + case e_COMM_MODE_NONE: |
| + break; |
| + |
| + case e_COMM_MODE_RX: |
| + p_FrameSizeCounters->count_pkts_64 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R64); |
| + p_FrameSizeCounters->count_pkts_65_to_127 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R127); |
| + p_FrameSizeCounters->count_pkts_128_to_255 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R255); |
| + p_FrameSizeCounters->count_pkts_256_to_511 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R511); |
| + p_FrameSizeCounters->count_pkts_512_to_1023 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1023); |
| + p_FrameSizeCounters->count_pkts_1024_to_1518 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1518); |
| + p_FrameSizeCounters->count_pkts_1519_to_1522 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1519X); |
| + break; |
| + |
| + case e_COMM_MODE_TX: |
| + p_FrameSizeCounters->count_pkts_64 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T64); |
| + p_FrameSizeCounters->count_pkts_65_to_127 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T127); |
| + p_FrameSizeCounters->count_pkts_128_to_255 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T255); |
| + p_FrameSizeCounters->count_pkts_256_to_511 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T511); |
| + p_FrameSizeCounters->count_pkts_512_to_1023 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1023); |
| + p_FrameSizeCounters->count_pkts_1024_to_1518 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1518); |
| + p_FrameSizeCounters->count_pkts_1519_to_1522 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1519X); |
| + break; |
| + |
| + case e_COMM_MODE_RX_AND_TX: |
| + p_FrameSizeCounters->count_pkts_64 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R64) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T64); |
| + p_FrameSizeCounters->count_pkts_65_to_127 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R127) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T127); |
| + p_FrameSizeCounters->count_pkts_128_to_255 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R255) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T255); |
| + p_FrameSizeCounters->count_pkts_256_to_511 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R511) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T511); |
| + p_FrameSizeCounters->count_pkts_512_to_1023 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1023) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1023); |
| + p_FrameSizeCounters->count_pkts_1024_to_1518 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1518) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1518); |
| + p_FrameSizeCounters->count_pkts_1519_to_1522 = fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_R1519X) |
| + + fman_memac_get_counter(p_Memac->p_MemMap, E_MEMAC_COUNTER_T1519X); |
| + break; |
| + } |
| + |
| + return E_OK; |
| +} |
| + |
| +/* ......................................................................... */ |
| + |
| static t_Error MemacModifyMacAddress (t_Handle h_Memac, t_EnetAddr *p_EnetAddr) |
| { |
| t_Memac *p_Memac = (t_Memac *)h_Memac; |
| @@ -1025,6 +1081,7 @@ static void InitFmMacControllerDriver(t_ |
| |
| p_FmMacControllerDriver->f_FM_MAC_ResetCounters = MemacResetCounters; |
| p_FmMacControllerDriver->f_FM_MAC_GetStatistics = MemacGetStatistics; |
| + p_FmMacControllerDriver->f_FM_MAC_GetFrameSizeCounters = MemacGetFrameSizeCounters; |
| |
| p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr = MemacModifyMacAddress; |
| p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr = MemacAddHashMacAddress; |
| --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/tgec.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/tgec.c |
| @@ -438,6 +438,47 @@ static t_Error TgecGetStatistics(t_Handl |
| |
| /* ......................................................................... */ |
| |
| +static t_Error TgecGetFrameSizeCounters(t_Handle h_Tgec, t_FmMacFrameSizeCounters *p_FrameSizeCounters, e_CommMode type) |
| +{ |
| + t_Tgec *p_Tgec = (t_Tgec *)h_Tgec; |
| + struct tgec_regs *p_TgecMemMap; |
| + |
| + SANITY_CHECK_RETURN_ERROR(p_Tgec, E_NULL_POINTER); |
| + SANITY_CHECK_RETURN_ERROR(!p_Tgec->p_TgecDriverParam, E_INVALID_STATE); |
| + SANITY_CHECK_RETURN_ERROR(p_FrameSizeCounters, E_NULL_POINTER); |
| + |
| + p_TgecMemMap = p_Tgec->p_MemMap; |
| + |
| + switch (type) |
| + { |
| + case e_COMM_MODE_NONE: |
| + break; |
| + |
| + case e_COMM_MODE_RX: |
| + p_FrameSizeCounters->count_pkts_64 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R64); |
| + p_FrameSizeCounters->count_pkts_65_to_127 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R127); |
| + p_FrameSizeCounters->count_pkts_128_to_255 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R255); |
| + p_FrameSizeCounters->count_pkts_256_to_511 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R511); |
| + p_FrameSizeCounters->count_pkts_512_to_1023 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R1023); |
| + p_FrameSizeCounters->count_pkts_1024_to_1518 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R1518); |
| + p_FrameSizeCounters->count_pkts_1519_to_1522 = fman_tgec_get_counter(p_TgecMemMap, E_TGEC_COUNTER_R1519X); |
| + break; |
| + |
| + case e_COMM_MODE_TX: |
| + //Tx counters not supported |
| + break; |
| + |
| + case e_COMM_MODE_RX_AND_TX: |
| + //Tx counters not supported |
| + break; |
| + } |
| + |
| + return E_OK; |
| +} |
| + |
| + |
| +/* ......................................................................... */ |
| + |
| static t_Error TgecEnable1588TimeStamp(t_Handle h_Tgec) |
| { |
| t_Tgec *p_Tgec = (t_Tgec *)h_Tgec; |
| @@ -905,6 +946,7 @@ static void InitFmMacControllerDriver(t_ |
| |
| p_FmMacControllerDriver->f_FM_MAC_ResetCounters = TgecResetCounters; |
| p_FmMacControllerDriver->f_FM_MAC_GetStatistics = TgecGetStatistics; |
| + p_FmMacControllerDriver->f_FM_MAC_GetFrameSizeCounters = TgecGetFrameSizeCounters; |
| |
| p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr = TgecModifyMacAddress; |
| p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr = TgecAddHashMacAddress; |
| --- a/drivers/net/ethernet/freescale/sdk_fman/inc/Peripherals/fm_mac_ext.h |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/inc/Peripherals/fm_mac_ext.h |
| @@ -197,6 +197,19 @@ typedef struct t_FmMacStatistics { |
| - Other */ |
| } t_FmMacStatistics; |
| |
| +/**************************************************************************//** |
| + @Description FM MAC Frame Size Counters |
| +*//***************************************************************************/ |
| +typedef struct t_FmMacFrameSizeCounters { |
| + |
| + uint64_t count_pkts_64; /**< 64 byte frame counter */ |
| + uint64_t count_pkts_65_to_127; /**< 65 to 127 byte frame counter */ |
| + uint64_t count_pkts_128_to_255; /**< 128 to 255 byte frame counter */ |
| + uint64_t count_pkts_256_to_511; /**< 256 to 511 byte frame counter */ |
| + uint64_t count_pkts_512_to_1023; /**< 512 to 1023 byte frame counter */ |
| + uint64_t count_pkts_1024_to_1518; /**< 1024 to 1518 byte frame counter */ |
| + uint64_t count_pkts_1519_to_1522; /**< 1519 to 1522 byte good frame count */ |
| +} t_FmMacFrameSizeCounters; |
| |
| /**************************************************************************//** |
| @Group FM_mac_init_grp FM MAC Initialization Unit |
| @@ -654,6 +667,21 @@ t_Error FM_MAC_SetStatistics(t_Handle h_ |
| t_Error FM_MAC_GetStatistics(t_Handle h_FmMac, t_FmMacStatistics *p_Statistics); |
| |
| /**************************************************************************//** |
| + @Function FM_MAC_GetFrameSizeCounters |
| + |
| + @Description get MAC statistics counters for different frame size |
| + |
| + @Param[in] h_FmMac - A handle to a FM MAC Module. |
| + @Param[in] p_FrameSizeCounters - Structure with counters |
| + @Param[in] type - Type of counters to be read |
| + |
| + @Return E_OK on success; Error code otherwise. |
| + |
| + @Cautions Allowed only following FM_Init(). |
| +*//***************************************************************************/ |
| +t_Error FM_MAC_GetFrameSizeCounters(t_Handle h_FmMac, t_FmMacFrameSizeCounters *p_FrameSizeCounters, e_CommMode type); |
| + |
| +/**************************************************************************//** |
| @Function FM_MAC_ModifyMacAddr |
| |
| @Description Replace the main MAC Address |
| --- a/drivers/net/ethernet/freescale/sdk_fman/inc/flib/fsl_fman_memac.h |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/inc/flib/fsl_fman_memac.h |
| @@ -146,12 +146,19 @@ _val &= ~TX_FIFO_SECTIONS_TX_EMPTY_MASK; |
| |
| enum memac_counters { |
| E_MEMAC_COUNTER_R64, |
| + E_MEMAC_COUNTER_T64, |
| E_MEMAC_COUNTER_R127, |
| + E_MEMAC_COUNTER_T127, |
| E_MEMAC_COUNTER_R255, |
| + E_MEMAC_COUNTER_T255, |
| E_MEMAC_COUNTER_R511, |
| + E_MEMAC_COUNTER_T511, |
| E_MEMAC_COUNTER_R1023, |
| + E_MEMAC_COUNTER_T1023, |
| E_MEMAC_COUNTER_R1518, |
| + E_MEMAC_COUNTER_T1518, |
| E_MEMAC_COUNTER_R1519X, |
| + E_MEMAC_COUNTER_T1519X, |
| E_MEMAC_COUNTER_RFRG, |
| E_MEMAC_COUNTER_RJBR, |
| E_MEMAC_COUNTER_RDRP, |
| --- a/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_exp_sym.h |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_exp_sym.h |
| @@ -123,6 +123,8 @@ EXPORT_SYMBOL(FM_PCD_SetAdvancedOffloadS |
| /* FMAN MAC exported routines */ |
| EXPORT_SYMBOL(FM_MAC_GetStatistics); |
| |
| +EXPORT_SYMBOL(FM_MAC_GetFrameSizeCounters); |
| + |
| EXPORT_SYMBOL(FM_GetSpecialOperationCoding); |
| |
| #endif /* __LNXWRP_EXP_SYM_H */ |
| --- a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_ioctls_fm.c |
| +++ b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_ioctls_fm.c |
| @@ -4608,6 +4608,47 @@ t_Error LnxwrpFmPortIOCTL(t_LnxWrpFmPort |
| break; |
| } |
| |
| + case FM_PORT_IOC_GET_MAC_FRAME_SIZE_COUNTERS: |
| + { |
| + t_LnxWrpFmDev *p_LnxWrpFmDev = |
| + (t_LnxWrpFmDev *)p_LnxWrpFmPortDev->h_LnxWrpFmDev; |
| + ioc_fm_port_mac_frame_size_counters_t param; |
| + t_FmMacFrameSizeCounters frameSizeCounters; |
| + int mac_id = p_LnxWrpFmPortDev->id; |
| + |
| + if (!p_LnxWrpFmDev) |
| + RETURN_ERROR(MINOR, E_NOT_AVAILABLE, ("Port not initialized or other error!")); |
| + |
| + if (&p_LnxWrpFmDev->txPorts[mac_id] != p_LnxWrpFmPortDev && |
| + &p_LnxWrpFmDev->rxPorts[mac_id] != p_LnxWrpFmPortDev) |
| + mac_id += FM_MAX_NUM_OF_1G_MACS; /* 10G port */ |
| + |
| + if (!p_LnxWrpFmDev->macs[mac_id].h_Dev) |
| + RETURN_ERROR(MINOR, E_NOT_AVAILABLE, ("Port not initialized or other error!")); |
| + |
| + if (copy_from_user(¶m, (ioc_fm_port_mac_frame_size_counters_t *)arg, |
| + sizeof(ioc_fm_port_mac_frame_size_counters_t))) |
| + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); |
| + |
| + if (FM_MAC_GetFrameSizeCounters(p_LnxWrpFmDev->macs[mac_id].h_Dev, |
| + &frameSizeCounters, param.type)) |
| + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); |
| + |
| + param.count_pkts_64 = frameSizeCounters.count_pkts_64; |
| + param.count_pkts_65_to_127 = frameSizeCounters.count_pkts_65_to_127; |
| + param.count_pkts_128_to_255 = frameSizeCounters.count_pkts_128_to_255; |
| + param.count_pkts_256_to_511 = frameSizeCounters.count_pkts_256_to_511; |
| + param.count_pkts_512_to_1023 = frameSizeCounters.count_pkts_512_to_1023; |
| + param.count_pkts_1024_to_1518 = frameSizeCounters.count_pkts_1024_to_1518; |
| + param.count_pkts_1519_to_1522 = frameSizeCounters.count_pkts_1519_to_1522; |
| + |
| + if (copy_to_user((ioc_fm_port_mac_frame_size_counters_t *)arg, ¶m, |
| + sizeof(ioc_fm_port_mac_frame_size_counters_t))) |
| + RETURN_ERROR(MINOR, E_WRITE_FAILED, NO_MSG); |
| + |
| + break; |
| + } |
| + |
| case FM_PORT_IOC_GET_BMI_COUNTERS: |
| { |
| t_LnxWrpFmDev *p_LnxWrpFmDev = |
| --- a/include/uapi/linux/fmd/Peripherals/fm_port_ioctls.h |
| +++ b/include/uapi/linux/fmd/Peripherals/fm_port_ioctls.h |
| @@ -939,6 +939,31 @@ typedef struct ioc_fm_port_vsp_alloc_par |
| |
| #define FM_PORT_IOC_GET_BMI_COUNTERS _IOR(FM_IOC_TYPE_BASE, FM_PORT_IOC_NUM(42), ioc_fm_port_bmi_stats_t) |
| |
| +typedef struct ioc_fm_port_mac_frame_size_counters_t { |
| + |
| + e_CommMode type; |
| + uint64_t count_pkts_64; /**< 64 byte frame counter */ |
| + uint64_t count_pkts_65_to_127; /**< 65 to 127 byte frame counter */ |
| + uint64_t count_pkts_128_to_255; /**< 128 to 255 byte frame counter */ |
| + uint64_t count_pkts_256_to_511; /**< 256 to 511 byte frame counter */ |
| + uint64_t count_pkts_512_to_1023; /**< 512 to 1023 byte frame counter */ |
| + uint64_t count_pkts_1024_to_1518; /**< 1024 to 1518 byte frame counter */ |
| + uint64_t count_pkts_1519_to_1522; /**< 1519 to 1522 byte good frame count */ |
| +} ioc_fm_port_mac_frame_size_counters_t; |
| + |
| +/**************************************************************************//** |
| + @Function FM_MAC_GetFrameSizeCounters |
| + |
| + @Description get MAC statistics counters for different frame size |
| + |
| + @Param[out] ioc_fm_port_mac_frame_size_counters_t A structure holding the counters |
| + |
| + @Return E_OK on success; Error code otherwise. |
| + |
| + @Cautions Allowed only following FM_Init(). |
| +*//***************************************************************************/ |
| +#define FM_PORT_IOC_GET_MAC_FRAME_SIZE_COUNTERS _IOR(FM_IOC_TYPE_BASE, FM_PORT_IOC_NUM(43), ioc_fm_port_mac_frame_size_counters_t) |
| + |
| |
| /** @} */ /* end of lnx_ioctl_FM_PORT_pcd_runtime_control_grp group */ |
| /** @} */ /* end of lnx_ioctl_FM_PORT_runtime_control_grp group */ |