diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c')
-rwxr-xr-x[-rw-r--r--] | drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c index d161209..4cd0142 100644..100755 --- a/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c +++ b/drivers/net/ethernet/freescale/fman/src/wrapper/lnxwrp_fm.c @@ -62,6 +62,7 @@ #include <sysdev/fsl_soc.h> #include <linux/stat.h> /* For file access mask */ #include <linux/skbuff.h> +#include <linux/proc_fs.h> /* NetCommSw Headers --------------- */ #include "std_ext.h" @@ -707,7 +708,7 @@ static t_Error CheckNConfigFmAdvArgs (t_LnxWrpFmDev *p_LnxWrpFmDev) { struct device_node *dev_node; t_Error err = E_INVALID_VALUE; - /*const uint32_t *uint32_prop;*/ + const uint32_t *uint32_prop; const char *str_prop; int lenp; @@ -723,6 +724,16 @@ static t_Error CheckNConfigFmAdvArgs (t_LnxWrpFmDev *p_LnxWrpFmDev) err = FM_ConfigDmaAidMode(p_LnxWrpFmDev->h_Dev, e_FM_DMA_AID_OUT_TNUM); } + uint32_prop = (uint32_t *)of_get_property(dev_node, "tnum-aging-period", + &lenp); + if (uint32_prop) { + if (WARN_ON(lenp != sizeof(uint32_t))) + RETURN_ERROR(MINOR, E_INVALID_VALUE, NO_MSG); + + err = FM_ConfigTnumAgingPeriod(p_LnxWrpFmDev->h_Dev, + (uint16_t)uint32_prop[0]/*tnumAgingPeriod*/); + } + if (err != E_OK) RETURN_ERROR(MINOR, err, NO_MSG); @@ -1327,6 +1338,78 @@ int fm_port_del_rate_limit(struct fm_port *port) } EXPORT_SYMBOL(fm_port_del_rate_limit); +void FM_PORT_Dsar_DumpRegs(void); +int ar_showmem(struct file *file, const char __user *buffer, + unsigned long count, void *data) +{ + FM_PORT_Dsar_DumpRegs(); + return 2; +} + +struct auto_res_tables_sizes *fm_port_get_autores_maxsize( + struct fm_port *port) +{ + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = (t_LnxWrpFmPortDev *)port; + return &p_LnxWrpFmPortDev->dsar_table_sizes; +} +EXPORT_SYMBOL(fm_port_get_autores_maxsize); + +int fm_port_enter_autores_for_deepsleep(struct fm_port *port, + struct auto_res_port_params *params) +{ + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = (t_LnxWrpFmPortDev *)port; + /*Register other under /proc/autoresponse */ + if (WARN_ON(sizeof(t_FmPortDsarParams) != sizeof(struct auto_res_port_params))) + return -EFAULT; + + FM_PORT_EnterDsar(p_LnxWrpFmPortDev->h_Dev, (t_FmPortDsarParams*)params); + return 0; +} +EXPORT_SYMBOL(fm_port_enter_autores_for_deepsleep); + +void fm_port_exit_auto_res_for_deep_sleep(struct fm_port *port_rx, + struct fm_port *port_tx) +{ + FM_PORT_ExitDsar(port_rx, port_tx); +} +EXPORT_SYMBOL(fm_port_exit_auto_res_for_deep_sleep); + +int fm_port_get_autores_stats(struct fm_port *port, + struct auto_res_port_stats *stats) +{ + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = (t_LnxWrpFmPortDev *)port; + if (WARN_ON(sizeof(t_FmPortDsarStats) != sizeof(struct auto_res_port_stats))) + return -EFAULT; + return FM_PORT_GetDsarStats(p_LnxWrpFmPortDev->h_Dev, (t_FmPortDsarStats*)stats); +} +EXPORT_SYMBOL(fm_port_get_autores_stats); + +int fm_port_suspend(struct fm_port *port) +{ + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = (t_LnxWrpFmPortDev *)port; + if (!FM_PORT_IsInDsar(p_LnxWrpFmPortDev->h_Dev)) + return FM_PORT_Disable(p_LnxWrpFmPortDev->h_Dev); + else + return 0; +} +EXPORT_SYMBOL(fm_port_suspend); + +int fm_port_resume(struct fm_port *port) +{ + t_LnxWrpFmPortDev *p_LnxWrpFmPortDev = (t_LnxWrpFmPortDev *)port; + if (!FM_PORT_IsInDsar(p_LnxWrpFmPortDev->h_Dev)) + return FM_PORT_Enable(p_LnxWrpFmPortDev->h_Dev); + else + return 0; +} +EXPORT_SYMBOL(fm_port_resume); + +bool fm_port_is_in_auto_res_mode(struct fm_port *port) +{ + return FM_PORT_IsInDsar(port); +} +EXPORT_SYMBOL(fm_port_is_in_auto_res_mode); + int fm_mac_set_exception(struct fm_mac_dev *fm_mac_dev, e_FmMacExceptions exception, bool enable) { |