diff --git a/ChangeLog b/ChangeLog
index 9d3656cbc5c636588e43a973d117b0543ffbe951..6c8ac4d6d2c5feab0b75b4c41119be2d933406e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,24 @@
 NEXT VERSION
 
+V4.20.1.2 - 2018-08-16
+common:
+- VRX (DSLCPE_SW-1160) Release of memory within PM initialization sequence
+  missing in some error conditions
+
+V4.20.1.1 - 2018-08-02
+common:
+- VRX (DSLCPE_SW-1150) Shutdown sequence does not work correctly for UGW-8.x
+
+V4.20.1 - 2018-06-28
+-
+
+V4.20.0 - 2018-05-30
+common:
+- VRX (DSLCPE_SW-1098) Power Saving Support by the DSL-API
+- VRX (DSLCPE_SW-1119) Update MCAT header files to latest revision (Rev.3.1)
+- VRX (DSLCPE_SW-1118) Bugfixes for implementation changes of event handling
+- VRX (DSLCPE_SW-1104) Improvement for Firmware message dump module
+
 V4.19.3 - 2017-12-06
 common:
 - VRX (DSLCPE_SW-1116) Intra DTU must be enabled for R5 firmware
diff --git a/configure b/configure
index 5fce8372369d22ebe8e8b4b42177e90a28ff73c4..199d5b386d21c1ff9bee2a1b95d617ad8fafda78 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.in Revision: 1.177 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for DSL CPE API driver 4.19.3.
+# Generated by GNU Autoconf 2.69 for DSL CPE API driver 4.20.1.2.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='DSL CPE API driver'
 PACKAGE_TARNAME='drv_dsl_cpe_api'
-PACKAGE_VERSION='4.19.3'
-PACKAGE_STRING='DSL CPE API driver 4.19.3'
+PACKAGE_VERSION='4.20.1.2'
+PACKAGE_STRING='DSL CPE API driver 4.20.1.2'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1440,7 +1440,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures DSL CPE API driver 4.19.3 to adapt to many kinds of systems.
+\`configure' configures DSL CPE API driver 4.20.1.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1506,7 +1506,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of DSL CPE API driver 4.19.3:";;
+     short | recursive ) echo "Configuration of DSL CPE API driver 4.20.1.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1697,7 +1697,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-DSL CPE API driver configure 4.19.3
+DSL CPE API driver configure 4.20.1.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1752,7 +1752,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by DSL CPE API driver $as_me 4.19.3, which was
+It was created by DSL CPE API driver $as_me 4.20.1.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2618,7 +2618,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='drv_dsl_cpe_api'
- VERSION='4.19.3'
+ VERSION='4.20.1.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -8776,7 +8776,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by DSL CPE API driver $as_me 4.19.3, which was
+This file was extended by DSL CPE API driver $as_me 4.20.1.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8842,7 +8842,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-DSL CPE API driver config.status 4.19.3
+DSL CPE API driver config.status 4.20.1.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.in b/configure.in
index 95b26f7496dc358f0ff4bbb85d7de8e00264990e..8b0682f952aa144ef22854976f50f2a7c2da99db 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
 
 AC_REVISION($Revision: 1.177 $)
 
-AC_INIT([DSL CPE API driver],[4.19.3],[],[drv_dsl_cpe_api])
+AC_INIT([DSL CPE API driver],[4.20.1.2],[],[drv_dsl_cpe_api])
 
 AC_CONFIG_SRCDIR(src/Makefile.am)
 AM_INIT_AUTOMAKE([tar-pax])
diff --git a/doc/doxyconfig.vrx b/doc/doxyconfig.vrx
index 50b2457af1f5b00e0e8cc398fa2cbacd1cfef022..16b3ae716eaaba270a4eb6aa0504d1f2a2ecbc18 100644
--- a/doc/doxyconfig.vrx
+++ b/doc/doxyconfig.vrx
@@ -22,7 +22,7 @@ PROJECT_NAME           = "DSL CPE API"
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = 4.19.3
+PROJECT_NUMBER         = 4.20.1.2
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
 # base path where the generated documentation will be put.
diff --git a/src/Makefile.am b/src/Makefile.am
index ed9a5a9602ce0b8141ffa8cd072c33c5e99e5ba5..ca13c84b84e641be885099bec75938306d00fed4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -19,7 +19,7 @@ endif
 if FW_R9
 VRX_HEADER_DIR = include/mcat2.7
 else
-VRX_HEADER_DIR = include/mcat3.0
+VRX_HEADER_DIR = include/mcat3.1
 endif
 
 
@@ -159,13 +159,13 @@ drv_vrx_specific_extra = \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_olr.h \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_perf_pmd.h \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_tc_counters.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_config_pmd.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_const.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_dmt_scope.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_ghs_status.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_olr.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_perf_pmd.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_tc_counters.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_config_pmd.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_const.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_dmt_scope.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_ghs_status.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_olr.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_perf_pmd.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_tc_counters.h \
 	include/drv_dsl_cpe_vrx_ctx.h \
 	../scripts/inst_drv_dsl_cpe_api_vrx.sh
 
diff --git a/src/Makefile.in b/src/Makefile.in
index c6b0e5538f0d6cde7558e42905c8c4f20ab90c5a..36846b571de6e3a9e8d2f4a55d407aab684e9e31 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -479,7 +479,7 @@ top_srcdir = @top_srcdir@
 @DSL_CPE_API_LIBRARY_BUILD_2_6_TRUE@@KERNEL_2_6_TRUE@noinst_LIBRARIES = lib_dsl_cpe_api.a
 @KERNEL_2_6_FALSE@noinst_LIBRARIES = lib_dsl_cpe_api.a
 @DEVICE_DANUBE_TRUE@bin_SCRIPTS = ../scripts/inst_drv_dsl_cpe_api_danube.sh
-@FW_R9_FALSE@VRX_HEADER_DIR = include/mcat3.0
+@FW_R9_FALSE@VRX_HEADER_DIR = include/mcat3.1
 @FW_R9_TRUE@VRX_HEADER_DIR = include/mcat2.7
 drv_dsl_cpe_api_includedir = $(includedir)
 drv_dsl_cpe_api_include_HEADERS = include/drv_dsl_cpe*.h
@@ -591,13 +591,13 @@ drv_vrx_specific_extra = \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_olr.h \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_perf_pmd.h \
 	include/mcat2.7/drv_dsl_cpe_vrx_msg_tc_counters.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_config_pmd.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_const.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_dmt_scope.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_ghs_status.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_olr.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_perf_pmd.h \
-	include/mcat3.0/drv_dsl_cpe_vrx_msg_tc_counters.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_config_pmd.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_const.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_dmt_scope.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_ghs_status.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_olr.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_perf_pmd.h \
+	include/mcat3.1/drv_dsl_cpe_vrx_msg_tc_counters.h \
 	include/drv_dsl_cpe_vrx_ctx.h \
 	../scripts/inst_drv_dsl_cpe_api_vrx.sh
 
diff --git a/src/common/drv_dsl_cpe_api.c b/src/common/drv_dsl_cpe_api.c
index 7377a1336389aab0536d0ba3a6fb6b911ab6abad..694127cf90d6b6b761a16bbcff2bde325c6730f7 100644
--- a/src/common/drv_dsl_cpe_api.c
+++ b/src/common/drv_dsl_cpe_api.c
@@ -1779,7 +1779,8 @@ DSL_Error_t DSL_DRV_AutobootControlSet(
       /** TODO: Check why only not on chip bonding **/
       /* Ignore for locked line */
       if (DSL_DRV_BONDING_ENABLED && (DSL_DRV_LINES_PER_DEVICE == 1)
-          && nLineLocked == DSL_DEV_NUM(pContext))
+          && nLineLocked == DSL_DEV_NUM(pContext)
+          && pData->data.nCommand != DSL_AUTOBOOT_CTRL_STOP_PD)
       {
          DSL_DEBUG(DSL_DBG_WRN, (pContext,
             SYS_DBG_WRN"DSL[%02d]: WARNING - PAF not available, line disabled!"
@@ -1936,6 +1937,9 @@ DSL_Error_t DSL_DRV_AutobootControlSet(
                /* no break */
                /* ... pass to restart*/
 
+#if defined (DSL_VRX_DEVICE_VR11)
+            case DSL_AUTOBOOT_CTRL_STOP_PD:
+#endif
             case DSL_AUTOBOOT_CTRL_RESTART:
             case DSL_AUTOBOOT_CTRL_RESTART_FULL:
                if (pData->data.nCommand == DSL_AUTOBOOT_CTRL_RESTART_FULL)
@@ -1999,10 +2003,20 @@ DSL_Error_t DSL_DRV_AutobootControlSet(
                                 DSL_AUTOBOOT_STATUS_RUNNING, DSL_FW_REQUEST_NA);
                }
 
+#if defined(DSL_VRX_DEVICE_VR11)
+               if (pData->data.nCommand == DSL_AUTOBOOT_CTRL_STOP_PD)
+               {
+                  DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bPowerDown, DSL_TRUE);
+                  nErrCode = DSL_DRV_AutobootStatusSet(pContext, DSL_AUTOBOOT_STATUS_SHUTDOWN_PD,
+                                                       DSL_FW_REQUEST_NA);
+               }
+#endif
+
                if (DSL_DRV_BONDING_ENABLED && DSL_DRV_LINES_PER_DEVICE == 1)
                {
                   if ((pData->data.nCommand == DSL_AUTOBOOT_CTRL_RESTART) ||
-                     (pData->data.nCommand == DSL_AUTOBOOT_CTRL_RESTART_FULL))
+                      (pData->data.nCommand == DSL_AUTOBOOT_CTRL_RESTART_FULL) ||
+                      (pData->data.nCommand == DSL_AUTOBOOT_CTRL_STOP_PD))
                   {
                      DSL_DRV_MUTEX_LOCK(bndLineLockMutex);
                      /* Restart for unlocked line */
@@ -6246,6 +6260,7 @@ DSL_Error_t DSL_DRV_IoctlHandle(
    DSL_uint32_t nArg)
 {
    DSL_Error_t nErrCode = DSL_ERROR;
+   DSL_Error_t nCtxRWErrCode = DSL_ERROR;
    DSL_IOCTL_arg_t *pIOCTL_arg = DSL_NULL;
    DSL_EventData_Union_t *pEventData;
    DSL_uint8_t *pMsgBuf, *pOldMsgBuf, *pMaskBuf, *pDataBuf;
@@ -6257,7 +6272,9 @@ DSL_Error_t DSL_DRV_IoctlHandle(
    DSL_IOCTL_Table_t *pIoctlTable = ioctlTable, *pIoctlRecord = ioctlTable ;
    DSL_boolean_t bIoctlFound = DSL_FALSE;
    DSL_DEV_Handle_t dev;
+#if defined (DSL_VRX_DEVICE_VR11)
    DSL_DEV_VersionCheck_t nVerCheck = DSL_VERSION_ERROR;
+#endif
    DSL_uint32_t nOppositeLine;
 
 #ifndef DSL_DEBUG_DISABLE
@@ -6822,19 +6839,23 @@ DSL_Error_t DSL_DRV_IoctlHandle(
                DSL_DRV_VRX_FirmwareVersionCheck(pContext, DSL_MIN_FW_VERSION_VR11_R5, &nVerCheck);
                if (bFwEventActivation && nVerCheck >= DSL_VERSION_EQUAL)
                {
-                  DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bFwEventActivation, DSL_TRUE);
+                  DSL_CTX_WRITE_SCALAR(pContext, nCtxRWErrCode, bFwEventActivation, DSL_TRUE);
+                  DSL_SET_ERROR_CODE(nCtxRWErrCode, nErrCode);
                }
                else
                {
-                  nErrCode = DSL_WRN_CONFIG_PARAM_IGNORED;
-                  DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bFwEventActivation, DSL_FALSE);
+                  DSL_SET_ERROR_CODE(DSL_WRN_CONFIG_PARAM_IGNORED, nErrCode);
+                  DSL_CTX_WRITE_SCALAR(pContext, nCtxRWErrCode, bFwEventActivation, DSL_FALSE);
+                  DSL_SET_ERROR_CODE(nCtxRWErrCode, nErrCode);
                }
                #else
-               nErrCode = DSL_WRN_CONFIG_PARAM_IGNORED;
-               DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bFwEventActivation, DSL_FALSE);
+               DSL_SET_ERROR_CODE(DSL_WRN_CONFIG_PARAM_IGNORED, nErrCode);
+               DSL_CTX_WRITE_SCALAR(pContext, nCtxRWErrCode, bFwEventActivation, DSL_FALSE);
+               DSL_SET_ERROR_CODE(nCtxRWErrCode, nErrCode);
                #endif /* defined (DSL_VRX_DEVICE_VR11) */
 
-               DSL_CTX_READ_SCALAR(pContext, nErrCode, bFwEventActivation, bFwEventActivation);
+               DSL_CTX_READ_SCALAR(pContext, nCtxRWErrCode, bFwEventActivation, bFwEventActivation);
+               DSL_SET_ERROR_CODE(nCtxRWErrCode, nErrCode);
 
                dev = pContext->pDevCtx->nfc_lowHandle;
 
diff --git a/src/common/drv_dsl_cpe_autoboot.c b/src/common/drv_dsl_cpe_autoboot.c
index b93da053565ca4ef5d28e8a6d9a9c6147b981db1..7698a3babcc4dc4506fccfff2c58e51a7842aefa 100644
--- a/src/common/drv_dsl_cpe_autoboot.c
+++ b/src/common/drv_dsl_cpe_autoboot.c
@@ -40,6 +40,11 @@ static DSL_Error_t DSL_DRV_AutobootHandleFwRequest(
 static DSL_Error_t DSL_DRV_AutobootHandleFwWait(
    DSL_Context_t *pContext);
 
+#if defined (DSL_VRX_DEVICE_VR11)
+static DSL_Error_t DSL_DRV_AutobootHandlePowerDown(
+   DSL_Context_t *pContext);
+#endif
+
 static DSL_Error_t DSL_DRV_AutobootHandleFwReady(
    DSL_Context_t *pContext);
 
@@ -82,29 +87,12 @@ DSL_Error_t DSL_DRV_AutobootSignalDeviceEvt(
 DSL_Error_t DSL_DRV_AutobootHandleDeviceEvt(
    DSL_Context_t *pContext)
 {
-   DSL_Error_t nErrChReadMessage;
-   DSL_Error_t nErrCode = DSL_SUCCESS;
-
-   DSL_DEBUG(DSL_DBG_MSG,
-      (pContext, SYS_DBG_MSG"DSL[%02d]: IN - DSL_DRV_AutobootHandleDeviceEvt"
-      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
-
-   if (pContext->bFwEventRcvd)
+   if (pContext->bFwEventRcvd || pContext->nFwEventLastReadErr == DSL_SUCCESS)
    {
-      pContext->bFwEventRcvd = DSL_FALSE;
-
-      do
-      {
-         /* Handle VRX driver autonomous messages*/
-         DSL_DRV_VRX_HandleMessage(pContext, &nErrChReadMessage);
-      } while(nErrChReadMessage == DSL_SUCCESS);
+      DSL_DRV_VRX_HandleMessage(pContext);
    }
 
-   DSL_DEBUG(DSL_DBG_MSG,
-      (pContext, SYS_DBG_MSG"DSL[%02d]: OUT - DSL_DRV_AutobootHandleDeviceEvt"
-      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
-
-   return nErrCode;
+   return DSL_SUCCESS;
 }
 
 static DSL_Error_t DSL_DRV_AutobootThreadInit(
@@ -164,6 +152,9 @@ DSL_Error_t DSL_DRV_AutobootThreadStart(
    DSL_Context_t *pContext)
 {
    DSL_Error_t nErrCode = DSL_SUCCESS;
+#if defined (DSL_VRX_DEVICE_VR11)
+   DSL_boolean_t bPowerDown = DSL_FALSE;
+#endif
 
    DSL_CHECK_POINTER(pContext, pContext->pDevCtx);
    DSL_CHECK_ERR_CODE();
@@ -174,6 +165,20 @@ DSL_Error_t DSL_DRV_AutobootThreadStart(
          (pContext, SYS_DBG_MSG"DSL[%02d]: Autoboot thread will be started..."
          DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
 
+#if defined (DSL_VRX_DEVICE_VR11)
+      DSL_CTX_READ_SCALAR(pContext, nErrCode, bPowerDown, bPowerDown);
+      if (bPowerDown)
+      {
+         DSL_DEBUG(DSL_DBG_WRN,
+            (pContext, SYS_DBG_WRN"DSL[%02d]: Autoboot thread previously powered down. "
+             "Finishing thread completion..."DSL_DRV_CRLF,
+             DSL_DEV_NUM(pContext)));
+
+         DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bPowerDown, DSL_FALSE);
+         DSL_DRV_WAIT_COMPLETION(&pContext->AutobootControl);
+      }
+#endif
+
       pContext->bAutobootThreadStarted = DSL_TRUE;
 
       /* Set Autoboot Status*/
@@ -238,6 +243,9 @@ static DSL_int_t DSL_DRV_AutobootThreadMain(
    DSL_int_t nEventType = 0;
    DSL_uint32_t nTimeoutID = 0;
 #endif
+#if defined (DSL_VRX_DEVICE_VR11)
+   DSL_boolean_t bPowerDown = DSL_FALSE;
+#endif
 
    if (pContext == DSL_NULL)
    {
@@ -315,9 +323,21 @@ static DSL_int_t DSL_DRV_AutobootThreadMain(
       (pContext, SYS_DBG_MSG"DSL[%02d]: autoboot ending (%lu)"DSL_DRV_CRLF,
       DSL_DEV_NUM(pContext), DSL_DRV_TimeMSecGet()));
 
+#if defined (DSL_VRX_DEVICE_VR11)
+   DSL_CTX_READ_SCALAR(pContext, nErrCode, bPowerDown, bPowerDown);
+
+   if(bPowerDown)
+   {
+      nErrCode = DSL_DRV_AutobootStatusSet(pContext, DSL_AUTOBOOT_STATUS_STOPPED_PD,
+                                           DSL_FW_REQUEST_NA);
+   }
+   else
+#endif
+   {
    /* Set Autoboot Status*/
-   nErrCode = DSL_DRV_AutobootStatusSet(pContext, DSL_AUTOBOOT_STATUS_STOPPED,
-      DSL_FW_REQUEST_NA);
+      nErrCode = DSL_DRV_AutobootStatusSet(pContext, DSL_AUTOBOOT_STATUS_STOPPED,
+                                           DSL_FW_REQUEST_NA);
+   }
 
    pContext->bAutobootThreadStarted = DSL_FALSE;
 
@@ -556,6 +576,10 @@ DSL_Error_t DSL_DRV_AutobootStateCheck(
          break;
 
       case DSL_AUTOBOOTSTATE_CONFIG_WRITE_WAIT:
+#if defined (DSL_VRX_DEVICE_VR11)
+         DSL_DRV_AutobootHandlePowerDown(pContext);
+#endif
+
          /* Wait for the external trigger to continue Autoboot processing*/
          DSL_CTX_READ_SCALAR(pContext, nErrCode, bAutobootContinue,
             bAutobootContinue);
@@ -1152,6 +1176,9 @@ static DSL_Error_t DSL_DRV_AutobootHandleRestart(
 #endif
    DSL_boolean_t bSoftRestart = DSL_FALSE;
    DSL_uint8_t XTSE[DSL_G997_NUM_XTSE_OCTETS] = {0};
+#if defined (DSL_VRX_DEVICE_VR11)
+   DSL_boolean_t bPowerDown = DSL_FALSE;
+#endif
 
    DSL_DEBUG(DSL_DBG_MSG,
       (pContext, SYS_DBG_MSG"DSL[%02d]: IN - DSL_AutobootHandleRestart"
@@ -1250,7 +1277,15 @@ static DSL_Error_t DSL_DRV_AutobootHandleRestart(
 
    DSL_CTX_READ(pContext, nErrCode, bAutobootDisable, bAutobootDisable);
 
-   if (bAutobootDisable)
+#if defined (DSL_VRX_DEVICE_VR11)
+   DSL_CTX_READ(pContext, nErrCode, bPowerDown, bPowerDown);
+#endif
+
+   if (bAutobootDisable
+#if defined (DSL_VRX_DEVICE_VR11)
+       && !bPowerDown
+#endif
+       )
    {
       if (DSL_DRV_BONDING_ENABLED && DSL_DRV_LINES_PER_DEVICE == 2)
       {
@@ -1891,12 +1926,96 @@ static DSL_Error_t DSL_DRV_AutobootHandleFwWait(
    return nErrCode;
 }
 
+#if defined(DSL_VRX_DEVICE_VR11)
+static DSL_Error_t DSL_DRV_AutobootHandlePowerDown(
+   DSL_Context_t *pContext)
+{
+   DSL_Error_t nErrCode = DSL_SUCCESS;
+   DSL_boolean_t bPowerDown = DSL_FALSE, bPoweredDown = DSL_FALSE;
+   DSL_DEV_VersionCheck_t nVerCheck = 0;
+   ACK_ADSL_FeatureMapGet_t nFeatureMapGetAck;
+
+   DSL_CTX_READ_SCALAR(pContext, nErrCode, bPowerDown, bPowerDown);
+
+   if (bPowerDown)
+   {
+      nErrCode = DSL_DRV_VRX_FirmwareVersionCheck(pContext,
+                  DSL_MIN_FW_VERSION_VR11_R4MR2, &nVerCheck);
+
+      if (nErrCode != DSL_SUCCESS)
+      {
+         DSL_DEBUG(DSL_DBG_ERR, (pContext, SYS_DBG_ERR
+            "DSL[%02d]: ERROR - FW version check failed!"
+            DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+      }
+      else if (nVerCheck >= DSL_VERSION_EQUAL)
+      {
+         nErrCode = DSL_DRV_VRX_SendMsgFeatureMapGet(pContext, (DSL_uint8_t *) &nFeatureMapGetAck);
+
+         if (nErrCode != DSL_SUCCESS )
+         {
+            DSL_DEBUG( DSL_DBG_ERR,
+               (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - Feature Map get failed!"
+               DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+         }
+         else if (nFeatureMapGetAck.W0F12)
+         {
+            bPoweredDown = DSL_TRUE;
+
+            DSL_DRV_LineStateSet(pContext, DSL_LINESTATE_POWER_DOWN);
+            DSL_DRV_DEV_LinkPowerDown(pContext);
+
+            /** Stop Autoboot thread now (from within)
+             * Need to complete it on the next restart
+             */
+            pContext->bAutobootThreadShutdown = DSL_TRUE;
+
+
+#ifdef INCLUDE_DSL_PM
+            /* Suspend PM module*/
+            nErrCode = DSL_DRV_PM_Suspend(pContext);
+
+            if (nErrCode != DSL_SUCCESS)
+            {
+               DSL_DEBUG( DSL_DBG_ERR,
+                  (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - PM module suspend failed!"
+                  DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+            }
+#endif /* #ifdef INCLUDE_DSL_PM*/
+
+            /* Trigger restart sequence */
+            DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bAutobootRestart, DSL_TRUE);
+            DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bAutobootContinue, DSL_FALSE);
+
+            DSL_DEBUG(DSL_DBG_WRN, (pContext, SYS_DBG_WRN
+               "DSL[%02d]: Powering down..."
+               DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+         }
+      }
+      else
+      {
+         nErrCode = DSL_ERR_NOT_SUPPORTED_BY_FIRMWARE;
+      }
+
+      if(bPoweredDown == DSL_FALSE)
+      {
+         DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bPowerDown, DSL_FALSE);
+      }
+   }
+
+   return (nErrCode);
+}
+#endif /* DSL_VRX_DEVICE_VR11 */
+
 static DSL_Error_t DSL_DRV_AutobootHandleFwReady(
    DSL_Context_t *pContext)
 {
    DSL_Error_t nErrCode = DSL_SUCCESS, nRet;
    DSL_boolean_t bPowerManagementL3Forced = DSL_FALSE,
                  bWaitBeforeConfigWrite = DSL_FALSE;
+#if defined(DSL_VRX_DEVICE_VR11)
+   DSL_boolean_t bPowerDown = DSL_FALSE;
+#endif
 
    /* Reset bFwRequestHandled flag*/
    DSL_CTX_WRITE_SCALAR(pContext, nErrCode, bFwRequestHandled, DSL_FALSE);
@@ -1917,10 +2036,21 @@ static DSL_Error_t DSL_DRV_AutobootHandleFwReady(
    DSL_CTX_READ_SCALAR(pContext, nErrCode, bPowerManagementL3Forced,
       bPowerManagementL3Forced);
 
-   /* Get Link Activation option*/
-   DSL_CTX_READ_SCALAR(pContext, nErrCode,
-      nAutobootConfig.nStateMachineOptions.bWaitBeforeConfigWrite,
-      bWaitBeforeConfigWrite);
+#if defined(DSL_VRX_DEVICE_VR11)
+   DSL_CTX_READ_SCALAR(pContext, nErrCode, bPowerDown, bPowerDown);
+
+   if(bPowerDown)
+   {
+      bWaitBeforeConfigWrite = DSL_TRUE;
+   }
+   else
+#endif
+   {
+      /* Get Link Activation option*/
+      DSL_CTX_READ_SCALAR(pContext, nErrCode,
+         nAutobootConfig.nStateMachineOptions.bWaitBeforeConfigWrite,
+         bWaitBeforeConfigWrite);
+   }
 
    /* Switch to the next state according to the link activation option*/
    if (bWaitBeforeConfigWrite)
diff --git a/src/common/drv_dsl_cpe_os_linux.c b/src/common/drv_dsl_cpe_os_linux.c
index bd87dc60b5c2689e43c225eb9d6c216b69461532..c73b197b158f839234a1de692b26beccf945ee21 100644
--- a/src/common/drv_dsl_cpe_os_linux.c
+++ b/src/common/drv_dsl_cpe_os_linux.c
@@ -21,6 +21,8 @@
 
 #include <linux/device.h>
 
+#include "drv_mei_cpe_api_intern.h" /* MEI_InternalDevLayout */
+
 #undef DSL_DBG_BLOCK
 #define DSL_DBG_BLOCK DSL_DBG_OS
 
@@ -1244,6 +1246,30 @@ int __init DSL_ModuleInit(void)
 
    printk(DSL_DRV_CRLF DSL_DRV_CRLF "Lantiq CPE API Driver version: %s" DSL_DRV_CRLF,
       &(dsl_cpe_api_version[4]));
+
+   /** When autoload active */
+   if (g_MaxDeviceNumber == (IFX_uint8_t)(-1)
+      && g_LinesPerDevice == (IFX_uint8_t)(-1)
+      && g_ChannelsPerLine == (IFX_uint8_t)(-1))
+   {
+      DSL_uint32_t mei_MaxDeviceNumber = -1;
+      DSL_uint32_t mei_LinesPerDevice = -1;
+      DSL_uint32_t mei_ChannelsPerLine = -1;
+
+      printk(DSL_DRV_CRLF DSL_DRV_CRLF "Lantiq CPE API Driver - autoloading layout..." DSL_DRV_CRLF);
+
+      MEI_InternalGetDevLayout(
+                     &mei_MaxDeviceNumber,
+                     &mei_LinesPerDevice,
+                     &mei_ChannelsPerLine);
+
+      g_MaxDeviceNumber = (DSL_uint8_t)mei_MaxDeviceNumber;
+      g_LinesPerDevice = (DSL_uint8_t)mei_LinesPerDevice;
+      g_ChannelsPerLine = (DSL_uint8_t)mei_ChannelsPerLine;
+
+      debug_level = 3;
+   }
+
    printk(DSL_DRV_CRLF DSL_DRV_CRLF "Lantiq CPE API Device layout: %d devices"
           ", %d lines, %d channels" DSL_DRV_CRLF,g_MaxDeviceNumber, g_LinesPerDevice, g_ChannelsPerLine);
    if (
diff --git a/src/device/drv_dsl_cpe_device_vrx.c b/src/device/drv_dsl_cpe_device_vrx.c
index 1554cde8bafdaa4c488327a5256f1f96d7d88312..c9d05fdccaf7c52d5aaa3fc3b9171b520b8bb1f6 100644
--- a/src/device/drv_dsl_cpe_device_vrx.c
+++ b/src/device/drv_dsl_cpe_device_vrx.c
@@ -333,9 +333,12 @@ DSL_Error_t DSL_DRV_VRX_CamExceptionHandle(
          }
 
          /* Update FW reinit counter*/
-         if ((lineInitStatus.nLineInitSubStatus == LINIT_SUB_FW_RETRY) ||
-             (lineInitStatus.nLineInitSubStatus == LINIT_SUB_S_PP_DRIVER) ||
-             (lineInitStatus.nLineInitSubStatus == LINIT_SUB_S_PP_CLOCK_NEW))
+         if (
+#ifdef DSL_VRX_DEVICE_VR11
+             (lineInitStatus.nLineInitSubStatus == LINIT_SUB_S_PP_CLOCK_NEW) ||
+#endif /* DSL_VRX_DEVICE_VR11 */
+             (lineInitStatus.nLineInitSubStatus == LINIT_SUB_FW_RETRY) ||
+             (lineInitStatus.nLineInitSubStatus == LINIT_SUB_S_PP_DRIVER))
          {
             nCamFwReinits++;
             DSL_DEBUG(DSL_DBG_MSG,
@@ -1816,9 +1819,14 @@ DSL_Error_t DSL_DRV_VRX_FailReasonGet(
    case ALM_ModemFSM_FailReasonGet_S_INTENDED_LOCAL_SHUTDOWN:
       lineInitSubStatus = LINIT_SUB_S_INTENDED_LOCAL_SHUTDOWN;
       break;
+#if defined (DSL_VRX_DEVICE_VR11)
    case ALM_ModemFSM_FailReasonGet_S_PP_CLOCK_NEW:
       lineInitSubStatus = LINIT_SUB_S_PP_CLOCK_NEW;
       break;
+   case ALM_ModemFSM_FailReasonGet_S_PP_ERB_INIT:
+      lineInitSubStatus = LINIT_SUB_S_PP_ERB_INIT;
+      break;
+#endif /* defined (DSL_VRX_DEVICE_VR11) */
    default:
       lineInitSubStatus = LINIT_SUB_UNKNOWN;
       break;
@@ -3177,8 +3185,7 @@ static DSL_Error_t DSL_DRV_VRX_PollDrvForModemResetState(
    DSL_Error_t nErrCode = DSL_SUCCESS;
    DSL_int32_t nWaitCount = 0;
    DSL_LineStateValue_t nLineState = DSL_LINESTATE_UNKNOWN;
-   DSL_boolean_t bIdleReached = DSL_FALSE, bFwEventActivation;
-   DSL_Error_t nErrChReadMessage;
+   DSL_boolean_t bIdleReached = DSL_FALSE;
 
    DSL_DEBUG(DSL_DBG_MSG,
       (pContext, SYS_DBG_MSG"DSL[%02d]: IN - DSL_DRV_VRX_PollDrvForModemResetState"
@@ -3187,13 +3194,6 @@ static DSL_Error_t DSL_DRV_VRX_PollDrvForModemResetState(
    /* wait for Modem Reset state max 4 sec */
    for (nWaitCount = 0; nWaitCount < 40; nWaitCount++)
    {
-      DSL_CTX_READ_SCALAR(pContext, nErrCode, bFwEventActivation, bFwEventActivation);
-
-      if(bFwEventActivation)
-      {
-         DSL_DRV_VRX_HandleMessage(pContext, &nErrChReadMessage);
-      }
-
       /* Get line state*/
       nErrCode = DSL_DRV_DEV_LineStateGet( pContext, &nLineState, DSL_NULL);
       if( nErrCode != DSL_SUCCESS )
@@ -3407,6 +3407,7 @@ static DSL_Error_t DSL_DRV_VRX_TestParametersFeUpdate(
    DSL_uint16_t nDataLen = 0;
 #ifndef DSL_DEBUG_DISABLE
    DSL_uint16_t nMsgId = EVT_PMD_TESTPARAMSGET;
+   DSL_uint16_t nClass = 0x02;
 #endif
 
    DSL_DEBUG( DSL_DBG_MSG,
@@ -3433,7 +3434,7 @@ static DSL_Error_t DSL_DRV_VRX_TestParametersFeUpdate(
    }
 
 #ifndef DSL_DEBUG_DISABLE
-   DSL_DRV_VRX_DumpMessage(pContext, nMsgId, (DSL_uint16_t *)pMsg, (pMsg->Length + 4), DSL_TRUE);
+   DSL_DRV_VRX_DumpMessage(pContext, nClass, nMsgId, (DSL_uint16_t *)pMsg, (pMsg->Length + 4), DSL_TRUE);
 #endif /* DSL_DEBUG_DISABLE */
 
    nDataLen = (pMsg->EndIndex - pMsg->StartIndex) + 1;
@@ -3600,8 +3601,7 @@ static DSL_Error_t DSL_DRV_VRX_WaitingMessageCopyData(
 #endif /* HAS_TO_BE_CROSSCHECKED_FOR_VRX*/
 
 DSL_Error_t DSL_DRV_VRX_HandleMessage(
-   DSL_Context_t *pContext,
-   DSL_Error_t *pnErrChReadMessage)
+   DSL_Context_t *pContext)
 {
    DSL_Error_t nErrCode = DSL_SUCCESS;
    DSL_uint8_t buf[512];
@@ -3617,7 +3617,7 @@ DSL_Error_t DSL_DRV_VRX_HandleMessage(
 
    sMsg.paylSize_byte = sizeof(buf);
    sMsg.pPayload      = buf;
-   *pnErrChReadMessage = DSL_ERROR;
+   pContext->nFwEventLastReadErr = DSL_ERROR;
 
    /* check for received NFCs */
    if( DSL_DRV_VRX_ChReadMessage(pContext, &sMsg) >= DSL_SUCCESS )
@@ -3625,8 +3625,8 @@ DSL_Error_t DSL_DRV_VRX_HandleMessage(
    /* one message received, handle it...*/
       if( sMsg.msgCtrl != MEI_MSG_CTRL_MODEM_MSG )
       {
-         DSL_DEBUG( DSL_DBG_MSG,
-            (pContext, SYS_DBG_MSG"DSL[%02d]: Unsupported VRx driver message received MsgID %x"
+         DSL_DEBUG( DSL_DBG_WRN,
+            (pContext, SYS_DBG_WRN"DSL[%02d]: Unsupported VRx driver message received MsgID %x"
             DSL_DRV_CRLF, DSL_DEV_NUM(pContext), sMsg.msgId));
       }
       else
@@ -3640,17 +3640,19 @@ DSL_Error_t DSL_DRV_VRX_HandleMessage(
             break;
 #endif /* INCLUDE_DSL_DELT*/
          case EVT_MODEMFSM_STATEGET:
+            pContext->bFwEventRcvd = DSL_FALSE;
+            pContext->nFwEventLastReadErr = DSL_SUCCESS;
+
             DSL_DEBUG( DSL_DBG_MSG,
                (pContext, SYS_DBG_MSG"DSL[%02d]: Received EVT_MODEMFSM_STATEGET"
                DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
 
             DSL_DRV_DEV_LineStateGet(pContext, &nLineState, (EVT_ModemFSM_StateGet_t*) buf);
-            DSL_DRV_LineStateSet(pContext, nLineState);
-            *pnErrChReadMessage = DSL_SUCCESS;
+            DSL_CTX_WRITE_SCALAR(pContext, nErrCode, nFwEventLineState, nLineState);
             break;
          default:
-            DSL_DEBUG( DSL_DBG_MSG,
-               (pContext, SYS_DBG_MSG"DSL[%02d]: Unsupported VRx control message CTRL_MODEM_MSG received MsgID %x"
+            DSL_DEBUG( DSL_DBG_WRN,
+               (pContext, SYS_DBG_WRN"DSL[%02d]: Unsupported VRx control message CTRL_MODEM_MSG received MsgID %x"
                DSL_DRV_CRLF, DSL_DEV_NUM(pContext), sMsg.msgId));
 
             break;
@@ -4529,7 +4531,9 @@ DSL_Error_t DSL_DRV_DEV_FwDownload(
    DSL_FirmwareXdslFeature_t nFeatureSet = DSL_FW_XDSLFEATURE_CLEANED;
    DSL_FirmwareFeatures_t nFwFeatures;
    DSL_FirmwareType_t nNextMode;
+#if defined (DSL_VRX_DEVICE_VR11)
    DSL_DEV_VersionCheck_t nVerCheck = DSL_VERSION_ERROR;
+#endif /* defined (DSL_VRX_DEVICE_VR11) */
    DSL_boolean_t bFwEventActivation;
    DSL_uint32_t nOppositeLine;
 
@@ -5182,16 +5186,21 @@ DSL_Error_t DSL_DRV_DEV_LinkReset(
 
    if (DSL_DRV_VRX_FirmwareXdslModeCheck(pContext, DSL_VRX_FW_VDSL2))
    {
-      nErrCode = DSL_DRV_VRX_SendMsgModemStateSet(
-                pContext, CMD_ModemFSM_StateSet_LINKRES);
-      if( nErrCode != DSL_SUCCESS )
+#ifdef FW_R9
+      if (DSL_DRV_BONDING_ENABLED && DSL_DRV_LINES_PER_DEVICE == 2)
       {
-         DSL_DEBUG( DSL_DBG_ERR,
-            (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - FSM state set failed!"
-            DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+         nErrCode = DSL_DRV_VRX_SendMsgModemStateSet(
+                   pContext, CMD_ModemFSM_StateSet_LINKRES);
+         if( nErrCode != DSL_SUCCESS )
+         {
+            DSL_DEBUG( DSL_DBG_ERR,
+               (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - FSM state set failed!"
+               DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
 
-         return DSL_ERROR;
+            return DSL_ERROR;
+         }
       }
+#endif /* FW_R9 */
 
        /* Poll for the modem RESET state at least 4 sec*/
       nErrCode = DSL_DRV_VRX_PollDrvForModemResetState(pContext);
@@ -5256,6 +5265,39 @@ DSL_Error_t DSL_DRV_DEV_LinkTerminate(
    return nErrCode;
 }
 
+/*
+   For a detailed description of the function, its arguments and return value
+   please refer to the description in the header file 'drv_dsl_cpe_device.h'
+*/
+#if defined(DSL_VRX_DEVICE_VR11)
+DSL_Error_t DSL_DRV_DEV_LinkPowerDown(
+   DSL_Context_t *pContext)
+{
+   DSL_Error_t nErrCode = DSL_SUCCESS;
+
+   DSL_DEBUG( DSL_DBG_MSG,
+      (pContext, SYS_DBG_MSG"DSL[%02d]: IN - DSL_DRV_DEV_LinkPowerDown"
+      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+   nErrCode = DSL_DRV_VRX_SendMsgModemStateSet(
+                pContext, CMD_ModemFSM_StateSet_POWERDOWN);
+   if( nErrCode != DSL_SUCCESS )
+   {
+      DSL_DEBUG( DSL_DBG_ERR,
+         (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - FSM state set failed!"
+         DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+      return DSL_ERROR;
+   }
+
+   DSL_DEBUG( DSL_DBG_MSG,
+      (pContext, SYS_DBG_MSG"DSL[%02d]: OUT - DSL_DRV_DEV_LinkPowerDown"
+      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+   return nErrCode;
+}
+#endif /* DSL_VRX_DEVICE_VR11 */
+
 /*
    For a detailed description of the function, its arguments and return value
    please refer to the description in the header file 'drv_dsl_cpe_device.h'
@@ -5629,7 +5671,6 @@ DSL_Error_t DSL_DRV_DEV_ShowtimeStatusUpdate(
    DSL_uint32_t nEapsTimeout = 0, nEapsTimeoutId;
    DSL_DEV_CamStates_t nCamCurrentState;
    IFX_int32_t nMeiErrCode;
-   DSL_Error_t nErrChReadMessage;
 
    DSL_CHECK_CTX_POINTER(pContext);
    DSL_CHECK_ERR_CODE();
@@ -5865,7 +5906,7 @@ DSL_Error_t DSL_DRV_DEV_ShowtimeStatusUpdate(
       }
 
       /* Handle VRX driver autonomous messages*/
-      nErrCode = DSL_DRV_VRX_HandleMessage(pContext, &nErrChReadMessage);
+      nErrCode = DSL_DRV_VRX_HandleMessage(pContext);
 
       if (DSL_DRV_VRX_FirmwareXdslModeCheck(pContext, DSL_VRX_FW_VDSL2))
       {
@@ -7928,7 +7969,8 @@ DSL_Error_t DSL_DRV_DEV_LineStateGet(
 
       if(bFwEventActivation && pEvt == DSL_NULL)
       {
-         DSL_CTX_READ_SCALAR(pContext, nErrCode, nLineState, *pnLineState);
+         DSL_DRV_VRX_HandleMessage(pContext);
+         DSL_CTX_READ_SCALAR(pContext, nErrCode, nFwEventLineState, *pnLineState);
 
          return nErrCode;
       }
@@ -8016,6 +8058,11 @@ DSL_Error_t DSL_DRV_DEV_LineStateGet(
          *pnLineState = DSL_LINESTATE_TEST_FILTERDETECTION_COMPLETE;
          break;
 #endif /* INCLUDE_DSL_FILTER_DETECTION */
+#ifdef DSL_VRX_DEVICE_VR11
+      case ACK_ModemFSM_StateGet_DSL_POWER_DOWN_STATE:
+         *pnLineState = DSL_LINESTATE_POWER_DOWN;
+         break;
+#endif /* DSL_VRX_DEVICE_VR11 */
       default:
          DSL_DEBUG( DSL_DBG_MSG,
          (pContext, SYS_DBG_MSG"DSL[%02d]: DSL_DEV_LineStateGet: "
diff --git a/src/device/drv_dsl_cpe_msg_vrx.c b/src/device/drv_dsl_cpe_msg_vrx.c
index c2e697c273a7afc4f8783e8c3b6f43ff535eb5d0..6e64e590e959f013176ccda9219c4d419a0ac07a 100644
--- a/src/device/drv_dsl_cpe_msg_vrx.c
+++ b/src/device/drv_dsl_cpe_msg_vrx.c
@@ -44,7 +44,15 @@ VRX_MsgId_t DSL_DRV_VRX_g_MsgDumpBlacklist[]=
    {(DSL_uint16_t)(CMD_LINEFAILURENE_GET)    },
    { 0xFFFF }
 };
-#endif /* #ifdef DSL_DEBUG_DISABLE*/
+
+/** ARC to ME indication (NFC) */
+#define DSL_MBOX_CODE_NFC       0x01
+/** ARC to ME event (EVT) */
+#define DSL_MBOX_CODE_EVT       0x02
+/** ARC to ME event (ALM) */
+#define DSL_MBOX_CODE_ALM       0x04
+
+#endif /* #ifndef DSL_DEBUG_DISABLE*/
 
 static DSL_uint16_t g_VRxMsgWhitelist[] =
 {
@@ -170,6 +178,10 @@ static DSL_uint16_t g_VRxMsgWhitelist[] =
    CMD_PSD_CALIBRATION_US_SET,      /*     +     :      +      :       +      */
    CMD_TESTOPTIONSSET,              /*     +     :      +      :       +      */
    CMD_MODEMFSM_EVENTCONFIGURE,     /*     +     :      +      :       -      */
+#if defined (DSL_VRX_DEVICE_VR11)
+   CMD_ADSL_FEATUREMAPGET,          /*     +     :      +      :       +      */
+   CMD_VDSL_FEATUREMAPGET,          /*     +     :      +      :       +      */
+#endif
       /* Delimeter only*/
    0xFFFF
 };
@@ -1732,6 +1744,7 @@ static DSL_boolean_t DSL_DRV_VRX_CheckMessageDumpBlacklist(
 
 DSL_void_t DSL_DRV_VRX_DumpMessage(
    DSL_Context_t *pContext,
+   const DSL_uint16_t nClass,
    const DSL_uint16_t nMsgId,
    const DSL_uint16_t *pData,
    const DSL_uint16_t nSize,
@@ -1740,7 +1753,7 @@ DSL_void_t DSL_DRV_VRX_DumpMessage(
    static const DSL_uint16_t *pMsg16;
    static const DSL_uint32_t *pMsg32;
    DSL_DBG_ModuleLevel_t dbgmlData;
-   DSL_boolean_t bPrint = DSL_FALSE, bDirSet = DSL_FALSE;
+   DSL_boolean_t bPrint = DSL_FALSE, bDirSet = DSL_FALSE, bAutoMsg = DSL_FALSE;
    DSL_uint8_t i;
 
    dbgmlData.data.nDbgLevel  = DSL_DBG_NONE;
@@ -1804,10 +1817,17 @@ DSL_void_t DSL_DRV_VRX_DumpMessage(
 
    if (bPrint == DSL_TRUE)
    {
+      if((nClass & 0x00FF) == DSL_MBOX_CODE_NFC ||
+         (nClass & 0x00FF) == DSL_MBOX_CODE_EVT ||
+         (nClass & 0x00FF) == DSL_MBOX_CODE_ALM)
+      {
+         bAutoMsg = DSL_TRUE;
+      }
+
       DSL_DRV_debug_printf(pContext, "DSL[%02d/%s]: 0x%04x 0x%04x 0x%04x",
                            DSL_DEV_NUM(pContext),
-                           bReceive == DSL_TRUE ? "rx" : "tx", nMsgId,
-                           pData[0], pData[1]);
+                           bReceive == DSL_TRUE ? (bAutoMsg == DSL_TRUE ? "ev" : "rx") : "tx",
+                           nMsgId, pData[0], pData[1]);
 
       /* decide wether to interpret the rest as 16 or 32 bit */
       if (nMsgId & VDSL2_MBX_MSG_ID_IFX_MASK)
@@ -1853,6 +1873,12 @@ DSL_Error_t DSL_DRV_VRX_ChReadMessage(
          nErrCode = DSL_SUCCESS;
       else
          nErrCode = DSL_ERROR;
+
+#ifndef DSL_DEBUG_DISABLE
+      DSL_DRV_VRX_DumpMessage(pContext, pMsg->msgClassifier,
+         pMsg->msgId, (DSL_uint16_t *)pMsg->pPayload,
+         (DSL_uint16_t)pMsg->paylSize_byte, DSL_TRUE);
+#endif /* #ifndef DSL_DEBUG_DISABLE*/
    }
    else
       nErrCode = DSL_ERROR;
@@ -1878,8 +1904,8 @@ DSL_Error_t DSL_DRV_VRX_ChRequestMessage(
    DSL_CHECK_ERR_CODE();
 
 #ifndef DSL_DEBUG_DISABLE
-   DSL_DRV_VRX_DumpMessage(pContext, pRw->write_msg.msgId,
-      (DSL_uint16_t *)pRw->write_msg.pPayload,
+   DSL_DRV_VRX_DumpMessage(pContext, pRw->write_msg.msgClassifier,
+      pRw->write_msg.msgId, (DSL_uint16_t *)pRw->write_msg.pPayload,
       (DSL_uint16_t)pRw->write_msg.paylSize_byte, DSL_FALSE);
 #endif /* #ifndef DSL_DEBUG_DISABLE*/
 
@@ -1903,8 +1929,8 @@ DSL_Error_t DSL_DRV_VRX_ChRequestMessage(
 
 #ifndef DSL_DEBUG_DISABLE
    /* if ret was ok, pRw contains the proper answer already */
-   DSL_DRV_VRX_DumpMessage(pContext, pRw->ack_msg.msgId,
-      (DSL_uint16_t *)pRw->ack_msg.pPayload,
+   DSL_DRV_VRX_DumpMessage(pContext, pRw->ack_msg.msgClassifier,
+      pRw->ack_msg.msgId, (DSL_uint16_t *)pRw->ack_msg.pPayload,
       (DSL_uint16_t)pRw->ack_msg.paylSize_byte, DSL_TRUE);
 #endif /* #ifndef DSL_DEBUG_DISABLE*/
 
@@ -6587,9 +6613,15 @@ DSL_Error_t DSL_DRV_VRX_SendMsgModemFSMEventConfigure(
    memset(&sCmd, 0, sizeof(sCmd));
    memset(&sAck, 0, sizeof(sAck));
 
-   sCmd.Length = 1;
-   sCmd.E15 = sCmd.E14 = sCmd.E13 = sCmd.E12 = sCmd.E11 = sCmd.E10 = sCmd.E9 = sCmd.E8 = flag;
+#if defined (DSL_VRX_DEVICE_VR11)
+   sCmd.Length = 2;
+   sCmd.E16 = sCmd.E15 = sCmd.E14 = sCmd.E13 = sCmd.E12 = sCmd.E11 = sCmd.E10 = sCmd.E9 = sCmd.E8 = flag;
    sCmd.E7 = sCmd.E6 = sCmd.E5 = sCmd.E4 = sCmd.E3 = sCmd.E2 = sCmd.E1 = sCmd.E0 = flag;
+#else
+   sCmd.Length = 1;
+   sCmd.E13 = sCmd.E12 = sCmd.E11 = sCmd.E10 = sCmd.E9 = sCmd.E8 = flag;
+   sCmd.E6 = sCmd.E5 = sCmd.E4 = sCmd.E3 = sCmd.E2 = sCmd.E0 = flag;
+#endif /* defined (DSL_VRX_DEVICE_VR11) */
 
    nErrCode = DSL_DRV_VRX_SendMessage( pContext, CMD_MODEMFSM_EVENTCONFIGURE,
                   sizeof(CMD_ModemFSM_EventConfigure_t), (DSL_uint8_t *)&sCmd,
@@ -6602,4 +6634,46 @@ DSL_Error_t DSL_DRV_VRX_SendMsgModemFSMEventConfigure(
    return (nErrCode);
 }
 
+#if defined(DSL_VRX_DEVICE_VR11)
+DSL_Error_t DSL_DRV_VRX_SendMsgFeatureMapGet(
+   DSL_Context_t *pContext,
+   DSL_uint8_t *pAck)
+{
+   DSL_Error_t nErrCode = DSL_SUCCESS;
+   /* Assume that xDSL messages have same format */
+   CMD_ADSL_FeatureMapGet_t sCmd;
+   union
+   {
+      ACK_ADSL_FeatureMapGet_t AFM;
+      ACK_VDSL_FeatureMapGet_t VFM;
+   } sAck;
+
+   DSL_CHECK_CTX_POINTER(pContext);
+   DSL_CHECK_ERR_CODE();
+
+   DSL_DEBUG( DSL_DBG_MSG,
+      (pContext, SYS_DBG_MSG"DSL[%02d]: IN - DSL_DRV_VRX_SendMsgFeatureMapGet"
+      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+   memset(&sCmd, 0, sizeof(sCmd));
+   sCmd.Length = DSL_VRX_16BIT_RD_MSG_LEN_GET(sAck.AFM);
+
+   nErrCode = DSL_DRV_VRX_SendMessage(pContext,
+      DSL_DRV_VRX_FirmwareXdslModeCheck(pContext, DSL_VRX_FW_VDSL2) ? CMD_VDSL_FEATUREMAPGET : CMD_ADSL_FEATUREMAPGET,
+      sizeof(sCmd), (DSL_uint8_t*)&sCmd,
+      sizeof(ACK_ADSL_FeatureMapGet_t), (DSL_uint8_t*)&sAck);
+
+   if (nErrCode >= DSL_SUCCESS)
+   {
+      memcpy(pAck, &sAck, sizeof(ACK_ADSL_FeatureMapGet_t));
+   }
+
+   DSL_DEBUG( DSL_DBG_MSG,
+      (pContext, SYS_DBG_MSG"DSL[%02d]: OUT - DSL_DRV_VRX_SendMsgFeatureMapGet"
+      DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+   return (nErrCode);
+}
+#endif /* (DSL_VRX_DEVICE_VR11) */
+
 #endif /* #ifdef INCLUDE_DSL_CPE_API_VRX*/
diff --git a/src/include/drv_dsl_cpe_api.h b/src/include/drv_dsl_cpe_api.h
index 44794a459d63794a076de72282ee7d6bec641219..91cfe201a22db5c833a3e598c8918388b9f5772d 100644
--- a/src/include/drv_dsl_cpe_api.h
+++ b/src/include/drv_dsl_cpe_api.h
@@ -673,6 +673,10 @@ typedef enum
 
    /** Line State: LOWPOWER_L3. */
    DSL_LINESTATE_LOWPOWER_L3       = 0x02000000,
+#ifdef DSL_VRX_DEVICE_VR11
+   /** Line State: POWER_DOWN */
+   DSL_LINESTATE_POWER_DOWN        = 0x02000010,
+#endif /* DSL_VRX_DEVICE_VR11 */
    /** Line State: All line states that are not assigned at the moment */
    DSL_LINESTATE_UNKNOWN           = 0x03000000
 
@@ -1058,8 +1062,14 @@ typedef enum
          more details on how the line can become disabled. */
    DSL_AUTOBOOT_STATUS_DISABLED = 7,
    /**
+   Autoboot handling is currently shutdown (incl. sync and power down). */
+   DSL_AUTOBOOT_STATUS_SHUTDOWN_PD = 8,
+   /**
+   Autoboot handling is currently stopped (in power down mode). */
+   DSL_AUTOBOOT_STATUS_STOPPED_PD = 9,
+   /**
    Delimiter only */
-   DSL_AUTOBOOT_STATUS_LAST = 8
+   DSL_AUTOBOOT_STATUS_LAST = 10
    /* Might be extended if necessary */
 } DSL_AutobootStatGet_t;
 
@@ -4476,7 +4486,14 @@ typedef struct
 typedef enum
 {
    /**
-   Stops the autoboot handling. */
+   Stops the autoboot handling.
+   This command will terminate the autoboot state machine handler. It will stop
+   according threads and also free up related memory.
+   \note This functionality should be used alone only for debug/test cases
+   \note This command will terminate the autoboot handling without any
+         dedicated synchronization of the current line state. This means that
+         the line will further operate in "free running" FW controlled mode (as
+         long as there is no interaction by the SW/API required. */
    DSL_AUTOBOOT_CTRL_STOP = 0,
    /**
    Starts the autoboot handling. */
@@ -4520,7 +4537,19 @@ typedef enum
               on-chip bonding) operation this command forces a hard reset
               whereas the standard command does a soft reset only to avoid
               tearing down both lines. */
-   DSL_AUTOBOOT_CTRL_RESTART_FULL = 6
+   DSL_AUTOBOOT_CTRL_RESTART_FULL = 6,
+   /**
+   Stops the autoboot handling, including synchronization and power down.
+   In addition to the standard DSL_AUTOBOOT_CTRL_STOP command this command
+   will take care on the following addition steps before stopping the autoboot
+   thread and cleaning up the related memory.
+   - Synchronization of the line state: It will be taken care that the line
+     is deactivated, which means that any existing link will be teared down
+   - Powering off the AFE and line driver */
+   DSL_AUTOBOOT_CTRL_STOP_PD = 7,
+   /**
+   Delimiter only! */
+   DSL_AUTOBOOT_CTRL_LAST = 8
 } DSL_AutobootCtrlSet_t;
 
 /**
diff --git a/src/include/drv_dsl_cpe_api_config.h b/src/include/drv_dsl_cpe_api_config.h
index 857c501bd68c24cc8252e1b6a9156e8829c0c0bb..cd160581e2d657556f626315cd593e86d60a6be9 100644
--- a/src/include/drv_dsl_cpe_api_config.h
+++ b/src/include/drv_dsl_cpe_api_config.h
@@ -170,7 +170,7 @@
 #define PACKAGE_NAME "DSL CPE API driver"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "DSL CPE API driver 4.19.3"
+#define PACKAGE_STRING "DSL CPE API driver 4.20.1.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "drv_dsl_cpe_api"
@@ -179,7 +179,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.19.3"
+#define PACKAGE_VERSION "4.20.1.2"
 
 /* Version number of package */
-#define VERSION "4.19.3"
+#define VERSION "4.20.1.2"
diff --git a/src/include/drv_dsl_cpe_api_error.h b/src/include/drv_dsl_cpe_api_error.h
index 3be21a1c5527a661e41ba0a64aeb95d4ab30da48..4d3ebf6a8ba8f669627c4f477090512e6b3cddf6 100644
--- a/src/include/drv_dsl_cpe_api_error.h
+++ b/src/include/drv_dsl_cpe_api_error.h
@@ -116,6 +116,8 @@ typedef enum
    /* *********************************************************************** */
    /* *** Common Error Codes                                              *** */
    /* *********************************************************************** */
+   /** The command is not allowed in current autoboot state. */
+   DSL_ERR_NOT_SUPPORTED_IN_CURRENT_AUTOBOOT_STATE = -46,
    /** The requested values are not supported in the upstream
       (US) direction */
    DSL_ERR_NOT_SUPPORTED_IN_US_DIRECTION = -45,
diff --git a/src/include/drv_dsl_cpe_api_g997.h b/src/include/drv_dsl_cpe_api_g997.h
index aaf4c1f9f28133570fb8ac003ad6420a2e376bc9..9544de791769931b67b02095fd199f96847f0cee 100644
--- a/src/include/drv_dsl_cpe_api_g997.h
+++ b/src/include/drv_dsl_cpe_api_g997.h
@@ -1751,9 +1751,12 @@ typedef enum
    /**
    Retrain required with ADSL FW in T1.413 mode */
    LINIT_SUB_T1413_MODE = 11,
+#if defined(DSL_VRX_DEVICE_VR11)
    /**
    Clock set mode issue */
-   LINIT_SUB_S_PP_CLOCK_NEW = 12
+   LINIT_SUB_S_PP_CLOCK_NEW = 12,
+   LINIT_SUB_S_PP_ERB_INIT = 13,
+#endif /* defined(DSL_VRX_DEVICE_VR11) */
 } DSL_G997_LineInitSubStatus_t;
 
 /**
diff --git a/src/include/drv_dsl_cpe_device.h b/src/include/drv_dsl_cpe_device.h
index 985008407f2c162fc9244a05c91d5037ccaedc35..18eeaaad5e1b40d5908b1679026e42c9483201bc 100644
--- a/src/include/drv_dsl_cpe_device.h
+++ b/src/include/drv_dsl_cpe_device.h
@@ -200,6 +200,21 @@ DSL_Error_t DSL_DRV_DEV_LinkTerminate(
 
 #endif
 
+/**
+   This routine powers down link and de facto terminate all actions within DSL API
+
+   \param pContext
+      pointer to the DSL context
+*/
+
+#ifndef SWIG
+#if defined(DSL_VRX_DEVICE_VR11)
+DSL_Error_t DSL_DRV_DEV_LinkPowerDown(
+   DSL_Context_t *pContext
+);
+#endif
+#endif
+
 DSL_Error_t DSL_DRV_DEV_XtseSettingsCheck(
    DSL_IN DSL_Context_t *pContext,
    DSL_IN DSL_uint8_t *pXTSE);
diff --git a/src/include/drv_dsl_cpe_device_vrx.h b/src/include/drv_dsl_cpe_device_vrx.h
index 046157dc7630af2741228b446ce38f4fbeef71e7..4f73730863bb16eadf6dcd29a12ac4c8760d4c8f 100644
--- a/src/include/drv_dsl_cpe_device_vrx.h
+++ b/src/include/drv_dsl_cpe_device_vrx.h
@@ -68,7 +68,7 @@
 #define DSL_MIN_FW_VERSION_RA_MODE_GET         5,   1,  -1,  -1,  -1
 #define DSL_MIN_FW_VERSION_ADSL_PTM_BONDING  0xB,   0,   4,  -1,  -1
 #define DSL_MIN_FW_VERSION_VR11_R5           0xC,  -1,  -1,  -1,  -1
-
+#define DSL_MIN_FW_VERSION_VR11_R4MR2        0xC,   1,   4,  -1,  -1
 
 /*
    Internal device dependent configuration options
@@ -855,8 +855,7 @@ DSL_Error_t DSL_DRV_VRX_FirmwareVersionCheck(
    DSL_DEV_VersionCheck_t *pVerCheck);
 
 DSL_Error_t DSL_DRV_VRX_HandleMessage(
-   DSL_Context_t *pContext,
-   DSL_Error_t *pnErrChReadMessage);
+   DSL_Context_t *pContext);
 /* ============================================================================
    Definition of the MESSAGE OPCODES.
    ========================================================================= */
diff --git a/src/include/drv_dsl_cpe_intern.h b/src/include/drv_dsl_cpe_intern.h
index e281e544084fc433f232fc655d88b85a5232c27f..97011dbb896c6cf4aada44e567962aefa4324614 100644
--- a/src/include/drv_dsl_cpe_intern.h
+++ b/src/include/drv_dsl_cpe_intern.h
@@ -243,6 +243,10 @@ struct DSL_Context
    DSL_boolean_t bOrderlyShutDown;
    /** External Trigger to restart autoboot handling*/
    DSL_boolean_t bAutobootDisable;
+#if defined(DSL_VRX_DEVICE_VR11)
+   /** External trigger to power down DSL */
+   DSL_boolean_t bPowerDown;
+#endif
    /** Autoboot queue */
    DSL_DRV_Event_t autobootEvent;
    /** Autoboot thread activity flag */
@@ -542,6 +546,8 @@ struct DSL_Context
 
    DSL_boolean_t  bFwEventActivation;
    DSL_boolean_t  bFwEventRcvd;
+   DSL_Error_t    nFwEventLastReadErr;
+   DSL_LineStateValue_t nFwEventLineState;
 };
 
 #define DSL_EVENT2MASK(evt) ((DSL_uint32_t)(0x1 << ((DSL_uint32_t)evt)))
@@ -2321,6 +2327,11 @@ DSL_Error_t DSL_DRV_VRX_SendMsgModemFSMEventConfigure(
    DSL_IN DSL_boolean_t value);
 #endif
 
+#ifndef SWIG
+DSL_Error_t DSL_DRV_VRX_SendMsgFeatureMapGet(
+   DSL_IN DSL_Context_t *pContext,
+   DSL_IN DSL_uint8_t *pAck);
+#endif
 /*
    DSL IOCTL handler helpers stuff
 */
diff --git a/src/include/drv_dsl_cpe_msg_vrx.h b/src/include/drv_dsl_cpe_msg_vrx.h
index 9504c413a874bb902d84473b7c5126adddc23fae..77adb3f50294cc63e316bc5c9b861caa93a365ca 100644
--- a/src/include/drv_dsl_cpe_msg_vrx.h
+++ b/src/include/drv_dsl_cpe_msg_vrx.h
@@ -30,6 +30,7 @@
 
 DSL_void_t DSL_DRV_VRX_DumpMessage(
    DSL_Context_t *pContext,
+   const DSL_uint16_t nClass,
    const DSL_uint16_t nMsgId,
    const DSL_uint16_t *pData,
    const DSL_uint16_t nSize,
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_config_pmd.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_config_pmd.h
new file mode 100644
index 0000000000000000000000000000000000000000..ec850d71210f195901bf44a5d01c1acf1d78901b
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_config_pmd.h
@@ -0,0 +1,3856 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_CONFIG_PMD_H_
+#define _DRV_DSL_CPE_VRX_MSG_CONFIG_PMD_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _CONFIG_PMD_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+#define ACK_ModemFSM_StateGet_RESET_STATE 0
+#define ACK_ModemFSM_StateGet_READY_STATE 1
+#define ACK_ModemFSM_StateGet_FAIL_STATE 2
+#define ACK_ModemFSM_StateGet_DIAG_COMPLETE_STATE 3
+#define ACK_ModemFSM_StateGet_GHS_STATE 5
+#define ACK_ModemFSM_StateGet_FULLINIT_STATE 6
+#define ACK_ModemFSM_StateGet_STEADY_STATE_TC_NOSYNC 7
+#define ACK_ModemFSM_StateGet_STEADY_STATE_TC_SYNC 8
+#define ACK_ModemFSM_StateGet_DIAGMODE_STATE 9
+#define ACK_ModemFSM_StateGet_T1413_STATE 14
+#define ACK_ModemFSM_StateGet_PRE_FAIL_STATE 15
+#define ACK_ModemFSM_StateGet_GHS_BONDING_CLR_STATE 16
+#define ACK_ModemFSM_StateGet_MFD_STATE 18
+#define ACK_ModemFSM_StateGet_MFD_COMPLETE_STATE 19
+#define ACK_ModemFSM_StateGet_DSL_POWER_DOWN_STATE 20
+#define ACK_ModemFSM_StateGet_TEST_STATE 240
+#define ACK_ModemFSM_StateGet_L0 0
+#define ACK_ModemFSM_StateGet_L2 2
+#define ACK_ModemFSM_StateGet_L3 3
+#define EVT_ModemFSM_StateGet_RESET_STATE 0
+#define EVT_ModemFSM_StateGet_READY_STATE 1
+#define EVT_ModemFSM_StateGet_FAIL_STATE 2
+#define EVT_ModemFSM_StateGet_DIAG_COMPLETE_STATE 3
+#define EVT_ModemFSM_StateGet_GHS_STATE 5
+#define EVT_ModemFSM_StateGet_FULLINIT_STATE 6
+#define EVT_ModemFSM_StateGet_STEADY_STATE_TC_NOSYNC 7
+#define EVT_ModemFSM_StateGet_STEADY_STATE_TC_SYNC 8
+#define EVT_ModemFSM_StateGet_DIAGMODE_STATE 9
+#define EVT_ModemFSM_StateGet_T1413_STATE 14
+#define EVT_ModemFSM_StateGet_PRE_FAIL_STATE 15
+#define EVT_ModemFSM_StateGet_GHS_BONDING_CLR_STATE 16
+#define EVT_ModemFSM_StateGet_MFD_STATE 18
+#define EVT_ModemFSM_StateGet_MFD_COMPLETE_STATE 19
+#define EVT_ModemFSM_StateGet_DSL_POWER_DOWN_STATE 20
+#define EVT_ModemFSM_StateGet_TEST_STATE 240
+#define EVT_ModemFSM_StateGet_L0 0
+#define EVT_ModemFSM_StateGet_L2 2
+#define EVT_ModemFSM_StateGet_L3 3
+#define EVT_ModemReady_MRERR_OK 0x0
+#define EVT_ModemReady_MRWARN_OK 0x0
+#define CMD_ModemFSM_StateSet_LINKINI 2
+#define CMD_ModemFSM_StateSet_TERMINATE 4
+#define CMD_ModemFSM_StateSet_POWERDOWN 7
+#define CMD_ModemFSM_StateSet_TESTSTA 8
+#define CMD_ModemFSM_StateSet_MFD 9
+#define ALM_ModemFSM_FailReasonGet_S_OK 0x0
+#define ALM_ModemFSM_FailReasonGet_S_CODESWAP 0x1
+#define ALM_ModemFSM_FailReasonGet_S_MINRATE_DS 0x4
+#define ALM_ModemFSM_FailReasonGet_S_INIT 0x5
+#define ALM_ModemFSM_FailReasonGet_S_MODE 0x6
+#define ALM_ModemFSM_FailReasonGet_S_TIMEOUT 0x9
+#define ALM_ModemFSM_FailReasonGet_S_XDSL_MODE 0xA
+#define ALM_ModemFSM_FailReasonGet_S_PORT_MODE 0xB
+#define ALM_ModemFSM_FailReasonGet_S_T1413_MODE 0xC
+#define ALM_ModemFSM_FailReasonGet_S_GFAST_MODE 0xD
+#define ALM_ModemFSM_FailReasonGet_S_FW_RETRY 0xE
+#define ALM_ModemFSM_FailReasonGet_S_FW_HYBRID 0xF
+#define ALM_ModemFSM_FailReasonGet_S_LOS 0x10
+#define ALM_ModemFSM_FailReasonGet_S_LOF 0x11
+#define ALM_ModemFSM_FailReasonGet_S_LPR 0x12
+#define ALM_ModemFSM_FailReasonGet_S_LOM 0x13
+#define ALM_ModemFSM_FailReasonGet_S_FAST_LOS 0x14
+#define ALM_ModemFSM_FailReasonGet_S_ESE 0x15
+#define ALM_ModemFSM_FailReasonGet_S_SESX 0x16
+#define ALM_ModemFSM_FailReasonGet_S_ESX 0x17
+#define ALM_ModemFSM_FailReasonGet_S_OOS0 0x18
+#define ALM_ModemFSM_FailReasonGet_S_LCD0 0x20
+#define ALM_ModemFSM_FailReasonGet_S_NCD0 0x22
+#define ALM_ModemFSM_FailReasonGet_S_CRC_DS 0x24
+#define ALM_ModemFSM_FailReasonGet_S_PP_DRIVER 0x25
+#define ALM_ModemFSM_FailReasonGet_S_INTENDED_LOCAL_SHUTDOWN 0x26
+#define ALM_ModemFSM_FailReasonGet_S_HW 0x27
+#define ALM_ModemFSM_FailReasonGet_S_CALIBRATION 0x28
+#define ALM_ModemFSM_FailReasonGet_S_PP_CLOCK_NEW 0x29
+#define ALM_ModemFSM_FailReasonGet_S_PP_ERB_INIT 0x2A
+#define ALM_ModemFSM_FailReasonGet_E_OK 0x0
+#define ALM_ModemFSM_FailReasonGet_E_CONFIG 0x1
+#define ALM_ModemFSM_FailReasonGet_E_NOTFEASIBLE 0x2
+#define ALM_ModemFSM_FailReasonGet_E_COMM 0x3
+#define ALM_ModemFSM_FailReasonGet_E_COMMCRC 0x4
+#define ALM_ModemFSM_FailReasonGet_E_NOPEER 0x5
+#define ALM_ModemFSM_FailReasonGet_E_CHIPSET 0x6
+#define ALM_ModemFSM_FailReasonGet_E_UNKNOWN 0x7
+#define ALM_ModemFSM_FailReasonGet_E_RESERVED 0x8
+#define ALM_ModemFSM_FailReasonGet_E_SHOWTIME_NE 0x10
+#define ALM_ModemFSM_FailReasonGet_E_SHOWTIME_FE 0x11
+#define ACK_ModemFSM_FailReasonGet_S_OK 0x0
+#define ACK_ModemFSM_FailReasonGet_S_CODESWAP 0x1
+#define ACK_ModemFSM_FailReasonGet_S_MINRATE_DS 0x4
+#define ACK_ModemFSM_FailReasonGet_S_INIT 0x5
+#define ACK_ModemFSM_FailReasonGet_S_MODE 0x6
+#define ACK_ModemFSM_FailReasonGet_S_TIMEOUT 0x9
+#define ACK_ModemFSM_FailReasonGet_S_XDSL_MODE 0xA
+#define ACK_ModemFSM_FailReasonGet_S_PORT_MODE 0xB
+#define ACK_ModemFSM_FailReasonGet_S_T1413_MODE 0xC
+#define ACK_ModemFSM_FailReasonGet_S_GFAST_MODE 0xD
+#define ACK_ModemFSM_FailReasonGet_S_FW_RETRY 0xE
+#define ACK_ModemFSM_FailReasonGet_S_FW_HYBRID 0xF
+#define ACK_ModemFSM_FailReasonGet_S_LOS 0x10
+#define ACK_ModemFSM_FailReasonGet_S_LOF 0x11
+#define ACK_ModemFSM_FailReasonGet_S_LPR 0x12
+#define ACK_ModemFSM_FailReasonGet_S_LOM 0x13
+#define ACK_ModemFSM_FailReasonGet_S_FAST_LOS 0x14
+#define ACK_ModemFSM_FailReasonGet_S_ESE 0x15
+#define ACK_ModemFSM_FailReasonGet_S_SESX 0x16
+#define ACK_ModemFSM_FailReasonGet_S_ESX 0x17
+#define ACK_ModemFSM_FailReasonGet_S_OOS0 0x18
+#define ACK_ModemFSM_FailReasonGet_S_LCD0 0x20
+#define ACK_ModemFSM_FailReasonGet_S_NCD0 0x22
+#define ACK_ModemFSM_FailReasonGet_S_CRC_DS 0x24
+#define ACK_ModemFSM_FailReasonGet_S_PP_DRIVER 0x25
+#define ACK_ModemFSM_FailReasonGet_S_INTENDED_LOCAL_SHUTDOWN 0x26
+#define ACK_ModemFSM_FailReasonGet_S_HW 0x27
+#define ACK_ModemFSM_FailReasonGet_S_CALIBRATION 0x28
+#define ACK_ModemFSM_FailReasonGet_S_PP_CLOCK_NEW 0x29
+#define ACK_ModemFSM_FailReasonGet_S_PP_ERB_INIT 0x2A
+#define ACK_ModemFSM_FailReasonGet_E_OK 0x0
+#define ACK_ModemFSM_FailReasonGet_E_CONFIG 0x1
+#define ACK_ModemFSM_FailReasonGet_E_NOTFEASIBLE 0x2
+#define ACK_ModemFSM_FailReasonGet_E_COMM 0x3
+#define ACK_ModemFSM_FailReasonGet_E_COMMCRC 0x4
+#define ACK_ModemFSM_FailReasonGet_E_NOPEER 0x5
+#define ACK_ModemFSM_FailReasonGet_E_CHIPSET 0x6
+#define ACK_ModemFSM_FailReasonGet_E_UNKNOWN 0x7
+#define ACK_ModemFSM_FailReasonGet_E_RESERVED 0x8
+#define ACK_ModemFSM_FailReasonGet_E_SHOWTIME_NE 0x10
+#define ACK_ModemFSM_FailReasonGet_E_SHOWTIME_FE 0x11
+#define ACK_TxL3RequestStatusGet_L3PENDING 0
+#define ACK_TxL3RequestStatusGet_L3REJECTED 1
+#define ACK_TxL3RequestStatusGet_L3ACCEPTED 2
+#define ACK_TxL3RequestStatusGet_L3FAIL 3
+#define ACK_TxL3ReqFailReasonGet_BUSY 0x01
+#define ACK_TxL3ReqFailReasonGet_INVALID 0x02
+#define ACK_TxL3ReqFailReasonGet_STATE_NOT_DESIRED 0x03
+#define ACK_TxL3ReqFailReasonGet_NOT_L0 0x50
+#define ACK_TxL3ReqFailReasonGet_TIMEOUT 0x90
+#define CMD_ModemFSM_Freeze_FREEZE_OFF 0
+#define CMD_ModemFSM_Freeze_PERIODIC 1
+#define CMD_ModemFSM_Freeze_RP_CHDISC2 2
+#define CMD_ModemFSM_Freeze_MEDLEY 4
+#define CMD_ModemFSM_Freeze_SHOWTIME 8
+#define CMD_ModemFSM_Freeze_SHOWTIME_GI1 16
+#define ACK_FW_ImageInfoGet_STANDALONE 0x0
+#define ACK_FW_ImageInfoGet_COMBINED 0x1
+#define ACK_FW_ImageInfoGet_VDSL_FW 0x0
+#define ACK_FW_ImageInfoGet_ADSL_FW 0x1
+#define ACK_FW_ImageInfoGet_CPE_FW 0x1
+#define CMD_APS_Status_Set_1PORT 1
+#define CMD_APS_Status_Set_2PORT 2
+#define CMD_APS_Status_Set_APIDEF 0
+#define CMD_APS_Status_Set_ADSL 1
+#define CMD_APS_Status_Set_VDSL 2
+#define CMD_APS_Status_Set_FAST 3
+#define CMD_APS_Status_Set_AUTO 0
+#define CMD_APS_Status_Set_STANDARD 1
+#define CMD_APS_Status_Set_NONSTANDARD 2
+#define CMD_APS_Status_Set_GHSMODE 1
+#define CMD_APS_Status_Set_T1413MODE 2
+#define CMD_BearerCh0_DS_Set_FV 21
+#define CMD_BearerCh0_DS_Set_MAX_BER3 0
+#define CMD_BearerCh0_DS_Set_MAX_BER5 1
+#define CMD_BearerCh0_DS_Set_MAX_BER7 2
+#define ACK_BearerCh0_DS_Set_FV 21
+#define CMD_BearerCh0_US_Set_FV 21
+#define CMD_BearerCh0_US_Set_MAX_BER3 0
+#define CMD_BearerCh0_US_Set_MAX_BER5 1
+#define CMD_BearerCh0_US_Set_MAX_BER7 2
+#define ACK_BearerCh0_US_Set_FV 21
+#define CMD_InitPolicySet_MAX_NETRATE 0x0
+#define CMD_InitPolicySet_MAX_INP 0x1
+#define CMD_ErasureControlSet_MAX_NETRATE 0x0
+#define CMD_ErasureControlSet_MAX_INP 0x1
+#define CMD_Misc_ConfigSet_GHSMODE 0x0
+#define CMD_Misc_ConfigSet_T1413MODE 0x1
+#define CMD_OperatorSelect_TELCO_OFF 0
+#define CMD_OperatorSelect_TELCO_DTAG 1
+#define CMD_OperatorSelect_TELCO_BT 2
+#define CMD_OperatorSelect_TELCO_TS 3
+#define CMD_OperatorSelect_TELCO_FT 4
+#define CMD_OperatorSelect_TELCO_KPN 5
+#define CMD_OperatorSelect_TELCO_TELIA 6
+#define CMD_OperatorSelect_TELCO_FIBERHOME 7
+#define CMD_OperatorSelect_TELCO_CT 8
+#define CMD_OperatorSelect_TELCO_TW 9
+#define CMD_OperatorSelect_TELCO_VODAFONE 10
+#define CMD_OperatorSelect_TELCO_CN 11
+#define CMD_OperatorSelect_TELCO_OTE 12
+#define CMD_OperatorSelect_TELCO_TELMEX 13
+#define CMD_OperatorSelect_TELCO_ATT 14
+#define CMD_OperatorSelect_TELCO_SWISSCOM 15
+#define CMD_OperatorSelect_TELCO_NETGEAR 16
+#define CMD_OperatorSelect_TELCO_CTL 17
+#define CMD_OperatorSelect_TELCO_TI 17
+#define ACK_OperatorSelectionGet_TELCO_OFF 0
+#define ACK_OperatorSelectionGet_TELCO_DTAG 1
+#define ACK_OperatorSelectionGet_TELCO_BT 2
+#define ACK_OperatorSelectionGet_TELCO_TS 3
+#define ACK_OperatorSelectionGet_TELCO_FT 4
+#define ACK_OperatorSelectionGet_TELCO_KPN 5
+#define ACK_OperatorSelectionGet_TELCO_TELIA 6
+#define ACK_OperatorSelectionGet_TELCO_FIBERHOME 7
+#define ACK_OperatorSelectionGet_TELCO_CT 8
+#define ACK_OperatorSelectionGet_TELCO_TW 9
+#define ACK_OperatorSelectionGet_TELCO_VODAFONE 10
+#define ACK_OperatorSelectionGet_TELCO_CN 11
+#define ACK_OperatorSelectionGet_TELCO_OTE 12
+#define ACK_OperatorSelectionGet_TELCO_TELMEX 13
+#define ACK_OperatorSelectionGet_TELCO_ATT 14
+#define ACK_OperatorSelectionGet_TELCO_SWISSCOM 15
+#define ACK_OperatorSelectionGet_TELCO_NETGEAR 16
+#define ACK_OperatorSelectionGet_TELCO_CTL 17
+#define CMD_ClockSet_M1 1
+#define CMD_ClockSet_M2 2
+#define CMD_ClockSet_M3 3
+#define CMD_ClockSet_M4 4
+#define CMD_PPE_ClockConfigure_FSCALE_AUTO_OFF 0
+#define CMD_PPE_ClockConfigure_FSCALE_AUTO_A 1
+#define CMD_PPE_ClockConfigure_FSCALE_AUTO_B 2
+#define CMD_PPE_ClockConfigure_FSCALE_AUTO_C 3
+#define ACK_PPE_ClockGet_M1 1
+#define ACK_PPE_ClockGet_M2 2
+#define ACK_PPE_ClockGet_M3 3
+#define ACK_PPE_ClockGet_M4 4
+#define ACK_PPE_ClockConfigGet_FSCALE_AUTO_OFF 0
+#define ACK_PPE_ClockConfigGet_FSCALE_AUTO_A 1
+#define ACK_PPE_ClockConfigGet_FSCALE_AUTO_B 2
+#define ACK_PPE_ClockConfigGet_FSCALE_AUTO_C 3
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_ModemFSM_StateGet */
+#define CMD_MODEMFSM_STATEGET 0x0002
+
+/**
+   Requests information about the current state of the modem state-machine.The
+   command can be sent in all states of the modem state machine (see Figure 2).
+*/
+typedef struct CMD_ModemFSM_StateGet CMD_ModemFSM_StateGet_t;
+
+/** Message ID for ACK_ModemFSM_StateGet */
+#define ACK_MODEMFSM_STATEGET 0x0002
+
+/**
+   Returns information about the current state of the modem state-machine.
+*/
+typedef struct ACK_ModemFSM_StateGet ACK_ModemFSM_StateGet_t;
+
+/** Message ID for EVT_ModemFSM_StateGet */
+#define EVT_MODEMFSM_STATEGET 0x0002
+
+/**
+   Returns information about the current state of the modem state-machine. This
+   message is sent autonomously, if the modem enters a new state and reporting
+   is enabled for that state (see CMD_ModemFSM_EventConfigure).
+*/
+typedef struct EVT_ModemFSM_StateGet EVT_ModemFSM_StateGet_t;
+
+/** Message ID for EVT_ModemReady */
+#define EVT_MODEMREADY 0xFF02
+
+/**
+   Autonomous message indicating that the modem online code was reached and that
+   initialization was completed. The management entity may not perform any
+   query-response messaging until the EVT_ModemReady message is received. Its
+   generation cannot be disabled. If it is not received this indicates a
+   problem, possibly with the boot sequence. If the message is received, it
+   contains a result code that may also indicate that an error was detected by
+   the firmware during initialization.
+*/
+typedef struct EVT_ModemReady EVT_ModemReady_t;
+
+/** Message ID for CMD_ModemFSM_StateSet */
+#define CMD_MODEMFSM_STATESET 0x0041
+
+/**
+   Controls state transitions of the modem state-machine.
+*/
+typedef struct CMD_ModemFSM_StateSet CMD_ModemFSM_StateSet_t;
+
+/** Message ID for ACK_ModemFSM_StateSet */
+#define ACK_MODEMFSM_STATESET 0x0041
+
+/**
+   Acknowledgement for message CMD_ModemFSM_StateSet
+*/
+typedef struct ACK_ModemFSM_StateSet ACK_ModemFSM_StateSet_t;
+
+/** Message ID for ALM_ModemFSM_FailReasonGet */
+#define ALM_MODEMFSM_FAILREASONGET 0x0502
+
+/**
+   Reports failure information after entering FAIL state. This message is sent
+   autonomously without host request after entrance into FAIL was indicated by
+   EVT_ModemFSM_StateGet. Both messages are generated only if enabled with
+   CMD_ModemFSM_EventConfigure (common Bit E8 "FAIL").
+*/
+typedef struct ALM_ModemFSM_FailReasonGet ALM_ModemFSM_FailReasonGet_t;
+
+/** Message ID for CMD_ModemFSM_FailReasonGet */
+#define CMD_MODEMFSM_FAILREASONGET 0x0502
+
+/**
+   Requests failure information after entering FAIL state.
+*/
+typedef struct CMD_ModemFSM_FailReasonGet CMD_ModemFSM_FailReasonGet_t;
+
+/** Message ID for ACK_ModemFSM_FailReasonGet */
+#define ACK_MODEMFSM_FAILREASONGET 0x0502
+
+/**
+   Returns failure information after entering FAIL state.
+*/
+typedef struct ACK_ModemFSM_FailReasonGet ACK_ModemFSM_FailReasonGet_t;
+
+/** Message ID for CMD_ModemFSM_OptionsSet */
+#define CMD_MODEMFSM_OPTIONSSET 0x0449
+
+/**
+   Configuration of options for the modem state machine.
+*/
+typedef struct CMD_ModemFSM_OptionsSet CMD_ModemFSM_OptionsSet_t;
+
+/** Message ID for ACK_ModemFSM_OptionsSet */
+#define ACK_MODEMFSM_OPTIONSSET 0x0449
+
+/**
+   Acknowledgement to CMD_ModemFSM_OptionsSet.
+*/
+typedef struct ACK_ModemFSM_OptionsSet ACK_ModemFSM_OptionsSet_t;
+
+/** Message ID for CMD_ModemOptionsSet */
+#define CMD_MODEMOPTIONSSET 0x0062
+
+/**
+   Configuration of options for the modem state machine.
+*/
+typedef struct CMD_ModemOptionsSet CMD_ModemOptionsSet_t;
+
+/** Message ID for ACK_ModemOptionsSet */
+#define ACK_MODEMOPTIONSSET 0x0062
+
+/**
+   Acknowledgement to CMD_ModemOptionsSet.
+*/
+typedef struct ACK_ModemOptionsSet ACK_ModemOptionsSet_t;
+
+/** Message ID for CMD_ModemFSM_EventConfigure */
+#define CMD_MODEMFSM_EVENTCONFIGURE 0x0049
+
+/**
+   Sets options for the modem state-machine. Enables/Disables autonomous
+   messages for specific state transitions (EVT_ModemFSM_StateGet). The EVT
+   message is generated after entering the particular state listed in the
+   parameter description of the enable bits.
+*/
+typedef struct CMD_ModemFSM_EventConfigure CMD_ModemFSM_EventConfigure_t;
+
+/** Message ID for ACK_ModemFSM_EventConfigure */
+#define ACK_MODEMFSM_EVENTCONFIGURE 0x0049
+
+/**
+   Acknowledgement for CMD_ModemFSM_EventConfigure. (Enabling/Disabling EVENT
+   messages (EVTs) for specific state transitions.)
+*/
+typedef struct ACK_ModemFSM_EventConfigure ACK_ModemFSM_EventConfigure_t;
+
+/** Message ID for CMD_FailuresNE_AlarmConfigure */
+#define CMD_FAILURESNE_ALARMCONFIGURE 0x0149
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific near-end
+   line failures. If the corresponding Enable bit for a line failure is set,
+   then the modem firmware will send an autonomous message ALM_LineFailureNE_Get
+   if this failure occurs.
+*/
+typedef struct CMD_FailuresNE_AlarmConfigure CMD_FailuresNE_AlarmConfigure_t;
+
+/** Message ID for ACK_FailuresNE_AlarmConfigure */
+#define ACK_FAILURESNE_ALARMCONFIGURE 0x0149
+
+/**
+   Acknowledgement to CMD_FailuresNE_AlarmConfigure.
+*/
+typedef struct ACK_FailuresNE_AlarmConfigure ACK_FailuresNE_AlarmConfigure_t;
+
+/** Message ID for CMD_FailuresFE_AlarmConfigure */
+#define CMD_FAILURESFE_ALARMCONFIGURE 0x0249
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific far-end
+   line failures. If the corresponding Enable bit for a line failure is set,
+   then the modem firmware will send an autonomous message ALM_LineFailureFE_Get
+   if this failure occurs.
+*/
+typedef struct CMD_FailuresFE_AlarmConfigure CMD_FailuresFE_AlarmConfigure_t;
+
+/** Message ID for ACK_FailuresFE_AlarmConfigure */
+#define ACK_FAILURESFE_ALARMCONFIGURE 0x0249
+
+/**
+   Acknowledgement to CMD_FailuresFE_AlarmConfigure.
+*/
+typedef struct ACK_FailuresFE_AlarmConfigure ACK_FailuresFE_AlarmConfigure_t;
+
+/** Message ID for CMD_ReInitNE_Configure */
+#define CMD_REINITNE_CONFIGURE 0x0549
+
+/**
+   Configures re-initialization triggers for near-end failure conditions in
+   modem state STEADY STATE transmission (see Figure 1). This command is
+   accepted in RESET state only.
+*/
+typedef struct CMD_ReInitNE_Configure CMD_ReInitNE_Configure_t;
+
+/** Message ID for ACK_ReInitNE_Configure */
+#define ACK_REINITNE_CONFIGURE 0x0549
+
+/**
+   Acknowledgment to CMD_ReInitNE_Configure (Configuration of re-initialization
+   triggers for near-end failures).
+*/
+typedef struct ACK_ReInitNE_Configure ACK_ReInitNE_Configure_t;
+
+/** Message ID for CMD_ReinitThreshConfigure */
+#define CMD_REINITTHRESHCONFIGURE 0x1E62
+
+/**
+   Configuration of reinitialization trigger definitions.
+*/
+typedef struct CMD_ReinitThreshConfigure CMD_ReinitThreshConfigure_t;
+
+/** Message ID for ACK_ReinitThreshConfigure */
+#define ACK_REINITTHRESHCONFIGURE 0x1E62
+
+/**
+   Acknowledgement for the message ACK_ReinitThreshConfigure.
+*/
+typedef struct ACK_ReinitThreshConfigure ACK_ReinitThreshConfigure_t;
+
+/** Message ID for CMD_ShutdownRequest */
+#define CMD_SHUTDOWNREQUEST 0x0341
+
+/**
+   Triggers a shutdown request, either as "L3 orderly shutdown" towards the
+   remote side or as "locally forced shutdown" to the DSL-FW without sending a
+   request to the remote side.After an "L3 orderly shutdown" request was
+   accepted by the CO, the following shall happen: The CPE-Host forces L3 entry
+   with transition to RESET state by applying CMD_ModemFSM_StateGet.A "locally
+   forced shutdown" always results in exiting Showtime.
+*/
+typedef struct CMD_ShutdownRequest CMD_ShutdownRequest_t;
+
+/** Message ID for ACK_ShutdownRequest */
+#define ACK_SHUTDOWNREQUEST 0x0341
+
+/**
+   Acknowledgement for CMD_ShutdownRequest.
+*/
+typedef struct ACK_ShutdownRequest ACK_ShutdownRequest_t;
+
+/** Message ID for CMD_RxL3RequestStatusGet */
+#define CMD_RXL3REQUESTSTATUSGET 0x0402
+
+/**
+   Requests information about L3 orderly shutdown requests initiated from the
+   remote side.Applying CMD_RxL3RequestStatusGet allows the host to determine
+   whether a near-end LOS or LOM failure is due to an L3 shutdown or an
+   unexpected line failure.
+*/
+typedef struct CMD_RxL3RequestStatusGet CMD_RxL3RequestStatusGet_t;
+
+/** Message ID for ACK_RxL3RequestStatusGet */
+#define ACK_RXL3REQUESTSTATUSGET 0x0402
+
+/**
+   Acknowledgement for CMD_RxL3RequestStatusGet.As long as the modem is in L0
+   (Showtime), an ATU-R will automatically respond to any L3 request from the
+   ATU-C by sending an accept message.  If the ATU-R is in L2 mode when it
+   receives the request, it will send a reject message. Upon receiving an
+   acceptance, the remote side should enter L3 state and shut off its
+   transmitter.
+*/
+typedef struct ACK_RxL3RequestStatusGet ACK_RxL3RequestStatusGet_t;
+
+/** Message ID for CMD_TxL3RequestStatusGet */
+#define CMD_TXL3REQUESTSTATUSGET 0x1402
+
+/**
+   Requests the status of a near-end initiated L3 shutdown request. If the
+   remote side accepted the request, in ADSL the host will force L3 entry using
+   CMD_ModemFSM_StateSet.
+*/
+typedef struct CMD_TxL3RequestStatusGet CMD_TxL3RequestStatusGet_t;
+
+/** Message ID for ACK_TxL3RequestStatusGet */
+#define ACK_TXL3REQUESTSTATUSGET 0x1402
+
+/**
+   Acknowledgement for CMD_TxL3RequestStatusGet.
+*/
+typedef struct ACK_TxL3RequestStatusGet ACK_TxL3RequestStatusGet_t;
+
+/** Message ID for CMD_TxL3ReqFailReasonGet */
+#define CMD_TXL3REQFAILREASONGET 0x1502
+
+/**
+   Requests the fail reason of a failed near-end initiated L3 request. (see also
+   ACK_TxL3RequestStatusGet)
+*/
+typedef struct CMD_TxL3ReqFailReasonGet CMD_TxL3ReqFailReasonGet_t;
+
+/** Message ID for ACK_TxL3ReqFailReasonGet */
+#define ACK_TXL3REQFAILREASONGET 0x1502
+
+/**
+   Reports the fail reason of a near-end initiated L3 request, as response to
+   CMD_TxL3ReqFailReasonGet.
+*/
+typedef struct ACK_TxL3ReqFailReasonGet ACK_TxL3ReqFailReasonGet_t;
+
+/** Message ID for CMD_ModemFSM_Freeze */
+#define CMD_MODEMFSM_FREEZE 0x2C44
+
+/**
+   The message selects and enables one of several points during the
+   initialization process where -after a normal link start had been triggered-
+   the modem FSM "freezes". Freezing means the CO can be disconnected from the
+   line and still the CPE continues transmitting the signal of the current
+   phase. To exit from the freeze a state transition to RESET state has to be
+   triggered. In case of a Showtime Freeze the reinit-triggers do not have any
+   effect.
+*/
+typedef struct CMD_ModemFSM_Freeze CMD_ModemFSM_Freeze_t;
+
+/** Message ID for ACK_ModemFSM_Freeze */
+#define ACK_MODEMFSM_FREEZE 0x2C44
+
+/**
+   Acknowledgement for message CMD_ModemFSM_Freeze.
+*/
+typedef struct ACK_ModemFSM_Freeze ACK_ModemFSM_Freeze_t;
+
+/** Message ID for CMD_FW_ImageInfoGet */
+#define CMD_FW_IMAGEINFOGET 0xD103
+
+/**
+   Requests information about the loaded FW image. This info is used e.g. for
+   swapping between ADSL and VDSL.
+*/
+typedef struct CMD_FW_ImageInfoGet CMD_FW_ImageInfoGet_t;
+
+/** Message ID for ACK_FW_ImageInfoGet */
+#define ACK_FW_IMAGEINFOGET 0xD103
+
+/**
+   Provides the information about the FW image requested by CMD_FW_ImageInfoGet
+*/
+typedef struct ACK_FW_ImageInfoGet ACK_FW_ImageInfoGet_t;
+
+/** Message ID for CMD_APS_Status_Set */
+#define CMD_APS_STATUS_SET 0x2062
+
+/**
+   The message informs the FW about the status of SW parameters relevant for the
+   multimode state machine (APS). This can be used to trace the APS behaviour
+   with FW tools. The message does not influence the APS behaviour.
+*/
+typedef struct CMD_APS_Status_Set CMD_APS_Status_Set_t;
+
+/** Message ID for ACK_APS_Status_Set */
+#define ACK_APS_STATUS_SET 0x2062
+
+/**
+   Acknowledgement for message CMD_APS_Status_Set.
+*/
+typedef struct ACK_APS_Status_Set ACK_APS_Status_Set_t;
+
+/** Message ID for CMD_XTSE_Configure */
+#define CMD_XTSE_CONFIGURE 0x0045
+
+/**
+   Configuration of the VTU Transmission System Enabling (XTSE).Configures the
+   transmission system coding types to be supported on the line (VDSL flavour
+   and annex support).(References: Section 7.3.1.1.1 of G.997.1 and G.994.1 Amd4
+   [10] Tables "Standard information field - SPar(1) coding")
+*/
+typedef struct CMD_XTSE_Configure CMD_XTSE_Configure_t;
+
+/** Message ID for ACK_XTSE_Configure */
+#define ACK_XTSE_CONFIGURE 0x0045
+
+/**
+   Acknowledgement for message CMD_XTSE_Configure.
+*/
+typedef struct ACK_XTSE_Configure ACK_XTSE_Configure_t;
+
+/** Message ID for CMD_BandControl_US_Set */
+#define CMD_BANDCONTROL_US_SET 0x2548
+
+/**
+   Controls the upstream band usage.The message can only be used for DMTscope
+   tests without handshake and training phases.
+*/
+typedef struct CMD_BandControl_US_Set CMD_BandControl_US_Set_t;
+
+/** Message ID for ACK_BandControl_US_Set */
+#define ACK_BANDCONTROL_US_SET 0x2548
+
+/**
+   Acknowledgement for message CMD_BandControl_US_Set.
+*/
+typedef struct ACK_BandControl_US_Set ACK_BandControl_US_Set_t;
+
+/** Message ID for CMD_PSD_Set */
+#define CMD_PSD_SET 0x2348
+
+/**
+   Configuration of PSD and Power parameters. Only used for DMTscope tests
+   without handshake and training phases.
+*/
+typedef struct CMD_PSD_Set CMD_PSD_Set_t;
+
+/** Message ID for ACK_PSD_Set */
+#define ACK_PSD_SET 0x2348
+
+/**
+   Acknowledgement for the message CMD_PSD_Set.
+*/
+typedef struct ACK_PSD_Set ACK_PSD_Set_t;
+
+/** Message ID for CMD_PSD_BreakpointsTxUS_Set */
+#define CMD_PSD_BREAKPOINTSTXUS_SET 0x2848
+
+/**
+   Specifies the maximum upstream transmit PSD by means of breakpoints.To be
+   used only for DMTscope tests without handshake and training phases.
+*/
+typedef struct CMD_PSD_BreakpointsTxUS_Set CMD_PSD_BreakpointsTxUS_Set_t;
+
+/** Message ID for ACK_PSD_BreakpointsTxUS_Set */
+#define ACK_PSD_BREAKPOINTSTXUS_SET 0x2848
+
+/**
+   Acknowledgement for the message CMD_PSD_BreakpointsTxUS_Set.
+*/
+typedef struct ACK_PSD_BreakpointsTxUS_Set ACK_PSD_BreakpointsTxUS_Set_t;
+
+/** Message ID for  CMD_PSD_Calibration_DS_Set */
+#define  CMD_PSD_CALIBRATION_DS_SET 0x5748
+
+/**
+   Sends downstream calibration information for "per-tone" test parameters. It
+   is effective for Loop Diagnostic Mode (DELT) and Showtime. It is the
+   responsibility of the manufacturer to provide the data.
+*/
+typedef struct  CMD_PSD_Calibration_DS_Set CMD_PSD_Calibration_DS_Set_t;
+
+/** Message ID for ACK_PSD_Calibration_DS_Set */
+#define ACK_PSD_CALIBRATION_DS_SET 0x5748
+
+/**
+   Acknowledgement for the message CMD_PSD_Calibration_DS_Set.
+*/
+typedef struct ACK_PSD_Calibration_DS_Set ACK_PSD_Calibration_DS_Set_t;
+
+/** Message ID for  CMD_PSD_Calibration_US_Set */
+#define  CMD_PSD_CALIBRATION_US_SET 0x5848
+
+/**
+   Sends upstream calibration information for the upstream transmit PSD. It is
+   effective for loop diagnostic mode (DELT) and Showtime. It is the
+   responsibility of the manufacturer to provide the data.
+*/
+typedef struct  CMD_PSD_Calibration_US_Set CMD_PSD_Calibration_US_Set_t;
+
+/** Message ID for ACK_PSD_Calibration_US_Set */
+#define ACK_PSD_CALIBRATION_US_SET 0x5848
+
+/**
+   Acknowledgement for the message CMD_PSD_Calibration_US_Set.
+*/
+typedef struct ACK_PSD_Calibration_US_Set ACK_PSD_Calibration_US_Set_t;
+
+/** Message ID for CMD_PSD_OptionsSet */
+#define CMD_PSD_OPTIONSSET 0x0262
+
+/**
+   Configuration of PSD related options.
+*/
+typedef struct CMD_PSD_OptionsSet CMD_PSD_OptionsSet_t;
+
+/** Message ID for ACK_PSD_OptionsSet */
+#define ACK_PSD_OPTIONSSET 0x0262
+
+/**
+   Acknowledgement to CMD_PSD_OptionsSet.
+*/
+typedef struct ACK_PSD_OptionsSet ACK_PSD_OptionsSet_t;
+
+/** Message ID for CMD_UPBO_KL0Get */
+#define CMD_UPBO_KL0GET 0xD603
+
+/**
+   Requests the electrical loop length estimate kl0.
+*/
+typedef struct CMD_UPBO_KL0Get CMD_UPBO_KL0Get_t;
+
+/** Message ID for ACK_UPBO_KL0Get */
+#define ACK_UPBO_KL0GET 0xD603
+
+/**
+   Delivers the data requested by CMD_UPBO_KL0Get.(Section 7.5.1.23 of G.997.1
+   [11])
+*/
+typedef struct ACK_UPBO_KL0Get ACK_UPBO_KL0Get_t;
+
+/** Message ID for CMD_PBO_AELEM_Status_Get */
+#define CMD_PBO_AELEM_STATUS_GET 0xEA03
+
+/**
+   Requests status parameters for the Upstream  Power  Back-Off  (UPBO)
+   alternative  electrical  length  estimation  method (AELEM).
+*/
+typedef struct CMD_PBO_AELEM_Status_Get CMD_PBO_AELEM_Status_Get_t;
+
+/** Message ID for ACK_PBO_AELEM_Status_Get */
+#define ACK_PBO_AELEM_STATUS_GET 0xEA03
+
+/**
+   Upstream  Power  Back-Off  (UPBO)  status  parameters  for  the  alternative
+   electrical  length  estimation  method (AELEM) are reported.
+*/
+typedef struct ACK_PBO_AELEM_Status_Get ACK_PBO_AELEM_Status_Get_t;
+
+/** Message ID for CMD_NoiseMarginDeltaSet */
+#define CMD_NOISEMARGINDELTASET 0x1C45
+
+/**
+   Configuration of a target noise margin delta, which is added to the target
+   noise margin value configured at the CO (and in case of the CPE received from
+   there). The resulting value is then taken as target noise margin, e.g. for
+   bit loading.
+*/
+typedef struct CMD_NoiseMarginDeltaSet CMD_NoiseMarginDeltaSet_t;
+
+/** Message ID for ACK_NoiseMarginDeltaSet */
+#define ACK_NOISEMARGINDELTASET 0x1C45
+
+/**
+   Acknowledgement for the message CMD_NoiseMarginDeltaSet.
+*/
+typedef struct ACK_NoiseMarginDeltaSet ACK_NoiseMarginDeltaSet_t;
+
+/** Message ID for CMD_BearerCh0_DS_Set */
+#define CMD_BEARERCH0_DS_SET 0x0048
+
+/**
+   Sets parameters for downstream bearer channel 0 (Chapters 7.3.2.1-5 of
+   G.997.1 [11]). Bearer channel configuration at the CPE is optional and just
+   used to further limit the parameters usually configured at the CO.The mode,
+   ATM or PTM, is selected with the configuration controls "ATMControl" and
+   "PTMControl" in Parameter 2. Exactly one of them must be enabled, not both!
+*/
+typedef struct CMD_BearerCh0_DS_Set CMD_BearerCh0_DS_Set_t;
+
+/** Message ID for ACK_BearerCh0_DS_Set */
+#define ACK_BEARERCH0_DS_SET 0x0048
+
+/**
+   Acknowledgement for CMD_BearerCh0_DS_Set. (Configuration of bearer channel
+   0).
+*/
+typedef struct ACK_BearerCh0_DS_Set ACK_BearerCh0_DS_Set_t;
+
+/** Message ID for CMD_BearerCh0_US_Set */
+#define CMD_BEARERCH0_US_SET 0x0248
+
+/**
+   Sets parameters for upstream bearer channel 0 (Chapters 7.3.2.1-5 of G.997.1
+   [11]). Bearer channel configuration at the CPE is optional and just used to
+   further limit the parameters usually configured at the CO.The mode, ATM or
+   PTM, is selected with the configuration controls "ATMControl" and
+   "PTMControl" in Parameter 2. Exactly one of them must be enabled, not both!
+*/
+typedef struct CMD_BearerCh0_US_Set CMD_BearerCh0_US_Set_t;
+
+/** Message ID for ACK_BearerCh0_US_Set */
+#define ACK_BEARERCH0_US_SET 0x0248
+
+/**
+   Acknowledgement for CMD_BearerCh0_US_Set. (Configuration of bearer channel
+   0).
+*/
+typedef struct ACK_BearerCh0_US_Set ACK_BearerCh0_US_Set_t;
+
+/** Message ID for CMD_InitPolicySet */
+#define CMD_INITPOLICYSET 0x1A45
+
+/**
+   The message selects the channel initialization policy (CIPOLICY) to be
+   applied for the tranceiver configuration. (Section 7.3.2.10 of G.997.1)In
+   ADSL mode, the message is applicable only for ADSL2/2+ (Section 7.10.3 of
+   G.992.3 Amd 3). The standard defines the parameter for the CO only. Here, the
+   message is applied at the ADSL-CPE, then it overrides the policy given by the
+   CO!
+*/
+typedef struct CMD_InitPolicySet CMD_InitPolicySet_t;
+
+/** Message ID for ACK_InitPolicySet */
+#define ACK_INITPOLICYSET 0x1A45
+
+/**
+   Acknowledgment for message CMD_InitPolicySet.
+*/
+typedef struct ACK_InitPolicySet ACK_InitPolicySet_t;
+
+/** Message ID for CMD_ErasureControlSet */
+#define CMD_ERASURECONTROLSET 0x0162
+
+/**
+   Configuration of options for the modem state machine.
+*/
+typedef struct CMD_ErasureControlSet CMD_ErasureControlSet_t;
+
+/** Message ID for ACK_ErasureControlSet */
+#define ACK_ERASURECONTROLSET 0x0162
+
+/**
+   Acknowledgement to CMD_ErasureControlSet.
+*/
+typedef struct ACK_ErasureControlSet ACK_ErasureControlSet_t;
+
+/** Message ID for CMD_Misc_ConfigSet */
+#define CMD_MISC_CONFIGSET 0x3A48
+
+/**
+   Performs some miscellaneous chip set configurations.
+*/
+typedef struct CMD_Misc_ConfigSet CMD_Misc_ConfigSet_t;
+
+/** Message ID for ACK_Misc_ConfigSet */
+#define ACK_MISC_CONFIGSET 0x3A48
+
+/**
+   This is the acknowledgement for ACK_Misc_ConfigSet.
+*/
+typedef struct ACK_Misc_ConfigSet ACK_Misc_ConfigSet_t;
+
+/** Message ID for CMD_OperationOptionsSet */
+#define CMD_OPERATIONOPTIONSSET 0x0D62
+
+/**
+   Performs some miscellaneous chip set configurations.
+*/
+typedef struct CMD_OperationOptionsSet CMD_OperationOptionsSet_t;
+
+/** Message ID for ACK_OperationOptionsSet */
+#define ACK_OPERATIONOPTIONSSET 0x0D62
+
+/**
+   This is the acknowledgement for CMD_OperationOptionsSet.
+*/
+typedef struct ACK_OperationOptionsSet ACK_OperationOptionsSet_t;
+
+/** Message ID for CMD_OperatorSelect */
+#define CMD_OPERATORSELECT 0x1562
+
+/**
+   The message selects a DSL operator. The information is used to configure
+   operator specific settings inside the DSL firmware.
+*/
+typedef struct CMD_OperatorSelect CMD_OperatorSelect_t;
+
+/** Message ID for ACK_OperatorSelect */
+#define ACK_OPERATORSELECT 0x1562
+
+/**
+   This is the acknowledgement for ACK_OperatorSelect.
+*/
+typedef struct ACK_OperatorSelect ACK_OperatorSelect_t;
+
+/** Message ID for CMD_OperatorSelectionGet */
+#define CMD_OPERATORSELECTIONGET 0x1522
+
+/**
+   The message reads back the selected DSL operator, as selected by
+   ACK_OperatorSelect.
+*/
+typedef struct CMD_OperatorSelectionGet CMD_OperatorSelectionGet_t;
+
+/** Message ID for ACK_OperatorSelectionGet */
+#define ACK_OPERATORSELECTIONGET 0x1522
+
+/**
+   The message provides the selected DSL operator.
+*/
+typedef struct ACK_OperatorSelectionGet ACK_OperatorSelectionGet_t;
+
+/** Message ID for CMD_TestOptionsSet */
+#define CMD_TESTOPTIONSSET 0x1C44
+
+/**
+   The messages configures settings for test modes.
+*/
+typedef struct CMD_TestOptionsSet CMD_TestOptionsSet_t;
+
+/** Message ID for ACK_TestOptionsSet */
+#define ACK_TESTOPTIONSSET 0x1C44
+
+/**
+   This is the acknowledgement for CMD_TestOptionsSet.
+*/
+typedef struct ACK_TestOptionsSet ACK_TestOptionsSet_t;
+
+/** Message ID for CMD_ClockSet */
+#define CMD_CLOCKSET 0x0F62
+
+/**
+   Sets the PPE clock. The message is supposed to be used for debug/test
+   purposes only. If applied this PPE clock is forced and will be kept
+   throughout the link. The PPE frequency scaling automode (see
+   CMD_PPE_ClockConfigure) will then not change it but behave as being disabled.
+*/
+typedef struct CMD_ClockSet CMD_ClockSet_t;
+
+/** Message ID for ACK_ClockSet */
+#define ACK_CLOCKSET 0x0F62
+
+/**
+   This is the acknowledgement for CMD_ClockSet.
+*/
+typedef struct ACK_ClockSet ACK_ClockSet_t;
+
+/** Message ID for CMD_PPE_ClockConfigure */
+#define CMD_PPE_CLOCKCONFIGURE 0x2262
+
+/**
+   Configures PPE clock options.The message CMD_ClockSet used for debug/test
+   purposes forces a PPE clock frequency which will be kept throughout the
+   link.. The PPE frequency scaling automode (see CMD_ClockSet) will then not
+   change it but behave as being disabled.
+*/
+typedef struct CMD_PPE_ClockConfigure CMD_PPE_ClockConfigure_t;
+
+/** Message ID for ACK_PPE_ClockConfigure */
+#define ACK_PPE_CLOCKCONFIGURE 0x2262
+
+/**
+   This is the acknowledgement for CMD_PPE_ClockConfigure.
+*/
+typedef struct ACK_PPE_ClockConfigure ACK_PPE_ClockConfigure_t;
+
+/** Message ID for CMD_PPE_ClockGet */
+#define CMD_PPE_CLOCKGET 0xF403
+
+/**
+   Reads PPE clock settings.
+*/
+typedef struct CMD_PPE_ClockGet CMD_PPE_ClockGet_t;
+
+/** Message ID for ACK_PPE_ClockGet */
+#define ACK_PPE_CLOCKGET 0xF403
+
+/**
+   Provides PPE clock settings.
+*/
+typedef struct ACK_PPE_ClockGet ACK_PPE_ClockGet_t;
+
+/** Message ID for CMD_PPE_ClockConfigGet */
+#define CMD_PPE_CLOCKCONFIGGET 0x2222
+
+/**
+   Reads back PPE clock options.
+*/
+typedef struct CMD_PPE_ClockConfigGet CMD_PPE_ClockConfigGet_t;
+
+/** Message ID for ACK_PPE_ClockConfigGet */
+#define ACK_PPE_CLOCKCONFIGGET 0x2222
+
+/**
+   Provides PPE clock options.
+*/
+typedef struct ACK_PPE_ClockConfigGet ACK_PPE_ClockConfigGet_t;
+
+/** Message ID for CMD_PLL_ClockSet */
+#define CMD_PLL_CLOCKSET 0x1962
+
+/**
+   Sets an offset for the PLL frequency compared to the crystals rated nominal
+   frequency of 36 MHz. This allows e.g. to fine tune the handshake tone
+   frequencies to exactly match the standard values.
+*/
+typedef struct CMD_PLL_ClockSet CMD_PLL_ClockSet_t;
+
+/** Message ID for ACK_PLL_ClockSet */
+#define ACK_PLL_CLOCKSET 0x1962
+
+/**
+   This is the acknowledgement for CMD_PLL_ClockSet.
+*/
+typedef struct ACK_PLL_ClockSet ACK_PLL_ClockSet_t;
+
+/**
+   Requests information about the current state of the modem state-machine.The
+   command can be sent in all states of the modem state machine (see Figure 2).
+*/
+struct CMD_ModemFSM_StateGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the current state of the modem state-machine.
+*/
+struct ACK_ModemFSM_StateGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Modem Status */
+   DSL_uint16_t ModemState;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Line Power Management State */
+   DSL_uint16_t LxState : 2;
+   /** Last HS State or SOC Message */
+   DSL_uint16_t State_HsOrSoc;
+   /** RX Signal */
+   DSL_uint16_t RxSignal;
+   /** TX Signal */
+   DSL_uint16_t TxSignal;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Modem Status */
+   DSL_uint16_t ModemState;
+   /** Line Power Management State */
+   DSL_uint16_t LxState : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Last HS State or SOC Message */
+   DSL_uint16_t State_HsOrSoc;
+   /** RX Signal */
+   DSL_uint16_t RxSignal;
+   /** TX Signal */
+   DSL_uint16_t TxSignal;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the current state of the modem state-machine. This
+   message is sent autonomously, if the modem enters a new state and reporting
+   is enabled for that state (see CMD_ModemFSM_EventConfigure).
+*/
+struct EVT_ModemFSM_StateGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Modem Status */
+   DSL_uint16_t ModemState;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Line Power Management State */
+   DSL_uint16_t LxState : 2;
+   /** Last HS State or SOC Message */
+   DSL_uint16_t State_HsOrSoc;
+   /** RX Signal */
+   DSL_uint16_t RxSignal;
+   /** TX Signal */
+   DSL_uint16_t TxSignal;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Modem Status */
+   DSL_uint16_t ModemState;
+   /** Line Power Management State */
+   DSL_uint16_t LxState : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Last HS State or SOC Message */
+   DSL_uint16_t State_HsOrSoc;
+   /** RX Signal */
+   DSL_uint16_t RxSignal;
+   /** TX Signal */
+   DSL_uint16_t TxSignal;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Autonomous message indicating that the modem online code was reached and that
+   initialization was completed. The management entity may not perform any
+   query-response messaging until the EVT_ModemReady message is received. Its
+   generation cannot be disabled. If it is not received this indicates a
+   problem, possibly with the boot sequence. If the message is received, it
+   contains a result code that may also indicate that an error was detected by
+   the firmware during initialization.
+*/
+struct EVT_ModemReady
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Error Code */
+   DSL_uint8_t ErrorCode;
+   /** Warning Code */
+   DSL_uint8_t WarningCode;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Warning Code */
+   DSL_uint8_t WarningCode;
+   /** Error Code */
+   DSL_uint8_t ErrorCode;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Controls state transitions of the modem state-machine.
+*/
+struct CMD_ModemFSM_StateSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 12;
+   /** Link Control */
+   DSL_uint16_t LinkControl : 4;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Link Control */
+   DSL_uint16_t LinkControl : 4;
+   /** Reserved */
+   DSL_uint16_t Res0 : 12;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_ModemFSM_StateSet
+*/
+struct ACK_ModemFSM_StateSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports failure information after entering FAIL state. This message is sent
+   autonomously without host request after entrance into FAIL was indicated by
+   EVT_ModemFSM_StateGet. Both messages are generated only if enabled with
+   CMD_ModemFSM_EventConfigure (common Bit E8 "FAIL").
+*/
+struct ALM_ModemFSM_FailReasonGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** System Sub Error Code */
+   DSL_uint8_t SubErrorCode;
+   /** System Error Code */
+   DSL_uint8_t ErrorCode;
+   /** Failure State Information */
+   DSL_uint16_t FW_FailCode;
+   /** Reserved */
+   DSL_uint16_t Res0[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** System Error Code */
+   DSL_uint8_t ErrorCode;
+   /** System Sub Error Code */
+   DSL_uint8_t SubErrorCode;
+   /** Failure State Information */
+   DSL_uint16_t FW_FailCode;
+   /** Reserved */
+   DSL_uint16_t Res0[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests failure information after entering FAIL state.
+*/
+struct CMD_ModemFSM_FailReasonGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns failure information after entering FAIL state.
+*/
+struct ACK_ModemFSM_FailReasonGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** System Sub Error Code */
+   DSL_uint8_t SubErrorCode;
+   /** System Error Code */
+   DSL_uint8_t ErrorCode;
+   /** Failure State Information */
+   DSL_uint16_t FW_FailCode;
+   /** Reserved */
+   DSL_uint16_t Res0[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** System Error Code */
+   DSL_uint8_t ErrorCode;
+   /** System Sub Error Code */
+   DSL_uint8_t SubErrorCode;
+   /** Failure State Information */
+   DSL_uint16_t FW_FailCode;
+   /** Reserved */
+   DSL_uint16_t Res0[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of options for the modem state machine.
+*/
+struct CMD_ModemFSM_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 5;
+   /** L2 Extensions of G.992.3 Amd4 (2011), (ADSL only), Bit 10 */
+   DSL_uint16_t E10 : 1;
+   /** L2 Automatic Exit (ADSL only), Bit 9 */
+   DSL_uint16_t E9 : 1;
+   /** L2 Low-Power Mode Enable (ADSL only), Bit 8 */
+   DSL_uint16_t E8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 5;
+   /** Loop Diagnostic Mode Control, Bit 2 */
+   DSL_uint16_t E2 : 1;
+   /** Reserved 0 */
+   DSL_uint16_t E1 : 1;
+   /** Automatic Re-Start Control, Bit 0 */
+   DSL_uint16_t E0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Automatic Re-Start Control, Bit 0 */
+   DSL_uint16_t E0 : 1;
+   /** Reserved 0 */
+   DSL_uint16_t E1 : 1;
+   /** Loop Diagnostic Mode Control, Bit 2 */
+   DSL_uint16_t E2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 5;
+   /** L2 Low-Power Mode Enable (ADSL only), Bit 8 */
+   DSL_uint16_t E8 : 1;
+   /** L2 Automatic Exit (ADSL only), Bit 9 */
+   DSL_uint16_t E9 : 1;
+   /** L2 Extensions of G.992.3 Amd4 (2011), (ADSL only), Bit 10 */
+   DSL_uint16_t E10 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 5;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_ModemFSM_OptionsSet.
+*/
+struct ACK_ModemFSM_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of options for the modem state machine.
+*/
+struct CMD_ModemOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 10;
+   /** Steady-State Algorithm Control, Bit5 */
+   DSL_uint16_t Trellis : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** AELEM Control (VDSL only), Bit 3 */
+   DSL_uint16_t enableAelem : 1;
+   /** Short Init Control (ADSL only), Bit 2 */
+   DSL_uint16_t shortInit : 1;
+   /** US Virtual Noise Support, Bit 1 */
+   DSL_uint16_t enableVN_US : 1;
+   /** DS Virtual Noise Support, Bit 0 */
+   DSL_uint16_t enableVN_DS : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DS Virtual Noise Support, Bit 0 */
+   DSL_uint16_t enableVN_DS : 1;
+   /** US Virtual Noise Support, Bit 1 */
+   DSL_uint16_t enableVN_US : 1;
+   /** Short Init Control (ADSL only), Bit 2 */
+   DSL_uint16_t shortInit : 1;
+   /** AELEM Control (VDSL only), Bit 3 */
+   DSL_uint16_t enableAelem : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Steady-State Algorithm Control, Bit5 */
+   DSL_uint16_t Trellis : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 10;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_ModemOptionsSet.
+*/
+struct ACK_ModemOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets options for the modem state-machine. Enables/Disables autonomous
+   messages for specific state transitions (EVT_ModemFSM_StateGet). The EVT
+   message is generated after entering the particular state listed in the
+   parameter description of the enable bits.
+*/
+struct CMD_ModemFSM_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Enable Bit 15 */
+   DSL_uint16_t E15 : 1;
+   /** Enable Bit 14 */
+   DSL_uint16_t E14 : 1;
+   /** Enable Bit 13 */
+   DSL_uint16_t E13 : 1;
+   /** Enable Bit 12 */
+   DSL_uint16_t E12 : 1;
+   /** Enable Bit 11 */
+   DSL_uint16_t E11 : 1;
+   /** Enable Bit 10 */
+   DSL_uint16_t E10 : 1;
+   /** Enable Bit 9 */
+   DSL_uint16_t E9 : 1;
+   /** Enable Bit 8 */
+   DSL_uint16_t E8 : 1;
+   /** Enable Bit 7 */
+   DSL_uint16_t E7 : 1;
+   /** Enable Bit 6 */
+   DSL_uint16_t E6 : 1;
+   /** Enable Bit 5 */
+   DSL_uint16_t E5 : 1;
+   /** Enable Bit 4 */
+   DSL_uint16_t E4 : 1;
+   /** Enable Bit 3 */
+   DSL_uint16_t E3 : 1;
+   /** Enable Bit 2 */
+   DSL_uint16_t E2 : 1;
+   /** Enable Bit 1 (ADSL only) */
+   DSL_uint16_t E1 : 1;
+   /** Enable Bit 0 */
+   DSL_uint16_t E0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** Enable Bit 16 */
+   DSL_uint16_t E16 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Enable Bit 0 */
+   DSL_uint16_t E0 : 1;
+   /** Enable Bit 1 (ADSL only) */
+   DSL_uint16_t E1 : 1;
+   /** Enable Bit 2 */
+   DSL_uint16_t E2 : 1;
+   /** Enable Bit 3 */
+   DSL_uint16_t E3 : 1;
+   /** Enable Bit 4 */
+   DSL_uint16_t E4 : 1;
+   /** Enable Bit 5 */
+   DSL_uint16_t E5 : 1;
+   /** Enable Bit 6 */
+   DSL_uint16_t E6 : 1;
+   /** Enable Bit 7 */
+   DSL_uint16_t E7 : 1;
+   /** Enable Bit 8 */
+   DSL_uint16_t E8 : 1;
+   /** Enable Bit 9 */
+   DSL_uint16_t E9 : 1;
+   /** Enable Bit 10 */
+   DSL_uint16_t E10 : 1;
+   /** Enable Bit 11 */
+   DSL_uint16_t E11 : 1;
+   /** Enable Bit 12 */
+   DSL_uint16_t E12 : 1;
+   /** Enable Bit 13 */
+   DSL_uint16_t E13 : 1;
+   /** Enable Bit 14 */
+   DSL_uint16_t E14 : 1;
+   /** Enable Bit 15 */
+   DSL_uint16_t E15 : 1;
+   /** Enable Bit 16 */
+   DSL_uint16_t E16 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_ModemFSM_EventConfigure. (Enabling/Disabling EVENT
+   messages (EVTs) for specific state transitions.)
+*/
+struct ACK_ModemFSM_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific near-end
+   line failures. If the corresponding Enable bit for a line failure is set,
+   then the modem firmware will send an autonomous message ALM_LineFailureNE_Get
+   if this failure occurs.
+*/
+struct CMD_FailuresNE_AlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** Enable Bit 13 */
+   DSL_uint16_t E13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** Enable Bit3 */
+   DSL_uint16_t E3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Enable Bit1 */
+   DSL_uint16_t E1 : 1;
+   /** Enable Bit0 */
+   DSL_uint16_t E0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Enable Bit0 */
+   DSL_uint16_t E0 : 1;
+   /** Enable Bit1 */
+   DSL_uint16_t E1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Enable Bit3 */
+   DSL_uint16_t E3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** Enable Bit 13 */
+   DSL_uint16_t E13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_FailuresNE_AlarmConfigure.
+*/
+struct ACK_FailuresNE_AlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific far-end
+   line failures. If the corresponding Enable bit for a line failure is set,
+   then the modem firmware will send an autonomous message ALM_LineFailureFE_Get
+   if this failure occurs.
+*/
+struct CMD_FailuresFE_AlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 12;
+   /** Enable Bit3 */
+   DSL_uint16_t E3 : 1;
+   /** Enable Bit2 */
+   DSL_uint16_t E2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Enable Bit0 */
+   DSL_uint16_t E0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Enable Bit0 */
+   DSL_uint16_t E0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Enable Bit2 */
+   DSL_uint16_t E2 : 1;
+   /** Enable Bit3 */
+   DSL_uint16_t E3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 12;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_FailuresFE_AlarmConfigure.
+*/
+struct ACK_FailuresFE_AlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures re-initialization triggers for near-end failure conditions in
+   modem state STEADY STATE transmission (see Figure 1). This command is
+   accepted in RESET state only.
+*/
+struct CMD_ReInitNE_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** ESE */
+   DSL_uint16_t E13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** OOS BC0 */
+   DSL_uint16_t E10 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** NCD BC0 */
+   DSL_uint16_t E8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 1;
+   /** LCD BC0 */
+   DSL_uint16_t E6 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** LOM */
+   DSL_uint16_t E3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 1;
+   /** LOF */
+   DSL_uint16_t E1 : 1;
+   /** LOS */
+   DSL_uint16_t E0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 14;
+   /** ESx */
+   DSL_uint16_t F1 : 1;
+   /** SESx */
+   DSL_uint16_t F0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LOS */
+   DSL_uint16_t E0 : 1;
+   /** LOF */
+   DSL_uint16_t E1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 1;
+   /** LOM */
+   DSL_uint16_t E3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** LCD BC0 */
+   DSL_uint16_t E6 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 1;
+   /** NCD BC0 */
+   DSL_uint16_t E8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** OOS BC0 */
+   DSL_uint16_t E10 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** ESE */
+   DSL_uint16_t E13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** SESx */
+   DSL_uint16_t F0 : 1;
+   /** ESx */
+   DSL_uint16_t F1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgment to CMD_ReInitNE_Configure (Configuration of re-initialization
+   triggers for near-end failures).
+*/
+struct ACK_ReInitNE_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of reinitialization trigger definitions.
+*/
+struct CMD_ReinitThreshConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SESx Reinit Period */
+   DSL_uint16_t SESxPeriod;
+   /** LOM Persistency Time for Reinit */
+   DSL_uint16_t LomRiPeriod;
+   /** ESx Reinit Period */
+   DSL_uint16_t ESxPeriod;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SESx Reinit Period */
+   DSL_uint16_t SESxPeriod;
+   /** LOM Persistency Time for Reinit */
+   DSL_uint16_t LomRiPeriod;
+   /** ESx Reinit Period */
+   DSL_uint16_t ESxPeriod;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message ACK_ReinitThreshConfigure.
+*/
+struct ACK_ReinitThreshConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Triggers a shutdown request, either as "L3 orderly shutdown" towards the
+   remote side or as "locally forced shutdown" to the DSL-FW without sending a
+   request to the remote side.After an "L3 orderly shutdown" request was
+   accepted by the CO, the following shall happen: The CPE-Host forces L3 entry
+   with transition to RESET state by applying CMD_ModemFSM_StateGet.A "locally
+   forced shutdown" always results in exiting Showtime.
+*/
+struct CMD_ShutdownRequest
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Locally Forced Shutdown */
+   DSL_uint16_t ForcedShutdown : 1;
+   /** L3 Orderly Shutdown Request */
+   DSL_uint16_t L3shutdown : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** L3 Orderly Shutdown Request */
+   DSL_uint16_t L3shutdown : 1;
+   /** Locally Forced Shutdown */
+   DSL_uint16_t ForcedShutdown : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_ShutdownRequest.
+*/
+struct ACK_ShutdownRequest
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about L3 orderly shutdown requests initiated from the
+   remote side.Applying CMD_RxL3RequestStatusGet allows the host to determine
+   whether a near-end LOS or LOM failure is due to an L3 shutdown or an
+   unexpected line failure.
+*/
+struct CMD_RxL3RequestStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_RxL3RequestStatusGet.As long as the modem is in L0
+   (Showtime), an ATU-R will automatically respond to any L3 request from the
+   ATU-C by sending an accept message.  If the ATU-R is in L2 mode when it
+   receives the request, it will send a reject message. Upon receiving an
+   acceptance, the remote side should enter L3 state and shut off its
+   transmitter.
+*/
+struct ACK_RxL3RequestStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** L3 Request Response */
+   DSL_uint16_t L3ReqResponse : 1;
+   /** L3 Request Received */
+   DSL_uint16_t L3ReqReceived : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** L3 Request Received */
+   DSL_uint16_t L3ReqReceived : 1;
+   /** L3 Request Response */
+   DSL_uint16_t L3ReqResponse : 1;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the status of a near-end initiated L3 shutdown request. If the
+   remote side accepted the request, in ADSL the host will force L3 entry using
+   CMD_ModemFSM_StateSet.
+*/
+struct CMD_TxL3RequestStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_TxL3RequestStatusGet.
+*/
+struct ACK_TxL3RequestStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Status L3 Request */
+   DSL_uint16_t L3ReqStatus : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Status L3 Request */
+   DSL_uint16_t L3ReqStatus : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the fail reason of a failed near-end initiated L3 request. (see also
+   ACK_TxL3RequestStatusGet)
+*/
+struct CMD_TxL3ReqFailReasonGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the fail reason of a near-end initiated L3 request, as response to
+   CMD_TxL3ReqFailReasonGet.
+*/
+struct ACK_TxL3ReqFailReasonGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 8;
+   /** L3 Fail Reason */
+   DSL_uint8_t L3FailReason;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** L3 Fail Reason */
+   DSL_uint8_t L3FailReason;
+   /** Reserved */
+   DSL_uint16_t Res0 : 8;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message selects and enables one of several points during the
+   initialization process where -after a normal link start had been triggered-
+   the modem FSM "freezes". Freezing means the CO can be disconnected from the
+   line and still the CPE continues transmitting the signal of the current
+   phase. To exit from the freeze a state transition to RESET state has to be
+   triggered. In case of a Showtime Freeze the reinit-triggers do not have any
+   effect.
+*/
+struct CMD_ModemFSM_Freeze
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Freeze Points */
+   DSL_uint16_t FreezePoint;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Freeze Points */
+   DSL_uint16_t FreezePoint;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_ModemFSM_Freeze.
+*/
+struct ACK_ModemFSM_Freeze
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the loaded FW image. This info is used e.g. for
+   swapping between ADSL and VDSL.
+*/
+struct CMD_FW_ImageInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the information about the FW image requested by CMD_FW_ImageInfoGet
+*/
+struct ACK_FW_ImageInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Site */
+   DSL_uint16_t imageType : 1;
+   /** DSL mode */
+   DSL_uint16_t dslMode : 1;
+   /** Site */
+   DSL_uint16_t location : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Site */
+   DSL_uint16_t location : 1;
+   /** DSL mode */
+   DSL_uint16_t dslMode : 1;
+   /** Site */
+   DSL_uint16_t imageType : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message informs the FW about the status of SW parameters relevant for the
+   multimode state machine (APS). This can be used to trace the APS behaviour
+   with FW tools. The message does not influence the APS behaviour.
+*/
+struct CMD_APS_Status_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Port Mode */
+   DSL_uint16_t DualPortMode;
+   /** NextMode */
+   DSL_uint16_t NextMode;
+   /** Remember Function */
+   DSL_uint16_t bRemember;
+   /** Activation Sequence */
+   DSL_uint16_t ActSeq;
+   /** Activation Start Mode (ADSL only) */
+   DSL_uint16_t ActMode;
+   /** nRetry  */
+   DSL_uint16_t nRetry;
+   /** nFwRetry  */
+   DSL_uint16_t nFwRetry;
+   /** nGhsRetry  */
+   DSL_uint16_t nGhsRetry;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Port Mode */
+   DSL_uint16_t DualPortMode;
+   /** NextMode */
+   DSL_uint16_t NextMode;
+   /** Remember Function */
+   DSL_uint16_t bRemember;
+   /** Activation Sequence */
+   DSL_uint16_t ActSeq;
+   /** Activation Start Mode (ADSL only) */
+   DSL_uint16_t ActMode;
+   /** nRetry  */
+   DSL_uint16_t nRetry;
+   /** nFwRetry  */
+   DSL_uint16_t nFwRetry;
+   /** nGhsRetry  */
+   DSL_uint16_t nGhsRetry;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_APS_Status_Set.
+*/
+struct ACK_APS_Status_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of the VTU Transmission System Enabling (XTSE).Configures the
+   transmission system coding types to be supported on the line (VDSL flavour
+   and annex support).(References: Section 7.3.1.1.1 of G.997.1 and G.994.1 Amd4
+   [10] Tables "Standard information field - SPar(1) coding")
+*/
+struct CMD_XTSE_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ADSL Mode-Bit15: G.992.5, Annex A */
+   DSL_uint16_t A15 : 1;
+   /** ADSL Mode-Bit14: G.992.5, Annex B */
+   DSL_uint16_t A14 : 1;
+   /** ADSL Mode-Bit13: G.992.3, Annex M */
+   DSL_uint16_t A13 : 1;
+   /** ADSL Mode-Bit12: G.992.3, Annex L, US Mask2 */
+   DSL_uint16_t A12 : 1;
+   /** ADSL Mode-Bit11: G.992.3, Annex L, US Mask1 */
+   DSL_uint16_t A11 : 1;
+   /** ADSL Mode-Bit10: G.992.2, Annex A */
+   DSL_uint16_t A10 : 1;
+   /** ADSL Mode-Bit9: G.992.3, Annex B */
+   DSL_uint16_t A9 : 1;
+   /** ADSL Mode-Bit8: G.992.3, Annex A */
+   DSL_uint16_t A8 : 1;
+   /** ADSL Mode-Bit7: G.992.5, Annex J */
+   DSL_uint16_t A7 : 1;
+   /** ADSL Mode-Bit6: G.992.5, Annex I */
+   DSL_uint16_t A6 : 1;
+   /** ADSL Mode-Bit5: G.992.3, Annex J */
+   DSL_uint16_t A5 : 1;
+   /** ADSL Mode-Bit4: G.992.3, Annex I */
+   DSL_uint16_t A4 : 1;
+   /** ADSL Mode-Bit3: G.992.1, Annex B */
+   DSL_uint16_t A3 : 1;
+   /** ADSL Mode-Bit2: G.992.1, Annex A */
+   DSL_uint16_t A2 : 1;
+   /** ADSL Mode-Bit1: G.992.5, Annex M */
+   DSL_uint16_t A1 : 1;
+   /** ADSL Mode-Bit0: T1.413 */
+   DSL_uint16_t A0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** Bit8: G.FAST */
+   DSL_uint16_t F8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 5;
+   /** VDSL Mode-Bit2: VDSL2 */
+   DSL_uint16_t V2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ADSL Mode-Bit0: T1.413 */
+   DSL_uint16_t A0 : 1;
+   /** ADSL Mode-Bit1: G.992.5, Annex M */
+   DSL_uint16_t A1 : 1;
+   /** ADSL Mode-Bit2: G.992.1, Annex A */
+   DSL_uint16_t A2 : 1;
+   /** ADSL Mode-Bit3: G.992.1, Annex B */
+   DSL_uint16_t A3 : 1;
+   /** ADSL Mode-Bit4: G.992.3, Annex I */
+   DSL_uint16_t A4 : 1;
+   /** ADSL Mode-Bit5: G.992.3, Annex J */
+   DSL_uint16_t A5 : 1;
+   /** ADSL Mode-Bit6: G.992.5, Annex I */
+   DSL_uint16_t A6 : 1;
+   /** ADSL Mode-Bit7: G.992.5, Annex J */
+   DSL_uint16_t A7 : 1;
+   /** ADSL Mode-Bit8: G.992.3, Annex A */
+   DSL_uint16_t A8 : 1;
+   /** ADSL Mode-Bit9: G.992.3, Annex B */
+   DSL_uint16_t A9 : 1;
+   /** ADSL Mode-Bit10: G.992.2, Annex A */
+   DSL_uint16_t A10 : 1;
+   /** ADSL Mode-Bit11: G.992.3, Annex L, US Mask1 */
+   DSL_uint16_t A11 : 1;
+   /** ADSL Mode-Bit12: G.992.3, Annex L, US Mask2 */
+   DSL_uint16_t A12 : 1;
+   /** ADSL Mode-Bit13: G.992.3, Annex M */
+   DSL_uint16_t A13 : 1;
+   /** ADSL Mode-Bit14: G.992.5, Annex B */
+   DSL_uint16_t A14 : 1;
+   /** ADSL Mode-Bit15: G.992.5, Annex A */
+   DSL_uint16_t A15 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 2;
+   /** VDSL Mode-Bit2: VDSL2 */
+   DSL_uint16_t V2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 5;
+   /** Bit8: G.FAST */
+   DSL_uint16_t F8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_XTSE_Configure.
+*/
+struct ACK_XTSE_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Controls the upstream band usage.The message can only be used for DMTscope
+   tests without handshake and training phases.
+*/
+struct CMD_BandControl_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Upstream Bands */
+   DSL_uint8_t NumBandsUS;
+   /** Band Descriptor US */
+   VRX_ToneIndex_t band[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Upstream Bands */
+   DSL_uint8_t NumBandsUS;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Band Descriptor US */
+   VRX_ToneIndex_t band[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_BandControl_US_Set.
+*/
+struct ACK_BandControl_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of PSD and Power parameters. Only used for DMTscope tests
+   without handshake and training phases.
+*/
+struct CMD_PSD_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** MAXNOMPSDus */
+   DSL_uint16_t MAXNOMPSDus;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** MAXNOMATPus */
+   DSL_uint16_t MAXNOMATPus;
+   /** Reserved */
+   DSL_uint16_t Res2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** MAXNOMPSDus */
+   DSL_uint16_t MAXNOMPSDus;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** MAXNOMATPus */
+   DSL_uint16_t MAXNOMATPus;
+   /** Reserved */
+   DSL_uint16_t Res2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_PSD_Set.
+*/
+struct ACK_PSD_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Specifies the maximum upstream transmit PSD by means of breakpoints.To be
+   used only for DMTscope tests without handshake and training phases.
+*/
+struct CMD_PSD_BreakpointsTxUS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Breakpoint Descriptor TxPSDus */
+   VRX_PSDbreak_t breakpoint[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Breakpoint Descriptor TxPSDus */
+   VRX_PSDbreak_t breakpoint[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_PSD_BreakpointsTxUS_Set.
+*/
+struct ACK_PSD_BreakpointsTxUS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sends downstream calibration information for "per-tone" test parameters. It
+   is effective for Loop Diagnostic Mode (DELT) and Showtime. It is the
+   responsibility of the manufacturer to provide the data.
+*/
+struct  CMD_PSD_Calibration_DS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** Breakpoint Descriptor RxPSD Compensation */
+   VRX_PSD_CompBreak_t breakpoint[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** Breakpoint Descriptor RxPSD Compensation */
+   VRX_PSD_CompBreak_t breakpoint[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_PSD_Calibration_DS_Set.
+*/
+struct ACK_PSD_Calibration_DS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sends upstream calibration information for the upstream transmit PSD. It is
+   effective for loop diagnostic mode (DELT) and Showtime. It is the
+   responsibility of the manufacturer to provide the data.
+*/
+struct  CMD_PSD_Calibration_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** Breakpoint Descriptor TxPSD Compensation */
+   VRX_PSD_CompBreak_t breakpoint[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** Breakpoint Descriptor TxPSD Compensation */
+   VRX_PSD_CompBreak_t breakpoint[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_PSD_Calibration_US_Set.
+*/
+struct ACK_PSD_Calibration_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of PSD related options.
+*/
+struct CMD_PSD_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** US TSSI Control, Bit 0 */
+   DSL_uint16_t useTssiUS : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** US TSSI Control, Bit 0 */
+   DSL_uint16_t useTssiUS : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_PSD_OptionsSet.
+*/
+struct ACK_PSD_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the electrical loop length estimate kl0.
+*/
+struct CMD_UPBO_KL0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the data requested by CMD_UPBO_KL0Get.(Section 7.5.1.23 of G.997.1
+   [11])
+*/
+struct ACK_UPBO_KL0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Kl0 Estimate VTU-R */
+   DSL_uint16_t kl0_EstimR;
+   /** Kl0 Estimate VTU-O */
+   DSL_uint16_t kl0_EstimO;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Kl0 Estimate VTU-R */
+   DSL_uint16_t kl0_EstimR;
+   /** Kl0 Estimate VTU-O */
+   DSL_uint16_t kl0_EstimO;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests status parameters for the Upstream  Power  Back-Off  (UPBO)
+   alternative  electrical  length  estimation  method (AELEM).
+*/
+struct CMD_PBO_AELEM_Status_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Upstream  Power  Back-Off  (UPBO)  status  parameters  for  the  alternative
+   electrical  length  estimation  method (AELEM) are reported.
+*/
+struct ACK_PBO_AELEM_Status_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AELE-MODE Used */
+   DSL_uint16_t AeleMode;
+   /** Kl0 Estimate per Band VTU-R */
+   DSL_uint16_t Kl0EstimRPb[4];
+   /** Final Kl0 per Band VTU-O */
+   DSL_uint16_t Kl0EstimOPb[4];
+   /** UPBOELMT */
+   DSL_uint16_t UpboElmt;
+   /** RXTHRSHDS */
+   DSL_int16_t RxThreshDs;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AELE-MODE Used */
+   DSL_uint16_t AeleMode;
+   /** Kl0 Estimate per Band VTU-R */
+   DSL_uint16_t Kl0EstimRPb[4];
+   /** Final Kl0 per Band VTU-O */
+   DSL_uint16_t Kl0EstimOPb[4];
+   /** UPBOELMT */
+   DSL_uint16_t UpboElmt;
+   /** RXTHRSHDS */
+   DSL_int16_t RxThreshDs;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of a target noise margin delta, which is added to the target
+   noise margin value configured at the CO (and in case of the CPE received from
+   there). The resulting value is then taken as target noise margin, e.g. for
+   bit loading.
+*/
+struct CMD_NoiseMarginDeltaSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Target Noise Margin Delta DS */
+   DSL_int16_t deltaTARSNRMds;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res0 : 14;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res1 : 1;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res2 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Target Noise Margin Delta DS */
+   DSL_int16_t deltaTARSNRMds;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res2 : 1;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res1 : 1;
+   /** Reserved (VDSL only) */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_NoiseMarginDeltaSet.
+*/
+struct ACK_NoiseMarginDeltaSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets parameters for downstream bearer channel 0 (Chapters 7.3.2.1-5 of
+   G.997.1 [11]). Bearer channel configuration at the CPE is optional and just
+   used to further limit the parameters usually configured at the CO.The mode,
+   ATM or PTM, is selected with the configuration controls "ATMControl" and
+   "PTMControl" in Parameter 2. Exactly one of them must be enabled, not both!
+*/
+struct CMD_BearerCh0_DS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Reserved (STM) */
+   DSL_uint16_t Res1 : 1;
+   /** ATM Configuration Control */
+   DSL_uint16_t ATMControl : 1;
+   /** PTM Configuration Control */
+   DSL_uint16_t PTMControl : 1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** Minimum Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t minRate0_PTMds_LSW;
+   /** Minimum Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t minRate0_PTMds_MSW;
+   /** Maximum Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t maxRate0_PTMds_LSW;
+   /** Maximum Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t maxRate0_PTMds_MSW;
+   /** Minimum Reserved Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t minResRate0_PTMds_LSW;
+   /** Minimum Reserved Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t minResRate0_PTMds_MSW;
+   /** Reserved */
+   DSL_uint8_t Res3;
+   /** Maximum Interleaving Delay BC0 PTM DS */
+   DSL_uint8_t maxDelay0_PTMds;
+   /** Reserved */
+   DSL_uint16_t Res4 : 4;
+   /** OPTIONAL CIPOLICY 2, BC0 PTM DS */
+   DSL_uint16_t CIPolicy2_PTMds : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 PTM DS */
+   DSL_uint16_t CIPolicy1_PTMds : 1;
+   /** "SHORT PACKETS" OPTION BC0 PTM DS */
+   DSL_uint16_t ShortPacket_PTMds : 1;
+   /** "PRE-EMPTION" OPTION BC0 PTM DS */
+   DSL_uint16_t Preempt_PTMds : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** Maximum BER BC0 PTM DS */
+   DSL_uint16_t BER_PTMds : 2;
+   /** Reserved */
+   DSL_uint16_t Res6 : 4;
+   /** Minimum INP BC0 PTM DS */
+   DSL_uint16_t minINP_PTMds : 12;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Minimum Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t minRate0_ATMds_LSW;
+   /** Minimum Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t minRate0_ATMds_MSW;
+   /** Maximum Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t maxRate0_ATMds_LSW;
+   /** Maximum Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t maxRate0_ATMds_MSW;
+   /** Minimum Reserved Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t minResRate0_ATMds_LSW;
+   /** Minimum Reserved Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t minResRate0_ATMds_MSW;
+   /** Reserved */
+   DSL_uint8_t Res8;
+   /** Maximum Interleaving Delay BC0 ATM DS */
+   DSL_uint8_t maxDelay0_ATMds;
+   /** Reserved */
+   DSL_uint16_t Res9 : 4;
+   /** OPTIONAL CIPOLICY 2, BC0 ATM DS */
+   DSL_uint16_t CIPolicy2_ATMds : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 ATM DS */
+   DSL_uint16_t CIPolicy1_ATMds : 1;
+   /** Reserved */
+   DSL_uint16_t Res10 : 8;
+   /** Maximum BER BC0 ATM DS */
+   DSL_uint16_t BER_ATMds : 2;
+   /** Reserved */
+   DSL_uint16_t Res11 : 4;
+   /** Minimum INP BC0 ATM DS */
+   DSL_uint16_t minINP_ATMds : 12;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PTM Configuration Control */
+   DSL_uint16_t PTMControl : 1;
+   /** ATM Configuration Control */
+   DSL_uint16_t ATMControl : 1;
+   /** Reserved (STM) */
+   DSL_uint16_t Res1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** Minimum Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t minRate0_PTMds_LSW;
+   /** Minimum Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t minRate0_PTMds_MSW;
+   /** Maximum Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t maxRate0_PTMds_LSW;
+   /** Maximum Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t maxRate0_PTMds_MSW;
+   /** Minimum Reserved Data Rate BC0 PTM DS, LSW */
+   DSL_uint16_t minResRate0_PTMds_LSW;
+   /** Minimum Reserved Data Rate BC0 PTM DS, MSW */
+   DSL_uint16_t minResRate0_PTMds_MSW;
+   /** Maximum Interleaving Delay BC0 PTM DS */
+   DSL_uint8_t maxDelay0_PTMds;
+   /** Reserved */
+   DSL_uint8_t Res3;
+   /** Maximum BER BC0 PTM DS */
+   DSL_uint16_t BER_PTMds : 2;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** "PRE-EMPTION" OPTION BC0 PTM DS */
+   DSL_uint16_t Preempt_PTMds : 1;
+   /** "SHORT PACKETS" OPTION BC0 PTM DS */
+   DSL_uint16_t ShortPacket_PTMds : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 PTM DS */
+   DSL_uint16_t CIPolicy1_PTMds : 1;
+   /** OPTIONAL CIPOLICY 2, BC0 PTM DS */
+   DSL_uint16_t CIPolicy2_PTMds : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 4;
+   /** Minimum INP BC0 PTM DS */
+   DSL_uint16_t minINP_PTMds : 12;
+   /** Reserved */
+   DSL_uint16_t Res6 : 4;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Minimum Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t minRate0_ATMds_LSW;
+   /** Minimum Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t minRate0_ATMds_MSW;
+   /** Maximum Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t maxRate0_ATMds_LSW;
+   /** Maximum Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t maxRate0_ATMds_MSW;
+   /** Minimum Reserved Data Rate BC0 ATM DS, LSW */
+   DSL_uint16_t minResRate0_ATMds_LSW;
+   /** Minimum Reserved Data Rate BC0 ATM DS, MSW */
+   DSL_uint16_t minResRate0_ATMds_MSW;
+   /** Maximum Interleaving Delay BC0 ATM DS */
+   DSL_uint8_t maxDelay0_ATMds;
+   /** Reserved */
+   DSL_uint8_t Res8;
+   /** Maximum BER BC0 ATM DS */
+   DSL_uint16_t BER_ATMds : 2;
+   /** Reserved */
+   DSL_uint16_t Res10 : 8;
+   /** OPTIONAL CIPOLICY 1, BC0 ATM DS */
+   DSL_uint16_t CIPolicy1_ATMds : 1;
+   /** OPTIONAL CIPOLICY 2, BC0 ATM DS */
+   DSL_uint16_t CIPolicy2_ATMds : 1;
+   /** Reserved */
+   DSL_uint16_t Res9 : 4;
+   /** Minimum INP BC0 ATM DS */
+   DSL_uint16_t minINP_ATMds : 12;
+   /** Reserved */
+   DSL_uint16_t Res11 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_BearerCh0_DS_Set. (Configuration of bearer channel
+   0).
+*/
+struct ACK_BearerCh0_DS_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets parameters for upstream bearer channel 0 (Chapters 7.3.2.1-5 of G.997.1
+   [11]). Bearer channel configuration at the CPE is optional and just used to
+   further limit the parameters usually configured at the CO.The mode, ATM or
+   PTM, is selected with the configuration controls "ATMControl" and
+   "PTMControl" in Parameter 2. Exactly one of them must be enabled, not both!
+*/
+struct CMD_BearerCh0_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Reserved (STM) */
+   DSL_uint16_t Res1 : 1;
+   /** ATM Configuration Control */
+   DSL_uint16_t ATMControl : 1;
+   /** PTM Configuration Control */
+   DSL_uint16_t PTMControl : 1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** Minimum Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t minRate0_PTMus_LSW;
+   /** Minimum Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t minRate0_PTMus_MSW;
+   /** Maximum Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t maxRate0_PTMus_LSW;
+   /** Maximum Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t maxRate0_PTMus_MSW;
+   /** Minimum Reserved Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t minResRate0_PTMus_LSW;
+   /** Minimum Reserved Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t minResRate0_PTMus_MSW;
+   /** Reserved */
+   DSL_uint8_t Res3;
+   /** Maximum Interleaving Delay BC0 PTM US */
+   DSL_uint8_t maxDelay0_PTMus;
+   /** Reserved */
+   DSL_uint16_t Res4 : 4;
+   /** OPTIONAL CIPOLICY 2, BC0 PTM US */
+   DSL_uint16_t CIPolicy2_PTMus : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 PTM US */
+   DSL_uint16_t CIPolicy1_PTMus : 1;
+   /** "SHORT PACKETS" OPTION BC0 PTM US */
+   DSL_uint16_t ShortPacket_PTMus : 1;
+   /** "PRE-EMPTION" OPTION BC0 PTM US */
+   DSL_uint16_t Preempt_PTMus : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** Maximum BER BC0 PTM US */
+   DSL_uint16_t BER_PTMus : 2;
+   /** Reserved */
+   DSL_uint16_t Res6 : 4;
+   /** Minimum INP BC0 PTM US */
+   DSL_uint16_t minINP_PTMus : 12;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Minimum Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t minRate0_ATMus_LSW;
+   /** Minimum Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t minRate0_ATMus_MSW;
+   /** Maximum Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t maxRate0_ATMus_LSW;
+   /** Maximum Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t maxRate0_ATMus_MSW;
+   /** Minimum Reserved Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t minResRate0_ATMus_LSW;
+   /** Minimum Reserved Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t minResRate0_ATMus_MSW;
+   /** Reserved */
+   DSL_uint8_t Res8;
+   /** Maximum Interleaving Delay BC0 ATM US */
+   DSL_uint8_t maxDelay0_ATMus;
+   /** Reserved */
+   DSL_uint16_t Res9 : 4;
+   /** OPTIONAL CIPOLICY 1, BC0 ATM US */
+   DSL_uint16_t CIPolicy2_ATMus : 1;
+   /** OPTIONAL CIPOLICY 2, BC0 ATM US */
+   DSL_uint16_t CIPolicy1_ATMus : 1;
+   /** Reserved */
+   DSL_uint16_t Res10 : 8;
+   /** Maximum BER BC0 ATM US */
+   DSL_uint16_t BER_ATMus : 2;
+   /** Reserved */
+   DSL_uint16_t Res11 : 4;
+   /** Minimum INP BC0 ATM US */
+   DSL_uint16_t minINP_ATMus : 12;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PTM Configuration Control */
+   DSL_uint16_t PTMControl : 1;
+   /** ATM Configuration Control */
+   DSL_uint16_t ATMControl : 1;
+   /** Reserved (STM) */
+   DSL_uint16_t Res1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** Minimum Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t minRate0_PTMus_LSW;
+   /** Minimum Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t minRate0_PTMus_MSW;
+   /** Maximum Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t maxRate0_PTMus_LSW;
+   /** Maximum Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t maxRate0_PTMus_MSW;
+   /** Minimum Reserved Data Rate BC0 PTM US, LSW */
+   DSL_uint16_t minResRate0_PTMus_LSW;
+   /** Minimum Reserved Data Rate BC0 PTM US, MSW */
+   DSL_uint16_t minResRate0_PTMus_MSW;
+   /** Maximum Interleaving Delay BC0 PTM US */
+   DSL_uint8_t maxDelay0_PTMus;
+   /** Reserved */
+   DSL_uint8_t Res3;
+   /** Maximum BER BC0 PTM US */
+   DSL_uint16_t BER_PTMus : 2;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** "PRE-EMPTION" OPTION BC0 PTM US */
+   DSL_uint16_t Preempt_PTMus : 1;
+   /** "SHORT PACKETS" OPTION BC0 PTM US */
+   DSL_uint16_t ShortPacket_PTMus : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 PTM US */
+   DSL_uint16_t CIPolicy1_PTMus : 1;
+   /** OPTIONAL CIPOLICY 2, BC0 PTM US */
+   DSL_uint16_t CIPolicy2_PTMus : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 4;
+   /** Minimum INP BC0 PTM US */
+   DSL_uint16_t minINP_PTMus : 12;
+   /** Reserved */
+   DSL_uint16_t Res6 : 4;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Minimum Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t minRate0_ATMus_LSW;
+   /** Minimum Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t minRate0_ATMus_MSW;
+   /** Maximum Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t maxRate0_ATMus_LSW;
+   /** Maximum Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t maxRate0_ATMus_MSW;
+   /** Minimum Reserved Data Rate BC0 ATM US, LSW */
+   DSL_uint16_t minResRate0_ATMus_LSW;
+   /** Minimum Reserved Data Rate BC0 ATM US, MSW */
+   DSL_uint16_t minResRate0_ATMus_MSW;
+   /** Maximum Interleaving Delay BC0 ATM US */
+   DSL_uint8_t maxDelay0_ATMus;
+   /** Reserved */
+   DSL_uint8_t Res8;
+   /** Maximum BER BC0 ATM US */
+   DSL_uint16_t BER_ATMus : 2;
+   /** Reserved */
+   DSL_uint16_t Res10 : 8;
+   /** OPTIONAL CIPOLICY 2, BC0 ATM US */
+   DSL_uint16_t CIPolicy1_ATMus : 1;
+   /** OPTIONAL CIPOLICY 1, BC0 ATM US */
+   DSL_uint16_t CIPolicy2_ATMus : 1;
+   /** Reserved */
+   DSL_uint16_t Res9 : 4;
+   /** Minimum INP BC0 ATM US */
+   DSL_uint16_t minINP_ATMus : 12;
+   /** Reserved */
+   DSL_uint16_t Res11 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_BearerCh0_US_Set. (Configuration of bearer channel
+   0).
+*/
+struct ACK_BearerCh0_US_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message selects the channel initialization policy (CIPOLICY) to be
+   applied for the tranceiver configuration. (Section 7.3.2.10 of G.997.1)In
+   ADSL mode, the message is applicable only for ADSL2/2+ (Section 7.10.3 of
+   G.992.3 Amd 3). The standard defines the parameter for the CO only. Here, the
+   message is applied at the ADSL-CPE, then it overrides the policy given by the
+   CO!
+*/
+struct CMD_InitPolicySet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Reserved for Init Policy BC1 */
+   DSL_uint16_t Res1 : 1;
+   /** Init Policy BC0 */
+   DSL_uint16_t policy0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Init Policy BC0 */
+   DSL_uint16_t policy0 : 1;
+   /** Reserved for Init Policy BC1 */
+   DSL_uint16_t Res1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgment for message CMD_InitPolicySet.
+*/
+struct ACK_InitPolicySet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of options for the modem state machine.
+*/
+struct CMD_ErasureControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** "Trust-Me"-Bit, Bit 2 (ADSL only) */
+   DSL_uint16_t trustMe : 1;
+   /** Erasure Policy, Bit 1 */
+   DSL_uint16_t erasurePolicy : 1;
+   /** Reserved, Bit0 */
+   DSL_uint16_t Res1 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved, Bit0 */
+   DSL_uint16_t Res1 : 1;
+   /** Erasure Policy, Bit 1 */
+   DSL_uint16_t erasurePolicy : 1;
+   /** "Trust-Me"-Bit, Bit 2 (ADSL only) */
+   DSL_uint16_t trustMe : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_ErasureControlSet.
+*/
+struct ACK_ErasureControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Performs some miscellaneous chip set configurations.
+*/
+struct CMD_Misc_ConfigSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** TPS-TC Type Event Enable */
+   DSL_uint16_t TcTypeEvt : 1;
+   /** Hlog Invalidation */
+   DSL_uint16_t HlogValidation : 1;
+   /** Short CLR for ADSL2+ */
+   DSL_uint16_t ShortClrA2p : 1;
+   /** Short CLR for ADSL2 */
+   DSL_uint16_t ShortClrA2 : 1;
+   /** Short CLR for ADSL1 */
+   DSL_uint16_t ShortClrA1 : 1;
+   /** INP Protection Improvement (VDSL only) */
+   DSL_uint16_t FrameParams : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Activation Start Mode (ADSL only) */
+   DSL_uint16_t StartMode : 1;
+   /** Non-standard GHS-ANSI Activation (ADSL only) */
+   DSL_uint16_t GhsAnsiSeq : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Non-standard GHS-ANSI Activation (ADSL only) */
+   DSL_uint16_t GhsAnsiSeq : 1;
+   /** Activation Start Mode (ADSL only) */
+   DSL_uint16_t StartMode : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** INP Protection Improvement (VDSL only) */
+   DSL_uint16_t FrameParams : 1;
+   /** Short CLR for ADSL1 */
+   DSL_uint16_t ShortClrA1 : 1;
+   /** Short CLR for ADSL2 */
+   DSL_uint16_t ShortClrA2 : 1;
+   /** Short CLR for ADSL2+ */
+   DSL_uint16_t ShortClrA2p : 1;
+   /** Hlog Invalidation */
+   DSL_uint16_t HlogValidation : 1;
+   /** TPS-TC Type Event Enable */
+   DSL_uint16_t TcTypeEvt : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for ACK_Misc_ConfigSet.
+*/
+struct ACK_Misc_ConfigSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Performs some miscellaneous chip set configurations.
+*/
+struct CMD_OperationOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** VRX_ENABLE, Fixed value */
+   DSL_uint16_t Mfd : 1;
+   /** Enhanced Upstream Framing (ADSL-Only) */
+   DSL_uint16_t UsFramingExt : 1;
+   /** NTR (currently VDSL-Only) */
+   DSL_uint16_t Ntr : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** NTR (currently VDSL-Only) */
+   DSL_uint16_t Ntr : 1;
+   /** Enhanced Upstream Framing (ADSL-Only) */
+   DSL_uint16_t UsFramingExt : 1;
+   /** VRX_ENABLE, Fixed value */
+   DSL_uint16_t Mfd : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_OperationOptionsSet.
+*/
+struct ACK_OperationOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message selects a DSL operator. The information is used to configure
+   operator specific settings inside the DSL firmware.
+*/
+struct CMD_OperatorSelect
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DSL Operator Selection */
+   DSL_uint16_t DslOperator;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DSL Operator Selection */
+   DSL_uint16_t DslOperator;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for ACK_OperatorSelect.
+*/
+struct ACK_OperatorSelect
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message reads back the selected DSL operator, as selected by
+   ACK_OperatorSelect.
+*/
+struct CMD_OperatorSelectionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message provides the selected DSL operator.
+*/
+struct ACK_OperatorSelectionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Selected DSL Operator */
+   DSL_uint16_t DslOperator;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Selected DSL Operator */
+   DSL_uint16_t DslOperator;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The messages configures settings for test modes.
+*/
+struct CMD_TestOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 11;
+   /** ATTNDR Improved Method Support (VDSL only) */
+   DSL_uint16_t AttndrImproved : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** US Finegain Control */
+   DSL_uint16_t FgainControlUs : 1;
+   /** DS Finegain Control */
+   DSL_uint16_t FgainControlDs : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DS Finegain Control */
+   DSL_uint16_t FgainControlDs : 1;
+   /** US Finegain Control */
+   DSL_uint16_t FgainControlUs : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** ATTNDR Improved Method Support (VDSL only) */
+   DSL_uint16_t AttndrImproved : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 11;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_TestOptionsSet.
+*/
+struct ACK_TestOptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the PPE clock. The message is supposed to be used for debug/test
+   purposes only. If applied this PPE clock is forced and will be kept
+   throughout the link. The PPE frequency scaling automode (see
+   CMD_PPE_ClockConfigure) will then not change it but behave as being disabled.
+*/
+struct CMD_ClockSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 11;
+   /** Clock Change Trigger */
+   DSL_uint16_t ppeClkSet : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** PPE Clock */
+   DSL_uint16_t ppeClock : 3;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Clock */
+   DSL_uint16_t ppeClock : 3;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Clock Change Trigger */
+   DSL_uint16_t ppeClkSet : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 11;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_ClockSet.
+*/
+struct ACK_ClockSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures PPE clock options.The message CMD_ClockSet used for debug/test
+   purposes forces a PPE clock frequency which will be kept throughout the
+   link.. The PPE frequency scaling automode (see CMD_ClockSet) will then not
+   change it but behave as being disabled.
+*/
+struct CMD_PPE_ClockConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Frequency Scaling Mode */
+   DSL_uint16_t FreqScaleMode;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Frequency Scaling Mode */
+   DSL_uint16_t FreqScaleMode;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_PPE_ClockConfigure.
+*/
+struct ACK_PPE_ClockConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads PPE clock settings.
+*/
+struct CMD_PPE_ClockGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides PPE clock settings.
+*/
+struct ACK_PPE_ClockGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** PPE Clock */
+   DSL_uint16_t ppeClock : 3;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Clock */
+   DSL_uint16_t ppeClock : 3;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads back PPE clock options.
+*/
+struct CMD_PPE_ClockConfigGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides PPE clock options.
+*/
+struct ACK_PPE_ClockConfigGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Frequency Scaling Mode */
+   DSL_uint16_t FreqScaleMode;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE Frequency Scaling Mode */
+   DSL_uint16_t FreqScaleMode;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets an offset for the PLL frequency compared to the crystals rated nominal
+   frequency of 36 MHz. This allows e.g. to fine tune the handshake tone
+   frequencies to exactly match the standard values.
+*/
+struct CMD_PLL_ClockSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PLL Clock Offset in ppm */
+   DSL_int16_t pllClockOffset;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PLL Clock Offset in ppm */
+   DSL_int16_t pllClockOffset;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_PLL_ClockSet.
+*/
+struct ACK_PLL_ClockSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_CONFIG_PMD_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_const.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_const.h
new file mode 100644
index 0000000000000000000000000000000000000000..9803f2290e130d1d073c2bc002502b57ccaf249d
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_const.h
@@ -0,0 +1,611 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_CONST_H_
+#define _DRV_DSL_CPE_VRX_MSG_CONST_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _CONST_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Common Constants Definition section ----- */
+/** Disable a functionality or state */
+#define VRX_DISABLE 0
+/** Enable a functionality or state */
+#define VRX_ENABLE 1
+/** Disable a functionality or state */
+#define VRX_DISABLE_N 1
+/** Enable a functionality or state */
+#define VRX_ENABLE_N 0
+/** Logical value TRUE */
+#define VRX_TRUE 1
+/** Logical value FALSE */
+#define VRX_FALSE 0
+/** Functionality is supported */
+#define SUPPORTED 1
+/** Functionality is not supported */
+#define NOT_SUPPORTED 0
+/** Counter value is below threshold */
+#define CNTR_OK 0
+/** Counter threshold met or exceeded */
+#define CNTR_THRESH_HIT 1
+/** Fixed Value of 0; Used for numbering parameters (like Array Index number or Length number) */
+#define FV0 0
+/** Fixed Value of 1; Used for numbering parameters (like Array Index number or Length number) */
+#define FV1 1
+/** Fixed Value of 2; Used for numbering parameters (like Array Index number or Length number) */
+#define FV2 2
+/** Fixed Value of 3; Used for numbering parameters (like Array Index number or Length number) */
+#define FV3 3
+/** Fixed Value of 4; Used for numbering parameters (like Array Index number or Length number) */
+#define FV4 4
+/** Fixed Value of 5; Used for numbering parameters (like Array Index number or Length number) */
+#define FV5 5
+/** Fixed Value of 6; Used for numbering parameters (like Array Index number or Length number) */
+#define FV6 6
+/** Fixed Value of 7; Used for numbering parameters (like Array Index number or Length number) */
+#define FV7 7
+/** Fixed Value of 8; Used for numbering parameters (like Array Index number or Length number) */
+#define FV8 8
+/** Fixed Value of 9; Used for numbering parameters (like Array Index number or Length number) */
+#define FV9 9
+/** Fixed Value of 10; Used for numbering parameters (like Array Index number or Length number) */
+#define FV10 10
+/** Fixed Value of 11; Used for numbering parameters (like Array Index number or Length number) */
+#define FV11 11
+/** Fixed Value of 12; Used for numbering parameters (like Array Index number or Length number) */
+#define FV12 12
+/** Fixed Value of 13; Used for numbering parameters (like Array Index number or Length number) */
+#define FV13 13
+/** Fixed Value of 15; Used for numbering parameters (like Array Index number or Length number) */
+#define FV15 15
+/** Fixed Value of 16; Used for numbering parameters (like Array Index number or Length number) */
+#define FV16 16
+/** Fixed Value of 17; Used for numbering parameters (like Array Index number or Length number) */
+#define FV17 17
+/** Fixed Value of 20; Used for numbering parameters (like Array Index number or Length number) */
+#define FV20 20
+/** Fixed Value of 32; Used for numbering parameters (like Array Index number or Length number) */
+#define FV32 32
+/** Fixed Value of 127; Used for numbering parameters (like Array Index number or Length number) */
+#define FV127 127
+/** Fixed Value of 128; Used for numbering parameters (like Array Index number or Length number) */
+#define FV128 128
+/** Fixed Value of 256; Used for numbering parameters (like Array Index number or Length number) */
+#define FV256 256
+/** Link 0 is selected */
+#define LINK0 0x0
+/** Link 1 is selected */
+#define LINK1 0x1
+/** No Failure */
+#define VRX_OK 0x0
+/** Failure */
+#define VRX_FAIL 0x1
+/** EOC Failure */
+#define VRX_EOCFAIL 0x2
+/** Request was rejected */
+#define VRX_REJECTED 0x1
+/* ----- Common Constants Definition section (End) ----- */
+/* ----- Message Specific Constants Definition section ----- */
+/* ----- Message Specific Constants Definition section (End) ----- */
+/**
+
+*/
+typedef struct VRX_BAT_TableEntry VRX_BAT_TableEntry_t;
+
+/**
+
+*/
+typedef struct VRX_ToneIndex VRX_ToneIndex_t;
+
+/**
+
+*/
+typedef struct VRX_PSDbreak VRX_PSDbreak_t;
+
+/**
+
+*/
+typedef struct VRX_PSD_TxDS VRX_PSD_TxDS_t;
+
+/**
+
+*/
+typedef struct VRX_PSDbreak2 VRX_PSDbreak2_t;
+
+/**
+
+*/
+typedef struct VRX_PSD_CompBreak VRX_PSD_CompBreak_t;
+
+/**
+
+*/
+typedef struct VRX_RxRef2PSD VRX_RxRef2PSD_t;
+
+/**
+
+*/
+typedef struct VRX_LineStatus_pb VRX_LineStatus_pb_t;
+
+/**
+
+*/
+typedef struct VRX_TSSIbreak VRX_TSSIbreak_t;
+
+/**
+
+*/
+typedef struct VRX_TSSI VRX_TSSI_t;
+
+/**
+
+*/
+typedef struct VRX_QLN_NE VRX_QLN_NE_t;
+
+/**
+
+*/
+typedef struct VRX_TestParam VRX_TestParam_t;
+
+/**
+
+*/
+typedef struct VRX_SNR VRX_SNR_t;
+
+/**
+
+*/
+typedef struct VRX_HLIN VRX_HLIN_t;
+
+/**
+
+*/
+typedef struct VRX_ClearEOC VRX_ClearEOC_t;
+
+/**
+
+*/
+typedef struct VRX_UER VRX_UER_t;
+
+/**
+
+*/
+typedef struct VRX_TIME VRX_TIME_t;
+
+/**
+
+*/
+typedef struct VRX_ATMcell VRX_ATMcell_t;
+
+/**
+
+*/
+struct VRX_BAT_TableEntry
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Bit Allocation */
+   DSL_uint8_t data_01;
+   /** Bit Allocation */
+   DSL_uint8_t data_00;
+#else
+   /** Bit Allocation */
+   DSL_uint8_t data_00;
+   /** Bit Allocation */
+   DSL_uint8_t data_01;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_ToneIndex
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** First Tone Index */
+   DSL_uint16_t first;
+   /** Last Tone Index */
+   DSL_uint16_t last;
+#else
+   /** First Tone Index */
+   DSL_uint16_t first;
+   /** Last Tone Index */
+   DSL_uint16_t last;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_PSDbreak
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** PSD Level of Breakpoint */
+   DSL_uint16_t level;
+   /** Reserved */
+   DSL_uint16_t Res0;
+#else
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** PSD Level of Breakpoint */
+   DSL_uint16_t level;
+   /** Reserved */
+   DSL_uint16_t Res0;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_PSD_TxDS
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Breakpoint Descriptor TxPSDds */
+   VRX_PSDbreak_t breakpoint[48];
+#else
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Breakpoint Descriptor TxPSDds */
+   VRX_PSDbreak_t breakpoint[48];
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_PSDbreak2
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** PSD Level of Breakpoint */
+   DSL_uint16_t level;
+#else
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** PSD Level of Breakpoint */
+   DSL_uint16_t level;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_PSD_CompBreak
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** Compensation Level of Breakpoint */
+   DSL_int16_t level;
+#else
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex;
+   /** Compensation Level of Breakpoint */
+   DSL_int16_t level;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_RxRef2PSD
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** UPBO RxRefPSD Parameter "a" */
+   DSL_int16_t a;
+   /** UPBO RxRefPSD Parameter "b" */
+   DSL_int16_t b;
+#else
+   /** UPBO RxRefPSD Parameter "a" */
+   DSL_int16_t a;
+   /** UPBO RxRefPSD Parameter "b" */
+   DSL_int16_t b;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_LineStatus_pb
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** LATN per Band */
+   DSL_uint16_t LATNpb;
+   /** SATN per Band */
+   DSL_uint16_t SATNpb;
+   /** SNRM per Band */
+   DSL_uint16_t SNRMpb;
+#else
+   /** LATN per Band */
+   DSL_uint16_t LATNpb;
+   /** SATN per Band */
+   DSL_uint16_t SATNpb;
+   /** SNRM per Band */
+   DSL_uint16_t SNRMpb;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_TSSIbreak
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Supported Set Status */
+   DSL_uint16_t supset : 1;
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex : 15;
+   /** Transmit Spectrum Shaping Value of Breakpoint */
+   DSL_uint16_t level;
+#else
+   /** Tone Index of Breakpoint */
+   DSL_uint16_t toneIndex : 15;
+   /** Supported Set Status */
+   DSL_uint16_t supset : 1;
+   /** Transmit Spectrum Shaping Value of Breakpoint */
+   DSL_uint16_t level;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_TSSI
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Number of breakpoints */
+   DSL_uint16_t Num;
+   /** TSSI breakpoints */
+   VRX_TSSIbreak_t TSSIbrkp[64];
+#else
+   /** Number of breakpoints */
+   DSL_uint16_t Num;
+   /** TSSI breakpoints */
+   VRX_TSSIbreak_t TSSIbrkp[64];
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_QLN_NE
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln_01;
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln_00;
+#else
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln_00;
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln_01;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_TestParam
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** HLOG per Subcarrier Group */
+   DSL_uint16_t hlog;
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr;
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln;
+#else
+   /** HLOG per Subcarrier Group */
+   DSL_uint16_t hlog;
+   /** QLN per Subcarrier Group */
+   DSL_uint8_t qln;
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_SNR
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr_01;
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr_00;
+#else
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr_00;
+   /** SNR per Subcarrier Group */
+   DSL_uint8_t snr_01;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_HLIN
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** HLIN per Subcarrier Group, Real Part */
+   DSL_int16_t hlin_real;
+   /** HLIN per Subcarrier Group, Imaginary Part */
+   DSL_int16_t hlin_imag;
+#else
+   /** HLIN per Subcarrier Group, Real Part */
+   DSL_int16_t hlin_real;
+   /** HLIN per Subcarrier Group, Imaginary Part */
+   DSL_int16_t hlin_imag;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_ClearEOC
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Reserved  */
+   DSL_uint16_t Res0 : 6;
+   /** Length of the Clear EOC Message  */
+   DSL_uint16_t Length : 10;
+   /** Protocol Identifier */
+   DSL_uint16_t ProtIdent;
+   /** Clear EOC data field */
+   DSL_uint8_t Data[508];
+#else
+   /** Length of the Clear EOC Message  */
+   DSL_uint16_t Length : 10;
+   /** Reserved  */
+   DSL_uint16_t Res0 : 6;
+   /** Protocol Identifier */
+   DSL_uint16_t ProtIdent;
+   /** Clear EOC data field */
+   DSL_uint8_t Data[508];
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_UER
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** UERps Real Part, LSW */
+   DSL_uint16_t UER_Real_LSW;
+   /** UERps Real Part, MSW */
+   DSL_uint16_t UER_Real_MSW;
+   /** UERps Imaginary Part, LSW */
+   DSL_uint16_t UER_Imag_LSW;
+   /** UERps Imaginary Part, MSW */
+   DSL_uint16_t UER_Imag_MSW;
+#else
+   /** UERps Real Part, LSW */
+   DSL_uint16_t UER_Real_LSW;
+   /** UERps Real Part, MSW */
+   DSL_uint16_t UER_Real_MSW;
+   /** UERps Imaginary Part, LSW */
+   DSL_uint16_t UER_Imag_LSW;
+   /** UERps Imaginary Part, MSW */
+   DSL_uint16_t UER_Imag_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_TIME
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Hours */
+   DSL_uint8_t hours;
+   /** Minutes */
+   DSL_uint8_t minutes;
+   /** Seconds */
+   DSL_uint8_t seconds;
+   /** Reserved */
+   DSL_uint8_t Res0;
+#else
+   /** Minutes */
+   DSL_uint8_t minutes;
+   /** Hours */
+   DSL_uint8_t hours;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Seconds */
+   DSL_uint8_t seconds;
+#endif
+} __PACKED__ ;
+
+
+/**
+
+*/
+struct VRX_ATMcell
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** ATM cell (53 bytes) */
+   DSL_uint8_t ATMcell[53];
+   /** Reserved */
+   DSL_uint8_t Res0[3];
+#else
+   /** ATM cell (53 bytes) */
+   DSL_uint8_t ATMcell[53];
+   /** Reserved */
+   DSL_uint8_t Res0[3];
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_CONST_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_dmt_scope.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_dmt_scope.h
new file mode 100644
index 0000000000000000000000000000000000000000..c8822230a17c4038542781972abe465f49472ee9
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_dmt_scope.h
@@ -0,0 +1,571 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_DMT_SCOPE_H_
+#define _DRV_DSL_CPE_VRX_MSG_DMT_SCOPE_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _DMT_SCOPE_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+#define CMD_TEST_AFE_LoopControl_NO_LOOP 0x0
+#define CMD_TEST_AFE_LoopControl_ALOOP 0x1
+#define CMD_TEST_TxControlSet_SEND_QUIET 0
+#define CMD_TEST_TxControlSet_SEND_REVERB 1
+#define CMD_TEST_TxControlSet_SEND_SEGUE 2
+#define CMD_TEST_TxControlSet_SEND_MEDLEY 3
+#define CMD_TEST_RxControlSet_MEASURE_PSD 14
+#define CMD_TEST_RxControlSet_FDQ_TRAINING 16
+#define CMD_TEST_RxControlSet_MEASURE_SNR 17
+#define CMD_TEST_RxControlSet_PGA_TRAINING 19
+#define CMD_TEST_RxPSD_MeasureModeSet_AVERAGE 0x0
+#define CMD_TEST_RxPSD_MeasureModeSet_PEAKHOLD 0x1
+#define CMD_TEST_RxPSD_MeasureModeSet_BOTTOMHOLD 0x2
+#define CMD_TEST_RxGainControl_DEFGAIN 0x0
+#define CMD_TEST_RxGainControl_MAXGAIN 0x1
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_TEST_AFE_LoopControl */
+#define CMD_TEST_AFE_LOOPCONTROL 0x0156
+
+/**
+   This message can be used to enable or disable the (analog) loop within the
+   Analog Front-End (AFE) to loop back data from the transmit to the receive
+   part.
+*/
+typedef struct CMD_TEST_AFE_LoopControl CMD_TEST_AFE_LoopControl_t;
+
+/** Message ID for ACK_TEST_AFE_LoopControl */
+#define ACK_TEST_AFE_LOOPCONTROL 0x0156
+
+/**
+   This message acknowledges the message CMD_TEST_AFE_LoopControl.For TEST state
+   only!
+*/
+typedef struct ACK_TEST_AFE_LoopControl ACK_TEST_AFE_LoopControl_t;
+
+/** Message ID for CMD_TEST_TxControlSet */
+#define CMD_TEST_TXCONTROLSET 0x0844
+
+/**
+   The message controls the transmit signal in TEST state. Each setting is valid
+   until either another value is set with this message that requires the
+   previous setting to be overwritten or until TEST state is left.
+*/
+typedef struct CMD_TEST_TxControlSet CMD_TEST_TxControlSet_t;
+
+/** Message ID for ACK_TEST_TxControlSet */
+#define ACK_TEST_TXCONTROLSET 0x0844
+
+/**
+   Acknowledgement for message CMD_TEST_TxControlSet.
+*/
+typedef struct ACK_TEST_TxControlSet ACK_TEST_TxControlSet_t;
+
+/** Message ID for CMD_TEST_CarrierMaskingTxSet */
+#define CMD_TEST_CARRIERMASKINGTXSET 0x0256
+
+/**
+   Masks out every 100th subcarrier starting from an arbitrary index number
+   1...99.The carrier-mask is applied to signals in the frequency domain ("Send
+   REVERB" and "Send MEDLEY"). The signal must be activated before!
+*/
+typedef struct CMD_TEST_CarrierMaskingTxSet CMD_TEST_CarrierMaskingTxSet_t;
+
+/** Message ID for ACK_TEST_CarrierMaskingTxSet */
+#define ACK_TEST_CARRIERMASKINGTXSET 0x0256
+
+/**
+   Acknowledgement for message CMD_TEST_CarrierMaskingTxSet.
+*/
+typedef struct ACK_TEST_CarrierMaskingTxSet ACK_TEST_CarrierMaskingTxSet_t;
+
+/** Message ID for CMD_TEST_RxControlSet */
+#define CMD_TEST_RXCONTROLSET 0x0944
+
+/**
+   The message triggers measurements of the receive signal.
+*/
+typedef struct CMD_TEST_RxControlSet CMD_TEST_RxControlSet_t;
+
+/** Message ID for ACK_TEST_RxControlSet */
+#define ACK_TEST_RXCONTROLSET 0x0944
+
+/**
+   Acknowledgement for message CMD_TEST_RxControlSet.
+*/
+typedef struct ACK_TEST_RxControlSet ACK_TEST_RxControlSet_t;
+
+/** Message ID for CMD_TEST_RxPSD_TableEntriesGet */
+#define CMD_TEST_RXPSD_TABLEENTRIESGET 0x5403
+
+/**
+   The message requests information about the receive PSD per subcarrier
+   available at the near-end side, which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices accordingly.
+*/
+typedef struct CMD_TEST_RxPSD_TableEntriesGet CMD_TEST_RxPSD_TableEntriesGet_t;
+
+/** Message ID for ACK_TEST_RxPSD_TableEntriesGet */
+#define ACK_TEST_RXPSD_TABLEENTRIESGET 0x5403
+
+/**
+   Returns information about the receive PSD per subcarrier available at the
+   near-end side, which means for downstream direction at the CPE.
+*/
+typedef struct ACK_TEST_RxPSD_TableEntriesGet ACK_TEST_RxPSD_TableEntriesGet_t;
+
+/** Message ID for CMD_TEST_RxPSD_Calibrate */
+#define CMD_TEST_RXPSD_CALIBRATE 0x0356
+
+/**
+   Sets the board specific calibration factor necessary to calculate the
+   absolute PSD value per subcarrier.Attention: The command needs to be applied
+   only once after power-up for a calibration value determined according to the
+   sequence described below ("Getting the calibration value:"). Applying the
+   command a second time requires another determination of the calibration value
+   too, because the shift is always relative to the current values.
+*/
+typedef struct CMD_TEST_RxPSD_Calibrate CMD_TEST_RxPSD_Calibrate_t;
+
+/** Message ID for ACK_TEST_RxPSD_Calibrate */
+#define ACK_TEST_RXPSD_CALIBRATE 0x0356
+
+/**
+   Acknowledgement to CMD_TEST_RxPSD_Calibrate.
+*/
+typedef struct ACK_TEST_RxPSD_Calibrate ACK_TEST_RxPSD_Calibrate_t;
+
+/** Message ID for CMD_TEST_RxPSD_MeasureModeSet */
+#define CMD_TEST_RXPSD_MEASUREMODESET 0x0456
+
+/**
+   Configures options for the measurement of the PSD value per subcarrier.
+*/
+typedef struct CMD_TEST_RxPSD_MeasureModeSet CMD_TEST_RxPSD_MeasureModeSet_t;
+
+/** Message ID for ACK_TEST_RxPSD_MeasureModeSet */
+#define ACK_TEST_RXPSD_MEASUREMODESET 0x0456
+
+/**
+   Acknowledgement to CMD_TEST_RxPSD_MeasureModeSet.
+*/
+typedef struct ACK_TEST_RxPSD_MeasureModeSet ACK_TEST_RxPSD_MeasureModeSet_t;
+
+/** Message ID for CMD_TEST_RxGainControl */
+#define CMD_TEST_RXGAINCONTROL 0x0556
+
+/**
+   Sets the gains in the receive path (AGC, ACE, PREFI).
+*/
+typedef struct CMD_TEST_RxGainControl CMD_TEST_RxGainControl_t;
+
+/** Message ID for ACK_TEST_RxGainControl */
+#define ACK_TEST_RXGAINCONTROL 0x0556
+
+/**
+   Acknowledgement to CMD_TEST_RxGainControl.
+*/
+typedef struct ACK_TEST_RxGainControl ACK_TEST_RxGainControl_t;
+
+/**
+   This message can be used to enable or disable the (analog) loop within the
+   Analog Front-End (AFE) to loop back data from the transmit to the receive
+   part.
+*/
+struct CMD_TEST_AFE_LoopControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AFE Loop Control */
+   DSL_uint32_t loopControl;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AFE Loop Control */
+   DSL_uint32_t loopControl;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message acknowledges the message CMD_TEST_AFE_LoopControl.For TEST state
+   only!
+*/
+struct ACK_TEST_AFE_LoopControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message controls the transmit signal in TEST state. Each setting is valid
+   until either another value is set with this message that requires the
+   previous setting to be overwritten or until TEST state is left.
+*/
+struct CMD_TEST_TxControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TEST State's Transmit Signal Control */
+   DSL_uint16_t TxControl;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TEST State's Transmit Signal Control */
+   DSL_uint16_t TxControl;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_TEST_TxControlSet.
+*/
+struct ACK_TEST_TxControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Masks out every 100th subcarrier starting from an arbitrary index number
+   1...99.The carrier-mask is applied to signals in the frequency domain ("Send
+   REVERB" and "Send MEDLEY"). The signal must be activated before!
+*/
+struct CMD_TEST_CarrierMaskingTxSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** First Masked Tone */
+   DSL_uint32_t MaskTone0;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** First Masked Tone */
+   DSL_uint32_t MaskTone0;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_TEST_CarrierMaskingTxSet.
+*/
+struct ACK_TEST_CarrierMaskingTxSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message triggers measurements of the receive signal.
+*/
+struct CMD_TEST_RxControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TEST State's Receive Control */
+   DSL_uint16_t RxControl;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TEST State's Receive Control */
+   DSL_uint16_t RxControl;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_TEST_RxControlSet.
+*/
+struct ACK_TEST_RxControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message requests information about the receive PSD per subcarrier
+   available at the near-end side, which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices accordingly.
+*/
+struct CMD_TEST_RxPSD_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the receive PSD per subcarrier available at the
+   near-end side, which means for downstream direction at the CPE.
+*/
+struct ACK_TEST_RxPSD_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Receive PSD */
+   DSL_uint16_t PSDps[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Receive PSD */
+   DSL_uint16_t PSDps[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the board specific calibration factor necessary to calculate the
+   absolute PSD value per subcarrier.Attention: The command needs to be applied
+   only once after power-up for a calibration value determined according to the
+   sequence described below ("Getting the calibration value:"). Applying the
+   command a second time requires another determination of the calibration value
+   too, because the shift is always relative to the current values.
+*/
+struct CMD_TEST_RxPSD_Calibrate
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RxPSD Calibration Value */
+   DSL_uint32_t calibration;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RxPSD Calibration Value */
+   DSL_uint32_t calibration;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_TEST_RxPSD_Calibrate.
+*/
+struct ACK_TEST_RxPSD_Calibrate
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures options for the measurement of the PSD value per subcarrier.
+*/
+struct CMD_TEST_RxPSD_MeasureModeSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RxPSD Measurement Mode */
+   DSL_uint32_t MeasureMode;
+   /** Number of Frames */
+   DSL_uint32_t numOfFrames;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RxPSD Measurement Mode */
+   DSL_uint32_t MeasureMode;
+   /** Number of Frames */
+   DSL_uint32_t numOfFrames;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_TEST_RxPSD_MeasureModeSet.
+*/
+struct ACK_TEST_RxPSD_MeasureModeSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the gains in the receive path (AGC, ACE, PREFI).
+*/
+struct CMD_TEST_RxGainControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Rx Gain Level */
+   DSL_uint32_t RxGainLevel;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Rx Gain Level */
+   DSL_uint32_t RxGainLevel;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_TEST_RxGainControl.
+*/
+struct ACK_TEST_RxGainControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_DMT_SCOPE_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_ghs_status.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_ghs_status.h
new file mode 100644
index 0000000000000000000000000000000000000000..737930b8e8c64b11f37a676b9bb55b0430d01132
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_ghs_status.h
@@ -0,0 +1,5422 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_GHS_STATUS_H_
+#define _DRV_DSL_CPE_VRX_MSG_GHS_STATUS_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _GHS_STATUS_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+#define ACK_T1413_RevNo_O_Get_T1413REV1 0x0
+#define ACK_T1413_RevNo_O_Get_T1413REV2 0x1
+#define ACK_T1413_RevNo_R_Get_T1413REV1 0x0
+#define ACK_T1413_RevNo_R_Get_T1413REV2 0x1
+#define CMD_RFI_BandControlGet_FV 33
+#define ACK_RFI_BandControlGet_FV 33
+#define CMD_LineStatusPerBandDS_Get_FV 25
+#define ACK_LineStatusPerBandDS_Get_FV 25
+#define CMD_LineStatusPerBandUS_Get_FV 25
+#define ACK_LineStatusPerBandUS_Get_FV 25
+#define CMD_PSD_BreakpointsUS_Get_FV 97
+#define ACK_PSD_BreakpointsUS_Get_FV 97
+#define CMD_BearerChsDS_Get_FV 18
+#define ACK_BearerChsDS_Get_FV 18
+#define CMD_BearerChsUS_Get_FV 18
+#define ACK_BearerChsUS_Get_FV 18
+#define CMD_FrameDataExt2DS_Get_FV 42
+#define ACK_FrameDataExt2DS_Get_FV 42
+#define CMD_FrameDataExt2US_Get_FV 42
+#define ACK_FrameDataExt2US_Get_FV 42
+#define ACK_HybridGet_POTS 0x1
+#define ACK_HybridGet_ISDN_B 0x2
+#define ACK_HybridGet_ISDN_BJ 0x3
+#define ACK_HybridGet_UNIVERSAL 0x4
+#define ACK_MFD_ResultsGet_NONLNF 0x0
+#define ACK_MFD_ResultsGet_NLNFTRIGGERED 0x1
+#define ACK_MFD_ResultsGet_NLNFSTARTED 0x2
+#define ACK_MFD_ResultsGet_NLNFDONE 0x3
+#define ACK_MFD_ResultsGet_NORANGE 0x0
+#define ACK_MFD_ResultsGet_SHORTRANGE 0x1
+#define ACK_MFD_ResultsGet_MIDRANGE 0x2
+#define ACK_MFD_ResultsGet_LONGRANGE 0x3
+#define ACK_MFD_ResultsGet_READY 0x1
+#define ACK_MFD_ResultsGet_NOT_READY 0x0
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_HS_ToneGroupSet */
+#define CMD_HS_TONEGROUPSET 0x2D48
+
+/**
+   Selects one or more groups of tones to be used during the handshake phase.
+   (See G.994.1 Amendment 2 [8], Table 1/G.994.1).
+*/
+typedef struct CMD_HS_ToneGroupSet CMD_HS_ToneGroupSet_t;
+
+/** Message ID for ACK_HS_ToneGroupSet */
+#define ACK_HS_TONEGROUPSET 0x2D48
+
+/**
+   Acknowledgement to CMD_HS_ToneGroupSet.
+*/
+typedef struct ACK_HS_ToneGroupSet ACK_HS_ToneGroupSet_t;
+
+/** Message ID for CMD_HS_VDSL2ProfileControl */
+#define CMD_HS_VDSL2PROFILECONTROL 0x2C48
+
+/**
+   Configures the profile settings to be used for the handshake phase. (See
+   G.994.1 Amendment 4 [10], NPAR(3) coding).
+*/
+typedef struct CMD_HS_VDSL2ProfileControl CMD_HS_VDSL2ProfileControl_t;
+
+/** Message ID for ACK_HS_VDSL2ProfileControl */
+#define ACK_HS_VDSL2PROFILECONTROL 0x2C48
+
+/**
+   Acknowledgement to CMD_HS_VDSL2ProfileControl.
+*/
+typedef struct ACK_HS_VDSL2ProfileControl ACK_HS_VDSL2ProfileControl_t;
+
+/** Message ID for CMD_HS_StandardInfoFE_VDSL2Get */
+#define CMD_HS_STANDARDINFOFE_VDSL2GET 0xCC03
+
+/**
+   Requests the VDSL2 far-end Standard Info (See G.994.1 Amendment 4 [10],
+   NPAR(3) coding).
+*/
+typedef struct CMD_HS_StandardInfoFE_VDSL2Get CMD_HS_StandardInfoFE_VDSL2Get_t;
+
+/** Message ID for ACK_HS_StandardInfoFE_VDSL2Get */
+#define ACK_HS_STANDARDINFOFE_VDSL2GET 0xCC03
+
+/**
+   Delivers the VDSL2 far-end info as requested by
+   CMD_HS_StandardInfoFE_VDSL2Get (see G.994.1 Amendment 4 [10], NPAR(3)
+   coding).
+*/
+typedef struct ACK_HS_StandardInfoFE_VDSL2Get ACK_HS_StandardInfoFE_VDSL2Get_t;
+
+/** Message ID for CMD_HS_SelectedProfileVDSL2Get */
+#define CMD_HS_SELECTEDPROFILEVDSL2GET 0xCD03
+
+/**
+   Requests the actual selected VDSL2 Profile (See G.994.1 Amendment 4 [10],
+   NPAR(3) coding).
+*/
+typedef struct CMD_HS_SelectedProfileVDSL2Get CMD_HS_SelectedProfileVDSL2Get_t;
+
+/** Message ID for ACK_HS_SelectedProfileVDSL2Get */
+#define ACK_HS_SELECTEDPROFILEVDSL2GET 0xCD03
+
+/**
+   Provides the actual selected VDSL2 Profile as requested by
+   CMD_HS_SelectedProfileVDSL2Get (see G.994.1 Amendment 4 [10], NPAR(3)
+   coding).
+*/
+typedef struct ACK_HS_SelectedProfileVDSL2Get ACK_HS_SelectedProfileVDSL2Get_t;
+
+/** Message ID for CMD_HS_StandardInfoFE_SPAR1Get */
+#define CMD_HS_STANDARDINFOFE_SPAR1GET 0xCB03
+
+/**
+   Requests the handshake information about the far-end operating mode (See
+   G.994.1 [6] and Amendments 1-4 [7]-[10], standard information fields- SPAR(1)
+   coding).
+*/
+typedef struct CMD_HS_StandardInfoFE_SPAR1Get CMD_HS_StandardInfoFE_SPAR1Get_t;
+
+/** Message ID for ACK_HS_StandardInfoFE_SPAR1Get */
+#define ACK_HS_STANDARDINFOFE_SPAR1GET 0xCB03
+
+/**
+   Provides the handshake information about the far-end operating mode (See
+   G.994.1 [6] and Amendments 1-4 [7]-[10], Standard information field - SPAR(1)
+   coding). The bit numbering per octet below follows the standard (starting
+   with "1").
+*/
+typedef struct ACK_HS_StandardInfoFE_SPAR1Get ACK_HS_StandardInfoFE_SPAR1Get_t;
+
+/** Message ID for CMD_SysVendorID_R_Set */
+#define CMD_SYSVENDORID_R_SET 0x3C43
+
+/**
+   Sets the in System Vendor ID at the xTU-R. (Section 7.4.4 of G.997.1 [11])
+*/
+typedef struct CMD_SysVendorID_R_Set CMD_SysVendorID_R_Set_t;
+
+/** Message ID for ACK_SysVendorID_R_Set */
+#define ACK_SYSVENDORID_R_SET 0x3C43
+
+/**
+   Acknowledgement to CMD_SysVendorID_R_Set.
+*/
+typedef struct ACK_SysVendorID_R_Set ACK_SysVendorID_R_Set_t;
+
+/** Message ID for CMD_SysVendorVersionNum_R_Set */
+#define CMD_SYSVENDORVERSIONNUM_R_SET 0x3D43
+
+/**
+   Sets the system vendor version number at the xTU-R. (Section 7.4.6 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorVersionNum_R_Set CMD_SysVendorVersionNum_R_Set_t;
+
+/** Message ID for ACK_SysVendorVersionNum_R_Set */
+#define ACK_SYSVENDORVERSIONNUM_R_SET 0x3D43
+
+/**
+   Acknowledgement to CMD_SysVendorVersionNum_R_Set.
+*/
+typedef struct ACK_SysVendorVersionNum_R_Set ACK_SysVendorVersionNum_R_Set_t;
+
+/** Message ID for CMD_SysVendorSerialNum_R_Set */
+#define CMD_SYSVENDORSERIALNUM_R_SET 0x3E43
+
+/**
+   Sets the system vendor serial number at the xTU-R. (Section 7.4.8 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorSerialNum_R_Set CMD_SysVendorSerialNum_R_Set_t;
+
+/** Message ID for ACK_SysVendorSerialNum_R_Set */
+#define ACK_SYSVENDORSERIALNUM_R_SET 0x3E43
+
+/**
+   Acknowledgement to CMD_SysVendorSerialNum_R_Set.
+*/
+typedef struct ACK_SysVendorSerialNum_R_Set ACK_SysVendorSerialNum_R_Set_t;
+
+/** Message ID for CMD_AuxInventoryInfo_R_Set */
+#define CMD_AUXINVENTORYINFO_R_SET 0x4343
+
+/**
+   Sets auxiliary inventory information at the VTU-R (Section 11.2.3.2.4 of
+   G993.2 [5]).
+*/
+typedef struct CMD_AuxInventoryInfo_R_Set CMD_AuxInventoryInfo_R_Set_t;
+
+/** Message ID for ACK_AuxInventoryInfo_R_Set */
+#define ACK_AUXINVENTORYINFO_R_SET 0x4343
+
+/**
+   Acknowledgement to CMD_AuxInventoryInfo_R_Set.
+*/
+typedef struct ACK_AuxInventoryInfo_R_Set ACK_AuxInventoryInfo_R_Set_t;
+
+/** Message ID for CMD_VendorID_O_Get */
+#define CMD_VENDORID_O_GET 0x4003
+
+/**
+   Requests the xTU-C Vendor ID. (Section 7.4.1 of G.997.1 [11])
+*/
+typedef struct CMD_VendorID_O_Get CMD_VendorID_O_Get_t;
+
+/** Message ID for ACK_VendorID_O_Get */
+#define ACK_VENDORID_O_GET 0x4003
+
+/**
+   Provides the xTU-C Vendor ID as requested by CMD_VendorID_O_Get.
+*/
+typedef struct ACK_VendorID_O_Get ACK_VendorID_O_Get_t;
+
+/** Message ID for CMD_VendorID_R_Get */
+#define CMD_VENDORID_R_GET 0x4103
+
+/**
+   Requests the xTU-R Vendor ID. (Section 7.4.2 of G.997.1 [11])
+*/
+typedef struct CMD_VendorID_R_Get CMD_VendorID_R_Get_t;
+
+/** Message ID for ACK_VendorID_R_Get */
+#define ACK_VENDORID_R_GET 0x4103
+
+/**
+   Provides the xTU-R Vendor ID as requested by CMD_VendorID_R_Get.
+*/
+typedef struct ACK_VendorID_R_Get ACK_VendorID_R_Get_t;
+
+/** Message ID for CMD_SysVendorID_O_Get */
+#define CMD_SYSVENDORID_O_GET 0x3803
+
+/**
+   Requests the xTU-C System Vendor ID. (Section 7.4.3 of G.997.1 [11])
+*/
+typedef struct CMD_SysVendorID_O_Get CMD_SysVendorID_O_Get_t;
+
+/** Message ID for ACK_SysVendorID_O_Get */
+#define ACK_SYSVENDORID_O_GET 0x3803
+
+/**
+   Delivers the xTU-C System Vendor ID as requested by CMD_SysVendorID_O_Get.
+*/
+typedef struct ACK_SysVendorID_O_Get ACK_SysVendorID_O_Get_t;
+
+/** Message ID for CMD_SysVendorID_R_Get */
+#define CMD_SYSVENDORID_R_GET 0x3C03
+
+/**
+   Requests the xTU-R System Vendor ID. (Section 7.4.4 of G.997.1 [11])
+*/
+typedef struct CMD_SysVendorID_R_Get CMD_SysVendorID_R_Get_t;
+
+/** Message ID for ACK_SysVendorID_R_Get */
+#define ACK_SYSVENDORID_R_GET 0x3C03
+
+/**
+   Delivers the xTU-R System Vendor ID as requested by CMD_SysVendorID_R_Get.
+*/
+typedef struct ACK_SysVendorID_R_Get ACK_SysVendorID_R_Get_t;
+
+/** Message ID for CMD_SysVendorVersionNumO_Get */
+#define CMD_SYSVENDORVERSIONNUMO_GET 0x3A03
+
+/**
+   Requests the xTU-C system vendor version number. (Section 7.4.5 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorVersionNumO_Get CMD_SysVendorVersionNumO_Get_t;
+
+/** Message ID for ACK_SysVendorVersionNum_O_Get */
+#define ACK_SYSVENDORVERSIONNUM_O_GET 0x3A03
+
+/**
+   Delivers the xTU-C system vendor version number as requested by
+   CMD_SysVendorVersionNumO_Get.
+*/
+typedef struct ACK_SysVendorVersionNum_O_Get ACK_SysVendorVersionNum_O_Get_t;
+
+/** Message ID for CMD_SysVendorVersionNum_R_Get */
+#define CMD_SYSVENDORVERSIONNUM_R_GET 0x3D03
+
+/**
+   Requests the xTU-R system vendor version number. (Section 7.4.6 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorVersionNum_R_Get CMD_SysVendorVersionNum_R_Get_t;
+
+/** Message ID for ACK_SysVendorVersionNum_R_Get */
+#define ACK_SYSVENDORVERSIONNUM_R_GET 0x3D03
+
+/**
+   Delivers the xTU-R system vendor version number as requested by
+   CMD_SysVendorVersionNum_R_Get.
+*/
+typedef struct ACK_SysVendorVersionNum_R_Get ACK_SysVendorVersionNum_R_Get_t;
+
+/** Message ID for CMD_SysVendorSerialNum_O_Get */
+#define CMD_SYSVENDORSERIALNUM_O_GET 0x3903
+
+/**
+   Requests the xTU-C system vendor serial number. (Section 7.4.7 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorSerialNum_O_Get CMD_SysVendorSerialNum_O_Get_t;
+
+/** Message ID for ACK_SysVendorSerialNum_O_Get */
+#define ACK_SYSVENDORSERIALNUM_O_GET 0x3903
+
+/**
+   Delivers the xTU-C system vendor serial number as requested by
+   CMD_SysVendorSerialNum_O_Get.
+*/
+typedef struct ACK_SysVendorSerialNum_O_Get ACK_SysVendorSerialNum_O_Get_t;
+
+/** Message ID for CMD_SysVendorSerialNum_R_Get */
+#define CMD_SYSVENDORSERIALNUM_R_GET 0x3E03
+
+/**
+   Requests the xTU-R system vendor serial number. (Section 7.4.8 of G.997.1
+   [11])
+*/
+typedef struct CMD_SysVendorSerialNum_R_Get CMD_SysVendorSerialNum_R_Get_t;
+
+/** Message ID for ACK_SysVendorSerialNum_R_Get */
+#define ACK_SYSVENDORSERIALNUM_R_GET 0x3E03
+
+/**
+   Delivers the xTU-R system vendor version number as requested by
+   CMD_SysVendorSerialNum_R_Get.
+*/
+typedef struct ACK_SysVendorSerialNum_R_Get ACK_SysVendorSerialNum_R_Get_t;
+
+/** Message ID for CMD_AuxInventoryInfo_O_Get */
+#define CMD_AUXINVENTORYINFO_O_GET 0x4203
+
+/**
+   Requests VTU-O auxiliary inventory information (Section 11.2.3.2.4 of G993.2
+   [5]).
+*/
+typedef struct CMD_AuxInventoryInfo_O_Get CMD_AuxInventoryInfo_O_Get_t;
+
+/** Message ID for ACK_AuxInventoryInfo_O_Get */
+#define ACK_AUXINVENTORYINFO_O_GET 0x4203
+
+/**
+   Delivers the VTU-O auxiliary inventory information as requested by
+   CMD_AuxInventoryInfo_O_Get.
+*/
+typedef struct ACK_AuxInventoryInfo_O_Get ACK_AuxInventoryInfo_O_Get_t;
+
+/** Message ID for CMD_AuxInventoryInfo_R_Get */
+#define CMD_AUXINVENTORYINFO_R_GET 0x4303
+
+/**
+   Requests VTU-R auxiliary inventory information (Section 11.2.3.2.4 of G993.2
+   [5]).
+*/
+typedef struct CMD_AuxInventoryInfo_R_Get CMD_AuxInventoryInfo_R_Get_t;
+
+/** Message ID for ACK_AuxInventoryInfo_R_Get */
+#define ACK_AUXINVENTORYINFO_R_GET 0x4303
+
+/**
+   Delivers the VTU-R auxiliary inventory information as requested by
+   CMD_AuxInventoryInfo_R_Get.
+*/
+typedef struct ACK_AuxInventoryInfo_R_Get ACK_AuxInventoryInfo_R_Get_t;
+
+/** Message ID for CMD_T1413_VendorID_O_Get */
+#define CMD_T1413_VENDORID_O_GET 0x7C03
+
+/**
+   Requests the ATU-C's T1.413 Vendor identification. (Section 9.6.4.2 of ANSI
+   T1.413 [16])
+*/
+typedef struct CMD_T1413_VendorID_O_Get CMD_T1413_VendorID_O_Get_t;
+
+/** Message ID for ACK_T1413_VendorID_O_Get */
+#define ACK_T1413_VENDORID_O_GET 0x7C03
+
+/**
+   Delivers the ATU-C's T1.413 vendor identification number.
+*/
+typedef struct ACK_T1413_VendorID_O_Get ACK_T1413_VendorID_O_Get_t;
+
+/** Message ID for CMD_T1413_VendorID_R_Get */
+#define CMD_T1413_VENDORID_R_GET 0x7D03
+
+/**
+   Requests the ATU-R's T1.413 Vendor identification. (Section 9.6.4.2 of ANSI
+   T1.413 [16])
+*/
+typedef struct CMD_T1413_VendorID_R_Get CMD_T1413_VendorID_R_Get_t;
+
+/** Message ID for ACK_T1413_VendorID_R_Get */
+#define ACK_T1413_VENDORID_R_GET 0x7D03
+
+/**
+   Reports the ATU-R's T1.413 vendor identification number.
+*/
+typedef struct ACK_T1413_VendorID_R_Get ACK_T1413_VendorID_R_Get_t;
+
+/** Message ID for CMD_T1413_RevNo_O_Get */
+#define CMD_T1413_REVNO_O_GET 0x7E03
+
+/**
+   Requests the xTU-C's T1.413 revision number. (Section 9.6.4.3 of ANSI T1.413
+   [16])
+*/
+typedef struct CMD_T1413_RevNo_O_Get CMD_T1413_RevNo_O_Get_t;
+
+/** Message ID for ACK_T1413_RevNo_O_Get */
+#define ACK_T1413_REVNO_O_GET 0x7E03
+
+/**
+   Delivers the xTU-C's T1.413 revision number.
+*/
+typedef struct ACK_T1413_RevNo_O_Get ACK_T1413_RevNo_O_Get_t;
+
+/** Message ID for CMD_T1413_RevNo_R_Get */
+#define CMD_T1413_REVNO_R_GET 0x7F03
+
+/**
+   Requests the xTU-R's T1.413 revision number. (Section 9.7.6.2 of ANSI T1.413
+   [16])
+*/
+typedef struct CMD_T1413_RevNo_R_Get CMD_T1413_RevNo_R_Get_t;
+
+/** Message ID for ACK_T1413_RevNo_R_Get */
+#define ACK_T1413_REVNO_R_GET 0x7F03
+
+/**
+   Delivers the xTU-R's T1.413 revision number.
+*/
+typedef struct ACK_T1413_RevNo_R_Get ACK_T1413_RevNo_R_Get_t;
+
+/** Message ID for CMD_T1413_VendorRevNo_O_Get */
+#define CMD_T1413_VENDORREVNO_O_GET 0x8003
+
+/**
+   Requests the xTU-C's T1.413 vendor revision number. (Section 9.6.4.4 of ANSI
+   T1.413 [16])
+*/
+typedef struct CMD_T1413_VendorRevNo_O_Get CMD_T1413_VendorRevNo_O_Get_t;
+
+/** Message ID for ACK_T1413_VendorRevNo_O_Get */
+#define ACK_T1413_VENDORREVNO_O_GET 0x8003
+
+/**
+   Delivers the xTU-C's T1.413 vendor revision number.
+*/
+typedef struct ACK_T1413_VendorRevNo_O_Get ACK_T1413_VendorRevNo_O_Get_t;
+
+/** Message ID for CMD_T1413_VendorRevNo_R_Get */
+#define CMD_T1413_VENDORREVNO_R_GET 0x8103
+
+/**
+   Requests the xTU-R's T1.413 vendor revision number. (Section 9.7.6.3 of ANSI
+   T1.413 [16])
+*/
+typedef struct CMD_T1413_VendorRevNo_R_Get CMD_T1413_VendorRevNo_R_Get_t;
+
+/** Message ID for ACK_T1413_VendorRevNo_R_Get */
+#define ACK_T1413_VENDORREVNO_R_GET 0x8103
+
+/**
+   Delivers the xTU-R's T1.413 vendor revision number.
+*/
+typedef struct ACK_T1413_VendorRevNo_R_Get ACK_T1413_VendorRevNo_R_Get_t;
+
+/** Message ID for CMD_XTSE_StatusGet */
+#define CMD_XTSE_STATUSGET 0x0102
+
+/**
+   Requests the transmission system in use on the line (DSL flavour). (Section
+   7.5.1.1. of G.997.1 [11]) See note at ACK_XTSE_StatusGet about the expected
+   behaviour.
+*/
+typedef struct CMD_XTSE_StatusGet CMD_XTSE_StatusGet_t;
+
+/** Message ID for ACK_XTSE_StatusGet */
+#define ACK_XTSE_STATUSGET 0x0102
+
+/**
+   Reports the transmission system mode in use as requested by
+   CMD_XTSE_StatusGet.The information is set by the FW after mode select (MS)
+   during the handshake phase or during T1.413 state. Before mode selection the
+   value "0" is reported (=none), after selection of a common mode exactly this
+   single mode must be indicated. If there is a common mode but it requires
+   another FW to be loaded (e.g. ADSL instead of VDSL), this does not happen
+   ("0" is reported ), then the FW goes to FAIL state and indicates a specific
+   suberror code (S_XDSL_MODE). If there is no common mode, "0" is to be
+   reported (here modem enters FAIL state).
+*/
+typedef struct ACK_XTSE_StatusGet ACK_XTSE_StatusGet_t;
+
+/** Message ID for CMD_BandControl_DS_Get */
+#define CMD_BANDCONTROL_DS_GET 0xC803
+
+/**
+   Reads the used downstream band configuration.
+*/
+typedef struct CMD_BandControl_DS_Get CMD_BandControl_DS_Get_t;
+
+/** Message ID for ACK_BandControl_DS_Get */
+#define ACK_BANDCONTROL_DS_GET 0xC803
+
+/**
+   Acknowledgement for message CMD_BandControl_DS_Get.
+*/
+typedef struct ACK_BandControl_DS_Get ACK_BandControl_DS_Get_t;
+
+/** Message ID for CMD_BandControl_US_Get */
+#define CMD_BANDCONTROL_US_GET 0xC903
+
+/**
+   Reads the used upstream band configuration.
+*/
+typedef struct CMD_BandControl_US_Get CMD_BandControl_US_Get_t;
+
+/** Message ID for ACK_BandControl_US_Get */
+#define ACK_BANDCONTROL_US_GET 0xC903
+
+/**
+   Acknowledgement for message CMD_BandControl_US_Get.
+*/
+typedef struct ACK_BandControl_US_Get ACK_BandControl_US_Get_t;
+
+/** Message ID for CMD_RFI_BandControlGet */
+#define CMD_RFI_BANDCONTROLGET 0xCA03
+
+/**
+   Reads the RFI band configuration.
+*/
+typedef struct CMD_RFI_BandControlGet CMD_RFI_BandControlGet_t;
+
+/** Message ID for ACK_RFI_BandControlGet */
+#define ACK_RFI_BANDCONTROLGET 0xCA03
+
+/**
+   Acknowledgement for message CMD_RFI_BandControlGet.
+*/
+typedef struct ACK_RFI_BandControlGet ACK_RFI_BandControlGet_t;
+
+/** Message ID for CMD_LineStatusDS_Get */
+#define CMD_LINESTATUSDS_GET 0x4403
+
+/**
+   This message requests data about the line status (like noise margin) for
+   downstream direction.
+*/
+typedef struct CMD_LineStatusDS_Get CMD_LineStatusDS_Get_t;
+
+/** Message ID for ACK_LineStatusDS_Get */
+#define ACK_LINESTATUSDS_GET 0x4403
+
+/**
+   The message delivers the line status data for downstream direction requested
+   by CMD_LineStatusDS_Get.
+*/
+typedef struct ACK_LineStatusDS_Get ACK_LineStatusDS_Get_t;
+
+/** Message ID for CMD_LineStatusUS_Get */
+#define CMD_LINESTATUSUS_GET 0x4503
+
+/**
+   This message requests data about the upstream line status (like noise
+   margin).
+*/
+typedef struct CMD_LineStatusUS_Get CMD_LineStatusUS_Get_t;
+
+/** Message ID for ACK_LineStatusUS_Get */
+#define ACK_LINESTATUSUS_GET 0x4503
+
+/**
+   The message delivers the line status data for upstream direction requested by
+   CMD_LineStatusUS_Get.
+*/
+typedef struct ACK_LineStatusUS_Get ACK_LineStatusUS_Get_t;
+
+/** Message ID for CMD_LineStatusPerBandDS_Get */
+#define CMD_LINESTATUSPERBANDDS_GET 0xD203
+
+/**
+   This message requests data about the line status (noise margin, line
+   attenuation and signal attenuation) for downstream direction in a "per band"
+   granularity.
+*/
+typedef struct CMD_LineStatusPerBandDS_Get CMD_LineStatusPerBandDS_Get_t;
+
+/** Message ID for ACK_LineStatusPerBandDS_Get */
+#define ACK_LINESTATUSPERBANDDS_GET 0xD203
+
+/**
+   The message delivers the line status data (line attenuation, signal
+   attenuation and noise margin) for downstream direction in a "per band"
+   granularity as requested by CMD_LineStatusPerBandDS_Get.
+*/
+typedef struct ACK_LineStatusPerBandDS_Get ACK_LineStatusPerBandDS_Get_t;
+
+/** Message ID for CMD_LineStatusPerBandUS_Get */
+#define CMD_LINESTATUSPERBANDUS_GET 0xD303
+
+/**
+   This message requests data about the line status (noise margin, line - and
+   signal attenuation) for upstream direction in a "per band" granularity.
+*/
+typedef struct CMD_LineStatusPerBandUS_Get CMD_LineStatusPerBandUS_Get_t;
+
+/** Message ID for ACK_LineStatusPerBandUS_Get */
+#define ACK_LINESTATUSPERBANDUS_GET 0xD303
+
+/**
+   The message delivers the line status data (line attenuation, signal
+   attenuation and noise margin) for upstream direction in a "per band"
+   granularity as requested by CMD_LineStatusPerBandUS_Get.
+*/
+typedef struct ACK_LineStatusPerBandUS_Get ACK_LineStatusPerBandUS_Get_t;
+
+/** Message ID for CMD_AttndrStatusGet */
+#define CMD_ATTNDRSTATUSGET 0xF003
+
+/**
+   Requests parameters used for the calculation of the downstream attainable net
+   data rate (ATTNDRds).
+*/
+typedef struct CMD_AttndrStatusGet CMD_AttndrStatusGet_t;
+
+/** Message ID for ACK_AttndrStatusGet */
+#define ACK_ATTNDRSTATUSGET 0xF003
+
+/**
+   Delivers the data requested by CMD_AttndrStatusGet.(Section 7.5.1.41 of
+   G.997.1 [12]).
+*/
+typedef struct ACK_AttndrStatusGet ACK_AttndrStatusGet_t;
+
+/** Message ID for CMD_PSD_BreakpointsDS_Get */
+#define CMD_PSD_BREAKPOINTSDS_GET 0xD403
+
+/**
+   Requests the breakpoints of the actual PSD for the downstream direction. PSDs
+   consisting of more than 42 PSD breakpoints must be read with 2 messages due
+   to the the mailbox size. (The first parameter in the retrieved data structure
+   contains the "Number of Breakpoints" parameter.)
+*/
+typedef struct CMD_PSD_BreakpointsDS_Get CMD_PSD_BreakpointsDS_Get_t;
+
+/** Message ID for ACK_PSD_BreakpointsDS_Get */
+#define ACK_PSD_BREAKPOINTSDS_GET 0xD403
+
+/**
+   Delivers the breakpoints of the actual PSD for the downstream direction as
+   requested by CMD_PSD_BreakpointsDS_Get.
+*/
+typedef struct ACK_PSD_BreakpointsDS_Get ACK_PSD_BreakpointsDS_Get_t;
+
+/** Message ID for CMD_PSD_BreakpointsUS_Get */
+#define CMD_PSD_BREAKPOINTSUS_GET 0xD503
+
+/**
+   Requests the breakpoints of the actual PSD for the upstream direction.
+*/
+typedef struct CMD_PSD_BreakpointsUS_Get CMD_PSD_BreakpointsUS_Get_t;
+
+/** Message ID for ACK_PSD_BreakpointsUS_Get */
+#define ACK_PSD_BREAKPOINTSUS_GET 0xD503
+
+/**
+   Delivers the breakpoints of the actual PSD for the upstream direction as
+   requested by CMD_PSD_BreakpointsUS_Get.
+*/
+typedef struct ACK_PSD_BreakpointsUS_Get ACK_PSD_BreakpointsUS_Get_t;
+
+/** Message ID for CMD_TssiDS_VDSL2_Get */
+#define CMD_TSSIDS_VDSL2_GET 0x2803
+
+/**
+   The Downstream TSSI Breakpoints are specified by the transmitter (VTU-O) and
+   communicated to the receiver (VTU-R) via the O-PRM message.   The TSSI
+   Breakpoints are used to shape the O-P-TEQ signal. This message provides read
+   only access to the DS TSSI Breakpoints. The DS TSSI Breakpoints are not
+   configurable via messages.
+*/
+typedef struct CMD_TssiDS_VDSL2_Get CMD_TssiDS_VDSL2_Get_t;
+
+/** Message ID for ACK_TssiDS_VDSL2_Get */
+#define ACK_TSSIDS_VDSL2_GET 0x2803
+
+/**
+   This is the acknowledgement of CMD_TssiDS_VDSL2_Get.
+*/
+typedef struct ACK_TssiDS_VDSL2_Get ACK_TssiDS_VDSL2_Get_t;
+
+/** Message ID for CMD_TssiUS_VDSL2_Get */
+#define CMD_TSSIUS_VDSL2_GET 0x2903
+
+/**
+   The Upstream TSSI Breakpoints are specified by the transmitter (VTU-R) and
+   communicated to the receiver (VTU-O) via the R-PRM message.   The TSSI
+   Breakpoints are used to shape the R-P-TEQ signal.  The TSSI Breakpoints can
+   be read only but are not configurable via messages.
+*/
+typedef struct CMD_TssiUS_VDSL2_Get CMD_TssiUS_VDSL2_Get_t;
+
+/** Message ID for ACK_TssiUS_VDSL2_Get */
+#define ACK_TSSIUS_VDSL2_GET 0x2903
+
+/**
+   This is the acknowledgement of CMD_TssiUS_VDSL2_Get.
+*/
+typedef struct ACK_TssiUS_VDSL2_Get ACK_TssiUS_VDSL2_Get_t;
+
+/** Message ID for CMD_ADSL_PCB_Get */
+#define CMD_ADSL_PCB_GET 0x000E
+
+/**
+   Reads the actual power cutback value.
+*/
+typedef struct CMD_ADSL_PCB_Get CMD_ADSL_PCB_Get_t;
+
+/** Message ID for ACK_ADSL_PCB_Get */
+#define ACK_ADSL_PCB_GET 0x000E
+
+/**
+   Provides the actual power cutback values requested with CMD_ADSL_PCB_Get.
+*/
+typedef struct ACK_ADSL_PCB_Get ACK_ADSL_PCB_Get_t;
+
+/** Message ID for CMD_ActualPSD_Get */
+#define CMD_ACTUALPSD_GET 0xD803
+
+/**
+   Requests the PSD and power parameter values actually used by the firmware.
+*/
+typedef struct CMD_ActualPSD_Get CMD_ActualPSD_Get_t;
+
+/** Message ID for ACK_ActualPSD_Get */
+#define ACK_ACTUALPSD_GET 0xD803
+
+/**
+   Provides actually used PSD and power parameters as requested by
+   CMD_ActualPSD_Get.
+*/
+typedef struct ACK_ActualPSD_Get ACK_ActualPSD_Get_t;
+
+/** Message ID for CMD_ADSL_MJ_UsMaskGet */
+#define CMD_ADSL_MJ_USMASKGET 0x1802
+
+/**
+   Requests the actually used ADSL upstream mask for ADSL2/2+ Annexes M and J.
+   To be applied only in combination with G.992.3/5 Annex M support in
+   ACK_XTSE_StatusGet.
+*/
+typedef struct CMD_ADSL_MJ_UsMaskGet CMD_ADSL_MJ_UsMaskGet_t;
+
+/** Message ID for ACK_ADSL_MJ_UsMaskGet */
+#define ACK_ADSL_MJ_USMASKGET 0x1802
+
+/**
+   Provides the actually used ADSL upstream mask for ADSL2/2+ Annexes M and J.
+*/
+typedef struct ACK_ADSL_MJ_UsMaskGet ACK_ADSL_MJ_UsMaskGet_t;
+
+/** Message ID for CMD_PSDMASK_DS_Get */
+#define CMD_PSDMASK_DS_GET 0xF203
+
+/**
+   Reports the downstream transmit PSD mask (PSDMASKds) which is received from
+   CO with O-SIGNATURE message.
+*/
+typedef struct CMD_PSDMASK_DS_Get CMD_PSDMASK_DS_Get_t;
+
+/** Message ID for ACK_PSDMASK_DS_Get */
+#define ACK_PSDMASK_DS_GET 0xF203
+
+/**
+   Reports the downstream transmit PSD mask (PSDMASKds) for both passbands and
+   stopbands, which is received from CO with O-SIGNATURE message. (Format is now
+   as absolute value without the offset.)
+*/
+typedef struct ACK_PSDMASK_DS_Get ACK_PSDMASK_DS_Get_t;
+
+/** Message ID for CMD_RxPSD_TableEntriesGet */
+#define CMD_RXPSD_TABLEENTRIESGET 0x5403
+
+/**
+   The message requests information about the receive PSD per subcarrier
+   available at the near-end side, which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices accordingly.In
+   Showtime the message reports the receive PSD measured in Channel Discovery
+   phase after the final hybrid training (no Showtime update).
+*/
+typedef struct CMD_RxPSD_TableEntriesGet CMD_RxPSD_TableEntriesGet_t;
+
+/** Message ID for ACK_RxPSD_TableEntriesGet */
+#define ACK_RXPSD_TABLEENTRIESGET 0x5403
+
+/**
+   Returns information about the receive PSD per subcarrier available at the
+   near-end side, which means for downstream direction at the CPE.In Showtime
+   the message reports the receive PSD measured in Channel Discovery phase after
+   the final hybrid training (no Showtime update).
+*/
+typedef struct ACK_RxPSD_TableEntriesGet ACK_RxPSD_TableEntriesGet_t;
+
+/** Message ID for CMD_BearerChsDS_Get */
+#define CMD_BEARERCHSDS_GET 0x0106
+
+/**
+   Requests status information for the downstream bearer channels.
+*/
+typedef struct CMD_BearerChsDS_Get CMD_BearerChsDS_Get_t;
+
+/** Message ID for ACK_BearerChsDS_Get */
+#define ACK_BEARERCHSDS_GET 0x0106
+
+/**
+   Delivers status information for the downstream bearer channels. **: The terms
+   "LP0/Interleaved Path" and "LP1/Fast Path" below refer to the terminology
+   used in ITU DSL standards [1],[2], [3], [5] which means:- LP0 or LP1 in case
+   of VDSL2, ADSL2/2+- "Interleaved Path" or "Fast Path" in case of ADSL1/ADSL1
+   Lite.Attention: In VRX Device1 the "LP1/Fast Path" parameters are populated
+   only in ADSL1 and ADSL1 Lilte mode with selected fast path.
+*/
+typedef struct ACK_BearerChsDS_Get ACK_BearerChsDS_Get_t;
+
+/** Message ID for CMD_BearerChsUS_Get */
+#define CMD_BEARERCHSUS_GET 0x0006
+
+/**
+   Requests status information for the upstream bearer channels.
+*/
+typedef struct CMD_BearerChsUS_Get CMD_BearerChsUS_Get_t;
+
+/** Message ID for ACK_BearerChsUS_Get */
+#define ACK_BEARERCHSUS_GET 0x0006
+
+/**
+   Delivers status information for the upstream bearer channels. **: The terms
+   "LP0/Interleaved Path" and "LP1/Fast Path" below refer to the terminology
+   used in ITU DSL standards [1],[2], [3], [5] which means:- LP0 or LP1 in case
+   of VDSL2, ADSL2/2+- "Interleaved Path" or "Fast Path" in case of ADSL1/ADSL1
+   Lite.Attention: In VRX Device1 the "LP1/Fast Path" parameters are populated
+   only in ADSL1 and ADSL1 Lite mode with selected fast path.
+*/
+typedef struct ACK_BearerChsUS_Get ACK_BearerChsUS_Get_t;
+
+/** Message ID for CMD_FrameDataExt2DS_Get */
+#define CMD_FRAMEDATAEXT2DS_GET 0x2203
+
+/**
+   Requests an extended set of VDSL2 framing parameters for the downstream
+   direction.
+*/
+typedef struct CMD_FrameDataExt2DS_Get CMD_FrameDataExt2DS_Get_t;
+
+/** Message ID for ACK_FrameDataExt2DS_Get */
+#define ACK_FRAMEDATAEXT2DS_GET 0x2203
+
+/**
+   Delivers an extended set of VDSL2 framing parameters for the downstream
+   direction requested by CMD_FrameDataExt2DS_Get. (Sections 7.5.2.6 of G.997.1
+   and 9.5 & 9.6 of G.993.2 [5])
+*/
+typedef struct ACK_FrameDataExt2DS_Get ACK_FrameDataExt2DS_Get_t;
+
+/** Message ID for CMD_FrameDataExt2US_Get */
+#define CMD_FRAMEDATAEXT2US_GET 0x2303
+
+/**
+   Requests an extended set of VDSL2 framing parameters for the upstream
+   direction.
+*/
+typedef struct CMD_FrameDataExt2US_Get CMD_FrameDataExt2US_Get_t;
+
+/** Message ID for ACK_FrameDataExt2US_Get */
+#define ACK_FRAMEDATAEXT2US_GET 0x2303
+
+/**
+   Delivers an extended set of VDSL2 framing parameters for the upstream
+   direction requested by CMD_FrameDataExt2US_Get. (Sections 7.5.2.6 of G.997.1
+   and 9.5 & 9.6 of G.993.2 [5])
+*/
+typedef struct ACK_FrameDataExt2US_Get ACK_FrameDataExt2US_Get_t;
+
+/** Message ID for CMD_ADSL_FrameDataDS_LP0Get */
+#define CMD_ADSL_FRAMEDATADS_LP0GET 0x010E
+
+/**
+   Requests ADSL framing parameters for the downstream direction, latency path
+   0/Interleaved Path.
+*/
+typedef struct CMD_ADSL_FrameDataDS_LP0Get CMD_ADSL_FrameDataDS_LP0Get_t;
+
+/** Message ID for ACK_ADSL_FrameDataDS_LP0Get */
+#define ACK_ADSL_FRAMEDATADS_LP0GET 0x010E
+
+/**
+   Delivers the ADSL framing parameters for the downstream direction,
+   LP0/Interleaved path, as requested by CMD_ADSL_FrameDataDS_LP0Get. (Sections
+   7.5 & 7.6 of G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+typedef struct ACK_ADSL_FrameDataDS_LP0Get ACK_ADSL_FrameDataDS_LP0Get_t;
+
+/** Message ID for CMD_ADSL_FrameDataUS_LP0Get */
+#define CMD_ADSL_FRAMEDATAUS_LP0GET 0x020E
+
+/**
+   Requests ADSL framing parameters for the upstream direction, latency path
+   0/Interleaved path.
+*/
+typedef struct CMD_ADSL_FrameDataUS_LP0Get CMD_ADSL_FrameDataUS_LP0Get_t;
+
+/** Message ID for ACK_ADSL_FrameDataUS_LP0Get */
+#define ACK_ADSL_FRAMEDATAUS_LP0GET 0x020E
+
+/**
+   Delivers the ADSL framing parameters for the upstream direction, latency path
+   0/Interleaved path, as requested by CMD_ADSL_FrameDataUS_LP0Get. (Sections
+   7.5 & 7.6 of G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+typedef struct ACK_ADSL_FrameDataUS_LP0Get ACK_ADSL_FrameDataUS_LP0Get_t;
+
+/** Message ID for CMD_ADSL_FrameDataDS_LP1Get */
+#define CMD_ADSL_FRAMEDATADS_LP1GET 0x030E
+
+/**
+   Requests ADSL framing parameters for the downstream direction, latency path 1
+   (LP1)/ Fast path.In VRX Rev. 1.x to be used for ADSL1, "fast path" only.
+*/
+typedef struct CMD_ADSL_FrameDataDS_LP1Get CMD_ADSL_FrameDataDS_LP1Get_t;
+
+/** Message ID for ACK_ADSL_FrameDataDS_LP1Get */
+#define ACK_ADSL_FRAMEDATADS_LP1GET 0x030E
+
+/**
+   Delivers the ADSL framing parameters for the downstream direction, LP1/Fast
+   path, as requested by CMD_ADSL_FrameDataDS_LP1Get. (Sections 7.5 & 7.6 of
+   G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+typedef struct ACK_ADSL_FrameDataDS_LP1Get ACK_ADSL_FrameDataDS_LP1Get_t;
+
+/** Message ID for CMD_ADSL_FrameDataUS_LP1Get */
+#define CMD_ADSL_FRAMEDATAUS_LP1GET 0x040E
+
+/**
+   Requests ADSL framing parameters for the upstream direction, latency path 1
+   (LP1)/Fast path.In VRX Rev. 1.x to be used for ADSL1, "fast path" only.
+*/
+typedef struct CMD_ADSL_FrameDataUS_LP1Get CMD_ADSL_FrameDataUS_LP1Get_t;
+
+/** Message ID for ACK_ADSL_FrameDataUS_LP1Get */
+#define ACK_ADSL_FRAMEDATAUS_LP1GET 0x040E
+
+/**
+   Delivers the ADSL framing parameters for the upstream direction, LP1/Fast
+   path, as requested by CMD_ADSL_FrameDataUS_LP1Get. (Sections 7.5 & 7.6 of
+   G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+typedef struct ACK_ADSL_FrameDataUS_LP1Get ACK_ADSL_FrameDataUS_LP1Get_t;
+
+/** Message ID for CMD_HybridGet */
+#define CMD_HYBRIDGET 0x0922
+
+/**
+   Reads the connected hybrid type.
+*/
+typedef struct CMD_HybridGet CMD_HybridGet_t;
+
+/** Message ID for ACK_HybridGet */
+#define ACK_HYBRIDGET 0x0922
+
+/**
+   Contains the connected hybrid type.
+*/
+typedef struct ACK_HybridGet ACK_HybridGet_t;
+
+/** Message ID for CMD_PilotTonesGet */
+#define CMD_PILOTTONESGET 0x0322
+
+/**
+   Requests the pilot tones used in Showtime.
+*/
+typedef struct CMD_PilotTonesGet CMD_PilotTonesGet_t;
+
+/** Message ID for ACK_PilotTonesGet */
+#define ACK_PILOTTONESGET 0x0322
+
+/**
+   Provides the Showtime pilot tones as requested by CMD_PilotTonesGet.
+*/
+typedef struct ACK_PilotTonesGet ACK_PilotTonesGet_t;
+
+/** Message ID for CMD_MFD_ResultsGet */
+#define CMD_MFD_RESULTSGET 0x1022
+
+/**
+   Requests the results of the micro filter detection (MFD) function. Valid
+   information in Showtime and FAIL will be available only if the microfilter
+   detection mechanism has been run before.
+*/
+typedef struct CMD_MFD_ResultsGet CMD_MFD_ResultsGet_t;
+
+/** Message ID for ACK_MFD_ResultsGet */
+#define ACK_MFD_RESULTSGET 0x1022
+
+/**
+   Reports the results of the micro filter detection (MFD) function.
+*/
+typedef struct ACK_MFD_ResultsGet ACK_MFD_ResultsGet_t;
+
+/** Message ID for CMD_MFD_LooplengthGet */
+#define CMD_MFD_LOOPLENGTHGET 0x1122
+
+/**
+   Requests the loop length estimates done by the microfilter detection
+   function.In Showtime the data are always available.The availability of data
+   is indicated by the flag TrainingLoopLengthReady in ACK_MFD_ResultsGet.In
+   Showtime the data are always available.
+*/
+typedef struct CMD_MFD_LooplengthGet CMD_MFD_LooplengthGet_t;
+
+/** Message ID for ACK_MFD_LooplengthGet */
+#define ACK_MFD_LOOPLENGTHGET 0x1122
+
+/**
+   Reports the loop length estimates done by the microfilter detection (MFD)
+   function.
+*/
+typedef struct ACK_MFD_LooplengthGet ACK_MFD_LooplengthGet_t;
+
+/** Message ID for CMD_MFD_HybridInfoGet */
+#define CMD_MFD_HYBRIDINFOGET 0x1222
+
+/**
+   Requests hybrid information used by the microfilter detection function.In
+   Showtime the data are always available.The availability of data is indicated
+   by the flag TrainingHybridInfoReady in ACK_MFD_ResultsGet. In Showtime the
+   data are always available.
+*/
+typedef struct CMD_MFD_HybridInfoGet CMD_MFD_HybridInfoGet_t;
+
+/** Message ID for ACK_MFD_HybridInfoGet */
+#define ACK_MFD_HYBRIDINFOGET 0x1222
+
+/**
+   Reports the hybrid information used by the microfilter detection function.
+*/
+typedef struct ACK_MFD_HybridInfoGet ACK_MFD_HybridInfoGet_t;
+
+/**
+   Selects one or more groups of tones to be used during the handshake phase.
+   (See G.994.1 Amendment 2 [8], Table 1/G.994.1).
+*/
+struct CMD_HS_ToneGroupSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** Tone Group 8: CAR_SET_V43I */
+   DSL_uint16_t Group8 : 1;
+   /** Tone Group 7: CAR_SET_V43P */
+   DSL_uint16_t Group7 : 1;
+   /** Tone Group 6: CAR_SET_V43 */
+   DSL_uint16_t Group6 : 1;
+   /** Tone Group 5: CAR_SET_J43 */
+   DSL_uint16_t Group5 : 1;
+   /** Tone Group 4: CAR_SET_C43 */
+   DSL_uint16_t Group4 : 1;
+   /** Tone Group 3: CAR_SET_B43C */
+   DSL_uint16_t Group3 : 1;
+   /** Tone Group 2: CAR_SET_B43 */
+   DSL_uint16_t Group2 : 1;
+   /** Tone Group 1: CAR_SET_A43C */
+   DSL_uint16_t Group1 : 1;
+   /** Tone Group 0: CAR_SET_A43 */
+   DSL_uint16_t Group0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Tone Group 0: CAR_SET_A43 */
+   DSL_uint16_t Group0 : 1;
+   /** Tone Group 1: CAR_SET_A43C */
+   DSL_uint16_t Group1 : 1;
+   /** Tone Group 2: CAR_SET_B43 */
+   DSL_uint16_t Group2 : 1;
+   /** Tone Group 3: CAR_SET_B43C */
+   DSL_uint16_t Group3 : 1;
+   /** Tone Group 4: CAR_SET_C43 */
+   DSL_uint16_t Group4 : 1;
+   /** Tone Group 5: CAR_SET_J43 */
+   DSL_uint16_t Group5 : 1;
+   /** Tone Group 6: CAR_SET_V43 */
+   DSL_uint16_t Group6 : 1;
+   /** Tone Group 7: CAR_SET_V43P */
+   DSL_uint16_t Group7 : 1;
+   /** Tone Group 8: CAR_SET_V43I */
+   DSL_uint16_t Group8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_HS_ToneGroupSet.
+*/
+struct ACK_HS_ToneGroupSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures the profile settings to be used for the handshake phase. (See
+   G.994.1 Amendment 4 [10], NPAR(3) coding).
+*/
+struct CMD_HS_VDSL2ProfileControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** 35b, Profile Support Bit 8 */
+   DSL_uint16_t profileSup8 : 1;
+   /** 30a, Profile Support Bit 7 */
+   DSL_uint16_t profileSup7 : 1;
+   /** 17a, Profile Support Bit 6 */
+   DSL_uint16_t profileSup6 : 1;
+   /** 12b, Profile Support Bit 5 */
+   DSL_uint16_t profileSup5 : 1;
+   /** 12a, Profile Support Bit 4 */
+   DSL_uint16_t profileSup4 : 1;
+   /** 8d, Profile Support Bit 3 */
+   DSL_uint16_t profileSup3 : 1;
+   /** 8c, Profile Support Bit 2 */
+   DSL_uint16_t profileSup2 : 1;
+   /** 8b, Profile Support Bit 1 */
+   DSL_uint16_t profileSup1 : 1;
+   /** 8a, Profile Support Bit 0 */
+   DSL_uint16_t profileSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** 35b, Profile Preferred Bit 8 */
+   DSL_uint16_t profilePref8 : 1;
+   /** 30a, Profile Preferred Bit 7 */
+   DSL_uint16_t profilePref7 : 1;
+   /** 17a, Profile Preferred Bit 6 */
+   DSL_uint16_t profilePref6 : 1;
+   /** 12b, Profile Preferred Bit 5 */
+   DSL_uint16_t profilePref5 : 1;
+   /** 12a, Profile Preferred Bit 4 */
+   DSL_uint16_t profilePref4 : 1;
+   /** 8d, Profile Preferred Bit 3 */
+   DSL_uint16_t profilePref3 : 1;
+   /** 8c, Profile Preferred Bit 2 */
+   DSL_uint16_t profilePref2 : 1;
+   /** 8b, Profile Preferred Bit 1 */
+   DSL_uint16_t profilePref1 : 1;
+   /** 8a, Profile Preferred Bit 0 */
+   DSL_uint16_t profilePref0 : 1;
+   /** ADLU-56, Annex A US0 PSDs Supported Bit 15 */
+   DSL_uint16_t A_US0PsdSup15 : 1;
+   /** ADLU-52, Annex A US0 PSDs Supported Bit 14 */
+   DSL_uint16_t A_US0PsdSup14 : 1;
+   /** ADLU-48, Annex A US0 PSDs Supported Bit 13 */
+   DSL_uint16_t A_US0PsdSup13 : 1;
+   /** ADLU-44, Annex A US0 PSDs Supported Bit 12 */
+   DSL_uint16_t A_US0PsdSup12 : 1;
+   /** ADLU-40, Annex A US0 PSDs Supported Bit 11 */
+   DSL_uint16_t A_US0PsdSup11 : 1;
+   /** ADLU-36, Annex A US0 PSDs Supported Bit 10 */
+   DSL_uint16_t A_US0PsdSup10 : 1;
+   /** ADLU-32, Annex A US0 PSDs Supported Bit 9 */
+   DSL_uint16_t A_US0PsdSup9 : 1;
+   /** EU-64, Annex A US0 PSDs Supported Bit 8 */
+   DSL_uint16_t A_US0PsdSup8 : 1;
+   /** EU-60, Annex A US0 PSDs Supported Bit 7 */
+   DSL_uint16_t A_US0PsdSup7 : 1;
+   /** EU-56, Annex A US0 PSDs Supported Bit 6 */
+   DSL_uint16_t A_US0PsdSup6 : 1;
+   /** EU-52, Annex A US0 PSDs Supported Bit 5 */
+   DSL_uint16_t A_US0PsdSup5 : 1;
+   /** EU-48, Annex A US0 PSDs Supported Bit 4 */
+   DSL_uint16_t A_US0PsdSup4 : 1;
+   /** EU-44, Annex A US0 PSDs Supported Bit 3 */
+   DSL_uint16_t A_US0PsdSup3 : 1;
+   /** EU-40, Annex A US0 PSDs Supported Bit 2 */
+   DSL_uint16_t A_US0PsdSup2 : 1;
+   /** EU-36, Annex A US0 PSDs Supported Bit 1 */
+   DSL_uint16_t A_US0PsdSup1 : 1;
+   /** EU-32, Annex A US0 PSDs Supported Bit 0 */
+   DSL_uint16_t A_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 10;
+   /** ADLU-128, Annex A US0 PSDs Supported Bit 21 */
+   DSL_uint16_t A_US0PsdSup21 : 1;
+   /** EU-128, Annex A US0 PSDs Supported Bit 20 */
+   DSL_uint16_t A_US0PsdSup20 : 1;
+   /** 17a Profile, Annex A US0 PSDs Supported Bit 19 */
+   DSL_uint16_t A_US0PsdSup19 : 1;
+   /** 12b Profile, Annex A US0 PSDs Supported Bit 18 */
+   DSL_uint16_t A_US0PsdSup18 : 1;
+   /** ADLU-64, Annex A US0 PSDs Supported Bit 17 */
+   DSL_uint16_t A_US0PsdSup17 : 1;
+   /** ADLU-60, Annex A US0 PSDs Supported Bit 16 */
+   DSL_uint16_t A_US0PsdSup16 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3[2];
+   /** Reserved */
+   DSL_uint16_t Res4 : 11;
+   /** 17a Profile, Annex B US0 PSDs Supported Bit 4 */
+   DSL_uint16_t B_US0PsdSup4 : 1;
+   /** 12b Profile, Annex B US0 PSDs Supported Bit 3 */
+   DSL_uint16_t B_US0PsdSup3 : 1;
+   /** US0 In 120 to 276 kHz, Annex B US0 PSDs Supported Bit 2 */
+   DSL_uint16_t B_US0PsdSup2 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Supported Bit 1 */
+   DSL_uint16_t B_US0PsdSup1 : 1;
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Supported Bit 0 */
+   DSL_uint16_t B_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** Reserved */
+   DSL_uint16_t Res6 : 2;
+   /** 17a Profile, Annex C US0 PSDs Supported Bit 13 */
+   DSL_uint16_t C_US0PsdSup13 : 1;
+   /** 12b Profile, Annex C US0 PSDs Supported Bit 12 */
+   DSL_uint16_t C_US0PsdSup12 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 6;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Supported Bit 5 */
+   DSL_uint16_t C_US0PsdSup5 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 4 */
+   DSL_uint16_t C_US0PsdSup4 : 1;
+   /** Reserved */
+   DSL_uint16_t Res8 : 2;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Supported Bit 1 */
+   DSL_uint16_t C_US0PsdSup1 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 0 */
+   DSL_uint16_t C_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res9;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** 8a, Profile Support Bit 0 */
+   DSL_uint16_t profileSup0 : 1;
+   /** 8b, Profile Support Bit 1 */
+   DSL_uint16_t profileSup1 : 1;
+   /** 8c, Profile Support Bit 2 */
+   DSL_uint16_t profileSup2 : 1;
+   /** 8d, Profile Support Bit 3 */
+   DSL_uint16_t profileSup3 : 1;
+   /** 12a, Profile Support Bit 4 */
+   DSL_uint16_t profileSup4 : 1;
+   /** 12b, Profile Support Bit 5 */
+   DSL_uint16_t profileSup5 : 1;
+   /** 17a, Profile Support Bit 6 */
+   DSL_uint16_t profileSup6 : 1;
+   /** 30a, Profile Support Bit 7 */
+   DSL_uint16_t profileSup7 : 1;
+   /** 35b, Profile Support Bit 8 */
+   DSL_uint16_t profileSup8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** 8a, Profile Preferred Bit 0 */
+   DSL_uint16_t profilePref0 : 1;
+   /** 8b, Profile Preferred Bit 1 */
+   DSL_uint16_t profilePref1 : 1;
+   /** 8c, Profile Preferred Bit 2 */
+   DSL_uint16_t profilePref2 : 1;
+   /** 8d, Profile Preferred Bit 3 */
+   DSL_uint16_t profilePref3 : 1;
+   /** 12a, Profile Preferred Bit 4 */
+   DSL_uint16_t profilePref4 : 1;
+   /** 12b, Profile Preferred Bit 5 */
+   DSL_uint16_t profilePref5 : 1;
+   /** 17a, Profile Preferred Bit 6 */
+   DSL_uint16_t profilePref6 : 1;
+   /** 30a, Profile Preferred Bit 7 */
+   DSL_uint16_t profilePref7 : 1;
+   /** 35b, Profile Preferred Bit 8 */
+   DSL_uint16_t profilePref8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** EU-32, Annex A US0 PSDs Supported Bit 0 */
+   DSL_uint16_t A_US0PsdSup0 : 1;
+   /** EU-36, Annex A US0 PSDs Supported Bit 1 */
+   DSL_uint16_t A_US0PsdSup1 : 1;
+   /** EU-40, Annex A US0 PSDs Supported Bit 2 */
+   DSL_uint16_t A_US0PsdSup2 : 1;
+   /** EU-44, Annex A US0 PSDs Supported Bit 3 */
+   DSL_uint16_t A_US0PsdSup3 : 1;
+   /** EU-48, Annex A US0 PSDs Supported Bit 4 */
+   DSL_uint16_t A_US0PsdSup4 : 1;
+   /** EU-52, Annex A US0 PSDs Supported Bit 5 */
+   DSL_uint16_t A_US0PsdSup5 : 1;
+   /** EU-56, Annex A US0 PSDs Supported Bit 6 */
+   DSL_uint16_t A_US0PsdSup6 : 1;
+   /** EU-60, Annex A US0 PSDs Supported Bit 7 */
+   DSL_uint16_t A_US0PsdSup7 : 1;
+   /** EU-64, Annex A US0 PSDs Supported Bit 8 */
+   DSL_uint16_t A_US0PsdSup8 : 1;
+   /** ADLU-32, Annex A US0 PSDs Supported Bit 9 */
+   DSL_uint16_t A_US0PsdSup9 : 1;
+   /** ADLU-36, Annex A US0 PSDs Supported Bit 10 */
+   DSL_uint16_t A_US0PsdSup10 : 1;
+   /** ADLU-40, Annex A US0 PSDs Supported Bit 11 */
+   DSL_uint16_t A_US0PsdSup11 : 1;
+   /** ADLU-44, Annex A US0 PSDs Supported Bit 12 */
+   DSL_uint16_t A_US0PsdSup12 : 1;
+   /** ADLU-48, Annex A US0 PSDs Supported Bit 13 */
+   DSL_uint16_t A_US0PsdSup13 : 1;
+   /** ADLU-52, Annex A US0 PSDs Supported Bit 14 */
+   DSL_uint16_t A_US0PsdSup14 : 1;
+   /** ADLU-56, Annex A US0 PSDs Supported Bit 15 */
+   DSL_uint16_t A_US0PsdSup15 : 1;
+   /** ADLU-60, Annex A US0 PSDs Supported Bit 16 */
+   DSL_uint16_t A_US0PsdSup16 : 1;
+   /** ADLU-64, Annex A US0 PSDs Supported Bit 17 */
+   DSL_uint16_t A_US0PsdSup17 : 1;
+   /** 12b Profile, Annex A US0 PSDs Supported Bit 18 */
+   DSL_uint16_t A_US0PsdSup18 : 1;
+   /** 17a Profile, Annex A US0 PSDs Supported Bit 19 */
+   DSL_uint16_t A_US0PsdSup19 : 1;
+   /** EU-128, Annex A US0 PSDs Supported Bit 20 */
+   DSL_uint16_t A_US0PsdSup20 : 1;
+   /** ADLU-128, Annex A US0 PSDs Supported Bit 21 */
+   DSL_uint16_t A_US0PsdSup21 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 10;
+   /** Reserved */
+   DSL_uint16_t Res3[2];
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Supported Bit 0 */
+   DSL_uint16_t B_US0PsdSup0 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Supported Bit 1 */
+   DSL_uint16_t B_US0PsdSup1 : 1;
+   /** US0 In 120 to 276 kHz, Annex B US0 PSDs Supported Bit 2 */
+   DSL_uint16_t B_US0PsdSup2 : 1;
+   /** 12b Profile, Annex B US0 PSDs Supported Bit 3 */
+   DSL_uint16_t B_US0PsdSup3 : 1;
+   /** 17a Profile, Annex B US0 PSDs Supported Bit 4 */
+   DSL_uint16_t B_US0PsdSup4 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 11;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 0 */
+   DSL_uint16_t C_US0PsdSup0 : 1;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Supported Bit 1 */
+   DSL_uint16_t C_US0PsdSup1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res8 : 2;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 4 */
+   DSL_uint16_t C_US0PsdSup4 : 1;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Supported Bit 5 */
+   DSL_uint16_t C_US0PsdSup5 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 6;
+   /** 12b Profile, Annex C US0 PSDs Supported Bit 12 */
+   DSL_uint16_t C_US0PsdSup12 : 1;
+   /** 17a Profile, Annex C US0 PSDs Supported Bit 13 */
+   DSL_uint16_t C_US0PsdSup13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 2;
+   /** Reserved */
+   DSL_uint16_t Res9;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_HS_VDSL2ProfileControl.
+*/
+struct ACK_HS_VDSL2ProfileControl
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the VDSL2 far-end Standard Info (See G.994.1 Amendment 4 [10],
+   NPAR(3) coding).
+*/
+struct CMD_HS_StandardInfoFE_VDSL2Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the VDSL2 far-end info as requested by
+   CMD_HS_StandardInfoFE_VDSL2Get (see G.994.1 Amendment 4 [10], NPAR(3)
+   coding).
+*/
+struct ACK_HS_StandardInfoFE_VDSL2Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** 35b, Profile Support Bit 8 */
+   DSL_uint16_t profileSup8 : 1;
+   /** 30a, Profile Support Bit 7 */
+   DSL_uint16_t profileSup7 : 1;
+   /** 17a, Profile Support Bit 6 */
+   DSL_uint16_t profileSup6 : 1;
+   /** 12b, Profile Support Bit 5 */
+   DSL_uint16_t profileSup5 : 1;
+   /** 12a, Profile Support Bit 4 */
+   DSL_uint16_t profileSup4 : 1;
+   /** 8d, Profile Support Bit 3 */
+   DSL_uint16_t profileSup3 : 1;
+   /** 8c, Profile Support Bit 2 */
+   DSL_uint16_t profileSup2 : 1;
+   /** 8b, Profile Support Bit 1 */
+   DSL_uint16_t profileSup1 : 1;
+   /** 8a, Profile Support Bit 0 */
+   DSL_uint16_t profileSup0 : 1;
+   /** ADLU-56, Annex A US0 PSDs Supported Bit 15 */
+   DSL_uint16_t A_US0PsdSup15 : 1;
+   /** ADLU-52, Annex A US0 PSDs Supported Bit 14 */
+   DSL_uint16_t A_US0PsdSup14 : 1;
+   /** ADLU-48, Annex A US0 PSDs Supported Bit 13 */
+   DSL_uint16_t A_US0PsdSup13 : 1;
+   /** ADLU-44, Annex A US0 PSDs Supported Bit 12 */
+   DSL_uint16_t A_US0PsdSup12 : 1;
+   /** ADLU-40, Annex A US0 PSDs Supported Bit 11 */
+   DSL_uint16_t A_US0PsdSup11 : 1;
+   /** ADLU-36, Annex A US0 PSDs Supported Bit 10 */
+   DSL_uint16_t A_US0PsdSup10 : 1;
+   /** ADLU-32, Annex A US0 PSDs Supported Bit 9 */
+   DSL_uint16_t A_US0PsdSup9 : 1;
+   /** EU-64, Annex A US0 PSDs Supported Bit 8 */
+   DSL_uint16_t A_US0PsdSup8 : 1;
+   /** EU-60, Annex A US0 PSDs Supported Bit 7 */
+   DSL_uint16_t A_US0PsdSup7 : 1;
+   /** EU-56, Annex A US0 PSDs Supported Bit 6 */
+   DSL_uint16_t A_US0PsdSup6 : 1;
+   /** EU-52, Annex A US0 PSDs Supported Bit 5 */
+   DSL_uint16_t A_US0PsdSup5 : 1;
+   /** EU-48, Annex A US0 PSDs Supported Bit 4 */
+   DSL_uint16_t A_US0PsdSup4 : 1;
+   /** EU-44, Annex A US0 PSDs Supported Bit 3 */
+   DSL_uint16_t A_US0PsdSup3 : 1;
+   /** EU-40, Annex A US0 PSDs Supported Bit 2 */
+   DSL_uint16_t A_US0PsdSup2 : 1;
+   /** EU-36, Annex A US0 PSDs Supported Bit 1 */
+   DSL_uint16_t A_US0PsdSup1 : 1;
+   /** EU-32, Annex A US0 PSDs Supported Bit 0 */
+   DSL_uint16_t A_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 10;
+   /** ADLU-128 Annex A US0 PSDs Supported Bit 21 */
+   DSL_uint16_t A_US0PsdSup21 : 1;
+   /** EU-128, Annex A US0 PSDs Supported Bit 20 */
+   DSL_uint16_t A_US0PsdSup20 : 1;
+   /** 17a Profile, Annex A US0 PSDs Supported Bit 19 */
+   DSL_uint16_t A_US0PsdSup19 : 1;
+   /** 12b Profile, Annex A US0 PSDs Supported Bit 18 */
+   DSL_uint16_t A_US0PsdSup18 : 1;
+   /** ADLU-64, Annex A US0 PSDs Supported Bit 17 */
+   DSL_uint16_t A_US0PsdSup17 : 1;
+   /** ADLU-60, Annex A US0 PSDs Supported Bit 16 */
+   DSL_uint16_t A_US0PsdSup16 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 11;
+   /** 17a Profile, Annex B US0 PSDs Supported Bit 4 */
+   DSL_uint16_t B_US0PsdSup4 : 1;
+   /** 12b Profile, Annex B US0 PSDs Supported Bit 3 */
+   DSL_uint16_t B_US0PsdSup3 : 1;
+   /** US0 In 138 to 276 kHz, Annex B US0 PSDs Supported Bit 2 */
+   DSL_uint16_t B_US0PsdSup2 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Supported Bit 1 */
+   DSL_uint16_t B_US0PsdSup1 : 1;
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Supported Bit 0 */
+   DSL_uint16_t B_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** 17a Profile, Annex C US0 PSDs Supported Bit 13 */
+   DSL_uint16_t C_US0PsdSup13 : 1;
+   /** 12b Profile, Annex C US0 PSDs Supported Bit 12 */
+   DSL_uint16_t C_US0PsdSup12 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Supported Bit 5 */
+   DSL_uint16_t C_US0PsdSup5 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 4 */
+   DSL_uint16_t C_US0PsdSup4 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 2;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Supported Bit 1 */
+   DSL_uint16_t C_US0PsdSup1 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 0 */
+   DSL_uint16_t C_US0PsdSup0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 7;
+   /** G.998.4 Anx D Supported Bit 8 (VDSL only) */
+   DSL_uint16_t RtxExtMemSup8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res8 : 2;
+   /** O-P-VECTOR1 Flag Tones Only, Supported Bit 5 (VDSL only) */
+   DSL_uint16_t OpVect1FlagTonesSup5 : 1;
+   /** Extended O-P-VECTOR1, Supported Bit 4 (VDSL only) */
+   DSL_uint16_t ExtOpVect1Sup4 : 1;
+   /** Upstream FDPS, Supported Bit 3 (VDSL only) */
+   DSL_uint16_t FdpsUsSup3 : 1;
+   /** Pilot Sequence Length Multiple of 4, Supported Bit 2 (VDSL only) */
+   DSL_uint16_t PilotLen4xSup2 : 1;
+   /** Upstream Vectoring Supported Bit 1 (VDSL only) */
+   DSL_uint16_t VectUsSup1 : 1;
+   /** Downstream Vectoring Supported Bit 0 (VDSL only) */
+   DSL_uint16_t VectDsSup0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** 8a, Profile Support Bit 0 */
+   DSL_uint16_t profileSup0 : 1;
+   /** 8b, Profile Support Bit 1 */
+   DSL_uint16_t profileSup1 : 1;
+   /** 8c, Profile Support Bit 2 */
+   DSL_uint16_t profileSup2 : 1;
+   /** 8d, Profile Support Bit 3 */
+   DSL_uint16_t profileSup3 : 1;
+   /** 12a, Profile Support Bit 4 */
+   DSL_uint16_t profileSup4 : 1;
+   /** 12b, Profile Support Bit 5 */
+   DSL_uint16_t profileSup5 : 1;
+   /** 17a, Profile Support Bit 6 */
+   DSL_uint16_t profileSup6 : 1;
+   /** 30a, Profile Support Bit 7 */
+   DSL_uint16_t profileSup7 : 1;
+   /** 35b, Profile Support Bit 8 */
+   DSL_uint16_t profileSup8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** EU-32, Annex A US0 PSDs Supported Bit 0 */
+   DSL_uint16_t A_US0PsdSup0 : 1;
+   /** EU-36, Annex A US0 PSDs Supported Bit 1 */
+   DSL_uint16_t A_US0PsdSup1 : 1;
+   /** EU-40, Annex A US0 PSDs Supported Bit 2 */
+   DSL_uint16_t A_US0PsdSup2 : 1;
+   /** EU-44, Annex A US0 PSDs Supported Bit 3 */
+   DSL_uint16_t A_US0PsdSup3 : 1;
+   /** EU-48, Annex A US0 PSDs Supported Bit 4 */
+   DSL_uint16_t A_US0PsdSup4 : 1;
+   /** EU-52, Annex A US0 PSDs Supported Bit 5 */
+   DSL_uint16_t A_US0PsdSup5 : 1;
+   /** EU-56, Annex A US0 PSDs Supported Bit 6 */
+   DSL_uint16_t A_US0PsdSup6 : 1;
+   /** EU-60, Annex A US0 PSDs Supported Bit 7 */
+   DSL_uint16_t A_US0PsdSup7 : 1;
+   /** EU-64, Annex A US0 PSDs Supported Bit 8 */
+   DSL_uint16_t A_US0PsdSup8 : 1;
+   /** ADLU-32, Annex A US0 PSDs Supported Bit 9 */
+   DSL_uint16_t A_US0PsdSup9 : 1;
+   /** ADLU-36, Annex A US0 PSDs Supported Bit 10 */
+   DSL_uint16_t A_US0PsdSup10 : 1;
+   /** ADLU-40, Annex A US0 PSDs Supported Bit 11 */
+   DSL_uint16_t A_US0PsdSup11 : 1;
+   /** ADLU-44, Annex A US0 PSDs Supported Bit 12 */
+   DSL_uint16_t A_US0PsdSup12 : 1;
+   /** ADLU-48, Annex A US0 PSDs Supported Bit 13 */
+   DSL_uint16_t A_US0PsdSup13 : 1;
+   /** ADLU-52, Annex A US0 PSDs Supported Bit 14 */
+   DSL_uint16_t A_US0PsdSup14 : 1;
+   /** ADLU-56, Annex A US0 PSDs Supported Bit 15 */
+   DSL_uint16_t A_US0PsdSup15 : 1;
+   /** ADLU-60, Annex A US0 PSDs Supported Bit 16 */
+   DSL_uint16_t A_US0PsdSup16 : 1;
+   /** ADLU-64, Annex A US0 PSDs Supported Bit 17 */
+   DSL_uint16_t A_US0PsdSup17 : 1;
+   /** 12b Profile, Annex A US0 PSDs Supported Bit 18 */
+   DSL_uint16_t A_US0PsdSup18 : 1;
+   /** 17a Profile, Annex A US0 PSDs Supported Bit 19 */
+   DSL_uint16_t A_US0PsdSup19 : 1;
+   /** EU-128, Annex A US0 PSDs Supported Bit 20 */
+   DSL_uint16_t A_US0PsdSup20 : 1;
+   /** ADLU-128 Annex A US0 PSDs Supported Bit 21 */
+   DSL_uint16_t A_US0PsdSup21 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 10;
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Supported Bit 0 */
+   DSL_uint16_t B_US0PsdSup0 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Supported Bit 1 */
+   DSL_uint16_t B_US0PsdSup1 : 1;
+   /** US0 In 138 to 276 kHz, Annex B US0 PSDs Supported Bit 2 */
+   DSL_uint16_t B_US0PsdSup2 : 1;
+   /** 12b Profile, Annex B US0 PSDs Supported Bit 3 */
+   DSL_uint16_t B_US0PsdSup3 : 1;
+   /** 17a Profile, Annex B US0 PSDs Supported Bit 4 */
+   DSL_uint16_t B_US0PsdSup4 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 11;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 0 */
+   DSL_uint16_t C_US0PsdSup0 : 1;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Supported Bit 1 */
+   DSL_uint16_t C_US0PsdSup1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 2;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Supported Bit 4 */
+   DSL_uint16_t C_US0PsdSup4 : 1;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Supported Bit 5 */
+   DSL_uint16_t C_US0PsdSup5 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 6;
+   /** 12b Profile, Annex C US0 PSDs Supported Bit 12 */
+   DSL_uint16_t C_US0PsdSup12 : 1;
+   /** 17a Profile, Annex C US0 PSDs Supported Bit 13 */
+   DSL_uint16_t C_US0PsdSup13 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** Downstream Vectoring Supported Bit 0 (VDSL only) */
+   DSL_uint16_t VectDsSup0 : 1;
+   /** Upstream Vectoring Supported Bit 1 (VDSL only) */
+   DSL_uint16_t VectUsSup1 : 1;
+   /** Pilot Sequence Length Multiple of 4, Supported Bit 2 (VDSL only) */
+   DSL_uint16_t PilotLen4xSup2 : 1;
+   /** Upstream FDPS, Supported Bit 3 (VDSL only) */
+   DSL_uint16_t FdpsUsSup3 : 1;
+   /** Extended O-P-VECTOR1, Supported Bit 4 (VDSL only) */
+   DSL_uint16_t ExtOpVect1Sup4 : 1;
+   /** O-P-VECTOR1 Flag Tones Only, Supported Bit 5 (VDSL only) */
+   DSL_uint16_t OpVect1FlagTonesSup5 : 1;
+   /** Reserved */
+   DSL_uint16_t Res8 : 2;
+   /** G.998.4 Anx D Supported Bit 8 (VDSL only) */
+   DSL_uint16_t RtxExtMemSup8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the actual selected VDSL2 Profile (See G.994.1 Amendment 4 [10],
+   NPAR(3) coding).
+*/
+struct CMD_HS_SelectedProfileVDSL2Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the actual selected VDSL2 Profile as requested by
+   CMD_HS_SelectedProfileVDSL2Get (see G.994.1 Amendment 4 [10], NPAR(3)
+   coding).
+*/
+struct ACK_HS_SelectedProfileVDSL2Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 4;
+   /** O-P-VECTOR1 Flag Tones Only, Selected Bit 11 */
+   DSL_uint16_t dsmSel11 : 1;
+   /** Extended O-P-VECTOR1,Selected Bit 10 */
+   DSL_uint16_t dsmSel10 : 1;
+   /** Upstream FDPS, Selected Bit 9 */
+   DSL_uint16_t dsmSel9 : 1;
+   /** Pilot Sequence Length Multiple of 4, Selected Bit 8 */
+   DSL_uint16_t dsmSel8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 4;
+   /** G.993.2 Annex X, Selected Bit 3 */
+   DSL_uint16_t dsmSel3 : 1;
+   /** G.993.2 Annex Y, Selected Bit 2 */
+   DSL_uint16_t dsmSel2 : 1;
+   /** G.993.5 DS Vectoring, Selected Bit 1 */
+   DSL_uint16_t dsmSel1 : 1;
+   /** G.993.5 DS+US Vectoring, Selected Bit 0 */
+   DSL_uint16_t dsmSel0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 7;
+   /** 35b, Profile Selected Bit 8 */
+   DSL_uint16_t profileSel8 : 1;
+   /** 30a, Profile Selected Bit 7 */
+   DSL_uint16_t profileSel7 : 1;
+   /** 17a, Profile Selected Bit 6 */
+   DSL_uint16_t profileSel6 : 1;
+   /** 12b, Profile Selected Bit 5 */
+   DSL_uint16_t profileSel5 : 1;
+   /** 12a, Profile Selected Bit 4 */
+   DSL_uint16_t profileSel4 : 1;
+   /** 8d, Profile Selected Bit 3 */
+   DSL_uint16_t profileSel3 : 1;
+   /** 8c, Profile Selected Bit 2 */
+   DSL_uint16_t profileSel2 : 1;
+   /** 8b, Profile Selected Bit 1 */
+   DSL_uint16_t profileSel1 : 1;
+   /** 8a, Profile Selected Bit 0 */
+   DSL_uint16_t profileSel0 : 1;
+   /** ADLU-56, Annex A US0 PSDs Selected Bit  15 */
+   DSL_uint16_t A_US0PsdSel15 : 1;
+   /** ADLU-52, Annex A US0 PSDs Selected Bit  14 */
+   DSL_uint16_t A_US0PsdSel14 : 1;
+   /** ADLU-48, Annex A US0 PSDs Selected Bit  13 */
+   DSL_uint16_t A_US0PsdSel13 : 1;
+   /** ADLU-44, Annex A US0 PSDs Selected Bit  12 */
+   DSL_uint16_t A_US0PsdSel12 : 1;
+   /** ADLU-40, Annex A US0 PSDs Selected Bit  11 */
+   DSL_uint16_t A_US0PsdSel11 : 1;
+   /** ADLU-36, Annex A US0 PSDs Selected Bit  10 */
+   DSL_uint16_t A_US0PsdSel10 : 1;
+   /** ADLU-32, Annex A US0 PSDs Selected Bit  9 */
+   DSL_uint16_t A_US0PsdSel9 : 1;
+   /** EU-64, Annex A US0 PSDs Selected Bit  8 */
+   DSL_uint16_t A_US0PsdSel8 : 1;
+   /** EU-60, Annex A US0 PSDs Selected Bit  7 */
+   DSL_uint16_t A_US0PsdSel7 : 1;
+   /** EU-56, Annex A US0 PSDs Selected Bit  6 */
+   DSL_uint16_t A_US0PsdSel6 : 1;
+   /** EU-52, Annex A US0 PSDs Selected Bit  5 */
+   DSL_uint16_t A_US0PsdSel5 : 1;
+   /** EU-48, Annex A US0 PSDs Selected Bit  4 */
+   DSL_uint16_t A_US0PsdSel4 : 1;
+   /** EU-44, Annex A US0 PSDs Selected Bit  3 */
+   DSL_uint16_t A_US0PsdSel3 : 1;
+   /** EU-40, Annex A US0 PSDs Selected Bit  2 */
+   DSL_uint16_t A_US0PsdSel2 : 1;
+   /** EU-36, Annex A US0 PSDs Selected Bit  1 */
+   DSL_uint16_t A_US0PsdSel1 : 1;
+   /** EU-32, Annex A US0 PSDs Selected Bit  0 */
+   DSL_uint16_t A_US0PsdSel0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 10;
+   /** ADLU-128 Annex A US0 PSDs Selected Bit 21 */
+   DSL_uint16_t A_US0PsdSel21 : 1;
+   /** EU-128, Annex A US0 PSDs Selected Bit 20 */
+   DSL_uint16_t A_US0PsdSel20 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** ADLU-64, Annex A US0 PSDs Selected Bit 17 */
+   DSL_uint16_t A_US0PsdSel17 : 1;
+   /** ADLU-60, Annex A US0 PSDs Selected Bit 16 */
+   DSL_uint16_t A_US0PsdSel16 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 13;
+   /** US0 In 120 to 276 kHz, Annex B US0 PSDs Selected Bit 2 */
+   DSL_uint16_t B_US0PsdSel2 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Selected Bit 1 */
+   DSL_uint16_t B_US0PsdSel1 : 1;
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Selected Bit 0 */
+   DSL_uint16_t B_US0PsdSel0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 10;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Selected Bit 5 */
+   DSL_uint16_t C_US0PsdSel5 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Selected Bit 4 */
+   DSL_uint16_t C_US0PsdSel4 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 2;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Selected Bit 1 */
+   DSL_uint16_t C_US0PsdSel1 : 1;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Selected Bit 0 */
+   DSL_uint16_t C_US0PsdSel0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** G.993.5 DS+US Vectoring, Selected Bit 0 */
+   DSL_uint16_t dsmSel0 : 1;
+   /** G.993.5 DS Vectoring, Selected Bit 1 */
+   DSL_uint16_t dsmSel1 : 1;
+   /** G.993.2 Annex Y, Selected Bit 2 */
+   DSL_uint16_t dsmSel2 : 1;
+   /** G.993.2 Annex X, Selected Bit 3 */
+   DSL_uint16_t dsmSel3 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 4;
+   /** Pilot Sequence Length Multiple of 4, Selected Bit 8 */
+   DSL_uint16_t dsmSel8 : 1;
+   /** Upstream FDPS, Selected Bit 9 */
+   DSL_uint16_t dsmSel9 : 1;
+   /** Extended O-P-VECTOR1,Selected Bit 10 */
+   DSL_uint16_t dsmSel10 : 1;
+   /** O-P-VECTOR1 Flag Tones Only, Selected Bit 11 */
+   DSL_uint16_t dsmSel11 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 4;
+   /** 8a, Profile Selected Bit 0 */
+   DSL_uint16_t profileSel0 : 1;
+   /** 8b, Profile Selected Bit 1 */
+   DSL_uint16_t profileSel1 : 1;
+   /** 8c, Profile Selected Bit 2 */
+   DSL_uint16_t profileSel2 : 1;
+   /** 8d, Profile Selected Bit 3 */
+   DSL_uint16_t profileSel3 : 1;
+   /** 12a, Profile Selected Bit 4 */
+   DSL_uint16_t profileSel4 : 1;
+   /** 12b, Profile Selected Bit 5 */
+   DSL_uint16_t profileSel5 : 1;
+   /** 17a, Profile Selected Bit 6 */
+   DSL_uint16_t profileSel6 : 1;
+   /** 30a, Profile Selected Bit 7 */
+   DSL_uint16_t profileSel7 : 1;
+   /** 35b, Profile Selected Bit 8 */
+   DSL_uint16_t profileSel8 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 7;
+   /** EU-32, Annex A US0 PSDs Selected Bit  0 */
+   DSL_uint16_t A_US0PsdSel0 : 1;
+   /** EU-36, Annex A US0 PSDs Selected Bit  1 */
+   DSL_uint16_t A_US0PsdSel1 : 1;
+   /** EU-40, Annex A US0 PSDs Selected Bit  2 */
+   DSL_uint16_t A_US0PsdSel2 : 1;
+   /** EU-44, Annex A US0 PSDs Selected Bit  3 */
+   DSL_uint16_t A_US0PsdSel3 : 1;
+   /** EU-48, Annex A US0 PSDs Selected Bit  4 */
+   DSL_uint16_t A_US0PsdSel4 : 1;
+   /** EU-52, Annex A US0 PSDs Selected Bit  5 */
+   DSL_uint16_t A_US0PsdSel5 : 1;
+   /** EU-56, Annex A US0 PSDs Selected Bit  6 */
+   DSL_uint16_t A_US0PsdSel6 : 1;
+   /** EU-60, Annex A US0 PSDs Selected Bit  7 */
+   DSL_uint16_t A_US0PsdSel7 : 1;
+   /** EU-64, Annex A US0 PSDs Selected Bit  8 */
+   DSL_uint16_t A_US0PsdSel8 : 1;
+   /** ADLU-32, Annex A US0 PSDs Selected Bit  9 */
+   DSL_uint16_t A_US0PsdSel9 : 1;
+   /** ADLU-36, Annex A US0 PSDs Selected Bit  10 */
+   DSL_uint16_t A_US0PsdSel10 : 1;
+   /** ADLU-40, Annex A US0 PSDs Selected Bit  11 */
+   DSL_uint16_t A_US0PsdSel11 : 1;
+   /** ADLU-44, Annex A US0 PSDs Selected Bit  12 */
+   DSL_uint16_t A_US0PsdSel12 : 1;
+   /** ADLU-48, Annex A US0 PSDs Selected Bit  13 */
+   DSL_uint16_t A_US0PsdSel13 : 1;
+   /** ADLU-52, Annex A US0 PSDs Selected Bit  14 */
+   DSL_uint16_t A_US0PsdSel14 : 1;
+   /** ADLU-56, Annex A US0 PSDs Selected Bit  15 */
+   DSL_uint16_t A_US0PsdSel15 : 1;
+   /** ADLU-60, Annex A US0 PSDs Selected Bit 16 */
+   DSL_uint16_t A_US0PsdSel16 : 1;
+   /** ADLU-64, Annex A US0 PSDs Selected Bit 17 */
+   DSL_uint16_t A_US0PsdSel17 : 1;
+   /** Reserved */
+   DSL_uint16_t Res4 : 2;
+   /** EU-128, Annex A US0 PSDs Selected Bit 20 */
+   DSL_uint16_t A_US0PsdSel20 : 1;
+   /** ADLU-128 Annex A US0 PSDs Selected Bit 21 */
+   DSL_uint16_t A_US0PsdSel21 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 10;
+   /** US0 In 25 to 138 kHz, Annex B US0 PSDs Selected Bit 0 */
+   DSL_uint16_t B_US0PsdSel0 : 1;
+   /** US0 In 25 to 276 kHz, Annex B US0 PSDs Selected Bit 1 */
+   DSL_uint16_t B_US0PsdSel1 : 1;
+   /** US0 In 120 to 276 kHz, Annex B US0 PSDs Selected Bit 2 */
+   DSL_uint16_t B_US0PsdSel2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 13;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Selected Bit 0 */
+   DSL_uint16_t C_US0PsdSel0 : 1;
+   /** US0 In 25 to 276kHz, Annex C US0 PSDs Selected Bit 1 */
+   DSL_uint16_t C_US0PsdSel1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res7 : 2;
+   /** US0 In 25 to 138 kHz, Annex C US0 PSDs Selected Bit 4 */
+   DSL_uint16_t C_US0PsdSel4 : 1;
+   /** US0 In 25 to 276 kHz, Annex C US0 PSDs Selected Bit 5 */
+   DSL_uint16_t C_US0PsdSel5 : 1;
+   /** Reserved */
+   DSL_uint16_t Res6 : 10;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the handshake information about the far-end operating mode (See
+   G.994.1 [6] and Amendments 1-4 [7]-[10], standard information fields- SPAR(1)
+   coding).
+*/
+struct CMD_HS_StandardInfoFE_SPAR1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the handshake information about the far-end operating mode (See
+   G.994.1 [6] and Amendments 1-4 [7]-[10], Standard information field - SPAR(1)
+   coding). The bit numbering per octet below follows the standard (starting
+   with "1").
+*/
+struct ACK_HS_StandardInfoFE_SPAR1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 1;
+   /** Octet 2, Bit 7: Committee T1 enhanced SHDSL */
+   DSL_uint16_t Oct2B7 : 1;
+   /** Octet 2, Bit 6: ETSI SCM VDSL */
+   DSL_uint16_t Oct2B6 : 1;
+   /** Octet 2, Bit 5: ETSI MCM VDSL */
+   DSL_uint16_t Oct2B5 : 1;
+   /** Octet 2, Bit 4: T1E1 Trial-use SCM VDSL */
+   DSL_uint16_t Oct2B4 : 1;
+   /** Octet 2, Bit 3: T1E1 Trial-use MCM VDSL */
+   DSL_uint16_t Oct2B3 : 1;
+   /** Octet 2, Bit 2: G991.2 Annex B/G */
+   DSL_uint16_t Oct2B2 : 1;
+   /** Octet 2, Bit 1: G991.2 Annex A/F */
+   DSL_uint16_t Oct2B1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Octet 1, Bit 7: G992.1 Annex I */
+   DSL_uint16_t Oct1B7 : 1;
+   /** Octet 1, Bit 6: G992.1 Annex H */
+   DSL_uint16_t Oct1B6 : 1;
+   /** Octet 1, Bit 5: G992.2 Annex C */
+   DSL_uint16_t Oct1B5 : 1;
+   /** Octet 1, Bit 4: G992.2 Annex A/B */
+   DSL_uint16_t Oct1B4 : 1;
+   /** Octet 1, Bit 3: G992.1 Annex C */
+   DSL_uint16_t Oct1B3 : 1;
+   /** Octet 1, Bit 2: G992.1 Annex B */
+   DSL_uint16_t Oct1B2 : 1;
+   /** Octet 1, Bit 1: G992.1 Annex A */
+   DSL_uint16_t Oct1B1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Octet 4, Bit 7: IEEE 802.3ah 2BASE-TS */
+   DSL_uint16_t Oct4B7 : 1;
+   /** Octet 4, Bit 6: IEEE 802.3ah 2BASE-TL */
+   DSL_uint16_t Oct4B6 : 1;
+   /** Octet 4, Bit 5: G992.5 Annex J */
+   DSL_uint16_t Oct4B5 : 1;
+   /** Octet 4, Bit 4: G992.3 Annex M */
+   DSL_uint16_t Oct4B4 : 1;
+   /** Octet 4, Bit 3: G992.5 Annex I */
+   DSL_uint16_t Oct4B3 : 1;
+   /** Octet 4, Bit 2: G992.5 Annex B */
+   DSL_uint16_t Oct4B2 : 1;
+   /** Octet 4, Bit 1: G992.5 Annex A */
+   DSL_uint16_t Oct4B1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 1;
+   /** Octet 3, Bit 7: G992.3 Annex C */
+   DSL_uint16_t Oct3B7 : 1;
+   /** Octet 3, Bit 6: G992.4 Annex I */
+   DSL_uint16_t Oct3B6 : 1;
+   /** Octet 3, Bit 5: G992.4 Annex A */
+   DSL_uint16_t Oct3B5 : 1;
+   /** Octet 3, Bit 4: G992.3 Annex J */
+   DSL_uint16_t Oct3B4 : 1;
+   /** Octet 3, Bit 3: G992.3 Annex I */
+   DSL_uint16_t Oct3B3 : 1;
+   /** Octet 3, Bit 2: G992.3 Annex B */
+   DSL_uint16_t Oct3B2 : 1;
+   /** Octet 3, Bit 1: G992.3 Annex A/L */
+   DSL_uint16_t Oct3B1 : 1;
+   /** Reserved */
+   DSL_uint8_t Res4;
+   /** Reserved */
+   DSL_uint16_t Res5 : 1;
+   /** Octet 5, Bit 6: G.FAST */
+   DSL_uint16_t Oct5B7 : 1;
+   /** Octet 5, Bit 5: G993.2 */
+   DSL_uint16_t Oct5B6 : 1;
+   /** Octet 5, Bit 4: G992.5 Annex C */
+   DSL_uint16_t Oct5B5 : 1;
+   /** Octet 5, Bit 3: Variable Silence Period */
+   DSL_uint16_t Oct5B4 : 1;
+   /** Octet 5, Bit 2: G992.1 Annex I / T1E1 TRQ 12 */
+   DSL_uint16_t Oct5B3 : 1;
+   /** Octet 5, Bit 1: G993.1 / ANSI T1.424 */
+   DSL_uint16_t Oct5B2 : 1;
+   /** Octet 5, Bit 0: G992.5 Annex M */
+   DSL_uint16_t Oct5B1 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t  Length;
+   /** Octet 1, Bit 1: G992.1 Annex A */
+   DSL_uint16_t Oct1B1 : 1;
+   /** Octet 1, Bit 2: G992.1 Annex B */
+   DSL_uint16_t Oct1B2 : 1;
+   /** Octet 1, Bit 3: G992.1 Annex C */
+   DSL_uint16_t Oct1B3 : 1;
+   /** Octet 1, Bit 4: G992.2 Annex A/B */
+   DSL_uint16_t Oct1B4 : 1;
+   /** Octet 1, Bit 5: G992.2 Annex C */
+   DSL_uint16_t Oct1B5 : 1;
+   /** Octet 1, Bit 6: G992.1 Annex H */
+   DSL_uint16_t Oct1B6 : 1;
+   /** Octet 1, Bit 7: G992.1 Annex I */
+   DSL_uint16_t Oct1B7 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Octet 2, Bit 1: G991.2 Annex A/F */
+   DSL_uint16_t Oct2B1 : 1;
+   /** Octet 2, Bit 2: G991.2 Annex B/G */
+   DSL_uint16_t Oct2B2 : 1;
+   /** Octet 2, Bit 3: T1E1 Trial-use MCM VDSL */
+   DSL_uint16_t Oct2B3 : 1;
+   /** Octet 2, Bit 4: T1E1 Trial-use SCM VDSL */
+   DSL_uint16_t Oct2B4 : 1;
+   /** Octet 2, Bit 5: ETSI MCM VDSL */
+   DSL_uint16_t Oct2B5 : 1;
+   /** Octet 2, Bit 6: ETSI SCM VDSL */
+   DSL_uint16_t Oct2B6 : 1;
+   /** Octet 2, Bit 7: Committee T1 enhanced SHDSL */
+   DSL_uint16_t Oct2B7 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 1;
+   /** Octet 3, Bit 1: G992.3 Annex A/L */
+   DSL_uint16_t Oct3B1 : 1;
+   /** Octet 3, Bit 2: G992.3 Annex B */
+   DSL_uint16_t Oct3B2 : 1;
+   /** Octet 3, Bit 3: G992.3 Annex I */
+   DSL_uint16_t Oct3B3 : 1;
+   /** Octet 3, Bit 4: G992.3 Annex J */
+   DSL_uint16_t Oct3B4 : 1;
+   /** Octet 3, Bit 5: G992.4 Annex A */
+   DSL_uint16_t Oct3B5 : 1;
+   /** Octet 3, Bit 6: G992.4 Annex I */
+   DSL_uint16_t Oct3B6 : 1;
+   /** Octet 3, Bit 7: G992.3 Annex C */
+   DSL_uint16_t Oct3B7 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 1;
+   /** Octet 4, Bit 1: G992.5 Annex A */
+   DSL_uint16_t Oct4B1 : 1;
+   /** Octet 4, Bit 2: G992.5 Annex B */
+   DSL_uint16_t Oct4B2 : 1;
+   /** Octet 4, Bit 3: G992.5 Annex I */
+   DSL_uint16_t Oct4B3 : 1;
+   /** Octet 4, Bit 4: G992.3 Annex M */
+   DSL_uint16_t Oct4B4 : 1;
+   /** Octet 4, Bit 5: G992.5 Annex J */
+   DSL_uint16_t Oct4B5 : 1;
+   /** Octet 4, Bit 6: IEEE 802.3ah 2BASE-TL */
+   DSL_uint16_t Oct4B6 : 1;
+   /** Octet 4, Bit 7: IEEE 802.3ah 2BASE-TS */
+   DSL_uint16_t Oct4B7 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Octet 5, Bit 0: G992.5 Annex M */
+   DSL_uint16_t Oct5B1 : 1;
+   /** Octet 5, Bit 1: G993.1 / ANSI T1.424 */
+   DSL_uint16_t Oct5B2 : 1;
+   /** Octet 5, Bit 2: G992.1 Annex I / T1E1 TRQ 12 */
+   DSL_uint16_t Oct5B3 : 1;
+   /** Octet 5, Bit 3: Variable Silence Period */
+   DSL_uint16_t Oct5B4 : 1;
+   /** Octet 5, Bit 4: G992.5 Annex C */
+   DSL_uint16_t Oct5B5 : 1;
+   /** Octet 5, Bit 5: G993.2 */
+   DSL_uint16_t Oct5B6 : 1;
+   /** Octet 5, Bit 6: G.FAST */
+   DSL_uint16_t Oct5B7 : 1;
+   /** Reserved */
+   DSL_uint16_t Res5 : 1;
+   /** Reserved */
+   DSL_uint8_t Res4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the in System Vendor ID at the xTU-R. (Section 7.4.4 of G.997.1 [11])
+*/
+struct CMD_SysVendorID_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_SysVendorID_R_Set.
+*/
+struct ACK_SysVendorID_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the system vendor version number at the xTU-R. (Section 7.4.6 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorVersionNum_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_SysVendorVersionNum_R_Set.
+*/
+struct ACK_SysVendorVersionNum_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the system vendor serial number at the xTU-R. (Section 7.4.8 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorSerialNum_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_SysVendorSerialNum_R_Set.
+*/
+struct ACK_SysVendorSerialNum_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets auxiliary inventory information at the VTU-R (Section 11.2.3.2.4 of
+   G993.2 [5]).
+*/
+struct CMD_AuxInventoryInfo_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-R Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-R Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_AuxInventoryInfo_R_Set.
+*/
+struct ACK_AuxInventoryInfo_R_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C Vendor ID. (Section 7.4.1 of G.997.1 [11])
+*/
+struct CMD_VendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the xTU-C Vendor ID as requested by CMD_VendorID_O_Get.
+*/
+struct ACK_VendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C G.994.1 Vendor ID */
+   DSL_uint16_t vendorID[4];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C G.994.1 Vendor ID */
+   DSL_uint16_t vendorID[4];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R Vendor ID. (Section 7.4.2 of G.997.1 [11])
+*/
+struct CMD_VendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the xTU-R Vendor ID as requested by CMD_VendorID_R_Get.
+*/
+struct ACK_VendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R G.994.1 Vendor ID */
+   DSL_uint16_t vendorID[4];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R G.994.1 Vendor ID */
+   DSL_uint16_t vendorID[4];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C System Vendor ID. (Section 7.4.3 of G.997.1 [11])
+*/
+struct CMD_SysVendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-C System Vendor ID as requested by CMD_SysVendorID_O_Get.
+*/
+struct ACK_SysVendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R System Vendor ID. (Section 7.4.4 of G.997.1 [11])
+*/
+struct CMD_SysVendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-R System Vendor ID as requested by CMD_SysVendorID_R_Get.
+*/
+struct ACK_SysVendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor ID */
+   DSL_uint16_t sysVendorID[4];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C system vendor version number. (Section 7.4.5 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorVersionNumO_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-C system vendor version number as requested by
+   CMD_SysVendorVersionNumO_Get.
+*/
+struct ACK_SysVendorVersionNum_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R system vendor version number. (Section 7.4.6 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorVersionNum_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-R system vendor version number as requested by
+   CMD_SysVendorVersionNum_R_Get.
+*/
+struct ACK_SysVendorVersionNum_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Version Number */
+   DSL_uint16_t versionNum[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C system vendor serial number. (Section 7.4.7 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorSerialNum_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-C system vendor serial number as requested by
+   CMD_SysVendorSerialNum_O_Get.
+*/
+struct ACK_SysVendorSerialNum_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-C System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R system vendor serial number. (Section 7.4.8 of G.997.1
+   [11])
+*/
+struct CMD_SysVendorSerialNum_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-R system vendor version number as requested by
+   CMD_SysVendorSerialNum_R_Get.
+*/
+struct ACK_SysVendorSerialNum_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** xTU-R System Vendor Serial Number */
+   DSL_uint16_t serialNum[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests VTU-O auxiliary inventory information (Section 11.2.3.2.4 of G993.2
+   [5]).
+*/
+struct CMD_AuxInventoryInfo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the VTU-O auxiliary inventory information as requested by
+   CMD_AuxInventoryInfo_O_Get.
+*/
+struct ACK_AuxInventoryInfo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-O Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-O Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests VTU-R auxiliary inventory information (Section 11.2.3.2.4 of G993.2
+   [5]).
+*/
+struct CMD_AuxInventoryInfo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the VTU-R auxiliary inventory information as requested by
+   CMD_AuxInventoryInfo_R_Get.
+*/
+struct ACK_AuxInventoryInfo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-O Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** VTU-O Auxiliary Inventory Information */
+   DSL_uint16_t auxInfo[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the ATU-C's T1.413 Vendor identification. (Section 9.6.4.2 of ANSI
+   T1.413 [16])
+*/
+struct CMD_T1413_VendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the ATU-C's T1.413 vendor identification number.
+*/
+struct ACK_T1413_VendorID_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor ID */
+   DSL_uint16_t T1413VendorID;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor ID */
+   DSL_uint16_t T1413VendorID;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the ATU-R's T1.413 Vendor identification. (Section 9.6.4.2 of ANSI
+   T1.413 [16])
+*/
+struct CMD_T1413_VendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the ATU-R's T1.413 vendor identification number.
+*/
+struct ACK_T1413_VendorID_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor ID */
+   DSL_uint16_t T1413VendorID;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor ID */
+   DSL_uint16_t T1413VendorID;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C's T1.413 revision number. (Section 9.6.4.3 of ANSI T1.413
+   [16])
+*/
+struct CMD_T1413_RevNo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-C's T1.413 revision number.
+*/
+struct ACK_T1413_RevNo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Revision Number */
+   DSL_uint16_t T1413RevNo;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Revision Number */
+   DSL_uint16_t T1413RevNo;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R's T1.413 revision number. (Section 9.7.6.2 of ANSI T1.413
+   [16])
+*/
+struct CMD_T1413_RevNo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-R's T1.413 revision number.
+*/
+struct ACK_T1413_RevNo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Revision Number */
+   DSL_uint16_t T1413RevNo;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Revision Number */
+   DSL_uint16_t T1413RevNo;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-C's T1.413 vendor revision number. (Section 9.6.4.4 of ANSI
+   T1.413 [16])
+*/
+struct CMD_T1413_VendorRevNo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-C's T1.413 vendor revision number.
+*/
+struct ACK_T1413_VendorRevNo_O_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor Revision Number */
+   DSL_uint16_t T1413VendorRevNo;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor Revision Number */
+   DSL_uint16_t T1413VendorRevNo;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the xTU-R's T1.413 vendor revision number. (Section 9.7.6.3 of ANSI
+   T1.413 [16])
+*/
+struct CMD_T1413_VendorRevNo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the xTU-R's T1.413 vendor revision number.
+*/
+struct ACK_T1413_VendorRevNo_R_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor Revision Number */
+   DSL_uint16_t T1413VendorRevNo;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** T1.413 Vendor Revision Number */
+   DSL_uint16_t T1413VendorRevNo;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the transmission system in use on the line (DSL flavour). (Section
+   7.5.1.1. of G.997.1 [11]) See note at ACK_XTSE_StatusGet about the expected
+   behaviour.
+*/
+struct CMD_XTSE_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the transmission system mode in use as requested by
+   CMD_XTSE_StatusGet.The information is set by the FW after mode select (MS)
+   during the handshake phase or during T1.413 state. Before mode selection the
+   value "0" is reported (=none), after selection of a common mode exactly this
+   single mode must be indicated. If there is a common mode but it requires
+   another FW to be loaded (e.g. ADSL instead of VDSL), this does not happen
+   ("0" is reported ), then the FW goes to FAIL state and indicates a specific
+   suberror code (S_XDSL_MODE). If there is no common mode, "0" is to be
+   reported (here modem enters FAIL state).
+*/
+struct ACK_XTSE_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ADSL Mode-Bit15: G.992.5, Annex A */
+   DSL_uint16_t A15 : 1;
+   /** ADSL Mode-Bit14: G.992.5, Annex B */
+   DSL_uint16_t A14 : 1;
+   /** ADSL Mode-Bit13: G.992.3, Annex M */
+   DSL_uint16_t A13 : 1;
+   /** ADSL Mode-Bit12: G.992.3, Annex L, US Mask2 */
+   DSL_uint16_t A12 : 1;
+   /** ADSL Mode-Bit11: G.992.3, Annex L, US Mask1 */
+   DSL_uint16_t A11 : 1;
+   /** ADSL Mode-Bit10: G.992.2, Annex A */
+   DSL_uint16_t A10 : 1;
+   /** ADSL Mode-Bit9: G.992.3, Annex B */
+   DSL_uint16_t A9 : 1;
+   /** ADSL Mode-Bit8: G.992.3, Annex A */
+   DSL_uint16_t A8 : 1;
+   /** ADSL Mode-Bit7: G.992.5, Annex J */
+   DSL_uint16_t A7 : 1;
+   /** ADSL Mode-Bit6: G.992.5, Annex I */
+   DSL_uint16_t A6 : 1;
+   /** ADSL Mode-Bit5: G.992.3, Annex J */
+   DSL_uint16_t A5 : 1;
+   /** ADSL Mode-Bit4: G.992.3, Annex I */
+   DSL_uint16_t A4 : 1;
+   /** ADSL Mode-Bit3: G.992.1, Annex B */
+   DSL_uint16_t A3 : 1;
+   /** ADSL Mode-Bit2: G.992.1, Annex A */
+   DSL_uint16_t A2 : 1;
+   /** ADSL Mode-Bit1: G.992.5, Annex M */
+   DSL_uint16_t A1 : 1;
+   /** ADSL Mode-Bit0: T1.413 */
+   DSL_uint16_t A0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** VDSL Mode-Bit2: VDSL2 */
+   DSL_uint16_t V2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ADSL Mode-Bit0: T1.413 */
+   DSL_uint16_t A0 : 1;
+   /** ADSL Mode-Bit1: G.992.5, Annex M */
+   DSL_uint16_t A1 : 1;
+   /** ADSL Mode-Bit2: G.992.1, Annex A */
+   DSL_uint16_t A2 : 1;
+   /** ADSL Mode-Bit3: G.992.1, Annex B */
+   DSL_uint16_t A3 : 1;
+   /** ADSL Mode-Bit4: G.992.3, Annex I */
+   DSL_uint16_t A4 : 1;
+   /** ADSL Mode-Bit5: G.992.3, Annex J */
+   DSL_uint16_t A5 : 1;
+   /** ADSL Mode-Bit6: G.992.5, Annex I */
+   DSL_uint16_t A6 : 1;
+   /** ADSL Mode-Bit7: G.992.5, Annex J */
+   DSL_uint16_t A7 : 1;
+   /** ADSL Mode-Bit8: G.992.3, Annex A */
+   DSL_uint16_t A8 : 1;
+   /** ADSL Mode-Bit9: G.992.3, Annex B */
+   DSL_uint16_t A9 : 1;
+   /** ADSL Mode-Bit10: G.992.2, Annex A */
+   DSL_uint16_t A10 : 1;
+   /** ADSL Mode-Bit11: G.992.3, Annex L, US Mask1 */
+   DSL_uint16_t A11 : 1;
+   /** ADSL Mode-Bit12: G.992.3, Annex L, US Mask2 */
+   DSL_uint16_t A12 : 1;
+   /** ADSL Mode-Bit13: G.992.3, Annex M */
+   DSL_uint16_t A13 : 1;
+   /** ADSL Mode-Bit14: G.992.5, Annex B */
+   DSL_uint16_t A14 : 1;
+   /** ADSL Mode-Bit15: G.992.5, Annex A */
+   DSL_uint16_t A15 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** VDSL Mode-Bit2: VDSL2 */
+   DSL_uint16_t V2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads the used downstream band configuration.
+*/
+struct CMD_BandControl_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_BandControl_DS_Get.
+*/
+struct ACK_BandControl_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Downstream Bands */
+   DSL_uint8_t NumBandsDS;
+   /** Band Descriptor DS */
+   VRX_ToneIndex_t band[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Downstream Bands */
+   DSL_uint8_t NumBandsDS;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Band Descriptor DS */
+   VRX_ToneIndex_t band[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads the used upstream band configuration.
+*/
+struct CMD_BandControl_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_BandControl_US_Get.
+*/
+struct ACK_BandControl_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Upstream Bands */
+   DSL_uint8_t NumBandsUS;
+   /** Band Descriptor US */
+   VRX_ToneIndex_t band[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Upstream Bands */
+   DSL_uint8_t NumBandsUS;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Band Descriptor US */
+   VRX_ToneIndex_t band[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads the RFI band configuration.
+*/
+struct CMD_RFI_BandControlGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_RFI_BandControlGet.
+*/
+struct ACK_RFI_BandControlGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of RFI Bands */
+   DSL_uint8_t NumRfiBands;
+   /** RFI Band Descriptor */
+   VRX_ToneIndex_t RfiBand[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of RFI Bands */
+   DSL_uint8_t NumRfiBands;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** RFI Band Descriptor */
+   VRX_ToneIndex_t RfiBand[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message requests data about the line status (like noise margin) for
+   downstream direction.
+*/
+struct CMD_LineStatusDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message delivers the line status data for downstream direction requested
+   by CMD_LineStatusDS_Get.
+*/
+struct ACK_LineStatusDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Downstream LATN */
+   DSL_uint16_t LATNds;
+   /** Downstream SATN */
+   DSL_uint16_t SATNds;
+   /** Downstream SNRM */
+   DSL_uint16_t SNRMds;
+   /** Downstream ATTNDR, LSW */
+   DSL_uint16_t ATTNDRds_LSW;
+   /** Downstream ATTNDR, MSW */
+   DSL_uint16_t ATTNDRds_MSW;
+   /** Downstream ACTATP */
+   DSL_int16_t ACTATPds;
+   /** Downstream ACTPSD (ADSL only) */
+   DSL_uint16_t ACTPSDds;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** Virtual Noise Status DS */
+   DSL_uint16_t VNstatus_ds : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 6;
+   /** NTR Status DS */
+   DSL_uint16_t NTRstatus_ds : 1;
+   /** TCM Status DS */
+   DSL_uint16_t TCMstatus_ds : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Downstream LATN */
+   DSL_uint16_t LATNds;
+   /** Downstream SATN */
+   DSL_uint16_t SATNds;
+   /** Downstream SNRM */
+   DSL_uint16_t SNRMds;
+   /** Downstream ATTNDR, LSW */
+   DSL_uint16_t ATTNDRds_LSW;
+   /** Downstream ATTNDR, MSW */
+   DSL_uint16_t ATTNDRds_MSW;
+   /** Downstream ACTATP */
+   DSL_int16_t ACTATPds;
+   /** Downstream ACTPSD (ADSL only) */
+   DSL_uint16_t ACTPSDds;
+   /** TCM Status DS */
+   DSL_uint16_t TCMstatus_ds : 1;
+   /** NTR Status DS */
+   DSL_uint16_t NTRstatus_ds : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 6;
+   /** Virtual Noise Status DS */
+   DSL_uint16_t VNstatus_ds : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message requests data about the upstream line status (like noise
+   margin).
+*/
+struct CMD_LineStatusUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message delivers the line status data for upstream direction requested by
+   CMD_LineStatusUS_Get.
+*/
+struct ACK_LineStatusUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Upstream LATN */
+   DSL_uint16_t LATNus;
+   /** Upstream SATN */
+   DSL_uint16_t SATNus;
+   /** Upstream SNRM */
+   DSL_uint16_t SNRMus;
+   /** Upstream ATTNDR, LSW */
+   DSL_uint16_t ATTNDRus_LSW;
+   /** Upstream ATTNDR, MSW */
+   DSL_uint16_t ATTNDRus_MSW;
+   /** Upstream ACTATP */
+   DSL_int16_t ACTATPus;
+   /** Upstream ACTPSD (ADSL only) */
+   DSL_uint16_t ACTPSDus;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** Virtual Noise Status US */
+   DSL_uint16_t VNstatus_us : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 7;
+   /** TCM Status US */
+   DSL_uint16_t TCMstatus_us : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Upstream LATN */
+   DSL_uint16_t LATNus;
+   /** Upstream SATN */
+   DSL_uint16_t SATNus;
+   /** Upstream SNRM */
+   DSL_uint16_t SNRMus;
+   /** Upstream ATTNDR, LSW */
+   DSL_uint16_t ATTNDRus_LSW;
+   /** Upstream ATTNDR, MSW */
+   DSL_uint16_t ATTNDRus_MSW;
+   /** Upstream ACTATP */
+   DSL_int16_t ACTATPus;
+   /** Upstream ACTPSD (ADSL only) */
+   DSL_uint16_t ACTPSDus;
+   /** TCM Status US */
+   DSL_uint16_t TCMstatus_us : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 7;
+   /** Virtual Noise Status US */
+   DSL_uint16_t VNstatus_us : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message requests data about the line status (noise margin, line
+   attenuation and signal attenuation) for downstream direction in a "per band"
+   granularity.
+*/
+struct CMD_LineStatusPerBandDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message delivers the line status data (line attenuation, signal
+   attenuation and noise margin) for downstream direction in a "per band"
+   granularity as requested by CMD_LineStatusPerBandDS_Get.
+*/
+struct ACK_LineStatusPerBandDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Line Status Descriptor DS  */
+   VRX_LineStatus_pb_t LineStatus_pb_ds[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Line Status Descriptor DS  */
+   VRX_LineStatus_pb_t LineStatus_pb_ds[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message requests data about the line status (noise margin, line - and
+   signal attenuation) for upstream direction in a "per band" granularity.
+*/
+struct CMD_LineStatusPerBandUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message delivers the line status data (line attenuation, signal
+   attenuation and noise margin) for upstream direction in a "per band"
+   granularity as requested by CMD_LineStatusPerBandUS_Get.
+*/
+struct ACK_LineStatusPerBandUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Line Status Descriptor US  */
+   VRX_LineStatus_pb_t LineStatus_pb_us[8];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Line Status Descriptor US  */
+   VRX_LineStatus_pb_t LineStatus_pb_us[8];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests parameters used for the calculation of the downstream attainable net
+   data rate (ATTNDRds).
+*/
+struct CMD_AttndrStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the data requested by CMD_AttndrStatusGet.(Section 7.5.1.41 of
+   G.997.1 [12]).
+*/
+struct ACK_AttndrStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ATTNDR Actual Method (ATTNDR_ACTMETHOD). */
+   DSL_uint16_t AttndrActMethod;
+   /** ATTNDR Downstream Actual INP (ATTNDR_ACTINPds). */
+   DSL_uint16_t AttndrActInpDs;
+   /** ATTNDR DS Actual INP against REIN (ATTNDR_ACTINP_REINds). */
+   DSL_uint16_t AttndrActInpReinDs;
+   /** ATTNDR DS Actual Delay (ATTNDR_ACTDELAYds). */
+   DSL_uint16_t AttndrActDelayDs;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ATTNDR Actual Method (ATTNDR_ACTMETHOD). */
+   DSL_uint16_t AttndrActMethod;
+   /** ATTNDR Downstream Actual INP (ATTNDR_ACTINPds). */
+   DSL_uint16_t AttndrActInpDs;
+   /** ATTNDR DS Actual INP against REIN (ATTNDR_ACTINP_REINds). */
+   DSL_uint16_t AttndrActInpReinDs;
+   /** ATTNDR DS Actual Delay (ATTNDR_ACTDELAYds). */
+   DSL_uint16_t AttndrActDelayDs;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the breakpoints of the actual PSD for the downstream direction. PSDs
+   consisting of more than 42 PSD breakpoints must be read with 2 messages due
+   to the the mailbox size. (The first parameter in the retrieved data structure
+   contains the "Number of Breakpoints" parameter.)
+*/
+struct CMD_PSD_BreakpointsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the breakpoints of the actual PSD for the downstream direction as
+   requested by CMD_PSD_BreakpointsDS_Get.
+*/
+struct ACK_PSD_BreakpointsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the breakpoints of the actual PSD for the upstream direction.
+*/
+struct CMD_PSD_BreakpointsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the breakpoints of the actual PSD for the upstream direction as
+   requested by CMD_PSD_BreakpointsUS_Get.
+*/
+struct ACK_PSD_BreakpointsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Breakpoint Descriptor US PSD */
+   VRX_PSDbreak_t breakpoint[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint8_t NumBreakPts;
+   /** Reserved */
+   DSL_uint8_t Res0;
+   /** Breakpoint Descriptor US PSD */
+   VRX_PSDbreak_t breakpoint[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   The Downstream TSSI Breakpoints are specified by the transmitter (VTU-O) and
+   communicated to the receiver (VTU-R) via the O-PRM message.   The TSSI
+   Breakpoints are used to shape the O-P-TEQ signal. This message provides read
+   only access to the DS TSSI Breakpoints. The DS TSSI Breakpoints are not
+   configurable via messages.
+*/
+struct CMD_TssiDS_VDSL2_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement of CMD_TssiDS_VDSL2_Get.
+*/
+struct ACK_TssiDS_VDSL2_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data from the DS TSSI breakpoint buffer */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data from the DS TSSI breakpoint buffer */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   The Upstream TSSI Breakpoints are specified by the transmitter (VTU-R) and
+   communicated to the receiver (VTU-O) via the R-PRM message.   The TSSI
+   Breakpoints are used to shape the R-P-TEQ signal.  The TSSI Breakpoints can
+   be read only but are not configurable via messages.
+*/
+struct CMD_TssiUS_VDSL2_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement of CMD_TssiUS_VDSL2_Get.
+*/
+struct ACK_TssiUS_VDSL2_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data from the US TSSI breakpoint buffer */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data from the US TSSI breakpoint buffer */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads the actual power cutback value.
+*/
+struct CMD_ADSL_PCB_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the actual power cutback values requested with CMD_ADSL_PCB_Get.
+*/
+struct ACK_ADSL_PCB_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Downstream Power Cutback */
+   DSL_uint16_t dspcb;
+   /** Upstream Power Cutback */
+   DSL_uint16_t uspcb;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Downstream Power Cutback */
+   DSL_uint16_t dspcb;
+   /** Upstream Power Cutback */
+   DSL_uint16_t uspcb;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the PSD and power parameter values actually used by the firmware.
+*/
+struct CMD_ActualPSD_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides actually used PSD and power parameters as requested by
+   CMD_ActualPSD_Get.
+*/
+struct ACK_ActualPSD_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Power/PSD Configuration Parameter: MAXNOMPSDds */
+   DSL_uint16_t MAXNOMPSDds;
+   /** Power/PSD Configuration Parameter: MAXNOMPSDus */
+   DSL_uint16_t MAXNOMPSDus;
+   /** Power/PSD Configuration Parameter: MAXNOMATPds */
+   DSL_uint16_t MAXNOMATPds;
+   /** Power/PSD Configuration Parameters */
+   DSL_uint16_t MAXNOMATPus;
+   /** Reserved */
+   DSL_uint16_t Res0;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Power/PSD Configuration Parameter: MAXNOMPSDds */
+   DSL_uint16_t MAXNOMPSDds;
+   /** Power/PSD Configuration Parameter: MAXNOMPSDus */
+   DSL_uint16_t MAXNOMPSDus;
+   /** Power/PSD Configuration Parameter: MAXNOMATPds */
+   DSL_uint16_t MAXNOMATPds;
+   /** Power/PSD Configuration Parameters */
+   DSL_uint16_t MAXNOMATPus;
+   /** Reserved */
+   DSL_uint16_t Res0;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the actually used ADSL upstream mask for ADSL2/2+ Annexes M and J.
+   To be applied only in combination with G.992.3/5 Annex M support in
+   ACK_XTSE_StatusGet.
+*/
+struct CMD_ADSL_MJ_UsMaskGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the actually used ADSL upstream mask for ADSL2/2+ Annexes M and J.
+*/
+struct ACK_ADSL_MJ_UsMaskGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** G.992.3/5 Annex M/J Upstream Mask 9 */
+   DSL_uint16_t mask9 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 8 */
+   DSL_uint16_t mask8 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 7 */
+   DSL_uint16_t mask7 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 6 */
+   DSL_uint16_t mask6 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 5 */
+   DSL_uint16_t mask5 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 4 */
+   DSL_uint16_t mask4 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 3 */
+   DSL_uint16_t mask3 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 2 */
+   DSL_uint16_t mask2 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 1 */
+   DSL_uint16_t mask1 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** G.992.3/5 Annex M/J Upstream Mask 1 */
+   DSL_uint16_t mask1 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 2 */
+   DSL_uint16_t mask2 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 3 */
+   DSL_uint16_t mask3 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 4 */
+   DSL_uint16_t mask4 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 5 */
+   DSL_uint16_t mask5 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 6 */
+   DSL_uint16_t mask6 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 7 */
+   DSL_uint16_t mask7 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 8 */
+   DSL_uint16_t mask8 : 1;
+   /** G.992.3/5 Annex M/J Upstream Mask 9 */
+   DSL_uint16_t mask9 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the downstream transmit PSD mask (PSDMASKds) which is received from
+   CO with O-SIGNATURE message.
+*/
+struct CMD_PSDMASK_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the downstream transmit PSD mask (PSDMASKds) for both passbands and
+   stopbands, which is received from CO with O-SIGNATURE message. (Format is now
+   as absolute value without the offset.)
+*/
+struct ACK_PSDMASK_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** PSDMASKds Data */
+   VRX_PSDbreak2_t PSDMASK[48];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Breakpoints */
+   DSL_uint16_t NumBreakPts;
+   /** PSDMASKds Data */
+   VRX_PSDbreak2_t PSDMASK[48];
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message requests information about the receive PSD per subcarrier
+   available at the near-end side, which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices accordingly.In
+   Showtime the message reports the receive PSD measured in Channel Discovery
+   phase after the final hybrid training (no Showtime update).
+*/
+struct CMD_RxPSD_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the receive PSD per subcarrier available at the
+   near-end side, which means for downstream direction at the CPE.In Showtime
+   the message reports the receive PSD measured in Channel Discovery phase after
+   the final hybrid training (no Showtime update).
+*/
+struct ACK_RxPSD_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Receive PSD */
+   DSL_uint16_t PSDps[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Receive PSD */
+   DSL_uint16_t PSDps[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests status information for the downstream bearer channels.
+*/
+struct CMD_BearerChsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers status information for the downstream bearer channels. **: The terms
+   "LP0/Interleaved Path" and "LP1/Fast Path" below refer to the terminology
+   used in ITU DSL standards [1],[2], [3], [5] which means:- LP0 or LP1 in case
+   of VDSL2, ADSL2/2+- "Interleaved Path" or "Fast Path" in case of ADSL1/ADSL1
+   Lite.Attention: In VRX Device1 the "LP1/Fast Path" parameters are populated
+   only in ADSL1 and ADSL1 Lilte mode with selected fast path.
+*/
+struct ACK_BearerChsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ACTNDR DS for LP0, LSW */
+   DSL_uint16_t DRdsLP0_LSW;
+   /** ACTNDR DS for LP0, MSW */
+   DSL_uint16_t DRdsLP0_MSW;
+   /** ACTNDR DS for LP1, LSW */
+   DSL_uint16_t DRdsLP1_LSW;
+   /** ACTNDR DS for LP1, MSW */
+   DSL_uint16_t DRdsLP1_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[4];
+   /** Actual Interleaving Delay DS, LP0 */
+   DSL_uint16_t delay_dsLP0;
+   /** Actual Interleaving Delay DS, LP1 */
+   DSL_uint16_t delay_dsLP1;
+   /** Actual Interleaver Depth DS, LP0 */
+   DSL_uint16_t intlDepth_dsLP0;
+   /** Actual Interleaver Depth DS, LP1 */
+   DSL_uint16_t intlDepth_dsLP1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** TCM Status DS, LP0  */
+   DSL_uint16_t TCMstatus_dsLP0 : 1;
+   /** Parity Bytes DS, LP0 */
+   DSL_uint16_t parity_dsLP0 : 8;
+   /** Reserved */
+   DSL_uint8_t Res2;
+   /** Parity Bytes DS, LP1 */
+   DSL_uint16_t parity_dsLP1 : 8;
+   /** Actual INP NoErasure DS , LP0 */
+   DSL_uint16_t actInpNoErasure_LP0;
+   /** Actual INP NoErasure DS, LP1 */
+   DSL_uint16_t actInpNoErasure_LP1;
+   /** RX Estimated Actual INP DS, LP0 */
+   DSL_uint16_t actInpErasure_LP0;
+   /** RX Estimated Actual INP DS, LP1 */
+   DSL_uint16_t actInpErasure_LP1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ACTNDR DS for LP0, LSW */
+   DSL_uint16_t DRdsLP0_LSW;
+   /** ACTNDR DS for LP0, MSW */
+   DSL_uint16_t DRdsLP0_MSW;
+   /** ACTNDR DS for LP1, LSW */
+   DSL_uint16_t DRdsLP1_LSW;
+   /** ACTNDR DS for LP1, MSW */
+   DSL_uint16_t DRdsLP1_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[4];
+   /** Actual Interleaving Delay DS, LP0 */
+   DSL_uint16_t delay_dsLP0;
+   /** Actual Interleaving Delay DS, LP1 */
+   DSL_uint16_t delay_dsLP1;
+   /** Actual Interleaver Depth DS, LP0 */
+   DSL_uint16_t intlDepth_dsLP0;
+   /** Actual Interleaver Depth DS, LP1 */
+   DSL_uint16_t intlDepth_dsLP1;
+   /** Parity Bytes DS, LP0 */
+   DSL_uint16_t parity_dsLP0 : 8;
+   /** TCM Status DS, LP0  */
+   DSL_uint16_t TCMstatus_dsLP0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** Parity Bytes DS, LP1 */
+   DSL_uint16_t parity_dsLP1 : 8;
+   /** Reserved */
+   DSL_uint8_t Res2;
+   /** Actual INP NoErasure DS , LP0 */
+   DSL_uint16_t actInpNoErasure_LP0;
+   /** Actual INP NoErasure DS, LP1 */
+   DSL_uint16_t actInpNoErasure_LP1;
+   /** RX Estimated Actual INP DS, LP0 */
+   DSL_uint16_t actInpErasure_LP0;
+   /** RX Estimated Actual INP DS, LP1 */
+   DSL_uint16_t actInpErasure_LP1;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests status information for the upstream bearer channels.
+*/
+struct CMD_BearerChsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers status information for the upstream bearer channels. **: The terms
+   "LP0/Interleaved Path" and "LP1/Fast Path" below refer to the terminology
+   used in ITU DSL standards [1],[2], [3], [5] which means:- LP0 or LP1 in case
+   of VDSL2, ADSL2/2+- "Interleaved Path" or "Fast Path" in case of ADSL1/ADSL1
+   Lite.Attention: In VRX Device1 the "LP1/Fast Path" parameters are populated
+   only in ADSL1 and ADSL1 Lite mode with selected fast path.
+*/
+struct ACK_BearerChsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ACTNDR US for LP0, LSW */
+   DSL_uint16_t DRusLP0_LSW;
+   /** ACTNDR US for LP0, MSW */
+   DSL_uint16_t DRusLP0_MSW;
+   /** ACTNDR US for LP1, LSW */
+   DSL_uint16_t DRusLP1_LSW;
+   /** ACTNDR US for LP1, MSW */
+   DSL_uint16_t DRusLP1_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[4];
+   /** Actual Interleaving Delay US, LP0 */
+   DSL_uint16_t delay_usLP0;
+   /** Actual Interleaving Delay US, LP1 */
+   DSL_uint16_t delay_usLP1;
+   /** Actual Interleaver Depth US, LP0 */
+   DSL_uint16_t intlDepth_usLP0;
+   /** Actual Interleaver Depth US, LP1 */
+   DSL_uint16_t intlDepth_usLP1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** TCM Status US, LP0  */
+   DSL_uint16_t TCMstatus_usLP0 : 1;
+   /** Parity Bytes US, LP0 */
+   DSL_uint16_t parity_usLP0 : 8;
+   /** Reserved */
+   DSL_uint8_t Res2;
+   /** Parity Bytes US, LP1 */
+   DSL_uint16_t parity_usLP1 : 8;
+   /** Actual INP NoErasure US , LP0 */
+   DSL_uint16_t actInpNoErasure_LP0;
+   /** Actual INP NoErasure US, LP1 */
+   DSL_uint16_t actInpNoErasure_LP1;
+   /** RX Estimated Actual INP US , LP0 */
+   DSL_uint16_t actInpErasure_LP0;
+   /** RX Estimated Actual INP US, LP1 */
+   DSL_uint16_t actInpErasure_LP1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ACTNDR US for LP0, LSW */
+   DSL_uint16_t DRusLP0_LSW;
+   /** ACTNDR US for LP0, MSW */
+   DSL_uint16_t DRusLP0_MSW;
+   /** ACTNDR US for LP1, LSW */
+   DSL_uint16_t DRusLP1_LSW;
+   /** ACTNDR US for LP1, MSW */
+   DSL_uint16_t DRusLP1_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[4];
+   /** Actual Interleaving Delay US, LP0 */
+   DSL_uint16_t delay_usLP0;
+   /** Actual Interleaving Delay US, LP1 */
+   DSL_uint16_t delay_usLP1;
+   /** Actual Interleaver Depth US, LP0 */
+   DSL_uint16_t intlDepth_usLP0;
+   /** Actual Interleaver Depth US, LP1 */
+   DSL_uint16_t intlDepth_usLP1;
+   /** Parity Bytes US, LP0 */
+   DSL_uint16_t parity_usLP0 : 8;
+   /** TCM Status US, LP0  */
+   DSL_uint16_t TCMstatus_usLP0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 7;
+   /** Parity Bytes US, LP1 */
+   DSL_uint16_t parity_usLP1 : 8;
+   /** Reserved */
+   DSL_uint8_t Res2;
+   /** Actual INP NoErasure US , LP0 */
+   DSL_uint16_t actInpNoErasure_LP0;
+   /** Actual INP NoErasure US, LP1 */
+   DSL_uint16_t actInpNoErasure_LP1;
+   /** RX Estimated Actual INP US , LP0 */
+   DSL_uint16_t actInpErasure_LP0;
+   /** RX Estimated Actual INP US, LP1 */
+   DSL_uint16_t actInpErasure_LP1;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests an extended set of VDSL2 framing parameters for the downstream
+   direction.
+*/
+struct CMD_FrameDataExt2DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers an extended set of VDSL2 framing parameters for the downstream
+   direction requested by CMD_FrameDataExt2DS_Get. (Sections 7.5.2.6 of G.997.1
+   and 9.5 & 9.6 of G.993.2 [5])
+*/
+struct ACK_FrameDataExt2DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bytes "Bp" from BC0 per MDF LP0 DS */
+   DSL_uint16_t B0_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** MDFs per OH Sub-Frame "Tp" LP0 DS */
+   DSL_uint16_t Tp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res3;
+   /** OH Bytes per OH sub-frame "Gp" LP0 DS */
+   DSL_uint16_t Gp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res4;
+   /** OH Frames per OH Superframe "Fp" LP0 DS */
+   DSL_uint16_t Fp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** MDFs per RS-Codeword "Mp" LP0 DS */
+   DSL_uint16_t Mp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res6;
+   /** Bits per Symbol "Lp" LP0 DS, LSW */
+   DSL_uint16_t Lp_LP0ds_LSW;
+   /** Bits per Symbol "Lp" LP0 DS, MSW */
+   DSL_uint16_t Lp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Reserved */
+   DSL_uint16_t Res8;
+   /** RS Check Bytes "Rp" LP0 DS */
+   DSL_uint16_t Rp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res9;
+   /** Interleaver Block Length "Ip", LP0 DS */
+   DSL_uint16_t Ip_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res10;
+   /** Interleaving Depth "Dp" LP0 DS */
+   DSL_uint16_t Dp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res11;
+   /** OH Frame Period "PERp", LP0 DS */
+   DSL_uint16_t PERp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res12;
+   /** Line Data Rate DS for LP0, LSW */
+   DSL_uint16_t DRp_LP0ds_LSW;
+   /** Line Data Rate DS for LP0, MSW */
+   DSL_uint16_t DRp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res13;
+   /** Reserved */
+   DSL_uint16_t Res14;
+   /** RS Codeword Size "N_fecp" LP0 DS */
+   DSL_uint16_t N_fecp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res15;
+   /** Framing Parameter "q", LP0 DS */
+   DSL_uint16_t q_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res16;
+   /** OH Bytes per OH FrameLP0 "SEQp" DS */
+   DSL_uint16_t SEQp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res17;
+   /** OH sub-frames "Up" per OH frame LP0 DS */
+   DSL_uint16_t Up_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res18;
+   /** Bytes per OH Frame LP0 DS, LSW */
+   DSL_uint16_t PERBp_LP0ds_LSW;
+   /** Bytes per OH Frame LP0 DS, MSW */
+   DSL_uint16_t PERBp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res19;
+   /** Reserved */
+   DSL_uint16_t Res20;
+   /** Bytes in MSG OH "MSGc" LP0 DS */
+   DSL_uint16_t MSGc_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res21;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bytes "Bp" from BC0 per MDF LP0 DS */
+   DSL_uint16_t B0_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** MDFs per OH Sub-Frame "Tp" LP0 DS */
+   DSL_uint16_t Tp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res3;
+   /** OH Bytes per OH sub-frame "Gp" LP0 DS */
+   DSL_uint16_t Gp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res4;
+   /** OH Frames per OH Superframe "Fp" LP0 DS */
+   DSL_uint16_t Fp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** MDFs per RS-Codeword "Mp" LP0 DS */
+   DSL_uint16_t Mp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res6;
+   /** Bits per Symbol "Lp" LP0 DS, LSW */
+   DSL_uint16_t Lp_LP0ds_LSW;
+   /** Bits per Symbol "Lp" LP0 DS, MSW */
+   DSL_uint16_t Lp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Reserved */
+   DSL_uint16_t Res8;
+   /** RS Check Bytes "Rp" LP0 DS */
+   DSL_uint16_t Rp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res9;
+   /** Interleaver Block Length "Ip", LP0 DS */
+   DSL_uint16_t Ip_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res10;
+   /** Interleaving Depth "Dp" LP0 DS */
+   DSL_uint16_t Dp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res11;
+   /** OH Frame Period "PERp", LP0 DS */
+   DSL_uint16_t PERp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res12;
+   /** Line Data Rate DS for LP0, LSW */
+   DSL_uint16_t DRp_LP0ds_LSW;
+   /** Line Data Rate DS for LP0, MSW */
+   DSL_uint16_t DRp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res13;
+   /** Reserved */
+   DSL_uint16_t Res14;
+   /** RS Codeword Size "N_fecp" LP0 DS */
+   DSL_uint16_t N_fecp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res15;
+   /** Framing Parameter "q", LP0 DS */
+   DSL_uint16_t q_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res16;
+   /** OH Bytes per OH FrameLP0 "SEQp" DS */
+   DSL_uint16_t SEQp_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res17;
+   /** OH sub-frames "Up" per OH frame LP0 DS */
+   DSL_uint16_t Up_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res18;
+   /** Bytes per OH Frame LP0 DS, LSW */
+   DSL_uint16_t PERBp_LP0ds_LSW;
+   /** Bytes per OH Frame LP0 DS, MSW */
+   DSL_uint16_t PERBp_LP0ds_MSW;
+   /** Reserved */
+   DSL_uint16_t Res19;
+   /** Reserved */
+   DSL_uint16_t Res20;
+   /** Bytes in MSG OH "MSGc" LP0 DS */
+   DSL_uint16_t MSGc_LP0ds;
+   /** Reserved */
+   DSL_uint16_t Res21;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests an extended set of VDSL2 framing parameters for the upstream
+   direction.
+*/
+struct CMD_FrameDataExt2US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers an extended set of VDSL2 framing parameters for the upstream
+   direction requested by CMD_FrameDataExt2US_Get. (Sections 7.5.2.6 of G.997.1
+   and 9.5 & 9.6 of G.993.2 [5])
+*/
+struct ACK_FrameDataExt2US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bytes "Bp" from BC0 per MDF LP0 US */
+   DSL_uint16_t B0_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** MDFs per OH Sub-Frame "Tp" LP0 US */
+   DSL_uint16_t Tp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res3;
+   /** OH Bytes per OH sub-frame "Gp" LP0 US */
+   DSL_uint16_t Gp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res4;
+   /** OH Frames per OH Superframe "Fp" LP0 US */
+   DSL_uint16_t Fp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** MDFs per RS-Codeword "Mp" LP0 US */
+   DSL_uint16_t Mp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res6;
+   /** Bits per Symbol "Lp" LP0 US, LSW */
+   DSL_uint16_t Lp_LP0us_LSW;
+   /** Bits per Symbol "Lp" LP0 US, MSW */
+   DSL_uint16_t Lp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Reserved */
+   DSL_uint16_t Res8;
+   /** RS Check Bytes "Rp" LP0 US */
+   DSL_uint16_t Rp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res9;
+   /** Interleaver Block Length "Ip", LP0 US */
+   DSL_uint16_t Ip_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res10;
+   /** Interleaving Depth "Dp" LP0 US */
+   DSL_uint16_t Dp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res11;
+   /** OH Frame Period "PERp", LP0 US */
+   DSL_uint16_t PERp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res12;
+   /** Line Data Rate US for LP0, LSW */
+   DSL_uint16_t DRp_LP0us_LSW;
+   /** Line Data Rate US for LP0, MSW */
+   DSL_uint16_t DRp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res13;
+   /** Reserved */
+   DSL_uint16_t Res14;
+   /** RS Codeword Size "N_fecp" LP0 US */
+   DSL_uint16_t N_fecp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res15;
+   /** Framing Parameter "q", LP0 US */
+   DSL_uint16_t q_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res16;
+   /** OH Bytes per OH FrameLP0 "SEQp" US */
+   DSL_uint16_t SEQp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res17;
+   /** OH sub-frames "Up" per OH frame LP0 US */
+   DSL_uint16_t Up_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res18;
+   /** Bytes per OH Frame LP0 US, LSW */
+   DSL_uint16_t PERBp_LP0us_LSW;
+   /** Bytes per OH Frame LP0 US, MSW */
+   DSL_uint16_t PERBp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res19;
+   /** Reserved */
+   DSL_uint16_t Res20;
+   /** Bytes in MSG OH "MSGc" LP0 US */
+   DSL_uint16_t MSGc_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res21;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bytes "Bp" from BC0 per MDF LP0 US */
+   DSL_uint16_t B0_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** MDFs per OH Sub-Frame "Tp" LP0 US */
+   DSL_uint16_t Tp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res3;
+   /** OH Bytes per OH sub-frame "Gp" LP0 US */
+   DSL_uint16_t Gp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res4;
+   /** OH Frames per OH Superframe "Fp" LP0 US */
+   DSL_uint16_t Fp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res5;
+   /** MDFs per RS-Codeword "Mp" LP0 US */
+   DSL_uint16_t Mp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res6;
+   /** Bits per Symbol "Lp" LP0 US, LSW */
+   DSL_uint16_t Lp_LP0us_LSW;
+   /** Bits per Symbol "Lp" LP0 US, MSW */
+   DSL_uint16_t Lp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res7;
+   /** Reserved */
+   DSL_uint16_t Res8;
+   /** RS Check Bytes "Rp" LP0 US */
+   DSL_uint16_t Rp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res9;
+   /** Interleaver Block Length "Ip", LP0 US */
+   DSL_uint16_t Ip_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res10;
+   /** Interleaving Depth "Dp" LP0 US */
+   DSL_uint16_t Dp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res11;
+   /** OH Frame Period "PERp", LP0 US */
+   DSL_uint16_t PERp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res12;
+   /** Line Data Rate US for LP0, LSW */
+   DSL_uint16_t DRp_LP0us_LSW;
+   /** Line Data Rate US for LP0, MSW */
+   DSL_uint16_t DRp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res13;
+   /** Reserved */
+   DSL_uint16_t Res14;
+   /** RS Codeword Size "N_fecp" LP0 US */
+   DSL_uint16_t N_fecp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res15;
+   /** Framing Parameter "q", LP0 US */
+   DSL_uint16_t q_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res16;
+   /** OH Bytes per OH FrameLP0 "SEQp" US */
+   DSL_uint16_t SEQp_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res17;
+   /** OH sub-frames "Up" per OH frame LP0 US */
+   DSL_uint16_t Up_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res18;
+   /** Bytes per OH Frame LP0 US, LSW */
+   DSL_uint16_t PERBp_LP0us_LSW;
+   /** Bytes per OH Frame LP0 US, MSW */
+   DSL_uint16_t PERBp_LP0us_MSW;
+   /** Reserved */
+   DSL_uint16_t Res19;
+   /** Reserved */
+   DSL_uint16_t Res20;
+   /** Bytes in MSG OH "MSGc" LP0 US */
+   DSL_uint16_t MSGc_LP0us;
+   /** Reserved */
+   DSL_uint16_t Res21;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests ADSL framing parameters for the downstream direction, latency path
+   0/Interleaved Path.
+*/
+struct CMD_ADSL_FrameDataDS_LP0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the ADSL framing parameters for the downstream direction,
+   LP0/Interleaved path, as requested by CMD_ADSL_FrameDataDS_LP0Get. (Sections
+   7.5 & 7.6 of G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+struct ACK_ADSL_FrameDataDS_LP0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" DS LP0 */
+   DSL_uint16_t Rp;
+   /** Symbols per RS-Codeword "Sp" DS LP0 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" DS LP0 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" DS LP0 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" DS LP0 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" DS LP0 */
+   DSL_uint16_t Lp;
+   /** TCM Bits DS LP0 */
+   DSL_uint16_t TCM;
+   /** Framing Mode DS LP0 */
+   DSL_uint16_t fraMode;
+   /** "Tp" DS LP0 */
+   DSL_uint16_t Tp;
+   /** "SEQp" DS LP0 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" DS */
+   DSL_uint16_t MSGc;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" DS LP0 */
+   DSL_uint16_t Rp;
+   /** Symbols per RS-Codeword "Sp" DS LP0 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" DS LP0 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" DS LP0 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" DS LP0 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" DS LP0 */
+   DSL_uint16_t Lp;
+   /** TCM Bits DS LP0 */
+   DSL_uint16_t TCM;
+   /** Framing Mode DS LP0 */
+   DSL_uint16_t fraMode;
+   /** "Tp" DS LP0 */
+   DSL_uint16_t Tp;
+   /** "SEQp" DS LP0 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" DS */
+   DSL_uint16_t MSGc;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests ADSL framing parameters for the upstream direction, latency path
+   0/Interleaved path.
+*/
+struct CMD_ADSL_FrameDataUS_LP0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the ADSL framing parameters for the upstream direction, latency path
+   0/Interleaved path, as requested by CMD_ADSL_FrameDataUS_LP0Get. (Sections
+   7.5 & 7.6 of G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+struct ACK_ADSL_FrameDataUS_LP0Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" US LP0 */
+   DSL_uint16_t Rp_LP0us;
+   /** Symbols per RS-Codeword "Sp" US LP0 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" US LP0 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" US LP0 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" US LP0 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" US LP0 */
+   DSL_uint16_t Lp;
+   /** TCM Bits US LP0 */
+   DSL_uint16_t TCM;
+   /** Framing Mode US LP0 */
+   DSL_uint16_t fraMode;
+   /** "Tp" US LP0 */
+   DSL_uint16_t Tp;
+   /** "SEQp" US LP0 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" US */
+   DSL_uint16_t MSGc;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" US LP0 */
+   DSL_uint16_t Rp_LP0us;
+   /** Symbols per RS-Codeword "Sp" US LP0 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" US LP0 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" US LP0 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" US LP0 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" US LP0 */
+   DSL_uint16_t Lp;
+   /** TCM Bits US LP0 */
+   DSL_uint16_t TCM;
+   /** Framing Mode US LP0 */
+   DSL_uint16_t fraMode;
+   /** "Tp" US LP0 */
+   DSL_uint16_t Tp;
+   /** "SEQp" US LP0 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" US */
+   DSL_uint16_t MSGc;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests ADSL framing parameters for the downstream direction, latency path 1
+   (LP1)/ Fast path.In VRX Rev. 1.x to be used for ADSL1, "fast path" only.
+*/
+struct CMD_ADSL_FrameDataDS_LP1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the ADSL framing parameters for the downstream direction, LP1/Fast
+   path, as requested by CMD_ADSL_FrameDataDS_LP1Get. (Sections 7.5 & 7.6 of
+   G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+struct ACK_ADSL_FrameDataDS_LP1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" DS LP1 */
+   DSL_uint16_t Rp;
+   /** Symbols per RS-Codeword "Sp" DS LP1 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" DS LP1 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" DS LP1 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" DS LP1 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" DS LP1 */
+   DSL_uint16_t Lp;
+   /** TCM Bits DS LP1 */
+   DSL_uint16_t TCM;
+   /** Framing Mode DS LP1 */
+   DSL_uint16_t fraMode;
+   /** "Tp" DS LP1 */
+   DSL_uint16_t Tp;
+   /** "SEQp" DS LP1 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" DS */
+   DSL_uint16_t MSGc;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" DS LP1 */
+   DSL_uint16_t Rp;
+   /** Symbols per RS-Codeword "Sp" DS LP1 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" DS LP1 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" DS LP1 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" DS LP1 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" DS LP1 */
+   DSL_uint16_t Lp;
+   /** TCM Bits DS LP1 */
+   DSL_uint16_t TCM;
+   /** Framing Mode DS LP1 */
+   DSL_uint16_t fraMode;
+   /** "Tp" DS LP1 */
+   DSL_uint16_t Tp;
+   /** "SEQp" DS LP1 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" DS */
+   DSL_uint16_t MSGc;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests ADSL framing parameters for the upstream direction, latency path 1
+   (LP1)/Fast path.In VRX Rev. 1.x to be used for ADSL1, "fast path" only.
+*/
+struct CMD_ADSL_FrameDataUS_LP1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the ADSL framing parameters for the upstream direction, LP1/Fast
+   path, as requested by CMD_ADSL_FrameDataUS_LP1Get. (Sections 7.5 & 7.6 of
+   G.992.3 [2] and 7.4 of G.992.1 [1])
+*/
+struct ACK_ADSL_FrameDataUS_LP1Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" US LP1 */
+   DSL_uint16_t Rp_LP0us;
+   /** Symbols per RS-Codeword "Sp" US LP1 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" US LP1 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" US LP1 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" US LP1 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" US LP1 */
+   DSL_uint16_t Lp;
+   /** TCM Bits US LP1 */
+   DSL_uint16_t TCM;
+   /** Framing Mode US LP1 */
+   DSL_uint16_t fraMode;
+   /** "Tp" US LP1 */
+   DSL_uint16_t Tp;
+   /** "SEQp" US LP1 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" US */
+   DSL_uint16_t MSGc;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RS Check Bytes "Rp" US LP1 */
+   DSL_uint16_t Rp_LP0us;
+   /** Symbols per RS-Codeword "Sp" US LP1 */
+   DSL_uint16_t Sp;
+   /** Interleaving Depth "Dp" US LP1 */
+   DSL_uint16_t Dp;
+   /** Bytes per MDF "Kp" US LP1 */
+   DSL_uint16_t Kp;
+   /** MDFs per RS-Codeword "Mp" US LP1 */
+   DSL_uint16_t Mp;
+   /** Bits per Symbol "Lp" US LP1 */
+   DSL_uint16_t Lp;
+   /** TCM Bits US LP1 */
+   DSL_uint16_t TCM;
+   /** Framing Mode US LP1 */
+   DSL_uint16_t fraMode;
+   /** "Tp" US LP1 */
+   DSL_uint16_t Tp;
+   /** "SEQp" US LP1 */
+   DSL_uint16_t SEQp;
+   /** Bytes in MSG-OH "MSGc" US */
+   DSL_uint16_t MSGc;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reads the connected hybrid type.
+*/
+struct CMD_HybridGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Contains the connected hybrid type.
+*/
+struct ACK_HybridGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hybrid Type */
+   DSL_uint16_t HybridType;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hybrid Type */
+   DSL_uint16_t HybridType;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the pilot tones used in Showtime.
+*/
+struct CMD_PilotTonesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the Showtime pilot tones as requested by CMD_PilotTonesGet.
+*/
+struct ACK_PilotTonesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Pilot Tones */
+   DSL_uint16_t numPilot;
+   /** Pilot Tones */
+   DSL_uint16_t pilot[16];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Number of Pilot Tones */
+   DSL_uint16_t numPilot;
+   /** Pilot Tones */
+   DSL_uint16_t pilot[16];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the results of the micro filter detection (MFD) function. Valid
+   information in Showtime and FAIL will be available only if the microfilter
+   detection mechanism has been run before.
+*/
+struct CMD_MFD_ResultsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the results of the micro filter detection (MFD) function.
+*/
+struct ACK_MFD_ResultsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 1;
+   /** Filter Detection Process Indication, Bit 14:13 */
+   DSL_uint16_t FilterDetectStatus : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** Training Bridged Tap Range, Bit 9:8 */
+   DSL_uint16_t TrainingBTRange : 2;
+   /** Training Hybrid Info Ready Indication, Bit 7 */
+   DSL_uint16_t TrainingHybridInfoReady : 1;
+   /** Training Loop Length Ready Indication, Bit 6 */
+   DSL_uint16_t TrainingLoopLengthReady : 1;
+   /** Training Metric2 Ready Indication, Bit 5 */
+   DSL_uint16_t TrainingMetric2Ready : 1;
+   /** Reserved Bit 4:2 */
+   DSL_uint16_t Res2 : 3;
+   /** Bridge Tap Range, Bit 1:0 */
+   DSL_uint16_t BTRange : 2;
+   /** Metric1 for NLNF, Bit 15:4 */
+   DSL_uint16_t M1metric : 12;
+   /** "No Confidence" Bit, Bit 3 */
+   DSL_uint16_t M1NoConfidence : 1;
+   /** Metric1 QLN level, Bit 2:0 */
+   DSL_uint16_t M1QlnLevel : 3;
+   /** Metric2 */
+   DSL_int16_t M2Metric;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bridge Tap Range, Bit 1:0 */
+   DSL_uint16_t BTRange : 2;
+   /** Reserved Bit 4:2 */
+   DSL_uint16_t Res2 : 3;
+   /** Training Metric2 Ready Indication, Bit 5 */
+   DSL_uint16_t TrainingMetric2Ready : 1;
+   /** Training Loop Length Ready Indication, Bit 6 */
+   DSL_uint16_t TrainingLoopLengthReady : 1;
+   /** Training Hybrid Info Ready Indication, Bit 7 */
+   DSL_uint16_t TrainingHybridInfoReady : 1;
+   /** Training Bridged Tap Range, Bit 9:8 */
+   DSL_uint16_t TrainingBTRange : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** Filter Detection Process Indication, Bit 14:13 */
+   DSL_uint16_t FilterDetectStatus : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 1;
+   /** Metric1 QLN level, Bit 2:0 */
+   DSL_uint16_t M1QlnLevel : 3;
+   /** "No Confidence" Bit, Bit 3 */
+   DSL_uint16_t M1NoConfidence : 1;
+   /** Metric1 for NLNF, Bit 15:4 */
+   DSL_uint16_t M1metric : 12;
+   /** Metric2 */
+   DSL_int16_t M2Metric;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the loop length estimates done by the microfilter detection
+   function.In Showtime the data are always available.The availability of data
+   is indicated by the flag TrainingLoopLengthReady in ACK_MFD_ResultsGet.In
+   Showtime the data are always available.
+*/
+struct CMD_MFD_LooplengthGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the loop length estimates done by the microfilter detection (MFD)
+   function.
+*/
+struct ACK_MFD_LooplengthGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AWG26 Length Estimate */
+   DSL_uint16_t Awg26Length;
+   /** AWG24 Length Estimate */
+   DSL_uint16_t Awg24Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** AWG26 Length Estimate */
+   DSL_uint16_t Awg26Length;
+   /** AWG24 Length Estimate */
+   DSL_uint16_t Awg24Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests hybrid information used by the microfilter detection function.In
+   Showtime the data are always available.The availability of data is indicated
+   by the flag TrainingHybridInfoReady in ACK_MFD_ResultsGet. In Showtime the
+   data are always available.
+*/
+struct CMD_MFD_HybridInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the hybrid information used by the microfilter detection function.
+*/
+struct ACK_MFD_HybridInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hybrid Max Index */
+   DSL_uint16_t HybridMaxIndex;
+   /** Hybrid Max Metric */
+   DSL_uint16_t HybridMaxMetric;
+   /** Hybrid Second Best Index */
+   DSL_uint16_t Hybrid2ndBestIndex;
+   /** Hybrid Second Best Metric */
+   DSL_uint16_t Hybrid2ndBestMetric;
+   /** Hybrid Zero Metric */
+   DSL_uint16_t Hybrid0Metric;
+   /** Loaded Hybrid Index */
+   DSL_uint16_t LoadHybridIndex;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hybrid Max Index */
+   DSL_uint16_t HybridMaxIndex;
+   /** Hybrid Max Metric */
+   DSL_uint16_t HybridMaxMetric;
+   /** Hybrid Second Best Index */
+   DSL_uint16_t Hybrid2ndBestIndex;
+   /** Hybrid Second Best Metric */
+   DSL_uint16_t Hybrid2ndBestMetric;
+   /** Hybrid Zero Metric */
+   DSL_uint16_t Hybrid0Metric;
+   /** Loaded Hybrid Index */
+   DSL_uint16_t LoadHybridIndex;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_GHS_STATUS_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_olr.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_olr.h
new file mode 100644
index 0000000000000000000000000000000000000000..582845b31be4177886ca2cb6624b274ea17f740c
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_olr.h
@@ -0,0 +1,3875 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_OLR_H_
+#define _DRV_DSL_CPE_VRX_MSG_OLR_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _OLR_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+#define CMD_TestParamsFE_Request_TRIGGER 0x1
+#define CMD_TestParamsFE_Request_ABORT 0x0
+#define ACK_TestParamsFE_Poll_ONGOING 0x1
+#define CMD_ClearEOC_TxTrigger_IDLE 0
+#define CMD_ClearEOC_TxTrigger_START 1
+#define ACK_ClearEOCStatusGet_IDLE 0
+#define ACK_ClearEOCStatusGet_TXPROG 1
+#define ACK_ClearEOCStatusGet_Reserved 2
+#define ACK_ClearEOCStatusGet_TXERR 3
+#define ACK_ClearEOCStatusGet_RXPROG 1
+#define ACK_ClearEOCStatusGet_RXDONE 2
+#define ACK_ClearEOCStatusGet_RXERR 3
+#define EVT_ClearEOCStatusGet_IDLE 0
+#define EVT_ClearEOCStatusGet_TXPROG 1
+#define EVT_ClearEOCStatusGet_TXDONE 2
+#define EVT_ClearEOCStatusGet_TXERR 3
+#define EVT_ClearEOCStatusGet_RXPROG 1
+#define EVT_ClearEOCStatusGet_RXDONE 2
+#define EVT_ClearEOCStatusGet_RXERR 3
+#define CMD_ClearEOCStatusSet_IDLE 0
+#define ACK_RA_ModeDS_Get_MANUAL 1
+#define ACK_RA_ModeDS_Get_AT_INIT 2
+#define ACK_RA_ModeDS_Get_DYNAMIC 3
+#define ACK_RA_ModeDS_Get_SOS 4
+#define ACK_RA_ModeUS_Get_MANUAL 1
+#define ACK_RA_ModeUS_Get_AT_INIT 2
+#define ACK_RA_ModeUS_Get_DYNAMIC 3
+#define ACK_RA_ModeUS_Get_SOS 4
+#define CMD_RTX_Control_RTX_DS_ENABLE 1
+#define CMD_RTX_Control_RTX_DSUS_ENABLE 2
+#define CMD_DSM_Control_OFF 0
+#define CMD_DSM_Control_FULL_VECTOR 1
+#define CMD_DSM_Control_FULL_VECTOR_FRIENDLY 2
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_BAT_TableEntriesGet */
+#define CMD_BAT_TABLEENTRIESGET 0x1703
+
+/**
+   Requests information about the bit-allocation per subcarrier in VDSL mode.
+   The values for all subcarriers of both directions can be retrieved. (For ADSL
+   use CMD_BAT_DS_Get and CMD_BAT_US_Get).
+*/
+typedef struct CMD_BAT_TableEntriesGet CMD_BAT_TableEntriesGet_t;
+
+/** Message ID for ACK_BAT_TableEntriesGet */
+#define ACK_BAT_TABLEENTRIESGET 0x1703
+
+/**
+   Returns information about the bit-allocation per tone for the chosen range of
+   subcarriers.(Section 7.5.1.29.1-2 of G.997.1)
+*/
+typedef struct ACK_BAT_TableEntriesGet ACK_BAT_TableEntriesGet_t;
+
+/** Message ID for CMD_GainTableEntriesGet */
+#define CMD_GAINTABLEENTRIESGET 0x1903
+
+/**
+   Requests information about the Gains per subcarrier. The values for all
+   subcarriers of both directions can be retrieved.(For ADSL use
+   CMD_GainTableDS_Get and CMD_GainTableUS_Get).
+*/
+typedef struct CMD_GainTableEntriesGet CMD_GainTableEntriesGet_t;
+
+/** Message ID for ACK_GainTableEntriesGet */
+#define ACK_GAINTABLEENTRIESGET 0x1903
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers.(Section 7.5.1.29.3-4 of G.997.1)
+*/
+typedef struct ACK_GainTableEntriesGet ACK_GainTableEntriesGet_t;
+
+/** Message ID for CMD_SNR_NE_TableEntriesGet */
+#define CMD_SNR_NE_TABLEENTRIESGET 0x0B03
+
+/**
+   The message requests information about the SNR per subcarrier with virtual
+   noise for the near-end side , which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices
+   accordingly.See also Table 20 "How to Retrieve Test Parameter Data" on Page
+   496.
+*/
+typedef struct CMD_SNR_NE_TableEntriesGet CMD_SNR_NE_TableEntriesGet_t;
+
+/** Message ID for ACK_SNR_NE_TableEntriesGet */
+#define ACK_SNR_NE_TABLEENTRIESGET 0x0B03
+
+/**
+   Returns information about the SNR per subcarrier with virtual noise for the
+   near-end side, meaning for downstream direction.
+*/
+typedef struct ACK_SNR_NE_TableEntriesGet ACK_SNR_NE_TableEntriesGet_t;
+
+/** Message ID for CMD_BAT_DS_Get */
+#define CMD_BAT_DS_GET 0x070E
+
+/**
+   Requests information about the downstream bit-allocation per subcarrier in
+   ADSL mode.
+*/
+typedef struct CMD_BAT_DS_Get CMD_BAT_DS_Get_t;
+
+/** Message ID for ACK_BAT_DS_Get */
+#define ACK_BAT_DS_GET 0x070E
+
+/**
+   Returns information about the downstream bit-allocation per tone for the
+   chosen range of subcarriers.(Section 7.5.1.29.1 of G.997.1)
+*/
+typedef struct ACK_BAT_DS_Get ACK_BAT_DS_Get_t;
+
+/** Message ID for CMD_BAT_US_Get */
+#define CMD_BAT_US_GET 0x060E
+
+/**
+   Requests information about the upstream bit-allocation per subcarrier in ADSL
+   mode.
+*/
+typedef struct CMD_BAT_US_Get CMD_BAT_US_Get_t;
+
+/** Message ID for ACK_BAT_US_Get */
+#define ACK_BAT_US_GET 0x060E
+
+/**
+   Returns information about the upstream bit-allocation per tone for the chosen
+   range of subcarriers.(Section 7.5.1.29.2 of G.997.1)
+*/
+typedef struct ACK_BAT_US_Get ACK_BAT_US_Get_t;
+
+/** Message ID for CMD_GainTableDS_Get */
+#define CMD_GAINTABLEDS_GET 0x090E
+
+/**
+   Requests information about the Gains per subcarrier for the downstream
+   direction.
+*/
+typedef struct CMD_GainTableDS_Get CMD_GainTableDS_Get_t;
+
+/** Message ID for ACK_GainTableDS_Get */
+#define ACK_GAINTABLEDS_GET 0x090E
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers for the downstream direction.(Section 7.5.1.29.3 of G.997.1) as
+   requested by CMD_GainTableDS_Get.
+*/
+typedef struct ACK_GainTableDS_Get ACK_GainTableDS_Get_t;
+
+/** Message ID for CMD_GainTableUS_Get */
+#define CMD_GAINTABLEUS_GET 0x080E
+
+/**
+   Requests information about the Gains per subcarrier for the upstream
+   direction.
+*/
+typedef struct CMD_GainTableUS_Get CMD_GainTableUS_Get_t;
+
+/** Message ID for ACK_GainTableUS_Get */
+#define ACK_GAINTABLEUS_GET 0x080E
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers for the upstream direction.(Section 7.5.1.29.4 of G.997.1)
+*/
+typedef struct ACK_GainTableUS_Get ACK_GainTableUS_Get_t;
+
+/** Message ID for CMD_ADSL_ExMarginReductionGet */
+#define CMD_ADSL_EXMARGINREDUCTIONGET 0x2F03
+
+/**
+   Requests information about the Excess Margin Reduction needed for the fine
+   gain calculation at the ATU_R.(See also ACK_GainTableDS_Get).
+*/
+typedef struct CMD_ADSL_ExMarginReductionGet CMD_ADSL_ExMarginReductionGet_t;
+
+/** Message ID for ACK_ADSL_ExMarginReductionGet */
+#define ACK_ADSL_EXMARGINREDUCTIONGET 0x2F03
+
+/**
+   Returns information about the Excess Margin Reduction for the downstream
+   direction.
+*/
+typedef struct ACK_ADSL_ExMarginReductionGet ACK_ADSL_ExMarginReductionGet_t;
+
+/** Message ID for CMD_HlogDS_Get */
+#define CMD_HLOGDS_GET 0x4A03
+
+/**
+   Requests information about the downstream HLOG information per subcarrier
+   group (Section 7.5.1.26.6 of G.997.1).During STEADY_STATE, the command can be
+   used in VDSL to request near-end data only (CPE). For the far-end HLOG to be
+   provided via the EOC channel CMD_TestParamsFE_Request must be used. In ADSL,
+   the command can be applied for near-end as well as far-end parameters.During
+   loop diagnostic mode, the command shall be used to request both near-end and
+   far-end data.
+*/
+typedef struct CMD_HlogDS_Get CMD_HlogDS_Get_t;
+
+/** Message ID for ACK_HlogDS_Get */
+#define ACK_HLOGDS_GET 0x4A03
+
+/**
+   Returns information about the downstream HLOG per subcarrier group for the
+   chosen range. (Section 7.5.1.26.6 of G.997.1)
+*/
+typedef struct ACK_HlogDS_Get ACK_HlogDS_Get_t;
+
+/** Message ID for CMD_HlogUS_Get */
+#define CMD_HLOGUS_GET 0x4B03
+
+/**
+   Requests information about the upstream HLOG information per subcarrier group
+   (Section 7.5.1.26.11 of G.997.1).
+*/
+typedef struct CMD_HlogUS_Get CMD_HlogUS_Get_t;
+
+/** Message ID for ACK_HlogUS_Get */
+#define ACK_HLOGUS_GET 0x4B03
+
+/**
+   Returns information about the upstream HLOG per subcarrier group for the
+   chosen range. (Section 7.5.1.26.11 of G.997.1)
+*/
+typedef struct ACK_HlogUS_Get ACK_HlogUS_Get_t;
+
+/** Message ID for CMD_HlinDS_Get */
+#define CMD_HLINDS_GET 0x4803
+
+/**
+   Requests information about the downstream HLIN information per subcarrier
+   group. (Section 7.5.1.26.3 of G.997.1).The HLIN data are available during
+   loop diagnostic mode only.
+*/
+typedef struct CMD_HlinDS_Get CMD_HlinDS_Get_t;
+
+/** Message ID for ACK_HlinDS_Get */
+#define ACK_HLINDS_GET 0x4803
+
+/**
+   Returns information about the downstream HLIN per subcarrier group for the
+   chosen range. (Section 7.5.1.26.3 of G.997.1)
+*/
+typedef struct ACK_HlinDS_Get ACK_HlinDS_Get_t;
+
+/** Message ID for CMD_HlinUS_Get */
+#define CMD_HLINUS_GET 0x4903
+
+/**
+   Requests information about the upstream HLIN information per subcarrier
+   group. (Section 7.5.1.26.9 of G.997.1).The HLIN data are available in loop
+   diagnostic mode only.
+*/
+typedef struct CMD_HlinUS_Get CMD_HlinUS_Get_t;
+
+/** Message ID for ACK_HlinUS_Get */
+#define ACK_HLINUS_GET 0x4903
+
+/**
+   Returns information about the upstream HLIN per subcarrier group for the
+   chosen range. (Section 7.5.1.26.9 of G.997.1)
+*/
+typedef struct ACK_HlinUS_Get ACK_HlinUS_Get_t;
+
+/** Message ID for CMD_QLN_DS_Get */
+#define CMD_QLN_DS_GET 0x4C03
+
+/**
+   Requests information about the downstream QLN information (QLNpsds) per
+   subcarrier group (Section 7.5.1.27.3 of G.997.1).During STEADY_STATE, the
+   command can be used in VDSL to request near-end data only (CPE).
+*/
+typedef struct CMD_QLN_DS_Get CMD_QLN_DS_Get_t;
+
+/** Message ID for ACK_QLN_DS_Get */
+#define ACK_QLN_DS_GET 0x4C03
+
+/**
+   Returns information about the QLN per subcarrier group for the chosen range.
+   (Section 7.5.1.27.3 of G.997.1)
+*/
+typedef struct ACK_QLN_DS_Get ACK_QLN_DS_Get_t;
+
+/** Message ID for CMD_QLN_US_Get */
+#define CMD_QLN_US_GET 0x4D03
+
+/**
+   Requests information about the upstream QLN (QLNpsus) per subcarrier group.
+   (Section 7.5.1.27.6 of G.997.1).
+*/
+typedef struct CMD_QLN_US_Get CMD_QLN_US_Get_t;
+
+/** Message ID for ACK_QLN_US_Get */
+#define ACK_QLN_US_GET 0x4D03
+
+/**
+   Returns information about the QLN per subcarrier group for the chosen range.
+   (Section 7.5.1.27.6 of G.997.1)
+*/
+typedef struct ACK_QLN_US_Get ACK_QLN_US_Get_t;
+
+/** Message ID for CMD_SNR_DS_Get */
+#define CMD_SNR_DS_GET 0x5503
+
+/**
+   Requests information about the downstream SNR per subcarrier group in VDSL or
+   the SNR per subcarrier in ADSL, both without considering virtual noise
+   (Section 7.5.1.28.3 of G.997.1).
+*/
+typedef struct CMD_SNR_DS_Get CMD_SNR_DS_Get_t;
+
+/** Message ID for ACK_SNR_DS_Get */
+#define ACK_SNR_DS_GET 0x5503
+
+/**
+   Returns information about the SNR per subcarrier (ADSL) or per subcarrier
+   group (VDSL) for the chosen range without considering virtual noise. (Section
+   7.5.1.28.3 of G.997.1)
+*/
+typedef struct ACK_SNR_DS_Get ACK_SNR_DS_Get_t;
+
+/** Message ID for CMD_SNR_US_Get */
+#define CMD_SNR_US_GET 0x4E03
+
+/**
+   Requests information about the upstream SNR per subcarrier group (Section
+   7.5.1.28.6 of G.997.1).
+*/
+typedef struct CMD_SNR_US_Get CMD_SNR_US_Get_t;
+
+/** Message ID for ACK_SNR_US_Get */
+#define ACK_SNR_US_GET 0x4E03
+
+/**
+   Returns information about the upstream SNR per subcarrier group for the
+   chosen range. (Section 7.5.1.28.6 of G.997.1)
+*/
+typedef struct ACK_SNR_US_Get ACK_SNR_US_Get_t;
+
+/** Message ID for CMD_TestParamsAuxDS_Get */
+#define CMD_TESTPARAMSAUXDS_GET 0x4F03
+
+/**
+   Requests test parameter related information for the downstream direction: The
+   HLIN scaling factor (HLINSCds), the subcarrier group size "G" and the
+   measurement times for HLOGpsds, QLNpsds, SNRpsds.(Sections 7.5.1.26.1/2/4/5,
+   7.5.1.27.1/2 and 7.5.1.28.1/2 of G.997.1)
+*/
+typedef struct CMD_TestParamsAuxDS_Get CMD_TestParamsAuxDS_Get_t;
+
+/** Message ID for ACK_TestParamsAuxDS_Get */
+#define ACK_TESTPARAMSAUXDS_GET 0x4F03
+
+/**
+   Provides the test-parameter related information as requested by
+   CMD_TestParamsAuxDS_Get: The HLIN scaling factor (HLINSCds), the subcarrier
+   group size "G" and the measurement times for HLOGpsds, QLNpsds,
+   SNRpsds.(Sections 7.5.1.26.1/2/4/5, 7.5.1.27.1/2 and 7.5.1.28.1/2 of G.997.1)
+*/
+typedef struct ACK_TestParamsAuxDS_Get ACK_TestParamsAuxDS_Get_t;
+
+/** Message ID for CMD_TestParamsAuxUS_Get */
+#define CMD_TESTPARAMSAUXUS_GET 0x5003
+
+/**
+   Requests test parameter related information for the upstream direction: The
+   HLIN scaling factor (HLINSCus), the subcarrier group size "G" and the
+   measurement times for HLOGpsus, QLNpsus, SNRpsus.For older VDSL FW versions
+   from w.6.x.y.z.a to 5.8.0.x.y.z: During STEADY_STATE, the command can be used
+   only to retrieve the "group size" parameters. To get the measurement time
+   parameters (via the EOC channel) the message CMD_TestParamsFE_Request must be
+   applied instead.(Sections 7.5.1.26.7/8/10/11, 7.5.1.27.4/5 and 7.5.1.28.4/5
+   of G.997.1)For older VDSL FW versions from w.6.x.y.z.a to 5.8.0.x.y.z: During
+   STEADY_STATE, the command can be used only to retrieve the "group size"
+   parameters. To get the measurement time parameters (via the EOC channel) the
+   message CMD_TestParamsFE_Request must be applied instead.The test parameters
+   can be requested during loop diagnostic mode (VDSL, ADSL) and in ADSL also
+   during STEADY_STATE.For older VDSL FW versions from w.6.x.y.z.a to
+   5.8.0.x.y.z: During STEADY_STATE, the command can be used only to retrieve
+   the "group size" parameters. To get the measurement time parameters (via the
+   EOC channel) the message CMD_TestParamsFE_Request must be applied instead.
+*/
+typedef struct CMD_TestParamsAuxUS_Get CMD_TestParamsAuxUS_Get_t;
+
+/** Message ID for ACK_TestParamsAuxUS_Get */
+#define ACK_TESTPARAMSAUXUS_GET 0x5003
+
+/**
+   Provides the test-parameter related information as requested by
+   CMD_TestParamsAuxUS_Get: The HLIN scaling factor (HLINSCus), the subcarrier
+   group size "G" and the measurement times for HLOGpsus, QLNpsus, SNRpsus.
+*/
+typedef struct ACK_TestParamsAuxUS_Get ACK_TestParamsAuxUS_Get_t;
+
+/** Message ID for CMD_TestParamsFE_Request */
+#define CMD_TESTPARAMSFE_REQUEST 0x0849
+
+/**
+   This message is used to trigger retrieval of the far-end PMD Test Parameters
+   Hlog, SNR and QLN via the EOC channel during Showtime. If StartIndex or
+   EndIndex do not contain values in a valid range then no autonomous message
+   will be sent by the firmware. Once the retrieval process is started, it can
+   also be aborted with this message via the control parameter. The status of
+   the parameter retrieval process can be polled via the CMD_TestParamsFE_Poll
+   message. Once the parameters are retrieved, they are provided with the
+   EVT_PMD_TestParamsGet message.
+*/
+typedef struct CMD_TestParamsFE_Request CMD_TestParamsFE_Request_t;
+
+/** Message ID for ACK_TestParamsFE_Request */
+#define ACK_TESTPARAMSFE_REQUEST 0x0849
+
+/**
+   This is the acknowledgement for CMD_TestParamsFE_Request.
+*/
+typedef struct ACK_TestParamsFE_Request ACK_TestParamsFE_Request_t;
+
+/** Message ID for CMD_TestParamsFE_Poll */
+#define CMD_TESTPARAMSFE_POLL 0x0809
+
+/**
+   This message polls the status of the far end parameter retrieval process.
+*/
+typedef struct CMD_TestParamsFE_Poll CMD_TestParamsFE_Poll_t;
+
+/** Message ID for ACK_TestParamsFE_Poll */
+#define ACK_TESTPARAMSFE_POLL 0x0809
+
+/**
+   This is the acknowledgement for CMD_TestParamsFE_Poll.
+*/
+typedef struct ACK_TestParamsFE_Poll ACK_TestParamsFE_Poll_t;
+
+/** Message ID for EVT_PMD_TestParamsGet */
+#define EVT_PMD_TESTPARAMSGET 0x5803
+
+/**
+   This event message provides the far-end data after the far end data retrieval
+   process. This message is a result of the CMD_TestParamsFE_Request message.
+*/
+typedef struct EVT_PMD_TestParamsGet EVT_PMD_TestParamsGet_t;
+
+/** Message ID for CMD_ClearEOC_Configure */
+#define CMD_CLEAREOC_CONFIGURE 0x0A49
+
+/**
+   The message is used to configure the autonomous messaging related to Clear
+   EOC transmission.
+*/
+typedef struct CMD_ClearEOC_Configure CMD_ClearEOC_Configure_t;
+
+/** Message ID for ACK_ClearEOC_Configure */
+#define ACK_CLEAREOC_CONFIGURE 0x0A49
+
+/**
+   This is the acknowledgement for CMD_ClearEOC_Configure.
+*/
+typedef struct ACK_ClearEOC_Configure ACK_ClearEOC_Configure_t;
+
+/** Message ID for CMD_ClearEOC_TxTrigger */
+#define CMD_CLEAREOC_TXTRIGGER 0x0949
+
+/**
+   The message is used to trigger the transmission of  Clear EOC messages that
+   were placed into the Clear EOC transmit buffer before with
+   CMD_ClearEOC_Write.
+*/
+typedef struct CMD_ClearEOC_TxTrigger CMD_ClearEOC_TxTrigger_t;
+
+/** Message ID for ACK_ClearEOC_TxTrigger */
+#define ACK_CLEAREOC_TXTRIGGER 0x0949
+
+/**
+   This is the acknowledgement for CMD_ClearEOC_TxTrigger.
+*/
+typedef struct ACK_ClearEOC_TxTrigger ACK_ClearEOC_TxTrigger_t;
+
+/** Message ID for CMD_ClearEOC_Write */
+#define CMD_CLEAREOC_WRITE 0x5143
+
+/**
+   This message is used to write data to the ClearEOC write buffer of type
+   VRX_ClearEOC_t. When the buffer is filled, the transmission is started
+   applying CMD_ClearEOC_TxTrigger. If the message to transmit is longer than
+   the mailbox size, a sequence of writes to the ClearEOC buffer has to be done
+   before the transmission is started with CMD_ClearEOC_TxTrigger. When
+   autonomous TX status messaging is activated via CMD_ClearEOC_Configure, then
+   the finished transmission is indicated by EVT_ClearEOCStatusGet.
+*/
+typedef struct CMD_ClearEOC_Write CMD_ClearEOC_Write_t;
+
+/** Message ID for ACK_ClearEOC_Write */
+#define ACK_CLEAREOC_WRITE 0x5143
+
+/**
+   This message is the acknowledgement for CMD_ClearEOC_Write.
+*/
+typedef struct ACK_ClearEOC_Write ACK_ClearEOC_Write_t;
+
+/** Message ID for CMD_ClearEOC_Read */
+#define CMD_CLEAREOC_READ 0x5203
+
+/**
+   This message is used to read data from the ClearEOC buffer of type
+   VRX_ClearEOC_t. The length of the actual Clear EOC message can be found in
+   the buffer. Please refer to VRX_ClearEOC_t. The availability of data can
+   either be checked via CMD_ClearEOCStatusGet in polling mode or it can be
+   reported by an autonomous EVT_ClearEOCStatusGet message when data is received
+   (to be enabled using CMD_ClearEOC_Configure).
+*/
+typedef struct CMD_ClearEOC_Read CMD_ClearEOC_Read_t;
+
+/** Message ID for ACK_ClearEOC_Read */
+#define ACK_CLEAREOC_READ 0x5203
+
+/**
+   This message is the acknowledgement to CMD_ClearEOC_Read.
+*/
+typedef struct ACK_ClearEOC_Read ACK_ClearEOC_Read_t;
+
+/** Message ID for EVT_ClearEOC_Read */
+#define EVT_CLEAREOC_READ 0x5203
+
+/**
+   This message is an autonomous message that is generated when ClearEOC data
+   was received and autonomous Clear EOC data messaging has been activated via
+   CMD_ClearEOC_Configure. If the ClearEOC data does not fit in one message,
+   then a sequence of messages is generated. The ClearEOC buffer is of type
+   VRX_ClearEOC_t.
+*/
+typedef struct EVT_ClearEOC_Read EVT_ClearEOC_Read_t;
+
+/** Message ID for CMD_ClearEOCStatusGet */
+#define CMD_CLEAREOCSTATUSGET 0x0B09
+
+/**
+   This message is used to retrieve the status of the clear eoc data
+   transmission.
+*/
+typedef struct CMD_ClearEOCStatusGet CMD_ClearEOCStatusGet_t;
+
+/** Message ID for ACK_ClearEOCStatusGet */
+#define ACK_CLEAREOCSTATUSGET 0x0B09
+
+/**
+   This is the acknowledgement for CMD_ClearEOCStatusGet.
+*/
+typedef struct ACK_ClearEOCStatusGet ACK_ClearEOCStatusGet_t;
+
+/** Message ID for EVT_ClearEOCStatusGet */
+#define EVT_CLEAREOCSTATUSGET 0x0B09
+
+/**
+   This autonomous message reports the Clear EOC status. It is sent only if the
+   "Autonomous Status Message Control" was enabled for TX and/or RX direction
+   with CMD_ClearEOC_Configure. If TX direction is enabled, the message is
+   generated when a TX transmission is finished or failed. If RX direction is
+   enabled, the message is generated when the RX status transitions from "Idle"
+   to "Data Available" for retrieval by the host.
+*/
+typedef struct EVT_ClearEOCStatusGet EVT_ClearEOCStatusGet_t;
+
+/** Message ID for CMD_ClearEOCStatusSet */
+#define CMD_CLEAREOCSTATUSSET 0x0B49
+
+/**
+   The message is used to reset the transmit or receive status of the clear eoc
+   data transmission to IDLE (for defined states see also
+   CMD_ClearEOCStatusGet). See the description on the Clear EOC handling on Page
+   540 for when it has to be applied. Transmit and receive status are
+   distinguished by the Index parameter.
+*/
+typedef struct CMD_ClearEOCStatusSet CMD_ClearEOCStatusSet_t;
+
+/** Message ID for ACK_ClearEOCStatusSet */
+#define ACK_CLEAREOCSTATUSSET 0x0B49
+
+/**
+   This is the acknowledgement for CMD_ClearEOCStatusSet.
+*/
+typedef struct ACK_ClearEOCStatusSet ACK_ClearEOCStatusSet_t;
+
+/** Message ID for CMD_OH_OptionsSet */
+#define CMD_OH_OPTIONSSET 0x1945
+
+/**
+   Configuration of options for the overhead handling.
+*/
+typedef struct CMD_OH_OptionsSet CMD_OH_OptionsSet_t;
+
+/** Message ID for ACK_OH_OptionsSet */
+#define ACK_OH_OPTIONSSET 0x1945
+
+/**
+   Acknowledgement for CMD_OH_OptionsSet.
+*/
+typedef struct ACK_OH_OptionsSet ACK_OH_OptionsSet_t;
+
+/** Message ID for CMD_OH_StatsGet */
+#define CMD_OH_STATSGET 0x0F03
+
+/**
+   Requests OH polling statistic information.
+*/
+typedef struct CMD_OH_StatsGet CMD_OH_StatsGet_t;
+
+/** Message ID for ACK_OH_StatsGet */
+#define ACK_OH_STATSGET 0x0F03
+
+/**
+   Reports the OH polling statistics as requested by CMD_OH_StatsGet.
+*/
+typedef struct ACK_OH_StatsGet ACK_OH_StatsGet_t;
+
+/** Message ID for CMD_OLR_Control */
+#define CMD_OLR_CONTROL 0x0F45
+
+/**
+   Enables/Disables support for OLR events (Bitswaps, SRA, SOS, ROC).An OLR
+   transition is always initiated by the receiving PMD, so the CPE requests the
+   OLR event for downstream direction.
+*/
+typedef struct CMD_OLR_Control CMD_OLR_Control_t;
+
+/** Message ID for ACK_OLR_Control */
+#define ACK_OLR_CONTROL 0x0F45
+
+/**
+   Acknowledgement for CMD_OLR_Control.
+*/
+typedef struct ACK_OLR_Control ACK_OLR_Control_t;
+
+/** Message ID for CMD_OLR_US_StatsGet */
+#define CMD_OLR_US_STATSGET 0x5F03
+
+/**
+   Requests the OLR status information on bit swaps, DRR, SRA and SOS events for
+   the upstream direction.
+*/
+typedef struct CMD_OLR_US_StatsGet CMD_OLR_US_StatsGet_t;
+
+/** Message ID for ACK_OLR_US_StatsGet */
+#define ACK_OLR_US_STATSGET 0x5F03
+
+/**
+   Reports the OLR status information for the upstream direction as requested by
+   CMD_OLR_US_StatsGet.
+*/
+typedef struct ACK_OLR_US_StatsGet ACK_OLR_US_StatsGet_t;
+
+/** Message ID for CMD_OLR_DS_StatsGet */
+#define CMD_OLR_DS_STATSGET 0x6003
+
+/**
+   Requests the OLR status information on bit swaps, DRR, SRA and SOS events for
+   the downstream direction.
+*/
+typedef struct CMD_OLR_DS_StatsGet CMD_OLR_DS_StatsGet_t;
+
+/** Message ID for ACK_OLR_DS_StatsGet */
+#define ACK_OLR_DS_STATSGET 0x6003
+
+/**
+   Reports the OLR status information for the downstream direction as requested
+   by CMD_OLR_DS_StatsGet.
+*/
+typedef struct ACK_OLR_DS_StatsGet ACK_OLR_DS_StatsGet_t;
+
+/** Message ID for CMD_RA_ModeDS_Get */
+#define CMD_RA_MODEDS_GET 0xD903
+
+/**
+   Requests the actual active downstream RA mode (ACT-RA-MODEds, Section
+   7.5.1.33.1 of G.997.1).
+*/
+typedef struct CMD_RA_ModeDS_Get CMD_RA_ModeDS_Get_t;
+
+/** Message ID for ACK_RA_ModeDS_Get */
+#define ACK_RA_MODEDS_GET 0xD903
+
+/**
+   Reports the actual active downstream RA mode (ACT-RA-MODEds) as requested by
+   CMD_RA_ModeDS_Get.
+*/
+typedef struct ACK_RA_ModeDS_Get ACK_RA_ModeDS_Get_t;
+
+/** Message ID for CMD_RA_ModeUS_Get */
+#define CMD_RA_MODEUS_GET 0xDB03
+
+/**
+   Requests the actual active upstream RA mode (ACT-RA-MODEus, Section
+   7.5.1.33.2 of G.997.1).
+*/
+typedef struct CMD_RA_ModeUS_Get CMD_RA_ModeUS_Get_t;
+
+/** Message ID for ACK_RA_ModeUS_Get */
+#define ACK_RA_MODEUS_GET 0xDB03
+
+/**
+   Reports the actual active upstream RA mode (ACT-RA-MODEus) as requested by
+   CMD_RA_ModeUS_Get.
+*/
+typedef struct ACK_RA_ModeUS_Get ACK_RA_ModeUS_Get_t;
+
+/** Message ID for EVT_OLR_US_EventGet */
+#define EVT_OLR_US_EVENTGET 0x0307
+
+/**
+   Autonomous message indicating a successful upstream OLR event (SRA or SOS).
+*/
+typedef struct EVT_OLR_US_EventGet EVT_OLR_US_EventGet_t;
+
+/** Message ID for EVT_OLR_DS_EventGet */
+#define EVT_OLR_DS_EVENTGET 0x0407
+
+/**
+   Autonomous message indicating a successful downstream OLR event (SRA or SOS).
+*/
+typedef struct EVT_OLR_DS_EventGet EVT_OLR_DS_EventGet_t;
+
+/** Message ID for CMD_OLR_US_EventConfigure */
+#define CMD_OLR_US_EVENTCONFIGURE 0x0F49
+
+/**
+   Enables/Disables the generation of EVENT messages (EVT) for specific upstream
+   OLR events. If the corresponding Enable bit for an OLR event is set, then the
+   modem firmware will send an autonomous message EVT_OLR_US_EventGet if the OLR
+   event happened in the last 1-second interval.
+*/
+typedef struct CMD_OLR_US_EventConfigure CMD_OLR_US_EventConfigure_t;
+
+/** Message ID for ACK_OLR_US_EventConfigure */
+#define ACK_OLR_US_EVENTCONFIGURE 0x0F49
+
+/**
+   Acknoledgement for CMD_OLR_US_EventConfigure.
+*/
+typedef struct ACK_OLR_US_EventConfigure ACK_OLR_US_EventConfigure_t;
+
+/** Message ID for CMD_OLR_DS_EventConfigure */
+#define CMD_OLR_DS_EVENTCONFIGURE 0x1049
+
+/**
+   Enables/Disables the generation of EVENT messages (EVT) for specific
+   downstream OLR events. If the corresponding Enable bit for an OLR event is
+   set, then the modem firmware will send an autonomous message
+   EVT_OLR_DS_EventGet if the OLR event happened in the last 1-second interval.
+*/
+typedef struct CMD_OLR_DS_EventConfigure CMD_OLR_DS_EventConfigure_t;
+
+/** Message ID for ACK_OLR_DS_EventConfigure */
+#define ACK_OLR_DS_EVENTCONFIGURE 0x1049
+
+/**
+   Acknoledgement for CMD_OLR_DS_EventConfigure.
+*/
+typedef struct ACK_OLR_DS_EventConfigure ACK_OLR_DS_EventConfigure_t;
+
+/** Message ID for CMD_RTX_Control */
+#define CMD_RTX_CONTROL 0x5048
+
+/**
+   Configures a link for retransmission of downstream data. For using the RTX
+   function, this message has to be sent.
+*/
+typedef struct CMD_RTX_Control CMD_RTX_Control_t;
+
+/** Message ID for ACK_RTX_Control */
+#define ACK_RTX_CONTROL 0x5048
+
+/**
+   Acknowledgement for CMD_RTX_Control.
+*/
+typedef struct ACK_RTX_Control ACK_RTX_Control_t;
+
+/** Message ID for CMD_RTX_BearerChsDS_Get */
+#define CMD_RTX_BEARERCHSDS_GET 0x0206
+
+/**
+   Requests RTX specific status information for the downstream bearer channels
+   if G.INP retransmission is used.
+*/
+typedef struct CMD_RTX_BearerChsDS_Get CMD_RTX_BearerChsDS_Get_t;
+
+/** Message ID for ACK_RTX_BearerChsDS_Get */
+#define ACK_RTX_BEARERCHSDS_GET 0x0206
+
+/**
+   Delivers status information for the downstream bearer channels when G.INP
+   retransmission is actually used.
+*/
+typedef struct ACK_RTX_BearerChsDS_Get ACK_RTX_BearerChsDS_Get_t;
+
+/** Message ID for CMD_RTX_BearerChsUS_Get */
+#define CMD_RTX_BEARERCHSUS_GET 0x0306
+
+/**
+   Requests RTX specific status information for the upstream bearer channels if
+   upstream G.INP retransmission is used.
+*/
+typedef struct CMD_RTX_BearerChsUS_Get CMD_RTX_BearerChsUS_Get_t;
+
+/** Message ID for ACK_RTX_BearerChsUS_Get */
+#define ACK_RTX_BEARERCHSUS_GET 0x0306
+
+/**
+   Delivers status information for the upstream bearer channels when upstream
+   G.INP retransmission is used.
+*/
+typedef struct ACK_RTX_BearerChsUS_Get ACK_RTX_BearerChsUS_Get_t;
+
+/** Message ID for CMD_RTX_PM_DS_Get */
+#define CMD_RTX_PM_DS_GET 0x2B0A
+
+/**
+   Requests performance monitoring counters for downstream G.INP retransmission.
+*/
+typedef struct CMD_RTX_PM_DS_Get CMD_RTX_PM_DS_Get_t;
+
+/** Message ID for ACK_RTX_PM_DS_Get */
+#define ACK_RTX_PM_DS_GET 0x2B0A
+
+/**
+   Delivers performance monitoring counters for downstream G.INP retransmission.
+*/
+typedef struct ACK_RTX_PM_DS_Get ACK_RTX_PM_DS_Get_t;
+
+/** Message ID for CMD_RTX_PM_US_Get */
+#define CMD_RTX_PM_US_GET 0x3B0A
+
+/**
+   Requests performance monitoring counters for upstream G.INP retransmission.
+*/
+typedef struct CMD_RTX_PM_US_Get CMD_RTX_PM_US_Get_t;
+
+/** Message ID for ACK_RTX_PM_US_Get */
+#define ACK_RTX_PM_US_GET 0x3B0A
+
+/**
+   Delivers performance monitoring counters for upstream G.INP retransmission.
+   They are all far-end parameters received from CO.
+*/
+typedef struct ACK_RTX_PM_US_Get ACK_RTX_PM_US_Get_t;
+
+/** Message ID for CMD_RTX_DS_StatsGet */
+#define CMD_RTX_DS_STATSGET 0x2C0A
+
+/**
+   Requests DTU counters for G.INP downstream retransmission.
+*/
+typedef struct CMD_RTX_DS_StatsGet CMD_RTX_DS_StatsGet_t;
+
+/** Message ID for ACK_RTX_DS_StatsGet */
+#define ACK_RTX_DS_STATSGET 0x2C0A
+
+/**
+   Delivers DTU counters for G.INP downstream retransmission. The counters are
+   Non-TR1 wrap-around counters, which are reset at reboot only.
+*/
+typedef struct ACK_RTX_DS_StatsGet ACK_RTX_DS_StatsGet_t;
+
+/** Message ID for CMD_RTX_US_StatsGet */
+#define CMD_RTX_US_STATSGET 0x3A0A
+
+/**
+   Requests DTU counters for G.INP upstream retransmission, which is defined for
+   VDSL only.
+*/
+typedef struct CMD_RTX_US_StatsGet CMD_RTX_US_StatsGet_t;
+
+/** Message ID for ACK_RTX_US_StatsGet */
+#define ACK_RTX_US_STATSGET 0x3A0A
+
+/**
+   Delivers DTU counters for G.INP upstream retransmission. The counters are
+   Non-TR1 wrap-around counters, which are reset at reboot only.
+*/
+typedef struct ACK_RTX_US_StatsGet ACK_RTX_US_StatsGet_t;
+
+/** Message ID for CMD_RTX_StatusGet */
+#define CMD_RTX_STATUSGET 0xE503
+
+/**
+   Requests the actually used G.INP retransmission status.
+*/
+typedef struct CMD_RTX_StatusGet CMD_RTX_StatusGet_t;
+
+/** Message ID for ACK_RTX_StatusGet */
+#define ACK_RTX_STATUSGET 0xE503
+
+/**
+   Provides the actually used G.INP retransmission status.
+*/
+typedef struct ACK_RTX_StatusGet ACK_RTX_StatusGet_t;
+
+/** Message ID for CMD_RTX_US_FrameDataGet */
+#define CMD_RTX_US_FRAMEDATAGET 0xED03
+
+/**
+   Requests upstream G.INP retransmission specific framing parameters and other
+   status parameters. They are always associated with bearer channel 0.
+*/
+typedef struct CMD_RTX_US_FrameDataGet CMD_RTX_US_FrameDataGet_t;
+
+/** Message ID for ACK_RTX_US_FrameDataGet */
+#define ACK_RTX_US_FRAMEDATAGET 0xED03
+
+/**
+   Delivers upstream retransmission specific framing parameters and other status
+   parameters, as requested by CMD_RTX_US_FrameDataGet. They are always
+   associated with bearer channel 0.In addition, the usual framing parameters
+   are to be retrieved with CMD_FrameDataExt2US_Get.
+*/
+typedef struct ACK_RTX_US_FrameDataGet ACK_RTX_US_FrameDataGet_t;
+
+/** Message ID for CMD_RTX_US_Roundtrip_Get */
+#define CMD_RTX_US_ROUNDTRIP_GET 0xEF03
+
+/**
+   Requests the G.INP upstream retransmission measured roundtrip.
+*/
+typedef struct CMD_RTX_US_Roundtrip_Get CMD_RTX_US_Roundtrip_Get_t;
+
+/** Message ID for ACK_RTX_US_Roundtrip_Get */
+#define ACK_RTX_US_ROUNDTRIP_GET 0xEF03
+
+/**
+   Provides the G.INP upstream retransmission measured roundtrip delay. For
+   measuring the roundtrip, following difference is built when a correct RRC
+   codeword has been received: AbsoluteDTUCount of transmitter for next possible
+   DTU transmission minus AbsoluteDTUCount as received in RRC codeword.
+*/
+typedef struct ACK_RTX_US_Roundtrip_Get ACK_RTX_US_Roundtrip_Get_t;
+
+/** Message ID for CMD_DSM_Control */
+#define CMD_DSM_CONTROL 0x5248
+
+/**
+   Enables/Disables support for full vectoring (G.993.5) and full vector-
+   friendly operation (G.993.2 Annex Y). In case of ADSL, this only means the
+   indication of the (VDSL) vectoring capabilities during G.Handshake.
+*/
+typedef struct CMD_DSM_Control CMD_DSM_Control_t;
+
+/** Message ID for ACK_DSM_Control */
+#define ACK_DSM_CONTROL 0x5248
+
+/**
+   Acknowledgement to CMD_DSM_Control.
+*/
+typedef struct ACK_DSM_Control ACK_DSM_Control_t;
+
+/** Message ID for EVT_DSM_ErrorVectorReady */
+#define EVT_DSM_ERRORVECTORREADY 0x1109
+
+/**
+   This autononmous message indicates that new downstream DSM error vector data
+   were written by the DSL FW into the SDRAM. Generation of this EVT message is
+   enabled/disabled together with the G.993.5 vectoring functionality itself, by
+   means of CMD_DSM_Control, parameter "Vector".
+*/
+typedef struct EVT_DSM_ErrorVectorReady EVT_DSM_ErrorVectorReady_t;
+
+/** Message ID for CMD_DSM_StatsGet */
+#define CMD_DSM_STATSGET 0x370A
+
+/**
+   Requests vectoring debug counter values.
+*/
+typedef struct CMD_DSM_StatsGet CMD_DSM_StatsGet_t;
+
+/** Message ID for ACK_DSM_StatsGet */
+#define ACK_DSM_STATSGET 0x370A
+
+/**
+   Delivers vectoring debug counters.
+*/
+typedef struct ACK_DSM_StatsGet ACK_DSM_StatsGet_t;
+
+/**
+   Requests information about the bit-allocation per subcarrier in VDSL mode.
+   The values for all subcarriers of both directions can be retrieved. (For ADSL
+   use CMD_BAT_DS_Get and CMD_BAT_US_Get).
+*/
+struct CMD_BAT_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the bit-allocation per tone for the chosen range of
+   subcarriers.(Section 7.5.1.29.1-2 of G.997.1)
+*/
+struct ACK_BAT_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the Gains per subcarrier. The values for all
+   subcarriers of both directions can be retrieved.(For ADSL use
+   CMD_GainTableDS_Get and CMD_GainTableUS_Get).
+*/
+struct CMD_GainTableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers.(Section 7.5.1.29.3-4 of G.997.1)
+*/
+struct ACK_GainTableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message requests information about the SNR per subcarrier with virtual
+   noise for the near-end side , which means for downstream direction at the
+   CPE. It is the hosts responsibility to select the tone indices
+   accordingly.See also Table 20 "How to Retrieve Test Parameter Data" on Page
+   496.
+*/
+struct CMD_SNR_NE_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the SNR per subcarrier with virtual noise for the
+   near-end side, meaning for downstream direction.
+*/
+struct ACK_SNR_NE_TableEntriesGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR */
+   DSL_uint16_t SNRps[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR */
+   DSL_uint16_t SNRps[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the downstream bit-allocation per subcarrier in
+   ADSL mode.
+*/
+struct CMD_BAT_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the downstream bit-allocation per tone for the
+   chosen range of subcarriers.(Section 7.5.1.29.1 of G.997.1)
+*/
+struct ACK_BAT_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the upstream bit-allocation per subcarrier in ADSL
+   mode.
+*/
+struct CMD_BAT_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the upstream bit-allocation per tone for the chosen
+   range of subcarriers.(Section 7.5.1.29.2 of G.997.1)
+*/
+struct ACK_BAT_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[32];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Bit Allocation */
+   VRX_BAT_TableEntry_t BAT[32];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the Gains per subcarrier for the downstream
+   direction.
+*/
+struct CMD_GainTableDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers for the downstream direction.(Section 7.5.1.29.3 of G.997.1) as
+   requested by CMD_GainTableDS_Get.
+*/
+struct ACK_GainTableDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the Gains per subcarrier for the upstream
+   direction.
+*/
+struct CMD_GainTableUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the Gain-per-tone for the chosen range of
+   subcarriers for the upstream direction.(Section 7.5.1.29.4 of G.997.1)
+*/
+struct ACK_GainTableUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Gains */
+   DSL_uint16_t Gains[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the Excess Margin Reduction needed for the fine
+   gain calculation at the ATU_R.(See also ACK_GainTableDS_Get).
+*/
+struct CMD_ADSL_ExMarginReductionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the Excess Margin Reduction for the downstream
+   direction.
+*/
+struct ACK_ADSL_ExMarginReductionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Excess Margin Reduction  */
+   DSL_uint16_t eSnrmReduction;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Excess Margin Reduction  */
+   DSL_uint16_t eSnrmReduction;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the downstream HLOG information per subcarrier
+   group (Section 7.5.1.26.6 of G.997.1).During STEADY_STATE, the command can be
+   used in VDSL to request near-end data only (CPE). For the far-end HLOG to be
+   provided via the EOC channel CMD_TestParamsFE_Request must be used. In ADSL,
+   the command can be applied for near-end as well as far-end parameters.During
+   loop diagnostic mode, the command shall be used to request both near-end and
+   far-end data.
+*/
+struct CMD_HlogDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the downstream HLOG per subcarrier group for the
+   chosen range. (Section 7.5.1.26.6 of G.997.1)
+*/
+struct ACK_HlogDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLOG per SG: HLOGpsds */
+   DSL_uint16_t HLOGpsds[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLOG per SG: HLOGpsds */
+   DSL_uint16_t HLOGpsds[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the upstream HLOG information per subcarrier group
+   (Section 7.5.1.26.11 of G.997.1).
+*/
+struct CMD_HlogUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the upstream HLOG per subcarrier group for the
+   chosen range. (Section 7.5.1.26.11 of G.997.1)
+*/
+struct ACK_HlogUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLOG per SG: HLOGpsus */
+   DSL_uint16_t HLOGpsus[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLOG per SG: HLOGpsus */
+   DSL_uint16_t HLOGpsus[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the downstream HLIN information per subcarrier
+   group. (Section 7.5.1.26.3 of G.997.1).The HLIN data are available during
+   loop diagnostic mode only.
+*/
+struct CMD_HlinDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the downstream HLIN per subcarrier group for the
+   chosen range. (Section 7.5.1.26.3 of G.997.1)
+*/
+struct ACK_HlinDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN per SG: HLINpsds */
+   VRX_HLIN_t HLINpsds[64];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN per SG: HLINpsds */
+   VRX_HLIN_t HLINpsds[64];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the upstream HLIN information per subcarrier
+   group. (Section 7.5.1.26.9 of G.997.1).The HLIN data are available in loop
+   diagnostic mode only.
+*/
+struct CMD_HlinUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the upstream HLIN per subcarrier group for the
+   chosen range. (Section 7.5.1.26.9 of G.997.1)
+*/
+struct ACK_HlinUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN per SG: HLINpsus */
+   VRX_HLIN_t HLINpsus[64];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN per SG: HLINpsus */
+   VRX_HLIN_t HLINpsus[64];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the downstream QLN information (QLNpsds) per
+   subcarrier group (Section 7.5.1.27.3 of G.997.1).During STEADY_STATE, the
+   command can be used in VDSL to request near-end data only (CPE).
+*/
+struct CMD_QLN_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the QLN per subcarrier group for the chosen range.
+   (Section 7.5.1.27.3 of G.997.1)
+*/
+struct ACK_QLN_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** QLN per SG: QLNpsds */
+   VRX_QLN_NE_t QLNds[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** QLN per SG: QLNpsds */
+   VRX_QLN_NE_t QLNds[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the upstream QLN (QLNpsus) per subcarrier group.
+   (Section 7.5.1.27.6 of G.997.1).
+*/
+struct CMD_QLN_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the QLN per subcarrier group for the chosen range.
+   (Section 7.5.1.27.6 of G.997.1)
+*/
+struct ACK_QLN_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** QLN per SG: QLNpsus */
+   VRX_QLN_NE_t QLNus[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** QLN per SG: QLNpsus */
+   VRX_QLN_NE_t QLNus[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the downstream SNR per subcarrier group in VDSL or
+   the SNR per subcarrier in ADSL, both without considering virtual noise
+   (Section 7.5.1.28.3 of G.997.1).
+*/
+struct CMD_SNR_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the SNR per subcarrier (ADSL) or per subcarrier
+   group (VDSL) for the chosen range without considering virtual noise. (Section
+   7.5.1.28.3 of G.997.1)
+*/
+struct ACK_SNR_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR per SG: SNRpsds */
+   VRX_SNR_t SNRpsds[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR per SG: SNRpsds */
+   VRX_SNR_t SNRpsds[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests information about the upstream SNR per subcarrier group (Section
+   7.5.1.28.6 of G.997.1).
+*/
+struct CMD_SNR_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns information about the upstream SNR per subcarrier group for the
+   chosen range. (Section 7.5.1.28.6 of G.997.1)
+*/
+struct ACK_SNR_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR per SG: SNRpsus */
+   VRX_SNR_t SNRpsus[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SNR per SG: SNRpsus */
+   VRX_SNR_t SNRpsus[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests test parameter related information for the downstream direction: The
+   HLIN scaling factor (HLINSCds), the subcarrier group size "G" and the
+   measurement times for HLOGpsds, QLNpsds, SNRpsds.(Sections 7.5.1.26.1/2/4/5,
+   7.5.1.27.1/2 and 7.5.1.28.1/2 of G.997.1)
+*/
+struct CMD_TestParamsAuxDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the test-parameter related information as requested by
+   CMD_TestParamsAuxDS_Get: The HLIN scaling factor (HLINSCds), the subcarrier
+   group size "G" and the measurement times for HLOGpsds, QLNpsds,
+   SNRpsds.(Sections 7.5.1.26.1/2/4/5, 7.5.1.27.1/2 and 7.5.1.28.1/2 of G.997.1)
+*/
+struct ACK_TestParamsAuxDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN Scaling Factor "HLINSCds" */
+   DSL_uint16_t HLINSC;
+   /** HLIN Subcarrier Group Size DS "HLINGds" */
+   DSL_uint16_t HLING;
+   /** HLOG Measurement Time "HLOGMTds" */
+   DSL_uint16_t HLOGMT;
+   /** HLOG Subcarrier Group Size DS "HLOGGds" */
+   DSL_uint16_t HLOGG;
+   /** QLN Measurment Time "QLNMTds" */
+   DSL_uint16_t QLNMT;
+   /** QLN Subcarrier Group Size DS "QLNGds" */
+   DSL_uint16_t QLNG;
+   /** SNR Measurement Time "SNRMTds" */
+   DSL_uint16_t SNRMT;
+   /** SNR Subcarrier Group Size DS "SNRGds" */
+   DSL_uint16_t SNRG;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN Scaling Factor "HLINSCds" */
+   DSL_uint16_t HLINSC;
+   /** HLIN Subcarrier Group Size DS "HLINGds" */
+   DSL_uint16_t HLING;
+   /** HLOG Measurement Time "HLOGMTds" */
+   DSL_uint16_t HLOGMT;
+   /** HLOG Subcarrier Group Size DS "HLOGGds" */
+   DSL_uint16_t HLOGG;
+   /** QLN Measurment Time "QLNMTds" */
+   DSL_uint16_t QLNMT;
+   /** QLN Subcarrier Group Size DS "QLNGds" */
+   DSL_uint16_t QLNG;
+   /** SNR Measurement Time "SNRMTds" */
+   DSL_uint16_t SNRMT;
+   /** SNR Subcarrier Group Size DS "SNRGds" */
+   DSL_uint16_t SNRG;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests test parameter related information for the upstream direction: The
+   HLIN scaling factor (HLINSCus), the subcarrier group size "G" and the
+   measurement times for HLOGpsus, QLNpsus, SNRpsus.For older VDSL FW versions
+   from w.6.x.y.z.a to 5.8.0.x.y.z: During STEADY_STATE, the command can be used
+   only to retrieve the "group size" parameters. To get the measurement time
+   parameters (via the EOC channel) the message CMD_TestParamsFE_Request must be
+   applied instead.(Sections 7.5.1.26.7/8/10/11, 7.5.1.27.4/5 and 7.5.1.28.4/5
+   of G.997.1)For older VDSL FW versions from w.6.x.y.z.a to 5.8.0.x.y.z: During
+   STEADY_STATE, the command can be used only to retrieve the "group size"
+   parameters. To get the measurement time parameters (via the EOC channel) the
+   message CMD_TestParamsFE_Request must be applied instead.The test parameters
+   can be requested during loop diagnostic mode (VDSL, ADSL) and in ADSL also
+   during STEADY_STATE.For older VDSL FW versions from w.6.x.y.z.a to
+   5.8.0.x.y.z: During STEADY_STATE, the command can be used only to retrieve
+   the "group size" parameters. To get the measurement time parameters (via the
+   EOC channel) the message CMD_TestParamsFE_Request must be applied instead.
+*/
+struct CMD_TestParamsAuxUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the test-parameter related information as requested by
+   CMD_TestParamsAuxUS_Get: The HLIN scaling factor (HLINSCus), the subcarrier
+   group size "G" and the measurement times for HLOGpsus, QLNpsus, SNRpsus.
+*/
+struct ACK_TestParamsAuxUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN Scaling Factor "HLINSCus" */
+   DSL_uint16_t HLINSC;
+   /** HLIN Subcarrier Group Size US "HLINGus" */
+   DSL_uint16_t HLING;
+   /** HLOG Measurement Time "HLOGMTus" */
+   DSL_uint16_t HLOGMT;
+   /** HLOG Subcarrier Group Size US "HLOGGus" */
+   DSL_uint16_t HLOGG;
+   /** QLN Measurment Time "QLNMTus" */
+   DSL_uint16_t QLNMT;
+   /** QLN Subcarrier Group Size US "QLNGus" */
+   DSL_uint16_t QLNG;
+   /** SNR Measurement Time "SNRMTus" */
+   DSL_uint16_t SNRMT;
+   /** SNR Subcarrier Group Size US "SNRGus" */
+   DSL_uint16_t SNRG;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** HLIN Scaling Factor "HLINSCus" */
+   DSL_uint16_t HLINSC;
+   /** HLIN Subcarrier Group Size US "HLINGus" */
+   DSL_uint16_t HLING;
+   /** HLOG Measurement Time "HLOGMTus" */
+   DSL_uint16_t HLOGMT;
+   /** HLOG Subcarrier Group Size US "HLOGGus" */
+   DSL_uint16_t HLOGG;
+   /** QLN Measurment Time "QLNMTus" */
+   DSL_uint16_t QLNMT;
+   /** QLN Subcarrier Group Size US "QLNGus" */
+   DSL_uint16_t QLNG;
+   /** SNR Measurement Time "SNRMTus" */
+   DSL_uint16_t SNRMT;
+   /** SNR Subcarrier Group Size US "SNRGus" */
+   DSL_uint16_t SNRG;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is used to trigger retrieval of the far-end PMD Test Parameters
+   Hlog, SNR and QLN via the EOC channel during Showtime. If StartIndex or
+   EndIndex do not contain values in a valid range then no autonomous message
+   will be sent by the firmware. Once the retrieval process is started, it can
+   also be aborted with this message via the control parameter. The status of
+   the parameter retrieval process can be polled via the CMD_TestParamsFE_Poll
+   message. Once the parameters are retrieved, they are provided with the
+   EVT_PMD_TestParamsGet message.
+*/
+struct CMD_TestParamsFE_Request
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-end Retrieval Control */
+   DSL_uint16_t Control;
+   /** Subcarrier Group Start Index */
+   DSL_uint16_t StartIndex;
+   /** Subcarrier Group End Index */
+   DSL_uint16_t EndIndex;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-end Retrieval Control */
+   DSL_uint16_t Control;
+   /** Subcarrier Group Start Index */
+   DSL_uint16_t StartIndex;
+   /** Subcarrier Group End Index */
+   DSL_uint16_t EndIndex;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_TestParamsFE_Request.
+*/
+struct ACK_TestParamsFE_Request
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message polls the status of the far end parameter retrieval process.
+*/
+struct CMD_TestParamsFE_Poll
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_TestParamsFE_Poll.
+*/
+struct ACK_TestParamsFE_Poll
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-end retrieval status */
+   DSL_uint16_t Status;
+   /** Reserved1 */
+   DSL_uint16_t Res1;
+   /** Reserved2 */
+   DSL_uint16_t Res2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-end retrieval status */
+   DSL_uint16_t Status;
+   /** Reserved1 */
+   DSL_uint16_t Res1;
+   /** Reserved2 */
+   DSL_uint16_t Res2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This event message provides the far-end data after the far end data retrieval
+   process. This message is a result of the CMD_TestParamsFE_Request message.
+*/
+struct EVT_PMD_TestParamsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved1 */
+   DSL_uint16_t Res1;
+   /** Subcarrier Group Start Index */
+   DSL_uint16_t StartIndex;
+   /** Subcarrier Group End Index */
+   DSL_uint16_t EndIndex;
+   /** HLOG Measurement Time HLOGMT */
+   DSL_uint16_t hlogTime;
+   /** SNR Measurement Time SNRMT */
+   DSL_uint16_t snrTime;
+   /** QLN Measurment Time QLNMT */
+   DSL_uint16_t qlnTime;
+   /** Testparameter Result */
+   VRX_TestParam_t TestPar[60];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved1 */
+   DSL_uint16_t Res1;
+   /** Subcarrier Group Start Index */
+   DSL_uint16_t StartIndex;
+   /** Subcarrier Group End Index */
+   DSL_uint16_t EndIndex;
+   /** HLOG Measurement Time HLOGMT */
+   DSL_uint16_t hlogTime;
+   /** SNR Measurement Time SNRMT */
+   DSL_uint16_t snrTime;
+   /** QLN Measurment Time QLNMT */
+   DSL_uint16_t qlnTime;
+   /** Testparameter Result */
+   VRX_TestParam_t TestPar[60];
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message is used to configure the autonomous messaging related to Clear
+   EOC transmission.
+*/
+struct CMD_ClearEOC_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** RX Autonomous Clear EOC Data Message Control */
+   DSL_uint16_t RxEVTdata : 1;
+   /** RX Autonomous Status Message Control */
+   DSL_uint16_t RxEVTstatus : 1;
+   /** TX Autonomous Status Message Control */
+   DSL_uint16_t TxEVTstatus : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TX Autonomous Status Message Control */
+   DSL_uint16_t TxEVTstatus : 1;
+   /** RX Autonomous Status Message Control */
+   DSL_uint16_t RxEVTstatus : 1;
+   /** RX Autonomous Clear EOC Data Message Control */
+   DSL_uint16_t RxEVTdata : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_ClearEOC_Configure.
+*/
+struct ACK_ClearEOC_Configure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message is used to trigger the transmission of  Clear EOC messages that
+   were placed into the Clear EOC transmit buffer before with
+   CMD_ClearEOC_Write.
+*/
+struct CMD_ClearEOC_TxTrigger
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** Transmit Control Trigger */
+   DSL_uint16_t txTrigger : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Transmit Control Trigger */
+   DSL_uint16_t txTrigger : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_ClearEOC_TxTrigger.
+*/
+struct ACK_ClearEOC_TxTrigger
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is used to write data to the ClearEOC write buffer of type
+   VRX_ClearEOC_t. When the buffer is filled, the transmission is started
+   applying CMD_ClearEOC_TxTrigger. If the message to transmit is longer than
+   the mailbox size, a sequence of writes to the ClearEOC buffer has to be done
+   before the transmission is started with CMD_ClearEOC_TxTrigger. When
+   autonomous TX status messaging is activated via CMD_ClearEOC_Configure, then
+   the finished transmission is indicated by EVT_ClearEOCStatusGet.
+*/
+struct CMD_ClearEOC_Write
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is the acknowledgement for CMD_ClearEOC_Write.
+*/
+struct ACK_ClearEOC_Write
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is used to read data from the ClearEOC buffer of type
+   VRX_ClearEOC_t. The length of the actual Clear EOC message can be found in
+   the buffer. Please refer to VRX_ClearEOC_t. The availability of data can
+   either be checked via CMD_ClearEOCStatusGet in polling mode or it can be
+   reported by an autonomous EVT_ClearEOCStatusGet message when data is received
+   (to be enabled using CMD_ClearEOC_Configure).
+*/
+struct CMD_ClearEOC_Read
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is the acknowledgement to CMD_ClearEOC_Read.
+*/
+struct ACK_ClearEOC_Read
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is an autonomous message that is generated when ClearEOC data
+   was received and autonomous Clear EOC data messaging has been activated via
+   CMD_ClearEOC_Configure. If the ClearEOC data does not fit in one message,
+   then a sequence of messages is generated. The ClearEOC buffer is of type
+   VRX_ClearEOC_t.
+*/
+struct EVT_ClearEOC_Read
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Data */
+   DSL_uint16_t Data[128];
+#endif
+} __PACKED__ ;
+
+
+/**
+   This message is used to retrieve the status of the clear eoc data
+   transmission.
+*/
+struct CMD_ClearEOCStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_ClearEOCStatusGet.
+*/
+struct ACK_ClearEOCStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Transmit Status */
+   DSL_uint16_t txstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 14;
+   /** Receive Status */
+   DSL_uint16_t rxstat : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Transmit Status */
+   DSL_uint16_t txstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Receive Status */
+   DSL_uint16_t rxstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autonomous message reports the Clear EOC status. It is sent only if the
+   "Autonomous Status Message Control" was enabled for TX and/or RX direction
+   with CMD_ClearEOC_Configure. If TX direction is enabled, the message is
+   generated when a TX transmission is finished or failed. If RX direction is
+   enabled, the message is generated when the RX status transitions from "Idle"
+   to "Data Available" for retrieval by the host.
+*/
+struct EVT_ClearEOCStatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Transmit Status */
+   DSL_uint16_t txstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 14;
+   /** Receive Status */
+   DSL_uint16_t rxstat : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Transmit Status */
+   DSL_uint16_t txstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Receive Status */
+   DSL_uint16_t rxstat : 2;
+   /** Reserved */
+   DSL_uint16_t Res1 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message is used to reset the transmit or receive status of the clear eoc
+   data transmission to IDLE (for defined states see also
+   CMD_ClearEOCStatusGet). See the description on the Clear EOC handling on Page
+   540 for when it has to be applied. Transmit and receive status are
+   distinguished by the Index parameter.
+*/
+struct CMD_ClearEOCStatusSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Status */
+   DSL_uint16_t stat : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Status */
+   DSL_uint16_t stat : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This is the acknowledgement for CMD_ClearEOCStatusSet.
+*/
+struct ACK_ClearEOCStatusSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configuration of options for the overhead handling.
+*/
+struct CMD_OH_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** EOC Polling Period Scaling Factor, Bits 15 to 8 */
+   DSL_uint8_t eocPollFactor;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** EOC Polling Control Prio 2: PMD Test Parameters, Bit 4 */
+   DSL_uint16_t eocPoll2 : 1;
+   /** EOC Polling Control Prio 1: Inventory, Counters, Bit 3 */
+   DSL_uint16_t eocPoll1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** EOC Polling Control Prio 1: Inventory, Counters, Bit 3 */
+   DSL_uint16_t eocPoll1 : 1;
+   /** EOC Polling Control Prio 2: PMD Test Parameters, Bit 4 */
+   DSL_uint16_t eocPoll2 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** EOC Polling Period Scaling Factor, Bits 15 to 8 */
+   DSL_uint8_t eocPollFactor;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_OH_OptionsSet.
+*/
+struct ACK_OH_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests OH polling statistic information.
+*/
+struct CMD_OH_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the OH polling statistics as requested by CMD_OH_StatsGet.
+*/
+struct ACK_OH_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** EOC CMD TX PRIO1 Sent */
+   DSL_uint16_t eocCMD1;
+   /** EOC ACK RX PRIO1 Count */
+   DSL_uint16_t eocRSP1;
+   /** EOC CMD TX PRIO2 Sent */
+   DSL_uint16_t eocCMD2;
+   /** EOC ACK RX PRIO2 Count */
+   DSL_uint16_t eocRSP2;
+   /** EOC NACK RX PRIO1 Count  */
+   DSL_uint16_t eocNACK1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** EOC CMD TX PRIO1 Sent */
+   DSL_uint16_t eocCMD1;
+   /** EOC ACK RX PRIO1 Count */
+   DSL_uint16_t eocRSP1;
+   /** EOC CMD TX PRIO2 Sent */
+   DSL_uint16_t eocCMD2;
+   /** EOC ACK RX PRIO2 Count */
+   DSL_uint16_t eocRSP2;
+   /** EOC NACK RX PRIO1 Count  */
+   DSL_uint16_t eocNACK1;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables support for OLR events (Bitswaps, SRA, SOS, ROC).An OLR
+   transition is always initiated by the receiving PMD, so the CPE requests the
+   OLR event for downstream direction.
+*/
+struct CMD_OLR_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 4;
+   /** ROC DS */
+   DSL_uint16_t ROC_DS : 1;
+   /** ROC US */
+   DSL_uint16_t ROC_US : 1;
+   /** SOS DS */
+   DSL_uint16_t SOS_DS : 1;
+   /** SOS US */
+   DSL_uint16_t SOS_US : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** SRA Strict Rate Check */
+   DSL_uint16_t SRA_StrictCheck : 1;
+   /** RX Bitswap */
+   DSL_uint16_t RxBitswap : 1;
+   /** TX Bitswap */
+   DSL_uint16_t TxBitswap : 1;
+   /** SRA Rate Check */
+   DSL_uint16_t SRA_RateCheck : 1;
+   /** Auto-SRA DS */
+   DSL_uint16_t autoSRA_DS : 1;
+   /** Auto-SRA US */
+   DSL_uint16_t autoSRA_US : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Auto-SRA US */
+   DSL_uint16_t autoSRA_US : 1;
+   /** Auto-SRA DS */
+   DSL_uint16_t autoSRA_DS : 1;
+   /** SRA Rate Check */
+   DSL_uint16_t SRA_RateCheck : 1;
+   /** TX Bitswap */
+   DSL_uint16_t TxBitswap : 1;
+   /** RX Bitswap */
+   DSL_uint16_t RxBitswap : 1;
+   /** SRA Strict Rate Check */
+   DSL_uint16_t SRA_StrictCheck : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** SOS US */
+   DSL_uint16_t SOS_US : 1;
+   /** SOS DS */
+   DSL_uint16_t SOS_DS : 1;
+   /** ROC US */
+   DSL_uint16_t ROC_US : 1;
+   /** ROC DS */
+   DSL_uint16_t ROC_DS : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_OLR_Control.
+*/
+struct ACK_OLR_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the OLR status information on bit swaps, DRR, SRA and SOS events for
+   the upstream direction.
+*/
+struct CMD_OLR_US_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the OLR status information for the upstream direction as requested by
+   CMD_OLR_US_StatsGet.
+*/
+struct ACK_OLR_US_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** US Bit Swap Requests */
+   DSL_uint16_t BitswapReqs;
+   /** US Extended Bit Swap Requests */
+   DSL_uint16_t ExtBitswapReqs;
+   /** US Bit Swap UTC Responses */
+   DSL_uint16_t BitswapUTCs;
+   /** US "Bit Swaps Performed" Count */
+   DSL_uint16_t BitswapsDone;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved for DRR */
+   DSL_uint16_t Res1[5];
+   /** US SRA Requests */
+   DSL_uint16_t SRA_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** US SRA UTC Responses */
+   DSL_uint16_t SRA_UTCs;
+   /** US "SRA Performed" Count */
+   DSL_uint16_t SRAsDone;
+   /** Reserved */
+   DSL_uint16_t Res3;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** US Bit Swap Requests */
+   DSL_uint16_t BitswapReqs;
+   /** US Extended Bit Swap Requests */
+   DSL_uint16_t ExtBitswapReqs;
+   /** US Bit Swap UTC Responses */
+   DSL_uint16_t BitswapUTCs;
+   /** US "Bit Swaps Performed" Count */
+   DSL_uint16_t BitswapsDone;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** Reserved for DRR */
+   DSL_uint16_t Res1[5];
+   /** US SRA Requests */
+   DSL_uint16_t SRA_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** US SRA UTC Responses */
+   DSL_uint16_t SRA_UTCs;
+   /** US "SRA Performed" Count */
+   DSL_uint16_t SRAsDone;
+   /** Reserved */
+   DSL_uint16_t Res3;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the OLR status information on bit swaps, DRR, SRA and SOS events for
+   the downstream direction.
+*/
+struct CMD_OLR_DS_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the OLR status information for the downstream direction as requested
+   by CMD_OLR_DS_StatsGet.
+*/
+struct ACK_OLR_DS_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DS Bit Swap Requests */
+   DSL_uint16_t BitswapReqs;
+   /** DS Extended Bit Swap Requests */
+   DSL_uint16_t ExtBitswapReqs;
+   /** DS Bit Swap UTC Responses */
+   DSL_uint16_t BitswapUTCs;
+   /** DS "Bit Swaps Performed" Count */
+   DSL_uint16_t BitswapsDone;
+   /** DS Bitswap Timeouts */
+   DSL_uint16_t BitswapTimeOuts;
+   /** Reserved for DRR */
+   DSL_uint16_t Res0[5];
+   /** DS SRA Requests */
+   DSL_uint16_t SRA_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** DS SRA UTC Responses */
+   DSL_uint16_t SRA_UTCs;
+   /** DS "SRA Performed" Count */
+   DSL_uint16_t SRAsDone;
+   /** DS SRA Timeouts */
+   DSL_uint16_t SRA_TimeOuts;
+   /** DS SOS Requests */
+   DSL_uint16_t SOS_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** DS SOS UTC Responses */
+   DSL_uint16_t SOS_UTCs;
+   /** DS "SOS Performed" Count */
+   DSL_uint16_t SOS_Done;
+   /** DS SOS Timeouts */
+   DSL_uint16_t SOS_TimeOuts;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** DS Bit Swap Requests */
+   DSL_uint16_t BitswapReqs;
+   /** DS Extended Bit Swap Requests */
+   DSL_uint16_t ExtBitswapReqs;
+   /** DS Bit Swap UTC Responses */
+   DSL_uint16_t BitswapUTCs;
+   /** DS "Bit Swaps Performed" Count */
+   DSL_uint16_t BitswapsDone;
+   /** DS Bitswap Timeouts */
+   DSL_uint16_t BitswapTimeOuts;
+   /** Reserved for DRR */
+   DSL_uint16_t Res0[5];
+   /** DS SRA Requests */
+   DSL_uint16_t SRA_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res1;
+   /** DS SRA UTC Responses */
+   DSL_uint16_t SRA_UTCs;
+   /** DS "SRA Performed" Count */
+   DSL_uint16_t SRAsDone;
+   /** DS SRA Timeouts */
+   DSL_uint16_t SRA_TimeOuts;
+   /** DS SOS Requests */
+   DSL_uint16_t SOS_Reqs;
+   /** Reserved */
+   DSL_uint16_t Res2;
+   /** DS SOS UTC Responses */
+   DSL_uint16_t SOS_UTCs;
+   /** DS "SOS Performed" Count */
+   DSL_uint16_t SOS_Done;
+   /** DS SOS Timeouts */
+   DSL_uint16_t SOS_TimeOuts;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the actual active downstream RA mode (ACT-RA-MODEds, Section
+   7.5.1.33.1 of G.997.1).
+*/
+struct CMD_RA_ModeDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the actual active downstream RA mode (ACT-RA-MODEds) as requested by
+   CMD_RA_ModeDS_Get.
+*/
+struct ACK_RA_ModeDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RA Mode DS */
+   DSL_uint16_t actRA_mode;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RA Mode DS */
+   DSL_uint16_t actRA_mode;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the actual active upstream RA mode (ACT-RA-MODEus, Section
+   7.5.1.33.2 of G.997.1).
+*/
+struct CMD_RA_ModeUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the actual active upstream RA mode (ACT-RA-MODEus) as requested by
+   CMD_RA_ModeUS_Get.
+*/
+struct ACK_RA_ModeUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RA Mode US */
+   DSL_uint16_t actRA_mode;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** RA Mode US */
+   DSL_uint16_t actRA_mode;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Autonomous message indicating a successful upstream OLR event (SRA or SOS).
+*/
+struct EVT_OLR_US_EventGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** SRA Event */
+   DSL_uint16_t SRA_OK : 1;
+   /** SOS Event (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SOS Event (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+   /** SRA Event */
+   DSL_uint16_t SRA_OK : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Autonomous message indicating a successful downstream OLR event (SRA or SOS).
+*/
+struct EVT_OLR_DS_EventGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** SRA Event */
+   DSL_uint16_t SRA_OK : 1;
+   /** SOS Event (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SOS Event (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+   /** SRA Event */
+   DSL_uint16_t SRA_OK : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables the generation of EVENT messages (EVT) for specific upstream
+   OLR events. If the corresponding Enable bit for an OLR event is set, then the
+   modem firmware will send an autonomous message EVT_OLR_US_EventGet if the OLR
+   event happened in the last 1-second interval.
+*/
+struct CMD_OLR_US_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** SRA Event US, Bit 1 */
+   DSL_uint16_t SRA_OK : 1;
+   /** SOS Event US , Bit 0 (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SOS Event US , Bit 0 (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+   /** SRA Event US, Bit 1 */
+   DSL_uint16_t SRA_OK : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknoledgement for CMD_OLR_US_EventConfigure.
+*/
+struct ACK_OLR_US_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables the generation of EVENT messages (EVT) for specific
+   downstream OLR events. If the corresponding Enable bit for an OLR event is
+   set, then the modem firmware will send an autonomous message
+   EVT_OLR_DS_EventGet if the OLR event happened in the last 1-second interval.
+*/
+struct CMD_OLR_DS_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** SRA Event DS, Bit 1 */
+   DSL_uint16_t SRA_OK : 1;
+   /** SOS Event DS , Bit 0 (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** SOS Event DS , Bit 0 (VDSL only) */
+   DSL_uint16_t SOS_OK : 1;
+   /** SRA Event DS, Bit 1 */
+   DSL_uint16_t SRA_OK : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknoledgement for CMD_OLR_DS_EventConfigure.
+*/
+struct ACK_OLR_DS_EventConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures a link for retransmission of downstream data. For using the RTX
+   function, this message has to be sent.
+*/
+struct CMD_RTX_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** Extended Memory for Enhanced Bit Rates (Anx D support, VDSL only) */
+   DSL_uint16_t ExtMem : 1;
+   /** Force Extended Memory for Enhanced Bit Rates (VDSL only) */
+   DSL_uint16_t ExtMemForced : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** Intra DTU Interleaving US (VDSL only) */
+   DSL_uint16_t DtuInterleavingUs : 1;
+   /** Intra DTU Interleaving DS (VDSL only) */
+   DSL_uint16_t DtuInterleavingDs : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Retransmission Control */
+   DSL_uint16_t RtxMode : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Retransmission Control */
+   DSL_uint16_t RtxMode : 2;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Intra DTU Interleaving DS (VDSL only) */
+   DSL_uint16_t DtuInterleavingDs : 1;
+   /** Intra DTU Interleaving US (VDSL only) */
+   DSL_uint16_t DtuInterleavingUs : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** Force Extended Memory for Enhanced Bit Rates (VDSL only) */
+   DSL_uint16_t ExtMemForced : 1;
+   /** Extended Memory for Enhanced Bit Rates (Anx D support, VDSL only) */
+   DSL_uint16_t ExtMem : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_RTX_Control.
+*/
+struct ACK_RTX_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests RTX specific status information for the downstream bearer channels
+   if G.INP retransmission is used.
+*/
+struct CMD_RTX_BearerChsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers status information for the downstream bearer channels when G.INP
+   retransmission is actually used.
+*/
+struct ACK_RTX_BearerChsDS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Expected Throughput ETR of RTX Function, LSW */
+   DSL_uint16_t ETR_LSW;
+   /** Expected Throughput ETR of RTX Function, MSW */
+   DSL_uint16_t ETR_MSW;
+   /** Actual Delay of RTX Function */
+   DSL_uint16_t ActDelay;
+   /** Actual INP SHINE of RTX Function */
+   DSL_uint16_t ActInpSHINE;
+   /** Actual INP REIN of RTX Function */
+   DSL_uint16_t ActInpREIN;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Expected Throughput ETR of RTX Function, LSW */
+   DSL_uint16_t ETR_LSW;
+   /** Expected Throughput ETR of RTX Function, MSW */
+   DSL_uint16_t ETR_MSW;
+   /** Actual Delay of RTX Function */
+   DSL_uint16_t ActDelay;
+   /** Actual INP SHINE of RTX Function */
+   DSL_uint16_t ActInpSHINE;
+   /** Actual INP REIN of RTX Function */
+   DSL_uint16_t ActInpREIN;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests RTX specific status information for the upstream bearer channels if
+   upstream G.INP retransmission is used.
+*/
+struct CMD_RTX_BearerChsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers status information for the upstream bearer channels when upstream
+   G.INP retransmission is used.
+*/
+struct ACK_RTX_BearerChsUS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Expected Throughput ETR of RTX_us Function, LSW */
+   DSL_uint16_t ETR_LSW;
+   /** Expected Throughput ETR of RTX_us Function, MSW */
+   DSL_uint16_t ETR_MSW;
+   /** Actual Delay of RTX_us Function */
+   DSL_uint16_t ActDelay;
+   /** Actual INP SHINE of RTX_us Function */
+   DSL_uint16_t ActInpSHINE;
+   /** Actual INP REIN of RTX_us Function */
+   DSL_uint16_t ActInpREIN;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Expected Throughput ETR of RTX_us Function, LSW */
+   DSL_uint16_t ETR_LSW;
+   /** Expected Throughput ETR of RTX_us Function, MSW */
+   DSL_uint16_t ETR_MSW;
+   /** Actual Delay of RTX_us Function */
+   DSL_uint16_t ActDelay;
+   /** Actual INP SHINE of RTX_us Function */
+   DSL_uint16_t ActInpSHINE;
+   /** Actual INP REIN of RTX_us Function */
+   DSL_uint16_t ActInpREIN;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests performance monitoring counters for downstream G.INP retransmission.
+*/
+struct CMD_RTX_PM_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers performance monitoring counters for downstream G.INP retransmission.
+*/
+struct ACK_RTX_PM_DS_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ErrorFreeBitsCNT, LSW */
+   DSL_uint16_t ErrorFreeBits_LSW;
+   /** ErrorFreeBitsCNT, MSW */
+   DSL_uint16_t ErrorFreeBits_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[2];
+   /** EFTR_min reported to CO, LSW */
+   DSL_uint16_t EFTR_min_LSW;
+   /** EFTR_min reported to CO, MSW */
+   DSL_uint16_t EFTR_min_MSW;
+   /** Reserved */
+   DSL_uint16_t Res1[2];
+   /** "leftr" Count, LSW */
+   DSL_uint16_t leftr_LSW;
+   /** "leftr" Count, MSW */
+   DSL_uint16_t leftr_MSW;
+   /** EFTR, LSW */
+   DSL_uint16_t EFTR_LSW;
+   /** EFTR, MSW */
+   DSL_uint16_t EFTR_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ErrorFreeBitsCNT, LSW */
+   DSL_uint16_t ErrorFreeBits_LSW;
+   /** ErrorFreeBitsCNT, MSW */
+   DSL_uint16_t ErrorFreeBits_MSW;
+   /** Reserved */
+   DSL_uint16_t Res0[2];
+   /** EFTR_min reported to CO, LSW */
+   DSL_uint16_t EFTR_min_LSW;
+   /** EFTR_min reported to CO, MSW */
+   DSL_uint16_t EFTR_min_MSW;
+   /** Reserved */
+   DSL_uint16_t Res1[2];
+   /** "leftr" Count, LSW */
+   DSL_uint16_t leftr_LSW;
+   /** "leftr" Count, MSW */
+   DSL_uint16_t leftr_MSW;
+   /** EFTR, LSW */
+   DSL_uint16_t EFTR_LSW;
+   /** EFTR, MSW */
+   DSL_uint16_t EFTR_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests performance monitoring counters for upstream G.INP retransmission.
+*/
+struct CMD_RTX_PM_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers performance monitoring counters for upstream G.INP retransmission.
+   They are all far-end parameters received from CO.
+*/
+struct ACK_RTX_PM_US_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ErrorFreeBitsCNT, LSW */
+   DSL_uint16_t ErrorFreeBits_LSW;
+   /** ErrorFreeBitsCNT, MSW */
+   DSL_uint16_t ErrorFreeBits_MSW;
+   /** EFTR_min, LSW */
+   DSL_uint16_t EFTR_min_LSW;
+   /** EFTR_min, MSW */
+   DSL_uint16_t EFTR_min_MSW;
+   /** "leftr" Count, LSW */
+   DSL_uint16_t leftr_LSW;
+   /** "leftr" Count, MSW */
+   DSL_uint16_t leftr_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ErrorFreeBitsCNT, LSW */
+   DSL_uint16_t ErrorFreeBits_LSW;
+   /** ErrorFreeBitsCNT, MSW */
+   DSL_uint16_t ErrorFreeBits_MSW;
+   /** EFTR_min, LSW */
+   DSL_uint16_t EFTR_min_LSW;
+   /** EFTR_min, MSW */
+   DSL_uint16_t EFTR_min_MSW;
+   /** "leftr" Count, LSW */
+   DSL_uint16_t leftr_LSW;
+   /** "leftr" Count, MSW */
+   DSL_uint16_t leftr_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests DTU counters for G.INP downstream retransmission.
+*/
+struct CMD_RTX_DS_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers DTU counters for G.INP downstream retransmission. The counters are
+   Non-TR1 wrap-around counters, which are reset at reboot only.
+*/
+struct ACK_RTX_DS_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TxDtuRetransmitted Count (rtx-tx), LSW */
+   DSL_uint16_t TxDtuRTX_LSW;
+   /** TxDtuRetransmitted Count (rtx-tx), MSW */
+   DSL_uint16_t TxDtuRTX_MSW;
+   /** RxDtuCorrected Count (rtx-c), LSW */
+   DSL_uint16_t RxDtuCorr_LSW;
+   /** RxDtuCorrected Count (rtx-c), MSW */
+   DSL_uint16_t RxDtuCorr_MSW;
+   /** RxDtuUncorrected Count (rtx-uc), LSW */
+   DSL_uint16_t RxDtuNoCorr_LSW;
+   /** RxDtuUncorrected Count (rtx-uc), MSW */
+   DSL_uint16_t RxDtuNoCorr_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TxDtuRetransmitted Count (rtx-tx), LSW */
+   DSL_uint16_t TxDtuRTX_LSW;
+   /** TxDtuRetransmitted Count (rtx-tx), MSW */
+   DSL_uint16_t TxDtuRTX_MSW;
+   /** RxDtuCorrected Count (rtx-c), LSW */
+   DSL_uint16_t RxDtuCorr_LSW;
+   /** RxDtuCorrected Count (rtx-c), MSW */
+   DSL_uint16_t RxDtuCorr_MSW;
+   /** RxDtuUncorrected Count (rtx-uc), LSW */
+   DSL_uint16_t RxDtuNoCorr_LSW;
+   /** RxDtuUncorrected Count (rtx-uc), MSW */
+   DSL_uint16_t RxDtuNoCorr_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests DTU counters for G.INP upstream retransmission, which is defined for
+   VDSL only.
+*/
+struct CMD_RTX_US_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers DTU counters for G.INP upstream retransmission. The counters are
+   Non-TR1 wrap-around counters, which are reset at reboot only.
+*/
+struct ACK_RTX_US_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TxDtuRetransmitted Count (rtx-tx), LSW */
+   DSL_uint16_t TxDtuRTX_LSW;
+   /** TxDtuRetransmitted Count (rtx-tx), MSW */
+   DSL_uint16_t TxDtuRTX_MSW;
+   /** RxDtuCorrected Count (rtx-c), LSW */
+   DSL_uint16_t RxDtuCorr_LSW;
+   /** RxDtuCorrected Count rtx-c), MSW */
+   DSL_uint16_t RxDtuCorr_MSW;
+   /** RxDtuUncorrected Count (rtx-uc), LSW */
+   DSL_uint16_t RxDtuNoCorr_LSW;
+   /** RxDtuUncorrected Count (rtx-uc), MSW */
+   DSL_uint16_t RxDtuNoCorr_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TxDtuRetransmitted Count (rtx-tx), LSW */
+   DSL_uint16_t TxDtuRTX_LSW;
+   /** TxDtuRetransmitted Count (rtx-tx), MSW */
+   DSL_uint16_t TxDtuRTX_MSW;
+   /** RxDtuCorrected Count (rtx-c), LSW */
+   DSL_uint16_t RxDtuCorr_LSW;
+   /** RxDtuCorrected Count rtx-c), MSW */
+   DSL_uint16_t RxDtuCorr_MSW;
+   /** RxDtuUncorrected Count (rtx-uc), LSW */
+   DSL_uint16_t RxDtuNoCorr_LSW;
+   /** RxDtuUncorrected Count (rtx-uc), MSW */
+   DSL_uint16_t RxDtuNoCorr_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the actually used G.INP retransmission status.
+*/
+struct CMD_RTX_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the actually used G.INP retransmission status.
+*/
+struct ACK_RTX_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+   /** RTX US disabled against Intel(c) VDSL Chipset  due to wrong Config.  */
+   DSL_uint16_t RtxUsOffCfgErr : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** Intra DTU Interleaving US (VDSL only) */
+   DSL_uint16_t DtuInterleavingUs : 1;
+   /** Intra DTU Interleaving DS (VDSL only) */
+   DSL_uint16_t DtuInterleavingDs : 1;
+   /** Extended Memory */
+   DSL_uint16_t ExtMem : 1;
+   /** Retransmission US Used ("RTX_USED_us", VDSL only) */
+   DSL_uint16_t RtxUsedUs : 1;
+   /** Retransmission DS Used ("RTX_USED_ds") */
+   DSL_uint16_t RtxUsedDs : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Retransmission DS Used ("RTX_USED_ds") */
+   DSL_uint16_t RtxUsedDs : 1;
+   /** Retransmission US Used ("RTX_USED_us", VDSL only) */
+   DSL_uint16_t RtxUsedUs : 1;
+   /** Extended Memory */
+   DSL_uint16_t ExtMem : 1;
+   /** Intra DTU Interleaving DS (VDSL only) */
+   DSL_uint16_t DtuInterleavingDs : 1;
+   /** Intra DTU Interleaving US (VDSL only) */
+   DSL_uint16_t DtuInterleavingUs : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 3;
+   /** RTX US disabled against Intel(c) VDSL Chipset  due to wrong Config.  */
+   DSL_uint16_t RtxUsOffCfgErr : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 7;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests upstream G.INP retransmission specific framing parameters and other
+   status parameters. They are always associated with bearer channel 0.
+*/
+struct CMD_RTX_US_FrameDataGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers upstream retransmission specific framing parameters and other status
+   parameters, as requested by CMD_RTX_US_FrameDataGet. They are always
+   associated with bearer channel 0.In addition, the usual framing parameters
+   are to be retrieved with CMD_FrameDataExt2US_Get.
+*/
+struct ACK_RTX_US_FrameDataGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Framing Type of LP1 RTX_us Framing */
+   DSL_uint16_t FT;
+   /** FEC Codewords per DTU of LP1 RTX_us Framing */
+   DSL_uint16_t Q;
+   /** Padding Bytes per DTU of LP1 RTX_usFraming */
+   DSL_uint16_t V;
+   /** RTX Queue Length in DTUs of RTX_us Function */
+   DSL_uint16_t Qtx;
+   /** Look-Back Value for RRC Codeword Evaluation of RTX_us Function */
+   DSL_uint16_t lb;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Framing Type of LP1 RTX_us Framing */
+   DSL_uint16_t FT;
+   /** FEC Codewords per DTU of LP1 RTX_us Framing */
+   DSL_uint16_t Q;
+   /** Padding Bytes per DTU of LP1 RTX_usFraming */
+   DSL_uint16_t V;
+   /** RTX Queue Length in DTUs of RTX_us Function */
+   DSL_uint16_t Qtx;
+   /** Look-Back Value for RRC Codeword Evaluation of RTX_us Function */
+   DSL_uint16_t lb;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the G.INP upstream retransmission measured roundtrip.
+*/
+struct CMD_RTX_US_Roundtrip_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the G.INP upstream retransmission measured roundtrip delay. For
+   measuring the roundtrip, following difference is built when a correct RRC
+   codeword has been received: AbsoluteDTUCount of transmitter for next possible
+   DTU transmission minus AbsoluteDTUCount as received in RRC codeword.
+*/
+struct ACK_RTX_US_Roundtrip_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Minimum Measured Roundtrip in DTUs */
+   DSL_uint16_t MinRt;
+   /** Maximum Measured Roundtrip in DTUs */
+   DSL_uint16_t MaxRt;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Minimum Measured Roundtrip in DTUs */
+   DSL_uint16_t MinRt;
+   /** Maximum Measured Roundtrip in DTUs */
+   DSL_uint16_t MaxRt;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables support for full vectoring (G.993.5) and full vector-
+   friendly operation (G.993.2 Annex Y). In case of ADSL, this only means the
+   indication of the (VDSL) vectoring capabilities during G.Handshake.
+*/
+struct CMD_DSM_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+   /** Supported Vectoring Mode */
+   DSL_uint16_t VectoringMode : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Supported Vectoring Mode */
+   DSL_uint16_t VectoringMode : 2;
+   /** Reserved */
+   DSL_uint16_t Res0 : 14;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_DSM_Control.
+*/
+struct ACK_DSM_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autononmous message indicates that new downstream DSM error vector data
+   were written by the DSL FW into the SDRAM. Generation of this EVT message is
+   enabled/disabled together with the G.993.5 vectoring functionality itself, by
+   means of CMD_DSM_Control, parameter "Vector".
+*/
+struct EVT_DSM_ErrorVectorReady
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ERB Event Result Code */
+   DSL_uint16_t ErrVecProcResult;
+   /** L2 Backchannel Error Vector Date Size */
+   DSL_uint16_t ErrVecSize;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** ERB Event Result Code */
+   DSL_uint16_t ErrVecProcResult;
+   /** L2 Backchannel Error Vector Date Size */
+   DSL_uint16_t ErrVecSize;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests vectoring debug counter values.
+*/
+struct CMD_DSM_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers vectoring debug counters.
+*/
+struct ACK_DSM_StatsGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Discarded Error Vectors, LSW */
+   DSL_uint16_t ErrVecDiscard_LSW;
+   /** Discarded Error Vectors, MSW */
+   DSL_uint16_t ErrVecDiscard_MSW;
+   /** Transmitted Error Vectors, LSW */
+   DSL_uint16_t ErrVecTransmitted_LSW;
+   /** Transmitted Error Vectors, MSW */
+   DSL_uint16_t ErrVecTransmitted_MSW;
+   /** Total Error Vectors Requested, LSW */
+   DSL_uint16_t ErrVecTotalReq_LSW;
+   /** Total Error Vectors Requested, MSW */
+   DSL_uint16_t ErrVecTotalReq_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Discarded Error Vectors, LSW */
+   DSL_uint16_t ErrVecDiscard_LSW;
+   /** Discarded Error Vectors, MSW */
+   DSL_uint16_t ErrVecDiscard_MSW;
+   /** Transmitted Error Vectors, LSW */
+   DSL_uint16_t ErrVecTransmitted_LSW;
+   /** Transmitted Error Vectors, MSW */
+   DSL_uint16_t ErrVecTransmitted_MSW;
+   /** Total Error Vectors Requested, LSW */
+   DSL_uint16_t ErrVecTotalReq_LSW;
+   /** Total Error Vectors Requested, MSW */
+   DSL_uint16_t ErrVecTotalReq_MSW;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_OLR_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_perf_pmd.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_perf_pmd.h
new file mode 100644
index 0000000000000000000000000000000000000000..1a3a1fa90059c1814cbd4ccd2bda10ab786772aa
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_perf_pmd.h
@@ -0,0 +1,1674 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_PERF_PMD_H_
+#define _DRV_DSL_CPE_VRX_MSG_PERF_PMD_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _PERF_PMD_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_CounterControlSet */
+#define CMD_COUNTERCONTROLSET 0x004A
+
+/**
+   Controls the behaviour of the performance counters.
+*/
+typedef struct CMD_CounterControlSet CMD_CounterControlSet_t;
+
+/** Message ID for ACK_CounterControlSet */
+#define ACK_COUNTERCONTROLSET 0x004A
+
+/**
+   Acknowledgement for message CMD_CounterControlSet.
+*/
+typedef struct ACK_CounterControlSet ACK_CounterControlSet_t;
+
+/** Message ID for CMD_PM_OptionsSet */
+#define CMD_PM_OPTIONSSET 0x1662
+
+/**
+   Configures options for performance monitoring functions.
+*/
+typedef struct CMD_PM_OptionsSet CMD_PM_OptionsSet_t;
+
+/** Message ID for ACK_PM_OptionsSet */
+#define ACK_PM_OPTIONSSET 0x1662
+
+/**
+   Acknowledgement for message ACK_PM_OptionsSet.
+*/
+typedef struct ACK_PM_OptionsSet ACK_PM_OptionsSet_t;
+
+/** Message ID for ALM_LineFailureNE_Get */
+#define ALM_LINEFAILURENE_GET 0x0007
+
+/**
+   This autonomous message indicates near-end line failures.
+*/
+typedef struct ALM_LineFailureNE_Get ALM_LineFailureNE_Get_t;
+
+/** Message ID for CMD_LineFailureNE_Get */
+#define CMD_LINEFAILURENE_GET 0x0007
+
+/**
+   Requests the near-end line failure status.
+*/
+typedef struct CMD_LineFailureNE_Get CMD_LineFailureNE_Get_t;
+
+/** Message ID for ACK_LineFailureNE_Get */
+#define ACK_LINEFAILURENE_GET 0x0007
+
+/**
+   Provides the near-end line failure status requested by the command
+   CMD_LineFailureNE_Get.
+*/
+typedef struct ACK_LineFailureNE_Get ACK_LineFailureNE_Get_t;
+
+/** Message ID for ALM_LineFailureFE_Get */
+#define ALM_LINEFAILUREFE_GET 0x0107
+
+/**
+   This autonomous message indicates far-end line failures.
+*/
+typedef struct ALM_LineFailureFE_Get ALM_LineFailureFE_Get_t;
+
+/** Message ID for CMD_LineFailureFE_Get */
+#define CMD_LINEFAILUREFE_GET 0x0107
+
+/**
+   Requests the far-end line failure status.
+*/
+typedef struct CMD_LineFailureFE_Get CMD_LineFailureFE_Get_t;
+
+/** Message ID for ACK_LineFailureFE_Get */
+#define ACK_LINEFAILUREFE_GET 0x0107
+
+/**
+   Provides the far-end line failure status requested by the command
+   CMD_LineFailureFE_Get.
+*/
+typedef struct ACK_LineFailureFE_Get ACK_LineFailureFE_Get_t;
+
+/** Message ID for CMD_Failure_Trigger */
+#define CMD_FAILURE_TRIGGER 0x0562
+
+/**
+   Host initiated "loss of power". Triggers indicating an lpr primitive to the
+   remote side via the indicator bits ("IB bits").The host writes the message to
+   the FW e.g. after detecting LPR by an alternative detection scheme.
+*/
+typedef struct CMD_Failure_Trigger CMD_Failure_Trigger_t;
+
+/** Message ID for ACK_Failure_Trigger */
+#define ACK_FAILURE_TRIGGER 0x0562
+
+/**
+   Acknowledgement for CMD_Failure_Trigger.
+*/
+typedef struct ACK_Failure_Trigger ACK_Failure_Trigger_t;
+
+/** Message ID for CMD_LinePerfCountNE_Get */
+#define CMD_LINEPERFCOUNTNE_GET 0x020A
+
+/**
+   Requests near-end line performance counter values (Section 7.2.1.1 of
+   G.997.1). These are wrap-around counters which are not affected by the
+   TR1-period.
+*/
+typedef struct CMD_LinePerfCountNE_Get CMD_LinePerfCountNE_Get_t;
+
+/** Message ID for ACK_LinePerfCountNE_Get */
+#define ACK_LINEPERFCOUNTNE_GET 0x020A
+
+/**
+   Provides near-end line performance counter values requested by
+   CMD_LinePerfCountNE_Get (Section 7.2.1.1 of G.997.1). These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+typedef struct ACK_LinePerfCountNE_Get ACK_LinePerfCountNE_Get_t;
+
+/** Message ID for CMD_LinePerfCountFE_Get */
+#define CMD_LINEPERFCOUNTFE_GET 0x040A
+
+/**
+   Requests far-end line performance counter values (Section 7.2.1.2 of
+   G.997.1). These are wrap-around counters which are not affected by the
+   TR1-period.
+*/
+typedef struct CMD_LinePerfCountFE_Get CMD_LinePerfCountFE_Get_t;
+
+/** Message ID for ACK_LinePerfCountFE_Get */
+#define ACK_LINEPERFCOUNTFE_GET 0x040A
+
+/**
+   Provides far-end line performance counter values requested by
+   CMD_LinePerfCountFE_Get (Section 7.2.1.2 of G.997.1). These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+typedef struct ACK_LinePerfCountFE_Get ACK_LinePerfCountFE_Get_t;
+
+/** Message ID for CMD_CRC_StatsNE_Get */
+#define CMD_CRC_STATSNE_GET 0x080A
+
+/**
+   Requests near-end CRC counter values. These are wrap-around counters which
+   are not affected by the TR1-period.
+*/
+typedef struct CMD_CRC_StatsNE_Get CMD_CRC_StatsNE_Get_t;
+
+/** Message ID for ACK_CRC_StatsNE_Get */
+#define ACK_CRC_STATSNE_GET 0x080A
+
+/**
+   Returns near-end CRC counter values. (Section 7.2.2.1.1 of G.997.1). These
+   are wrap-around counters which are not affected by the TR1-period.The
+   "LP1/Fast Path" parameters are fed only in ADSL1 and ADSL1 Lite mode with
+   selected fast path and in VDSL/ADSL with RTX mode.
+*/
+typedef struct ACK_CRC_StatsNE_Get ACK_CRC_StatsNE_Get_t;
+
+/** Message ID for CMD_CRC_StatsFE_Get */
+#define CMD_CRC_STATSFE_GET 0x0C0A
+
+/**
+   Requests far-end CRC counter values. These are wrap-around counters which are
+   not affected by the TR1-period.
+*/
+typedef struct CMD_CRC_StatsFE_Get CMD_CRC_StatsFE_Get_t;
+
+/** Message ID for ACK_CRC_StatsFE_Get */
+#define ACK_CRC_STATSFE_GET 0x0C0A
+
+/**
+   Returns far-end CRC counter values. (Section 7.2.2.2.1 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed in ADSL1 and ADSL1 Lite mode with selected fast path
+   and in VDSL with RTX mode.
+*/
+typedef struct ACK_CRC_StatsFE_Get ACK_CRC_StatsFE_Get_t;
+
+/** Message ID for CMD_FEC_StatsNE_Get */
+#define CMD_FEC_STATSNE_GET 0x0A0A
+
+/**
+   Requests near-end FEC counter values. These are wrap-around counters which
+   are not affected by the TR1-period.
+*/
+typedef struct CMD_FEC_StatsNE_Get CMD_FEC_StatsNE_Get_t;
+
+/** Message ID for ACK_FEC_StatsNE_Get */
+#define ACK_FEC_STATSNE_GET 0x0A0A
+
+/**
+   Returns near-end FEC counter values (Section 7.2.2.1.2 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed only in ADSL1 and ADSL1 Lite mode with selected fast
+   path and in VDSL/ADSL with RTX mode.
+*/
+typedef struct ACK_FEC_StatsNE_Get ACK_FEC_StatsNE_Get_t;
+
+/** Message ID for CMD_FEC_StatsFE_Get */
+#define CMD_FEC_STATSFE_GET 0x0E0A
+
+/**
+   Requests far-end FEC counter values. These are wrap-around counters which are
+   not affected by the TR1-period.
+*/
+typedef struct CMD_FEC_StatsFE_Get CMD_FEC_StatsFE_Get_t;
+
+/** Message ID for ACK_FEC_StatsFE_Get */
+#define ACK_FEC_STATSFE_GET 0x0E0A
+
+/**
+   Returns far-end FEC counter values (Section 7.2.2.2.2 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed in ADSL1 and ADSL1 Lite mode with selected fast path
+   and in VDSL with RTX mode.
+*/
+typedef struct ACK_FEC_StatsFE_Get ACK_FEC_StatsFE_Get_t;
+
+/** Message ID for CMD_SOS_StatsNE_Get */
+#define CMD_SOS_STATSNE_GET 0x290A
+
+/**
+   Requests the near-end 15 minutes SOS counter values.
+*/
+typedef struct CMD_SOS_StatsNE_Get CMD_SOS_StatsNE_Get_t;
+
+/** Message ID for ACK_SOS_StatsNE_Get */
+#define ACK_SOS_STATSNE_GET 0x290A
+
+/**
+   Returns near-end SOS counter values. (Section 7.2.1.6.1 of G.997.1)
+*/
+typedef struct ACK_SOS_StatsNE_Get ACK_SOS_StatsNE_Get_t;
+
+/** Message ID for CMD_SOS_StatsFE_Get */
+#define CMD_SOS_STATSFE_GET 0x2A0A
+
+/**
+   Requests the far-end 15 minutes SOS counter values. These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+typedef struct CMD_SOS_StatsFE_Get CMD_SOS_StatsFE_Get_t;
+
+/** Message ID for ACK_SOS_StatsFE_Get */
+#define ACK_SOS_STATSFE_GET 0x2A0A
+
+/**
+   Returns far-end SOS counter values. (Section 7.2.1.7.1 of G.997.1)
+*/
+typedef struct ACK_SOS_StatsFE_Get ACK_SOS_StatsFE_Get_t;
+
+/** Message ID for CMD_LinePerfCountNE_Set */
+#define CMD_LINEPERFCOUNTNE_SET 0x024A
+
+/**
+   Writes near-end line performance counter values (total wrap-around)(Section
+   7.2.1.1 of G.997.1).
+*/
+typedef struct CMD_LinePerfCountNE_Set CMD_LinePerfCountNE_Set_t;
+
+/** Message ID for ACK_LinePerfCountNE_Set */
+#define ACK_LINEPERFCOUNTNE_SET 0x024A
+
+/**
+   Acknowledgement for CMD_LinePerfCountNE_Set.
+*/
+typedef struct ACK_LinePerfCountNE_Set ACK_LinePerfCountNE_Set_t;
+
+/** Message ID for CMD_CRC_StatsNE_Set */
+#define CMD_CRC_STATSNE_SET 0x084A
+
+/**
+   Writes the near-end CRC counter values (Section 7.2.2.1.1 of G.997.1)The
+   "LP1/Fast Path" parameters are used only in ADSL1 and ADSL1 Lite mode with
+   selected "Fast Path".
+*/
+typedef struct CMD_CRC_StatsNE_Set CMD_CRC_StatsNE_Set_t;
+
+/** Message ID for ACK_CRC_StatsNE_Set */
+#define ACK_CRC_STATSNE_SET 0x084A
+
+/**
+   Acknowledgement for the message CMD_CRC_StatsNE_Set.
+*/
+typedef struct ACK_CRC_StatsNE_Set ACK_CRC_StatsNE_Set_t;
+
+/** Message ID for CMD_FEC_StatsNE_Set */
+#define CMD_FEC_STATSNE_SET 0x0A4A
+
+/**
+   Writes near-end FEC counter values. (Section 7.2.2.1.2 of G.997.1)The
+   "LP1/Fast Path" parameters are used only in ADSL1 and ADSL1 Lite mode with
+   selected "Fast Path".
+*/
+typedef struct CMD_FEC_StatsNE_Set CMD_FEC_StatsNE_Set_t;
+
+/** Message ID for ACK_FEC_StatsNE_Set */
+#define ACK_FEC_STATSNE_SET 0x0A4A
+
+/**
+   Acknowledgement for the message CMD_FEC_StatsNE_Set.
+*/
+typedef struct ACK_FEC_StatsNE_Set ACK_FEC_StatsNE_Set_t;
+
+/** Message ID for  CMD_SOS_StatsNE_Set */
+#define  CMD_SOS_STATSNE_SET 0x294A
+
+/**
+   Writes near-end SOS counter values. ("SOS-SUCCESS-NE", Section 7.2.1.6.1 of
+   G.997.1).
+*/
+typedef struct  CMD_SOS_StatsNE_Set CMD_SOS_StatsNE_Set_t;
+
+/** Message ID for  ACK_SOS_StatsNE_Set */
+#define  ACK_SOS_STATSNE_SET 0x294A
+
+/**
+   Acknowledgement for CMD_SOS_StatsNE_Set.
+*/
+typedef struct  ACK_SOS_StatsNE_Set ACK_SOS_StatsNE_Set_t;
+
+/** Message ID for CMD_TimeSet */
+#define CMD_TIMESET 0x6143
+
+/**
+   Sets the running time since midnightModifying the Time does not affect the
+   TR1 supervision period and the TR1-counters.
+*/
+typedef struct CMD_TimeSet CMD_TimeSet_t;
+
+/** Message ID for ACK_TimeSet */
+#define ACK_TIMESET 0x6143
+
+/**
+   Acknowledgement for message CMD_TimeSet.
+*/
+typedef struct ACK_TimeSet ACK_TimeSet_t;
+
+/** Message ID for CMD_TimeGet */
+#define CMD_TIMEGET 0x6103
+
+/**
+   Requests the status of the "Set Time and Read Time" EOC messages.
+*/
+typedef struct CMD_TimeGet CMD_TimeGet_t;
+
+/** Message ID for ACK_TimeGet */
+#define ACK_TIMEGET 0x6103
+
+/**
+   Provides the status of the "Set Time and Read Time" EOC messages.
+*/
+typedef struct ACK_TimeGet ACK_TimeGet_t;
+
+/**
+   Controls the behaviour of the performance counters.
+*/
+struct CMD_CounterControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+   /** Counter Inhibiting Enable */
+   DSL_uint16_t CntInhibitEnable : 1;
+   /** Fixed value: VRX_DISABLE */
+   DSL_uint16_t Res1 : 2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Fixed value: VRX_DISABLE */
+   DSL_uint16_t Res1 : 2;
+   /** Counter Inhibiting Enable */
+   DSL_uint16_t CntInhibitEnable : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 13;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_CounterControlSet.
+*/
+struct ACK_CounterControlSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Configures options for performance monitoring functions.
+*/
+struct CMD_PM_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** Supress CRC/FEC Counter-Writeback (ADSL only) */
+   DSL_uint16_t CrcFecWrProtect : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Supress CRC/FEC Counter-Writeback (ADSL only) */
+   DSL_uint16_t CrcFecWrProtect : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message ACK_PM_OptionsSet.
+*/
+struct ACK_PM_OptionsSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autonomous message indicates near-end line failures.
+*/
+struct ALM_LineFailureNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** ESE Failure NE */
+   DSL_uint16_t ESE_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** LOM Failure NE */
+   DSL_uint16_t LOM_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** LOF Failure NE */
+   DSL_uint16_t LOF_NE : 1;
+   /** LOS Failure NE */
+   DSL_uint16_t LOS_NE : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LOS Failure NE */
+   DSL_uint16_t LOS_NE : 1;
+   /** LOF Failure NE */
+   DSL_uint16_t LOF_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** LOM Failure NE */
+   DSL_uint16_t LOM_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** ESE Failure NE */
+   DSL_uint16_t ESE_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the near-end line failure status.
+*/
+struct CMD_LineFailureNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the near-end line failure status requested by the command
+   CMD_LineFailureNE_Get.
+*/
+struct ACK_LineFailureNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** ESE Failure NE */
+   DSL_uint16_t ESE_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** LOM Failure NE */
+   DSL_uint16_t LOM_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** LOF Failure NE */
+   DSL_uint16_t LOF_NE : 1;
+   /** LOS Failure NE */
+   DSL_uint16_t LOS_NE : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LOS Failure NE */
+   DSL_uint16_t LOS_NE : 1;
+   /** LOF Failure NE */
+   DSL_uint16_t LOF_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** LOM Failure NE */
+   DSL_uint16_t LOM_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** ESE Failure NE */
+   DSL_uint16_t ESE_NE : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autonomous message indicates far-end line failures.
+*/
+struct ALM_LineFailureFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** ESE Failure FE */
+   DSL_uint16_t ESE_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** LOM Failure FE */
+   DSL_uint16_t LOM_FE : 1;
+   /** LPR Failure FE */
+   DSL_uint16_t LPR_FE : 1;
+   /** LOF Failure FE */
+   DSL_uint16_t LOF_FE : 1;
+   /** LOS Failure FE */
+   DSL_uint16_t LOS_FE : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LOS Failure FE */
+   DSL_uint16_t LOS_FE : 1;
+   /** LOF Failure FE */
+   DSL_uint16_t LOF_FE : 1;
+   /** LPR Failure FE */
+   DSL_uint16_t LPR_FE : 1;
+   /** LOM Failure FE */
+   DSL_uint16_t LOM_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** ESE Failure FE */
+   DSL_uint16_t ESE_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the far-end line failure status.
+*/
+struct CMD_LineFailureFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the far-end line failure status requested by the command
+   CMD_LineFailureFE_Get.
+*/
+struct ACK_LineFailureFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+   /** ESE Failure FE */
+   DSL_uint16_t ESE_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** LOM Failure FE */
+   DSL_uint16_t LOM_FE : 1;
+   /** LPR Failure FE */
+   DSL_uint16_t LPR_FE : 1;
+   /** LOF Failure FE */
+   DSL_uint16_t LOF_FE : 1;
+   /** LOS Failure FE */
+   DSL_uint16_t LOS_FE : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LOS Failure FE */
+   DSL_uint16_t LOS_FE : 1;
+   /** LOF Failure FE */
+   DSL_uint16_t LOF_FE : 1;
+   /** LPR Failure FE */
+   DSL_uint16_t LPR_FE : 1;
+   /** LOM Failure FE */
+   DSL_uint16_t LOM_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 9;
+   /** ESE Failure FE */
+   DSL_uint16_t ESE_FE : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Host initiated "loss of power". Triggers indicating an lpr primitive to the
+   remote side via the indicator bits ("IB bits").The host writes the message to
+   the FW e.g. after detecting LPR by an alternative detection scheme.
+*/
+struct CMD_Failure_Trigger
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** LPR Trigger */
+   DSL_uint16_t lpr_Trigger : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** LPR Trigger */
+   DSL_uint16_t lpr_Trigger : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_Failure_Trigger.
+*/
+struct ACK_Failure_Trigger
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests near-end line performance counter values (Section 7.2.1.1 of
+   G.997.1). These are wrap-around counters which are not affected by the
+   TR1-period.
+*/
+struct CMD_LinePerfCountNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides near-end line performance counter values requested by
+   CMD_LinePerfCountNE_Get (Section 7.2.1.1 of G.997.1). These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+struct ACK_LinePerfCountNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Near-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Near-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Near-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Near-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Near-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Near-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Near-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Near-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Near-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Near-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Near-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Near-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Near-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Near-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests far-end line performance counter values (Section 7.2.1.2 of
+   G.997.1). These are wrap-around counters which are not affected by the
+   TR1-period.
+*/
+struct CMD_LinePerfCountFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides far-end line performance counter values requested by
+   CMD_LinePerfCountFE_Get (Section 7.2.1.2 of G.997.1). These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+struct ACK_LinePerfCountFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Far-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Far-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Far-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Far-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Far-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Far-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Far-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Far-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Far-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Far-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Far-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Far-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Far-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Far-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests near-end CRC counter values. These are wrap-around counters which
+   are not affected by the TR1-period.
+*/
+struct CMD_CRC_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns near-end CRC counter values. (Section 7.2.2.1.1 of G.997.1). These
+   are wrap-around counters which are not affected by the TR1-period.The
+   "LP1/Fast Path" parameters are fed only in ADSL1 and ADSL1 Lite mode with
+   selected fast path and in VDSL/ADSL with RTX mode.
+*/
+struct ACK_CRC_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Near-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Near-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Near-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Near-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Near-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Near-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests far-end CRC counter values. These are wrap-around counters which are
+   not affected by the TR1-period.
+*/
+struct CMD_CRC_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns far-end CRC counter values. (Section 7.2.2.2.1 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed in ADSL1 and ADSL1 Lite mode with selected fast path
+   and in VDSL with RTX mode.
+*/
+struct ACK_CRC_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Far-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Far-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Far-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Far-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Far-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Far-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests near-end FEC counter values. These are wrap-around counters which
+   are not affected by the TR1-period.
+*/
+struct CMD_FEC_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns near-end FEC counter values (Section 7.2.2.1.2 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed only in ADSL1 and ADSL1 Lite mode with selected fast
+   path and in VDSL/ADSL with RTX mode.
+*/
+struct ACK_FEC_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Near-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Near-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Near-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+   /** Near-End FEC Uncorrectable Count LP0, LSW */
+   DSL_uint16_t cntECI_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP0, MSW */
+   DSL_uint16_t cntECI_NoCorrMSW;
+   /** Near-End FEC Uncorrectable Count LP1, LSW */
+   DSL_uint16_t cntECF_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP1, MSW */
+   DSL_uint16_t cntECF_NoCorrMSW;
+   /** Near-End Total RS CW Count LP0, LSW */
+   DSL_uint16_t cntECI_CW_LSW;
+   /** Near-End Total RS CW Count LP0, MSW */
+   DSL_uint16_t cntECI_CW_MSW;
+   /** Near-End Total RS CW Count LP1, LSW */
+   DSL_uint16_t cntECF_CW_LSW;
+   /** Near-End Total RS CW Count LP1, MSW */
+   DSL_uint16_t cntECF_CW_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Near-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Near-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Near-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+   /** Near-End FEC Uncorrectable Count LP0, LSW */
+   DSL_uint16_t cntECI_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP0, MSW */
+   DSL_uint16_t cntECI_NoCorrMSW;
+   /** Near-End FEC Uncorrectable Count LP1, LSW */
+   DSL_uint16_t cntECF_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP1, MSW */
+   DSL_uint16_t cntECF_NoCorrMSW;
+   /** Near-End Total RS CW Count LP0, LSW */
+   DSL_uint16_t cntECI_CW_LSW;
+   /** Near-End Total RS CW Count LP0, MSW */
+   DSL_uint16_t cntECI_CW_MSW;
+   /** Near-End Total RS CW Count LP1, LSW */
+   DSL_uint16_t cntECF_CW_LSW;
+   /** Near-End Total RS CW Count LP1, MSW */
+   DSL_uint16_t cntECF_CW_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests far-end FEC counter values. These are wrap-around counters which are
+   not affected by the TR1-period.
+*/
+struct CMD_FEC_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns far-end FEC counter values (Section 7.2.2.2.2 of G.997.1). These are
+   wrap-around counters which are not affected by the TR1-period.The "LP1/Fast
+   Path" parameters are fed in ADSL1 and ADSL1 Lite mode with selected fast path
+   and in VDSL with RTX mode.
+*/
+struct ACK_FEC_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Far-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Far-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Far-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Far-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Far-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Far-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the near-end 15 minutes SOS counter values.
+*/
+struct CMD_SOS_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns near-end SOS counter values. (Section 7.2.1.6.1 of G.997.1)
+*/
+struct ACK_SOS_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Near-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Near-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the far-end 15 minutes SOS counter values. These are wrap-around
+   counters which are not affected by the TR1-period.
+*/
+struct CMD_SOS_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Returns far-end SOS counter values. (Section 7.2.1.7.1 of G.997.1)
+*/
+struct ACK_SOS_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Far-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Far-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Far-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes near-end line performance counter values (total wrap-around)(Section
+   7.2.1.1 of G.997.1).
+*/
+struct CMD_LinePerfCountNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Near-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Near-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Near-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Near-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Near-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Near-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Near-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FECS Count, LSW */
+   DSL_uint16_t  cntFECS_LSW;
+   /** Near-End FECS Count, MSW */
+   DSL_uint16_t  cntFECS_MSW;
+   /** Near-End ES Count, LSW */
+   DSL_uint16_t  cntES_LSW;
+   /** Near-End ES Count, MSW */
+   DSL_uint16_t  cntES_MSW;
+   /** Near-End SES Count, LSW */
+   DSL_uint16_t  cntSES_LSW;
+   /** Near-End SES Count, MSW */
+   DSL_uint16_t  cntSES_MSW;
+   /** Near-End LOSS Count, LSW */
+   DSL_uint16_t  cntLOSS_LSW;
+   /** Near-End LOSS Count, MSW */
+   DSL_uint16_t  cntLOSS_MSW;
+   /** Near-End UAS Count, LSW */
+   DSL_uint16_t  cntUAS_LSW;
+   /** Near-End UAS Count, MSW */
+   DSL_uint16_t  cntUAS_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_LinePerfCountNE_Set.
+*/
+struct ACK_LinePerfCountNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes the near-end CRC counter values (Section 7.2.2.1.1 of G.997.1)The
+   "LP1/Fast Path" parameters are used only in ADSL1 and ADSL1 Lite mode with
+   selected "Fast Path".
+*/
+struct CMD_CRC_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Near-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Near-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Near-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End CRC Count LP0, LSW */
+   DSL_uint16_t cntCVI_LSW;
+   /** Near-End CRC Count LP0, MSW */
+   DSL_uint16_t cntCVI_MSW;
+   /** Near-End CRC Count LP1, LSW */
+   DSL_uint16_t cntCVF_LSW;
+   /** Near-End CRC Count LP1, MSW */
+   DSL_uint16_t cntCVF_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_CRC_StatsNE_Set.
+*/
+struct ACK_CRC_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes near-end FEC counter values. (Section 7.2.2.1.2 of G.997.1)The
+   "LP1/Fast Path" parameters are used only in ADSL1 and ADSL1 Lite mode with
+   selected "Fast Path".
+*/
+struct CMD_FEC_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Near-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Near-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Near-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+   /** Near-End FEC Uncorrectable Count LP0, LSW */
+   DSL_uint16_t cntECI_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP0, MSW */
+   DSL_uint16_t cntECI_NoCorrMSW;
+   /** Near-End FEC Uncorrectable Count LP1, LSW */
+   DSL_uint16_t cntECF_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP1, MSW */
+   DSL_uint16_t cntECF_NoCorrMSW;
+   /** Near-End Total RS CW Count LP0, LSW */
+   DSL_uint16_t cntECI_CW_LSW;
+   /** Near-End Total RS CW Count LP0, MSW */
+   DSL_uint16_t cntECI_CW_MSW;
+   /** Near-End Total RS CW Count LP1, LSW */
+   DSL_uint16_t cntECF_CW_LSW;
+   /** Near-End Total RS CW Count LP1, MSW */
+   DSL_uint16_t cntECF_CW_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End FEC Count LP0, LSW */
+   DSL_uint16_t cntECI_LSW;
+   /** Near-End FEC Count LP0, MSW */
+   DSL_uint16_t cntECI_MSW;
+   /** Near-End FEC Count LP1, LSW */
+   DSL_uint16_t cntFEC_LSW;
+   /** Near-End FEC Count LP1, MSW */
+   DSL_uint16_t cntFEC_MSW;
+   /** Near-End FEC Uncorrectable Count LP0, LSW */
+   DSL_uint16_t cntECI_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP0, MSW */
+   DSL_uint16_t cntECI_NoCorrMSW;
+   /** Near-End FEC Uncorrectable Count LP1, LSW */
+   DSL_uint16_t cntECF_NoCorrLSW;
+   /** Near-End FEC Uncorrectable Count LP1, MSW */
+   DSL_uint16_t cntECF_NoCorrMSW;
+   /** Near-End Total RS CW Count LP0, LSW */
+   DSL_uint16_t cntECI_CW_LSW;
+   /** Near-End Total RS CW Count LP0, MSW */
+   DSL_uint16_t cntECI_CW_MSW;
+   /** Near-End Total RS CW Count LP1, LSW */
+   DSL_uint16_t cntECF_CW_LSW;
+   /** Near-End Total RS CW Count LP1, MSW */
+   DSL_uint16_t cntECF_CW_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_FEC_StatsNE_Set.
+*/
+struct ACK_FEC_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes near-end SOS counter values. ("SOS-SUCCESS-NE", Section 7.2.1.6.1 of
+   G.997.1).
+*/
+struct  CMD_SOS_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Near-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-End SOS Success Count LP0, LSW */
+   DSL_uint16_t cntSOS_SUC_LSW;
+   /** Near-End SOS Success Count LP0, MSW */
+   DSL_uint16_t cntSOS_SUC_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for CMD_SOS_StatsNE_Set.
+*/
+struct  ACK_SOS_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the running time since midnightModifying the Time does not affect the
+   TR1 supervision period and the TR1-counters.
+*/
+struct CMD_TimeSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0[3];
+   /** NE Time */
+   VRX_TIME_t timeNE;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0[3];
+   /** NE Time */
+   VRX_TIME_t timeNE;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_TimeSet.
+*/
+struct ACK_TimeSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the status of the "Set Time and Read Time" EOC messages.
+*/
+struct CMD_TimeGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the status of the "Set Time and Read Time" EOC messages.
+*/
+struct ACK_TimeGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** FE Time */
+   VRX_TIME_t timeFE;
+   /** NE Time */
+   VRX_TIME_t timeNE;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0;
+   /** FE Time */
+   VRX_TIME_t timeFE;
+   /** NE Time */
+   VRX_TIME_t timeNE;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_PERF_PMD_H_*/
diff --git a/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_tc_counters.h b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_tc_counters.h
new file mode 100644
index 0000000000000000000000000000000000000000..d94b77b199691dddb6264fc862985902f950a608
--- /dev/null
+++ b/src/include/mcat3.1/drv_dsl_cpe_vrx_msg_tc_counters.h
@@ -0,0 +1,2199 @@
+/******************************************************************************
+
+                            Copyright (c) 2007-2017
+                       Lantiq Beteiligungs-GmbH & Co. KG
+
+  For licensing information, see the file 'LICENSE' in the root folder of
+  this software module.
+
+******************************************************************************/
+
+
+#ifndef _DRV_DSL_CPE_VRX_MSG_TC_COUNTERS_H_
+#define _DRV_DSL_CPE_VRX_MSG_TC_COUNTERS_H_
+
+/** \file
+
+*/
+
+#ifndef __PACKED__
+   #if defined (__GNUC__) || defined (__GNUG__)
+      /* GNU C or C++ compiler */
+      #define __PACKED__ __attribute__ ((packed))
+   #else
+      /* Byte alignment adjustment */
+      #pragma pack(1)
+      #define __PACKED__      /* nothing */
+   #endif
+   #define __PACKED_DEFINED__ 1
+#endif
+
+
+/** @defgroup _TC_COUNTERS_
+ *  @{
+ */
+
+#ifdef __cplusplus
+   extern "C" {
+#endif
+
+/* ----- Message Specific Constants Definition section ----- */
+#define ACK_TC_StatusGet_UNKNOWN_TC 0x0
+#define ACK_TC_StatusGet_EFM_TC 0x1
+#define ACK_TC_StatusGet_ATM_TC 0x2
+#define EVT_TC_StatusGet_EFM_TC 0x1
+#define EVT_TC_StatusGet_ATM_TC 0x2
+#define CMD_TC_FW_InfoSet_EFM_TC 0x1
+#define CMD_TC_FW_InfoSet_ATM_TC 0x2
+#define ACK_VersionInfoGet_VRX518 0x0
+#define ACK_VersionInfoGet_VRX517 0x1
+#define ACK_VersionInfoGet_HW_VER11 0x0
+#define ACK_VersionInfoGet_HW_VER12 0x1
+#define ACK_VersionInfoGet_VRX200 0x05
+#define ACK_VersionInfoGet_VRX300 0x07
+#define ACK_VersionInfoGet_VRX500 0x08
+#define ACK_VersionInfoGet_R3 10
+#define ACK_VersionInfoGet_R4 11
+#define ACK_VersionInfoGet_R5 12
+#define ACK_VersionInfoGet_RELEASE 0
+#define ACK_VersionInfoGet_PRERELEASE 1
+#define ACK_VersionInfoGet_DEVELOP 3
+#define ACK_VersionInfoGet_ADSL_A 1
+#define ACK_VersionInfoGet_ADSL_BJ 2
+#define ACK_VersionInfoGet_VDSL2 6
+#define CMD_PAF_HS_Continue_WAIT 0x0
+#define CMD_PAF_HS_Continue_CONTINUE 0x1
+/* ----- Message Specific Constants Definition section (End) ----- */
+
+/** Message ID for CMD_TC_StatusGet */
+#define CMD_TC_STATUSGET 0x0E22
+
+/**
+   The message reads the used TC.In ADSL the TC type is selected during G.HS and
+   thus known when entering FULL_INIT. In VDSL it is selected later, during
+   FULL_INIT. Before this point the FW will report the TC as "unknown".
+*/
+typedef struct CMD_TC_StatusGet CMD_TC_StatusGet_t;
+
+/** Message ID for ACK_TC_StatusGet */
+#define ACK_TC_STATUSGET 0x0E22
+
+/**
+   Reporting of the used TC mode.
+*/
+typedef struct ACK_TC_StatusGet ACK_TC_StatusGet_t;
+
+/** Message ID for EVT_TC_StatusGet */
+#define EVT_TC_STATUSGET 0x0E22
+
+/**
+   This autonomous Event reports the to be used TC mode after being known. In R7
+   FW (w.7.x.y.z.a) only generated when enabled in CMD_Misc_ConfigSet TcTypeEvt.
+*/
+typedef struct EVT_TC_StatusGet EVT_TC_StatusGet_t;
+
+/** Message ID for CMD_TC_FW_InfoSet */
+#define CMD_TC_FW_INFOSET 0x1762
+
+/**
+   The message informs the DSL-FW about the currently loaded TC FW driver.
+*/
+typedef struct CMD_TC_FW_InfoSet CMD_TC_FW_InfoSet_t;
+
+/** Message ID for ACK_TC_FW_InfoSet */
+#define ACK_TC_FW_INFOSET 0x1762
+
+/**
+   Acknowledgement to CMD_TC_FW_InfoSet.
+*/
+typedef struct ACK_TC_FW_InfoSet ACK_TC_FW_InfoSet_t;
+
+/** Message ID for CMD_MAC_FrameConfigure */
+#define CMD_MAC_FRAMECONFIGURE 0x5348
+
+/**
+   The message configures Ethernet properties, currently the MAC address of the
+   device only.The MAC address is needed in the FW as "MAC source address"for
+   PDUs not built by the host, like e.g. for the Ethernet encapsulated
+   Backchannel Data ERB in Vectoring.
+*/
+typedef struct CMD_MAC_FrameConfigure CMD_MAC_FrameConfigure_t;
+
+/** Message ID for ACK_MAC_FrameConfigure */
+#define ACK_MAC_FRAMECONFIGURE 0x5348
+
+/**
+   Acknowledgement to CMD_MAC_FrameConfigure.
+*/
+typedef struct ACK_MAC_FrameConfigure ACK_MAC_FrameConfigure_t;
+
+/** Message ID for CMD_DataPathFailuresAlarmConfigure */
+#define CMD_DATAPATHFAILURESALARMCONFIGURE 0x1249
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific data-
+   path failures. If the corresponding Enable bit for a failure is set, then the
+   modem firmware will send an autonomous message ALM_DataPathFailuresGet if
+   this failure occurs.
+*/
+typedef struct CMD_DataPathFailuresAlarmConfigure CMD_DataPathFailuresAlarmConfigure_t;
+
+/** Message ID for ACK_DataPathFailuresAlarmConfigure */
+#define ACK_DATAPATHFAILURESALARMCONFIGURE 0x1249
+
+/**
+   Acknowledgement to CMD_DataPathFailuresAlarmConfigure.
+*/
+typedef struct ACK_DataPathFailuresAlarmConfigure ACK_DataPathFailuresAlarmConfigure_t;
+
+/** Message ID for CMD_DataPathFailuresGet */
+#define CMD_DATAPATHFAILURESGET 0x0507
+
+/**
+   Requests the data-path failure status.
+*/
+typedef struct CMD_DataPathFailuresGet CMD_DataPathFailuresGet_t;
+
+/** Message ID for ACK_DataPathFailuresGet */
+#define ACK_DATAPATHFAILURESGET 0x0507
+
+/**
+   Provides the data path failure status as requested by the command
+   CMD_DataPathFailuresGet.
+*/
+typedef struct ACK_DataPathFailuresGet ACK_DataPathFailuresGet_t;
+
+/** Message ID for ALM_DataPathFailuresGet */
+#define ALM_DATAPATHFAILURESGET 0x0507
+
+/**
+   This autonomous message reports the data-path failure status. It is sent only
+   if the message generation was enabled for the corresponding failure with
+   CMD_DataPathFailuresAlarmConfigure.
+*/
+typedef struct ALM_DataPathFailuresGet ALM_DataPathFailuresGet_t;
+
+/** Message ID for CMD_PTM_BC0_StatsNE_Get */
+#define CMD_PTM_BC0_STATSNE_GET 0x2D0A
+
+/**
+   Requests the values of the near-end PTM data path performance counters for
+   bearer channel 0 (BC0) as defined in G.997.1 (Section 7.2.5.1. of [11]).The
+   counters are total counters.
+*/
+typedef struct CMD_PTM_BC0_StatsNE_Get CMD_PTM_BC0_StatsNE_Get_t;
+
+/** Message ID for ACK_PTM_BC0_StatsNE_Get */
+#define ACK_PTM_BC0_STATSNE_GET 0x2D0A
+
+/**
+   Delivers the near-end total TPS-TC counter values for bearer channel 0 (BC0)
+   as requested by CMD_PTM_BC0_StatsNE_Get. (Section 7.2.5.1. of [11])
+*/
+typedef struct ACK_PTM_BC0_StatsNE_Get ACK_PTM_BC0_StatsNE_Get_t;
+
+/** Message ID for CMD_PTM_BC0_StatsNE_Set */
+#define CMD_PTM_BC0_STATSNE_SET 0x2D4A
+
+/**
+   Writes the TPS-TC CRC error and TPS-TC coding violation counters (Section
+   7.2.5.1. of G.997.1 [11]).Why writing these counters? For "automoding",
+   meaning modems configured to support both ADSL and VDLS with automatic mode
+   selection. The first retrain is always done with an ADSL FW independent of
+   what was loaded before. Therefore, the counters must be saved by the host
+   before destroying them by the FW download and are written back before the
+   next link start of a FW that supports PTM.
+*/
+typedef struct CMD_PTM_BC0_StatsNE_Set CMD_PTM_BC0_StatsNE_Set_t;
+
+/** Message ID for ACK_PTM_BC0_StatsNE_Set */
+#define ACK_PTM_BC0_STATSNE_SET 0x2D4A
+
+/**
+   Acknowledgement for the message CMD_PTM_BC0_StatsNE_Set.
+*/
+typedef struct ACK_PTM_BC0_StatsNE_Set ACK_PTM_BC0_StatsNE_Set_t;
+
+/** Message ID for CMD_ATM_BC0_StatsNE_Get */
+#define CMD_ATM_BC0_STATSNE_GET 0x2E0A
+
+/**
+   This command is used to request the near-end data-path performance counters
+   for BC0 of an ATM-TC link as defined in Section 7.2.4. of G.997.1 [11].
+*/
+typedef struct CMD_ATM_BC0_StatsNE_Get CMD_ATM_BC0_StatsNE_Get_t;
+
+/** Message ID for ACK_ATM_BC0_StatsNE_Get */
+#define ACK_ATM_BC0_STATSNE_GET 0x2E0A
+
+/**
+   Provides the total near-end ATM-TC performance counters for bearer channel 0
+   (BC0) as requested by the command CMD_ATM_BC0_StatsNE_Get.ADSL1/ADSL1 Lite
+   Fast Path reports its ATM -TC counters in this message too.
+*/
+typedef struct ACK_ATM_BC0_StatsNE_Get ACK_ATM_BC0_StatsNE_Get_t;
+
+/** Message ID for CMD_ATM_BC0_StatsFE_Get */
+#define CMD_ATM_BC0_STATSFE_GET 0x330A
+
+/**
+   This command is used to request the far-end data-path performance counters
+   for BC0 of an ATM-TC link as defined in Section 7.2.4.2 of G.997.1 [11].
+*/
+typedef struct CMD_ATM_BC0_StatsFE_Get CMD_ATM_BC0_StatsFE_Get_t;
+
+/** Message ID for ACK_ATM_BC0_StatsFE_Get */
+#define ACK_ATM_BC0_STATSFE_GET 0x330A
+
+/**
+   Provides the total near-end ATM-TC performance counters for bearer channel 0
+   (BC0) as requested by the command CMD_ATM_BC0_StatsFE_Get.
+*/
+typedef struct ACK_ATM_BC0_StatsFE_Get ACK_ATM_BC0_StatsFE_Get_t;
+
+/** Message ID for CMD_ATM_BC0_StatsNE_Set */
+#define CMD_ATM_BC0_STATSNE_SET 0x2E4A
+
+/**
+   Writes the data-path performance counters for bearer channel 0 (BC0) of an
+   ATM-TC link (Section 7.2.4. of G.997.1 [11]).Why writing counters? The ADSL
+   FW of the VRX destroys the performance counters at the beginning of a re-
+   initialization since it starts with a FW download. Therefore the host has to
+   save the counters in FAIL state before triggering a re-init. When
+   reconfiguring the system in RESET state, the host writes the saved values as
+   start values back into the counters. To do this for the ATM-TC counters, this
+   message is used.
+*/
+typedef struct CMD_ATM_BC0_StatsNE_Set CMD_ATM_BC0_StatsNE_Set_t;
+
+/** Message ID for ACK_ATM_BC0_StatsNE_Set */
+#define ACK_ATM_BC0_STATSNE_SET 0x2E4A
+
+/**
+   Acknowledgement for the message CMD_ATM_BC0_StatsNE_Set.
+*/
+typedef struct ACK_ATM_BC0_StatsNE_Set ACK_ATM_BC0_StatsNE_Set_t;
+
+/** Message ID for CMD_ATM_BC0_TxStatsNE_Get */
+#define CMD_ATM_BC0_TXSTATSNE_GET 0x350A
+
+/**
+   Requests near-end ATM datapath performance transmit counters for bearer
+   channel 0 (BC0).
+*/
+typedef struct CMD_ATM_BC0_TxStatsNE_Get CMD_ATM_BC0_TxStatsNE_Get_t;
+
+/** Message ID for ACK_ATM_BC0_TxStatsNE_Get */
+#define ACK_ATM_BC0_TXSTATSNE_GET 0x350A
+
+/**
+   Provides the ATM-TC transmit counters for beare channel 0 (BC0) as requested
+   by the command CMD_ATM_BC0_TxStatsNE_Get.ADSL1/ADSL1 Lite Fast Path reports
+   its ATM -TC counters in this message too.
+*/
+typedef struct ACK_ATM_BC0_TxStatsNE_Get ACK_ATM_BC0_TxStatsNE_Get_t;
+
+/** Message ID for CMD_ATM_BC0_TxStatsNE_Set */
+#define CMD_ATM_BC0_TXSTATSNE_SET 0x354A
+
+/**
+   Writes the transmit data-path counters for BC0 of an ATM-TC link.For "Why
+   writing performance counters" see Page 669.
+*/
+typedef struct CMD_ATM_BC0_TxStatsNE_Set CMD_ATM_BC0_TxStatsNE_Set_t;
+
+/** Message ID for ACK_ATM_BC0_TxStatsNE_Set */
+#define ACK_ATM_BC0_TXSTATSNE_SET 0x354A
+
+/**
+   Acknowledgement for the message CMD_ATM_BC0_TxStatsNE_Set.
+*/
+typedef struct ACK_ATM_BC0_TxStatsNE_Set ACK_ATM_BC0_TxStatsNE_Set_t;
+
+/** Message ID for CMD_VersionInfoGet */
+#define CMD_VERSIONINFOGET 0x0010
+
+/**
+   Requests version information from the VDSL2-Modem.
+*/
+typedef struct CMD_VersionInfoGet CMD_VersionInfoGet_t;
+
+/** Message ID for ACK_VersionInfoGet */
+#define ACK_VERSIONINFOGET 0x0010
+
+/**
+   Provides version information about hardware and firmware. The FW version
+   numbering scheme has a long and a short form (Table 368).
+*/
+typedef struct ACK_VersionInfoGet ACK_VersionInfoGet_t;
+
+/** Message ID for CMD_PPA_FwVersionSet */
+#define CMD_PPA_FWVERSIONSET 0x2362
+
+/**
+   Writes the PPA subsystem version to the DSL FW.
+*/
+typedef struct CMD_PPA_FwVersionSet CMD_PPA_FwVersionSet_t;
+
+/** Message ID for ACK_PPA_FwVersionSet */
+#define ACK_PPA_FWVERSIONSET 0x2362
+
+/**
+   Acknowledgement for message CMD_PPA_FwVersionSet.
+*/
+typedef struct ACK_PPA_FwVersionSet ACK_PPA_FwVersionSet_t;
+
+/** Message ID for CMD_PPA_FwVersionGet */
+#define CMD_PPA_FWVERSIONGET 0x2322
+
+/**
+   Requests the PPA Subsystem Version number (Read-back).
+*/
+typedef struct CMD_PPA_FwVersionGet CMD_PPA_FwVersionGet_t;
+
+/** Message ID for ACK_PPA_FwVersionGet */
+#define ACK_PPA_FWVERSIONGET 0x2322
+
+/**
+   Provides the PPA subsystem version. Read back of the value previously written
+   by CMD_PPA_FwVersionSet.
+*/
+typedef struct ACK_PPA_FwVersionGet ACK_PPA_FwVersionGet_t;
+
+/** Message ID for CMD_PPE_FwVersionGet */
+#define CMD_PPE_FWVERSIONGET 0x2422
+
+/**
+   Requests the PPE FW Version number.
+*/
+typedef struct CMD_PPE_FwVersionGet CMD_PPE_FwVersionGet_t;
+
+/** Message ID for ACK_PPE_FwVersionGet */
+#define ACK_PPE_FWVERSIONGET 0x2422
+
+/**
+   Provides the PPE FW version number.
+*/
+typedef struct ACK_PPE_FwVersionGet ACK_PPE_FwVersionGet_t;
+
+/** Message ID for CMD_ADSL_FeatureMapGet */
+#define CMD_ADSL_FEATUREMAPGET 0x1322
+
+/**
+   Requests the feature map indicating the ADSL FW features supported by this
+   binary.
+*/
+typedef struct CMD_ADSL_FeatureMapGet CMD_ADSL_FeatureMapGet_t;
+
+/** Message ID for ACK_ADSL_FeatureMapGet */
+#define ACK_ADSL_FEATUREMAPGET 0x1322
+
+/**
+   Reports the feature map indicating the ADSL FW features supported by this
+   binary.
+*/
+typedef struct ACK_ADSL_FeatureMapGet ACK_ADSL_FeatureMapGet_t;
+
+/** Message ID for CMD_VDSL_FeatureMapGet */
+#define CMD_VDSL_FEATUREMAPGET 0x1422
+
+/**
+   Requests the feature map indicating the VDSL FW features supported by this
+   binary.
+*/
+typedef struct CMD_VDSL_FeatureMapGet CMD_VDSL_FeatureMapGet_t;
+
+/** Message ID for ACK_VDSL_FeatureMapGet */
+#define ACK_VDSL_FEATUREMAPGET 0x1422
+
+/**
+   Reports the feature map indicating the VDSL FW features supported by this
+   binary.
+*/
+typedef struct ACK_VDSL_FeatureMapGet ACK_VDSL_FeatureMapGet_t;
+
+/** Message ID for CMD_PAF_HS_Control */
+#define CMD_PAF_HS_CONTROL 0x1148
+
+/**
+   The message is used to enable bonding (PAF) and to control the GHS
+   aggregation discovery and aggregation processes. The register numbers
+   referenced refer to IEEE 802.3ah [14], Clause 45.
+*/
+typedef struct CMD_PAF_HS_Control CMD_PAF_HS_Control_t;
+
+/** Message ID for ACK_PAF_HS_Control */
+#define ACK_PAF_HS_CONTROL 0x1148
+
+/**
+   The message acknowledges CMD_PAF_HS_Control.
+*/
+typedef struct ACK_PAF_HS_Control ACK_PAF_HS_Control_t;
+
+/** Message ID for CMD_PAF_HS_ControlGet */
+#define CMD_PAF_HS_CONTROLGET 0x1108
+
+/**
+   The message reads back settings for bonding configured with
+   CMD_PAF_HS_Control.
+*/
+typedef struct CMD_PAF_HS_ControlGet CMD_PAF_HS_ControlGet_t;
+
+/** Message ID for ACK_PAF_HS_ControlGet */
+#define ACK_PAF_HS_CONTROLGET 0x1108
+
+/**
+   The message acknowledges CMD_PAF_HS_ControlGet providing PAF bonding
+   parameters used in handshake as configured with CMD_PAF_HS_Control.
+*/
+typedef struct ACK_PAF_HS_ControlGet ACK_PAF_HS_ControlGet_t;
+
+/** Message ID for CMD_PAF_HS_StatusGet */
+#define CMD_PAF_HS_STATUSGET 0xDD03
+
+/**
+   The message requests aggregation discovery and aggregation status information
+   for EFM bonding.
+*/
+typedef struct CMD_PAF_HS_StatusGet CMD_PAF_HS_StatusGet_t;
+
+/** Message ID for ACK_PAF_HS_StatusGet */
+#define ACK_PAF_HS_STATUSGET 0xDD03
+
+/**
+   The message reports discovery and aggregation status information for EFM
+   bonding after request by CMD_PAF_HS_StatusGet.At the CPE side, the Host SW
+   concludes on a GET request if none of the following 4 bits are set:
+   discoveryClearIfSame, discoverySetIfClear, aggregClear , aggregSet. It does
+   not distinguish between "discovery GET" and "aggregation GET"; in case of any
+   "GET" both the discovery and the aggregation code are sent to the CO with the
+   CLR.
+*/
+typedef struct ACK_PAF_HS_StatusGet ACK_PAF_HS_StatusGet_t;
+
+/** Message ID for CMD_PAF_HS_Continue */
+#define CMD_PAF_HS_CONTINUE 0x0C62
+
+/**
+   The message writes the aggregation discovery code and the aggregation data
+   down to the FW and is used to trigger the CPE-FW to proceed in handshake
+   (sending CLR) after it had been waiting in GHS_BONDING_CLR state for the
+   necessary host interactions to be finished. These actions depend on the
+   request type (see ACK_PAF_HS_StatusGet): the processing of the remote
+   discovery register (for an aggregation discovery "Set If Clear" or "Clear If
+   Same" command) or PME Aggregate register (for an aggregation "Set" or "Clear"
+   command) in the SW and -in any case including a "Get" command - then updating
+   the local representations of both in the FW (which are sent to the CO in a
+   CLR).
+*/
+typedef struct CMD_PAF_HS_Continue CMD_PAF_HS_Continue_t;
+
+/** Message ID for ACK_PAF_HS_Continue */
+#define ACK_PAF_HS_CONTINUE 0x0C62
+
+/**
+   The message acknowledges CMD_PAF_HS_Continue.
+*/
+typedef struct ACK_PAF_HS_Continue ACK_PAF_HS_Continue_t;
+
+/** Message ID for CMD_PAF_PME_ID_Set */
+#define CMD_PAF_PME_ID_SET 0x5948
+
+/**
+   Sets the PME identification number. This number is transferred with the CLR
+   message to the CO.
+*/
+typedef struct CMD_PAF_PME_ID_Set CMD_PAF_PME_ID_Set_t;
+
+/** Message ID for ACK_PAF_PME_ID_Set */
+#define ACK_PAF_PME_ID_SET 0x5948
+
+/**
+   The message acknowledges CMD_PAF_PME_ID_Set.
+*/
+typedef struct ACK_PAF_PME_ID_Set ACK_PAF_PME_ID_Set_t;
+
+/**
+   The message reads the used TC.In ADSL the TC type is selected during G.HS and
+   thus known when entering FULL_INIT. In VDSL it is selected later, during
+   FULL_INIT. Before this point the FW will report the TC as "unknown".
+*/
+struct CMD_TC_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reporting of the used TC mode.
+*/
+struct ACK_TC_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Used */
+   DSL_uint16_t TC;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Used */
+   DSL_uint16_t TC;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autonomous Event reports the to be used TC mode after being known. In R7
+   FW (w.7.x.y.z.a) only generated when enabled in CMD_Misc_ConfigSet TcTypeEvt.
+*/
+struct EVT_TC_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Used */
+   DSL_uint16_t TC;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Used */
+   DSL_uint16_t TC;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message informs the DSL-FW about the currently loaded TC FW driver.
+*/
+struct CMD_TC_FW_InfoSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Loaded */
+   DSL_uint16_t loadedTC;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TC Loaded */
+   DSL_uint16_t loadedTC;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_TC_FW_InfoSet.
+*/
+struct ACK_TC_FW_InfoSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message configures Ethernet properties, currently the MAC address of the
+   device only.The MAC address is needed in the FW as "MAC source address"for
+   PDUs not built by the host, like e.g. for the Ethernet encapsulated
+   Backchannel Data ERB in Vectoring.
+*/
+struct CMD_MAC_FrameConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Source MAC Address Octets 0 to 1 */
+   DSL_uint16_t SrcMacAddrB0_1;
+   /** Source MAC Address Octets 2 to 3 */
+   DSL_uint16_t SrcMacAddrB2_3;
+   /** Source MAC Address Octets 4 to 5 */
+   DSL_uint16_t SrcMacAddrB4_5;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Source MAC Address Octets 0 to 1 */
+   DSL_uint16_t SrcMacAddrB0_1;
+   /** Source MAC Address Octets 2 to 3 */
+   DSL_uint16_t SrcMacAddrB2_3;
+   /** Source MAC Address Octets 4 to 5 */
+   DSL_uint16_t SrcMacAddrB4_5;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_MAC_FrameConfigure.
+*/
+struct ACK_MAC_FrameConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Enables/Disables the generation of ALARM messages (ALM) for specific data-
+   path failures. If the corresponding Enable bit for a failure is set, then the
+   modem firmware will send an autonomous message ALM_DataPathFailuresGet if
+   this failure occurs.
+*/
+struct CMD_DataPathFailuresAlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement to CMD_DataPathFailuresAlarmConfigure.
+*/
+struct ACK_DataPathFailuresAlarmConfigure
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the data-path failure status.
+*/
+struct CMD_DataPathFailuresGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the data path failure status as requested by the command
+   CMD_DataPathFailuresGet.
+*/
+struct ACK_DataPathFailuresGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This autonomous message reports the data-path failure status. It is sent only
+   if the message generation was enabled for the corresponding failure with
+   CMD_DataPathFailuresAlarmConfigure.
+*/
+struct ALM_DataPathFailuresGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** OOS Failure NE, BC0 */
+   DSL_uint16_t OOS_NE_BC0 : 1;
+   /** OOS Failure NE, BC1 */
+   DSL_uint16_t OOS_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 6;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC0 : 1;
+   /** OOS Failure FE, BC0 */
+   DSL_uint16_t OOS_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 6;
+   /** NCD Failure NE, BC0 */
+   DSL_uint16_t NCD_NE_BC0 : 1;
+   /** LCD Failure NE, BC0 */
+   DSL_uint16_t LCD_NE_BC0 : 1;
+   /** NCD Failure NE, BC1 */
+   DSL_uint16_t NCD_NE_BC1 : 1;
+   /** LCD Failure NE, BC1 */
+   DSL_uint16_t LCD_NE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 4;
+   /** NCD Failure FE, BC0 */
+   DSL_uint16_t NCD_FE_BC0 : 1;
+   /** LCD Failure FE, BC0 */
+   DSL_uint16_t LCD_FE_BC0 : 1;
+   /** NCD Failure FE, BC1 */
+   DSL_uint16_t NCD_FE_BC1 : 1;
+   /** LCD Failure FE, BC1 */
+   DSL_uint16_t LCD_FE_BC1 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 4;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the values of the near-end PTM data path performance counters for
+   bearer channel 0 (BC0) as defined in G.997.1 (Section 7.2.5.1. of [11]).The
+   counters are total counters.
+*/
+struct CMD_PTM_BC0_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Delivers the near-end total TPS-TC counter values for bearer channel 0 (BC0)
+   as requested by CMD_PTM_BC0_StatsNE_Get. (Section 7.2.5.1. of [11])
+*/
+struct ACK_PTM_BC0_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRC_LSW;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRC_MSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, LSW */
+   DSL_uint16_t cntCV_LSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, MSW */
+   DSL_uint16_t cntCV_MSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRCP_LSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRCP_MSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCVP_LSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCVP_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRC_LSW;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRC_MSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, LSW */
+   DSL_uint16_t cntCV_LSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, MSW */
+   DSL_uint16_t cntCV_MSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRCP_LSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRCP_MSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCVP_LSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCVP_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes the TPS-TC CRC error and TPS-TC coding violation counters (Section
+   7.2.5.1. of G.997.1 [11]).Why writing these counters? For "automoding",
+   meaning modems configured to support both ADSL and VDLS with automatic mode
+   selection. The first retrain is always done with an ADSL FW independent of
+   what was loaded before. Therefore, the counters must be saved by the host
+   before destroying them by the FW download and are written back before the
+   next link start of a FW that supports PTM.
+*/
+struct CMD_PTM_BC0_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRC_LSW;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRC_MSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, LSW */
+   DSL_uint16_t cntCV_LSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, MSW */
+   DSL_uint16_t cntCV_MSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRCP_LSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRCP_MSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCVP_LSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCVP_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRC_LSW;
+   /** TPS-TC CRC Counter (CRC-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRC_MSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, LSW */
+   DSL_uint16_t cntCV_LSW;
+   /** TPS-TC CV Counter (CV-P), NE, BC0, MSW */
+   DSL_uint16_t cntCV_MSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCRCP_LSW;
+   /** TPS-TC CRC Counter (CRCP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCRCP_MSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, LSW */
+   DSL_uint16_t cntCVP_LSW;
+   /** TPS-TC CV Counter (CVP-P), NE, BC0, MSW */
+   DSL_uint16_t cntCVP_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_PTM_BC0_StatsNE_Set.
+*/
+struct ACK_PTM_BC0_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This command is used to request the near-end data-path performance counters
+   for BC0 of an ATM-TC link as defined in Section 7.2.4. of G.997.1 [11].
+*/
+struct CMD_ATM_BC0_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the total near-end ATM-TC performance counters for bearer channel 0
+   (BC0) as requested by the command CMD_ATM_BC0_StatsNE_Get.ADSL1/ADSL1 Lite
+   Fast Path reports its ATM -TC counters in this message too.
+*/
+struct ACK_ATM_BC0_StatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** NE HEC Violation Count (HEC-P), LSW */
+   DSL_uint16_t hecp_LSW;
+   /** NE HEC Violation Count (HEC-P), MSW */
+   DSL_uint16_t hecp_MSW;
+   /** NE Delineated Total Cell Count (CD-P), LSW */
+   DSL_uint16_t cdp_LSW;
+   /** NE Delineated Total Cell Count (CD-P), MSW */
+   DSL_uint16_t cdp_MSW;
+   /** NE User Total Cell Count (CU-P), LSW */
+   DSL_uint16_t cup_LSW;
+   /** NE User Total Cell Count (CU-P), MSW */
+   DSL_uint16_t cup_MSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), LSW */
+   DSL_uint16_t ibep_LSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), MSW */
+   DSL_uint16_t ibep_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** NE HEC Violation Count (HEC-P), LSW */
+   DSL_uint16_t hecp_LSW;
+   /** NE HEC Violation Count (HEC-P), MSW */
+   DSL_uint16_t hecp_MSW;
+   /** NE Delineated Total Cell Count (CD-P), LSW */
+   DSL_uint16_t cdp_LSW;
+   /** NE Delineated Total Cell Count (CD-P), MSW */
+   DSL_uint16_t cdp_MSW;
+   /** NE User Total Cell Count (CU-P), LSW */
+   DSL_uint16_t cup_LSW;
+   /** NE User Total Cell Count (CU-P), MSW */
+   DSL_uint16_t cup_MSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), LSW */
+   DSL_uint16_t ibep_LSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), MSW */
+   DSL_uint16_t ibep_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   This command is used to request the far-end data-path performance counters
+   for BC0 of an ATM-TC link as defined in Section 7.2.4.2 of G.997.1 [11].
+*/
+struct CMD_ATM_BC0_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the total near-end ATM-TC performance counters for bearer channel 0
+   (BC0) as requested by the command CMD_ATM_BC0_StatsFE_Get.
+*/
+struct ACK_ATM_BC0_StatsFE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** FE HEC Violation Count (HEC-PFE), LSW */
+   DSL_uint16_t hecpfe_LSW;
+   /** FE HEC Violation Count (HEC-PFE), MSW */
+   DSL_uint16_t hecpfe_MSW;
+   /** FE Delineated Total Cell Count (CD-PFE), LSW */
+   DSL_uint16_t cdpfe_LSW;
+   /** FE Delineated Total Cell Count (CD-PFE), MSW */
+   DSL_uint16_t cdpfe_MSW;
+   /** FE User Total Cell Count (CU-PFE), LSW */
+   DSL_uint16_t cupfe_LSW;
+   /** FE User Total Cell Count (CU-PFE), MSW */
+   DSL_uint16_t cupfe_MSW;
+   /** FE Idle Cell Bit Error Count (IBE-PFE), LSW */
+   DSL_uint16_t ibepfe_LSW;
+   /** FE Idle Cell Bit Error Count (IBE-PFE), MSW */
+   DSL_uint16_t ibepfe_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** FE HEC Violation Count (HEC-PFE), LSW */
+   DSL_uint16_t hecpfe_LSW;
+   /** FE HEC Violation Count (HEC-PFE), MSW */
+   DSL_uint16_t hecpfe_MSW;
+   /** FE Delineated Total Cell Count (CD-PFE), LSW */
+   DSL_uint16_t cdpfe_LSW;
+   /** FE Delineated Total Cell Count (CD-PFE), MSW */
+   DSL_uint16_t cdpfe_MSW;
+   /** FE User Total Cell Count (CU-PFE), LSW */
+   DSL_uint16_t cupfe_LSW;
+   /** FE User Total Cell Count (CU-PFE), MSW */
+   DSL_uint16_t cupfe_MSW;
+   /** FE Idle Cell Bit Error Count (IBE-PFE), LSW */
+   DSL_uint16_t ibepfe_LSW;
+   /** FE Idle Cell Bit Error Count (IBE-PFE), MSW */
+   DSL_uint16_t ibepfe_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes the data-path performance counters for bearer channel 0 (BC0) of an
+   ATM-TC link (Section 7.2.4. of G.997.1 [11]).Why writing counters? The ADSL
+   FW of the VRX destroys the performance counters at the beginning of a re-
+   initialization since it starts with a FW download. Therefore the host has to
+   save the counters in FAIL state before triggering a re-init. When
+   reconfiguring the system in RESET state, the host writes the saved values as
+   start values back into the counters. To do this for the ATM-TC counters, this
+   message is used.
+*/
+struct CMD_ATM_BC0_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** NE HEC Violation Count (HEC-P), LSW */
+   DSL_uint16_t hecp_LSW;
+   /** NE HEC Violation Count (HEC-P), MSW */
+   DSL_uint16_t hecp_MSW;
+   /** NE Delineated Total Cell Count (CD-P), LSW */
+   DSL_uint16_t cdp_LSW;
+   /** NE Delineated Total Cell Count (CD-P), MSW */
+   DSL_uint16_t cdp_MSW;
+   /** NE User Total Cell Count (CU-P), LSW */
+   DSL_uint16_t cup_LSW;
+   /** NE User Total Cell Count (CU-P), MSW */
+   DSL_uint16_t cup_MSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), LSW */
+   DSL_uint16_t ibep_LSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), MSW */
+   DSL_uint16_t ibep_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** NE HEC Violation Count (HEC-P), LSW */
+   DSL_uint16_t hecp_LSW;
+   /** NE HEC Violation Count (HEC-P), MSW */
+   DSL_uint16_t hecp_MSW;
+   /** NE Delineated Total Cell Count (CD-P), LSW */
+   DSL_uint16_t cdp_LSW;
+   /** NE Delineated Total Cell Count (CD-P), MSW */
+   DSL_uint16_t cdp_MSW;
+   /** NE User Total Cell Count (CU-P), LSW */
+   DSL_uint16_t cup_LSW;
+   /** NE User Total Cell Count (CU-P), MSW */
+   DSL_uint16_t cup_MSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), LSW */
+   DSL_uint16_t ibep_LSW;
+   /** NE Idle Cell Bit Error Count (IBE-P), MSW */
+   DSL_uint16_t ibep_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_ATM_BC0_StatsNE_Set.
+*/
+struct ACK_ATM_BC0_StatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests near-end ATM datapath performance transmit counters for bearer
+   channel 0 (BC0).
+*/
+struct CMD_ATM_BC0_TxStatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the ATM-TC transmit counters for beare channel 0 (BC0) as requested
+   by the command CMD_ATM_BC0_TxStatsNE_Get.ADSL1/ADSL1 Lite Fast Path reports
+   its ATM -TC counters in this message too.
+*/
+struct ACK_ATM_BC0_TxStatsNE_Get
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-end TX User Cell Count (TxCU), Current Period, LSW */
+   DSL_uint16_t TxCU_LSW;
+   /** Near-end TX User Cell Count (TxCU), Current Period, MSW */
+   DSL_uint16_t TxCU_MSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, LSW */
+   DSL_uint16_t TxIdle_LSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, MSW */
+   DSL_uint16_t TxIdle_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-end TX User Cell Count (TxCU), Current Period, LSW */
+   DSL_uint16_t TxCU_LSW;
+   /** Near-end TX User Cell Count (TxCU), Current Period, MSW */
+   DSL_uint16_t TxCU_MSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, LSW */
+   DSL_uint16_t TxIdle_LSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, MSW */
+   DSL_uint16_t TxIdle_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes the transmit data-path counters for BC0 of an ATM-TC link.For "Why
+   writing performance counters" see Page 669.
+*/
+struct CMD_ATM_BC0_TxStatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-end TX User Cell Count (TxCU), Current Period, LSW */
+   DSL_uint16_t TxCU_LSW;
+   /** Near-end TX User Cell Count (TxCU), Current Period, MSW */
+   DSL_uint16_t TxCU_MSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, LSW */
+   DSL_uint16_t TxIdle_LSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, MSW */
+   DSL_uint16_t TxIdle_MSW;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Near-end TX User Cell Count (TxCU), Current Period, LSW */
+   DSL_uint16_t TxCU_LSW;
+   /** Near-end TX User Cell Count (TxCU), Current Period, MSW */
+   DSL_uint16_t TxCU_MSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, LSW */
+   DSL_uint16_t TxIdle_LSW;
+   /** Near-end TX Idle Cell Count (TxIdle), Current Period, MSW */
+   DSL_uint16_t TxIdle_MSW;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for the message CMD_ATM_BC0_TxStatsNE_Set.
+*/
+struct ACK_ATM_BC0_TxStatsNE_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests version information from the VDSL2-Modem.
+*/
+struct CMD_VersionInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides version information about hardware and firmware. The FW version
+   numbering scheme has a long and a short form (Table 368).
+*/
+struct ACK_VersionInfoGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hardware Version Number */
+   DSL_uint32_t HW_Version;
+   /** Reserved */
+   DSL_uint32_t Res0;
+   /** Firmware Version Number (Long) */
+   DSL_uint32_t FW_Version;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Hardware Version Number */
+   DSL_uint32_t HW_Version;
+   /** Reserved */
+   DSL_uint32_t Res0;
+   /** Firmware Version Number (Long) */
+   DSL_uint32_t FW_Version;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Writes the PPA subsystem version to the DSL FW.
+*/
+struct CMD_PPA_FwVersionSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPA Subsystem Version Number, LSW, 3. Digit */
+   DSL_uint16_t SubSysVer3 : 8;
+   /** PPA Subsystem Version Number, LSW, 4. Digit */
+   DSL_uint16_t SubSysVer4 : 8;
+   /** PPA Subsystem Version Number, MSW, 1. Digit */
+   DSL_uint16_t SubSysVer1 : 8;
+   /** PPA Subsystem Version Number, MSW, 2. Digit */
+   DSL_uint16_t SubSysVer2 : 8;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPA Subsystem Version Number, LSW, 4. Digit */
+   DSL_uint16_t SubSysVer4 : 8;
+   /** PPA Subsystem Version Number, LSW, 3. Digit */
+   DSL_uint16_t SubSysVer3 : 8;
+   /** PPA Subsystem Version Number, MSW, 2. Digit */
+   DSL_uint16_t SubSysVer2 : 8;
+   /** PPA Subsystem Version Number, MSW, 1. Digit */
+   DSL_uint16_t SubSysVer1 : 8;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Acknowledgement for message CMD_PPA_FwVersionSet.
+*/
+struct ACK_PPA_FwVersionSet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the PPA Subsystem Version number (Read-back).
+*/
+struct CMD_PPA_FwVersionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the PPA subsystem version. Read back of the value previously written
+   by CMD_PPA_FwVersionSet.
+*/
+struct ACK_PPA_FwVersionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPA Subsystem Version Number, LSW, 3. Digit */
+   DSL_uint16_t SubSysVer3 : 8;
+   /** PPA Subsystem Version Number, LSW, 4. Digit */
+   DSL_uint16_t SubSysVer4 : 8;
+   /** PPA Subsystem Version Number, MSW, 1. Digit */
+   DSL_uint16_t SubSysVer1 : 8;
+   /** PPA Subsystem Version Number, MSW, 2. Digit */
+   DSL_uint16_t SubSysVer2 : 8;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPA Subsystem Version Number, LSW, 4. Digit */
+   DSL_uint16_t SubSysVer4 : 8;
+   /** PPA Subsystem Version Number, LSW, 3. Digit */
+   DSL_uint16_t SubSysVer3 : 8;
+   /** PPA Subsystem Version Number, MSW, 2. Digit */
+   DSL_uint16_t SubSysVer2 : 8;
+   /** PPA Subsystem Version Number, MSW, 1. Digit */
+   DSL_uint16_t SubSysVer1 : 8;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the PPE FW Version number.
+*/
+struct CMD_PPE_FwVersionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Provides the PPE FW version number.
+*/
+struct ACK_PPE_FwVersionGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 8;
+   /** PPE FW Version Number, 1. Digit */
+   DSL_uint16_t PpeFwVer1 : 8;
+   /** PPE FW Version Number, 2. Digit */
+   DSL_uint16_t PpeFwVer2 : 8;
+   /** PPE FW Version Number, 3. Digit */
+   DSL_uint16_t PpeFwVer3 : 8;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PPE FW Version Number, 1. Digit */
+   DSL_uint16_t PpeFwVer1 : 8;
+   /** Reserved */
+   DSL_uint16_t Res0 : 8;
+   /** PPE FW Version Number, 3. Digit */
+   DSL_uint16_t PpeFwVer3 : 8;
+   /** PPE FW Version Number, 2. Digit */
+   DSL_uint16_t PpeFwVer2 : 8;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the feature map indicating the ADSL FW features supported by this
+   binary.
+*/
+struct CMD_ADSL_FeatureMapGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the feature map indicating the ADSL FW features supported by this
+   binary.
+*/
+struct ACK_ADSL_FeatureMapGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Feature Map Length */
+   DSL_uint16_t FeatMapLen;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** Feature-Bit12  */
+   DSL_uint16_t W0F12 : 1;
+   /** Feature-Bit11 of Word 0: NTR */
+   DSL_uint16_t W0F11 : 1;
+   /** Feature-Bit10 of Word 0:  CIPolicy */
+   DSL_uint16_t W0F10 : 1;
+   /** Feature-Bit9 of Word 0:  Pre-emption & Short Packets  */
+   DSL_uint16_t W0F09 : 1;
+   /** Feature-Bit8 of Word 0:  Counter Inhibiting */
+   DSL_uint16_t W0F08 : 1;
+   /** Feature-Bit7 of Word 0: Short Init */
+   DSL_uint16_t W0F07 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Feature-Bit5 of Word 0:  G.INP Retransmission DS + SRA */
+   DSL_uint16_t W0F05 : 1;
+   /** Feature-Bit4 of Word 0:  G.INP Retransmission DS + Bonding (EFM) */
+   DSL_uint16_t W0F04 : 1;
+   /** Feature-Bit3 of Word 0:PTM Off-chip Bonding BACP */
+   DSL_uint16_t W0F03 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 2;
+   /** Feature-Bit0 of Word 0: Annex I */
+   DSL_uint16_t W0F00 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 16;
+   /** Reserved  */
+   DSL_uint16_t Res4 : 16;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Feature Map Length */
+   DSL_uint16_t FeatMapLen;
+   /** Feature-Bit0 of Word 0: Annex I */
+   DSL_uint16_t W0F00 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 2;
+   /** Feature-Bit3 of Word 0:PTM Off-chip Bonding BACP */
+   DSL_uint16_t W0F03 : 1;
+   /** Feature-Bit4 of Word 0:  G.INP Retransmission DS + Bonding (EFM) */
+   DSL_uint16_t W0F04 : 1;
+   /** Feature-Bit5 of Word 0:  G.INP Retransmission DS + SRA */
+   DSL_uint16_t W0F05 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Feature-Bit7 of Word 0: Short Init */
+   DSL_uint16_t W0F07 : 1;
+   /** Feature-Bit8 of Word 0:  Counter Inhibiting */
+   DSL_uint16_t W0F08 : 1;
+   /** Feature-Bit9 of Word 0:  Pre-emption & Short Packets  */
+   DSL_uint16_t W0F09 : 1;
+   /** Feature-Bit10 of Word 0:  CIPolicy */
+   DSL_uint16_t W0F10 : 1;
+   /** Feature-Bit11 of Word 0: NTR */
+   DSL_uint16_t W0F11 : 1;
+   /** Feature-Bit12  */
+   DSL_uint16_t W0F12 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** Reserved */
+   DSL_uint16_t Res3 : 16;
+   /** Reserved  */
+   DSL_uint16_t Res4 : 16;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Requests the feature map indicating the VDSL FW features supported by this
+   binary.
+*/
+struct CMD_VDSL_FeatureMapGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Reports the feature map indicating the VDSL FW features supported by this
+   binary.
+*/
+struct ACK_VDSL_FeatureMapGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Feature Map Length */
+   DSL_uint16_t FeatMapLen;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** Feature-Bit12  */
+   DSL_uint16_t W0F12 : 1;
+   /** Feature-Bit11 of Word 0: NTR */
+   DSL_uint16_t W0F11 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Feature-Bit9 of Word 0: Pre-emption & Short Packets  */
+   DSL_uint16_t W0F09 : 1;
+   /** Feature-Bit8 of Word 0: Erasure Decoding /FORCEINP */
+   DSL_uint16_t W0F08 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Feature-Bit6 of Word 0: Intra DTU Interleaving US */
+   DSL_uint16_t W0F06 : 1;
+   /** Feature-Bit5 of Word 0: Intra DTU Interleaving DS */
+   DSL_uint16_t W0F05 : 1;
+   /** Feature-Bit4 of Word 0: G.INP Retransmission US + DS + PAF (VDSL only) */
+   DSL_uint16_t W0F04 : 1;
+   /** Feature-Bit3 of Word 0: PTM Off-chip Bonding BACP */
+   DSL_uint16_t W0F03 : 1;
+   /** Feature-Bit2 of Word 2: Microfilter Detection and Hybrid Data */
+   DSL_uint16_t W2F02 : 1;
+   /** Reserved */
+   DSL_uint16_t Res3 : 2;
+   /** Reserved */
+   DSL_uint16_t Res4 : 16;
+   /** Reserved  */
+   DSL_uint16_t Res5 : 16;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Feature Map Length */
+   DSL_uint16_t FeatMapLen;
+   /** Reserved */
+   DSL_uint16_t Res3 : 2;
+   /** Feature-Bit2 of Word 2: Microfilter Detection and Hybrid Data */
+   DSL_uint16_t W2F02 : 1;
+   /** Feature-Bit3 of Word 0: PTM Off-chip Bonding BACP */
+   DSL_uint16_t W0F03 : 1;
+   /** Feature-Bit4 of Word 0: G.INP Retransmission US + DS + PAF (VDSL only) */
+   DSL_uint16_t W0F04 : 1;
+   /** Feature-Bit5 of Word 0: Intra DTU Interleaving DS */
+   DSL_uint16_t W0F05 : 1;
+   /** Feature-Bit6 of Word 0: Intra DTU Interleaving US */
+   DSL_uint16_t W0F06 : 1;
+   /** Reserved */
+   DSL_uint16_t Res2 : 1;
+   /** Feature-Bit8 of Word 0: Erasure Decoding /FORCEINP */
+   DSL_uint16_t W0F08 : 1;
+   /** Feature-Bit9 of Word 0: Pre-emption & Short Packets  */
+   DSL_uint16_t W0F09 : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 1;
+   /** Feature-Bit11 of Word 0: NTR */
+   DSL_uint16_t W0F11 : 1;
+   /** Feature-Bit12  */
+   DSL_uint16_t W0F12 : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 3;
+   /** Reserved */
+   DSL_uint16_t Res4 : 16;
+   /** Reserved  */
+   DSL_uint16_t Res5 : 16;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message is used to enable bonding (PAF) and to control the GHS
+   aggregation discovery and aggregation processes. The register numbers
+   referenced refer to IEEE 802.3ah [14], Clause 45.
+*/
+struct CMD_PAF_HS_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** PCS Control Register (Register 3.61, Bit 0) */
+   DSL_uint16_t PAF_Enable : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PCS Control Register (Register 3.61, Bit 0) */
+   DSL_uint16_t PAF_Enable : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message acknowledges CMD_PAF_HS_Control.
+*/
+struct ACK_PAF_HS_Control
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message reads back settings for bonding configured with
+   CMD_PAF_HS_Control.
+*/
+struct CMD_PAF_HS_ControlGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message acknowledges CMD_PAF_HS_ControlGet providing PAF bonding
+   parameters used in handshake as configured with CMD_PAF_HS_Control.
+*/
+struct ACK_PAF_HS_ControlGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** PCS Control Register (Register 3.61, Bit 0) */
+   DSL_uint16_t PAF_Enable : 1;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PCS Control Register (Register 3.61, Bit 0) */
+   DSL_uint16_t PAF_Enable : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message requests aggregation discovery and aggregation status information
+   for EFM bonding.
+*/
+struct CMD_PAF_HS_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message reports discovery and aggregation status information for EFM
+   bonding after request by CMD_PAF_HS_StatusGet.At the CPE side, the Host SW
+   concludes on a GET request if none of the following 4 bits are set:
+   discoveryClearIfSame, discoverySetIfClear, aggregClear , aggregSet. It does
+   not distinguish between "discovery GET" and "aggregation GET"; in case of any
+   "GET" both the discovery and the aggregation code are sent to the CO with the
+   CLR.
+*/
+struct ACK_PAF_HS_StatusGet
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 9;
+   /** Discovery Clear-If-Same */
+   DSL_uint16_t discoveryClearIfSame : 1;
+   /** Discovery Set-If-Clear */
+   DSL_uint16_t discoverySetIfClear : 1;
+   /** Aggregation Clear */
+   DSL_uint16_t aggregClear : 1;
+   /** Aggregation Set */
+   DSL_uint16_t aggregSet : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** PCS Control Register (Register 3.60, Bit 12) */
+   DSL_uint16_t PAF_Enable : 1;
+   /** Aggregation Discovery Code (Register 6.18) */
+   DSL_uint16_t discoveryCode1;
+   /** Aggregation Discovery Code (Registers 6.19) */
+   DSL_uint16_t discoveryCode2;
+   /** Aggregation Discovery Code (Registers 6.20) */
+   DSL_uint16_t discoveryCode3;
+   /** Partner PME Aggregate Data (Registers 6.22) */
+   DSL_uint16_t aggregateData1;
+   /** Partner PME Aggregate Data (Registers 6.23) */
+   DSL_uint16_t aggregateData2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PCS Control Register (Register 3.60, Bit 12) */
+   DSL_uint16_t PAF_Enable : 1;
+   /** Reserved */
+   DSL_uint16_t Res1 : 2;
+   /** Aggregation Set */
+   DSL_uint16_t aggregSet : 1;
+   /** Aggregation Clear */
+   DSL_uint16_t aggregClear : 1;
+   /** Discovery Set-If-Clear */
+   DSL_uint16_t discoverySetIfClear : 1;
+   /** Discovery Clear-If-Same */
+   DSL_uint16_t discoveryClearIfSame : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 9;
+   /** Aggregation Discovery Code (Register 6.18) */
+   DSL_uint16_t discoveryCode1;
+   /** Aggregation Discovery Code (Registers 6.19) */
+   DSL_uint16_t discoveryCode2;
+   /** Aggregation Discovery Code (Registers 6.20) */
+   DSL_uint16_t discoveryCode3;
+   /** Partner PME Aggregate Data (Registers 6.22) */
+   DSL_uint16_t aggregateData1;
+   /** Partner PME Aggregate Data (Registers 6.23) */
+   DSL_uint16_t aggregateData2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message writes the aggregation discovery code and the aggregation data
+   down to the FW and is used to trigger the CPE-FW to proceed in handshake
+   (sending CLR) after it had been waiting in GHS_BONDING_CLR state for the
+   necessary host interactions to be finished. These actions depend on the
+   request type (see ACK_PAF_HS_StatusGet): the processing of the remote
+   discovery register (for an aggregation discovery "Set If Clear" or "Clear If
+   Same" command) or PME Aggregate register (for an aggregation "Set" or "Clear"
+   command) in the SW and -in any case including a "Get" command - then updating
+   the local representations of both in the FW (which are sent to the CO in a
+   CLR).
+*/
+struct CMD_PAF_HS_Continue
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** Continue Trigger */
+   DSL_uint16_t trigger : 1;
+   /** Aggregation Discovery Code (Register 6.18) */
+   DSL_uint16_t discoveryCode1;
+   /** Aggregation Discovery Code (Registers 6.19) */
+   DSL_uint16_t discoveryCode2;
+   /** Aggregation Discovery Code (Registers 6.20) */
+   DSL_uint16_t discoveryCode3;
+   /** Partner PME Aggregate Data (Registers 6.22) */
+   DSL_uint16_t aggregateData1;
+   /** Partner PME Aggregate Data (Registers 6.23) */
+   DSL_uint16_t aggregateData2;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** Continue Trigger */
+   DSL_uint16_t trigger : 1;
+   /** Reserved */
+   DSL_uint16_t Res0 : 15;
+   /** Aggregation Discovery Code (Register 6.18) */
+   DSL_uint16_t discoveryCode1;
+   /** Aggregation Discovery Code (Registers 6.19) */
+   DSL_uint16_t discoveryCode2;
+   /** Aggregation Discovery Code (Registers 6.20) */
+   DSL_uint16_t discoveryCode3;
+   /** Partner PME Aggregate Data (Registers 6.22) */
+   DSL_uint16_t aggregateData1;
+   /** Partner PME Aggregate Data (Registers 6.23) */
+   DSL_uint16_t aggregateData2;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message acknowledges CMD_PAF_HS_Continue.
+*/
+struct ACK_PAF_HS_Continue
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+/**
+   Sets the PME identification number. This number is transferred with the CLR
+   message to the CO.
+*/
+struct CMD_PAF_PME_ID_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PME ID */
+   DSL_uint16_t PmeId;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+   /** PME ID */
+   DSL_uint16_t PmeId;
+#endif
+} __PACKED__ ;
+
+
+/**
+   The message acknowledges CMD_PAF_PME_ID_Set.
+*/
+struct ACK_PAF_PME_ID_Set
+{
+#if DSL_BYTE_ORDER == DSL_BIG_ENDIAN
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#else
+   /** Index */
+   DSL_uint16_t Index;
+   /** Length */
+   DSL_uint16_t Length;
+#endif
+} __PACKED__ ;
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __PACKED_DEFINED__
+   #if !(defined (__GNUC__) || defined (__GNUG__))
+      #pragma pack()
+   #endif
+   #undef __PACKED_DEFINED__
+#endif /* __PACKED_DEFINED__ */
+
+/** @} */
+
+#endif /** _DRV_DSL_CPE_VRX_MSG_TC_COUNTERS_H_*/
diff --git a/src/pm/drv_dsl_cpe_api_pm.c b/src/pm/drv_dsl_cpe_api_pm.c
index 97b86c59de2b65c6c01d1a2e53796c33c596696d..dd45d24edf2a9e86c41e9230dca43550c3f2ff89 100644
--- a/src/pm/drv_dsl_cpe_api_pm.c
+++ b/src/pm/drv_dsl_cpe_api_pm.c
@@ -195,6 +195,8 @@ DSL_Error_t DSL_DRV_PM_Start(
       (DSL_PM_CountersData_t*)DSL_DRV_Malloc(sizeof(DSL_PM_CountersData_t));
    if (DSL_DRV_PM_CONTEXT(pContext)->pCounters == DSL_NULL)
    {
+      DSL_DRV_MemFree(pContext->PM);
+
       DSL_DEBUG(DSL_DBG_ERR,
          (pContext, SYS_DBG_ERR"DSL[%02d]: PM_Start: no memory for PM counters!"
          DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
@@ -207,6 +209,9 @@ DSL_Error_t DSL_DRV_PM_Start(
       (DSL_PM_CountersDump_t*)DSL_DRV_Malloc(sizeof(DSL_PM_CountersDump_t));
    if (DSL_DRV_PM_CONTEXT(pContext)->pCountersDump == DSL_NULL)
    {
+      DSL_DRV_MemFree(DSL_DRV_PM_CONTEXT(pContext)->pCounters);
+      DSL_DRV_MemFree(pContext->PM);
+
       DSL_DEBUG(DSL_DBG_ERR,
          (pContext, SYS_DBG_ERR"DSL[%02d]: PM_Start: no memory for PM dump counters!"
          DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
@@ -503,6 +508,10 @@ DSL_Error_t DSL_DRV_PM_Start(
    /* Initialize PM module device specific parameters*/
    if( DSL_DRV_PM_DEV_Start(pContext) != DSL_SUCCESS )
    {
+      DSL_DRV_MemFree(DSL_DRV_PM_CONTEXT(pContext)->pCounters);
+      DSL_DRV_MemFree(DSL_DRV_PM_CONTEXT(pContext)->pCountersDump);
+      DSL_DRV_MemFree(pContext->PM);
+
       DSL_DEBUG(DSL_DBG_ERR,
          (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - PM module device specific init failed!"
          DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
@@ -547,6 +556,19 @@ DSL_Error_t DSL_DRV_PM_Start(
          DSL_DRV_CRLF, DSL_DEV_NUM(pContext), nErrCode));
    }
 
+   /* Check the PM module Near-End and Far-End thread active flag */
+   if( DSL_DRV_PM_CONTEXT(pContext)->pmThreadFe.bRun == DSL_FALSE &&
+       DSL_DRV_PM_CONTEXT(pContext)->pmThreadNe.bRun == DSL_FALSE )
+   {
+      DSL_DEBUG(DSL_DBG_ERR,
+         (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - PM module NE and FE threads start failed!"
+         DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
+
+      DSL_DRV_MemFree(DSL_DRV_PM_CONTEXT(pContext)->pCounters);
+      DSL_DRV_MemFree(DSL_DRV_PM_CONTEXT(pContext)->pCountersDump);
+      DSL_DRV_MemFree(pContext->PM);
+   }
+
    DSL_DEBUG(DSL_DBG_MSG,
       (pContext, SYS_DBG_MSG"DSL[%02d]: PM module started..." DSL_DRV_CRLF,
       DSL_DEV_NUM(pContext)));