blob: 0e8b39e4fd553cef48c28c4e09f23f14bdb31378 [file] [edit]
/*
* Copyright (c) 2012, 2017, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/**
* @defgroup fal_mib FAL_MIB
* @{
*/
#include "sw.h"
#include "fal_mib.h"
#include "hsl_api.h"
#include "adpt.h"
#include <linux/kernel.h>
#include <linux/module.h>
static sw_error_t
_fal_get_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_get_mib_info)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_get_mib_info(dev_id, port_id, mib_Info);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->get_mib_info)
return SW_NOT_SUPPORTED;
rv = p_api->get_mib_info(dev_id, port_id, mib_Info);
return rv;
}
static sw_error_t
_fal_get_rx_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_get_rx_mib_info)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_get_rx_mib_info(dev_id, port_id, mib_Info);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->get_rx_mib_info)
return SW_NOT_SUPPORTED;
rv = p_api->get_rx_mib_info(dev_id, port_id, mib_Info);
return rv;
}
static sw_error_t
_fal_get_tx_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_get_tx_mib_info)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_get_tx_mib_info(dev_id, port_id, mib_Info);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->get_tx_mib_info)
return SW_NOT_SUPPORTED;
rv = p_api->get_tx_mib_info(dev_id, port_id, mib_Info);
return rv;
}
static sw_error_t
_fal_mib_status_set(a_uint32_t dev_id, a_bool_t enable)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_mib_status_set)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_mib_status_set(dev_id, enable);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->mib_status_set)
return SW_NOT_SUPPORTED;
rv = p_api->mib_status_set(dev_id, enable);
return rv;
}
static sw_error_t
_fal_mib_status_get(a_uint32_t dev_id, a_bool_t * enable)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_mib_status_get)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_mib_status_get(dev_id, enable);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->mib_status_get)
return SW_NOT_SUPPORTED;
rv = p_api->mib_status_get(dev_id, enable);
return rv;
}
static sw_error_t
_fal_mib_port_flush_counters(a_uint32_t dev_id, fal_port_t port_id)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_mib_port_flush_counters)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_mib_port_flush_counters(dev_id, port_id);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->mib_port_flush_counters)
return SW_NOT_SUPPORTED;
rv = p_api->mib_port_flush_counters(dev_id, port_id);
return rv;
}
static sw_error_t
_fal_mib_cpukeep_set(a_uint32_t dev_id, a_bool_t enable)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_mib_cpukeep_set)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_mib_cpukeep_set(dev_id, enable);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->mib_cpukeep_set)
return SW_NOT_SUPPORTED;
rv = p_api->mib_cpukeep_set(dev_id, enable);
return rv;
}
static sw_error_t
_fal_mib_cpukeep_get(a_uint32_t dev_id, a_bool_t * enable)
{
sw_error_t rv;
hsl_api_t *p_api;
adpt_api_t *p_adpt_api;
if((p_adpt_api = adpt_api_ptr_get(dev_id)) != NULL) {
if (NULL == p_adpt_api->adpt_mib_cpukeep_get)
return SW_NOT_SUPPORTED;
rv = p_adpt_api->adpt_mib_cpukeep_get(dev_id, enable);
return rv;
}
SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id));
if (NULL == p_api->mib_cpukeep_get)
return SW_NOT_SUPPORTED;
rv = p_api->mib_cpukeep_get(dev_id, enable);
return rv;
}
static sw_error_t
_fal_get_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv = SW_OK;
adpt_api_t *p_api;
SW_RTN_ON_NULL(p_api = adpt_api_ptr_get(dev_id));
if (NULL == p_api->adpt_get_xgmib_info)
return SW_NOT_SUPPORTED;
rv = p_api->adpt_get_xgmib_info(dev_id, port_id, mib_Info);
return rv;
}
static sw_error_t
_fal_get_rx_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv = SW_OK;
adpt_api_t *p_api;
SW_RTN_ON_NULL(p_api = adpt_api_ptr_get(dev_id));
if (NULL == p_api->adpt_get_rx_xgmib_info)
return SW_NOT_SUPPORTED;
rv = p_api->adpt_get_rx_xgmib_info(dev_id, port_id, mib_Info);
return rv;
}
static sw_error_t
_fal_get_tx_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv = SW_OK;
adpt_api_t *p_api;
SW_RTN_ON_NULL(p_api = adpt_api_ptr_get(dev_id));
if (NULL == p_api->adpt_get_tx_xgmib_info)
return SW_NOT_SUPPORTED;
rv = p_api->adpt_get_tx_xgmib_info(dev_id, port_id, mib_Info);
return rv;
}
static fal_mib_counter_t *g_mibcounter[SW_MAX_NR_DEV];
sw_error_t
fal_mib_counter_alloc(a_uint32_t dev_id, a_uint64_t **p_mibcounter)
{
*p_mibcounter = kzalloc(SW_MAX_NR_PORT * sizeof(fal_mib_counter_t),
GFP_KERNEL);
if(NULL == *p_mibcounter)
return SW_OUT_OF_MEM;
g_mibcounter[dev_id] = (fal_mib_counter_t*)*p_mibcounter;
return SW_OK;
}
static void _fal_rx_mib_update(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
if(NULL == g_mibcounter[dev_id])
return;
g_mibcounter[dev_id][port_id].RxBroad += mib_Info->RxBroad;
g_mibcounter[dev_id][port_id].RxPause += mib_Info->RxPause;
g_mibcounter[dev_id][port_id].RxMulti += mib_Info->RxMulti;
g_mibcounter[dev_id][port_id].RxFcsErr += mib_Info->RxFcsErr;
g_mibcounter[dev_id][port_id].RxAllignErr += mib_Info->RxAllignErr;
g_mibcounter[dev_id][port_id].RxRunt += mib_Info->RxRunt;
g_mibcounter[dev_id][port_id].RxFragment += mib_Info->RxFragment;
g_mibcounter[dev_id][port_id].Rx64Byte += mib_Info->Rx64Byte;
g_mibcounter[dev_id][port_id].Rx128Byte += mib_Info->Rx128Byte;
g_mibcounter[dev_id][port_id].Rx256Byte += mib_Info->Rx256Byte;
g_mibcounter[dev_id][port_id].Rx512Byte += mib_Info->Rx512Byte;
g_mibcounter[dev_id][port_id].Rx1024Byte += mib_Info->Rx1024Byte;
g_mibcounter[dev_id][port_id].Rx1518Byte += mib_Info->Rx1518Byte;
g_mibcounter[dev_id][port_id].RxMaxByte += mib_Info->RxMaxByte;
g_mibcounter[dev_id][port_id].RxTooLong += mib_Info->RxTooLong;
g_mibcounter[dev_id][port_id].RxGoodByte +=
(((u64)mib_Info->RxGoodByte_hi) << 32) | mib_Info->RxGoodByte_lo;
g_mibcounter[dev_id][port_id].RxBadByte +=
(((u64)mib_Info->RxBadByte_hi) << 32) | mib_Info->RxBadByte_lo;
g_mibcounter[dev_id][port_id].RxOverFlow += mib_Info->RxOverFlow;
g_mibcounter[dev_id][port_id].Filtered += mib_Info->Filtered;
g_mibcounter[dev_id][port_id].RxUniCast += mib_Info->RxUniCast;
g_mibcounter[dev_id][port_id].RxTooLongByte +=
(((u64)mib_Info->RxTooLongByte_hi) << 32) | mib_Info->RxTooLongByte_lo;
g_mibcounter[dev_id][port_id].RxRuntByte +=
(((u64)mib_Info->RxRuntByte_hi) << 32) | mib_Info->RxRuntByte_lo;
g_mibcounter[dev_id][port_id].Rx14To63 += mib_Info->Rx14To63;
return;
}
static void _fal_tx_mib_update(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
if(NULL == g_mibcounter[dev_id])
return;
g_mibcounter[dev_id][port_id].TxBroad += mib_Info->TxBroad;
g_mibcounter[dev_id][port_id].TxPause += mib_Info->TxPause;
g_mibcounter[dev_id][port_id].TxMulti += mib_Info->TxMulti;
g_mibcounter[dev_id][port_id].TxUnderRun += mib_Info->TxUnderRun;
g_mibcounter[dev_id][port_id].Tx64Byte += mib_Info->Tx64Byte;
g_mibcounter[dev_id][port_id].Tx128Byte += mib_Info->Tx128Byte;
g_mibcounter[dev_id][port_id].Tx256Byte += mib_Info->Tx256Byte;
g_mibcounter[dev_id][port_id].Tx512Byte += mib_Info->Tx512Byte;
g_mibcounter[dev_id][port_id].Tx1024Byte += mib_Info->Tx1024Byte;
g_mibcounter[dev_id][port_id].Tx1518Byte += mib_Info->Tx1518Byte;
g_mibcounter[dev_id][port_id].TxMaxByte += mib_Info->TxMaxByte;
g_mibcounter[dev_id][port_id].TxOverSize += mib_Info->TxOverSize;
g_mibcounter[dev_id][port_id].TxByte +=
(((u64)mib_Info->TxByte_hi) << 32) | mib_Info->TxByte_lo;
g_mibcounter[dev_id][port_id].TxCollision += mib_Info->TxCollision;
g_mibcounter[dev_id][port_id].TxAbortCol += mib_Info->TxAbortCol;
g_mibcounter[dev_id][port_id].TxMultiCol += mib_Info->TxMultiCol;
g_mibcounter[dev_id][port_id].TxSingalCol += mib_Info->TxSingalCol;
g_mibcounter[dev_id][port_id].TxExcDefer += mib_Info->TxExcDefer;
g_mibcounter[dev_id][port_id].TxDefer += mib_Info->TxDefer;
g_mibcounter[dev_id][port_id].TxLateCol += mib_Info->TxLateCol;
g_mibcounter[dev_id][port_id].TxUniCast += mib_Info->TxUniCast;
return;
}
/*insert flag for inner fal, don't remove it*/
/**
* @brief Get mib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_get_mib_info(dev_id, port_id, mib_Info);
_fal_rx_mib_update(dev_id, port_id, mib_Info);
_fal_tx_mib_update(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
return rv;
}
sw_error_t
fal_mib_counter_get(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_counter_t *mib_counter)
{
sw_error_t rv;
fal_mib_info_t mib_info = {0};
if(NULL == g_mibcounter[dev_id])
return SW_BAD_PTR;
rv = fal_get_mib_info(dev_id, port_id, &mib_info);
if(rv != SW_OK)
return rv;
mib_counter->RxBroad = g_mibcounter[dev_id][port_id].RxBroad;
mib_counter->RxPause = g_mibcounter[dev_id][port_id].RxPause;
mib_counter->RxMulti = g_mibcounter[dev_id][port_id].RxMulti;
mib_counter->RxFcsErr = g_mibcounter[dev_id][port_id].RxFcsErr;
mib_counter->RxAllignErr = g_mibcounter[dev_id][port_id].RxAllignErr;
mib_counter->RxRunt = g_mibcounter[dev_id][port_id].RxRunt;
mib_counter->RxFragment = g_mibcounter[dev_id][port_id].RxFragment ;
mib_counter->Rx64Byte = g_mibcounter[dev_id][port_id].Rx64Byte ;
mib_counter->Rx128Byte = g_mibcounter[dev_id][port_id].Rx128Byte;
mib_counter->Rx256Byte = g_mibcounter[dev_id][port_id].Rx256Byte;
mib_counter->Rx512Byte = g_mibcounter[dev_id][port_id].Rx512Byte;
mib_counter->Rx1024Byte = g_mibcounter[dev_id][port_id].Rx1024Byte;
mib_counter->Rx1518Byte = g_mibcounter[dev_id][port_id].Rx1518Byte;
mib_counter->RxMaxByte = g_mibcounter[dev_id][port_id].RxMaxByte;
mib_counter->RxTooLong = g_mibcounter[dev_id][port_id].RxTooLong;
mib_counter->RxGoodByte = g_mibcounter[dev_id][port_id].RxGoodByte;
mib_counter->RxBadByte = g_mibcounter[dev_id][port_id].RxBadByte;
mib_counter->RxOverFlow = g_mibcounter[dev_id][port_id].RxOverFlow;
mib_counter->Filtered = g_mibcounter[dev_id][port_id].Filtered;
mib_counter->TxBroad = g_mibcounter[dev_id][port_id].TxBroad;
mib_counter->TxPause = g_mibcounter[dev_id][port_id].TxPause;
mib_counter->TxMulti = g_mibcounter[dev_id][port_id].TxMulti;
mib_counter->TxUnderRun = g_mibcounter[dev_id][port_id].TxUnderRun;
mib_counter->Tx64Byte = g_mibcounter[dev_id][port_id].Tx64Byte;
mib_counter->Tx128Byte = g_mibcounter[dev_id][port_id].Tx128Byte;
mib_counter->Tx256Byte = g_mibcounter[dev_id][port_id].Tx256Byte;
mib_counter->Tx512Byte = g_mibcounter[dev_id][port_id].Tx512Byte;
mib_counter->Tx1024Byte = g_mibcounter[dev_id][port_id].Tx1024Byte;
mib_counter->Tx1518Byte = g_mibcounter[dev_id][port_id].Tx1518Byte;
mib_counter->TxMaxByte = g_mibcounter[dev_id][port_id].TxMaxByte;
mib_counter->TxOverSize = g_mibcounter[dev_id][port_id].TxOverSize;
mib_counter->TxByte = g_mibcounter[dev_id][port_id].TxByte;
mib_counter->TxCollision = g_mibcounter[dev_id][port_id].TxCollision;
mib_counter->TxAbortCol = g_mibcounter[dev_id][port_id].TxAbortCol;
mib_counter->TxMultiCol = g_mibcounter[dev_id][port_id].TxMultiCol;
mib_counter->TxSingalCol = g_mibcounter[dev_id][port_id].TxSingalCol;
mib_counter->TxExcDefer = g_mibcounter[dev_id][port_id].TxExcDefer;
mib_counter->TxDefer = g_mibcounter[dev_id][port_id].TxDefer;
mib_counter->TxLateCol = g_mibcounter[dev_id][port_id].TxLateCol;
mib_counter->RxUniCast = g_mibcounter[dev_id][port_id].RxUniCast;
mib_counter->TxUniCast = g_mibcounter[dev_id][port_id].TxUniCast;
mib_counter->Rx14To63 = g_mibcounter[dev_id][port_id].Rx14To63;
mib_counter->RxTooLongByte = g_mibcounter[dev_id][port_id].RxTooLongByte;
mib_counter->RxRuntByte = g_mibcounter[dev_id][port_id].RxRuntByte;
return SW_OK;
}
/**
* @brief Get RX mib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_rx_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_get_rx_mib_info(dev_id, port_id, mib_Info);
_fal_rx_mib_update(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Get TX mib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_tx_mib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_mib_info_t * mib_Info)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_get_tx_mib_info(dev_id, port_id, mib_Info);
_fal_tx_mib_update(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Set mib status on a particular device.
* @param[in] dev_id device id
* @param[in] enable A_TRUE or A_FALSE
* @return SW_OK or error code
*/
sw_error_t
fal_mib_status_set(a_uint32_t dev_id, a_bool_t enable)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_mib_status_set(dev_id, enable);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Get mib status on a particular device.
* @param[in] dev_id device id
* @param[in] enable A_TRUE or A_FALSE
* @return SW_OK or error code
*/
sw_error_t
fal_mib_status_get(a_uint32_t dev_id, a_bool_t * enable)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_mib_status_get(dev_id, enable);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Flush mib counters on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @return SW_OK or error code
*/
sw_error_t
fal_mib_port_flush_counters(a_uint32_t dev_id, fal_port_t port_id )
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_mib_port_flush_counters(dev_id, port_id);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Set mib status on a particular device.
* @param[in] dev_id device id
* @param[in] enable A_TRUE or A_FALSE
* @return SW_OK or error code
*/
sw_error_t
fal_mib_cpukeep_set(a_uint32_t dev_id, a_bool_t enable)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_mib_cpukeep_set(dev_id, enable);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Get mib status on a particular device.
* @param[in] dev_id device id
* @param[in] enable A_TRUE or A_FALSE
* @return SW_OK or error code
*/
sw_error_t
fal_mib_cpukeep_get(a_uint32_t dev_id, a_bool_t * enable)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_mib_cpukeep_get(dev_id, enable);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Get xgmacmib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv;
fal_mib_counter_t gmac_mib = { 0 };
FAL_API_LOCK;
rv = _fal_get_xgmib_info(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
SW_RTN_ON_ERROR(rv);
rv = fal_mib_counter_get(dev_id, port_id, &gmac_mib);
SW_RTN_ON_ERROR(rv);
mib_Info->RxFrame += (gmac_mib.RxBroad +
gmac_mib.RxMulti + gmac_mib.RxUniCast);
mib_Info->RxByte += (gmac_mib.RxGoodByte+gmac_mib.RxBadByte);
mib_Info->RxByteGood += gmac_mib.RxGoodByte;
mib_Info->RxBroadGood += gmac_mib.RxBroad;
mib_Info->RxMultiGood += gmac_mib.RxMulti;
mib_Info->RxFcsErr += gmac_mib.RxFcsErr;
mib_Info->RxRuntErr += gmac_mib.RxRunt;
mib_Info->Rx64Byte += gmac_mib.Rx64Byte;
mib_Info->Rx128Byte += gmac_mib.Rx128Byte;
mib_Info->Rx256Byte += gmac_mib.Rx256Byte;
mib_Info->Rx512Byte += gmac_mib.Rx512Byte;
mib_Info->Rx1024Byte += gmac_mib.Rx1024Byte;
mib_Info->RxMaxByte += (gmac_mib.Rx1518Byte + gmac_mib.RxMaxByte);
mib_Info->RxUnicastGood += gmac_mib.RxUniCast;
mib_Info->RxLengthError += gmac_mib.RxTooLong;
mib_Info->RxPause += gmac_mib.RxPause;
mib_Info->RxOverFlow += gmac_mib.RxOverFlow;
mib_Info->TxByte += gmac_mib.TxByte;
mib_Info->TxFrame += (gmac_mib.TxBroad +
gmac_mib.TxMulti + gmac_mib.TxUniCast);
mib_Info->TxBroadGood += gmac_mib.TxBroad;
mib_Info->TxMultiGood += gmac_mib.TxMulti;
mib_Info->Tx64Byte += gmac_mib.Tx64Byte;
mib_Info->Tx128Byte += gmac_mib.Tx128Byte;
mib_Info->Tx256Byte += gmac_mib.Tx256Byte;
mib_Info->Tx512Byte += gmac_mib.Tx512Byte;
mib_Info->Tx1024Byte += gmac_mib.Tx1024Byte;
mib_Info->TxMaxByte += (gmac_mib.Tx1518Byte + gmac_mib.TxMaxByte);
mib_Info->TxUnicast += gmac_mib.TxUniCast;
mib_Info->TxMulti += gmac_mib.TxMulti;
mib_Info->TxBroad += gmac_mib.TxBroad;
mib_Info->TxByteGood += gmac_mib.TxByte;
mib_Info->TxFrameGood += (gmac_mib.TxBroad +
gmac_mib.TxMulti + gmac_mib.TxUniCast);
mib_Info->TxPause += gmac_mib.TxPause;
return rv;
}
/**
* @brief Get RX xgmacmib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_rx_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_get_rx_xgmib_info(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
return rv;
}
/**
* @brief Get TX xgmacmib infomation on particular port.
* @param[in] dev_id device id
* @param[in] port_id port id
* @param[out] mib_info mib infomation
* @return SW_OK or error code
*/
sw_error_t
fal_get_tx_xgmib_info(a_uint32_t dev_id, fal_port_t port_id,
fal_xgmib_info_t * mib_Info)
{
sw_error_t rv;
FAL_API_LOCK;
rv = _fal_get_tx_xgmib_info(dev_id, port_id, mib_Info);
FAL_API_UNLOCK;
return rv;
}
EXPORT_SYMBOL(fal_get_mib_info);
EXPORT_SYMBOL(fal_get_rx_mib_info);
EXPORT_SYMBOL(fal_get_tx_mib_info);
EXPORT_SYMBOL(fal_get_xgmib_info);
EXPORT_SYMBOL(fal_get_rx_xgmib_info);
EXPORT_SYMBOL(fal_get_tx_xgmib_info);
EXPORT_SYMBOL(fal_mib_status_set);
EXPORT_SYMBOL(fal_mib_status_get);
EXPORT_SYMBOL(fal_mib_port_flush_counters);
EXPORT_SYMBOL(fal_mib_cpukeep_set);
EXPORT_SYMBOL(fal_mib_cpukeep_get);
EXPORT_SYMBOL(fal_mib_counter_get);
/*insert flag for outter fal, don't remove it*/
/**
* @}
*/