diff --git a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_adsl.c b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_adsl.c index 38001c3171..dc75b12cca 100644 --- a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_adsl.c +++ b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_adsl.c @@ -43,6 +43,7 @@ #include #include #include +#include #include /* @@ -277,6 +278,10 @@ static int g_showtime = 0; static void ptm_setup(struct net_device *dev, int ndev) { +#if defined(CONFIG_IFXMIPS_DSL_CPE_MEI) || defined(CONFIG_IFXMIPS_DSL_CPE_MEI_MODULE) + netif_carrier_off(dev); +#endif + /* hook network operations */ dev->netdev_ops = &g_ptm_netdev_ops; netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 25); @@ -1384,9 +1389,13 @@ static INLINE void init_tables(void) static int ptm_showtime_enter(struct port_cell_info *port_cell, void *xdata_addr) { + int i; g_showtime = 1; + for ( i = 0; i < ARRAY_SIZE(g_net_dev); i++ ) + netif_carrier_on(g_net_dev[i]); + printk("enter showtime\n"); return 0; @@ -1394,9 +1403,14 @@ static int ptm_showtime_enter(struct port_cell_info *port_cell, void *xdata_addr static int ptm_showtime_exit(void) { + int i; + if ( !g_showtime ) return -1; + for ( i = 0; i < ARRAY_SIZE(g_net_dev); i++ ) + netif_carrier_off(g_net_dev[i]); + g_showtime = 0; printk("leave showtime\n"); diff --git a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c index 9adeba4d00..41464e6c27 100644 --- a/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c +++ b/package/kernel/lantiq/ltq-ptm/src/ifxmips_ptm_vdsl.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "ifxmips_ptm_vdsl.h" #include @@ -136,6 +137,8 @@ unsigned int ifx_ptm_dbg_enable = DBG_ENABLE_MASK_ERR; static void ptm_setup(struct net_device *dev, int ndev) { + netif_carrier_off(dev); + dev->netdev_ops = &g_ptm_netdev_ops; netif_napi_add(dev, &g_ptm_priv_data.itf[ndev].napi, ptm_napi_poll, 16); dev->watchdog_timeo = ETH_WATCHDOG_TIMEOUT; @@ -888,6 +891,8 @@ static inline void clear_tables(void) static int ptm_showtime_enter(struct port_cell_info *port_cell, void *xdata_addr) { + int i; + ASSERT(port_cell != NULL, "port_cell is NULL"); ASSERT(xdata_addr != NULL, "xdata_addr is NULL"); @@ -896,6 +901,9 @@ static int ptm_showtime_enter(struct port_cell_info *port_cell, void *xdata_addr g_showtime = 1; + for ( i = 0; i < ARRAY_SIZE(g_net_dev); i++ ) + netif_carrier_on(g_net_dev[i]); + IFX_REG_W32(0x0F, UTP_CFG); //#ifdef CONFIG_VR9 @@ -909,6 +917,8 @@ static int ptm_showtime_enter(struct port_cell_info *port_cell, void *xdata_addr static int ptm_showtime_exit(void) { + int i; + if ( !g_showtime ) return -1; @@ -918,6 +928,9 @@ static int ptm_showtime_exit(void) IFX_REG_W32(0x00, UTP_CFG); + for ( i = 0; i < ARRAY_SIZE(g_net_dev); i++ ) + netif_carrier_off(g_net_dev[i]); + g_showtime = 0; // TODO: ReTX clean state