ltq-vdsl-app: disconnect when service is stopped
[openwrt/staging/mkresin.git] / package / network / config / ltq-vdsl-app / patches / 200-autoboot.patch
1 This enables automatic connection after the control daemon is started,
2 and also stops the connection on termination.
3
4 Using the autoboot restart command is necessary because the stop command
5 doesn't actually stop the connection, and would also leave the driver in
6 a state where an explicit start command is necessary to connect again.
7
8 --- a/src/dsl_cpe_init_cfg.c
9 +++ b/src/dsl_cpe_init_cfg.c
10 @@ -27,7 +27,7 @@ DSL_InitData_t gInitCfgData =
11 DSL_CPE_FW2_SET(DSL_NULL, 0x0),
12 DSL_CPE_XTU_SET(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7),
13 DSL_CPE_LINE_INV_NE_SET(DSL_NULL),
14 - DSL_CPE_AUTOBOOT_CTRL_SET(DSL_AUTOBOOT_CTRL_STOP),
15 + DSL_CPE_AUTOBOOT_CTRL_SET(DSL_AUTOBOOT_CTRL_START),
16 DSL_CPE_AUTOBOOT_CFG_SET(DSL_FALSE, DSL_FALSE, DSL_FALSE),
17 DSL_CPE_TEST_MODE_CTRL_SET(DSL_TESTMODE_DISABLE),
18 DSL_CPE_LINE_ACTIVATE_CTRL_SET(DSL_G997_INHIBIT_LDSF, DSL_G997_INHIBIT_ACSF, DSL_G997_NORMAL_STARTUP),
19 --- a/src/dsl_cpe_control.c
20 +++ b/src/dsl_cpe_control.c
21 @@ -6515,10 +6515,13 @@ DSL_CPE_STATIC void DSL_CPE_Termination
22 DSL_CPE_STATIC DSL_void_t DSL_CPE_Termination (void)
23 {
24 #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT
25 - DSL_int_t nDevice = 0;
26 DSL_char_t buf[32] = "quit";
27 #endif
28
29 + DSL_Error_t nRet = DSL_SUCCESS;
30 + DSL_int_t nDevice = 0;
31 + DSL_AutobootConfig_t sAutobootCfg;
32 + DSL_AutobootControl_t sAutobootCtl;
33 DSL_CPE_Control_Context_t *pCtrlCtx;
34
35 pCtrlCtx = DSL_CPE_GetGlobalContext();
36 @@ -6527,6 +6530,50 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi
37 pCtrlCtx->bRun = DSL_FALSE;
38 }
39
40 + for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; ++nDevice)
41 + {
42 + g_bWaitBeforeConfigWrite[nDevice] = DSL_TRUE;
43 + g_bWaitBeforeLinkActivation[nDevice] = DSL_TRUE;
44 + g_bWaitBeforeRestart[nDevice] = DSL_TRUE;
45 +
46 + g_bAutoContinueWaitBeforeConfigWrite[nDevice] = DSL_FALSE;
47 + g_bAutoContinueWaitBeforeLinkActivation[nDevice] = DSL_FALSE;
48 + g_bAutoContinueWaitBeforeRestart[nDevice] = DSL_FALSE;
49 +
50 + memset(&sAutobootCfg, 0x0, sizeof(DSL_AutobootConfig_t));
51 + sAutobootCfg.data.nStateMachineOptions.bWaitBeforeConfigWrite = DSL_TRUE;
52 + sAutobootCfg.data.nStateMachineOptions.bWaitBeforeLinkActivation = DSL_TRUE;
53 + sAutobootCfg.data.nStateMachineOptions.bWaitBeforeRestart = DSL_TRUE;
54 +
55 + nRet = (DSL_Error_t)DSL_CPE_Ioctl(
56 + DSL_CPE_GetGlobalContext()->fd[nDevice],
57 + DSL_FIO_AUTOBOOT_CONFIG_SET, (DSL_int_t)&sAutobootCfg);
58 +
59 + if (nRet < DSL_SUCCESS)
60 + {
61 + DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
62 + "Autoboot configuration for device (%d) failed!, nRet = %d!"
63 + DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn));
64 + }
65 +
66 + memset(&sAutobootCtl, 0, sizeof(DSL_AutobootControl_t));
67 + sAutobootCtl.data.nCommand = DSL_AUTOBOOT_CTRL_RESTART;
68 +
69 + nRet = (DSL_Error_t)DSL_CPE_Ioctl(
70 + DSL_CPE_GetGlobalContext()->fd[nDevice],
71 + DSL_FIO_AUTOBOOT_CONTROL_SET, (DSL_int_t)&sAutobootCtl);
72 +
73 + if (nRet < DSL_SUCCESS)
74 + {
75 + DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
76 + "Autoboot restart for device (%d) failed!, nRet = %d!"
77 + DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn));
78 + }
79 + }
80 +
81 + DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX
82 + "Autoboot restart executed" DSL_CPE_CRLF));
83 +
84 #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT
85 for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; nDevice++)
86 {