mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
663389c4cf
Move the code for disconnection on exit to a separate function, and also call it in the code path for the "quit" CLI command. While at it, make the patch description a bit clearer. Signed-off-by: Jan Hoffmann <jan@3e8.eu>
99 lines
3.6 KiB
Diff
99 lines
3.6 KiB
Diff
This enables automatic connection after the control daemon is started,
|
|
and also stops the connection on termination.
|
|
|
|
Using the autoboot restart command (in combination with configuring the
|
|
state machine to wait) is necessary because the stop command doesn't
|
|
actually stop the connection, and would also leave the driver in a state
|
|
where an explicit start command is necessary to connect again.
|
|
|
|
--- a/src/dsl_cpe_init_cfg.c
|
|
+++ b/src/dsl_cpe_init_cfg.c
|
|
@@ -27,7 +27,7 @@ DSL_InitData_t gInitCfgData =
|
|
DSL_CPE_FW2_SET(DSL_NULL, 0x0),
|
|
DSL_CPE_XTU_SET(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7),
|
|
DSL_CPE_LINE_INV_NE_SET(DSL_NULL),
|
|
- DSL_CPE_AUTOBOOT_CTRL_SET(DSL_AUTOBOOT_CTRL_STOP),
|
|
+ DSL_CPE_AUTOBOOT_CTRL_SET(DSL_AUTOBOOT_CTRL_START),
|
|
DSL_CPE_AUTOBOOT_CFG_SET(DSL_FALSE, DSL_FALSE, DSL_FALSE),
|
|
DSL_CPE_TEST_MODE_CTRL_SET(DSL_TESTMODE_DISABLE),
|
|
DSL_CPE_LINE_ACTIVATE_CTRL_SET(DSL_G997_INHIBIT_LDSF, DSL_G997_INHIBIT_ACSF, DSL_G997_NORMAL_STARTUP),
|
|
--- a/src/dsl_cpe_control.c
|
|
+++ b/src/dsl_cpe_control.c
|
|
@@ -6491,6 +6491,57 @@ DSL_int32_t DSL_CPE_DeviceInit (
|
|
return ret;
|
|
}
|
|
|
|
+DSL_CPE_STATIC DSL_void_t DSL_CPE_ShutdownConnection(void)
|
|
+{
|
|
+ DSL_Error_t nRet = DSL_SUCCESS;
|
|
+ DSL_int_t nDevice = 0;
|
|
+ DSL_AutobootConfig_t sAutobootCfg;
|
|
+ DSL_AutobootControl_t sAutobootCtl;
|
|
+
|
|
+ for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; ++nDevice)
|
|
+ {
|
|
+ g_bWaitBeforeConfigWrite[nDevice] = DSL_TRUE;
|
|
+ g_bWaitBeforeLinkActivation[nDevice] = DSL_TRUE;
|
|
+ g_bWaitBeforeRestart[nDevice] = DSL_TRUE;
|
|
+
|
|
+ g_bAutoContinueWaitBeforeConfigWrite[nDevice] = DSL_FALSE;
|
|
+ g_bAutoContinueWaitBeforeLinkActivation[nDevice] = DSL_FALSE;
|
|
+ g_bAutoContinueWaitBeforeRestart[nDevice] = DSL_FALSE;
|
|
+
|
|
+ memset(&sAutobootCfg, 0x0, sizeof(DSL_AutobootConfig_t));
|
|
+ sAutobootCfg.data.nStateMachineOptions.bWaitBeforeConfigWrite = DSL_TRUE;
|
|
+ sAutobootCfg.data.nStateMachineOptions.bWaitBeforeLinkActivation = DSL_TRUE;
|
|
+ sAutobootCfg.data.nStateMachineOptions.bWaitBeforeRestart = DSL_TRUE;
|
|
+
|
|
+ nRet = (DSL_Error_t)DSL_CPE_Ioctl(
|
|
+ DSL_CPE_GetGlobalContext()->fd[nDevice],
|
|
+ DSL_FIO_AUTOBOOT_CONFIG_SET, (DSL_int_t)&sAutobootCfg);
|
|
+
|
|
+ if (nRet < DSL_SUCCESS)
|
|
+ {
|
|
+ DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
|
|
+ "Autoboot configuration for device (%d) failed!, nRet = %d!"
|
|
+ DSL_CPE_CRLF, nDevice, sAutobootCfg.accessCtl.nReturn));
|
|
+ }
|
|
+
|
|
+ memset(&sAutobootCtl, 0, sizeof(DSL_AutobootControl_t));
|
|
+ sAutobootCtl.data.nCommand = DSL_AUTOBOOT_CTRL_RESTART;
|
|
+
|
|
+ nRet = (DSL_Error_t)DSL_CPE_Ioctl(
|
|
+ DSL_CPE_GetGlobalContext()->fd[nDevice],
|
|
+ DSL_FIO_AUTOBOOT_CONTROL_SET, (DSL_int_t)&sAutobootCtl);
|
|
+
|
|
+ if (nRet < DSL_SUCCESS)
|
|
+ {
|
|
+ DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
|
|
+ "Autoboot restart for device (%d) failed!, nRet = %d!"
|
|
+ DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX
|
|
+ "Connection shutdown finished." DSL_CPE_CRLF));
|
|
+}
|
|
|
|
/**
|
|
Termination handler. Will clean up in case of ctrl-c.
|
|
@@ -6521,6 +6572,8 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi
|
|
|
|
DSL_CPE_Control_Context_t *pCtrlCtx;
|
|
|
|
+ DSL_CPE_ShutdownConnection();
|
|
+
|
|
pCtrlCtx = DSL_CPE_GetGlobalContext();
|
|
if (pCtrlCtx != DSL_NULL)
|
|
{
|
|
@@ -7416,6 +7469,9 @@ void DSL_CPE_main(void)
|
|
DSL_CPE_STATIC DSL_Error_t DSL_CPE_Control_Exit (DSL_void_t * pContext)
|
|
{
|
|
dummy_console_t *pConsole = pContext;
|
|
+
|
|
+ DSL_CPE_ShutdownConnection();
|
|
+
|
|
pConsole->bRun = DSL_FALSE;
|
|
return DSL_SUCCESS;
|
|
}
|