[PATCH 415/641] Staging: remove epl driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is no longer maintained upstream, and no one cares about it at all,
so delete it.

The fact that it is duplicating an existing network driver also is a
good reason to remove it, it's causing nothing but trouble right now.

Cc: Daniel Krueger <daniel.krueger@xxxxxxxxxxxxxxxxxxxxx>
Cc: Ronald Sieber <Ronald.Sieber@xxxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
---
 drivers/staging/Kconfig                       |    2 -
 drivers/staging/Makefile                      |    1 -
 drivers/staging/epl/Benchmark.h               |  425 ---
 drivers/staging/epl/Debug.h                   |  694 -----
 drivers/staging/epl/Edrv8139.c                | 1246 --------
 drivers/staging/epl/EdrvFec.h                 |  114 -
 drivers/staging/epl/EdrvSim.h                 |   89 -
 drivers/staging/epl/Epl.h                     |  272 --
 drivers/staging/epl/EplAmi.h                  |  323 --
 drivers/staging/epl/EplApiGeneric.c           | 2054 -------------
 drivers/staging/epl/EplApiLinux.h             |  141 -
 drivers/staging/epl/EplApiLinuxKernel.c       | 1173 -------
 drivers/staging/epl/EplApiProcessImage.c      |  328 --
 drivers/staging/epl/EplCfg.h                  |  196 --
 drivers/staging/epl/EplDef.h                  |  355 ---
 drivers/staging/epl/EplDll.h                  |  205 --
 drivers/staging/epl/EplDllCal.h               |  123 -
 drivers/staging/epl/EplDllk.c                 | 4052 -------------------------
 drivers/staging/epl/EplDllkCal.c              | 1260 --------
 drivers/staging/epl/EplDlluCal.c              |  529 ----
 drivers/staging/epl/EplErrDef.h               |  294 --
 drivers/staging/epl/EplErrorHandlerk.c        |  810 -----
 drivers/staging/epl/EplEvent.h                |  279 --
 drivers/staging/epl/EplEventk.c               |  853 ------
 drivers/staging/epl/EplEventu.c               |  813 -----
 drivers/staging/epl/EplFrame.h                |  344 ---
 drivers/staging/epl/EplIdentu.c               |  486 ---
 drivers/staging/epl/EplInc.h                  |  370 ---
 drivers/staging/epl/EplInstDef.h              |  363 ---
 drivers/staging/epl/EplLed.h                  |   92 -
 drivers/staging/epl/EplNmt.h                  |  230 --
 drivers/staging/epl/EplNmtCnu.c               |  701 -----
 drivers/staging/epl/EplNmtMnu.c               | 2828 -----------------
 drivers/staging/epl/EplNmtk.c                 | 1840 -----------
 drivers/staging/epl/EplNmtkCal.c              |  147 -
 drivers/staging/epl/EplNmtu.c                 |  706 -----
 drivers/staging/epl/EplNmtuCal.c              |  158 -
 drivers/staging/epl/EplObd.c                  | 3192 -------------------
 drivers/staging/epl/EplObd.h                  |  456 ---
 drivers/staging/epl/EplObdMacro.h             |  354 ---
 drivers/staging/epl/EplObdkCal.c              |  146 -
 drivers/staging/epl/EplObdu.c                 |  506 ---
 drivers/staging/epl/EplObduCal.c              |  543 ----
 drivers/staging/epl/EplPdo.h                  |  117 -
 drivers/staging/epl/EplPdok.c                 |  669 ----
 drivers/staging/epl/EplPdokCal.c              |  266 --
 drivers/staging/epl/EplPdou.c                 |  565 ----
 drivers/staging/epl/EplSdo.h                  |  241 --
 drivers/staging/epl/EplSdoAc.h                |  111 -
 drivers/staging/epl/EplSdoAsndu.c             |  483 ---
 drivers/staging/epl/EplSdoAsySequ.c           | 2522 ---------------
 drivers/staging/epl/EplSdoComu.c              | 3345 --------------------
 drivers/staging/epl/EplSdoUdpu.c              |  650 ----
 drivers/staging/epl/EplStatusu.c              |  377 ---
 drivers/staging/epl/EplTarget.h               |  140 -
 drivers/staging/epl/EplTimer.h                |  116 -
 drivers/staging/epl/EplTimeruLinuxKernel.c    |  446 ---
 drivers/staging/epl/EplVersion.h              |   98 -
 drivers/staging/epl/Kconfig                   |    6 -
 drivers/staging/epl/Makefile                  |   41 -
 drivers/staging/epl/SharedBuff.c              | 1762 -----------
 drivers/staging/epl/SharedBuff.h              |  187 --
 drivers/staging/epl/ShbIpc-LinuxKernel.c      |  944 ------
 drivers/staging/epl/ShbIpc.h                  |   99 -
 drivers/staging/epl/ShbLinuxKernel.h          |   68 -
 drivers/staging/epl/SocketLinuxKernel.c       |  197 --
 drivers/staging/epl/SocketLinuxKernel.h       |  105 -
 drivers/staging/epl/TimerHighReskX86.c        |  510 ----
 drivers/staging/epl/VirtualEthernetLinux.c    |  348 ---
 drivers/staging/epl/amix86.c                  |  861 ------
 drivers/staging/epl/demo_main.c               |  947 ------
 drivers/staging/epl/edrv.h                    |  167 -
 drivers/staging/epl/global.h                  |  144 -
 drivers/staging/epl/kernel/EplDllk.h          |  153 -
 drivers/staging/epl/kernel/EplDllkCal.h       |  129 -
 drivers/staging/epl/kernel/EplErrorHandlerk.h |   88 -
 drivers/staging/epl/kernel/EplEventk.h        |   96 -
 drivers/staging/epl/kernel/EplNmtk.h          |   90 -
 drivers/staging/epl/kernel/EplObdk.h          |  156 -
 drivers/staging/epl/kernel/EplPdok.h          |   98 -
 drivers/staging/epl/kernel/EplPdokCal.h       |   86 -
 drivers/staging/epl/kernel/EplTimerHighResk.h |   96 -
 drivers/staging/epl/kernel/EplTimerk.h        |  108 -
 drivers/staging/epl/kernel/VirtualEthernet.h  |   84 -
 drivers/staging/epl/proc_fs.c                 |  410 ---
 drivers/staging/epl/proc_fs.h                 |   89 -
 drivers/staging/epl/user/EplCfgMau.h          |  276 --
 drivers/staging/epl/user/EplDllu.h            |   96 -
 drivers/staging/epl/user/EplDlluCal.h         |  106 -
 drivers/staging/epl/user/EplEventu.h          |   96 -
 drivers/staging/epl/user/EplIdentu.h          |   94 -
 drivers/staging/epl/user/EplLedu.h            |   95 -
 drivers/staging/epl/user/EplNmtCnu.h          |   92 -
 drivers/staging/epl/user/EplNmtMnu.h          |  117 -
 drivers/staging/epl/user/EplNmtu.h            |  139 -
 drivers/staging/epl/user/EplNmtuCal.h         |   80 -
 drivers/staging/epl/user/EplObdu.h            |  169 -
 drivers/staging/epl/user/EplObduCal.h         |  126 -
 drivers/staging/epl/user/EplPdou.h            |   96 -
 drivers/staging/epl/user/EplSdoAsndu.h        |   96 -
 drivers/staging/epl/user/EplSdoAsySequ.h      |  100 -
 drivers/staging/epl/user/EplSdoComu.h         |  114 -
 drivers/staging/epl/user/EplSdoUdpu.h         |   97 -
 drivers/staging/epl/user/EplStatusu.h         |   90 -
 drivers/staging/epl/user/EplTimeru.h          |   95 -
 105 files changed, 0 insertions(+), 50482 deletions(-)
 delete mode 100644 drivers/staging/epl/Benchmark.h
 delete mode 100644 drivers/staging/epl/Debug.h
 delete mode 100644 drivers/staging/epl/Edrv8139.c
 delete mode 100644 drivers/staging/epl/EdrvFec.h
 delete mode 100644 drivers/staging/epl/EdrvSim.h
 delete mode 100644 drivers/staging/epl/Epl.h
 delete mode 100644 drivers/staging/epl/EplAmi.h
 delete mode 100644 drivers/staging/epl/EplApiGeneric.c
 delete mode 100644 drivers/staging/epl/EplApiLinux.h
 delete mode 100644 drivers/staging/epl/EplApiLinuxKernel.c
 delete mode 100644 drivers/staging/epl/EplApiProcessImage.c
 delete mode 100644 drivers/staging/epl/EplCfg.h
 delete mode 100644 drivers/staging/epl/EplDef.h
 delete mode 100644 drivers/staging/epl/EplDll.h
 delete mode 100644 drivers/staging/epl/EplDllCal.h
 delete mode 100644 drivers/staging/epl/EplDllk.c
 delete mode 100644 drivers/staging/epl/EplDllkCal.c
 delete mode 100644 drivers/staging/epl/EplDlluCal.c
 delete mode 100644 drivers/staging/epl/EplErrDef.h
 delete mode 100644 drivers/staging/epl/EplErrorHandlerk.c
 delete mode 100644 drivers/staging/epl/EplEvent.h
 delete mode 100644 drivers/staging/epl/EplEventk.c
 delete mode 100644 drivers/staging/epl/EplEventu.c
 delete mode 100644 drivers/staging/epl/EplFrame.h
 delete mode 100644 drivers/staging/epl/EplIdentu.c
 delete mode 100644 drivers/staging/epl/EplInc.h
 delete mode 100644 drivers/staging/epl/EplInstDef.h
 delete mode 100644 drivers/staging/epl/EplLed.h
 delete mode 100644 drivers/staging/epl/EplNmt.h
 delete mode 100644 drivers/staging/epl/EplNmtCnu.c
 delete mode 100644 drivers/staging/epl/EplNmtMnu.c
 delete mode 100644 drivers/staging/epl/EplNmtk.c
 delete mode 100644 drivers/staging/epl/EplNmtkCal.c
 delete mode 100644 drivers/staging/epl/EplNmtu.c
 delete mode 100644 drivers/staging/epl/EplNmtuCal.c
 delete mode 100644 drivers/staging/epl/EplObd.c
 delete mode 100644 drivers/staging/epl/EplObd.h
 delete mode 100644 drivers/staging/epl/EplObdMacro.h
 delete mode 100644 drivers/staging/epl/EplObdkCal.c
 delete mode 100644 drivers/staging/epl/EplObdu.c
 delete mode 100644 drivers/staging/epl/EplObduCal.c
 delete mode 100644 drivers/staging/epl/EplPdo.h
 delete mode 100644 drivers/staging/epl/EplPdok.c
 delete mode 100644 drivers/staging/epl/EplPdokCal.c
 delete mode 100644 drivers/staging/epl/EplPdou.c
 delete mode 100644 drivers/staging/epl/EplSdo.h
 delete mode 100644 drivers/staging/epl/EplSdoAc.h
 delete mode 100644 drivers/staging/epl/EplSdoAsndu.c
 delete mode 100644 drivers/staging/epl/EplSdoAsySequ.c
 delete mode 100644 drivers/staging/epl/EplSdoComu.c
 delete mode 100644 drivers/staging/epl/EplSdoUdpu.c
 delete mode 100644 drivers/staging/epl/EplStatusu.c
 delete mode 100644 drivers/staging/epl/EplTarget.h
 delete mode 100644 drivers/staging/epl/EplTimer.h
 delete mode 100644 drivers/staging/epl/EplTimeruLinuxKernel.c
 delete mode 100644 drivers/staging/epl/EplVersion.h
 delete mode 100644 drivers/staging/epl/Kconfig
 delete mode 100644 drivers/staging/epl/Makefile
 delete mode 100644 drivers/staging/epl/SharedBuff.c
 delete mode 100644 drivers/staging/epl/SharedBuff.h
 delete mode 100644 drivers/staging/epl/ShbIpc-LinuxKernel.c
 delete mode 100644 drivers/staging/epl/ShbIpc.h
 delete mode 100644 drivers/staging/epl/ShbLinuxKernel.h
 delete mode 100644 drivers/staging/epl/SocketLinuxKernel.c
 delete mode 100644 drivers/staging/epl/SocketLinuxKernel.h
 delete mode 100644 drivers/staging/epl/TimerHighReskX86.c
 delete mode 100644 drivers/staging/epl/VirtualEthernetLinux.c
 delete mode 100644 drivers/staging/epl/amix86.c
 delete mode 100644 drivers/staging/epl/demo_main.c
 delete mode 100644 drivers/staging/epl/edrv.h
 delete mode 100644 drivers/staging/epl/global.h
 delete mode 100644 drivers/staging/epl/kernel/EplDllk.h
 delete mode 100644 drivers/staging/epl/kernel/EplDllkCal.h
 delete mode 100644 drivers/staging/epl/kernel/EplErrorHandlerk.h
 delete mode 100644 drivers/staging/epl/kernel/EplEventk.h
 delete mode 100644 drivers/staging/epl/kernel/EplNmtk.h
 delete mode 100644 drivers/staging/epl/kernel/EplObdk.h
 delete mode 100644 drivers/staging/epl/kernel/EplPdok.h
 delete mode 100644 drivers/staging/epl/kernel/EplPdokCal.h
 delete mode 100644 drivers/staging/epl/kernel/EplTimerHighResk.h
 delete mode 100644 drivers/staging/epl/kernel/EplTimerk.h
 delete mode 100644 drivers/staging/epl/kernel/VirtualEthernet.h
 delete mode 100644 drivers/staging/epl/proc_fs.c
 delete mode 100644 drivers/staging/epl/proc_fs.h
 delete mode 100644 drivers/staging/epl/user/EplCfgMau.h
 delete mode 100644 drivers/staging/epl/user/EplDllu.h
 delete mode 100644 drivers/staging/epl/user/EplDlluCal.h
 delete mode 100644 drivers/staging/epl/user/EplEventu.h
 delete mode 100644 drivers/staging/epl/user/EplIdentu.h
 delete mode 100644 drivers/staging/epl/user/EplLedu.h
 delete mode 100644 drivers/staging/epl/user/EplNmtCnu.h
 delete mode 100644 drivers/staging/epl/user/EplNmtMnu.h
 delete mode 100644 drivers/staging/epl/user/EplNmtu.h
 delete mode 100644 drivers/staging/epl/user/EplNmtuCal.h
 delete mode 100644 drivers/staging/epl/user/EplObdu.h
 delete mode 100644 drivers/staging/epl/user/EplObduCal.h
 delete mode 100644 drivers/staging/epl/user/EplPdou.h
 delete mode 100644 drivers/staging/epl/user/EplSdoAsndu.h
 delete mode 100644 drivers/staging/epl/user/EplSdoAsySequ.h
 delete mode 100644 drivers/staging/epl/user/EplSdoComu.h
 delete mode 100644 drivers/staging/epl/user/EplSdoUdpu.h
 delete mode 100644 drivers/staging/epl/user/EplStatusu.h
 delete mode 100644 drivers/staging/epl/user/EplTimeru.h

diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 58274ca..7b500a8 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -95,8 +95,6 @@ source "drivers/staging/mimio/Kconfig"
 
 source "drivers/staging/frontier/Kconfig"
 
-source "drivers/staging/epl/Kconfig"
-
 source "drivers/staging/android/Kconfig"
 
 source "drivers/staging/dream/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index 0bf10ac..1ac7c8f 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -30,7 +30,6 @@ obj-$(CONFIG_RTL8192SU)		+= rtl8192su/
 obj-$(CONFIG_USB_RSPI)		+= rspiusb/
 obj-$(CONFIG_INPUT_MIMIO)	+= mimio/
 obj-$(CONFIG_TRANZPORT)		+= frontier/
-obj-$(CONFIG_EPL)		+= epl/
 obj-$(CONFIG_ANDROID)		+= android/
 obj-$(CONFIG_ANDROID)		+= dream/
 obj-$(CONFIG_DST)		+= dst/
diff --git a/drivers/staging/epl/Benchmark.h b/drivers/staging/epl/Benchmark.h
deleted file mode 100644
index 4cc01bd..0000000
--- a/drivers/staging/epl/Benchmark.h
+++ /dev/null
@@ -1,425 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  header file for benchmarking
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: Benchmark.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/08/16 d.k.:  start of implementation
-
-****************************************************************************/
-
-#ifndef _BENCHMARK_H_
-#define _BENCHMARK_H_
-
-#include "global.h"
-
-#include <linux/kernel.h>
-
-#ifdef CONFIG_COLDFIRE
-#include <asm/coldfire.h>
-#include <asm/m5485gpio.h>
-
-#define BENCHMARK_SET(x)    MCF_GPIO_PODR_PCIBG |= (1 << (x))	// (x+1)
-#define BENCHMARK_RESET(x)  MCF_GPIO_PODR_PCIBG &= ~(1 << (x))	// (x+1)
-#define BENCHMARK_TOGGLE(x) MCF_GPIO_PODR_PCIBR ^= (1 << (x - 5))
-#else
-#undef BENCHMARK_MODULES
-#define BENCHMARK_MODULES           0x00000000
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef BENCHMARK_MODULES
-#define BENCHMARK_MODULES                   0x00000000
-#endif
-
-#define BENCHMARK_MOD_01                    0x00000001
-#define BENCHMARK_MOD_02                    0x00000002
-#define BENCHMARK_MOD_03                    0x00000004
-#define BENCHMARK_MOD_04                    0x00000008
-#define BENCHMARK_MOD_05                    0x00000010
-#define BENCHMARK_MOD_06                    0x00000020
-#define BENCHMARK_MOD_07                    0x00000040
-#define BENCHMARK_MOD_08                    0x00000080
-#define BENCHMARK_MOD_09                    0x00000100
-#define BENCHMARK_MOD_10                    0x00000200
-#define BENCHMARK_MOD_11                    0x00000400
-#define BENCHMARK_MOD_12                    0x00000800
-#define BENCHMARK_MOD_13                    0x00001000
-#define BENCHMARK_MOD_14                    0x00002000
-#define BENCHMARK_MOD_15                    0x00004000
-#define BENCHMARK_MOD_16                    0x00008000
-#define BENCHMARK_MOD_17                    0x00010000
-#define BENCHMARK_MOD_18                    0x00020000
-#define BENCHMARK_MOD_19                    0x00040000
-#define BENCHMARK_MOD_20                    0x00080000
-#define BENCHMARK_MOD_21                    0x00100000
-#define BENCHMARK_MOD_22                    0x00200000
-#define BENCHMARK_MOD_23                    0x00400000
-#define BENCHMARK_MOD_24                    0x00800000
-#define BENCHMARK_MOD_25                    0x01000000
-#define BENCHMARK_MOD_26                    0x02000000
-#define BENCHMARK_MOD_27                    0x04000000
-#define BENCHMARK_MOD_28                    0x08000000
-#define BENCHMARK_MOD_29                    0x10000000
-#define BENCHMARK_MOD_30                    0x20000000
-#define BENCHMARK_MOD_31                    0x40000000
-#define BENCHMARK_MOD_32                    0x80000000
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_01)
-#define BENCHMARK_MOD_01_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_01_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_01_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_01_SET(x)
-#define BENCHMARK_MOD_01_RESET(x)
-#define BENCHMARK_MOD_01_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_02)
-#define BENCHMARK_MOD_02_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_02_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_02_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_02_SET(x)
-#define BENCHMARK_MOD_02_RESET(x)
-#define BENCHMARK_MOD_02_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_03)
-#define BENCHMARK_MOD_03_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_03_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_03_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_03_SET(x)
-#define BENCHMARK_MOD_03_RESET(x)
-#define BENCHMARK_MOD_03_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_04)
-#define BENCHMARK_MOD_04_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_04_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_04_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_04_SET(x)
-#define BENCHMARK_MOD_04_RESET(x)
-#define BENCHMARK_MOD_04_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_05)
-#define BENCHMARK_MOD_05_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_05_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_05_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_05_SET(x)
-#define BENCHMARK_MOD_05_RESET(x)
-#define BENCHMARK_MOD_05_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_06)
-#define BENCHMARK_MOD_06_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_06_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_06_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_06_SET(x)
-#define BENCHMARK_MOD_06_RESET(x)
-#define BENCHMARK_MOD_06_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_07)
-#define BENCHMARK_MOD_07_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_07_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_07_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_07_SET(x)
-#define BENCHMARK_MOD_07_RESET(x)
-#define BENCHMARK_MOD_07_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_08)
-#define BENCHMARK_MOD_08_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_08_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_08_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_08_SET(x)
-#define BENCHMARK_MOD_08_RESET(x)
-#define BENCHMARK_MOD_08_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_09)
-#define BENCHMARK_MOD_09_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_09_RESET(x)       BENCHMARK_RESET(x)
-#define BENCHMARK_MOD_09_TOGGLE(x)      BENCHMARK_TOGGLE(x)
-#else
-#define BENCHMARK_MOD_09_SET(x)
-#define BENCHMARK_MOD_09_RESET(x)
-#define BENCHMARK_MOD_09_TOGGLE(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_10)
-#define BENCHMARK_MOD_10_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_10_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_10_SET(x)
-#define BENCHMARK_MOD_10_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_11)
-#define BENCHMARK_MOD_11_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_11_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_11_SET(x)
-#define BENCHMARK_MOD_11_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_12)
-#define BENCHMARK_MOD_12_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_12_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_12_SET(x)
-#define BENCHMARK_MOD_12_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_13)
-#define BENCHMARK_MOD_13_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_13_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_13_SET(x)
-#define BENCHMARK_MOD_13_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_14)
-#define BENCHMARK_MOD_14_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_14_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_14_SET(x)
-#define BENCHMARK_MOD_14_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_15)
-#define BENCHMARK_MOD_15_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_15_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_15_SET(x)
-#define BENCHMARK_MOD_15_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_16)
-#define BENCHMARK_MOD_16_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_16_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_16_SET(x)
-#define BENCHMARK_MOD_16_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_17)
-#define BENCHMARK_MOD_17_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_17_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_17_SET(x)
-#define BENCHMARK_MOD_17_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_18)
-#define BENCHMARK_MOD_18_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_18_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_18_SET(x)
-#define BENCHMARK_MOD_18_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_19)
-#define BENCHMARK_MOD_19_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_19_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_19_SET(x)
-#define BENCHMARK_MOD_19_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_20)
-#define BENCHMARK_MOD_20_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_20_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_20_SET(x)
-#define BENCHMARK_MOD_20_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_21)
-#define BENCHMARK_MOD_21_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_21_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_21_SET(x)
-#define BENCHMARK_MOD_21_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_22)
-#define BENCHMARK_MOD_22_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_22_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_22_SET(x)
-#define BENCHMARK_MOD_22_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_23)
-#define BENCHMARK_MOD_23_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_23_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_23_SET(x)
-#define BENCHMARK_MOD_23_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_24)
-#define BENCHMARK_MOD_24_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_24_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_24_SET(x)
-#define BENCHMARK_MOD_24_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_25)
-#define BENCHMARK_MOD_25_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_25_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_25_SET(x)
-#define BENCHMARK_MOD_25_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_26)
-#define BENCHMARK_MOD_26_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_26_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_26_SET(x)
-#define BENCHMARK_MOD_26_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_27)
-#define BENCHMARK_MOD_27_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_27_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_27_SET(x)
-#define BENCHMARK_MOD_27_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_28)
-#define BENCHMARK_MOD_28_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_28_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_28_SET(x)
-#define BENCHMARK_MOD_28_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_29)
-#define BENCHMARK_MOD_29_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_29_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_29_SET(x)
-#define BENCHMARK_MOD_29_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_30)
-#define BENCHMARK_MOD_30_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_30_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_30_SET(x)
-#define BENCHMARK_MOD_30_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_31)
-#define BENCHMARK_MOD_31_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_31_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_31_SET(x)
-#define BENCHMARK_MOD_31_RESET(x)
-#endif
-
-#if (BENCHMARK_MODULES & BENCHMARK_MOD_32)
-#define BENCHMARK_MOD_32_SET(x)         BENCHMARK_SET(x)
-#define BENCHMARK_MOD_32_RESET(x)       BENCHMARK_RESET(x)
-#else
-#define BENCHMARK_MOD_32_SET(x)
-#define BENCHMARK_MOD_32_RESET(x)
-#endif
-
-//---------------------------------------------------------------------------
-// modul global types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-#endif // _BENCHMARK_H_
diff --git a/drivers/staging/epl/Debug.h b/drivers/staging/epl/Debug.h
deleted file mode 100644
index 851a222..0000000
--- a/drivers/staging/epl/Debug.h
+++ /dev/null
@@ -1,694 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Debug interface
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: Debug.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-****************************************************************************/
-
-#ifndef _DEBUG_H_
-#define _DEBUG_H_
-
-#include "global.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// global const defines
-//---------------------------------------------------------------------------
-
-// These definitions are important for level-debug traces.
-// A macro DEBUG_GLB_LVL() defines the current debug-level using following bis.
-// If the corresponding bit is set then trace message will be printed out
-// (only if NDEBUG is not defined). The upper debug-levels are reserved for
-// the debug-levels ALWAYS, ERROR and ASSERT.
-#define DEBUG_LVL_01                    0x00000001
-#define DEBUG_LVL_02                    0x00000002
-#define DEBUG_LVL_03                    0x00000004
-#define DEBUG_LVL_04                    0x00000008
-#define DEBUG_LVL_05                    0x00000010
-#define DEBUG_LVL_06                    0x00000020
-#define DEBUG_LVL_07                    0x00000040
-#define DEBUG_LVL_08                    0x00000080
-#define DEBUG_LVL_09                    0x00000100
-#define DEBUG_LVL_10                    0x00000200
-#define DEBUG_LVL_11                    0x00000400
-#define DEBUG_LVL_12                    0x00000800
-#define DEBUG_LVL_13                    0x00001000
-#define DEBUG_LVL_14                    0x00002000
-#define DEBUG_LVL_15                    0x00004000
-#define DEBUG_LVL_16                    0x00008000
-#define DEBUG_LVL_17                    0x00010000
-#define DEBUG_LVL_18                    0x00020000
-#define DEBUG_LVL_19                    0x00040000
-#define DEBUG_LVL_20                    0x00080000
-#define DEBUG_LVL_21                    0x00100000
-#define DEBUG_LVL_22                    0x00200000
-#define DEBUG_LVL_23                    0x00400000
-#define DEBUG_LVL_24                    0x00800000
-#define DEBUG_LVL_25                    0x01000000
-#define DEBUG_LVL_26                    0x02000000
-#define DEBUG_LVL_27                    0x04000000
-#define DEBUG_LVL_28                    0x08000000
-#define DEBUG_LVL_29                    0x10000000
-#define DEBUG_LVL_ASSERT                0x20000000
-#define DEBUG_LVL_ERROR                 0x40000000
-#define DEBUG_LVL_ALWAYS                0x80000000
-
-//---------------------------------------------------------------------------
-// global types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// global vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// global function prototypes
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// global macros
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// this macro defines a version string
-
-
-//---------------------------------------------------------------------------
-// this macro defines a build info string (e.g. for using in printf())
-#define DEBUG_MAKE_BUILD_INFO(prefix,product,prodid,descr,verstr,author) "\n" \
-    prefix "***************************************************\n" \
-    prefix "Project:   " product ", " prodid                  "\n" \
-    prefix "Descript.: " descr                                "\n" \
-    prefix "Author:    " author                               "\n" \
-    prefix "Date:      " __DATE__                             "\n" \
-    prefix "Version:   " verstr                               "\n" \
-    prefix "***************************************************\n\n"
-
-//---------------------------------------------------------------------------
-// The default debug-level is: ERROR and ALWAYS.
-// You can define an other debug-level in project settings.
-#ifndef DEF_DEBUG_LVL
-#define DEF_DEBUG_LVL                   (DEBUG_LVL_ALWAYS | DEBUG_LVL_ERROR)
-#endif
-#ifndef DEBUG_GLB_LVL
-#define DEBUG_GLB_LVL()                 (DEF_DEBUG_LVL)
-#endif
-
-//---------------------------------------------------------------------------
-    // At microcontrollers we do reduce the memory usage by deleting DEBUG_TRACE-lines
-    // (compiler does delete the lines).
-    //
-    // Here the parameter 'lvl' can only be used with one debug-level.
-    //
-    // Example: DEBUG_TRACE1(DEBUG_LVL_ERROR, "error code %d", dwRet);
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_ALWAYS)
-#define DEBUG_LVL_ALWAYS_TRACE0(str)                TRACE0(str)
-#define DEBUG_LVL_ALWAYS_TRACE1(str,p1)             TRACE1(str,p1)
-#define DEBUG_LVL_ALWAYS_TRACE2(str,p1,p2)          TRACE2(str,p1,p2)
-#define DEBUG_LVL_ALWAYS_TRACE3(str,p1,p2,p3)       TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ALWAYS_TRACE4(str,p1,p2,p3,p4)    TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_ALWAYS_TRACE0(str)
-#define DEBUG_LVL_ALWAYS_TRACE1(str,p1)
-#define DEBUG_LVL_ALWAYS_TRACE2(str,p1,p2)
-#define DEBUG_LVL_ALWAYS_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ALWAYS_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_ERROR)
-#define DEBUG_LVL_ERROR_TRACE0(str)                 TRACE0(str)
-#define DEBUG_LVL_ERROR_TRACE1(str,p1)              TRACE1(str,p1)
-#define DEBUG_LVL_ERROR_TRACE2(str,p1,p2)           TRACE2(str,p1,p2)
-#define DEBUG_LVL_ERROR_TRACE3(str,p1,p2,p3)        TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ERROR_TRACE4(str,p1,p2,p3,p4)     TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_ERROR_TRACE0(str)
-#define DEBUG_LVL_ERROR_TRACE1(str,p1)
-#define DEBUG_LVL_ERROR_TRACE2(str,p1,p2)
-#define DEBUG_LVL_ERROR_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ERROR_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_ASSERT)
-#define DEBUG_LVL_ASSERT_TRACE0(str)                TRACE0(str)
-#define DEBUG_LVL_ASSERT_TRACE1(str,p1)             TRACE1(str,p1)
-#define DEBUG_LVL_ASSERT_TRACE2(str,p1,p2)          TRACE2(str,p1,p2)
-#define DEBUG_LVL_ASSERT_TRACE3(str,p1,p2,p3)       TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ASSERT_TRACE4(str,p1,p2,p3,p4)    TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_ASSERT_TRACE0(str)
-#define DEBUG_LVL_ASSERT_TRACE1(str,p1)
-#define DEBUG_LVL_ASSERT_TRACE2(str,p1,p2)
-#define DEBUG_LVL_ASSERT_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_ASSERT_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_29)
-#define DEBUG_LVL_29_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_29_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_29_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_29_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_29_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_29_TRACE0(str)
-#define DEBUG_LVL_29_TRACE1(str,p1)
-#define DEBUG_LVL_29_TRACE2(str,p1,p2)
-#define DEBUG_LVL_29_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_29_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_28)
-#define DEBUG_LVL_28_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_28_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_28_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_28_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_28_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_28_TRACE0(str)
-#define DEBUG_LVL_28_TRACE1(str,p1)
-#define DEBUG_LVL_28_TRACE2(str,p1,p2)
-#define DEBUG_LVL_28_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_28_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_27)
-#define DEBUG_LVL_27_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_27_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_27_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_27_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_27_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_27_TRACE0(str)
-#define DEBUG_LVL_27_TRACE1(str,p1)
-#define DEBUG_LVL_27_TRACE2(str,p1,p2)
-#define DEBUG_LVL_27_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_27_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_26)
-#define DEBUG_LVL_26_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_26_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_26_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_26_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_26_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_26_TRACE0(str)
-#define DEBUG_LVL_26_TRACE1(str,p1)
-#define DEBUG_LVL_26_TRACE2(str,p1,p2)
-#define DEBUG_LVL_26_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_26_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_25)
-#define DEBUG_LVL_25_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_25_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_25_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_25_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_25_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_25_TRACE0(str)
-#define DEBUG_LVL_25_TRACE1(str,p1)
-#define DEBUG_LVL_25_TRACE2(str,p1,p2)
-#define DEBUG_LVL_25_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_25_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_24)
-#define DEBUG_LVL_24_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_24_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_24_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_24_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_24_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_24_TRACE0(str)
-#define DEBUG_LVL_24_TRACE1(str,p1)
-#define DEBUG_LVL_24_TRACE2(str,p1,p2)
-#define DEBUG_LVL_24_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_24_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_23)
-#define DEBUG_LVL_23_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_23_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_23_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_23_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_23_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_23_TRACE0(str)
-#define DEBUG_LVL_23_TRACE1(str,p1)
-#define DEBUG_LVL_23_TRACE2(str,p1,p2)
-#define DEBUG_LVL_23_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_23_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_22)
-#define DEBUG_LVL_22_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_22_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_22_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_22_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_22_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_22_TRACE0(str)
-#define DEBUG_LVL_22_TRACE1(str,p1)
-#define DEBUG_LVL_22_TRACE2(str,p1,p2)
-#define DEBUG_LVL_22_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_22_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_21)
-#define DEBUG_LVL_21_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_21_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_21_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_21_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_21_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_21_TRACE0(str)
-#define DEBUG_LVL_21_TRACE1(str,p1)
-#define DEBUG_LVL_21_TRACE2(str,p1,p2)
-#define DEBUG_LVL_21_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_21_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_20)
-#define DEBUG_LVL_20_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_20_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_20_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_20_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_20_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_20_TRACE0(str)
-#define DEBUG_LVL_20_TRACE1(str,p1)
-#define DEBUG_LVL_20_TRACE2(str,p1,p2)
-#define DEBUG_LVL_20_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_20_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_19)
-#define DEBUG_LVL_19_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_19_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_19_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_19_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_19_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_19_TRACE0(str)
-#define DEBUG_LVL_19_TRACE1(str,p1)
-#define DEBUG_LVL_19_TRACE2(str,p1,p2)
-#define DEBUG_LVL_19_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_19_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_18)
-#define DEBUG_LVL_18_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_18_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_18_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_18_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_18_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_18_TRACE0(str)
-#define DEBUG_LVL_18_TRACE1(str,p1)
-#define DEBUG_LVL_18_TRACE2(str,p1,p2)
-#define DEBUG_LVL_18_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_18_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_17)
-#define DEBUG_LVL_17_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_17_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_17_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_17_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_17_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_17_TRACE0(str)
-#define DEBUG_LVL_17_TRACE1(str,p1)
-#define DEBUG_LVL_17_TRACE2(str,p1,p2)
-#define DEBUG_LVL_17_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_17_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_16)
-#define DEBUG_LVL_16_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_16_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_16_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_16_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_16_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_16_TRACE0(str)
-#define DEBUG_LVL_16_TRACE1(str,p1)
-#define DEBUG_LVL_16_TRACE2(str,p1,p2)
-#define DEBUG_LVL_16_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_16_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_15)
-#define DEBUG_LVL_15_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_15_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_15_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_15_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_15_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_15_TRACE0(str)
-#define DEBUG_LVL_15_TRACE1(str,p1)
-#define DEBUG_LVL_15_TRACE2(str,p1,p2)
-#define DEBUG_LVL_15_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_15_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_14)
-#define DEBUG_LVL_14_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_14_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_14_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_14_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_14_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_14_TRACE0(str)
-#define DEBUG_LVL_14_TRACE1(str,p1)
-#define DEBUG_LVL_14_TRACE2(str,p1,p2)
-#define DEBUG_LVL_14_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_14_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_13)
-#define DEBUG_LVL_13_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_13_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_13_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_13_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_13_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_13_TRACE0(str)
-#define DEBUG_LVL_13_TRACE1(str,p1)
-#define DEBUG_LVL_13_TRACE2(str,p1,p2)
-#define DEBUG_LVL_13_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_13_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_12)
-#define DEBUG_LVL_12_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_12_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_12_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_12_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_12_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_12_TRACE0(str)
-#define DEBUG_LVL_12_TRACE1(str,p1)
-#define DEBUG_LVL_12_TRACE2(str,p1,p2)
-#define DEBUG_LVL_12_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_12_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_11)
-#define DEBUG_LVL_11_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_11_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_11_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_11_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_11_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_11_TRACE0(str)
-#define DEBUG_LVL_11_TRACE1(str,p1)
-#define DEBUG_LVL_11_TRACE2(str,p1,p2)
-#define DEBUG_LVL_11_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_11_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_10)
-#define DEBUG_LVL_10_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_10_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_10_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_10_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_10_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_10_TRACE0(str)
-#define DEBUG_LVL_10_TRACE1(str,p1)
-#define DEBUG_LVL_10_TRACE2(str,p1,p2)
-#define DEBUG_LVL_10_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_10_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_09)
-#define DEBUG_LVL_09_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_09_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_09_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_09_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_09_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_09_TRACE0(str)
-#define DEBUG_LVL_09_TRACE1(str,p1)
-#define DEBUG_LVL_09_TRACE2(str,p1,p2)
-#define DEBUG_LVL_09_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_09_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_08)
-#define DEBUG_LVL_08_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_08_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_08_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_08_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_08_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_08_TRACE0(str)
-#define DEBUG_LVL_08_TRACE1(str,p1)
-#define DEBUG_LVL_08_TRACE2(str,p1,p2)
-#define DEBUG_LVL_08_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_08_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_07)
-#define DEBUG_LVL_07_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_07_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_07_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_07_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_07_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_07_TRACE0(str)
-#define DEBUG_LVL_07_TRACE1(str,p1)
-#define DEBUG_LVL_07_TRACE2(str,p1,p2)
-#define DEBUG_LVL_07_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_07_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_06)
-#define DEBUG_LVL_06_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_06_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_06_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_06_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_06_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_06_TRACE0(str)
-#define DEBUG_LVL_06_TRACE1(str,p1)
-#define DEBUG_LVL_06_TRACE2(str,p1,p2)
-#define DEBUG_LVL_06_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_06_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_05)
-#define DEBUG_LVL_05_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_05_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_05_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_05_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_05_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_05_TRACE0(str)
-#define DEBUG_LVL_05_TRACE1(str,p1)
-#define DEBUG_LVL_05_TRACE2(str,p1,p2)
-#define DEBUG_LVL_05_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_05_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_04)
-#define DEBUG_LVL_04_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_04_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_04_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_04_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_04_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_04_TRACE0(str)
-#define DEBUG_LVL_04_TRACE1(str,p1)
-#define DEBUG_LVL_04_TRACE2(str,p1,p2)
-#define DEBUG_LVL_04_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_04_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_03)
-#define DEBUG_LVL_03_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_03_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_03_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_03_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_03_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_03_TRACE0(str)
-#define DEBUG_LVL_03_TRACE1(str,p1)
-#define DEBUG_LVL_03_TRACE2(str,p1,p2)
-#define DEBUG_LVL_03_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_03_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_02)
-#define DEBUG_LVL_02_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_02_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_02_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_02_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_02_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_02_TRACE0(str)
-#define DEBUG_LVL_02_TRACE1(str,p1)
-#define DEBUG_LVL_02_TRACE2(str,p1,p2)
-#define DEBUG_LVL_02_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_02_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#if (DEBUG_GLB_LVL() & DEBUG_LVL_01)
-#define DEBUG_LVL_01_TRACE0(str)                    TRACE0(str)
-#define DEBUG_LVL_01_TRACE1(str,p1)                 TRACE1(str,p1)
-#define DEBUG_LVL_01_TRACE2(str,p1,p2)              TRACE2(str,p1,p2)
-#define DEBUG_LVL_01_TRACE3(str,p1,p2,p3)           TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_01_TRACE4(str,p1,p2,p3,p4)        TRACE4(str,p1,p2,p3,p4)
-#else
-#define DEBUG_LVL_01_TRACE0(str)
-#define DEBUG_LVL_01_TRACE1(str,p1)
-#define DEBUG_LVL_01_TRACE2(str,p1,p2)
-#define DEBUG_LVL_01_TRACE3(str,p1,p2,p3)
-#define DEBUG_LVL_01_TRACE4(str,p1,p2,p3,p4)
-#endif
-
-#define DEBUG_TRACE0(lvl,str)                           lvl##_TRACE0(str)
-#define DEBUG_TRACE1(lvl,str,p1)                        lvl##_TRACE1(str,p1)
-#define DEBUG_TRACE2(lvl,str,p1,p2)                     lvl##_TRACE2(str,p1,p2)
-#define DEBUG_TRACE3(lvl,str,p1,p2,p3)                  lvl##_TRACE3(str,p1,p2,p3)
-#define DEBUG_TRACE4(lvl,str,p1,p2,p3,p4)               lvl##_TRACE4(str,p1,p2,p3,p4)
-
-//---------------------------------------------------------------------------
-// The macro DEBUG_DUMP_DATA() can be used with the same debug-levels to dump
-// out data bytes. Function DumpData() has to be included.
-// NOTE: DUMP_DATA has to be defined in project settings.
-#if (!defined (NDEBUG) && defined (DUMP_DATA))
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-	void DumpData(char *szStr_p, u8 *pbData_p, u16 wSize_p);
-
-#ifdef __cplusplus
-}				// von extern "C"
-#endif
-#define DEBUG_DUMP_DATA(lvl,str,ptr,siz)    if ((DEBUG_GLB_LVL() & (lvl))==(lvl)) \
-                                                    DumpData (str, (u8 *)(ptr), (u16)(siz));
-#else
-
-#define DEBUG_DUMP_DATA(lvl,str,ptr,siz)
-
-#endif
-
-//---------------------------------------------------------------------------
-// The macro DEBUG_ASSERT() can be used to print out an error string if the
-// parametered expresion does not result TRUE.
-// NOTE: If DEBUG_KEEP_ASSERT is defined, then DEBUG_ASSERT-line will not be
-//       deleted from compiler (in release version too).
-#if !defined (NDEBUG) || defined (DEBUG_KEEP_ASSERT)
-
-	// For microcontrollers process will be stopped using endless loop.
-
-#define DEBUG_ASSERT0(expr,str)         if (!(expr )) { \
-                                                    DEBUG_LVL_ASSERT_TRACE3 ( \
-                                                        "Assertion failed: line %d file '%s'\n" \
-                                                        "    -> '%s'\n", __LINE__, __FILE__, str); \
-                                                    while (1); }
-
-#define DEBUG_ASSERT1(expr,str,p1)      if (!(expr )) { \
-                                                    DEBUG_LVL_ASSERT_TRACE4 ( \
-                                                        "Assertion failed: line %d file '%s'\n" \
-                                                        "    -> '%s'\n" \
-                                                        "    -> 0x%08lX\n", __LINE__, __FILE__, str, (u32) p1); \
-                                                    while (1); }
-
-
-#else
-
-#define DEBUG_ASSERT0(expr,str)
-#define DEBUG_ASSERT1(expr,str,p1)
-
-#endif
-
-//---------------------------------------------------------------------------
-// The macro DEBUG_ONLY() implements code, if NDEBUG is not defined.
-#if !defined (DEBUG_ONLY)
-#if !defined (NDEBUG)
-
-#define DEBUG_ONLY(expr)    expr
-
-#else
-
-#define DEBUG_ONLY(expr)
-
-#endif
-#endif
-
-#endif // _DEBUG_H_
diff --git a/drivers/staging/epl/Edrv8139.c b/drivers/staging/epl/Edrv8139.c
deleted file mode 100644
index 44e3f7b..0000000
--- a/drivers/staging/epl/Edrv8139.c
+++ /dev/null
@@ -1,1246 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Ethernet driver for Realtek RTL8139 chips
-                except the RTL8139C+, because it has a different
-                Tx descriptor handling.
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: Edrv8139.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.10 $  $Date: 2008/11/21 09:00:38 $
-
-                $State: Exp $
-
-                Build Environment:
-                Dev C++ and GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2008/02/05 d.k.:   start of implementation
-
-****************************************************************************/
-
-#include "global.h"
-#include "EplInc.h"
-#include "edrv.h"
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/pci.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/major.h>
-#include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/atomic.h>
-#include <asm/irq.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-// Buffer handling:
-// All buffers are created statically (i.e. at compile time resp. at
-// initialisation via kmalloc() ) and not dynamically on request (i.e. via
-// EdrvAllocTxMsgBuffer().
-// EdrvAllocTxMsgBuffer() searches for an unused buffer which is large enough.
-// EdrvInit() may allocate some buffers with sizes less than maximum frame
-// size (i.e. 1514 bytes), e.g. for SoC, SoA, StatusResponse, IdentResponse,
-// NMT requests / commands. The less the size of the buffer the less the
-// number of the buffer.
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EDRV_MAX_TX_BUFFERS
-#define EDRV_MAX_TX_BUFFERS     20
-#endif
-
-#define EDRV_MAX_FRAME_SIZE     0x600
-
-#define EDRV_RX_BUFFER_SIZE     0x8610	// 32 kB + 16 Byte + 1,5 kB (WRAP is enabled)
-#define EDRV_RX_BUFFER_LENGTH   (EDRV_RX_BUFFER_SIZE & 0xF800)	// buffer size cut down to 2 kB alignment
-
-#define EDRV_TX_BUFFER_SIZE     (EDRV_MAX_TX_BUFFERS * EDRV_MAX_FRAME_SIZE)	// n * (MTU + 14 + 4)
-
-#define DRV_NAME                "epl"
-
-#define EDRV_REGW_INT_MASK      0x3C	// interrupt mask register
-#define EDRV_REGW_INT_STATUS    0x3E	// interrupt status register
-#define EDRV_REGW_INT_ROK       0x0001	// Receive OK interrupt
-#define EDRV_REGW_INT_RER       0x0002	// Receive error interrupt
-#define EDRV_REGW_INT_TOK       0x0004	// Transmit OK interrupt
-#define EDRV_REGW_INT_TER       0x0008	// Transmit error interrupt
-#define EDRV_REGW_INT_RXOVW     0x0010	// Rx buffer overflow interrupt
-#define EDRV_REGW_INT_PUN       0x0020	// Packet underrun/ link change interrupt
-#define EDRV_REGW_INT_FOVW      0x0040	// Rx FIFO overflow interrupt
-#define EDRV_REGW_INT_LENCHG    0x2000	// Cable length change interrupt
-#define EDRV_REGW_INT_TIMEOUT   0x4000	// Time out interrupt
-#define EDRV_REGW_INT_SERR      0x8000	// System error interrupt
-#define EDRV_REGW_INT_MASK_DEF  (EDRV_REGW_INT_ROK \
-                                 | EDRV_REGW_INT_RER \
-                                 | EDRV_REGW_INT_TOK \
-                                 | EDRV_REGW_INT_TER \
-                                 | EDRV_REGW_INT_RXOVW \
-                                 | EDRV_REGW_INT_FOVW \
-                                 | EDRV_REGW_INT_PUN \
-                                 | EDRV_REGW_INT_TIMEOUT \
-                                 | EDRV_REGW_INT_SERR)	// default interrupt mask
-
-#define EDRV_REGB_COMMAND       0x37	// command register
-#define EDRV_REGB_COMMAND_RST   0x10
-#define EDRV_REGB_COMMAND_RE    0x08
-#define EDRV_REGB_COMMAND_TE    0x04
-#define EDRV_REGB_COMMAND_BUFE  0x01
-
-#define EDRV_REGB_CMD9346       0x50	// 93C46 command register
-#define EDRV_REGB_CMD9346_LOCK  0x00	// lock configuration registers
-#define EDRV_REGB_CMD9346_UNLOCK 0xC0	// unlock configuration registers
-
-#define EDRV_REGDW_RCR          0x44	// Rx configuration register
-#define EDRV_REGDW_RCR_NO_FTH   0x0000E000	// no receive FIFO threshold
-#define EDRV_REGDW_RCR_RBLEN32K 0x00001000	// 32 kB receive buffer
-#define EDRV_REGDW_RCR_MXDMAUNL 0x00000700	// unlimited maximum DMA burst size
-#define EDRV_REGDW_RCR_NOWRAP   0x00000080	// do not wrap frame at end of buffer
-#define EDRV_REGDW_RCR_AER      0x00000020	// accept error frames (CRC, alignment, collided)
-#define EDRV_REGDW_RCR_AR       0x00000010	// accept runt
-#define EDRV_REGDW_RCR_AB       0x00000008	// accept broadcast frames
-#define EDRV_REGDW_RCR_AM       0x00000004	// accept multicast frames
-#define EDRV_REGDW_RCR_APM      0x00000002	// accept physical match frames
-#define EDRV_REGDW_RCR_AAP      0x00000001	// accept all frames
-#define EDRV_REGDW_RCR_DEF      (EDRV_REGDW_RCR_NO_FTH \
-                                 | EDRV_REGDW_RCR_RBLEN32K \
-                                 | EDRV_REGDW_RCR_MXDMAUNL \
-                                 | EDRV_REGDW_RCR_NOWRAP \
-                                 | EDRV_REGDW_RCR_AB \
-                                 | EDRV_REGDW_RCR_AM \
-                                 | EDRV_REGDW_RCR_APM)	// default value
-
-#define EDRV_REGDW_TCR          0x40	// Tx configuration register
-#define EDRV_REGDW_TCR_VER_MASK 0x7CC00000	// mask for hardware version
-#define EDRV_REGDW_TCR_VER_C    0x74000000	// RTL8139C
-#define EDRV_REGDW_TCR_VER_D    0x74400000	// RTL8139D
-#define EDRV_REGDW_TCR_IFG96    0x03000000	// default interframe gap (960 ns)
-#define EDRV_REGDW_TCR_CRC      0x00010000	// disable appending of CRC by the controller
-#define EDRV_REGDW_TCR_MXDMAUNL 0x00000700	// maximum DMA burst size of 2048 b
-#define EDRV_REGDW_TCR_TXRETRY  0x00000000	// 16 retries
-#define EDRV_REGDW_TCR_DEF      (EDRV_REGDW_TCR_IFG96 \
-                                 | EDRV_REGDW_TCR_MXDMAUNL \
-                                 | EDRV_REGDW_TCR_TXRETRY)
-
-#define EDRV_REGW_MULINT        0x5C	// multiple interrupt select register
-
-#define EDRV_REGDW_MPC          0x4C	// missed packet counter register
-
-#define EDRV_REGDW_TSAD0        0x20	// Transmit start address of descriptor 0
-#define EDRV_REGDW_TSAD1        0x24	// Transmit start address of descriptor 1
-#define EDRV_REGDW_TSAD2        0x28	// Transmit start address of descriptor 2
-#define EDRV_REGDW_TSAD3        0x2C	// Transmit start address of descriptor 3
-#define EDRV_REGDW_TSD0         0x10	// Transmit status of descriptor 0
-#define EDRV_REGDW_TSD_CRS      0x80000000	// Carrier sense lost
-#define EDRV_REGDW_TSD_TABT     0x40000000	// Transmit Abort
-#define EDRV_REGDW_TSD_OWC      0x20000000	// Out of window collision
-#define EDRV_REGDW_TSD_TXTH_DEF 0x00020000	// Transmit FIFO threshold of 64 bytes
-#define EDRV_REGDW_TSD_TOK      0x00008000	// Transmit OK
-#define EDRV_REGDW_TSD_TUN      0x00004000	// Transmit FIFO underrun
-#define EDRV_REGDW_TSD_OWN      0x00002000	// Owner
-
-#define EDRV_REGDW_RBSTART      0x30	// Receive buffer start address
-
-#define EDRV_REGW_CAPR          0x38	// Current address of packet read
-
-#define EDRV_REGDW_IDR0         0x00	// ID register 0
-#define EDRV_REGDW_IDR4         0x04	// ID register 4
-
-#define EDRV_REGDW_MAR0         0x08	// Multicast address register 0
-#define EDRV_REGDW_MAR4         0x0C	// Multicast address register 4
-
-// defines for the status word in the receive buffer
-#define EDRV_RXSTAT_MAR         0x8000	// Multicast address received
-#define EDRV_RXSTAT_PAM         0x4000	// Physical address matched
-#define EDRV_RXSTAT_BAR         0x2000	// Broadcast address received
-#define EDRV_RXSTAT_ISE         0x0020	// Invalid symbol error
-#define EDRV_RXSTAT_RUNT        0x0010	// Runt packet received
-#define EDRV_RXSTAT_LONG        0x0008	// Long packet
-#define EDRV_RXSTAT_CRC         0x0004	// CRC error
-#define EDRV_RXSTAT_FAE         0x0002	// Frame alignment error
-#define EDRV_RXSTAT_ROK         0x0001	// Receive OK
-
-#define EDRV_REGDW_WRITE(dwReg, dwVal)  writel(dwVal, EdrvInstance_l.m_pIoAddr + dwReg)
-#define EDRV_REGW_WRITE(dwReg, wVal)    writew(wVal, EdrvInstance_l.m_pIoAddr + dwReg)
-#define EDRV_REGB_WRITE(dwReg, bVal)    writeb(bVal, EdrvInstance_l.m_pIoAddr + dwReg)
-#define EDRV_REGDW_READ(dwReg)          readl(EdrvInstance_l.m_pIoAddr + dwReg)
-#define EDRV_REGW_READ(dwReg)           readw(EdrvInstance_l.m_pIoAddr + dwReg)
-#define EDRV_REGB_READ(dwReg)           readb(EdrvInstance_l.m_pIoAddr + dwReg)
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-
-#define EDRV_COUNT_SEND                 TGT_DBG_SIGNAL_TRACE_POINT(2)
-#define EDRV_COUNT_TIMEOUT              TGT_DBG_SIGNAL_TRACE_POINT(3)
-#define EDRV_COUNT_PCI_ERR              TGT_DBG_SIGNAL_TRACE_POINT(4)
-#define EDRV_COUNT_TX                   TGT_DBG_SIGNAL_TRACE_POINT(5)
-#define EDRV_COUNT_RX                   TGT_DBG_SIGNAL_TRACE_POINT(6)
-#define EDRV_COUNT_LATECOLLISION        TGT_DBG_SIGNAL_TRACE_POINT(10)
-#define EDRV_COUNT_TX_COL_RL            TGT_DBG_SIGNAL_TRACE_POINT(11)
-#define EDRV_COUNT_TX_FUN               TGT_DBG_SIGNAL_TRACE_POINT(12)
-#define EDRV_COUNT_TX_ERR               TGT_DBG_SIGNAL_TRACE_POINT(13)
-#define EDRV_COUNT_RX_CRC               TGT_DBG_SIGNAL_TRACE_POINT(14)
-#define EDRV_COUNT_RX_ERR               TGT_DBG_SIGNAL_TRACE_POINT(15)
-#define EDRV_COUNT_RX_FOVW              TGT_DBG_SIGNAL_TRACE_POINT(16)
-#define EDRV_COUNT_RX_PUN               TGT_DBG_SIGNAL_TRACE_POINT(17)
-#define EDRV_COUNT_RX_FAE               TGT_DBG_SIGNAL_TRACE_POINT(18)
-#define EDRV_COUNT_RX_OVW               TGT_DBG_SIGNAL_TRACE_POINT(19)
-
-#define EDRV_TRACE_CAPR(x)              TGT_DBG_POST_TRACE_VALUE(((x) & 0xFFFF) | 0x06000000)
-#define EDRV_TRACE_RX_CRC(x)            TGT_DBG_POST_TRACE_VALUE(((x) & 0xFFFF) | 0x0E000000)
-#define EDRV_TRACE_RX_ERR(x)            TGT_DBG_POST_TRACE_VALUE(((x) & 0xFFFF) | 0x0F000000)
-#define EDRV_TRACE_RX_PUN(x)            TGT_DBG_POST_TRACE_VALUE(((x) & 0xFFFF) | 0x11000000)
-#define EDRV_TRACE(x)                   TGT_DBG_POST_TRACE_VALUE(((x) & 0xFFFF0000) | 0x0000FEC0)
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-/*
-typedef struct
-{
-    BOOL            m_fUsed;
-    unsigned int    m_uiSize;
-    MCD_bufDescFec *m_pBufDescr;
-
-} tEdrvTxBufferIntern;
-*/
-
-// Private structure
-typedef struct {
-	struct pci_dev *m_pPciDev;	// pointer to PCI device structure
-	void *m_pIoAddr;	// pointer to register space of Ethernet controller
-	u8 *m_pbRxBuf;	// pointer to Rx buffer
-	dma_addr_t m_pRxBufDma;
-	u8 *m_pbTxBuf;	// pointer to Tx buffer
-	dma_addr_t m_pTxBufDma;
-	BOOL m_afTxBufUsed[EDRV_MAX_TX_BUFFERS];
-	unsigned int m_uiCurTxDesc;
-
-	tEdrvInitParam m_InitParam;
-	tEdrvTxBuffer *m_pLastTransmittedTxBuffer;
-
-} tEdrvInstance;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static int EdrvInitOne(struct pci_dev *pPciDev,
-		       const struct pci_device_id *pId);
-
-static void EdrvRemoveOne(struct pci_dev *pPciDev);
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-// buffers and buffer descriptors and pointers
-
-static struct pci_device_id aEdrvPciTbl[] = {
-	{0x10ec, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{0,}
-};
-
-MODULE_DEVICE_TABLE(pci, aEdrvPciTbl);
-
-static tEdrvInstance EdrvInstance_l;
-
-static struct pci_driver EdrvDriver = {
-	.name = DRV_NAME,
-	.id_table = aEdrvPciTbl,
-	.probe = EdrvInitOne,
-	.remove = EdrvRemoveOne,
-};
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <edrv>                                              */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static u8 EdrvCalcHash(u8 * pbMAC_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvInit
-//
-// Description: function for init of the Ethernet controller
-//
-// Parameters:  pEdrvInitParam_p    = pointer to struct including the init-parameters
-//
-// Returns:     Errorcode           = kEplSuccessful
-//                                  = kEplNoResource
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvInit(tEdrvInitParam * pEdrvInitParam_p)
-{
-	tEplKernel Ret;
-	int iResult;
-
-	Ret = kEplSuccessful;
-
-	// clear instance structure
-	EPL_MEMSET(&EdrvInstance_l, 0, sizeof(EdrvInstance_l));
-
-	// save the init data
-	EdrvInstance_l.m_InitParam = *pEdrvInitParam_p;
-
-	// register PCI driver
-	iResult = pci_register_driver(&EdrvDriver);
-	if (iResult != 0) {
-		printk("%s pci_register_driver failed with %d\n", __func__,
-		       iResult);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	if (EdrvInstance_l.m_pPciDev == NULL) {
-		printk("%s m_pPciDev=NULL\n", __func__);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-	// read MAC address from controller
-	printk("%s local MAC = ", __func__);
-	for (iResult = 0; iResult < 6; iResult++) {
-		pEdrvInitParam_p->m_abMyMacAddr[iResult] =
-		    EDRV_REGB_READ((EDRV_REGDW_IDR0 + iResult));
-		printk("%02X ",
-		       (unsigned int)pEdrvInitParam_p->m_abMyMacAddr[iResult]);
-	}
-	printk("\n");
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvShutdown
-//
-// Description: Shutdown the Ethernet controller
-//
-// Parameters:  void
-//
-// Returns:     Errorcode   = kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvShutdown(void)
-{
-
-	// unregister PCI driver
-	printk("%s calling pci_unregister_driver()\n", __func__);
-	pci_unregister_driver(&EdrvDriver);
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvDefineRxMacAddrEntry
-//
-// Description: Set a multicast entry into the Ethernet controller
-//
-// Parameters:  pbMacAddr_p     = pointer to multicast entry to set
-//
-// Returns:     Errorcode       = kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvDefineRxMacAddrEntry(u8 * pbMacAddr_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u32 dwData;
-	u8 bHash;
-
-	bHash = EdrvCalcHash(pbMacAddr_p);
-/*
-    dwData = ether_crc(6, pbMacAddr_p);
-
-    printk("EdrvDefineRxMacAddrEntry('%02X:%02X:%02X:%02X:%02X:%02X') hash = %u / %u  ether_crc = 0x%08lX\n",
-        (u16) pbMacAddr_p[0], (u16) pbMacAddr_p[1], (u16) pbMacAddr_p[2],
-        (u16) pbMacAddr_p[3], (u16) pbMacAddr_p[4], (u16) pbMacAddr_p[5],
-        (u16) bHash, (u16) (dwData >> 26), dwData);
-*/
-	if (bHash > 31) {
-		dwData = EDRV_REGDW_READ(EDRV_REGDW_MAR4);
-		dwData |= 1 << (bHash - 32);
-		EDRV_REGDW_WRITE(EDRV_REGDW_MAR4, dwData);
-	} else {
-		dwData = EDRV_REGDW_READ(EDRV_REGDW_MAR0);
-		dwData |= 1 << bHash;
-		EDRV_REGDW_WRITE(EDRV_REGDW_MAR0, dwData);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvUndefineRxMacAddrEntry
-//
-// Description: Reset a multicast entry in the Ethernet controller
-//
-// Parameters:  pbMacAddr_p     = pointer to multicast entry to reset
-//
-// Returns:     Errorcode       = kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvUndefineRxMacAddrEntry(u8 * pbMacAddr_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u32 dwData;
-	u8 bHash;
-
-	bHash = EdrvCalcHash(pbMacAddr_p);
-
-	if (bHash > 31) {
-		dwData = EDRV_REGDW_READ(EDRV_REGDW_MAR4);
-		dwData &= ~(1 << (bHash - 32));
-		EDRV_REGDW_WRITE(EDRV_REGDW_MAR4, dwData);
-	} else {
-		dwData = EDRV_REGDW_READ(EDRV_REGDW_MAR0);
-		dwData &= ~(1 << bHash);
-		EDRV_REGDW_WRITE(EDRV_REGDW_MAR0, dwData);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvAllocTxMsgBuffer
-//
-// Description: Register a Tx-Buffer
-//
-// Parameters:  pBuffer_p   = pointer to Buffer structure
-//
-// Returns:     Errorcode   = kEplSuccessful
-//                          = kEplEdrvNoFreeBufEntry
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvAllocTxMsgBuffer(tEdrvTxBuffer * pBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u32 i;
-
-	if (pBuffer_p->m_uiMaxBufferLen > EDRV_MAX_FRAME_SIZE) {
-		Ret = kEplEdrvNoFreeBufEntry;
-		goto Exit;
-	}
-	// search a free Tx buffer with appropriate size
-	for (i = 0; i < EDRV_MAX_TX_BUFFERS; i++) {
-		if (EdrvInstance_l.m_afTxBufUsed[i] == FALSE) {
-			// free channel found
-			EdrvInstance_l.m_afTxBufUsed[i] = TRUE;
-			pBuffer_p->m_uiBufferNumber = i;
-			pBuffer_p->m_pbBuffer =
-			    EdrvInstance_l.m_pbTxBuf +
-			    (i * EDRV_MAX_FRAME_SIZE);
-			pBuffer_p->m_uiMaxBufferLen = EDRV_MAX_FRAME_SIZE;
-			break;
-		}
-	}
-	if (i >= EDRV_MAX_TX_BUFFERS) {
-		Ret = kEplEdrvNoFreeBufEntry;
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvReleaseTxMsgBuffer
-//
-// Description: Register a Tx-Buffer
-//
-// Parameters:  pBuffer_p   = pointer to Buffer structure
-//
-// Returns:     Errorcode   = kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvReleaseTxMsgBuffer(tEdrvTxBuffer * pBuffer_p)
-{
-	unsigned int uiBufferNumber;
-
-	uiBufferNumber = pBuffer_p->m_uiBufferNumber;
-
-	if (uiBufferNumber < EDRV_MAX_TX_BUFFERS) {
-		EdrvInstance_l.m_afTxBufUsed[uiBufferNumber] = FALSE;
-	}
-
-	return kEplSuccessful;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvSendTxMsg
-//
-// Description: immediately starts the transmission of the buffer
-//
-// Parameters:  pBuffer_p   = buffer descriptor to transmit
-//
-// Returns:     Errorcode   = kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvSendTxMsg(tEdrvTxBuffer * pBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiBufferNumber;
-	u32 dwTemp;
-
-	uiBufferNumber = pBuffer_p->m_uiBufferNumber;
-
-	if ((uiBufferNumber >= EDRV_MAX_TX_BUFFERS)
-	    || (EdrvInstance_l.m_afTxBufUsed[uiBufferNumber] == FALSE)) {
-		Ret = kEplEdrvBufNotExisting;
-		goto Exit;
-	}
-
-	if (EdrvInstance_l.m_pLastTransmittedTxBuffer != NULL) {	// transmission is already active
-		Ret = kEplInvalidOperation;
-		dwTemp =
-		    EDRV_REGDW_READ((EDRV_REGDW_TSD0 +
-				     (EdrvInstance_l.m_uiCurTxDesc *
-				      sizeof(u32))));
-		printk("%s InvOp TSD%u = 0x%08X", __func__,
-		       EdrvInstance_l.m_uiCurTxDesc, dwTemp);
-		printk("  Cmd = 0x%02X\n",
-		       (u16) EDRV_REGB_READ(EDRV_REGB_COMMAND));
-		goto Exit;
-	}
-	// save pointer to buffer structure for TxHandler
-	EdrvInstance_l.m_pLastTransmittedTxBuffer = pBuffer_p;
-
-	EDRV_COUNT_SEND;
-
-	// pad with zeros if necessary, because controller does not do it
-	if (pBuffer_p->m_uiTxMsgLen < MIN_ETH_SIZE) {
-		EPL_MEMSET(pBuffer_p->m_pbBuffer + pBuffer_p->m_uiTxMsgLen, 0,
-			   MIN_ETH_SIZE - pBuffer_p->m_uiTxMsgLen);
-		pBuffer_p->m_uiTxMsgLen = MIN_ETH_SIZE;
-	}
-	// set DMA address of buffer
-	EDRV_REGDW_WRITE((EDRV_REGDW_TSAD0 +
-			  (EdrvInstance_l.m_uiCurTxDesc * sizeof(u32))),
-			 (EdrvInstance_l.m_pTxBufDma +
-			  (uiBufferNumber * EDRV_MAX_FRAME_SIZE)));
-	dwTemp =
-	    EDRV_REGDW_READ((EDRV_REGDW_TSAD0 +
-			     (EdrvInstance_l.m_uiCurTxDesc * sizeof(u32))));
-//    printk("%s TSAD%u = 0x%08lX", __func__, EdrvInstance_l.m_uiCurTxDesc, dwTemp);
-
-	// start transmission
-	EDRV_REGDW_WRITE((EDRV_REGDW_TSD0 +
-			  (EdrvInstance_l.m_uiCurTxDesc * sizeof(u32))),
-			 (EDRV_REGDW_TSD_TXTH_DEF | pBuffer_p->m_uiTxMsgLen));
-	dwTemp =
-	    EDRV_REGDW_READ((EDRV_REGDW_TSD0 +
-			     (EdrvInstance_l.m_uiCurTxDesc * sizeof(u32))));
-//    printk(" TSD%u = 0x%08lX / 0x%08lX\n", EdrvInstance_l.m_uiCurTxDesc, dwTemp, (u32)(EDRV_REGDW_TSD_TXTH_DEF | pBuffer_p->m_uiTxMsgLen));
-
-      Exit:
-	return Ret;
-}
-
-#if 0
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvTxMsgReady
-//
-// Description: starts copying the buffer to the ethernet controller's FIFO
-//
-// Parameters:  pbBuffer_p - bufferdescriptor to transmit
-//
-// Returns:     Errorcode - kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvTxMsgReady(tEdrvTxBuffer * pBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiBufferNumber;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvTxMsgStart
-//
-// Description: starts transmission of the ethernet controller's FIFO
-//
-// Parameters:  pbBuffer_p - bufferdescriptor to transmit
-//
-// Returns:     Errorcode - kEplSuccessful
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EdrvTxMsgStart(tEdrvTxBuffer * pBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvReinitRx
-//
-// Description: reinitialize the Rx process, because of error
-//
-// Parameters:  void
-//
-// Returns:     void
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static void EdrvReinitRx(void)
-{
-	u8 bCmd;
-
-	// simply switch off and on the receiver
-	// this will reset the CAPR register
-	bCmd = EDRV_REGB_READ(EDRV_REGB_COMMAND);
-	EDRV_REGB_WRITE(EDRV_REGB_COMMAND, (bCmd & ~EDRV_REGB_COMMAND_RE));
-	EDRV_REGB_WRITE(EDRV_REGB_COMMAND, bCmd);
-
-	// set receive configuration register
-	EDRV_REGDW_WRITE(EDRV_REGDW_RCR, EDRV_REGDW_RCR_DEF);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:     EdrvInterruptHandler
-//
-// Description:  interrupt handler
-//
-// Parameters:   void
-//
-// Returns:      void
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if 0
-void EdrvInterruptHandler(void)
-{
-}
-#endif
-
-static int TgtEthIsr(int nIrqNum_p, void *ppDevInstData_p)
-{
-//    EdrvInterruptHandler();
-	tEdrvRxBuffer RxBuffer;
-	tEdrvTxBuffer *pTxBuffer;
-	u16 wStatus;
-	u32 dwTxStatus;
-	u32 dwRxStatus;
-	u16 wCurRx;
-	u8 *pbRxBuf;
-	unsigned int uiLength;
-	int iHandled = IRQ_HANDLED;
-
-//    printk("¤");
-
-	// read the interrupt status
-	wStatus = EDRV_REGW_READ(EDRV_REGW_INT_STATUS);
-
-	// acknowledge the interrupts
-	EDRV_REGW_WRITE(EDRV_REGW_INT_STATUS, wStatus);
-
-	if (wStatus == 0) {
-		iHandled = IRQ_NONE;
-		goto Exit;
-	}
-	// process tasks
-	if ((wStatus & (EDRV_REGW_INT_TER | EDRV_REGW_INT_TOK)) != 0) {	// transmit interrupt
-
-		if (EdrvInstance_l.m_pbTxBuf == NULL) {
-			printk("%s Tx buffers currently not allocated\n",
-			       __func__);
-			goto Exit;
-		}
-		// read transmit status
-		dwTxStatus =
-		    EDRV_REGDW_READ((EDRV_REGDW_TSD0 +
-				     (EdrvInstance_l.m_uiCurTxDesc *
-				      sizeof(u32))));
-		if ((dwTxStatus & (EDRV_REGDW_TSD_TOK | EDRV_REGDW_TSD_TABT | EDRV_REGDW_TSD_TUN)) != 0) {	// transmit finished
-			EdrvInstance_l.m_uiCurTxDesc =
-			    (EdrvInstance_l.m_uiCurTxDesc + 1) & 0x03;
-			pTxBuffer = EdrvInstance_l.m_pLastTransmittedTxBuffer;
-			EdrvInstance_l.m_pLastTransmittedTxBuffer = NULL;
-
-			if ((dwTxStatus & EDRV_REGDW_TSD_TOK) != 0) {
-				EDRV_COUNT_TX;
-			} else if ((dwTxStatus & EDRV_REGDW_TSD_TUN) != 0) {
-				EDRV_COUNT_TX_FUN;
-			} else {	// assume EDRV_REGDW_TSD_TABT
-				EDRV_COUNT_TX_COL_RL;
-			}
-
-//            printk("T");
-			if (pTxBuffer != NULL) {
-				// call Tx handler of Data link layer
-				EdrvInstance_l.m_InitParam.
-				    m_pfnTxHandler(pTxBuffer);
-			}
-		} else {
-			EDRV_COUNT_TX_ERR;
-		}
-	}
-
-	if ((wStatus & (EDRV_REGW_INT_RER | EDRV_REGW_INT_FOVW | EDRV_REGW_INT_RXOVW | EDRV_REGW_INT_PUN)) != 0) {	// receive error interrupt
-
-		if ((wStatus & EDRV_REGW_INT_FOVW) != 0) {
-			EDRV_COUNT_RX_FOVW;
-		} else if ((wStatus & EDRV_REGW_INT_RXOVW) != 0) {
-			EDRV_COUNT_RX_OVW;
-		} else if ((wStatus & EDRV_REGW_INT_PUN) != 0) {	// Packet underrun
-			EDRV_TRACE_RX_PUN(wStatus);
-			EDRV_COUNT_RX_PUN;
-		} else {	/*if ((wStatus & EDRV_REGW_INT_RER) != 0) */
-
-			EDRV_TRACE_RX_ERR(wStatus);
-			EDRV_COUNT_RX_ERR;
-		}
-
-		// reinitialize Rx process
-		EdrvReinitRx();
-	}
-
-	if ((wStatus & EDRV_REGW_INT_ROK) != 0) {	// receive interrupt
-
-		if (EdrvInstance_l.m_pbRxBuf == NULL) {
-			printk("%s Rx buffers currently not allocated\n",
-			       __func__);
-			goto Exit;
-		}
-		// read current offset in receive buffer
-		wCurRx =
-		    (EDRV_REGW_READ(EDRV_REGW_CAPR) +
-		     0x10) % EDRV_RX_BUFFER_LENGTH;
-
-		while ((EDRV_REGB_READ(EDRV_REGB_COMMAND) & EDRV_REGB_COMMAND_BUFE) == 0) {	// frame available
-
-			// calculate pointer to current frame in receive buffer
-			pbRxBuf = EdrvInstance_l.m_pbRxBuf + wCurRx;
-
-			// read receive status u32
-			dwRxStatus = le32_to_cpu(*((u32 *) pbRxBuf));
-
-			// calculate length of received frame
-			uiLength = dwRxStatus >> 16;
-
-			if (uiLength == 0xFFF0) {	// frame is unfinished (maybe early Rx interrupt is active)
-				break;
-			}
-
-			if ((dwRxStatus & EDRV_RXSTAT_ROK) == 0) {	// error occured while receiving this frame
-				// ignore it
-				if ((dwRxStatus & EDRV_RXSTAT_FAE) != 0) {
-					EDRV_COUNT_RX_FAE;
-				} else if ((dwRxStatus & EDRV_RXSTAT_CRC) != 0) {
-					EDRV_TRACE_RX_CRC(dwRxStatus);
-					EDRV_COUNT_RX_CRC;
-				} else {
-					EDRV_TRACE_RX_ERR(dwRxStatus);
-					EDRV_COUNT_RX_ERR;
-				}
-
-				// reinitialize Rx process
-				EdrvReinitRx();
-
-				break;
-			} else {	// frame is OK
-				RxBuffer.m_BufferInFrame =
-				    kEdrvBufferLastInFrame;
-				RxBuffer.m_uiRxMsgLen = uiLength - ETH_CRC_SIZE;
-				RxBuffer.m_pbBuffer =
-				    pbRxBuf + sizeof(dwRxStatus);
-
-//                printk("R");
-				EDRV_COUNT_RX;
-
-				// call Rx handler of Data link layer
-				EdrvInstance_l.m_InitParam.
-				    m_pfnRxHandler(&RxBuffer);
-			}
-
-			// calulate new offset (u32 aligned)
-			wCurRx =
-			    (u16) ((wCurRx + uiLength + sizeof(dwRxStatus) +
-				     3) & ~0x3);
-			EDRV_TRACE_CAPR(wCurRx - 0x10);
-			EDRV_REGW_WRITE(EDRV_REGW_CAPR, wCurRx - 0x10);
-
-			// reread current offset in receive buffer
-			wCurRx =
-			    (EDRV_REGW_READ(EDRV_REGW_CAPR) +
-			     0x10) % EDRV_RX_BUFFER_LENGTH;
-
-		}
-	}
-
-	if ((wStatus & EDRV_REGW_INT_SERR) != 0) {	// PCI error
-		EDRV_COUNT_PCI_ERR;
-	}
-
-	if ((wStatus & EDRV_REGW_INT_TIMEOUT) != 0) {	// Timeout
-		EDRV_COUNT_TIMEOUT;
-	}
-
-      Exit:
-	return iHandled;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvInitOne
-//
-// Description: initializes one PCI device
-//
-// Parameters:  pPciDev             = pointer to corresponding PCI device structure
-//              pId                 = PCI device ID
-//
-// Returns:     (int)               = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static int EdrvInitOne(struct pci_dev *pPciDev, const struct pci_device_id *pId)
-{
-	int iResult = 0;
-	u32 dwTemp;
-
-	if (EdrvInstance_l.m_pPciDev != NULL) {	// Edrv is already connected to a PCI device
-		printk("%s device %s discarded\n", __func__,
-		       pci_name(pPciDev));
-		iResult = -ENODEV;
-		goto Exit;
-	}
-
-	if (pPciDev->revision >= 0x20) {
-		printk
-		    ("%s device %s is an enhanced 8139C+ version, which is not supported\n",
-		     __func__, pci_name(pPciDev));
-		iResult = -ENODEV;
-		goto Exit;
-	}
-
-	EdrvInstance_l.m_pPciDev = pPciDev;
-
-	// enable device
-	printk("%s enable device\n", __func__);
-	iResult = pci_enable_device(pPciDev);
-	if (iResult != 0) {
-		goto Exit;
-	}
-
-	if ((pci_resource_flags(pPciDev, 1) & IORESOURCE_MEM) == 0) {
-		iResult = -ENODEV;
-		goto Exit;
-	}
-
-	printk("%s request regions\n", __func__);
-	iResult = pci_request_regions(pPciDev, DRV_NAME);
-	if (iResult != 0) {
-		goto Exit;
-	}
-
-	printk("%s ioremap\n", __func__);
-	EdrvInstance_l.m_pIoAddr =
-	    ioremap(pci_resource_start(pPciDev, 1),
-		    pci_resource_len(pPciDev, 1));
-	if (EdrvInstance_l.m_pIoAddr == NULL) {	// remap of controller's register space failed
-		iResult = -EIO;
-		goto Exit;
-	}
-	// enable PCI busmaster
-	printk("%s enable busmaster\n", __func__);
-	pci_set_master(pPciDev);
-
-	// reset controller
-	printk("%s reset controller\n", __func__);
-	EDRV_REGB_WRITE(EDRV_REGB_COMMAND, EDRV_REGB_COMMAND_RST);
-
-	// wait until reset has finished
-	for (iResult = 500; iResult > 0; iResult--) {
-		if ((EDRV_REGB_READ(EDRV_REGB_COMMAND) & EDRV_REGB_COMMAND_RST)
-		    == 0) {
-			break;
-		}
-
-		schedule_timeout(10);
-	}
-
-	// check hardware version, i.e. chip ID
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_TCR);
-	if (((dwTemp & EDRV_REGDW_TCR_VER_MASK) != EDRV_REGDW_TCR_VER_C)
-	    && ((dwTemp & EDRV_REGDW_TCR_VER_MASK) != EDRV_REGDW_TCR_VER_D)) {	// unsupported chip
-		printk("%s Unsupported chip! TCR = 0x%08X\n", __func__,
-		       dwTemp);
-		iResult = -ENODEV;
-		goto Exit;
-	}
-	// disable interrupts
-	printk("%s disable interrupts\n", __func__);
-	EDRV_REGW_WRITE(EDRV_REGW_INT_MASK, 0);
-	// acknowledge all pending interrupts
-	EDRV_REGW_WRITE(EDRV_REGW_INT_STATUS,
-			EDRV_REGW_READ(EDRV_REGW_INT_STATUS));
-
-	// install interrupt handler
-	printk("%s install interrupt handler\n", __func__);
-	iResult =
-	    request_irq(pPciDev->irq, TgtEthIsr, IRQF_SHARED,
-			DRV_NAME /*pPciDev->dev.name */ , pPciDev);
-	if (iResult != 0) {
-		goto Exit;
-	}
-
-/*
-    // unlock configuration registers
-    printk("%s unlock configuration registers\n", __func__);
-    EDRV_REGB_WRITE(EDRV_REGB_CMD9346, EDRV_REGB_CMD9346_UNLOCK);
-
-    // check if user specified a MAC address
-    printk("%s check specified MAC address\n", __func__);
-    for (iResult = 0; iResult < 6; iResult++)
-    {
-        if (EdrvInstance_l.m_InitParam.m_abMyMacAddr[iResult] != 0)
-        {
-            printk("%s set local MAC address\n", __func__);
-            // write this MAC address to controller
-            EDRV_REGDW_WRITE(EDRV_REGDW_IDR0,
-                le32_to_cpu(*((u32*)&EdrvInstance_l.m_InitParam.m_abMyMacAddr[0])));
-            dwTemp = EDRV_REGDW_READ(EDRV_REGDW_IDR0);
-
-            EDRV_REGDW_WRITE(EDRV_REGDW_IDR4,
-                le32_to_cpu(*((u32*)&EdrvInstance_l.m_InitParam.m_abMyMacAddr[4])));
-            dwTemp = EDRV_REGDW_READ(EDRV_REGDW_IDR4);
-            break;
-        }
-    }
-    iResult = 0;
-
-    // lock configuration registers
-    EDRV_REGB_WRITE(EDRV_REGB_CMD9346, EDRV_REGB_CMD9346_LOCK);
-*/
-
-	// allocate buffers
-	printk("%s allocate buffers\n", __func__);
-	EdrvInstance_l.m_pbTxBuf =
-	    pci_alloc_consistent(pPciDev, EDRV_TX_BUFFER_SIZE,
-				 &EdrvInstance_l.m_pTxBufDma);
-	if (EdrvInstance_l.m_pbTxBuf == NULL) {
-		iResult = -ENOMEM;
-		goto Exit;
-	}
-
-	EdrvInstance_l.m_pbRxBuf =
-	    pci_alloc_consistent(pPciDev, EDRV_RX_BUFFER_SIZE,
-				 &EdrvInstance_l.m_pRxBufDma);
-	if (EdrvInstance_l.m_pbRxBuf == NULL) {
-		iResult = -ENOMEM;
-		goto Exit;
-	}
-	// reset pointers for Tx buffers
-	printk("%s reset pointers fo Tx buffers\n", __func__);
-	EDRV_REGDW_WRITE(EDRV_REGDW_TSAD0, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_TSAD0);
-	EDRV_REGDW_WRITE(EDRV_REGDW_TSAD1, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_TSAD1);
-	EDRV_REGDW_WRITE(EDRV_REGDW_TSAD2, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_TSAD2);
-	EDRV_REGDW_WRITE(EDRV_REGDW_TSAD3, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_TSAD3);
-
-	printk("    Command = 0x%02X\n",
-	       (u16) EDRV_REGB_READ(EDRV_REGB_COMMAND));
-
-	// set pointer for receive buffer in controller
-	printk("%s set pointer to Rx buffer\n", __func__);
-	EDRV_REGDW_WRITE(EDRV_REGDW_RBSTART, EdrvInstance_l.m_pRxBufDma);
-
-	// enable transmitter and receiver
-	printk("%s enable Tx and Rx", __func__);
-	EDRV_REGB_WRITE(EDRV_REGB_COMMAND,
-			(EDRV_REGB_COMMAND_RE | EDRV_REGB_COMMAND_TE));
-	printk("  Command = 0x%02X\n",
-	       (u16) EDRV_REGB_READ(EDRV_REGB_COMMAND));
-
-	// clear missed packet counter to enable Rx/Tx process
-	EDRV_REGDW_WRITE(EDRV_REGDW_MPC, 0);
-
-	// set transmit configuration register
-	printk("%s set Tx conf register", __func__);
-	EDRV_REGDW_WRITE(EDRV_REGDW_TCR, EDRV_REGDW_TCR_DEF);
-	printk(" = 0x%08X\n", EDRV_REGDW_READ(EDRV_REGDW_TCR));
-
-	// set receive configuration register
-	printk("%s set Rx conf register", __func__);
-	EDRV_REGDW_WRITE(EDRV_REGDW_RCR, EDRV_REGDW_RCR_DEF);
-	printk(" = 0x%08X\n", EDRV_REGDW_READ(EDRV_REGDW_RCR));
-
-	// reset multicast MAC address filter
-	EDRV_REGDW_WRITE(EDRV_REGDW_MAR0, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_MAR0);
-	EDRV_REGDW_WRITE(EDRV_REGDW_MAR4, 0);
-	dwTemp = EDRV_REGDW_READ(EDRV_REGDW_MAR4);
-
-/*
-    // enable transmitter and receiver
-    printk("%s enable Tx and Rx", __func__);
-    EDRV_REGB_WRITE(EDRV_REGB_COMMAND, (EDRV_REGB_COMMAND_RE | EDRV_REGB_COMMAND_TE));
-    printk("  Command = 0x%02X\n", (u16) EDRV_REGB_READ(EDRV_REGB_COMMAND));
-*/
-	// disable early interrupts
-	EDRV_REGW_WRITE(EDRV_REGW_MULINT, 0);
-
-	// enable interrupts
-	printk("%s enable interrupts\n", __func__);
-	EDRV_REGW_WRITE(EDRV_REGW_INT_MASK, EDRV_REGW_INT_MASK_DEF);
-
-      Exit:
-	printk("%s finished with %d\n", __func__, iResult);
-	return iResult;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvRemoveOne
-//
-// Description: shuts down one PCI device
-//
-// Parameters:  pPciDev             = pointer to corresponding PCI device structure
-//
-// Returns:     (void)
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void EdrvRemoveOne(struct pci_dev *pPciDev)
-{
-
-	if (EdrvInstance_l.m_pPciDev != pPciDev) {	// trying to remove unknown device
-		BUG_ON(EdrvInstance_l.m_pPciDev != pPciDev);
-		goto Exit;
-	}
-	// disable transmitter and receiver
-	EDRV_REGB_WRITE(EDRV_REGB_COMMAND, 0);
-
-	// disable interrupts
-	EDRV_REGW_WRITE(EDRV_REGW_INT_MASK, 0);
-
-	// remove interrupt handler
-	free_irq(pPciDev->irq, pPciDev);
-
-	// free buffers
-	if (EdrvInstance_l.m_pbTxBuf != NULL) {
-		pci_free_consistent(pPciDev, EDRV_TX_BUFFER_SIZE,
-				    EdrvInstance_l.m_pbTxBuf,
-				    EdrvInstance_l.m_pTxBufDma);
-		EdrvInstance_l.m_pbTxBuf = NULL;
-	}
-
-	if (EdrvInstance_l.m_pbRxBuf != NULL) {
-		pci_free_consistent(pPciDev, EDRV_RX_BUFFER_SIZE,
-				    EdrvInstance_l.m_pbRxBuf,
-				    EdrvInstance_l.m_pRxBufDma);
-		EdrvInstance_l.m_pbRxBuf = NULL;
-	}
-	// unmap controller's register space
-	if (EdrvInstance_l.m_pIoAddr != NULL) {
-		iounmap(EdrvInstance_l.m_pIoAddr);
-	}
-	// disable the PCI device
-	pci_disable_device(pPciDev);
-
-	// release memory regions
-	pci_release_regions(pPciDev);
-
-	EdrvInstance_l.m_pPciDev = NULL;
-
-      Exit:;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EdrvCalcHash
-//
-// Description: function calculates the entry for the hash-table from MAC
-//              address
-//
-// Parameters:  pbMAC_p - pointer to MAC address
-//
-// Returns:     hash value
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#define HASH_BITS              6	// used bits in hash
-#define CRC32_POLY    0x04C11DB6	//
-//#define CRC32_POLY    0xEDB88320  //
-// G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
-
-static u8 EdrvCalcHash(u8 * pbMAC_p)
-{
-	u32 dwByteCounter;
-	u32 dwBitCounter;
-	u32 dwData;
-	u32 dwCrc;
-	u32 dwCarry;
-	u8 *pbData;
-	u8 bHash;
-
-	pbData = pbMAC_p;
-
-	// calculate crc32 value of mac address
-	dwCrc = 0xFFFFFFFF;
-
-	for (dwByteCounter = 0; dwByteCounter < 6; dwByteCounter++) {
-		dwData = *pbData;
-		pbData++;
-		for (dwBitCounter = 0; dwBitCounter < 8;
-		     dwBitCounter++, dwData >>= 1) {
-			dwCarry = (((dwCrc >> 31) ^ dwData) & 1);
-			dwCrc = dwCrc << 1;
-			if (dwCarry != 0) {
-				dwCrc = (dwCrc ^ CRC32_POLY) | dwCarry;
-			}
-		}
-	}
-
-//    printk("MyCRC = 0x%08lX\n", dwCrc);
-	// only upper 6 bits (HASH_BITS) are used
-	// which point to specific bit in the hash registers
-	bHash = (u8) ((dwCrc >> (32 - HASH_BITS)) & 0x3f);
-
-	return bHash;
-}
diff --git a/drivers/staging/epl/EdrvFec.h b/drivers/staging/epl/EdrvFec.h
deleted file mode 100644
index 56728d1..0000000
--- a/drivers/staging/epl/EdrvFec.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  interface for ethernetdriver
-                "fast ethernet controller" (FEC)
-                freescale coldfire MCF528x and compatible FEC
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EdrvFec.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Dev C++ and GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2005/08/01 m.b.:   start of implementation
-
-****************************************************************************/
-
-#ifndef _EDRVFEC_H_
-#define _EDRVFEC_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-// do this in config header
-#define TARGET_HARDWARE TGTHW_SPLC_CF54
-
-// base addresses
-#if ((TARGET_HARDWARE & TGT_CPU_MASK_) == TGT_CPU_5282)
-
-#elif ((TARGET_HARDWARE & TGT_CPU_MASK_) == TGT_CPU_5485)
-
-#else
-
-#error 'ERROR: Target was never implemented!'
-
-#endif
-
-//---------------------------------------------------------------------------
-// types
-//---------------------------------------------------------------------------
-
-// Rx and Tx buffer descriptor format
-typedef struct {
-	u16 m_wStatus;		// control / status  ---  used by edrv, do not change in application
-	u16 m_wLength;		// transfer length
-	u8 *m_pbData;		// buffer address
-} tBufferDescr;
-
-#if ((TARGET_HARDWARE & TGT_CPU_MASK_) == TGT_CPU_5282)
-
-#elif ((TARGET_HARDWARE & TGT_CPU_MASK_) == TGT_CPU_5485)
-
-#endif
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EDRV_FEC_H_
diff --git a/drivers/staging/epl/EdrvSim.h b/drivers/staging/epl/EdrvSim.h
deleted file mode 100644
index 191ec14..0000000
--- a/drivers/staging/epl/EdrvSim.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  interface for ethernet driver simulation
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EdrvSim.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Dev C++ and GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/15 d.k.:   start of implementation
-
-****************************************************************************/
-
-#ifndef _EDRVSIM_H_
-#define _EDRVSIM_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-void EdrvRxInterruptHandler(u8 bBufferInFrame_p, u8 * pbEthernetData_p,
-			    u16 wDataLen_p);
-
-#endif // #ifndef _EDRVSIM_H_
diff --git a/drivers/staging/epl/Epl.h b/drivers/staging/epl/Epl.h
deleted file mode 100644
index 7f22b04..0000000
--- a/drivers/staging/epl/Epl.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL API layer
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: Epl.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_API_H_
-#define _EPL_API_H_
-
-#include "EplInc.h"
-#include "EplSdo.h"
-#include "EplObd.h"
-#include "EplLed.h"
-#include "EplEvent.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct {
-	unsigned int m_uiNodeId;
-	tEplNmtState m_NmtState;
-	tEplNmtNodeEvent m_NodeEvent;
-	u16 m_wErrorCode;	// EPL error code if m_NodeEvent == kEplNmtNodeEventError
-	BOOL m_fMandatory;
-
-} tEplApiEventNode;
-
-typedef struct {
-	tEplNmtState m_NmtState;	// local NMT state
-	tEplNmtBootEvent m_BootEvent;
-	u16 m_wErrorCode;	// EPL error code if m_BootEvent == kEplNmtBootEventError
-
-} tEplApiEventBoot;
-
-typedef struct {
-	tEplLedType m_LedType;	// type of the LED (e.g. Status or Error)
-	BOOL m_fOn;		// state of the LED (e.g. on or off)
-
-} tEplApiEventLed;
-
-typedef enum {
-	kEplApiEventNmtStateChange = 0x10,	// m_NmtStateChange
-//    kEplApiEventRequestNmt     = 0x11,    // m_bNmtCmd
-	kEplApiEventCriticalError = 0x12,	// m_InternalError, Stack halted
-	kEplApiEventWarning = 0x13,	// m_InternalError, Stack running
-	kEplApiEventNode = 0x20,	// m_Node
-	kEplApiEventBoot = 0x21,	// m_Boot
-	kEplApiEventSdo = 0x62,	// m_Sdo
-	kEplApiEventObdAccess = 0x69,	// m_ObdCbParam
-	kEplApiEventLed = 0x70,	// m_Led
-
-} tEplApiEventType;
-
-typedef union {
-	tEplEventNmtStateChange m_NmtStateChange;
-	tEplEventError m_InternalError;
-	tEplSdoComFinished m_Sdo;
-	tEplObdCbParam m_ObdCbParam;
-	tEplApiEventNode m_Node;
-	tEplApiEventBoot m_Boot;
-	tEplApiEventLed m_Led;
-
-} tEplApiEventArg;
-
-typedef tEplKernel(*tEplApiCbEvent) (tEplApiEventType EventType_p,	// IN: event type (enum)
-				     tEplApiEventArg *pEventArg_p,	// IN: event argument (union)
-				      void *pUserArg_p);
-
-typedef struct {
-	unsigned int m_uiSizeOfStruct;
-	BOOL m_fAsyncOnly;	// do not need to register PRes
-	unsigned int m_uiNodeId;	// local node ID
-	u8 m_abMacAddress[6];	// local MAC address
-
-	// 0x1F82: NMT_FeatureFlags_U32
-	u32 m_dwFeatureFlags;
-	// Cycle Length (0x1006: NMT_CycleLen_U32) in [us]
-	u32 m_dwCycleLen;	// required for error detection
-	// 0x1F98: NMT_CycleTiming_REC
-	// 0x1F98.1: IsochrTxMaxPayload_U16
-	unsigned int m_uiIsochrTxMaxPayload;	// const
-	// 0x1F98.2: IsochrRxMaxPayload_U16
-	unsigned int m_uiIsochrRxMaxPayload;	// const
-	// 0x1F98.3: PResMaxLatency_U32
-	u32 m_dwPresMaxLatency;	// const in [ns], only required for IdentRes
-	// 0x1F98.4: PReqActPayloadLimit_U16
-	unsigned int m_uiPreqActPayloadLimit;	// required for initialisation (+28 bytes)
-	// 0x1F98.5: PResActPayloadLimit_U16
-	unsigned int m_uiPresActPayloadLimit;	// required for initialisation of Pres frame (+28 bytes)
-	// 0x1F98.6: ASndMaxLatency_U32
-	u32 m_dwAsndMaxLatency;	// const in [ns], only required for IdentRes
-	// 0x1F98.7: MultiplCycleCnt_U8
-	unsigned int m_uiMultiplCycleCnt;	// required for error detection
-	// 0x1F98.8: AsyncMTU_U16
-	unsigned int m_uiAsyncMtu;	// required to set up max frame size
-	// 0x1F98.9: Prescaler_U16
-	unsigned int m_uiPrescaler;	// required for sync
-	// $$$ Multiplexed Slot
-
-	// 0x1C14: DLL_LossOfFrameTolerance_U32 in [ns]
-	u32 m_dwLossOfFrameTolerance;
-
-	// 0x1F8A: NMT_MNCycleTiming_REC
-	// 0x1F8A.1: WaitSoCPReq_U32 in [ns]
-	u32 m_dwWaitSocPreq;
-
-	// 0x1F8A.2: AsyncSlotTimeout_U32 in [ns]
-	u32 m_dwAsyncSlotTimeout;
-
-	u32 m_dwDeviceType;	// NMT_DeviceType_U32
-	u32 m_dwVendorId;	// NMT_IdentityObject_REC.VendorId_U32
-	u32 m_dwProductCode;	// NMT_IdentityObject_REC.ProductCode_U32
-	u32 m_dwRevisionNumber;	// NMT_IdentityObject_REC.RevisionNo_U32
-	u32 m_dwSerialNumber;	// NMT_IdentityObject_REC.SerialNo_U32
-	u64 m_qwVendorSpecificExt1;
-	u32 m_dwVerifyConfigurationDate;	// CFM_VerifyConfiguration_REC.ConfDate_U32
-	u32 m_dwVerifyConfigurationTime;	// CFM_VerifyConfiguration_REC.ConfTime_U32
-	u32 m_dwApplicationSwDate;	// PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_dwApplicationSwTime;	// PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_dwIpAddress;
-	u32 m_dwSubnetMask;
-	u32 m_dwDefaultGateway;
-	u8 m_sHostname[32];
-	u8 m_abVendorSpecificExt2[48];
-
-	char *m_pszDevName;	// NMT_ManufactDevName_VS (0x1008/0 local OD)
-	char *m_pszHwVersion;	// NMT_ManufactHwVers_VS  (0x1009/0 local OD)
-	char *m_pszSwVersion;	// NMT_ManufactSwVers_VS  (0x100A/0 local OD)
-
-	tEplApiCbEvent m_pfnCbEvent;
-	void *m_pEventUserArg;
-	tEplSyncCb m_pfnCbSync;
-
-} tEplApiInitParam;
-
-typedef struct {
-	void *m_pImage;
-	unsigned int m_uiSize;
-
-} tEplApiProcessImage;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-tEplKernel EplApiInitialize(tEplApiInitParam *pInitParam_p);
-
-tEplKernel EplApiShutdown(void);
-
-tEplKernel EplApiReadObject(tEplSdoComConHdl *pSdoComConHdl_p,
-			    unsigned int uiNodeId_p,
-			    unsigned int uiIndex_p,
-			    unsigned int uiSubindex_p,
-			    void *pDstData_le_p,
-			    unsigned int *puiSize_p,
-			    tEplSdoType SdoType_p, void *pUserArg_p);
-
-tEplKernel EplApiWriteObject(tEplSdoComConHdl *pSdoComConHdl_p,
-			     unsigned int uiNodeId_p,
-			     unsigned int uiIndex_p,
-			     unsigned int uiSubindex_p,
-			     void *pSrcData_le_p,
-			     unsigned int uiSize_p,
-			     tEplSdoType SdoType_p, void *pUserArg_p);
-
-tEplKernel EplApiFreeSdoChannel(tEplSdoComConHdl SdoComConHdl_p);
-
-tEplKernel EplApiReadLocalObject(unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 void *pDstData_p,
-				 unsigned int *puiSize_p);
-
-tEplKernel EplApiWriteLocalObject(unsigned int uiIndex_p,
-				  unsigned int uiSubindex_p,
-				  void *pSrcData_p,
-				  unsigned int uiSize_p);
-
-tEplKernel EplApiCbObdAccess(tEplObdCbParam *pParam_p);
-
-tEplKernel EplApiLinkObject(unsigned int uiObjIndex_p,
-			    void *pVar_p,
-			    unsigned int *puiVarEntries_p,
-			    tEplObdSize *pEntrySize_p,
-			    unsigned int uiFirstSubindex_p);
-
-tEplKernel EplApiExecNmtCommand(tEplNmtEvent NmtEvent_p);
-
-tEplKernel EplApiProcess(void);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-tEplKernel EplApiMnTriggerStateChange(unsigned int uiNodeId_p,
-				      tEplNmtNodeCommand NodeCommand_p);
-#endif
-
-tEplKernel EplApiGetIdentResponse(unsigned int uiNodeId_p,
-				  tEplIdentResponse **ppIdentResponse_p);
-
-// functions for process image will be implemented in separate file
-tEplKernel EplApiProcessImageSetup(void);
-tEplKernel EplApiProcessImageExchangeIn(tEplApiProcessImage *pPI_p);
-tEplKernel EplApiProcessImageExchangeOut(tEplApiProcessImage *pPI_p);
-
-#endif // #ifndef _EPL_API_H_
diff --git a/drivers/staging/epl/EplAmi.h b/drivers/staging/epl/EplAmi.h
deleted file mode 100644
index 3b46ea1..0000000
--- a/drivers/staging/epl/EplAmi.h
+++ /dev/null
@@ -1,323 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Definitions for Abstract Memory Interface
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplAmi.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.2 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                GCC
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-   06.03.2000  -rs
-               Implementation
-
-   16.09.2002  -as
-               To save code space the functions AmiSetByte and AmiGetByte
-               are replaced by macros. For targets which assign u8 by
-               an 16Bit type, the definition of macros must changed to
-               functions.
-
-   23.02.2005  r.d.:
-               Functions included for extended data types such as UNSIGNED24,
-               UNSIGNED40, ...
-
-   13.06.2006  d.k.:
-               Extended the interface for EPL with the different functions
-               for little endian and big endian
-
-****************************************************************************/
-
-#ifndef _EPLAMI_H_
-#define _EPLAMI_H_
-
-
-//---------------------------------------------------------------------------
-//  types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Prototypen
-//---------------------------------------------------------------------------
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//---------------------------------------------------------------------------
-//
-// write functions
-//
-// To save code space the function AmiSetByte is replaced by
-// an macro.
-// void  AmiSetByte  (void * pAddr_p, u8 bByteVal_p);
-
-#define AmiSetByteToBe(pAddr_p, bByteVal_p)  {*(u8 *)(pAddr_p) = (bByteVal_p);}
-#define AmiSetByteToLe(pAddr_p, bByteVal_p)  {*(u8 *)(pAddr_p) = (bByteVal_p);}
-
-void AmiSetWordToBe(void *pAddr_p, u16 wWordVal_p);
-void AmiSetDwordToBe(void *pAddr_p, u32 dwDwordVal_p);
-void AmiSetWordToLe(void *pAddr_p, u16 wWordVal_p);
-void AmiSetDwordToLe(void *pAddr_p, u32 dwDwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// read functions
-//
-// To save code space the function AmiGetByte is replaced by
-// an macro.
-// u8   AmiGetByte  (void * pAddr_p);
-
-#define AmiGetByteFromBe(pAddr_p)  (*(u8 *)(pAddr_p))
-#define AmiGetByteFromLe(pAddr_p)  (*(u8 *)(pAddr_p))
-
-u16 AmiGetWordFromBe(void *pAddr_p);
-u32 AmiGetDwordFromBe(void *pAddr_p);
-u16 AmiGetWordFromLe(void *pAddr_p);
-u32 AmiGetDwordFromLe(void *pAddr_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetDword24()
-//
-// Description: sets a 24 bit value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              dwDwordVal_p    = value to set
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-void AmiSetDword24ToBe(void *pAddr_p, u32 dwDwordVal_p);
-void AmiSetDword24ToLe(void *pAddr_p, u32 dwDwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetDword24()
-//
-// Description: reads a 24 bit value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u32           = read value
-//
-//---------------------------------------------------------------------------
-
-u32 AmiGetDword24FromBe(void *pAddr_p);
-u32 AmiGetDword24FromLe(void *pAddr_p);
-
-//#ifdef USE_VAR64
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword40()
-//
-// Description: sets a 40 bit value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword40ToBe(void *pAddr_p, u64 qwQwordVal_p);
-void AmiSetQword40ToLe(void *pAddr_p, u64 qwQwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword40()
-//
-// Description: reads a 40 bit value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword40FromBe(void *pAddr_p);
-u64 AmiGetQword40FromLe(void *pAddr_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword48()
-//
-// Description: sets a 48 bit value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword48ToBe(void *pAddr_p, u64 qwQwordVal_p);
-void AmiSetQword48ToLe(void *pAddr_p, u64 qwQwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword48()
-//
-// Description: reads a 48 bit value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword48FromBe(void *pAddr_p);
-u64 AmiGetQword48FromLe(void *pAddr_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword56()
-//
-// Description: sets a 56 bit value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword56ToBe(void *pAddr_p, u64 qwQwordVal_p);
-void AmiSetQword56ToLe(void *pAddr_p, u64 qwQwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword56()
-//
-// Description: reads a 56 bit value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword56FromBe(void *pAddr_p);
-u64 AmiGetQword56FromLe(void *pAddr_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword64()
-//
-// Description: sets a 64 bit value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword64ToBe(void *pAddr_p, u64 qwQwordVal_p);
-void AmiSetQword64ToLe(void *pAddr_p, u64 qwQwordVal_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword64()
-//
-// Description: reads a 64 bit value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword64FromBe(void *pAddr_p);
-u64 AmiGetQword64FromLe(void *pAddr_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetTimeOfDay()
-//
-// Description: sets a TIME_OF_DAY (CANopen) value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              pTimeOfDay_p    = pointer to struct TIME_OF_DAY
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-void AmiSetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p);
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetTimeOfDay()
-//
-// Description: reads a TIME_OF_DAY (CANopen) value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//              pTimeOfDay_p    = pointer to struct TIME_OF_DAY
-//
-// Return:      void
-//
-//---------------------------------------------------------------------------
-void AmiGetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p);
-
-#ifdef __cplusplus
-}
-#endif
-#endif				// ifndef _EPLAMI_H_
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/EplApiGeneric.c b/drivers/staging/epl/EplApiGeneric.c
deleted file mode 100644
index c441956..0000000
--- a/drivers/staging/epl/EplApiGeneric.c
+++ /dev/null
@@ -1,2054 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for generic EPL API module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplApiGeneric.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.21 $  $Date: 2008/11/21 09:00:38 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/09/05 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "Epl.h"
-#include "kernel/EplDllk.h"
-#include "kernel/EplErrorHandlerk.h"
-#include "kernel/EplEventk.h"
-#include "kernel/EplNmtk.h"
-#include "kernel/EplObdk.h"
-#include "kernel/EplTimerk.h"
-#include "kernel/EplDllkCal.h"
-#include "kernel/EplPdokCal.h"
-#include "user/EplDlluCal.h"
-#include "user/EplLedu.h"
-#include "user/EplNmtCnu.h"
-#include "user/EplNmtMnu.h"
-#include "user/EplSdoComu.h"
-#include "user/EplIdentu.h"
-#include "user/EplStatusu.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-#include "kernel/EplPdok.h"
-#endif
-
-#include "SharedBuff.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) == 0)
-#error "EPL API layer needs EPL module OBDK!"
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplApi                                              */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplApiInitParam m_InitParam;
-
-} tEplApiInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplApiInstance EplApiInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-// NMT state change event callback function
-static tEplKernel EplApiCbNmtStateChange(tEplEventNmtStateChange NmtStateChange_p);
-
-// update DLL configuration from OD
-static tEplKernel EplApiUpdateDllConfig(BOOL fUpdateIdentity_p);
-
-// update OD from init param
-static tEplKernel EplApiUpdateObd(void);
-
-// process events from user event queue
-static tEplKernel EplApiProcessEvent(tEplEvent *pEplEvent_p);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-// callback function of SDO module
-static tEplKernel EplApiCbSdoCon(tEplSdoComFinished *pSdoComFinished_p);
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-// callback functions of NmtMnu module
-static tEplKernel EplApiCbNodeEvent(unsigned int uiNodeId_p,
-				    tEplNmtNodeEvent NodeEvent_p,
-				    tEplNmtState NmtState_p,
-				    u16 wErrorCode_p, BOOL fMandatory_p);
-
-static tEplKernel EplApiCbBootEvent(tEplNmtBootEvent BootEvent_p,
-				    tEplNmtState NmtState_p,
-				    u16 wErrorCode_p);
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-// callback function of Ledu module
-static tEplKernel EplApiCbLedStateChange(tEplLedType LedType_p, BOOL fOn_p);
-#endif
-
-// OD initialization function (implemented in Objdict.c)
-tEplKernel EplObdInitRam(tEplObdInitParam *pInitParam_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiInitialize()
-//
-// Description: add and initialize new instance of EPL stack.
-//              After return from this function the application must start
-//              the NMT state machine via
-//              EplApiExecNmtCommand(kEplNmtEventSwReset)
-//              and thereby the whole EPL stack :-)
-//
-// Parameters:  pInitParam_p            = initialisation parameters
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplApiInitialize(tEplApiInitParam *pInitParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplObdInitParam ObdInitParam;
-	tEplDllkInitParam DllkInitParam;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-#endif
-
-	// reset instance structure
-	EPL_MEMSET(&EplApiInstance_g, 0, sizeof(EplApiInstance_g));
-
-	EPL_MEMCPY(&EplApiInstance_g.m_InitParam, pInitParam_p,
-		   min(sizeof(tEplApiInitParam),
-		       pInitParam_p->m_uiSizeOfStruct));
-
-	// check event callback function pointer
-	if (EplApiInstance_g.m_InitParam.m_pfnCbEvent == NULL) {	// application must always have an event callback function
-		Ret = kEplApiInvalidParam;
-		goto Exit;
-	}
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	// init OD
-// FIXME
-//    Ret = EplObdInitRam(&ObdInitParam);
-//    if (Ret != kEplSuccessful)
-//    {
-//        goto Exit;
-//    }
-
-	// initialize EplObd module
-	Ret = EplObdInit(&ObdInitParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-#ifndef EPL_NO_FIFO
-	ShbError = ShbInit();
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-#endif
-
-	// initialize EplEventk module
-	Ret = EplEventkInit(EplApiInstance_g.m_InitParam.m_pfnCbSync);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplEventu module
-	Ret = EplEventuInit(EplApiProcessEvent);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// init EplTimerk module
-	Ret = EplTimerkInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplNmtk module before DLL
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-	Ret = EplNmtkInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplDllk module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-	EPL_MEMCPY(DllkInitParam.m_be_abSrcMac,
-		   EplApiInstance_g.m_InitParam.m_abMacAddress, 6);
-	Ret = EplDllkAddInstance(&DllkInitParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplErrorHandlerk module
-	Ret = EplErrorHandlerkInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplDllkCal module
-	Ret = EplDllkCalAddInstance();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplDlluCal module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalAddInstance();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplPdok module
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-	Ret = EplPdokAddInstance();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret = EplPdokCalAddInstance();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplNmtCnu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-	Ret = EplNmtCnuAddInstance(EplApiInstance_g.m_InitParam.m_uiNodeId);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplNmtu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-	Ret = EplNmtuInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// register NMT event callback function
-	Ret = EplNmtuRegisterStateChangeCb(EplApiCbNmtStateChange);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// initialize EplNmtMnu module
-	Ret = EplNmtMnuInit(EplApiCbNodeEvent, EplApiCbBootEvent);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplIdentu module
-	Ret = EplIdentuInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize EplStatusu module
-	Ret = EplStatusuInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// initialize EplLedu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-	Ret = EplLeduInit(EplApiCbLedStateChange);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// init SDO module
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0) || \
-     (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0))
-	// init sdo command layer
-	Ret = EplSdoComInit();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// the application must start NMT state machine
-	// via EplApiExecNmtCommand(kEplNmtEventSwReset)
-	// and thereby the whole EPL stack
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiShutdown()
-//
-// Description: deletes an instance of EPL stack
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplApiShutdown(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// $$$ d.k.: check if NMT state is NMT_GS_OFF
-
-	// $$$ d.k.: maybe delete event queues at first, but this implies that
-	//           no other module must not use the event queues for communication
-	//           during shutdown.
-
-	// delete instance for all modules
-
-	// deinitialize EplSdoCom module
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0) || \
-     (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0))
-	Ret = EplSdoComDelInstance();
-//    PRINTF1("EplSdoComDelInstance():  0x%X\n", Ret);
-#endif
-
-	// deinitialize EplLedu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-	Ret = EplLeduDelInstance();
-//    PRINTF1("EplLeduDelInstance():    0x%X\n", Ret);
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// deinitialize EplNmtMnu module
-	Ret = EplNmtMnuDelInstance();
-//    PRINTF1("EplNmtMnuDelInstance():  0x%X\n", Ret);
-
-	// deinitialize EplIdentu module
-	Ret = EplIdentuDelInstance();
-//    PRINTF1("EplIdentuDelInstance():  0x%X\n", Ret);
-
-	// deinitialize EplStatusu module
-	Ret = EplStatusuDelInstance();
-//    PRINTF1("EplStatusuDelInstance():  0x%X\n", Ret);
-#endif
-
-	// deinitialize EplNmtCnu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-	Ret = EplNmtCnuDelInstance();
-//    PRINTF1("EplNmtCnuDelInstance():  0x%X\n", Ret);
-#endif
-
-	// deinitialize EplNmtu module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-	Ret = EplNmtuDelInstance();
-//    PRINTF1("EplNmtuDelInstance():    0x%X\n", Ret);
-#endif
-
-	// deinitialize EplDlluCal module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalDelInstance();
-//    PRINTF1("EplDlluCalDelInstance(): 0x%X\n", Ret);
-
-#endif
-
-	// deinitialize EplEventu module
-	Ret = EplEventuDelInstance();
-//    PRINTF1("EplEventuDelInstance():  0x%X\n", Ret);
-
-	// deinitialize EplNmtk module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-	Ret = EplNmtkDelInstance();
-//    PRINTF1("EplNmtkDelInstance():    0x%X\n", Ret);
-#endif
-
-	// deinitialize EplDllk module
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-	Ret = EplDllkDelInstance();
-//    PRINTF1("EplDllkDelInstance():    0x%X\n", Ret);
-
-	// deinitialize EplDllkCal module
-	Ret = EplDllkCalDelInstance();
-//    PRINTF1("EplDllkCalDelInstance(): 0x%X\n", Ret);
-#endif
-
-	// deinitialize EplEventk module
-	Ret = EplEventkDelInstance();
-//    PRINTF1("EplEventkDelInstance():  0x%X\n", Ret);
-
-	// deinitialize EplTimerk module
-	Ret = EplTimerkDelInstance();
-//    PRINTF1("EplTimerkDelInstance():  0x%X\n", Ret);
-
-#ifndef EPL_NO_FIFO
-	ShbExit();
-#endif
-
-	return Ret;
-}
-
-//----------------------------------------------------------------------------
-// Function:    EplApiExecNmtCommand()
-//
-// Description: executes a NMT command, i.e. post the NMT command/event to the
-//              NMTk module. NMT commands which are not appropriate in the current
-//              NMT state are silently ignored. Please keep in mind that the
-//              NMT state may change until the NMT command is actually executed.
-//
-// Parameters:  NmtEvent_p              = NMT command/event
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//----------------------------------------------------------------------------
-
-tEplKernel EplApiExecNmtCommand(tEplNmtEvent NmtEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-	Ret = EplNmtuNmtEvent(NmtEvent_p);
-#endif
-
-	return Ret;
-}
-
-//----------------------------------------------------------------------------
-// Function:    EplApiLinkObject()
-//
-// Description: Function maps array of application variables onto specified object in OD
-//
-// Parameters:  uiObjIndex_p            = Function maps variables for this object index
-//              pVar_p                  = Pointer to data memory area for the specified object
-//              puiVarEntries_p         = IN: pointer to number of entries to map
-//                                        OUT: pointer to number of actually used entries
-//              pEntrySize_p            = IN: pointer to size of one entry;
-//                                            if size is zero, the actual size will be read from OD
-//                                        OUT: pointer to entire size of all entries mapped
-//              uiFirstSubindex_p       = This is the first subindex to be mapped.
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//----------------------------------------------------------------------------
-
-tEplKernel EplApiLinkObject(unsigned int uiObjIndex_p,
-			    void *pVar_p,
-			    unsigned int *puiVarEntries_p,
-			    tEplObdSize *pEntrySize_p,
-			    unsigned int uiFirstSubindex_p)
-{
-	u8 bVarEntries;
-	u8 bIndexEntries;
-	u8 *pbData;
-	unsigned int uiSubindex;
-	tEplVarParam VarParam;
-	tEplObdSize EntrySize;
-	tEplObdSize UsedSize;
-
-	tEplKernel RetCode = kEplSuccessful;
-
-	if ((pVar_p == NULL)
-	    || (puiVarEntries_p == NULL)
-	    || (*puiVarEntries_p == 0)
-	    || (pEntrySize_p == NULL)) {
-		RetCode = kEplApiInvalidParam;
-		goto Exit;
-	}
-
-	pbData = (u8 *)pVar_p;
-	bVarEntries = (u8) * puiVarEntries_p;
-	UsedSize = 0;
-
-	// init VarParam structure with default values
-	VarParam.m_uiIndex = uiObjIndex_p;
-	VarParam.m_ValidFlag = kVarValidAll;
-
-	if (uiFirstSubindex_p != 0) {	// check if object exists by reading subindex 0x00,
-		// because user wants to link a variable to a subindex unequal 0x00
-		// read number of entries
-		EntrySize = (tEplObdSize) sizeof(bIndexEntries);
-		RetCode = EplObdReadEntry(uiObjIndex_p,
-					  0x00,
-					  (void *)&bIndexEntries,
-					  &EntrySize);
-
-		if ((RetCode != kEplSuccessful) || (bIndexEntries == 0x00)) {
-			// Object doesn't exist or invalid entry number
-			RetCode = kEplObdIndexNotExist;
-			goto Exit;
-		}
-	} else {		// user wants to link a variable to subindex 0x00
-		// that's OK
-		bIndexEntries = 0;
-	}
-
-	// Correct number of entries if number read from OD is greater
-	// than the specified number.
-	// This is done, so that we do not set more entries than subindexes the
-	// object actually has.
-	if ((bIndexEntries > (bVarEntries + uiFirstSubindex_p - 1)) &&
-	    (bVarEntries != 0x00)) {
-		bIndexEntries = (u8) (bVarEntries + uiFirstSubindex_p - 1);
-	}
-	// map entries
-	for (uiSubindex = uiFirstSubindex_p; uiSubindex <= bIndexEntries;
-	     uiSubindex++) {
-		// if passed entry size is 0, then get size from OD
-		if (*pEntrySize_p == 0x00) {
-			// read entry size
-			EntrySize = EplObdGetDataSize(uiObjIndex_p, uiSubindex);
-
-			if (EntrySize == 0x00) {
-				// invalid entry size (maybe object doesn't exist or entry of type DOMAIN is empty)
-				RetCode = kEplObdSubindexNotExist;
-				break;
-			}
-		} else {	// use passed entry size
-			EntrySize = *pEntrySize_p;
-		}
-
-		VarParam.m_uiSubindex = uiSubindex;
-
-		// set pointer to user var
-		VarParam.m_Size = EntrySize;
-		VarParam.m_pData = pbData;
-
-		UsedSize += EntrySize;
-		pbData += EntrySize;
-
-		RetCode = EplObdDefineVar(&VarParam);
-		if (RetCode != kEplSuccessful) {
-			break;
-		}
-	}
-
-	// set number of mapped entries and entry size
-	*puiVarEntries_p = ((bIndexEntries - uiFirstSubindex_p) + 1);
-	*pEntrySize_p = UsedSize;
-
-      Exit:
-
-	return (RetCode);
-
-}
-
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiReadObject()
-//
-// Description: reads the specified entry from the OD of the specified node.
-//              If this node is a remote node, it performs a SDO transfer, which
-//              means this function returns kEplApiTaskDeferred and the application
-//              is informed via the event callback function when the task is completed.
-//
-// Parameters:  pSdoComConHdl_p         = INOUT: pointer to SDO connection handle (may be NULL in case of local OD access)
-//              uiNodeId_p              = IN: node ID (0 = itself)
-//              uiIndex_p               = IN: index of object in OD
-//              uiSubindex_p            = IN: sub-index of object in OD
-//              pDstData_le_p           = OUT: pointer to data in little endian
-//              puiSize_p               = INOUT: pointer to size of data
-//              SdoType_p               = IN: type of SDO transfer
-//              pUserArg_p              = IN: user-definable argument pointer,
-//                                            which will be passed to the event callback function
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiReadObject(tEplSdoComConHdl *pSdoComConHdl_p,
-			    unsigned int uiNodeId_p,
-			    unsigned int uiIndex_p,
-			    unsigned int uiSubindex_p,
-			    void *pDstData_le_p,
-			    unsigned int *puiSize_p,
-			    tEplSdoType SdoType_p, void *pUserArg_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if ((uiIndex_p == 0) || (pDstData_le_p == NULL) || (puiSize_p == NULL)
-	    || (*puiSize_p == 0)) {
-		Ret = kEplApiInvalidParam;
-		goto Exit;
-	}
-
-	if (uiNodeId_p == 0 || uiNodeId_p == EplObdGetNodeId()) {	// local OD access can be performed
-		tEplObdSize ObdSize;
-
-		ObdSize = (tEplObdSize) * puiSize_p;
-		Ret =
-		    EplObdReadEntryToLe(uiIndex_p, uiSubindex_p, pDstData_le_p,
-					&ObdSize);
-		*puiSize_p = (unsigned int)ObdSize;
-	} else {		// perform SDO transfer
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-		tEplSdoComTransParamByIndex TransParamByIndex;
-//    tEplSdoComConHdl            SdoComConHdl;
-
-		// check if application provides space for handle
-		if (pSdoComConHdl_p == NULL) {
-			Ret = kEplApiInvalidParam;
-			goto Exit;
-//            pSdoComConHdl_p = &SdoComConHdl;
-		}
-		// init command layer connection
-		Ret = EplSdoComDefineCon(pSdoComConHdl_p, uiNodeId_p,	// target node id
-					 SdoType_p);	// SDO type
-		if ((Ret != kEplSuccessful) && (Ret != kEplSdoComHandleExists)) {
-			goto Exit;
-		}
-		TransParamByIndex.m_pData = pDstData_le_p;
-		TransParamByIndex.m_SdoAccessType = kEplSdoAccessTypeRead;
-		TransParamByIndex.m_SdoComConHdl = *pSdoComConHdl_p;
-		TransParamByIndex.m_uiDataSize = *puiSize_p;
-		TransParamByIndex.m_uiIndex = uiIndex_p;
-		TransParamByIndex.m_uiSubindex = uiSubindex_p;
-		TransParamByIndex.m_pfnSdoFinishedCb = EplApiCbSdoCon;
-		TransParamByIndex.m_pUserArg = pUserArg_p;
-
-		Ret = EplSdoComInitTransferByIndex(&TransParamByIndex);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		Ret = kEplApiTaskDeferred;
-
-#else
-		Ret = kEplApiInvalidParam;
-#endif
-	}
-
-      Exit:
-	return Ret;
-}
-
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiWriteObject()
-//
-// Description: writes the specified entry to the OD of the specified node.
-//              If this node is a remote node, it performs a SDO transfer, which
-//              means this function returns kEplApiTaskDeferred and the application
-//              is informed via the event callback function when the task is completed.
-//
-// Parameters:  pSdoComConHdl_p         = INOUT: pointer to SDO connection handle (may be NULL in case of local OD access)
-//              uiNodeId_p              = IN: node ID (0 = itself)
-//              uiIndex_p               = IN: index of object in OD
-//              uiSubindex_p            = IN: sub-index of object in OD
-//              pSrcData_le_p           = IN: pointer to data in little endian
-//              uiSize_p                = IN: size of data in bytes
-//              SdoType_p               = IN: type of SDO transfer
-//              pUserArg_p              = IN: user-definable argument pointer,
-//                                            which will be passed to the event callback function
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiWriteObject(tEplSdoComConHdl *pSdoComConHdl_p,
-			     unsigned int uiNodeId_p,
-			     unsigned int uiIndex_p,
-			     unsigned int uiSubindex_p,
-			     void *pSrcData_le_p,
-			     unsigned int uiSize_p,
-			     tEplSdoType SdoType_p, void *pUserArg_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if ((uiIndex_p == 0) || (pSrcData_le_p == NULL) || (uiSize_p == 0)) {
-		Ret = kEplApiInvalidParam;
-		goto Exit;
-	}
-
-	if (uiNodeId_p == 0 || uiNodeId_p == EplObdGetNodeId()) {	// local OD access can be performed
-
-		Ret =
-		    EplObdWriteEntryFromLe(uiIndex_p, uiSubindex_p,
-					   pSrcData_le_p, uiSize_p);
-	} else {		// perform SDO transfer
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-		tEplSdoComTransParamByIndex TransParamByIndex;
-//    tEplSdoComConHdl            SdoComConHdl;
-
-		// check if application provides space for handle
-		if (pSdoComConHdl_p == NULL) {
-			Ret = kEplApiInvalidParam;
-			goto Exit;
-//            pSdoComConHdl_p = &SdoComConHdl;
-		}
-		// d.k.: How to recycle command layer connection?
-		//       Try to redefine it, which will return kEplSdoComHandleExists
-		//       and the existing command layer handle.
-		//       If the returned handle is busy, EplSdoComInitTransferByIndex()
-		//       will return with error.
-		// $$$ d.k.: Collisions may occur with Configuration Manager, if both the application and
-		//           Configuration Manager, are trying to communicate with the very same node.
-		//     possible solution: disallow communication by application if Configuration Manager is busy
-
-		// init command layer connection
-		Ret = EplSdoComDefineCon(pSdoComConHdl_p, uiNodeId_p,	// target node id
-					 SdoType_p);	// SDO type
-		if ((Ret != kEplSuccessful) && (Ret != kEplSdoComHandleExists)) {
-			goto Exit;
-		}
-		TransParamByIndex.m_pData = pSrcData_le_p;
-		TransParamByIndex.m_SdoAccessType = kEplSdoAccessTypeWrite;
-		TransParamByIndex.m_SdoComConHdl = *pSdoComConHdl_p;
-		TransParamByIndex.m_uiDataSize = uiSize_p;
-		TransParamByIndex.m_uiIndex = uiIndex_p;
-		TransParamByIndex.m_uiSubindex = uiSubindex_p;
-		TransParamByIndex.m_pfnSdoFinishedCb = EplApiCbSdoCon;
-		TransParamByIndex.m_pUserArg = pUserArg_p;
-
-		Ret = EplSdoComInitTransferByIndex(&TransParamByIndex);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		Ret = kEplApiTaskDeferred;
-
-#else
-		Ret = kEplApiInvalidParam;
-#endif
-	}
-
-      Exit:
-	return Ret;
-}
-
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiFreeSdoChannel()
-//
-// Description: frees the specified SDO channel.
-//              This function must be called after each call to EplApiReadObject()/EplApiWriteObject()
-//              which returns kEplApiTaskDeferred and the application
-//              is informed via the event callback function when the task is completed.
-//
-// Parameters:  SdoComConHdl_p          = IN: SDO connection handle
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiFreeSdoChannel(tEplSdoComConHdl SdoComConHdl_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-
-	// init command layer connection
-	Ret = EplSdoComUndefineCon(SdoComConHdl_p);
-
-#else
-	Ret = kEplApiInvalidParam;
-#endif
-
-	return Ret;
-}
-
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiReadLocalObject()
-//
-// Description: reads the specified entry from the local OD.
-//
-// Parameters:  uiIndex_p               = IN: index of object in OD
-//              uiSubindex_p            = IN: sub-index of object in OD
-//              pDstData_p              = OUT: pointer to data in platform byte order
-//              puiSize_p               = INOUT: pointer to size of data
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiReadLocalObject(unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 void *pDstData_p, unsigned int *puiSize_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplObdSize ObdSize;
-
-	ObdSize = (tEplObdSize) * puiSize_p;
-	Ret = EplObdReadEntry(uiIndex_p, uiSubindex_p, pDstData_p, &ObdSize);
-	*puiSize_p = (unsigned int)ObdSize;
-
-	return Ret;
-}
-
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiWriteLocalObject()
-//
-// Description: writes the specified entry to the local OD.
-//
-// Parameters:  uiIndex_p               = IN: index of object in OD
-//              uiSubindex_p            = IN: sub-index of object in OD
-//              pSrcData_p              = IN: pointer to data in platform byte order
-//              uiSize_p                = IN: size of data in bytes
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiWriteLocalObject(unsigned int uiIndex_p,
-				  unsigned int uiSubindex_p,
-				  void *pSrcData_p,
-				  unsigned int uiSize_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	Ret =
-	    EplObdWriteEntry(uiIndex_p, uiSubindex_p, pSrcData_p,
-			     (tEplObdSize) uiSize_p);
-
-	return Ret;
-}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-// ----------------------------------------------------------------------------
-//
-// Function:    EplApiMnTriggerStateChange()
-//
-// Description: triggers the specified node command for the specified node.
-//
-// Parameters:  uiNodeId_p              = node ID for which the node command will be executed
-//              NodeCommand_p           = node command
-//
-// Return:      tEplKernel              = error code
-//
-// ----------------------------------------------------------------------------
-
-tEplKernel EplApiMnTriggerStateChange(unsigned int uiNodeId_p,
-				      tEplNmtNodeCommand NodeCommand_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	Ret = EplNmtMnuTriggerStateChange(uiNodeId_p, NodeCommand_p);
-
-	return Ret;
-}
-
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbObdAccess
-//
-// Description: callback function for OD accesses
-//
-// Parameters:  pParam_p                = OBD parameter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplApiCbObdAccess(tEplObdCbParam *pParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if (EPL_API_OBD_FORWARD_EVENT != FALSE)
-	tEplApiEventArg EventArg;
-
-	// call user callback
-	// must be disabled for EplApiLinuxKernel.c, because of reentrancy problem
-	// for local OD access. This is not so bad as user callback function in
-	// application does not use OD callbacks at the moment.
-	EventArg.m_ObdCbParam = *pParam_p;
-	Ret = EplApiInstance_g.m_InitParam.m_pfnCbEvent(kEplApiEventObdAccess,
-							&EventArg,
-							EplApiInstance_g.
-							m_InitParam.
-							m_pEventUserArg);
-#endif
-
-	switch (pParam_p->m_uiIndex) {
-		//case 0x1006:    // NMT_CycleLen_U32 (valid on reset)
-	case 0x1C14:		// DLL_LossOfFrameTolerance_U32
-		//case 0x1F98:    // NMT_CycleTiming_REC (valid on reset)
-		{
-			if (pParam_p->m_ObdEvent == kEplObdEvPostWrite) {
-				// update DLL configuration
-				Ret = EplApiUpdateDllConfig(FALSE);
-			}
-			break;
-		}
-
-	case 0x1020:		// CFM_VerifyConfiguration_REC.ConfId_U32 != 0
-		{
-			if ((pParam_p->m_ObdEvent == kEplObdEvPostWrite)
-			    && (pParam_p->m_uiSubIndex == 3)
-			    && (*((u32 *) pParam_p->m_pArg) != 0)) {
-				u32 dwVerifyConfInvalid = 0;
-				// set CFM_VerifyConfiguration_REC.VerifyConfInvalid_U32 to 0
-				Ret =
-				    EplObdWriteEntry(0x1020, 4,
-						     &dwVerifyConfInvalid, 4);
-				// ignore any error because this objekt is optional
-				Ret = kEplSuccessful;
-			}
-			break;
-		}
-
-	case 0x1F9E:		// NMT_ResetCmd_U8
-		{
-			if (pParam_p->m_ObdEvent == kEplObdEvPreWrite) {
-				u8 bNmtCommand;
-
-				bNmtCommand = *((u8 *) pParam_p->m_pArg);
-				// check value range
-				switch ((tEplNmtCommand) bNmtCommand) {
-				case kEplNmtCmdResetNode:
-				case kEplNmtCmdResetCommunication:
-				case kEplNmtCmdResetConfiguration:
-				case kEplNmtCmdSwReset:
-				case kEplNmtCmdInvalidService:
-					// valid command identifier specified
-					break;
-
-				default:
-					pParam_p->m_dwAbortCode =
-					    EPL_SDOAC_VALUE_RANGE_EXCEEDED;
-					Ret = kEplObdAccessViolation;
-					break;
-				}
-			} else if (pParam_p->m_ObdEvent == kEplObdEvPostWrite) {
-				u8 bNmtCommand;
-
-				bNmtCommand = *((u8 *) pParam_p->m_pArg);
-				// check value range
-				switch ((tEplNmtCommand) bNmtCommand) {
-				case kEplNmtCmdResetNode:
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventResetNode);
-#endif
-					break;
-
-				case kEplNmtCmdResetCommunication:
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventResetCom);
-#endif
-					break;
-
-				case kEplNmtCmdResetConfiguration:
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventResetConfig);
-#endif
-					break;
-
-				case kEplNmtCmdSwReset:
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventSwReset);
-#endif
-					break;
-
-				case kEplNmtCmdInvalidService:
-					break;
-
-				default:
-					pParam_p->m_dwAbortCode =
-					    EPL_SDOAC_VALUE_RANGE_EXCEEDED;
-					Ret = kEplObdAccessViolation;
-					break;
-				}
-			}
-			break;
-		}
-
-	default:
-		break;
-	}
-
-//Exit:
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiProcessEvent
-//
-// Description: processes events from event queue and forwards these to
-//              the application's event callback function
-//
-// Parameters:  pEplEvent_p =   pointer to event
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiProcessEvent(tEplEvent *pEplEvent_p)
-{
-	tEplKernel Ret;
-	tEplEventError *pEventError;
-	tEplApiEventType EventType;
-
-	Ret = kEplSuccessful;
-
-	// process event
-	switch (pEplEvent_p->m_EventType) {
-		// error event
-	case kEplEventTypeError:
-		{
-			pEventError = (tEplEventError *) pEplEvent_p->m_pArg;
-			switch (pEventError->m_EventSource) {
-				// treat the errors from the following sources as critical
-			case kEplEventSourceEventk:
-			case kEplEventSourceEventu:
-			case kEplEventSourceDllk:
-				{
-					EventType = kEplApiEventCriticalError;
-					// halt the stack by entering NMT state Off
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventCriticalError);
-					break;
-				}
-
-				// the other errors are just warnings
-			default:
-				{
-					EventType = kEplApiEventWarning;
-					break;
-				}
-			}
-
-			// call user callback
-			Ret =
-			    EplApiInstance_g.m_InitParam.m_pfnCbEvent(EventType,
-								      (tEplApiEventArg
-								       *)
-								      pEventError,
-								      EplApiInstance_g.
-								      m_InitParam.
-								      m_pEventUserArg);
-			// discard error from callback function, because this could generate an endless loop
-			Ret = kEplSuccessful;
-			break;
-		}
-
-		// at present, there are no other events for this module
-	default:
-		break;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbNmtStateChange
-//
-// Description: callback function for NMT state changes
-//
-// Parameters:  NmtStateChange_p        = NMT state change event
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiCbNmtStateChange(tEplEventNmtStateChange NmtStateChange_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u8 bNmtState;
-	tEplApiEventArg EventArg;
-
-	// save NMT state in OD
-	bNmtState = (u8) NmtStateChange_p.m_NewNmtState;
-	Ret = EplObdWriteEntry(0x1F8C, 0, &bNmtState, 1);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// do work which must be done in that state
-	switch (NmtStateChange_p.m_NewNmtState) {
-		// EPL stack is not running
-	case kEplNmtGsOff:
-		break;
-
-		// first init of the hardware
-	case kEplNmtGsInitialising:
-#if 0
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-		// configure SDO via UDP (i.e. bind it to the EPL ethernet interface)
-		Ret =
-		    EplSdoUdpuConfig(EplApiInstance_g.m_InitParam.m_dwIpAddress,
-				     EPL_C_SDO_EPL_PORT);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-#endif
-#endif
-
-		break;
-
-		// init of the manufacturer-specific profile area and the
-		// standardised device profile area
-	case kEplNmtGsResetApplication:
-		{
-			// reset application part of OD
-			Ret = EplObdAccessOdPart(kEplObdPartApp,
-						 kEplObdDirLoad);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			break;
-		}
-
-		// init of the communication profile area
-	case kEplNmtGsResetCommunication:
-		{
-			// reset communication part of OD
-			Ret = EplObdAccessOdPart(kEplObdPartGen,
-						 kEplObdDirLoad);
-
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-			// $$$ d.k.: update OD only if OD was not loaded from non-volatile memory
-			Ret = EplApiUpdateObd();
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			break;
-		}
-
-		// build the configuration with infos from OD
-	case kEplNmtGsResetConfiguration:
-		{
-
-			Ret = EplApiUpdateDllConfig(TRUE);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			break;
-		}
-
-		//-----------------------------------------------------------
-		// CN part of the state machine
-
-		// node liste for EPL-Frames and check timeout
-	case kEplNmtCsNotActive:
-		{
-			// indicate completion of reset in NMT_ResetCmd_U8
-			bNmtState = (u8) kEplNmtCmdInvalidService;
-			Ret = EplObdWriteEntry(0x1F9E, 0, &bNmtState, 1);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			break;
-		}
-
-		// node process only async frames
-	case kEplNmtCsPreOperational1:
-		{
-			break;
-		}
-
-		// node process isochronus and asynchronus frames
-	case kEplNmtCsPreOperational2:
-		{
-			break;
-		}
-
-		// node should be configured und application is ready
-	case kEplNmtCsReadyToOperate:
-		{
-			break;
-		}
-
-		// normal work state
-	case kEplNmtCsOperational:
-		{
-			break;
-		}
-
-		// node stopped by MN
-		// -> only process asynchronus frames
-	case kEplNmtCsStopped:
-		{
-			break;
-		}
-
-		// no EPL cycle
-		// -> normal ethernet communication
-	case kEplNmtCsBasicEthernet:
-		{
-			break;
-		}
-
-		//-----------------------------------------------------------
-		// MN part of the state machine
-
-		// node listens for EPL-Frames and check timeout
-	case kEplNmtMsNotActive:
-		{
-			break;
-		}
-
-		// node processes only async frames
-	case kEplNmtMsPreOperational1:
-		{
-			break;
-		}
-
-		// node processes isochronous and asynchronous frames
-	case kEplNmtMsPreOperational2:
-		{
-			break;
-		}
-
-		// node should be configured und application is ready
-	case kEplNmtMsReadyToOperate:
-		{
-			break;
-		}
-
-		// normal work state
-	case kEplNmtMsOperational:
-		{
-			break;
-		}
-
-		// no EPL cycle
-		// -> normal ethernet communication
-	case kEplNmtMsBasicEthernet:
-		{
-			break;
-		}
-
-	default:
-		{
-			TRACE0
-			    ("EplApiCbNmtStateChange(): unhandled NMT state\n");
-		}
-	}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-	// forward event to Led module
-	Ret = EplLeduCbNmtStateChange(NmtStateChange_p);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// forward event to NmtMn module
-	Ret = EplNmtMnuCbNmtStateChange(NmtStateChange_p);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// call user callback
-	EventArg.m_NmtStateChange = NmtStateChange_p;
-	Ret =
-	    EplApiInstance_g.m_InitParam.
-	    m_pfnCbEvent(kEplApiEventNmtStateChange, &EventArg,
-			 EplApiInstance_g.m_InitParam.m_pEventUserArg);
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiUpdateDllConfig
-//
-// Description: update configuration of DLL
-//
-// Parameters:  fUpdateIdentity_p       = TRUE, if identity must be updated
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiUpdateDllConfig(BOOL fUpdateIdentity_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllConfigParam DllConfigParam;
-	tEplDllIdentParam DllIdentParam;
-	tEplObdSize ObdSize;
-	u16 wTemp;
-	u8 bTemp;
-
-	// configure Dll
-	EPL_MEMSET(&DllConfigParam, 0, sizeof(DllConfigParam));
-	DllConfigParam.m_uiNodeId = EplObdGetNodeId();
-
-	// Cycle Length (0x1006: NMT_CycleLen_U32) in [us]
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1006, 0, &DllConfigParam.m_dwCycleLen, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 0x1F82: NMT_FeatureFlags_U32
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1F82, 0, &DllConfigParam.m_dwFeatureFlags,
-			    &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// d.k. There is no dependance between FeatureFlags and async-only CN
-	DllConfigParam.m_fAsyncOnly = EplApiInstance_g.m_InitParam.m_fAsyncOnly;
-
-	// 0x1C14: DLL_LossOfFrameTolerance_U32 in [ns]
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1C14, 0, &DllConfigParam.m_dwLossOfFrameTolerance,
-			    &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 0x1F98: NMT_CycleTiming_REC
-	// 0x1F98.1: IsochrTxMaxPayload_U16
-	ObdSize = 2;
-	Ret = EplObdReadEntry(0x1F98, 1, &wTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiIsochrTxMaxPayload = wTemp;
-
-	// 0x1F98.2: IsochrRxMaxPayload_U16
-	ObdSize = 2;
-	Ret = EplObdReadEntry(0x1F98, 2, &wTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiIsochrRxMaxPayload = wTemp;
-
-	// 0x1F98.3: PResMaxLatency_U32
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1F98, 3, &DllConfigParam.m_dwPresMaxLatency,
-			    &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 0x1F98.4: PReqActPayloadLimit_U16
-	ObdSize = 2;
-	Ret = EplObdReadEntry(0x1F98, 4, &wTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiPreqActPayloadLimit = wTemp;
-
-	// 0x1F98.5: PResActPayloadLimit_U16
-	ObdSize = 2;
-	Ret = EplObdReadEntry(0x1F98, 5, &wTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiPresActPayloadLimit = wTemp;
-
-	// 0x1F98.6: ASndMaxLatency_U32
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1F98, 6, &DllConfigParam.m_dwAsndMaxLatency,
-			    &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 0x1F98.7: MultiplCycleCnt_U8
-	ObdSize = 1;
-	Ret = EplObdReadEntry(0x1F98, 7, &bTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiMultiplCycleCnt = bTemp;
-
-	// 0x1F98.8: AsyncMTU_U16
-	ObdSize = 2;
-	Ret = EplObdReadEntry(0x1F98, 8, &wTemp, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	DllConfigParam.m_uiAsyncMtu = wTemp;
-
-	// $$$ Prescaler
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// 0x1F8A.1: WaitSoCPReq_U32 in [ns]
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1F8A, 1, &DllConfigParam.m_dwWaitSocPreq,
-			    &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 0x1F8A.2: AsyncSlotTimeout_U32 in [ns] (optional)
-	ObdSize = 4;
-	Ret =
-	    EplObdReadEntry(0x1F8A, 2, &DllConfigParam.m_dwAsyncSlotTimeout,
-			    &ObdSize);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-#endif
-
-	DllConfigParam.m_uiSizeOfStruct = sizeof(DllConfigParam);
-	Ret = EplDllkConfig(&DllConfigParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	if (fUpdateIdentity_p != FALSE) {
-		// configure Identity
-		EPL_MEMSET(&DllIdentParam, 0, sizeof(DllIdentParam));
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1000, 0, &DllIdentParam.m_dwDeviceType,
-				    &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1018, 1, &DllIdentParam.m_dwVendorId,
-				    &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1018, 2, &DllIdentParam.m_dwProductCode,
-				    &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1018, 3,
-				    &DllIdentParam.m_dwRevisionNumber,
-				    &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1018, 4, &DllIdentParam.m_dwSerialNumber,
-				    &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		DllIdentParam.m_dwIpAddress =
-		    EplApiInstance_g.m_InitParam.m_dwIpAddress;
-		DllIdentParam.m_dwSubnetMask =
-		    EplApiInstance_g.m_InitParam.m_dwSubnetMask;
-		EPL_MEMCPY(DllIdentParam.m_sHostname,
-			   EplApiInstance_g.m_InitParam.m_sHostname,
-			   sizeof(DllIdentParam.m_sHostname));
-
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1020, 1,
-				    &DllIdentParam.m_dwVerifyConfigurationDate,
-				    &ObdSize);
-		// ignore any error, because this object is optional
-
-		ObdSize = 4;
-		Ret =
-		    EplObdReadEntry(0x1020, 2,
-				    &DllIdentParam.m_dwVerifyConfigurationTime,
-				    &ObdSize);
-		// ignore any error, because this object is optional
-
-		// $$$ d.k.: fill rest of ident structure
-
-		DllIdentParam.m_uiSizeOfStruct = sizeof(DllIdentParam);
-		Ret = EplDllkSetIdentity(&DllIdentParam);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiUpdateObd
-//
-// Description: update OD from init param
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiUpdateObd(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u16 wTemp;
-	u8 bTemp;
-
-	// set node id in OD
-	Ret = EplObdSetNodeId(EplApiInstance_g.m_InitParam.m_uiNodeId,	// node id
-			      kEplObdNodeIdHardware);	// set by hardware
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwCycleLen != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1006, 0,
-				     &EplApiInstance_g.m_InitParam.m_dwCycleLen,
-				     4);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwLossOfFrameTolerance != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1C14, 0,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwLossOfFrameTolerance, 4);
-		/*        if(Ret != kEplSuccessful)
-		   {
-		   goto Exit;
-		   } */
-	}
-	// d.k. There is no dependance between FeatureFlags and async-only CN.
-	if (EplApiInstance_g.m_InitParam.m_dwFeatureFlags != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1F82, 0,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwFeatureFlags, 4);
-		/*    if(Ret != kEplSuccessful)
-		   {
-		   goto Exit;
-		   } */
-	}
-
-	wTemp = (u16) EplApiInstance_g.m_InitParam.m_uiIsochrTxMaxPayload;
-	Ret = EplObdWriteEntry(0x1F98, 1, &wTemp, 2);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-
-	wTemp = (u16) EplApiInstance_g.m_InitParam.m_uiIsochrRxMaxPayload;
-	Ret = EplObdWriteEntry(0x1F98, 2, &wTemp, 2);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-
-	Ret =
-	    EplObdWriteEntry(0x1F98, 3,
-			     &EplApiInstance_g.m_InitParam.m_dwPresMaxLatency,
-			     4);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-
-	if (EplApiInstance_g.m_InitParam.m_uiPreqActPayloadLimit <=
-	    EPL_C_DLL_ISOCHR_MAX_PAYL) {
-		wTemp =
-		    (u16) EplApiInstance_g.m_InitParam.m_uiPreqActPayloadLimit;
-		Ret = EplObdWriteEntry(0x1F98, 4, &wTemp, 2);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_uiPresActPayloadLimit <=
-	    EPL_C_DLL_ISOCHR_MAX_PAYL) {
-		wTemp =
-		    (u16) EplApiInstance_g.m_InitParam.m_uiPresActPayloadLimit;
-		Ret = EplObdWriteEntry(0x1F98, 5, &wTemp, 2);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-	}
-
-	Ret =
-	    EplObdWriteEntry(0x1F98, 6,
-			     &EplApiInstance_g.m_InitParam.m_dwAsndMaxLatency,
-			     4);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-
-	if (EplApiInstance_g.m_InitParam.m_uiMultiplCycleCnt <= 0xFF) {
-		bTemp = (u8) EplApiInstance_g.m_InitParam.m_uiMultiplCycleCnt;
-		Ret = EplObdWriteEntry(0x1F98, 7, &bTemp, 1);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_uiAsyncMtu <=
-	    EPL_C_DLL_MAX_ASYNC_MTU) {
-		wTemp = (u16) EplApiInstance_g.m_InitParam.m_uiAsyncMtu;
-		Ret = EplObdWriteEntry(0x1F98, 8, &wTemp, 2);
-/*    if(Ret != kEplSuccessful)
-    {
-        goto Exit;
-    }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_uiPrescaler <= 1000) {
-		wTemp = (u16) EplApiInstance_g.m_InitParam.m_uiPrescaler;
-		Ret = EplObdWriteEntry(0x1F98, 9, &wTemp, 2);
-		// ignore return code
-		Ret = kEplSuccessful;
-	}
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	if (EplApiInstance_g.m_InitParam.m_dwWaitSocPreq != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1F8A, 1,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwWaitSocPreq, 4);
-		/*        if(Ret != kEplSuccessful)
-		   {
-		   goto Exit;
-		   } */
-	}
-
-	if ((EplApiInstance_g.m_InitParam.m_dwAsyncSlotTimeout != 0)
-	    && (EplApiInstance_g.m_InitParam.m_dwAsyncSlotTimeout != -1)) {
-		Ret =
-		    EplObdWriteEntry(0x1F8A, 2,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwAsyncSlotTimeout, 4);
-		/*        if(Ret != kEplSuccessful)
-		   {
-		   goto Exit;
-		   } */
-	}
-#endif
-
-	// configure Identity
-	if (EplApiInstance_g.m_InitParam.m_dwDeviceType != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1000, 0,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwDeviceType, 4);
-/*        if(Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwVendorId != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1018, 1,
-				     &EplApiInstance_g.m_InitParam.m_dwVendorId,
-				     4);
-/*        if(Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwProductCode != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1018, 2,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwProductCode, 4);
-/*        if(Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwRevisionNumber != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1018, 3,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwRevisionNumber, 4);
-/*        if(Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_dwSerialNumber != -1) {
-		Ret =
-		    EplObdWriteEntry(0x1018, 4,
-				     &EplApiInstance_g.m_InitParam.
-				     m_dwSerialNumber, 4);
-/*        if(Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_pszDevName != NULL) {
-		// write Device Name (0x1008)
-		Ret =
-		    EplObdWriteEntry(0x1008, 0,
-				     (void *)EplApiInstance_g.
-				     m_InitParam.m_pszDevName,
-				     (tEplObdSize) strlen(EplApiInstance_g.
-							  m_InitParam.
-							  m_pszDevName));
-/*        if (Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_pszHwVersion != NULL) {
-		// write Hardware version (0x1009)
-		Ret =
-		    EplObdWriteEntry(0x1009, 0,
-				     (void *)EplApiInstance_g.
-				     m_InitParam.m_pszHwVersion,
-				     (tEplObdSize) strlen(EplApiInstance_g.
-							  m_InitParam.
-							  m_pszHwVersion));
-/*        if (Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-	if (EplApiInstance_g.m_InitParam.m_pszSwVersion != NULL) {
-		// write Software version (0x100A)
-		Ret =
-		    EplObdWriteEntry(0x100A, 0,
-				     (void *)EplApiInstance_g.
-				     m_InitParam.m_pszSwVersion,
-				     (tEplObdSize) strlen(EplApiInstance_g.
-							  m_InitParam.
-							  m_pszSwVersion));
-/*        if (Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbSdoCon
-//
-// Description: callback function for SDO transfers
-//
-// Parameters:  pSdoComFinished_p       = SDO parameter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-static tEplKernel EplApiCbSdoCon(tEplSdoComFinished *pSdoComFinished_p)
-{
-	tEplKernel Ret;
-	tEplApiEventArg EventArg;
-
-	Ret = kEplSuccessful;
-
-	// call user callback
-	EventArg.m_Sdo = *pSdoComFinished_p;
-	Ret = EplApiInstance_g.m_InitParam.m_pfnCbEvent(kEplApiEventSdo,
-							&EventArg,
-							EplApiInstance_g.
-							m_InitParam.
-							m_pEventUserArg);
-
-	return Ret;
-
-}
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbNodeEvent
-//
-// Description: callback function for node events
-//
-// Parameters:  uiNodeId_p              = node ID of the CN
-//              NodeEvent_p             = event from the specified CN
-//              NmtState_p              = current NMT state of the CN
-//              wErrorCode_p            = EPL error code if NodeEvent_p==kEplNmtNodeEventError
-//              fMandatory_p            = flag if CN is mandatory
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiCbNodeEvent(unsigned int uiNodeId_p,
-				    tEplNmtNodeEvent NodeEvent_p,
-				    tEplNmtState NmtState_p,
-				    u16 wErrorCode_p, BOOL fMandatory_p)
-{
-	tEplKernel Ret;
-	tEplApiEventArg EventArg;
-
-	Ret = kEplSuccessful;
-
-	// call user callback
-	EventArg.m_Node.m_uiNodeId = uiNodeId_p;
-	EventArg.m_Node.m_NodeEvent = NodeEvent_p;
-	EventArg.m_Node.m_NmtState = NmtState_p;
-	EventArg.m_Node.m_wErrorCode = wErrorCode_p;
-	EventArg.m_Node.m_fMandatory = fMandatory_p;
-
-	Ret = EplApiInstance_g.m_InitParam.m_pfnCbEvent(kEplApiEventNode,
-							&EventArg,
-							EplApiInstance_g.
-							m_InitParam.
-							m_pEventUserArg);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbBootEvent
-//
-// Description: callback function for boot events
-//
-// Parameters:  BootEvent_p             = event from the boot-up process
-//              NmtState_p              = current local NMT state
-//              wErrorCode_p            = EPL error code if BootEvent_p==kEplNmtBootEventError
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiCbBootEvent(tEplNmtBootEvent BootEvent_p,
-				    tEplNmtState NmtState_p,
-				    u16 wErrorCode_p)
-{
-	tEplKernel Ret;
-	tEplApiEventArg EventArg;
-
-	Ret = kEplSuccessful;
-
-	// call user callback
-	EventArg.m_Boot.m_BootEvent = BootEvent_p;
-	EventArg.m_Boot.m_NmtState = NmtState_p;
-	EventArg.m_Boot.m_wErrorCode = wErrorCode_p;
-
-	Ret = EplApiInstance_g.m_InitParam.m_pfnCbEvent(kEplApiEventBoot,
-							&EventArg,
-							EplApiInstance_g.
-							m_InitParam.
-							m_pEventUserArg);
-
-	return Ret;
-
-}
-
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiCbLedStateChange
-//
-// Description: callback function for LED change events.
-//
-// Parameters:  LedType_p       = type of LED
-//              fOn_p           = state of LED
-//
-// Returns:     tEplKernel      = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplApiCbLedStateChange(tEplLedType LedType_p, BOOL fOn_p)
-{
-	tEplKernel Ret;
-	tEplApiEventArg EventArg;
-
-	Ret = kEplSuccessful;
-
-	// call user callback
-	EventArg.m_Led.m_LedType = LedType_p;
-	EventArg.m_Led.m_fOn = fOn_p;
-
-	Ret = EplApiInstance_g.m_InitParam.m_pfnCbEvent(kEplApiEventLed,
-							&EventArg,
-							EplApiInstance_g.
-							m_InitParam.
-							m_pEventUserArg);
-
-	return Ret;
-
-}
-
-#endif
-
-// EOF
diff --git a/drivers/staging/epl/EplApiLinux.h b/drivers/staging/epl/EplApiLinux.h
deleted file mode 100644
index 92cd125..0000000
--- a/drivers/staging/epl/EplApiLinux.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL API layer for Linux (kernel and user space)
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplApiLinux.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/08/25 12:17:41 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/10/11 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_API_LINUX_H_
-#define _EPL_API_LINUX_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPLLIN_DEV_NAME     "epl"	// used for "/dev" and "/proc" entry
-
-//---------------------------------------------------------------------------
-//  Commands for <ioctl>
-//---------------------------------------------------------------------------
-
-#define EPLLIN_CMD_INITIALIZE               0	// ulArg_p ~ tEplApiInitParam*
-#define EPLLIN_CMD_PI_IN                    1	// ulArg_p ~ tEplApiProcessImage*
-#define EPLLIN_CMD_PI_OUT                   2	// ulArg_p ~ tEplApiProcessImage*
-#define EPLLIN_CMD_WRITE_OBJECT             3	// ulArg_p ~ tEplLinSdoObject*
-#define EPLLIN_CMD_READ_OBJECT              4	// ulArg_p ~ tEplLinSdoObject*
-#define EPLLIN_CMD_WRITE_LOCAL_OBJECT       5	// ulArg_p ~ tEplLinLocalObject*
-#define EPLLIN_CMD_READ_LOCAL_OBJECT        6	// ulArg_p ~ tEplLinLocalObject*
-#define EPLLIN_CMD_FREE_SDO_CHANNEL         7	// ulArg_p ~ tEplSdoComConHdl
-#define EPLLIN_CMD_NMT_COMMAND              8	// ulArg_p ~ tEplNmtEvent
-#define EPLLIN_CMD_GET_EVENT                9	// ulArg_p ~ tEplLinEvent*
-#define EPLLIN_CMD_MN_TRIGGER_STATE_CHANGE 10	// ulArg_p ~ tEplLinNodeCmdObject*
-#define EPLLIN_CMD_PI_SETUP                11	// ulArg_p ~ 0
-#define EPLLIN_CMD_SHUTDOWN                12	// ulArg_p ~ 0
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct {
-	unsigned int m_uiEventArgSize;
-	tEplApiEventArg *m_pEventArg;
-	tEplApiEventType *m_pEventType;
-	tEplKernel m_RetCbEvent;
-
-} tEplLinEvent;
-
-typedef struct {
-	tEplSdoComConHdl m_SdoComConHdl;
-	BOOL m_fValidSdoComConHdl;
-	unsigned int m_uiNodeId;
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubindex;
-	void *m_le_pData;
-	unsigned int m_uiSize;
-	tEplSdoType m_SdoType;
-	void *m_pUserArg;
-
-} tEplLinSdoObject;
-
-typedef struct {
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubindex;
-	void *m_pData;
-	unsigned int m_uiSize;
-
-} tEplLinLocalObject;
-
-typedef struct {
-	unsigned int m_uiNodeId;
-	tEplNmtNodeCommand m_NodeCommand;
-
-} tEplLinNodeCmdObject;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_API_LINUX_H_
diff --git a/drivers/staging/epl/EplApiLinuxKernel.c b/drivers/staging/epl/EplApiLinuxKernel.c
deleted file mode 100644
index cb3e275..0000000
--- a/drivers/staging/epl/EplApiLinuxKernel.c
+++ /dev/null
@@ -1,1173 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Linux kernel module as wrapper of EPL API layer,
-                i.e. counterpart to a Linux application
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplApiLinuxKernel.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.9 $  $Date: 2008/11/21 09:00:38 $
-
-                $State: Exp $
-
-                Build Environment:
-                GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/10/11 d.k.:  Initial Version
-  2008/04/10 m.u.:  Changed to new char driver init
-
-****************************************************************************/
-
-// kernel modul and driver
-
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <linux/cdev.h>
-#include <linux/types.h>
-
-//#include <linux/module.h>
-//#include <linux/kernel.h>
-//#include <linux/init.h>
-//#include <linux/errno.h>
-
-// scheduling
-#include <linux/sched.h>
-
-// memory access
-#include <asm/uaccess.h>
-#include <linux/vmalloc.h>
-
-#include "Epl.h"
-#include "EplApiLinux.h"
-//#include "kernel/EplPdokCal.h"
-#include "proc_fs.h"
-
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-// Metainformation
-MODULE_LICENSE("Dual BSD/GPL");
-#ifdef MODULE_AUTHOR
-MODULE_AUTHOR("Daniel.Krueger@xxxxxxxxxxxxxxxxxxxxx");
-MODULE_DESCRIPTION("EPL API driver");
-#endif
-
-//---------------------------------------------------------------------------
-//  Configuration
-//---------------------------------------------------------------------------
-
-#define EPLLIN_DRV_NAME     "systec_epl"	// used for <register_chrdev>
-
-//---------------------------------------------------------------------------
-//  Constant definitions
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#endif
-
-#define EVENT_STATE_INIT        0
-#define EVENT_STATE_IOCTL       1	// ioctl entered and ready to receive EPL event
-#define EVENT_STATE_READY       2	// EPL event can be forwarded to user application
-#define EVENT_STATE_TERM        3	// terminate processing
-
-#define EPL_STATE_NOTOPEN       0
-#define EPL_STATE_NOTINIT       1
-#define EPL_STATE_RUNNING       2
-#define EPL_STATE_SHUTDOWN      3
-
-//---------------------------------------------------------------------------
-//  Global variables
-//---------------------------------------------------------------------------
-
-    // device number (major and minor)
-static dev_t nDevNum_g;
-static struct cdev *pEpl_cdev_g;
-
-static volatile unsigned int uiEplState_g = EPL_STATE_NOTOPEN;
-
-static struct semaphore SemaphoreCbEvent_g;	// semaphore for EplLinCbEvent
-static wait_queue_head_t WaitQueueCbEvent_g;	// wait queue EplLinCbEvent
-static wait_queue_head_t WaitQueueProcess_g;	// wait queue for EplApiProcess (user process)
-static wait_queue_head_t WaitQueueRelease_g;	// wait queue for EplLinRelease
-static atomic_t AtomicEventState_g = ATOMIC_INIT(EVENT_STATE_INIT);
-static tEplApiEventType EventType_g;	// event type (enum)
-static tEplApiEventArg *pEventArg_g;	// event argument (union)
-static tEplKernel RetCbEvent_g;	// return code from event callback function
-static wait_queue_head_t WaitQueueCbSync_g;	// wait queue EplLinCbSync
-static wait_queue_head_t WaitQueuePI_In_g;	// wait queue for EplApiProcessImageExchangeIn (user process)
-static atomic_t AtomicSyncState_g = ATOMIC_INIT(EVENT_STATE_INIT);
-
-//---------------------------------------------------------------------------
-//  Local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	void *m_pUserArg;
-	void *m_pData;
-
-} tEplLinSdoBufHeader;
-
-//---------------------------------------------------------------------------
-//  Local variables
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Prototypes of internal functions
-//---------------------------------------------------------------------------
-
-tEplKernel EplLinCbEvent(tEplApiEventType EventType_p,	// IN: event type (enum)
-			 tEplApiEventArg *pEventArg_p,	// IN: event argument (union)
-			 void *pUserArg_p);
-
-tEplKernel EplLinCbSync(void);
-
-static int __init EplLinInit(void);
-static void __exit EplLinExit(void);
-
-static int EplLinOpen(struct inode *pDeviceFile_p, struct file *pInstance_p);
-static int EplLinRelease(struct inode *pDeviceFile_p, struct file *pInstance_p);
-static ssize_t EplLinRead(struct file *pInstance_p, char *pDstBuff_p,
-			  size_t BuffSize_p, loff_t * pFileOffs_p);
-static ssize_t EplLinWrite(struct file *pInstance_p, const char *pSrcBuff_p,
-			   size_t BuffSize_p, loff_t * pFileOffs_p);
-static int EplLinIoctl(struct inode *pDeviceFile_p, struct file *pInstance_p,
-		       unsigned int uiIoctlCmd_p, unsigned long ulArg_p);
-
-//---------------------------------------------------------------------------
-//  Kernel Module specific Data Structures
-//---------------------------------------------------------------------------
-
-module_init(EplLinInit);
-module_exit(EplLinExit);
-
-static struct file_operations EplLinFileOps_g = {
-	.owner = THIS_MODULE,
-	.open = EplLinOpen,
-	.release = EplLinRelease,
-	.read = EplLinRead,
-	.write = EplLinWrite,
-	.ioctl = EplLinIoctl,
-
-};
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//  Initailize Driver
-//---------------------------------------------------------------------------
-//  -> insmod driver
-//---------------------------------------------------------------------------
-
-static int __init EplLinInit(void)
-{
-
-	tEplKernel EplRet;
-	int iErr;
-	int iRet;
-
-	TRACE0("EPL: + EplLinInit...\n");
-	TRACE2("EPL:   Driver build: %s / %s\n", __DATE__, __TIME__);
-
-	iRet = 0;
-
-	// initialize global variables
-	atomic_set(&AtomicEventState_g, EVENT_STATE_INIT);
-	sema_init(&SemaphoreCbEvent_g, 1);
-	init_waitqueue_head(&WaitQueueCbEvent_g);
-	init_waitqueue_head(&WaitQueueProcess_g);
-	init_waitqueue_head(&WaitQueueRelease_g);
-
-	// register character device handler
-	// only one Minor required
-	TRACE2("EPL:   Installing Driver '%s', Version %s...\n",
-	       EPLLIN_DRV_NAME, EPL_PRODUCT_VERSION);
-	iRet = alloc_chrdev_region(&nDevNum_g, 0, 1, EPLLIN_DRV_NAME);
-	if (iRet == 0) {
-		TRACE2
-		    ("EPL:   Driver '%s' installed successful, assigned MajorNumber=%d\n",
-		     EPLLIN_DRV_NAME, MAJOR(nDevNum_g));
-	} else {
-		TRACE1
-		    ("EPL:   ERROR: Driver '%s' is unable to get a free MajorNumber!\n",
-		     EPLLIN_DRV_NAME);
-		iRet = -EIO;
-		goto Exit;
-	}
-
-	// register cdev structure
-	pEpl_cdev_g = cdev_alloc();
-	pEpl_cdev_g->ops = &EplLinFileOps_g;
-	pEpl_cdev_g->owner = THIS_MODULE;
-	iErr = cdev_add(pEpl_cdev_g, nDevNum_g, 1);
-	if (iErr) {
-		TRACE2("EPL:   ERROR %d: Driver '%s' could not be added!\n",
-		       iErr, EPLLIN_DRV_NAME);
-		iRet = -EIO;
-		goto Exit;
-	}
-
-	// create device node in PROCFS
-	EplRet = EplLinProcInit();
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-
-	TRACE1("EPL: - EplLinInit (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//---------------------------------------------------------------------------
-//  Remove Driver
-//---------------------------------------------------------------------------
-//  -> rmmod driver
-//---------------------------------------------------------------------------
-
-static void __exit EplLinExit(void)
-{
-
-	tEplKernel EplRet;
-
-	// delete instance for all modules
-//    EplRet = EplApiShutdown();
-//    printk("EplApiShutdown():  0x%X\n", EplRet);
-
-	// deinitialize proc fs
-	EplRet = EplLinProcFree();
-	printk("EplLinProcFree():        0x%X\n", EplRet);
-
-	TRACE0("EPL: + EplLinExit...\n");
-
-	// remove cdev structure
-	cdev_del(pEpl_cdev_g);
-
-	// unregister character device handler
-	unregister_chrdev_region(nDevNum_g, 1);
-
-	TRACE1("EPL:   Driver '%s' removed.\n", EPLLIN_DRV_NAME);
-
-	TRACE0("EPL: - EplLinExit\n");
-
-}
-
-//---------------------------------------------------------------------------
-//  Open Driver
-//---------------------------------------------------------------------------
-//  -> open("/dev/driver", O_RDWR)...
-//---------------------------------------------------------------------------
-
-static int EplLinOpen(struct inode *pDeviceFile_p,	// information about the device to open
-		      struct file *pInstance_p)	// information about driver instance
-{
-
-	int iRet;
-
-	TRACE0("EPL: + EplLinOpen...\n");
-
-	if (uiEplState_g != EPL_STATE_NOTOPEN) {	// stack already initialized
-		iRet = -EALREADY;
-	} else {
-		atomic_set(&AtomicEventState_g, EVENT_STATE_INIT);
-		sema_init(&SemaphoreCbEvent_g, 1);
-		init_waitqueue_head(&WaitQueueCbEvent_g);
-		init_waitqueue_head(&WaitQueueProcess_g);
-		init_waitqueue_head(&WaitQueueRelease_g);
-		atomic_set(&AtomicSyncState_g, EVENT_STATE_INIT);
-		init_waitqueue_head(&WaitQueueCbSync_g);
-		init_waitqueue_head(&WaitQueuePI_In_g);
-
-		uiEplState_g = EPL_STATE_NOTINIT;
-		iRet = 0;
-	}
-
-	TRACE1("EPL: - EplLinOpen (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//---------------------------------------------------------------------------
-//  Close Driver
-//---------------------------------------------------------------------------
-//  -> close(device)...
-//---------------------------------------------------------------------------
-
-static int EplLinRelease(struct inode *pDeviceFile_p,	// information about the device to open
-			 struct file *pInstance_p)	// information about driver instance
-{
-
-	tEplKernel EplRet = kEplSuccessful;
-	int iRet;
-
-	TRACE0("EPL: + EplLinRelease...\n");
-
-	if (uiEplState_g != EPL_STATE_NOTINIT) {
-		// pass control to sync kernel thread, but signal termination
-		atomic_set(&AtomicSyncState_g, EVENT_STATE_TERM);
-		wake_up_interruptible(&WaitQueueCbSync_g);
-		wake_up_interruptible(&WaitQueuePI_In_g);
-
-		// pass control to event queue kernel thread
-		atomic_set(&AtomicEventState_g, EVENT_STATE_TERM);
-		wake_up_interruptible(&WaitQueueCbEvent_g);
-
-		if (uiEplState_g == EPL_STATE_RUNNING) {	// post NmtEventSwitchOff
-			EplRet = EplApiExecNmtCommand(kEplNmtEventSwitchOff);
-
-		}
-
-		if (EplRet == kEplSuccessful) {
-			TRACE0("EPL:   waiting for NMT_GS_OFF\n");
-			wait_event_interruptible(WaitQueueRelease_g,
-						 (uiEplState_g ==
-						  EPL_STATE_SHUTDOWN));
-		} else {	// post NmtEventSwitchOff failed
-			TRACE0("EPL:   event post failed\n");
-		}
-
-		// $$$ d.k.: What if waiting was interrupted by signal?
-
-		TRACE0("EPL:   call EplApiShutdown()\n");
-		// EPL stack can be safely shut down
-		// delete instance for all EPL modules
-		EplRet = EplApiShutdown();
-		printk("EplApiShutdown():  0x%X\n", EplRet);
-	}
-
-	uiEplState_g = EPL_STATE_NOTOPEN;
-	iRet = 0;
-
-	TRACE1("EPL: - EplLinRelease (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//---------------------------------------------------------------------------
-//  Read Data from Driver
-//---------------------------------------------------------------------------
-//  -> read(...)
-//---------------------------------------------------------------------------
-
-static ssize_t EplLinRead(struct file *pInstance_p,	// information about driver instance
-			  char *pDstBuff_p,	// address of buffer to fill with data
-			  size_t BuffSize_p,	// length of the buffer
-			  loff_t * pFileOffs_p)	// offset in the file
-{
-
-	int iRet;
-
-	TRACE0("EPL: + EplLinRead...\n");
-
-	TRACE0("EPL:   Sorry, this operation isn't supported.\n");
-	iRet = -EINVAL;
-
-	TRACE1("EPL: - EplLinRead (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//---------------------------------------------------------------------------
-//  Write Data to Driver
-//---------------------------------------------------------------------------
-//  -> write(...)
-//---------------------------------------------------------------------------
-
-static ssize_t EplLinWrite(struct file *pInstance_p,	// information about driver instance
-			   const char *pSrcBuff_p,	// address of buffer to get data from
-			   size_t BuffSize_p,	// length of the buffer
-			   loff_t * pFileOffs_p)	// offset in the file
-{
-
-	int iRet;
-
-	TRACE0("EPL: + EplLinWrite...\n");
-
-	TRACE0("EPL:   Sorry, this operation isn't supported.\n");
-	iRet = -EINVAL;
-
-	TRACE1("EPL: - EplLinWrite (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//---------------------------------------------------------------------------
-//  Generic Access to Driver
-//---------------------------------------------------------------------------
-//  -> ioctl(...)
-//---------------------------------------------------------------------------
-
-static int EplLinIoctl(struct inode *pDeviceFile_p,	// information about the device to open
-		       struct file *pInstance_p,	// information about driver instance
-		       unsigned int uiIoctlCmd_p,	// Ioctl command to execute
-		       unsigned long ulArg_p)	// Ioctl command specific argument/parameter
-{
-
-	tEplKernel EplRet;
-	int iErr;
-	int iRet;
-
-//    TRACE1("EPL: + EplLinIoctl (uiIoctlCmd_p=%d)...\n", uiIoctlCmd_p);
-
-	iRet = -EINVAL;
-
-	switch (uiIoctlCmd_p) {
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_INITIALIZE:
-		{
-			tEplApiInitParam EplApiInitParam;
-
-			iErr =
-			    copy_from_user(&EplApiInitParam,
-					   (const void *)ulArg_p,
-					   sizeof(EplApiInitParam));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			EplApiInitParam.m_pfnCbEvent = EplLinCbEvent;
-			EplApiInitParam.m_pfnCbSync = EplLinCbSync;
-
-			EplRet = EplApiInitialize(&EplApiInitParam);
-
-			uiEplState_g = EPL_STATE_RUNNING;
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_SHUTDOWN:
-		{		// shutdown the threads
-
-			// pass control to sync kernel thread, but signal termination
-			atomic_set(&AtomicSyncState_g, EVENT_STATE_TERM);
-			wake_up_interruptible(&WaitQueueCbSync_g);
-			wake_up_interruptible(&WaitQueuePI_In_g);
-
-			// pass control to event queue kernel thread
-			atomic_set(&AtomicEventState_g, EVENT_STATE_TERM);
-			wake_up_interruptible(&WaitQueueCbEvent_g);
-
-			if (uiEplState_g == EPL_STATE_RUNNING) {	// post NmtEventSwitchOff
-				EplRet =
-				    EplApiExecNmtCommand(kEplNmtEventSwitchOff);
-
-			}
-
-			iRet = 0;
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_READ_LOCAL_OBJECT:
-		{
-			tEplLinLocalObject LocalObject;
-			void *pData;
-
-			iErr =
-			    copy_from_user(&LocalObject, (const void *)ulArg_p,
-					   sizeof(LocalObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if ((LocalObject.m_pData == NULL)
-			    || (LocalObject.m_uiSize == 0)) {
-				iRet = (int)kEplApiInvalidParam;
-				goto Exit;
-			}
-
-			pData = vmalloc(LocalObject.m_uiSize);
-			if (pData == NULL) {	// no memory available
-				iRet = -ENOMEM;
-				goto Exit;
-			}
-
-			EplRet =
-			    EplApiReadLocalObject(LocalObject.m_uiIndex,
-						  LocalObject.m_uiSubindex,
-						  pData, &LocalObject.m_uiSize);
-
-			if (EplRet == kEplSuccessful) {
-				iErr =
-				    copy_to_user(LocalObject.m_pData, pData,
-						 LocalObject.m_uiSize);
-
-				vfree(pData);
-
-				if (iErr != 0) {
-					iRet = -EIO;
-					goto Exit;
-				}
-				// return actual size (LocalObject.m_uiSize)
-				iErr = put_user(LocalObject.m_uiSize,
-						(unsigned int *)(ulArg_p +
-								 (unsigned long)
-								 &LocalObject.
-								 m_uiSize -
-								 (unsigned long)
-								 &LocalObject));
-				if (iErr != 0) {
-					iRet = -EIO;
-					goto Exit;
-				}
-
-			} else {
-				vfree(pData);
-			}
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_WRITE_LOCAL_OBJECT:
-		{
-			tEplLinLocalObject LocalObject;
-			void *pData;
-
-			iErr =
-			    copy_from_user(&LocalObject, (const void *)ulArg_p,
-					   sizeof(LocalObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if ((LocalObject.m_pData == NULL)
-			    || (LocalObject.m_uiSize == 0)) {
-				iRet = (int)kEplApiInvalidParam;
-				goto Exit;
-			}
-
-			pData = vmalloc(LocalObject.m_uiSize);
-			if (pData == NULL) {	// no memory available
-				iRet = -ENOMEM;
-				goto Exit;
-			}
-			iErr =
-			    copy_from_user(pData, LocalObject.m_pData,
-					   LocalObject.m_uiSize);
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			EplRet =
-			    EplApiWriteLocalObject(LocalObject.m_uiIndex,
-						   LocalObject.m_uiSubindex,
-						   pData, LocalObject.m_uiSize);
-
-			vfree(pData);
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-	case EPLLIN_CMD_READ_OBJECT:
-		{
-			tEplLinSdoObject SdoObject;
-			void *pData;
-			tEplLinSdoBufHeader *pBufHeader;
-			tEplSdoComConHdl *pSdoComConHdl;
-
-			iErr =
-			    copy_from_user(&SdoObject, (const void *)ulArg_p,
-					   sizeof(SdoObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if ((SdoObject.m_le_pData == NULL)
-			    || (SdoObject.m_uiSize == 0)) {
-				iRet = (int)kEplApiInvalidParam;
-				goto Exit;
-			}
-
-			pBufHeader =
-			    (tEplLinSdoBufHeader *)
-			    vmalloc(sizeof(tEplLinSdoBufHeader) +
-				    SdoObject.m_uiSize);
-			if (pBufHeader == NULL) {	// no memory available
-				iRet = -ENOMEM;
-				goto Exit;
-			}
-			// initiate temporary buffer
-			pBufHeader->m_pUserArg = SdoObject.m_pUserArg;	// original user argument pointer
-			pBufHeader->m_pData = SdoObject.m_le_pData;	// original data pointer from app
-			pData = pBufHeader + sizeof(tEplLinSdoBufHeader);
-
-			if (SdoObject.m_fValidSdoComConHdl != FALSE) {
-				pSdoComConHdl = &SdoObject.m_SdoComConHdl;
-			} else {
-				pSdoComConHdl = NULL;
-			}
-
-			EplRet =
-			    EplApiReadObject(pSdoComConHdl,
-					     SdoObject.m_uiNodeId,
-					     SdoObject.m_uiIndex,
-					     SdoObject.m_uiSubindex, pData,
-					     &SdoObject.m_uiSize,
-					     SdoObject.m_SdoType, pBufHeader);
-
-			// return actual SDO handle (SdoObject.m_SdoComConHdl)
-			iErr = put_user(SdoObject.m_SdoComConHdl,
-					(unsigned int *)(ulArg_p +
-							 (unsigned long)
-							 &SdoObject.
-							 m_SdoComConHdl -
-							 (unsigned long)
-							 &SdoObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if (EplRet == kEplSuccessful) {
-				iErr =
-				    copy_to_user(SdoObject.m_le_pData, pData,
-						 SdoObject.m_uiSize);
-
-				vfree(pBufHeader);
-
-				if (iErr != 0) {
-					iRet = -EIO;
-					goto Exit;
-				}
-				// return actual size (SdoObject.m_uiSize)
-				iErr = put_user(SdoObject.m_uiSize,
-						(unsigned int *)(ulArg_p +
-								 (unsigned long)
-								 &SdoObject.
-								 m_uiSize -
-								 (unsigned long)
-								 &SdoObject));
-				if (iErr != 0) {
-					iRet = -EIO;
-					goto Exit;
-				}
-			} else if (EplRet != kEplApiTaskDeferred) {	// error ocurred
-				vfree(pBufHeader);
-				if (iErr != 0) {
-					iRet = -EIO;
-					goto Exit;
-				}
-			}
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-	case EPLLIN_CMD_WRITE_OBJECT:
-		{
-			tEplLinSdoObject SdoObject;
-			void *pData;
-			tEplLinSdoBufHeader *pBufHeader;
-			tEplSdoComConHdl *pSdoComConHdl;
-
-			iErr =
-			    copy_from_user(&SdoObject, (const void *)ulArg_p,
-					   sizeof(SdoObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if ((SdoObject.m_le_pData == NULL)
-			    || (SdoObject.m_uiSize == 0)) {
-				iRet = (int)kEplApiInvalidParam;
-				goto Exit;
-			}
-
-			pBufHeader =
-			    (tEplLinSdoBufHeader *)
-			    vmalloc(sizeof(tEplLinSdoBufHeader) +
-				    SdoObject.m_uiSize);
-			if (pBufHeader == NULL) {	// no memory available
-				iRet = -ENOMEM;
-				goto Exit;
-			}
-			// initiate temporary buffer
-			pBufHeader->m_pUserArg = SdoObject.m_pUserArg;	// original user argument pointer
-			pBufHeader->m_pData = SdoObject.m_le_pData;	// original data pointer from app
-			pData = pBufHeader + sizeof(tEplLinSdoBufHeader);
-
-			iErr =
-			    copy_from_user(pData, SdoObject.m_le_pData,
-					   SdoObject.m_uiSize);
-
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if (SdoObject.m_fValidSdoComConHdl != FALSE) {
-				pSdoComConHdl = &SdoObject.m_SdoComConHdl;
-			} else {
-				pSdoComConHdl = NULL;
-			}
-
-			EplRet =
-			    EplApiWriteObject(pSdoComConHdl,
-					      SdoObject.m_uiNodeId,
-					      SdoObject.m_uiIndex,
-					      SdoObject.m_uiSubindex, pData,
-					      SdoObject.m_uiSize,
-					      SdoObject.m_SdoType, pBufHeader);
-
-			// return actual SDO handle (SdoObject.m_SdoComConHdl)
-			iErr = put_user(SdoObject.m_SdoComConHdl,
-					(unsigned int *)(ulArg_p +
-							 (unsigned long)
-							 &SdoObject.
-							 m_SdoComConHdl -
-							 (unsigned long)
-							 &SdoObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if (EplRet != kEplApiTaskDeferred) {	// succeeded or error ocurred, but task not deferred
-				vfree(pBufHeader);
-			}
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_FREE_SDO_CHANNEL:
-		{
-			// forward SDO handle to EPL stack
-			EplRet =
-			    EplApiFreeSdoChannel((tEplSdoComConHdl) ulArg_p);
-
-			iRet = (int)EplRet;
-			break;
-		}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_MN_TRIGGER_STATE_CHANGE:
-		{
-			tEplLinNodeCmdObject NodeCmdObject;
-
-			iErr =
-			    copy_from_user(&NodeCmdObject,
-					   (const void *)ulArg_p,
-					   sizeof(NodeCmdObject));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			EplRet =
-			    EplApiMnTriggerStateChange(NodeCmdObject.m_uiNodeId,
-						       NodeCmdObject.
-						       m_NodeCommand);
-			iRet = (int)EplRet;
-			break;
-		}
-#endif
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_GET_EVENT:
-		{
-			tEplLinEvent Event;
-
-			// save event structure
-			iErr =
-			    copy_from_user(&Event, (const void *)ulArg_p,
-					   sizeof(Event));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-			// save return code from application's event callback function
-			RetCbEvent_g = Event.m_RetCbEvent;
-
-			if (RetCbEvent_g == kEplShutdown) {
-				// pass control to event queue kernel thread, but signal termination
-				atomic_set(&AtomicEventState_g,
-					   EVENT_STATE_TERM);
-				wake_up_interruptible(&WaitQueueCbEvent_g);
-				// exit with error -> EplApiProcess() will leave the infinite loop
-				iRet = 1;
-				goto Exit;
-			}
-			// pass control to event queue kernel thread
-			atomic_set(&AtomicEventState_g, EVENT_STATE_IOCTL);
-			wake_up_interruptible(&WaitQueueCbEvent_g);
-
-			// fall asleep itself in own wait queue
-			iErr = wait_event_interruptible(WaitQueueProcess_g,
-							(atomic_read
-							 (&AtomicEventState_g)
-							 == EVENT_STATE_READY)
-							||
-							(atomic_read
-							 (&AtomicEventState_g)
-							 == EVENT_STATE_TERM));
-			if (iErr != 0) {	// waiting was interrupted by signal
-				// pass control to event queue kernel thread, but signal termination
-				atomic_set(&AtomicEventState_g,
-					   EVENT_STATE_TERM);
-				wake_up_interruptible(&WaitQueueCbEvent_g);
-				// exit with this error -> EplApiProcess() will leave the infinite loop
-				iRet = iErr;
-				goto Exit;
-			} else if (atomic_read(&AtomicEventState_g) == EVENT_STATE_TERM) {	// termination in progress
-				// pass control to event queue kernel thread, but signal termination
-				wake_up_interruptible(&WaitQueueCbEvent_g);
-				// exit with this error -> EplApiProcess() will leave the infinite loop
-				iRet = 1;
-				goto Exit;
-			}
-			// copy event to user space
-			iErr =
-			    copy_to_user(Event.m_pEventType, &EventType_g,
-					 sizeof(EventType_g));
-			if (iErr != 0) {	// not all data could be copied
-				iRet = -EIO;
-				goto Exit;
-			}
-			// $$$ d.k. perform SDO event processing
-			if (EventType_g == kEplApiEventSdo) {
-				void *pData;
-				tEplLinSdoBufHeader *pBufHeader;
-
-				pBufHeader =
-				    (tEplLinSdoBufHeader *) pEventArg_g->m_Sdo.
-				    m_pUserArg;
-				pData =
-				    pBufHeader + sizeof(tEplLinSdoBufHeader);
-
-				if (pEventArg_g->m_Sdo.m_SdoAccessType ==
-				    kEplSdoAccessTypeRead) {
-					// copy read data to user space
-					iErr =
-					    copy_to_user(pBufHeader->m_pData,
-							 pData,
-							 pEventArg_g->m_Sdo.
-							 m_uiTransferredByte);
-					if (iErr != 0) {	// not all data could be copied
-						iRet = -EIO;
-						goto Exit;
-					}
-				}
-				pEventArg_g->m_Sdo.m_pUserArg =
-				    pBufHeader->m_pUserArg;
-				vfree(pBufHeader);
-			}
-
-			iErr =
-			    copy_to_user(Event.m_pEventArg, pEventArg_g,
-					 min(sizeof(tEplApiEventArg),
-					     Event.m_uiEventArgSize));
-			if (iErr != 0) {	// not all data could be copied
-				iRet = -EIO;
-				goto Exit;
-			}
-			// return to EplApiProcess(), which will call the application's event callback function
-			iRet = 0;
-
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_PI_SETUP:
-		{
-			EplRet = EplApiProcessImageSetup();
-			iRet = (int)EplRet;
-
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_PI_IN:
-		{
-			tEplApiProcessImage ProcessImageIn;
-
-			// save process image structure
-			iErr =
-			    copy_from_user(&ProcessImageIn,
-					   (const void *)ulArg_p,
-					   sizeof(ProcessImageIn));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-			// pass control to event queue kernel thread
-			atomic_set(&AtomicSyncState_g, EVENT_STATE_IOCTL);
-
-			// fall asleep itself in own wait queue
-			iErr = wait_event_interruptible(WaitQueuePI_In_g,
-							(atomic_read
-							 (&AtomicSyncState_g) ==
-							 EVENT_STATE_READY)
-							||
-							(atomic_read
-							 (&AtomicSyncState_g) ==
-							 EVENT_STATE_TERM));
-			if (iErr != 0) {	// waiting was interrupted by signal
-				// pass control to sync kernel thread, but signal termination
-				atomic_set(&AtomicSyncState_g,
-					   EVENT_STATE_TERM);
-				wake_up_interruptible(&WaitQueueCbSync_g);
-				// exit with this error -> application will leave the infinite loop
-				iRet = iErr;
-				goto Exit;
-			} else if (atomic_read(&AtomicSyncState_g) == EVENT_STATE_TERM) {	// termination in progress
-				// pass control to sync kernel thread, but signal termination
-				wake_up_interruptible(&WaitQueueCbSync_g);
-				// exit with this error -> application will leave the infinite loop
-				iRet = 1;
-				goto Exit;
-			}
-			// exchange process image
-			EplRet = EplApiProcessImageExchangeIn(&ProcessImageIn);
-
-			// return to EplApiProcessImageExchangeIn()
-			iRet = (int)EplRet;
-
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_PI_OUT:
-		{
-			tEplApiProcessImage ProcessImageOut;
-
-			// save process image structure
-			iErr =
-			    copy_from_user(&ProcessImageOut,
-					   (const void *)ulArg_p,
-					   sizeof(ProcessImageOut));
-			if (iErr != 0) {
-				iRet = -EIO;
-				goto Exit;
-			}
-
-			if (atomic_read(&AtomicSyncState_g) !=
-			    EVENT_STATE_READY) {
-				iRet = (int)kEplInvalidOperation;
-				goto Exit;
-			}
-			// exchange process image
-			EplRet =
-			    EplApiProcessImageExchangeOut(&ProcessImageOut);
-
-			// pass control to sync kernel thread
-			atomic_set(&AtomicSyncState_g, EVENT_STATE_TERM);
-			wake_up_interruptible(&WaitQueueCbSync_g);
-
-			// return to EplApiProcessImageExchangeout()
-			iRet = (int)EplRet;
-
-			break;
-		}
-
-		// ----------------------------------------------------------
-	case EPLLIN_CMD_NMT_COMMAND:
-		{
-			// forward NMT command to EPL stack
-			EplRet = EplApiExecNmtCommand((tEplNmtEvent) ulArg_p);
-
-			iRet = (int)EplRet;
-
-			break;
-		}
-
-		// ----------------------------------------------------------
-	default:
-		{
-			break;
-		}
-	}
-
-      Exit:
-
-//    TRACE1("EPL: - EplLinIoctl (iRet=%d)\n", iRet);
-	return (iRet);
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-tEplKernel EplLinCbEvent(tEplApiEventType EventType_p,	// IN: event type (enum)
-			 tEplApiEventArg *pEventArg_p,	// IN: event argument (union)
-			 void *pUserArg_p)
-{
-	tEplKernel EplRet = kEplSuccessful;
-	int iErr;
-
-	// block any further call to this function, i.e. enter critical section
-	iErr = down_interruptible(&SemaphoreCbEvent_g);
-	if (iErr != 0) {	// waiting was interrupted by signal
-		EplRet = kEplShutdown;
-		goto Exit;
-	}
-	// wait for EplApiProcess() to call ioctl
-	// normally it should be waiting already for us to pass a new event
-	iErr = wait_event_interruptible(WaitQueueCbEvent_g,
-					(atomic_read(&AtomicEventState_g) ==
-					 EVENT_STATE_IOCTL)
-					|| (atomic_read(&AtomicEventState_g) ==
-					    EVENT_STATE_TERM));
-	if ((iErr != 0) || (atomic_read(&AtomicEventState_g) == EVENT_STATE_TERM)) {	// waiting was interrupted by signal
-		EplRet = kEplShutdown;
-		goto LeaveCriticalSection;
-	}
-	// save event information for ioctl
-	EventType_g = EventType_p;
-	pEventArg_g = pEventArg_p;
-
-	// pass control to application's event callback function, i.e. EplApiProcess()
-	atomic_set(&AtomicEventState_g, EVENT_STATE_READY);
-	wake_up_interruptible(&WaitQueueProcess_g);
-
-	// now, the application's event callback function processes the event
-
-	// wait for completion of application's event callback function, i.e. EplApiProcess() calls ioctl again
-	iErr = wait_event_interruptible(WaitQueueCbEvent_g,
-					(atomic_read(&AtomicEventState_g) ==
-					 EVENT_STATE_IOCTL)
-					|| (atomic_read(&AtomicEventState_g) ==
-					    EVENT_STATE_TERM));
-	if ((iErr != 0) || (atomic_read(&AtomicEventState_g) == EVENT_STATE_TERM)) {	// waiting was interrupted by signal
-		EplRet = kEplShutdown;
-		goto LeaveCriticalSection;
-	}
-	// read return code from application's event callback function
-	EplRet = RetCbEvent_g;
-
-      LeaveCriticalSection:
-	up(&SemaphoreCbEvent_g);
-
-      Exit:
-	// check if NMT_GS_OFF is reached
-	if (EventType_p == kEplApiEventNmtStateChange) {
-		if (pEventArg_p->m_NmtStateChange.m_NewNmtState == kEplNmtGsOff) {	// NMT state machine was shut down
-			TRACE0("EPL:   EplLinCbEvent(NMT_GS_OFF)\n");
-			uiEplState_g = EPL_STATE_SHUTDOWN;
-			atomic_set(&AtomicEventState_g, EVENT_STATE_TERM);
-			wake_up(&WaitQueueRelease_g);
-		} else {	// NMT state machine is running
-			uiEplState_g = EPL_STATE_RUNNING;
-		}
-	}
-
-	return EplRet;
-}
-
-tEplKernel EplLinCbSync(void)
-{
-	tEplKernel EplRet = kEplSuccessful;
-	int iErr;
-
-	// check if user process waits for sync
-	if (atomic_read(&AtomicSyncState_g) == EVENT_STATE_IOCTL) {
-		// pass control to application, i.e. EplApiProcessImageExchangeIn()
-		atomic_set(&AtomicSyncState_g, EVENT_STATE_READY);
-		wake_up_interruptible(&WaitQueuePI_In_g);
-
-		// now, the application processes the sync event
-
-		// wait for call of EplApiProcessImageExchangeOut()
-		iErr = wait_event_interruptible(WaitQueueCbSync_g,
-						(atomic_read(&AtomicSyncState_g)
-						 == EVENT_STATE_IOCTL)
-						||
-						(atomic_read(&AtomicSyncState_g)
-						 == EVENT_STATE_TERM));
-		if ((iErr != 0) || (atomic_read(&AtomicEventState_g) == EVENT_STATE_IOCTL)) {	// waiting was interrupted by signal or application called wrong function
-			EplRet = kEplShutdown;
-		}
-	} else {		// application is currently not waiting for sync
-		// continue without interruption
-		// TPDO are set valid by caller (i.e. EplEventkProcess())
-	}
-
-	TGT_DBG_SIGNAL_TRACE_POINT(1);
-
-	return EplRet;
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplApiProcessImage.c b/drivers/staging/epl/EplApiProcessImage.c
deleted file mode 100644
index 7d55086..0000000
--- a/drivers/staging/epl/EplApiProcessImage.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for EPL API module (process image)
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplApiProcessImage.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.7 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/10/10 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "Epl.h"
-
-#include <linux/uaccess.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplApi                                              */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-#if ((EPL_API_PROCESS_IMAGE_SIZE_IN > 0) || (EPL_API_PROCESS_IMAGE_SIZE_OUT > 0))
-typedef struct {
-#if EPL_API_PROCESS_IMAGE_SIZE_IN > 0
-	u8 m_abProcessImageInput[EPL_API_PROCESS_IMAGE_SIZE_IN];
-#endif
-#if EPL_API_PROCESS_IMAGE_SIZE_OUT > 0
-	u8 m_abProcessImageOutput[EPL_API_PROCESS_IMAGE_SIZE_OUT];
-#endif
-
-} tEplApiProcessImageInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplApiProcessImageInstance EplApiProcessImageInstance_g;
-#endif
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplApiProcessImageSetup()
-//
-// Description: sets up static process image
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplApiProcessImageSetup(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-#if ((EPL_API_PROCESS_IMAGE_SIZE_IN > 0) || (EPL_API_PROCESS_IMAGE_SIZE_OUT > 0))
-	unsigned int uiVarEntries;
-	tEplObdSize ObdSize;
-#endif
-
-#if EPL_API_PROCESS_IMAGE_SIZE_IN > 0
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN;
-	ObdSize = 1;
-	Ret = EplApiLinkObject(0x2000,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN;
-	ObdSize = 1;
-	Ret = EplApiLinkObject(0x2001,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 2;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN / ObdSize;
-	Ret = EplApiLinkObject(0x2010,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 2;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN / ObdSize;
-	Ret = EplApiLinkObject(0x2011,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 4;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN / ObdSize;
-	Ret = EplApiLinkObject(0x2020,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 4;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_IN / ObdSize;
-	Ret = EplApiLinkObject(0x2021,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageInput, &uiVarEntries, &ObdSize,
-			       1);
-#endif
-
-#if EPL_API_PROCESS_IMAGE_SIZE_OUT > 0
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT;
-	ObdSize = 1;
-	Ret = EplApiLinkObject(0x2030,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT;
-	ObdSize = 1;
-	Ret = EplApiLinkObject(0x2031,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 2;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT / ObdSize;
-	Ret = EplApiLinkObject(0x2040,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 2;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT / ObdSize;
-	Ret = EplApiLinkObject(0x2041,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 4;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT / ObdSize;
-	Ret = EplApiLinkObject(0x2050,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-
-	ObdSize = 4;
-	uiVarEntries = EPL_API_PROCESS_IMAGE_SIZE_OUT / ObdSize;
-	Ret = EplApiLinkObject(0x2051,
-			       EplApiProcessImageInstance_g.
-			       m_abProcessImageOutput, &uiVarEntries, &ObdSize,
-			       1);
-#endif
-
-	return Ret;
-}
-
-//----------------------------------------------------------------------------
-// Function:    EplApiProcessImageExchangeIn()
-//
-// Description: replaces passed input process image with the one of EPL stack
-//
-// Parameters:  pPI_p                   = input process image
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//----------------------------------------------------------------------------
-
-tEplKernel EplApiProcessImageExchangeIn(tEplApiProcessImage *pPI_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if EPL_API_PROCESS_IMAGE_SIZE_IN > 0
-	copy_to_user(pPI_p->m_pImage,
-		     EplApiProcessImageInstance_g.m_abProcessImageInput,
-		     min(pPI_p->m_uiSize,
-			 sizeof(EplApiProcessImageInstance_g.
-				m_abProcessImageInput)));
-#endif
-
-	return Ret;
-}
-
-//----------------------------------------------------------------------------
-// Function:    EplApiProcessImageExchangeOut()
-//
-// Description: copies passed output process image to EPL stack.
-//
-// Parameters:  pPI_p                   = output process image
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//----------------------------------------------------------------------------
-
-tEplKernel EplApiProcessImageExchangeOut(tEplApiProcessImage *pPI_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if EPL_API_PROCESS_IMAGE_SIZE_OUT > 0
-	copy_from_user(EplApiProcessImageInstance_g.m_abProcessImageOutput,
-		       pPI_p->m_pImage,
-		       min(pPI_p->m_uiSize,
-			   sizeof(EplApiProcessImageInstance_g.
-				  m_abProcessImageOutput)));
-#endif
-
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-// EOF
diff --git a/drivers/staging/epl/EplCfg.h b/drivers/staging/epl/EplCfg.h
deleted file mode 100644
index 38e958a..0000000
--- a/drivers/staging/epl/EplCfg.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  configuration file
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplCfg.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/06    k.t.: Start of Implementation
-
-****************************************************************************/
-
-#ifndef _EPLCFG_H_
-#define _EPLCFG_H_
-
-// =========================================================================
-// generic defines which for whole EPL Stack
-// =========================================================================
-#define EPL_USE_DELETEINST_FUNC TRUE
-
-// needed to support datatypes over 32 bit by global.h
-#define USE_VAR64
-
-// EPL_MAX_INSTANCES specifies count of instances of all EPL modules.
-// If it is greater than 1 the first parameter of all
-// functions is the instance number.
-#define EPL_MAX_INSTANCES               1
-
-// This defines the target hardware. Here is encoded wich CPU and wich external
-// peripherals are connected. For possible values refere to target.h. If
-// necessary value is not available EPL stack has to
-// be adapted and tested.
-#define TARGET_HARDWARE                 TGTHW_PC_WRAPP
-
-// use no FIFOs, make direct calls
-//#define EPL_NO_FIFO
-
-// use no IPC between user- and kernelspace modules, make direct calls
-#define EPL_NO_USER_KERNEL
-
-#ifndef BENCHMARK_MODULES
-#define BENCHMARK_MODULES       0	//0xEE800042L
-#endif
-
-// Default defug level:
-// Only debug traces of these modules will be compiled which flags are set in define DEF_DEBUG_LVL.
-#ifndef DEF_DEBUG_LVL
-#define DEF_DEBUG_LVL           0xEC000000L
-#endif
-//   EPL_DBGLVL_OBD         =   0x00000004L
-// * EPL_DBGLVL_ASSERT      =   0x20000000L
-// * EPL_DBGLVL_ERROR       =   0x40000000L
-// * EPL_DBGLVL_ALWAYS      =   0x80000000L
-
-// EPL_MODULE_INTEGRATION defines all modules which are included in
-// EPL application. Please add or delete modules for your application.
-#define EPL_MODULE_INTEGRATION EPL_MODULE_OBDK \
-                               | EPL_MODULE_PDOK \
-                               | EPL_MODULE_NMT_MN \
-                               | EPL_MODULE_SDOS \
-                               | EPL_MODULE_SDOC \
-                               | EPL_MODULE_SDO_ASND \
-                               | EPL_MODULE_SDO_UDP \
-                               | EPL_MODULE_NMT_CN \
-                               | EPL_MODULE_NMTU \
-                               | EPL_MODULE_NMTK \
-                               | EPL_MODULE_DLLK \
-                               | EPL_MODULE_DLLU \
-                               | EPL_MODULE_VETH
-//                               | EPL_MODULE_OBDU
-
-// =========================================================================
-// EPL ethernet driver (Edrv) specific defines
-// =========================================================================
-
-// switch this define to TRUE if Edrv supports fast tx frames
-#define EDRV_FAST_TXFRAMES              FALSE
-//#define EDRV_FAST_TXFRAMES              TRUE
-
-// switch this define to TRUE if Edrv supports early receive interrupts
-#define EDRV_EARLY_RX_INT               FALSE
-//#define EDRV_EARLY_RX_INT               TRUE
-
-// enables setting of several port pins for benchmarking purposes
-#define EDRV_BENCHMARK                  FALSE
-//#define EDRV_BENCHMARK                  TRUE // MCF_GPIO_PODR_PCIBR
-
-// Call Tx handler (i.e. EplDllCbFrameTransmitted()) already if DMA has finished,
-// otherwise call the Tx handler if frame was actually transmitted over ethernet.
-#define EDRV_DMA_TX_HANDLER             FALSE
-//#define EDRV_DMA_TX_HANDLER             TRUE
-
-// number of used ethernet controller
-//#define EDRV_USED_ETH_CTRL              1
-
-// =========================================================================
-// Data Link Layer (DLL) specific defines
-// =========================================================================
-
-// switch this define to TRUE if Edrv supports fast tx frames
-// and DLL shall pass PRes as ready to Edrv after SoC
-#define EPL_DLL_PRES_READY_AFTER_SOC    FALSE
-//#define EPL_DLL_PRES_READY_AFTER_SOC    TRUE
-
-// switch this define to TRUE if Edrv supports fast tx frames
-// and DLL shall pass PRes as ready to Edrv after SoA
-#define EPL_DLL_PRES_READY_AFTER_SOA    FALSE
-//#define EPL_DLL_PRES_READY_AFTER_SOA    TRUE
-
-// =========================================================================
-// OBD specific defines
-// =========================================================================
-
-// switch this define to TRUE if Epl should compare object range
-// automaticly
-#define EPL_OBD_CHECK_OBJECT_RANGE          FALSE
-//#define EPL_OBD_CHECK_OBJECT_RANGE          TRUE
-
-// set this define to TRUE if there are strings or domains in OD, which
-// may be changed in object size and/or object data pointer by its object
-// callback function (called event kObdEvWrStringDomain)
-//#define EPL_OBD_USE_STRING_DOMAIN_IN_RAM    FALSE
-#define EPL_OBD_USE_STRING_DOMAIN_IN_RAM    TRUE
-
-#define EPL_OBD_USE_VARIABLE_SUBINDEX_TAB TRUE
-
-// =========================================================================
-// Timer module specific defines
-// =========================================================================
-
-// if TRUE it uses the Timer module implementation of EPL user also in EPL kernel
-#define EPL_TIMER_USE_USER              TRUE
-
-// if TRUE the high resolution timer module will be used
-#define EPL_TIMER_USE_HIGHRES              TRUE
-//#define EPL_TIMER_USE_HIGHRES              FALSE
-
-#endif //_EPLCFG_H_
diff --git a/drivers/staging/epl/EplDef.h b/drivers/staging/epl/EplDef.h
deleted file mode 100644
index 1dc8108..0000000
--- a/drivers/staging/epl/EplDef.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL default constants
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDef.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.15 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DEF_H_
-#define _EPL_DEF_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPL_C_ADR_BROADCAST         0xFF	// EPL broadcast address
-#define EPL_C_ADR_DIAG_DEF_NODE_ID  0xFD	// EPL default address of dignostic device
-#define EPL_C_ADR_DUMMY_NODE_ID     0xFC	// EPL dummy node address
-#define EPL_C_ADR_INVALID           0x00	// invalid EPL address
-#define EPL_C_ADR_MN_DEF_NODE_ID    0xF0	// EPL default address of MN
-#define EPL_C_ADR_RT1_DEF_NODE_ID   0xFE	// EPL default address of router type 1
-#define EPL_C_DLL_ASND_PRIO_NMTRQST 7	// increased ASnd request priority to be used by NMT Requests
-#define EPL_C_DLL_ASND_PRIO_STD     0	// standard ASnd request priority
-#define EPL_C_DLL_ETHERTYPE_EPL     0x88AB
-#define EPL_C_DLL_ISOCHR_MAX_PAYL   1490	// Byte: maximum size of PReq and PRes payload data, requires C_IP_MAX_MTU
-#define EPL_C_DLL_MAX_ASYNC_MTU     1500	// Byte: maximum asynchronous payload in bytes
-#define EPL_C_DLL_MAX_PAYL_OFFSET   1499	// Byte: maximum offset of Ethernet frame payload, requires C_IP_MAX_MTU
-#define EPL_C_DLL_MAX_RS            7
-#define EPL_C_DLL_MIN_ASYNC_MTU     282	// Byte: minimum asynchronous payload in bytes.
-#define EPL_C_DLL_MIN_PAYL_OFFSET   45	// Byte: minimum offset of Ethernet frame payload
-#define EPL_C_DLL_MULTICAST_ASND    0x01111E000004LL	// EPL ASnd multicast MAC address, canonical form
-#define EPL_C_DLL_MULTICAST_PRES    0x01111E000002LL	// EPL PRes multicast MAC address, canonical form
-#define EPL_C_DLL_MULTICAST_SOA     0x01111E000003LL	// EPL SoA multicast MAC address, canonical form
-#define EPL_C_DLL_MULTICAST_SOC     0x01111E000001LL	// EPL Soc multicast MAC address, canonical form
-#define EPL_C_DLL_PREOP1_START_CYCLES 10	// number of unassigning SoA frames at start of NMT_MS_PRE_OPERATIONAL_1
-#define EPL_C_DLL_T_BITTIME         10	// ns: Transmission time per bit on 100 Mbit/s network
-#define EPL_C_DLL_T_EPL_PDO_HEADER  10	// Byte: size of PReq and PRes EPL PDO message header
-#define EPL_C_DLL_T_ETH2_WRAPPER    18	// Byte: size of Ethernet type II wrapper consisting of header and checksum
-#define EPL_C_DLL_T_IFG             640	// ns: Ethernet Interframe Gap
-#define EPL_C_DLL_T_MIN_FRAME       5120	// ns: Size of minimum Ethernet frame (without preamble)
-#define EPL_C_DLL_T_PREAMBLE        960	// ns: Size of Ethernet frame preamble
-
-#define EPL_C_DLL_MINSIZE_SOC       36	// minimum size of SoC without padding and CRC
-#define EPL_C_DLL_MINSIZE_PREQ      60	// minimum size of PRec without CRC
-#define EPL_C_DLL_MINSIZE_PRES      60	// minimum size of PRes without CRC
-#define EPL_C_DLL_MINSIZE_SOA       24	// minimum size of SoA without padding and CRC
-#define EPL_C_DLL_MINSIZE_IDENTRES  176	// minimum size of IdentResponse without CRC
-#define EPL_C_DLL_MINSIZE_STATUSRES 72	// minimum size of StatusResponse without CRC
-#define EPL_C_DLL_MINSIZE_NMTCMD    20	// minimum size of NmtCommand without CommandData, padding and CRC
-#define EPL_C_DLL_MINSIZE_NMTCMDEXT 52	// minimum size of NmtCommand without padding and CRC
-#define EPL_C_DLL_MINSIZE_NMTREQ    20	// minimum size of NmtRequest without CommandData, padding and CRC
-#define EPL_C_DLL_MINSIZE_NMTREQEXT 52	// minimum size of NmtRequest without padding and CRC
-
-#define EPL_C_ERR_MONITOR_DELAY     10	// Error monitoring start delay (not used in DS 1.0.0)
-#define EPL_C_IP_ADR_INVALID        0x00000000L	// invalid IP address (0.0.0.0) used to indicate no change
-#define EPL_C_IP_INVALID_MTU        0	// Byte: invalid MTU size used to indicate no change
-#define EPL_C_IP_MAX_MTU            1518	// Byte: maximum size in bytes of the IP stack which must be processed.
-#define EPL_C_IP_MIN_MTU            300	// Byte: minimum size in bytes of the IP stack which must be processed.
-#define EPL_C_NMT_STATE_TOLERANCE   5	// Cycles: maximum reaction time to NMT state commands
-#define EPL_C_NMT_STATREQ_CYCLE     5	// sec: StatusRequest cycle time to be applied to AsyncOnly CNs
-#define EPL_C_SDO_EPL_PORT          3819
-
-#define EPL_C_DLL_MAX_ASND_SERVICE_IDS  5	// see tEplDllAsndServiceId in EplDll.h
-
-// Default configuration
-// ======================
-
-#ifndef EPL_D_PDO_Granularity_U8
-#define EPL_D_PDO_Granularity_U8    8	// minimum size of objects to be mapped in bits UNSIGNED8 O O 1 1
-#endif
-
-#ifndef EPL_NMT_MAX_NODE_ID
-#define EPL_NMT_MAX_NODE_ID         254	// maximum node-ID
-#endif
-
-#ifndef EPL_D_NMT_MaxCNNumber_U8
-#define EPL_D_NMT_MaxCNNumber_U8    239	// maximum number of supported regular CNs in the Node ID range 1 .. 239 UNSIGNED8 O O 239 239
-#endif
-
-// defines for EPL API layer static process image
-#ifndef EPL_API_PROCESS_IMAGE_SIZE_IN
-#define EPL_API_PROCESS_IMAGE_SIZE_IN   0
-#endif
-
-#ifndef EPL_API_PROCESS_IMAGE_SIZE_OUT
-#define EPL_API_PROCESS_IMAGE_SIZE_OUT  0
-#endif
-
-// configure whether OD access events shall be forwarded
-// to user callback function.
-// Because of reentrancy for local OD accesses, this has to be disabled
-// when application resides in other address space as the stack (e.g. if
-// EplApiLinuxUser.c and EplApiLinuxKernel.c are used)
-#ifndef EPL_API_OBD_FORWARD_EVENT
-#define EPL_API_OBD_FORWARD_EVENT       TRUE
-#endif
-
-#ifndef EPL_OBD_MAX_STRING_SIZE
-#define EPL_OBD_MAX_STRING_SIZE        32	// is used for objects 0x1008/0x1009/0x100A
-#endif
-
-#ifndef EPL_OBD_USE_STORE_RESTORE
-#define EPL_OBD_USE_STORE_RESTORE       FALSE
-#endif
-
-#ifndef EPL_OBD_CHECK_OBJECT_RANGE
-#define EPL_OBD_CHECK_OBJECT_RANGE      TRUE
-#endif
-
-#ifndef EPL_OBD_USE_STRING_DOMAIN_IN_RAM
-#define EPL_OBD_USE_STRING_DOMAIN_IN_RAM    TRUE
-#endif
-
-#ifndef EPL_OBD_USE_VARIABLE_SUBINDEX_TAB
-#define EPL_OBD_USE_VARIABLE_SUBINDEX_TAB   TRUE
-#endif
-
-#ifndef EPL_OBD_USE_KERNEL
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) == 0)
-#define EPL_OBD_USE_KERNEL                  TRUE
-#else
-#define EPL_OBD_USE_KERNEL                  FALSE
-#endif
-#endif
-
-#ifndef EPL_OBD_INCLUDE_A000_TO_DEVICE_PART
-#define EPL_OBD_INCLUDE_A000_TO_DEVICE_PART FALSE
-#endif
-
-#ifndef EPL_VETH_NAME
-#define EPL_VETH_NAME       "epl"	// name of net device in Linux
-#endif
-
-/*
-#define EPL_D_CFG_ConfigManager_BOOL // Ability of a MN node to perform Configuration Manager functions BOOLEAN O - N -
-#define EPL_D_CFM_VerifyConf_BOOL   // Support of objects CFM_VerifyConfiguration_REC, CFM_ExpConfDateList_AU32, CFM_ExpConfTimeList_AU32 BOOLEAN O O N N
-#define EPL_D_CFM_VerifyConfId_BOOL // Support of objects CFM_VerifyConfiguration_REC.ConfId_U32 and CFM_ExpConfIdList_AU32 BOOLEAN O O N N
-#define EPL_D_DLL_CNFeatureIsochr_BOOL // CN?s ability to perform isochronous functions BOOLEAN - O - Y
-#define EPL_D_DLL_CNFeatureMultiplex_BOOL // node?s ability to perform control of multiplexed isochronous communication BOOLEAN - O - N
-#define EPL_D_DLL_FeatureCN_BOOL // node?s ability to perform CN functions BOOLEAN O O Y Y
-#define EPL_D_DLL_FeatureMN_BOOL // node?s ability to perform MN functions BOOLEAN M O - N
-#define EPL_D_DLL_MNFeatureMultiplex_BOOL // MN?s ability to perform control of multiplexed isochronous communication BOOLEAN O - Y -
-#define EPL_D_DLL_MNFeaturePResTx_BOOL // MN?s ability to transmit PRes BOOLEAN O - Y -
-#define EPL_D_NMT_ASndRxMaxPayload_U16 // size of ASnd frame receive buffer UNSIGNED16 M M - -
-#define EPL_D_NMT_ASndTxMaxPayload_U16 // size of ASnd frame transmit buffer UNSIGNED16 M M - -
-#define EPL_D_NMT_CNASnd2SoC_U32 // minimum delay between end of reception of ASnd and start of reception of SoC UNSIGNED32 - M - -
-#define EPL_D_NMT_CNASndMaxLatency_U32 // delay between end of SoA reception and start of ASnd transmission UNSIGNED32 - M - -
-#define EPL_D_NMT_CNPResMaxLatency_U32 // delay between end of PReq reception and start of PRes transmission UNSIGNED32 - M - -
-#define EPL_D_NMT_CNSoC2PReq_U32 // CN SoC handling maximum time, a subsequent PReq won?t be handled before SoC handling was finished UNSIGNED32 - M - -
-#define EPL_D_NMT_DeviceType_U32 // Device Type ID UNSIGNED32 M M - -
-#define EPL_D_NMT_EPLVers_U8 EPL // Version implemented by the device UNSIGNED8 M M - -
-#define EPL_D_NMT_ExtStateCmd_BOOL // abitilty to support Extended NMT State Commands BOOLEAN O O Y Y
-#define EPL_D_NMT_InfoSvc_BOOL // ability to support NMT Info Services BOOLEAN O - Y -
-#define EPL_D_NMT_InterfaceAddr_Xh_OSTR // Physical Address of Interface No. Xh OCTET_STRING M M - -
-#define EPL_D_NMT_InterfaceDescr_Xh_VSTR // Description text of Interface No. Xh VISIBLE_STRINGM M - -
-#define EPL_D_NMT_InterfaceMtu_Xh_U32 // MTU of Interface No. Xh UNSIGNED32 M M - -
-#define EPL_D_NMT_InterfaceType_Xh_U8 // Type of Interface No. Xh UNSIGNED8 M M - -
-#define EPL_D_NMT_IsochrRxMaxPayload_U16 // size of isochronous frame receive buffer UNSIGNED16 M M - -
-#define EPL_D_NMT_IsochrTxMaxPayload_U16 // size of isochronous frame transmit buffer UNSIGNED16 M M - -
-#define EPL_D_NMT_ManufactDevName_VS // Manufacturer Device Name VISIBLE_STRING O O - -
-#define EPL_D_NMT_ManufactHwVers_VS // Manufacturer HW version VISIBLE_STRING O O - -
-#define EPL_D_NMT_ManufactSwVers_VS // Manufacturer SW version VISIBLE_STRING O O - -
-#define EPL_D_NMT_MaxCNNodeID_U8 // maximum Node ID available for regular CNs the entry provides an upper limit to the NodeID available for cross traffic PDO reception from a regular CN UNSIGNED8 O O 239 239
-#define EPL_D_NMT_MaxCNNumber_U8 // maximum number of supported regular CNs in the Node ID range 1 .. 239 UNSIGNED8 O O 239 239
-#define EPL_D_NMT_MaxHeartbeats_U8 // number of guard channels UNSIGNED8 O O 254 254
-#define EPL_D_NMT_MNASnd2SoC_U32 // minimum delay between end of reception of ASnd and start of transmission of SoC UNSIGNED32 M - - -
-#define EPL_D_NMT_MNMultiplCycMax_U8 // maximum number of EPL cycles per multiplexed cycle UNSIGNED8 O - 0 -
-#define EPL_D_NMT_MNPRes2PReq_U32 // delay between end of PRes reception and start of PReq transmission UNSIGNED32 M - - -
-#define EPL_D_NMT_MNPRes2PRes_U32 // delay between end of reception of PRes from CNn and start of transmission of PRes by MN UNSIGNED32 M - - -
-#define EPL_D_NMT_MNPResRx2SoA_U32 // delay between end of reception of PRes from CNn and start of transmission of SoA by MN UNSIGNED32 M - - -
-#define EPL_D_NMT_MNPResTx2SoA_U32 // delay between end of PRes transmission by MN and start of transmission of SoA by MN UNSIGNED32 M - - -
-#define EPL_D_NMT_MNSoA2ASndTx_U32 // delay between end of transmission of SoA and start of transmission of ASnd by MN UNSIGNED32 M - - -
-#define EPL_D_NMT_MNSoC2PReq_U32 // MN minimum delay between end of SoC transmission and start of PReq transmission UNSIGNED32 M - - -
-#define EPL_D_NMT_NMTSvcViaUDPIP_BOOL // Ability of a node to perform NMT services via UDP/IP BOOLEAN O - Y -
-#define EPL_D_NMT_NodeIDByHW_BOOL // Ability of a node to support NodeID setup by HW BOOLEAN O O Y Y
-#define EPL_D_NMT_NodeIDBySW_BOOL // Ability of a node to support NodeID setup by SW BOOLEAN O O N N
-#define EPL_D_NMT_ProductCode_U32 // Identity Object Product Code UNSIGNED32 M M - -
-#define EPL_D_NMT_RevisionNo_U32 // Identity Object Revision Number UNSIGNED32 M M - -
-#define EPL_D_NMT_SerialNo_U32 // Identity Object Serial Number UNSIGNED32 M M - -
-#define EPL_D_NMT_SimpleBoot_BOOL // Ability of a MN node to perform Simple Boot Process, if not set Indivual Boot Process shall be proviced BOOLEAN M - - -
-#define EPL_D_NMT_VendorID_U32 // Identity Object Vendor ID UNSIGNED32 M M - -
-#define EPL_D_NWL_Forward_BOOL // Ability of node to forward datagrams BOOLEAN O O N N
-#define EPL_D_NWL_IPSupport_BOOL // Ability of the node cummunicate via IP BOOLEAN - - Y Y
-#define EPL_D_PDO_DynamicMapping_BOOL // Ability of a node to perform dynamic PDO mapping BOOLEAN O O Y Y
-#define EPL_D_PDO_MaxDescrMem_U32 // maximum cumulative memory consumption of TPDO and RPDO describing objects in byte UNSIGNED32 O O MAX_U32 MAX_U32
-#define EPL_D_PDO_RPDOChannels_U8 // number of supported RPDO channels UNSIGNED8 O O 256 256
-#define EPL_D_PDO_RPDOMaxMem_U32 // Maximum memory available for RPDO data per EPL cycle in byte UNSIGNED32 O O MAX_U32 MAX_U32
-#define EPL_D_PDO_RPDOObjects_U8 // Number of supported mapped objects per RPDO channel UNSIGNED8 O O 254 254
-#define EPL_D_PDO_TPDOChannels_U8 // number of supported TPDO channels UNSIGNED8 O - 256 -
-#define EPL_D_PDO_TPDOMaxMem_U32 // Maximum memory available for TPDO data per EPL cycle in byte UNSIGNED32 O O MAX_U32 MAX_U32
-#define EPL_D_PDO_TPDOObjects_U8 // Number of supported mapped objects per TPDO channel UNSIGNED8 O O 254 254
-#define EPL_D_SDO_ViaASnd_BOOL // Ability of a CN to perform SDO transfer by EPL ASnd BOOLEAN - M - -
-#define EPL_D_SDO_ViaPDO_BOOL // Ability of a node to perform SDO transfer by PDO BOOLEAN O O N N
-#define EPL_D_SDO_ViaUDPIP_BOOL // Ability of a CN to perform SDO transfer by UDP/IP BOOLEAN - M - -
-#define EPL_D_SYN_OptimizedSync_BOOL // Ability of node to perform optimized synchronisation BOOLEAN O O N N
-*/
-
-// Emergency error codes
-// ======================
-#define EPL_E_NO_ERROR                  0x0000
-// 0xFxxx manufacturer specific error codes
-#define EPL_E_NMT_NO_IDENT_RES          0xF001
-#define EPL_E_NMT_NO_STATUS_RES         0xF002
-
-// 0x816x HW errors
-#define EPL_E_DLL_BAD_PHYS_MODE         0x8161
-#define EPL_E_DLL_COLLISION             0x8162
-#define EPL_E_DLL_COLLISION_TH          0x8163
-#define EPL_E_DLL_CRC_TH                0x8164
-#define EPL_E_DLL_LOSS_OF_LINK          0x8165
-#define EPL_E_DLL_MAC_BUFFER            0x8166
-// 0x82xx Protocol errors
-#define EPL_E_DLL_ADDRESS_CONFLICT      0x8201
-#define EPL_E_DLL_MULTIPLE_MN           0x8202
-// 0x821x Frame size errors
-#define EPL_E_PDO_SHORT_RX              0x8210
-#define EPL_E_PDO_MAP_VERS              0x8211
-#define EPL_E_NMT_ASND_MTU_DIF          0x8212
-#define EPL_E_NMT_ASND_MTU_LIM          0x8213
-#define EPL_E_NMT_ASND_TX_LIM           0x8214
-// 0x823x Timing errors
-#define EPL_E_NMT_CYCLE_LEN             0x8231
-#define EPL_E_DLL_CYCLE_EXCEED          0x8232
-#define EPL_E_DLL_CYCLE_EXCEED_TH       0x8233
-#define EPL_E_NMT_IDLE_LIM              0x8234
-#define EPL_E_DLL_JITTER_TH             0x8235
-#define EPL_E_DLL_LATE_PRES_TH          0x8236
-#define EPL_E_NMT_PREQ_CN               0x8237
-#define EPL_E_NMT_PREQ_LIM              0x8238
-#define EPL_E_NMT_PRES_CN               0x8239
-#define EPL_E_NMT_PRES_RX_LIM           0x823A
-#define EPL_E_NMT_PRES_TX_LIM           0x823B
-// 0x824x Frame errors
-#define EPL_E_DLL_INVALID_FORMAT        0x8241
-#define EPL_E_DLL_LOSS_PREQ_TH          0x8242
-#define EPL_E_DLL_LOSS_PRES_TH          0x8243
-#define EPL_E_DLL_LOSS_SOA_TH           0x8244
-#define EPL_E_DLL_LOSS_SOC_TH           0x8245
-// 0x84xx BootUp Errors
-#define EPL_E_NMT_BA1                   0x8410	// other MN in MsNotActive active
-#define EPL_E_NMT_BA1_NO_MN_SUPPORT     0x8411	// MN is not supported
-#define EPL_E_NMT_BPO1                  0x8420	// mandatory CN was not found or failed in BootStep1
-#define EPL_E_NMT_BPO1_GET_IDENT        0x8421	// IdentRes was not received
-#define EPL_E_NMT_BPO1_DEVICE_TYPE      0x8422	// wrong device type
-#define EPL_E_NMT_BPO1_VENDOR_ID        0x8423	// wrong vendor ID
-#define EPL_E_NMT_BPO1_PRODUCT_CODE     0x8424	// wrong product code
-#define EPL_E_NMT_BPO1_REVISION_NO      0x8425	// wrong revision number
-#define EPL_E_NMT_BPO1_SERIAL_NO        0x8426	// wrong serial number
-#define EPL_E_NMT_BPO1_CF_VERIFY        0x8428	// verification of configuration failed
-#define EPL_E_NMT_BPO2                  0x8430	// mandatory CN failed in BootStep2
-#define EPL_E_NMT_BRO                   0x8440	// CheckCommunication failed for mandatory CN
-#define EPL_E_NMT_WRONG_STATE           0x8480	// mandatory CN has wrong NMT state
-
-// Defines for object 0x1F80 NMT_StartUp_U32
-// ==========================================
-#define EPL_NMTST_STARTALLNODES         0x00000002L	// Bit 1
-#define EPL_NMTST_NO_AUTOSTART          0x00000004L	// Bit 2
-#define EPL_NMTST_NO_STARTNODE          0x00000008L	// Bit 3
-#define EPL_NMTST_RESETALL_MAND_CN      0x00000010L	// Bit 4
-#define EPL_NMTST_STOPALL_MAND_CN       0x00000040L	// Bit 6
-#define EPL_NMTST_NO_AUTOPREOP2         0x00000080L	// Bit 7
-#define EPL_NMTST_NO_AUTOREADYTOOP      0x00000100L	// Bit 8
-#define EPL_NMTST_EXT_CNIDENTCHECK      0x00000200L	// Bit 9
-#define EPL_NMTST_SWVERSIONCHECK        0x00000400L	// Bit 10
-#define EPL_NMTST_CONFCHECK             0x00000800L	// Bit 11
-#define EPL_NMTST_NO_RETURN_PREOP1      0x00001000L	// Bit 12
-#define EPL_NMTST_BASICETHERNET         0x00002000L	// Bit 13
-
-// Defines for object 0x1F81 NMT_NodeAssignment_AU32
-// ==================================================
-#define EPL_NODEASSIGN_NODE_EXISTS      0x00000001L	// Bit 0
-#define EPL_NODEASSIGN_NODE_IS_CN       0x00000002L	// Bit 1
-#define EPL_NODEASSIGN_START_CN         0x00000004L	// Bit 2
-#define EPL_NODEASSIGN_MANDATORY_CN     0x00000008L	// Bit 3
-#define EPL_NODEASSIGN_KEEPALIVE        0x00000010L	//currently not used in EPL V2 standard
-#define EPL_NODEASSIGN_SWVERSIONCHECK   0x00000020L	// Bit 5
-#define EPL_NODEASSIGN_SWUPDATE         0x00000040L	// Bit 6
-#define EPL_NODEASSIGN_ASYNCONLY_NODE   0x00000100L	// Bit 8
-#define EPL_NODEASSIGN_MULTIPLEXED_CN   0x00000200L	// Bit 9
-#define EPL_NODEASSIGN_RT1              0x00000400L	// Bit 10
-#define EPL_NODEASSIGN_RT2              0x00000800L	// Bit 11
-#define EPL_NODEASSIGN_MN_PRES          0x00001000L	// Bit 12
-#define EPL_NODEASSIGN_VALID            0x80000000L	// Bit 31
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_DEF_H_
diff --git a/drivers/staging/epl/EplDll.h b/drivers/staging/epl/EplDll.h
deleted file mode 100644
index b960199..0000000
--- a/drivers/staging/epl/EplDll.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for DLL module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDll.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/08 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLL_H_
-#define _EPL_DLL_H_
-
-#include "EplInc.h"
-#include "EplFrame.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_DLL_MAX_ASND_SERVICE_ID
-#define EPL_DLL_MAX_ASND_SERVICE_ID (EPL_C_DLL_MAX_ASND_SERVICE_IDS + 1)	// last is kEplDllAsndSdo == 5
-#endif
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef enum {
-	kEplDllAsndNotDefined = 0x00,
-	kEplDllAsndIdentResponse = 0x01,
-	kEplDllAsndStatusResponse = 0x02,
-	kEplDllAsndNmtRequest = 0x03,
-	kEplDllAsndNmtCommand = 0x04,
-	kEplDllAsndSdo = 0x05
-} tEplDllAsndServiceId;
-
-typedef enum {
-	kEplDllAsndFilterNone = 0x00,
-	kEplDllAsndFilterLocal = 0x01,	// receive only ASnd frames with local or broadcast node ID
-	kEplDllAsndFilterAny = 0x02,	// receive any ASnd frame
-} tEplDllAsndFilter;
-
-typedef enum {
-	kEplDllReqServiceNo = 0x00,
-	kEplDllReqServiceIdent = 0x01,
-	kEplDllReqServiceStatus = 0x02,
-	kEplDllReqServiceNmtRequest = 0x03,
-	kEplDllReqServiceUnspecified = 0xFF,
-
-} tEplDllReqServiceId;
-
-typedef enum {
-	kEplDllAsyncReqPrioNmt = 0x07,	// PRIO_NMT_REQUEST
-	kEplDllAsyncReqPrio6 = 0x06,
-	kEplDllAsyncReqPrio5 = 0x05,
-	kEplDllAsyncReqPrio4 = 0x04,
-	kEplDllAsyncReqPrioGeneric = 0x03,	// PRIO_GENERIC_REQUEST
-	kEplDllAsyncReqPrio2 = 0x02,	// till WSP 0.1.3: PRIO_ABOVE_GENERIC
-	kEplDllAsyncReqPrio1 = 0x01,	// till WSP 0.1.3: PRIO_BELOW_GENERIC
-	kEplDllAsyncReqPrio0 = 0x00,	// till WSP 0.1.3: PRIO_GENERIC_REQUEST
-
-} tEplDllAsyncReqPriority;
-
-typedef struct {
-	unsigned int m_uiFrameSize;
-	tEplFrame *m_pFrame;
-	tEplNetTime m_NetTime;
-
-} tEplFrameInfo;
-
-typedef struct {
-	unsigned int m_uiSizeOfStruct;
-	BOOL m_fAsyncOnly;	// do not need to register PRes-Frame
-	unsigned int m_uiNodeId;	// local node ID
-
-	// 0x1F82: NMT_FeatureFlags_U32
-	u32 m_dwFeatureFlags;
-	// Cycle Length (0x1006: NMT_CycleLen_U32) in [us]
-	u32 m_dwCycleLen;	// required for error detection
-	// 0x1F98: NMT_CycleTiming_REC
-	// 0x1F98.1: IsochrTxMaxPayload_U16
-	unsigned int m_uiIsochrTxMaxPayload;	// const
-	// 0x1F98.2: IsochrRxMaxPayload_U16
-	unsigned int m_uiIsochrRxMaxPayload;	// const
-	// 0x1F98.3: PResMaxLatency_U32
-	u32 m_dwPresMaxLatency;	// const in [ns], only required for IdentRes
-	// 0x1F98.4: PReqActPayloadLimit_U16
-	unsigned int m_uiPreqActPayloadLimit;	// required for initialisation (+24 bytes)
-	// 0x1F98.5: PResActPayloadLimit_U16
-	unsigned int m_uiPresActPayloadLimit;	// required for initialisation of Pres frame (+24 bytes)
-	// 0x1F98.6: ASndMaxLatency_U32
-	u32 m_dwAsndMaxLatency;	// const in [ns], only required for IdentRes
-	// 0x1F98.7: MultiplCycleCnt_U8
-	unsigned int m_uiMultiplCycleCnt;	// required for error detection
-	// 0x1F98.8: AsyncMTU_U16
-	unsigned int m_uiAsyncMtu;	// required to set up max frame size
-	// $$$ 0x1F98.9: Prescaler_U16
-	// $$$ Multiplexed Slot
-
-	// 0x1C14: DLL_LossOfFrameTolerance_U32 in [ns]
-	u32 m_dwLossOfFrameTolerance;
-
-	// 0x1F8A: NMT_MNCycleTiming_REC
-	// 0x1F8A.1: WaitSoCPReq_U32 in [ns]
-	u32 m_dwWaitSocPreq;
-
-	// 0x1F8A.2: AsyncSlotTimeout_U32 in [ns]
-	u32 m_dwAsyncSlotTimeout;
-
-} tEplDllConfigParam;
-
-typedef struct {
-	unsigned int m_uiSizeOfStruct;
-	u32 m_dwDeviceType;	// NMT_DeviceType_U32
-	u32 m_dwVendorId;	// NMT_IdentityObject_REC.VendorId_U32
-	u32 m_dwProductCode;	// NMT_IdentityObject_REC.ProductCode_U32
-	u32 m_dwRevisionNumber;	// NMT_IdentityObject_REC.RevisionNo_U32
-	u32 m_dwSerialNumber;	// NMT_IdentityObject_REC.SerialNo_U32
-	u64 m_qwVendorSpecificExt1;
-	u32 m_dwVerifyConfigurationDate;	// CFM_VerifyConfiguration_REC.ConfDate_U32
-	u32 m_dwVerifyConfigurationTime;	// CFM_VerifyConfiguration_REC.ConfTime_U32
-	u32 m_dwApplicationSwDate;	// PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_dwApplicationSwTime;	// PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_dwIpAddress;
-	u32 m_dwSubnetMask;
-	u32 m_dwDefaultGateway;
-	u8 m_sHostname[32];
-	u8 m_abVendorSpecificExt2[48];
-
-} tEplDllIdentParam;
-
-typedef struct {
-	unsigned int m_uiNodeId;
-	u16 m_wPreqPayloadLimit;	// object 0x1F8B: NMT_MNPReqPayloadLimitList_AU16
-	u16 m_wPresPayloadLimit;	// object 0x1F8D: NMT_PResPayloadLimitList_AU16
-	u32 m_dwPresTimeout;	// object 0x1F92: NMT_MNCNPResTimeout_AU32
-
-} tEplDllNodeInfo;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_DLL_H_
diff --git a/drivers/staging/epl/EplDllCal.h b/drivers/staging/epl/EplDllCal.h
deleted file mode 100644
index 70b27b1..0000000
--- a/drivers/staging/epl/EplDllCal.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for DLL Communication Abstraction Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLLCAL_H_
-#define _EPL_DLLCAL_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-/*#ifndef EPL_DLLCAL_BUFFER_ID_RX
-#define EPL_DLLCAL_BUFFER_ID_RX    "EplSblDllCalRx"
-#endif
-
-#ifndef EPL_DLLCAL_BUFFER_SIZE_RX
-#define EPL_DLLCAL_BUFFER_SIZE_RX  32767
-#endif
-*/
-#ifndef EPL_DLLCAL_BUFFER_ID_TX_NMT
-#define EPL_DLLCAL_BUFFER_ID_TX_NMT     "EplSblDllCalTxNmt"
-#endif
-
-#ifndef EPL_DLLCAL_BUFFER_SIZE_TX_NMT
-#define EPL_DLLCAL_BUFFER_SIZE_TX_NMT   32767
-#endif
-
-#ifndef EPL_DLLCAL_BUFFER_ID_TX_GEN
-#define EPL_DLLCAL_BUFFER_ID_TX_GEN     "EplSblDllCalTxGen"
-#endif
-
-#ifndef EPL_DLLCAL_BUFFER_SIZE_TX_GEN
-#define EPL_DLLCAL_BUFFER_SIZE_TX_GEN   32767
-#endif
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplDllAsndServiceId m_ServiceId;
-	tEplDllAsndFilter m_Filter;
-
-} tEplDllCalAsndServiceIdFilter;
-
-typedef struct {
-	tEplDllReqServiceId m_Service;
-	unsigned int m_uiNodeId;
-	u8 m_bSoaFlag1;
-
-} tEplDllCalIssueRequest;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_DLLKCAL_H_
diff --git a/drivers/staging/epl/EplDllk.c b/drivers/staging/epl/EplDllk.c
deleted file mode 100644
index 0572c3d..0000000
--- a/drivers/staging/epl/EplDllk.c
+++ /dev/null
@@ -1,4052 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for kernel DLL module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllk.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.21 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/12 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "kernel/EplDllk.h"
-#include "kernel/EplDllkCal.h"
-#include "kernel/EplEventk.h"
-#include "kernel/EplNmtk.h"
-#include "edrv.h"
-#include "Benchmark.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-#include "kernel/EplPdok.h"
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-#include "kernel/VirtualEthernet.h"
-#endif
-
-//#if EPL_TIMER_USE_HIGHRES != FALSE
-#include "kernel/EplTimerHighResk.h"
-//#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) == 0)
-#error "EPL module DLLK needs EPL module NMTK!"
-#endif
-
-#if (EPL_DLL_PRES_READY_AFTER_SOA != FALSE) && (EPL_DLL_PRES_READY_AFTER_SOC != FALSE)
-#error "EPL module DLLK: select only one of EPL_DLL_PRES_READY_AFTER_SOA and EPL_DLL_PRES_READY_AFTER_SOC."
-#endif
-
-#if ((EPL_DLL_PRES_READY_AFTER_SOA != FALSE) || (EPL_DLL_PRES_READY_AFTER_SOC != FALSE)) \
-    && (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) == 0)
-#error "EPL module DLLK: currently, EPL_DLL_PRES_READY_AFTER_* is not supported if EPL_MODULE_NMT_MN is enabled."
-#endif
-
-#if (EDRV_FAST_TXFRAMES == FALSE) && \
-    ((EPL_DLL_PRES_READY_AFTER_SOA != FALSE) || (EPL_DLL_PRES_READY_AFTER_SOC != FALSE))
-#error "EPL module DLLK: EPL_DLL_PRES_READY_AFTER_* is enabled, but not EDRV_FAST_TXFRAMES."
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-#define EPL_DLLK_DBG_POST_TRACE_VALUE(Event_p, uiNodeId_p, wErrorCode_p) \
-    TGT_DBG_POST_TRACE_VALUE((kEplEventSinkDllk << 28) | (Event_p << 24) \
-                             | (uiNodeId_p << 16) | wErrorCode_p)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplDllk                                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// defines for indexes of tEplDllInstance.m_pTxFrameInfo
-#define EPL_DLLK_TXFRAME_IDENTRES   0	// IdentResponse on CN / MN
-#define EPL_DLLK_TXFRAME_STATUSRES  1	// StatusResponse on CN / MN
-#define EPL_DLLK_TXFRAME_NMTREQ     2	// NMT Request from FIFO on CN / MN
-#define EPL_DLLK_TXFRAME_NONEPL     3	// non-EPL frame from FIFO on CN / MN
-#define EPL_DLLK_TXFRAME_PRES       4	// PRes on CN / MN
-#define EPL_DLLK_TXFRAME_SOC        5	// SoC on MN
-#define EPL_DLLK_TXFRAME_SOA        6	// SoA on MN
-#define EPL_DLLK_TXFRAME_PREQ       7	// PReq on MN
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-#define EPL_DLLK_TXFRAME_COUNT      (7 + EPL_D_NMT_MaxCNNumber_U8 + 2)	// on MN: 7 + MaxPReq of regular CNs + 1 Diag + 1 Router
-#else
-#define EPL_DLLK_TXFRAME_COUNT      5	// on CN: 5
-#endif
-
-#define EPL_DLLK_BUFLEN_EMPTY       0	// buffer is empty
-#define EPL_DLLK_BUFLEN_FILLING     1	// just the buffer is being filled
-#define EPL_DLLK_BUFLEN_MIN         60	// minimum ethernet frame length
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef enum {
-	kEplDllGsInit = 0x00,	// MN/CN: initialisation (< PreOp2)
-	kEplDllCsWaitPreq = 0x01,	// CN: wait for PReq frame
-	kEplDllCsWaitSoc = 0x02,	// CN: wait for SoC frame
-	kEplDllCsWaitSoa = 0x03,	// CN: wait for SoA frame
-	kEplDllMsNonCyclic = 0x04,	// MN: reduced EPL cycle (PreOp1)
-	kEplDllMsWaitSocTrig = 0x05,	// MN: wait for SoC trigger (cycle timer)
-	kEplDllMsWaitPreqTrig = 0x06,	// MN: wait for (first) PReq trigger (WaitSoCPReq_U32)
-	kEplDllMsWaitPres = 0x07,	// MN: wait for PRes frame from CN
-	kEplDllMsWaitSoaTrig = 0x08,	// MN: wait for SoA trigger (PRes transmitted)
-	kEplDllMsWaitAsndTrig = 0x09,	// MN: wait for ASnd trigger (SoA transmitted)
-	kEplDllMsWaitAsnd = 0x0A,	// MN: wait for ASnd frame if SoA contained invitation
-
-} tEplDllState;
-
-typedef struct {
-	u8 m_be_abSrcMac[6];
-	tEdrvTxBuffer *m_pTxBuffer;	// Buffers for Tx-Frames
-	unsigned int m_uiMaxTxFrames;
-	u8 m_bFlag1;		// Flag 1 with EN, EC for PRes, StatusRes
-	u8 m_bMnFlag1;	// Flag 1 with EA, ER from PReq, SoA of MN
-	u8 m_bFlag2;		// Flag 2 with PR and RS for PRes, StatusRes, IdentRes
-	tEplDllConfigParam m_DllConfigParam;
-	tEplDllIdentParam m_DllIdentParam;
-	tEplDllState m_DllState;
-	tEplDllkCbAsync m_pfnCbAsync;
-	tEplDllAsndFilter m_aAsndFilter[EPL_DLL_MAX_ASND_SERVICE_ID];
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	tEplDllkNodeInfo *m_pFirstNodeInfo;
-	tEplDllkNodeInfo *m_pCurNodeInfo;
-	tEplDllkNodeInfo m_aNodeInfo[EPL_NMT_MAX_NODE_ID];
-	tEplDllReqServiceId m_LastReqServiceId;
-	unsigned int m_uiLastTargetNodeId;
-#endif
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	tEplTimerHdl m_TimerHdlCycle;	// used for EPL cycle monitoring on CN and generation on MN
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	tEplTimerHdl m_TimerHdlResponse;	// used for CN response monitoring
-#endif				//(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-#endif
-
-	unsigned int m_uiCycleCount;	// cycle counter (needed for multiplexed cycle support)
-	unsigned long long m_ullFrameTimeout;	// frame timeout (cycle length + loss of frame tolerance)
-
-} tEplDllkInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-// if no dynamic memory allocation shall be used
-// define structures statically
-static tEplDllkInstance EplDllkInstance_g;
-
-static tEdrvTxBuffer aEplDllkTxBuffer_l[EPL_DLLK_TXFRAME_COUNT];
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-// change DLL state on event
-static tEplKernel EplDllkChangeState(tEplNmtEvent NmtEvent_p,
-				     tEplNmtState NmtState_p);
-
-// called from EdrvInterruptHandler()
-static void EplDllkCbFrameReceived(tEdrvRxBuffer * pRxBuffer_p);
-
-// called from EdrvInterruptHandler()
-static void EplDllkCbFrameTransmitted(tEdrvTxBuffer * pTxBuffer_p);
-
-// check frame and set missing information
-static tEplKernel EplDllkCheckFrame(tEplFrame * pFrame_p,
-				    unsigned int uiFrameSize_p);
-
-// called by high resolution timer module to monitor EPL cycle as CN
-#if EPL_TIMER_USE_HIGHRES != FALSE
-static tEplKernel EplDllkCbCnTimer(tEplTimerEventArg *pEventArg_p);
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-// MN: returns internal node info structure
-static tEplDllkNodeInfo *EplDllkGetNodeInfo(unsigned int uiNodeId_p);
-
-// transmit SoA
-static tEplKernel EplDllkMnSendSoa(tEplNmtState NmtState_p,
-				   tEplDllState * pDllStateProposed_p,
-				   BOOL fEnableInvitation_p);
-
-static tEplKernel EplDllkMnSendSoc(void);
-
-static tEplKernel EplDllkMnSendPreq(tEplNmtState NmtState_p,
-				    tEplDllState * pDllStateProposed_p);
-
-static tEplKernel EplDllkAsyncFrameNotReceived(tEplDllReqServiceId
-					       ReqServiceId_p,
-					       unsigned int uiNodeId_p);
-
-static tEplKernel EplDllkCbMnTimerCycle(tEplTimerEventArg *pEventArg_p);
-
-static tEplKernel EplDllkCbMnTimerResponse(tEplTimerEventArg *pEventArg_p);
-
-#endif
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkAddInstance()
-//
-// Description: add and initialize new instance of EPL stack
-//
-// Parameters:  pInitParam_p            = initialisation parameters like MAC address
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkAddInstance(tEplDllkInitParam * pInitParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	tEdrvInitParam EdrvInitParam;
-
-	// reset instance structure
-	EPL_MEMSET(&EplDllkInstance_g, 0, sizeof(EplDllkInstance_g));
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	Ret = EplTimerHighReskInit();
-	if (Ret != kEplSuccessful) {	// error occured while initializing high resolution timer module
-		goto Exit;
-	}
-#endif
-
-	// if dynamic memory allocation available
-	// allocate instance structure
-	// allocate TPDO and RPDO table with default size
-
-	// initialize and link pointers in instance structure to frame tables
-	EplDllkInstance_g.m_pTxBuffer = aEplDllkTxBuffer_l;
-	EplDllkInstance_g.m_uiMaxTxFrames =
-	    ARRAY_SIZE(aEplDllkTxBuffer_l);
-
-	// initialize state
-	EplDllkInstance_g.m_DllState = kEplDllGsInit;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// set up node info structure
-	for (uiIndex = 0; uiIndex < tabentries(EplDllkInstance_g.m_aNodeInfo);
-	     uiIndex++) {
-		EplDllkInstance_g.m_aNodeInfo[uiIndex].m_uiNodeId = uiIndex + 1;
-		EplDllkInstance_g.m_aNodeInfo[uiIndex].m_wPresPayloadLimit =
-		    0xFFFF;
-	}
-#endif
-
-	// initialize Edrv
-	EPL_MEMCPY(EdrvInitParam.m_abMyMacAddr, pInitParam_p->m_be_abSrcMac, 6);
-	EdrvInitParam.m_pfnRxHandler = EplDllkCbFrameReceived;
-	EdrvInitParam.m_pfnTxHandler = EplDllkCbFrameTransmitted;
-	Ret = EdrvInit(&EdrvInitParam);
-	if (Ret != kEplSuccessful) {	// error occured while initializing ethernet driver
-		goto Exit;
-	}
-	// copy local MAC address from Ethernet driver back to local instance structure
-	// because Ethernet driver may have read it from controller EEPROM
-	EPL_MEMCPY(EplDllkInstance_g.m_be_abSrcMac, EdrvInitParam.m_abMyMacAddr,
-		   6);
-	EPL_MEMCPY(pInitParam_p->m_be_abSrcMac, EdrvInitParam.m_abMyMacAddr, 6);
-
-	// initialize TxBuffer array
-	for (uiIndex = 0; uiIndex < EplDllkInstance_g.m_uiMaxTxFrames;
-	     uiIndex++) {
-		EplDllkInstance_g.m_pTxBuffer[uiIndex].m_pbBuffer = NULL;
-	}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-	Ret = VEthAddInstance(pInitParam_p);
-#endif
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkDelInstance()
-//
-// Description: deletes an instance of EPL stack
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkDelInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// reset state
-	EplDllkInstance_g.m_DllState = kEplDllGsInit;
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	Ret = EplTimerHighReskDelInstance();
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-	Ret = VEthDelInstance();
-#endif
-
-	Ret = EdrvShutdown();
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCreateTxFrame
-//
-// Description: creates the buffer for a Tx frame and registers it to the
-//              ethernet driver
-//
-// Parameters:  puiHandle_p             = OUT: handle to frame buffer
-//              ppFrame_p               = OUT: pointer to pointer of EPL frame
-//              puiFrameSize_p          = IN/OUT: pointer to size of frame
-//                                        returned size is always equal or larger than
-//                                        requested size, if that is not possible
-//                                        an error will be returned
-//              MsgType_p               = EPL message type
-//              ServiceId_p             = Service ID in case of ASnd frame, otherwise
-//                                        kEplDllAsndNotDefined
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCreateTxFrame(unsigned int *puiHandle_p,
-				tEplFrame ** ppFrame_p,
-				unsigned int *puiFrameSize_p,
-				tEplMsgType MsgType_p,
-				tEplDllAsndServiceId ServiceId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplFrame *pTxFrame;
-	unsigned int uiHandle = EplDllkInstance_g.m_uiMaxTxFrames;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-
-	if (MsgType_p == kEplMsgTypeAsnd) {
-		// search for fixed Tx buffers
-		if (ServiceId_p == kEplDllAsndIdentResponse) {
-			uiHandle = EPL_DLLK_TXFRAME_IDENTRES;
-		} else if (ServiceId_p == kEplDllAsndStatusResponse) {
-			uiHandle = EPL_DLLK_TXFRAME_STATUSRES;
-		} else if ((ServiceId_p == kEplDllAsndNmtRequest)
-			   || (ServiceId_p == kEplDllAsndNmtCommand)) {
-			uiHandle = EPL_DLLK_TXFRAME_NMTREQ;
-		}
-
-		if (uiHandle >= EplDllkInstance_g.m_uiMaxTxFrames) {	// look for free entry
-			uiHandle = EPL_DLLK_TXFRAME_PREQ;
-			pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[uiHandle];
-			for (; uiHandle < EplDllkInstance_g.m_uiMaxTxFrames;
-			     uiHandle++, pTxBuffer++) {
-				if (pTxBuffer->m_pbBuffer == NULL) {	// free entry found
-					break;
-				}
-			}
-		}
-	} else if (MsgType_p == kEplMsgTypeNonEpl) {
-		uiHandle = EPL_DLLK_TXFRAME_NONEPL;
-	} else if (MsgType_p == kEplMsgTypePres) {
-		uiHandle = EPL_DLLK_TXFRAME_PRES;
-	} else if (MsgType_p == kEplMsgTypeSoc) {
-		uiHandle = EPL_DLLK_TXFRAME_SOC;
-	} else if (MsgType_p == kEplMsgTypeSoa) {
-		uiHandle = EPL_DLLK_TXFRAME_SOA;
-	} else {		// look for free entry
-		uiHandle = EPL_DLLK_TXFRAME_PREQ;
-		pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[uiHandle];
-		for (; uiHandle < EplDllkInstance_g.m_uiMaxTxFrames;
-		     uiHandle++, pTxBuffer++) {
-			if (pTxBuffer->m_pbBuffer == NULL) {	// free entry found
-				break;
-			}
-		}
-		if (pTxBuffer->m_pbBuffer != NULL) {
-			Ret = kEplEdrvNoFreeBufEntry;
-			goto Exit;
-		}
-	}
-
-	// test if requested entry is free
-	pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[uiHandle];
-	if (pTxBuffer->m_pbBuffer != NULL) {	// entry is not free
-		Ret = kEplEdrvNoFreeBufEntry;
-		goto Exit;
-	}
-	// setup Tx buffer
-	pTxBuffer->m_EplMsgType = MsgType_p;
-	pTxBuffer->m_uiMaxBufferLen = *puiFrameSize_p;
-
-	Ret = EdrvAllocTxMsgBuffer(pTxBuffer);
-	if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-		goto Exit;
-	}
-	// because buffer size may be larger than requested
-	// memorize real length of frame
-	pTxBuffer->m_uiTxMsgLen = *puiFrameSize_p;
-
-	// fill whole frame with 0
-	EPL_MEMSET(pTxBuffer->m_pbBuffer, 0, pTxBuffer->m_uiMaxBufferLen);
-
-	pTxFrame = (tEplFrame *) pTxBuffer->m_pbBuffer;
-
-	if (MsgType_p != kEplMsgTypeNonEpl) {	// fill out Frame only if it is an EPL frame
-		// ethertype
-		AmiSetWordToBe(&pTxFrame->m_be_wEtherType,
-			       EPL_C_DLL_ETHERTYPE_EPL);
-		// source node ID
-		AmiSetByteToLe(&pTxFrame->m_le_bSrcNodeId,
-			       (u8) EplDllkInstance_g.m_DllConfigParam.
-			       m_uiNodeId);
-		// source MAC address
-		EPL_MEMCPY(&pTxFrame->m_be_abSrcMac[0],
-			   &EplDllkInstance_g.m_be_abSrcMac[0], 6);
-		switch (MsgType_p) {
-		case kEplMsgTypeAsnd:
-			// destination MAC address
-			AmiSetQword48ToBe(&pTxFrame->m_be_abDstMac[0],
-					  EPL_C_DLL_MULTICAST_ASND);
-			// destination node ID
-			switch (ServiceId_p) {
-			case kEplDllAsndIdentResponse:
-			case kEplDllAsndStatusResponse:
-				{	// IdentResponses and StatusResponses are Broadcast
-					AmiSetByteToLe(&pTxFrame->
-						       m_le_bDstNodeId,
-						       (u8)
-						       EPL_C_ADR_BROADCAST);
-					break;
-				}
-
-			default:
-				break;
-			}
-			// ASnd Service ID
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.m_le_bServiceId,
-				       ServiceId_p);
-			break;
-
-		case kEplMsgTypeSoc:
-			// destination MAC address
-			AmiSetQword48ToBe(&pTxFrame->m_be_abDstMac[0],
-					  EPL_C_DLL_MULTICAST_SOC);
-			// destination node ID
-			AmiSetByteToLe(&pTxFrame->m_le_bDstNodeId,
-				       (u8) EPL_C_ADR_BROADCAST);
-			// reset Flags
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Soc.m_le_bFlag1, (u8) 0);
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Soc.m_le_bFlag2, (u8) 0);
-			break;
-
-		case kEplMsgTypeSoa:
-			// destination MAC address
-			AmiSetQword48ToBe(&pTxFrame->m_be_abDstMac[0],
-					  EPL_C_DLL_MULTICAST_SOA);
-			// destination node ID
-			AmiSetByteToLe(&pTxFrame->m_le_bDstNodeId,
-				       (u8) EPL_C_ADR_BROADCAST);
-			// reset Flags
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.m_le_bFlag1, (u8) 0);
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.m_le_bFlag2, (u8) 0);
-			// EPL profile version
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.m_le_bEplVersion,
-				       (u8) EPL_SPEC_VERSION);
-			break;
-
-		case kEplMsgTypePres:
-			// destination MAC address
-			AmiSetQword48ToBe(&pTxFrame->m_be_abDstMac[0],
-					  EPL_C_DLL_MULTICAST_PRES);
-			// destination node ID
-			AmiSetByteToLe(&pTxFrame->m_le_bDstNodeId,
-				       (u8) EPL_C_ADR_BROADCAST);
-			// reset Flags
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.m_le_bFlag1, (u8) 0);
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.m_le_bFlag2, (u8) 0);
-			// PDO size
-			//AmiSetWordToLe(&pTxFrame->m_Data.m_Pres.m_le_wSize, 0);
-			break;
-
-		case kEplMsgTypePreq:
-			// reset Flags
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Preq.m_le_bFlag1, (u8) 0);
-			//AmiSetByteToLe(&pTxFrame->m_Data.m_Preq.m_le_bFlag2, (u8) 0);
-			// PDO size
-			//AmiSetWordToLe(&pTxFrame->m_Data.m_Preq.m_le_wSize, 0);
-			break;
-
-		default:
-			break;
-		}
-		// EPL message type
-		AmiSetByteToLe(&pTxFrame->m_le_bMessageType, (u8) MsgType_p);
-	}
-
-	*ppFrame_p = pTxFrame;
-	*puiFrameSize_p = pTxBuffer->m_uiMaxBufferLen;
-	*puiHandle_p = uiHandle;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkDeleteTxFrame
-//
-// Description: deletes the buffer for a Tx frame and frees it in the
-//              ethernet driver
-//
-// Parameters:  uiHandle_p              = IN: handle to frame buffer
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkDeleteTxFrame(unsigned int uiHandle_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-
-	if (uiHandle_p >= EplDllkInstance_g.m_uiMaxTxFrames) {	// handle is not valid
-		Ret = kEplDllIllegalHdl;
-		goto Exit;
-	}
-
-	pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[uiHandle_p];
-
-	// mark buffer as free so that frame will not be send in future anymore
-	// $$$ d.k. What's up with running transmissions?
-	pTxBuffer->m_uiTxMsgLen = EPL_DLLK_BUFLEN_EMPTY;
-	pTxBuffer->m_pbBuffer = NULL;
-
-	// delete Tx buffer
-	Ret = EdrvReleaseTxMsgBuffer(pTxBuffer);
-	if (Ret != kEplSuccessful) {	// error occured while releasing Tx frame
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkProcess
-//
-// Description: process the passed event
-//
-// Parameters:  pEvent_p                = event to be processed
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkProcess(tEplEvent * pEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplFrame *pTxFrame;
-	tEdrvTxBuffer *pTxBuffer;
-	unsigned int uiHandle;
-	unsigned int uiFrameSize;
-	u8 abMulticastMac[6];
-	tEplDllAsyncReqPriority AsyncReqPriority;
-	unsigned int uiFrameCount;
-	tEplNmtState NmtState;
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-	tEplFrameInfo FrameInfo;
-#endif
-
-	switch (pEvent_p->m_EventType) {
-	case kEplEventTypeDllkCreate:
-		{
-			// $$$ reset ethernet driver
-
-			NmtState = *((tEplNmtState *) pEvent_p->m_pArg);
-
-			// initialize flags for PRes and StatusRes
-			EplDllkInstance_g.m_bFlag1 = EPL_FRAME_FLAG1_EC;
-			EplDllkInstance_g.m_bMnFlag1 = 0;
-			EplDllkInstance_g.m_bFlag2 = 0;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			// initialize linked node list
-			EplDllkInstance_g.m_pFirstNodeInfo = NULL;
-#endif
-
-			// register TxFrames in Edrv
-
-			// IdentResponse
-			uiFrameSize = EPL_C_DLL_MINSIZE_IDENTRES;
-			Ret =
-			    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-						 &uiFrameSize, kEplMsgTypeAsnd,
-						 kEplDllAsndIdentResponse);
-			if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-				goto Exit;
-			}
-			// EPL profile version
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				       m_IdentResponse.m_le_bEplProfileVersion,
-				       (u8) EPL_SPEC_VERSION);
-			// FeatureFlags
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwFeatureFlags,
-					EplDllkInstance_g.m_DllConfigParam.
-					m_dwFeatureFlags);
-			// MTU
-			AmiSetWordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				       m_IdentResponse.m_le_wMtu,
-				       (u16) EplDllkInstance_g.
-				       m_DllConfigParam.m_uiAsyncMtu);
-			// PollInSize
-			AmiSetWordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				       m_IdentResponse.m_le_wPollInSize,
-				       (u16) EplDllkInstance_g.
-				       m_DllConfigParam.
-				       m_uiPreqActPayloadLimit);
-			// PollOutSize
-			AmiSetWordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				       m_IdentResponse.m_le_wPollOutSize,
-				       (u16) EplDllkInstance_g.
-				       m_DllConfigParam.
-				       m_uiPresActPayloadLimit);
-			// ResponseTime / PresMaxLatency
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwResponseTime,
-					EplDllkInstance_g.m_DllConfigParam.
-					m_dwPresMaxLatency);
-			// DeviceType
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwDeviceType,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwDeviceType);
-			// VendorId
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwVendorId,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwVendorId);
-			// ProductCode
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwProductCode,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwProductCode);
-			// RevisionNumber
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwRevisionNumber,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwRevisionNumber);
-			// SerialNumber
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwSerialNumber,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwSerialNumber);
-			// VendorSpecificExt1
-			AmiSetQword64ToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					  m_IdentResponse.
-					  m_le_qwVendorSpecificExt1,
-					  EplDllkInstance_g.m_DllIdentParam.
-					  m_qwVendorSpecificExt1);
-			// VerifyConfigurationDate
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.
-					m_le_dwVerifyConfigurationDate,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwVerifyConfigurationDate);
-			// VerifyConfigurationTime
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.
-					m_le_dwVerifyConfigurationTime,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwVerifyConfigurationTime);
-			// ApplicationSwDate
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.
-					m_le_dwApplicationSwDate,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwApplicationSwDate);
-			// ApplicationSwTime
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.
-					m_le_dwApplicationSwTime,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwApplicationSwTime);
-			// IPAddress
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwIpAddress,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwIpAddress);
-			// SubnetMask
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwSubnetMask,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwSubnetMask);
-			// DefaultGateway
-			AmiSetDwordToLe(&pTxFrame->m_Data.m_Asnd.m_Payload.
-					m_IdentResponse.m_le_dwDefaultGateway,
-					EplDllkInstance_g.m_DllIdentParam.
-					m_dwDefaultGateway);
-			// HostName
-			EPL_MEMCPY(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				   m_IdentResponse.m_le_sHostname[0],
-				   &EplDllkInstance_g.m_DllIdentParam.
-				   m_sHostname[0],
-				   sizeof(EplDllkInstance_g.m_DllIdentParam.
-					  m_sHostname));
-			// VendorSpecificExt2
-			EPL_MEMCPY(&pTxFrame->m_Data.m_Asnd.m_Payload.
-				   m_IdentResponse.m_le_abVendorSpecificExt2[0],
-				   &EplDllkInstance_g.m_DllIdentParam.
-				   m_abVendorSpecificExt2[0],
-				   sizeof(EplDllkInstance_g.m_DllIdentParam.
-					  m_abVendorSpecificExt2));
-
-			// StatusResponse
-			uiFrameSize = EPL_C_DLL_MINSIZE_STATUSRES;
-			Ret =
-			    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-						 &uiFrameSize, kEplMsgTypeAsnd,
-						 kEplDllAsndStatusResponse);
-			if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-				goto Exit;
-			}
-			// PRes $$$ maybe move this to PDO module
-			if ((EplDllkInstance_g.m_DllConfigParam.m_fAsyncOnly ==
-			     FALSE)
-			    && (EplDllkInstance_g.m_DllConfigParam.m_uiPresActPayloadLimit >= 36)) {	// it is not configured as async-only CN,
-				// so take part in isochronous phase and register PRes frame
-				uiFrameSize =
-				    EplDllkInstance_g.m_DllConfigParam.
-				    m_uiPresActPayloadLimit + 24;
-				Ret =
-				    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-							 &uiFrameSize,
-							 kEplMsgTypePres,
-							 kEplDllAsndNotDefined);
-				if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-					goto Exit;
-				}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-				// initially encode TPDO -> inform PDO module
-				FrameInfo.m_pFrame = pTxFrame;
-				FrameInfo.m_uiFrameSize = uiFrameSize;
-				Ret = EplPdokCbPdoTransmitted(&FrameInfo);
-#endif
-				// reset cycle counter
-				EplDllkInstance_g.m_uiCycleCount = 0;
-			} else {	// it is an async-only CN
-				// fool EplDllkChangeState() to think that PRes was not expected
-				EplDllkInstance_g.m_uiCycleCount = 1;
-			}
-
-			// NMT request
-			uiFrameSize = EPL_C_IP_MAX_MTU;
-			Ret =
-			    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-						 &uiFrameSize, kEplMsgTypeAsnd,
-						 kEplDllAsndNmtRequest);
-			if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-				goto Exit;
-			}
-			// mark Tx buffer as empty
-			EplDllkInstance_g.m_pTxBuffer[uiHandle].m_uiTxMsgLen =
-			    EPL_DLLK_BUFLEN_EMPTY;
-
-			// non-EPL frame
-			uiFrameSize = EPL_C_IP_MAX_MTU;
-			Ret =
-			    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-						 &uiFrameSize,
-						 kEplMsgTypeNonEpl,
-						 kEplDllAsndNotDefined);
-			if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-				goto Exit;
-			}
-			// mark Tx buffer as empty
-			EplDllkInstance_g.m_pTxBuffer[uiHandle].m_uiTxMsgLen =
-			    EPL_DLLK_BUFLEN_EMPTY;
-
-			// register multicast MACs in ethernet driver
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_SOC);
-			Ret = EdrvDefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_SOA);
-			Ret = EdrvDefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_PRES);
-			Ret = EdrvDefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_ASND);
-			Ret = EdrvDefineRxMacAddrEntry(abMulticastMac);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			if (NmtState >= kEplNmtMsNotActive) {	// local node is MN
-				unsigned int uiIndex;
-
-				// SoC
-				uiFrameSize = EPL_C_DLL_MINSIZE_SOC;
-				Ret =
-				    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-							 &uiFrameSize,
-							 kEplMsgTypeSoc,
-							 kEplDllAsndNotDefined);
-				if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-					goto Exit;
-				}
-				// SoA
-				uiFrameSize = EPL_C_DLL_MINSIZE_SOA;
-				Ret =
-				    EplDllkCreateTxFrame(&uiHandle, &pTxFrame,
-							 &uiFrameSize,
-							 kEplMsgTypeSoa,
-							 kEplDllAsndNotDefined);
-				if (Ret != kEplSuccessful) {	// error occured while registering Tx frame
-					goto Exit;
-				}
-
-				for (uiIndex = 0;
-				     uiIndex <
-				     tabentries(EplDllkInstance_g.m_aNodeInfo);
-				     uiIndex++) {
-//                    EplDllkInstance_g.m_aNodeInfo[uiIndex].m_uiNodeId = uiIndex + 1;
-					EplDllkInstance_g.m_aNodeInfo[uiIndex].
-					    m_wPresPayloadLimit =
-					    (u16) EplDllkInstance_g.
-					    m_DllConfigParam.
-					    m_uiIsochrRxMaxPayload;
-				}
-
-				// calculate cycle length
-				EplDllkInstance_g.m_ullFrameTimeout = 1000LL
-				    *
-				    ((unsigned long long)EplDllkInstance_g.
-				     m_DllConfigParam.m_dwCycleLen);
-			}
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-			Ret = EplDllkCalAsyncClearBuffer();
-
-			break;
-		}
-
-	case kEplEventTypeDllkDestroy:
-		{
-			// destroy all data structures
-
-			NmtState = *((tEplNmtState *) pEvent_p->m_pArg);
-
-			// delete Tx frames
-			Ret = EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_IDENTRES);
-			if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-				goto Exit;
-			}
-
-			Ret = EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_STATUSRES);
-			if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-				goto Exit;
-			}
-
-			Ret = EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_PRES);
-			if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-				goto Exit;
-			}
-
-			Ret = EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_NMTREQ);
-			if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-				goto Exit;
-			}
-
-			Ret = EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_NONEPL);
-			if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-				goto Exit;
-			}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			if (NmtState >= kEplNmtMsNotActive) {	// local node was MN
-				unsigned int uiIndex;
-
-				Ret =
-				    EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_SOC);
-				if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-					goto Exit;
-				}
-
-				Ret =
-				    EplDllkDeleteTxFrame(EPL_DLLK_TXFRAME_SOA);
-				if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-					goto Exit;
-				}
-
-				for (uiIndex = 0;
-				     uiIndex <
-				     tabentries(EplDllkInstance_g.m_aNodeInfo);
-				     uiIndex++) {
-					if (EplDllkInstance_g.
-					    m_aNodeInfo[uiIndex].
-					    m_pPreqTxBuffer != NULL) {
-						uiHandle =
-						    EplDllkInstance_g.
-						    m_aNodeInfo[uiIndex].
-						    m_pPreqTxBuffer -
-						    EplDllkInstance_g.
-						    m_pTxBuffer;
-						EplDllkInstance_g.
-						    m_aNodeInfo[uiIndex].
-						    m_pPreqTxBuffer = NULL;
-						Ret =
-						    EplDllkDeleteTxFrame
-						    (uiHandle);
-						if (Ret != kEplSuccessful) {	// error occured while deregistering Tx frame
-							goto Exit;
-						}
-
-					}
-					EplDllkInstance_g.m_aNodeInfo[uiIndex].
-					    m_wPresPayloadLimit = 0xFFFF;
-				}
-			}
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-			// deregister multicast MACs in ethernet driver
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_SOC);
-			Ret = EdrvUndefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_SOA);
-			Ret = EdrvUndefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_PRES);
-			Ret = EdrvUndefineRxMacAddrEntry(abMulticastMac);
-			AmiSetQword48ToBe(&abMulticastMac[0],
-					  EPL_C_DLL_MULTICAST_ASND);
-			Ret = EdrvUndefineRxMacAddrEntry(abMulticastMac);
-
-			// delete timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-			Ret =
-			    EplTimerHighReskDeleteTimer(&EplDllkInstance_g.
-							m_TimerHdlCycle);
-#endif
-
-			break;
-		}
-
-	case kEplEventTypeDllkFillTx:
-		{
-			// fill TxBuffer of specified priority with new frame if empty
-
-			pTxFrame = NULL;
-			AsyncReqPriority =
-			    *((tEplDllAsyncReqPriority *) pEvent_p->m_pArg);
-			switch (AsyncReqPriority) {
-			case kEplDllAsyncReqPrioNmt:	// NMT request priority
-				{
-					pTxBuffer =
-					    &EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_NMTREQ];
-					if (pTxBuffer->m_pbBuffer != NULL) {	// NmtRequest does exist
-						// check if frame is empty and not being filled
-						if (pTxBuffer->m_uiTxMsgLen ==
-						    EPL_DLLK_BUFLEN_EMPTY) {
-							// mark Tx buffer as filling is in process
-							pTxBuffer->
-							    m_uiTxMsgLen =
-							    EPL_DLLK_BUFLEN_FILLING;
-							// set max buffer size as input parameter
-							uiFrameSize =
-							    pTxBuffer->
-							    m_uiMaxBufferLen;
-							// copy frame from shared loop buffer to Tx buffer
-							Ret =
-							    EplDllkCalAsyncGetTxFrame
-							    (pTxBuffer->
-							     m_pbBuffer,
-							     &uiFrameSize,
-							     AsyncReqPriority);
-							if (Ret ==
-							    kEplSuccessful) {
-								pTxFrame =
-								    (tEplFrame
-								     *)
-								    pTxBuffer->
-								    m_pbBuffer;
-								Ret =
-								    EplDllkCheckFrame
-								    (pTxFrame,
-								     uiFrameSize);
-
-								// set buffer valid
-								pTxBuffer->
-								    m_uiTxMsgLen
-								    =
-								    uiFrameSize;
-							} else if (Ret == kEplDllAsyncTxBufferEmpty) {	// empty Tx buffer is not a real problem
-								// so just ignore it
-								Ret =
-								    kEplSuccessful;
-								// mark Tx buffer as empty
-								pTxBuffer->
-								    m_uiTxMsgLen
-								    =
-								    EPL_DLLK_BUFLEN_EMPTY;
-							}
-						}
-					}
-					break;
-				}
-
-			default:	// generic priority
-				{
-					pTxBuffer =
-					    &EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_NONEPL];
-					if (pTxBuffer->m_pbBuffer != NULL) {	// non-EPL frame does exist
-						// check if frame is empty and not being filled
-						if (pTxBuffer->m_uiTxMsgLen ==
-						    EPL_DLLK_BUFLEN_EMPTY) {
-							// mark Tx buffer as filling is in process
-							pTxBuffer->
-							    m_uiTxMsgLen =
-							    EPL_DLLK_BUFLEN_FILLING;
-							// set max buffer size as input parameter
-							uiFrameSize =
-							    pTxBuffer->
-							    m_uiMaxBufferLen;
-							// copy frame from shared loop buffer to Tx buffer
-							Ret =
-							    EplDllkCalAsyncGetTxFrame
-							    (pTxBuffer->
-							     m_pbBuffer,
-							     &uiFrameSize,
-							     AsyncReqPriority);
-							if (Ret ==
-							    kEplSuccessful) {
-								pTxFrame =
-								    (tEplFrame
-								     *)
-								    pTxBuffer->
-								    m_pbBuffer;
-								Ret =
-								    EplDllkCheckFrame
-								    (pTxFrame,
-								     uiFrameSize);
-
-								// set buffer valid
-								pTxBuffer->
-								    m_uiTxMsgLen
-								    =
-								    uiFrameSize;
-							} else if (Ret == kEplDllAsyncTxBufferEmpty) {	// empty Tx buffer is not a real problem
-								// so just ignore it
-								Ret =
-								    kEplSuccessful;
-								// mark Tx buffer as empty
-								pTxBuffer->
-								    m_uiTxMsgLen
-								    =
-								    EPL_DLLK_BUFLEN_EMPTY;
-							}
-						}
-					}
-					break;
-				}
-			}
-
-			NmtState = EplNmtkGetNmtState();
-
-			if ((NmtState == kEplNmtCsBasicEthernet) || (NmtState == kEplNmtMsBasicEthernet)) {	// send frame immediately
-				if (pTxFrame != NULL) {	// frame is present
-					// padding is done by Edrv or ethernet controller
-					Ret = EdrvSendTxMsg(pTxBuffer);
-				} else {	// no frame moved to TxBuffer
-					// check if TxBuffers contain unsent frames
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen > EPL_DLLK_BUFLEN_EMPTY) {	// NMT request Tx buffer contains a frame
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_NMTREQ]);
-					} else if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NONEPL].m_uiTxMsgLen > EPL_DLLK_BUFLEN_EMPTY) {	// non-EPL Tx buffer contains a frame
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_NONEPL]);
-					}
-					if (Ret == kEplInvalidOperation) {	// ignore error if caused by already active transmission
-						Ret = kEplSuccessful;
-					}
-				}
-				// reset PRes flag 2
-				EplDllkInstance_g.m_bFlag2 = 0;
-			} else {
-				// update Flag 2 (PR, RS)
-				Ret =
-				    EplDllkCalAsyncGetTxCount(&AsyncReqPriority,
-							      &uiFrameCount);
-				if (AsyncReqPriority == kEplDllAsyncReqPrioNmt) {	// non-empty FIFO with hightest priority is for NMT requests
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen > EPL_DLLK_BUFLEN_EMPTY) {	// NMT request Tx buffer contains a frame
-						// add one more frame
-						uiFrameCount++;
-					}
-				} else {	// non-empty FIFO with highest priority is for generic frames
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen > EPL_DLLK_BUFLEN_EMPTY) {	// NMT request Tx buffer contains a frame
-						// use NMT request FIFO, because of higher priority
-						uiFrameCount = 1;
-						AsyncReqPriority =
-						    kEplDllAsyncReqPrioNmt;
-					} else if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NONEPL].m_uiTxMsgLen > EPL_DLLK_BUFLEN_EMPTY) {	// non-EPL Tx buffer contains a frame
-						// use NMT request FIFO, because of higher priority
-						// add one more frame
-						uiFrameCount++;
-					}
-				}
-
-				if (uiFrameCount > 7) {	// limit frame request to send counter to 7
-					uiFrameCount = 7;
-				}
-				if (uiFrameCount > 0) {
-					EplDllkInstance_g.m_bFlag2 =
-					    (u8) (((AsyncReqPriority <<
-						      EPL_FRAME_FLAG2_PR_SHIFT)
-						     & EPL_FRAME_FLAG2_PR)
-						    | (uiFrameCount &
-						       EPL_FRAME_FLAG2_RS));
-				} else {
-					EplDllkInstance_g.m_bFlag2 = 0;
-				}
-			}
-
-			break;
-		}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	case kEplEventTypeDllkStartReducedCycle:
-		{
-			// start the reduced cycle by programming the cycle timer
-			// it is issued by NMT MN module, when PreOp1 is entered
-
-			// clear the asynchronous queues
-			Ret = EplDllkCalAsyncClearQueues();
-
-			// reset cycle counter (everytime a SoA is triggerd in PreOp1 the counter is incremented
-			// and when it reaches EPL_C_DLL_PREOP1_START_CYCLES the SoA may contain invitations)
-			EplDllkInstance_g.m_uiCycleCount = 0;
-
-			// remove any CN from isochronous phase
-			while (EplDllkInstance_g.m_pFirstNodeInfo != NULL) {
-				EplDllkDeleteNode(EplDllkInstance_g.
-						  m_pFirstNodeInfo->m_uiNodeId);
-			}
-
-			// change state to NonCyclic,
-			// hence EplDllkChangeState() will not ignore the next call
-			EplDllkInstance_g.m_DllState = kEplDllMsNonCyclic;
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-			if (EplDllkInstance_g.m_DllConfigParam.
-			    m_dwAsyncSlotTimeout != 0) {
-				Ret =
-				    EplTimerHighReskModifyTimerNs
-				    (&EplDllkInstance_g.m_TimerHdlCycle,
-				     EplDllkInstance_g.m_DllConfigParam.
-				     m_dwAsyncSlotTimeout,
-				     EplDllkCbMnTimerCycle, 0L, FALSE);
-			}
-#endif
-
-			break;
-		}
-#endif
-
-#if EPL_DLL_PRES_READY_AFTER_SOA != FALSE
-	case kEplEventTypeDllkPresReady:
-		{
-			// post PRes to transmit FIFO
-
-			NmtState = EplNmtkGetNmtState();
-
-			if (NmtState != kEplNmtCsBasicEthernet) {
-				// Does PRes exist?
-				if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_PRES].m_pbBuffer != NULL) {	// PRes does exist
-					pTxFrame =
-					    (tEplFrame *) EplDllkInstance_g.
-					    m_pTxBuffer[EPL_DLLK_TXFRAME_PRES].
-					    m_pbBuffer;
-					// update frame (NMT state, RD, RS, PR, MS, EN flags)
-					if (NmtState < kEplNmtCsPreOperational2) {	// NMT state is not PreOp2, ReadyToOp or Op
-						// fake NMT state PreOp2, because PRes will be sent only in PreOp2 or greater
-						NmtState =
-						    kEplNmtCsPreOperational2;
-					}
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bNmtStatus,
-						       (u8) NmtState);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bFlag2,
-						       EplDllkInstance_g.
-						       m_bFlag2);
-					if (NmtState != kEplNmtCsOperational) {	// mark PDO as invalid in NMT state Op
-						// $$$ reset only RD flag; set other flags appropriately
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Pres.
-							       m_le_bFlag1, 0);
-					}
-					// $$$ make function that updates Pres, StatusRes
-					// mark PRes frame as ready for transmission
-					Ret =
-					    EdrvTxMsgReady(&EplDllkInstance_g.
-							   m_pTxBuffer
-							   [EPL_DLLK_TXFRAME_PRES]);
-				}
-			}
-
-			break;
-		}
-#endif
-	default:
-		{
-			ASSERTMSG(FALSE,
-				  "EplDllkProcess(): unhandled event type!\n");
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkConfig
-//
-// Description: configure parameters of DLL
-//
-// Parameters:  pDllConfigParam_p       = configuration parameters
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkConfig(tEplDllConfigParam * pDllConfigParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-// d.k. check of NMT state disabled, because CycleLen is programmed at run time by MN without reset of CN
-/*tEplNmtState    NmtState;
-
-    NmtState = EplNmtkGetNmtState();
-
-    if (NmtState > kEplNmtGsResetConfiguration)
-    {   // only allowed in state DLL_GS_INIT
-        Ret = kEplInvalidOperation;
-        goto Exit;
-    }
-*/
-	EPL_MEMCPY(&EplDllkInstance_g.m_DllConfigParam, pDllConfigParam_p,
-		   (pDllConfigParam_p->m_uiSizeOfStruct <
-		    sizeof(tEplDllConfigParam) ? pDllConfigParam_p->
-		    m_uiSizeOfStruct : sizeof(tEplDllConfigParam)));
-
-	if ((EplDllkInstance_g.m_DllConfigParam.m_dwCycleLen != 0)
-	    && (EplDllkInstance_g.m_DllConfigParam.m_dwLossOfFrameTolerance != 0)) {	// monitor EPL cycle, calculate frame timeout
-		EplDllkInstance_g.m_ullFrameTimeout = (1000LL
-						       *
-						       ((unsigned long long)
-							EplDllkInstance_g.
-							m_DllConfigParam.
-							m_dwCycleLen))
-		    +
-		    ((unsigned long long)EplDllkInstance_g.m_DllConfigParam.
-		     m_dwLossOfFrameTolerance);
-	} else {
-		EplDllkInstance_g.m_ullFrameTimeout = 0LL;
-	}
-
-	if (EplDllkInstance_g.m_DllConfigParam.m_fAsyncOnly != FALSE) {	// it is configured as async-only CN
-		// disable multiplexed cycle, that m_uiCycleCount will not be incremented spuriously on SoC
-		EplDllkInstance_g.m_DllConfigParam.m_uiMultiplCycleCnt = 0;
-	}
-//Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkSetIdentity
-//
-// Description: configure identity of local node for IdentResponse
-//
-// Parameters:  pDllIdentParam_p        = identity
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkSetIdentity(tEplDllIdentParam * pDllIdentParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	EPL_MEMCPY(&EplDllkInstance_g.m_DllIdentParam, pDllIdentParam_p,
-		   (pDllIdentParam_p->m_uiSizeOfStruct <
-		    sizeof(tEplDllIdentParam) ? pDllIdentParam_p->
-		    m_uiSizeOfStruct : sizeof(tEplDllIdentParam)));
-
-	// $$$ if IdentResponse frame exists update it
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkRegAsyncHandler
-//
-// Description: registers handler for non-EPL frames
-//
-// Parameters:  pfnDllkCbAsync_p        = pointer to callback function
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkRegAsyncHandler(tEplDllkCbAsync pfnDllkCbAsync_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (EplDllkInstance_g.m_pfnCbAsync == NULL) {	// no handler registered yet
-		EplDllkInstance_g.m_pfnCbAsync = pfnDllkCbAsync_p;
-	} else {		// handler already registered
-		Ret = kEplDllCbAsyncRegistered;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkDeregAsyncHandler
-//
-// Description: deregisters handler for non-EPL frames
-//
-// Parameters:  pfnDllkCbAsync_p        = pointer to callback function
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkDeregAsyncHandler(tEplDllkCbAsync pfnDllkCbAsync_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (EplDllkInstance_g.m_pfnCbAsync == pfnDllkCbAsync_p) {	// same handler is registered
-		// deregister it
-		EplDllkInstance_g.m_pfnCbAsync = NULL;
-	} else {		// wrong handler or no handler registered
-		Ret = kEplDllCbAsyncRegistered;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkSetAsndServiceIdFilter()
-//
-// Description: sets the specified node ID filter for the specified
-//              AsndServiceId. It registers C_DLL_MULTICAST_ASND in ethernet
-//              driver if any AsndServiceId is open.
-//
-// Parameters:  ServiceId_p             = ASnd Service ID
-//              Filter_p                = node ID filter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkSetAsndServiceIdFilter(tEplDllAsndServiceId ServiceId_p,
-					 tEplDllAsndFilter Filter_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (ServiceId_p < tabentries(EplDllkInstance_g.m_aAsndFilter)) {
-		EplDllkInstance_g.m_aAsndFilter[ServiceId_p] = Filter_p;
-	}
-
-	return Ret;
-}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkSetFlag1OfNode()
-//
-// Description: sets Flag1 (for PReq and SoA) of the specified node ID.
-//
-// Parameters:  uiNodeId_p              = node ID
-//              bSoaFlag1_p             = flag1
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkSetFlag1OfNode(unsigned int uiNodeId_p, u8 bSoaFlag1_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllkNodeInfo *pNodeInfo;
-
-	pNodeInfo = EplDllkGetNodeInfo(uiNodeId_p);
-	if (pNodeInfo == NULL) {	// no node info structure available
-		Ret = kEplDllNoNodeInfo;
-		goto Exit;
-	}
-	// store flag1 in internal node info structure
-	pNodeInfo->m_bSoaFlag1 = bSoaFlag1_p;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkGetFirstNodeInfo()
-//
-// Description: returns first info structure of first node in isochronous phase.
-//              It is only useful for ErrorHandlerk module.
-//
-// Parameters:  ppNodeInfo_p            = pointer to pointer of internal node info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkGetFirstNodeInfo(tEplDllkNodeInfo ** ppNodeInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	*ppNodeInfo_p = EplDllkInstance_g.m_pFirstNodeInfo;
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkAddNode()
-//
-// Description: adds the specified node to the isochronous phase.
-//
-// Parameters:  pNodeInfo_p             = pointer of node info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkAddNode(tEplDllNodeInfo * pNodeInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllkNodeInfo *pIntNodeInfo;
-	tEplDllkNodeInfo **ppIntNodeInfo;
-	unsigned int uiHandle;
-	tEplFrame *pFrame;
-	unsigned int uiFrameSize;
-
-	pIntNodeInfo = EplDllkGetNodeInfo(pNodeInfo_p->m_uiNodeId);
-	if (pIntNodeInfo == NULL) {	// no node info structure available
-		Ret = kEplDllNoNodeInfo;
-		goto Exit;
-	}
-
-	EPL_DLLK_DBG_POST_TRACE_VALUE(kEplEventTypeDllkAddNode,
-				      pNodeInfo_p->m_uiNodeId, 0);
-
-	// copy node configuration
-	pIntNodeInfo->m_dwPresTimeout = pNodeInfo_p->m_dwPresTimeout;
-	pIntNodeInfo->m_wPresPayloadLimit = pNodeInfo_p->m_wPresPayloadLimit;
-
-	// $$$ d.k.: actually add node only if MN. On CN it is sufficient to update the node configuration
-	if (pNodeInfo_p->m_uiNodeId == EplDllkInstance_g.m_DllConfigParam.m_uiNodeId) {	// we shall send PRes ourself
-		// insert our node at the end of the list
-		ppIntNodeInfo = &EplDllkInstance_g.m_pFirstNodeInfo;
-		while ((*ppIntNodeInfo != NULL)
-		       && ((*ppIntNodeInfo)->m_pNextNodeInfo != NULL)) {
-			ppIntNodeInfo = &(*ppIntNodeInfo)->m_pNextNodeInfo;
-		}
-		if (*ppIntNodeInfo != NULL) {
-			if ((*ppIntNodeInfo)->m_uiNodeId == pNodeInfo_p->m_uiNodeId) {	// node was already added to list
-				// $$$ d.k. maybe this should be an error
-				goto Exit;
-			} else {	// add our node at the end of the list
-				ppIntNodeInfo =
-				    &(*ppIntNodeInfo)->m_pNextNodeInfo;
-			}
-		}
-		// set "PReq"-TxBuffer to PRes-TxBuffer
-		pIntNodeInfo->m_pPreqTxBuffer =
-		    &EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_PRES];
-	} else {		// normal CN shall be added to isochronous phase
-		// insert node into list in ascending order
-		ppIntNodeInfo = &EplDllkInstance_g.m_pFirstNodeInfo;
-		while ((*ppIntNodeInfo != NULL)
-		       && ((*ppIntNodeInfo)->m_uiNodeId <
-			   pNodeInfo_p->m_uiNodeId)
-		       && ((*ppIntNodeInfo)->m_uiNodeId !=
-			   EplDllkInstance_g.m_DllConfigParam.m_uiNodeId)) {
-			ppIntNodeInfo = &(*ppIntNodeInfo)->m_pNextNodeInfo;
-		}
-		if ((*ppIntNodeInfo != NULL) && ((*ppIntNodeInfo)->m_uiNodeId == pNodeInfo_p->m_uiNodeId)) {	// node was already added to list
-			// $$$ d.k. maybe this should be an error
-			goto Exit;
-		}
-	}
-
-	// initialize elements of internal node info structure
-	pIntNodeInfo->m_bSoaFlag1 = 0;
-	pIntNodeInfo->m_fSoftDelete = FALSE;
-	pIntNodeInfo->m_NmtState = kEplNmtCsNotActive;
-	if (pIntNodeInfo->m_pPreqTxBuffer == NULL) {	// create TxBuffer entry
-		uiFrameSize = pNodeInfo_p->m_wPreqPayloadLimit + 24;
-		Ret =
-		    EplDllkCreateTxFrame(&uiHandle, &pFrame, &uiFrameSize,
-					 kEplMsgTypePreq,
-					 kEplDllAsndNotDefined);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		pIntNodeInfo->m_pPreqTxBuffer =
-		    &EplDllkInstance_g.m_pTxBuffer[uiHandle];
-		AmiSetByteToLe(&pFrame->m_le_bDstNodeId,
-			       (u8) pNodeInfo_p->m_uiNodeId);
-
-		// set up destination MAC address
-		EPL_MEMCPY(pFrame->m_be_abDstMac, pIntNodeInfo->m_be_abMacAddr,
-			   6);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-		{
-			tEplFrameInfo FrameInfo;
-
-			// initially encode TPDO -> inform PDO module
-			FrameInfo.m_pFrame = pFrame;
-			FrameInfo.m_uiFrameSize = uiFrameSize;
-			Ret = EplPdokCbPdoTransmitted(&FrameInfo);
-		}
-#endif
-	}
-	pIntNodeInfo->m_ulDllErrorEvents = 0L;
-	// add node to list
-	pIntNodeInfo->m_pNextNodeInfo = *ppIntNodeInfo;
-	*ppIntNodeInfo = pIntNodeInfo;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkDeleteNode()
-//
-// Description: removes the specified node from the isochronous phase.
-//
-// Parameters:  uiNodeId_p              = node ID
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkDeleteNode(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllkNodeInfo *pIntNodeInfo;
-	tEplDllkNodeInfo **ppIntNodeInfo;
-	unsigned int uiHandle;
-
-	pIntNodeInfo = EplDllkGetNodeInfo(uiNodeId_p);
-	if (pIntNodeInfo == NULL) {	// no node info structure available
-		Ret = kEplDllNoNodeInfo;
-		goto Exit;
-	}
-
-	EPL_DLLK_DBG_POST_TRACE_VALUE(kEplEventTypeDllkDelNode, uiNodeId_p, 0);
-
-	// search node in whole list
-	ppIntNodeInfo = &EplDllkInstance_g.m_pFirstNodeInfo;
-	while ((*ppIntNodeInfo != NULL)
-	       && ((*ppIntNodeInfo)->m_uiNodeId != uiNodeId_p)) {
-		ppIntNodeInfo = &(*ppIntNodeInfo)->m_pNextNodeInfo;
-	}
-	if ((*ppIntNodeInfo == NULL) || ((*ppIntNodeInfo)->m_uiNodeId != uiNodeId_p)) {	// node was not found in list
-		// $$$ d.k. maybe this should be an error
-		goto Exit;
-	}
-	// remove node from list
-	*ppIntNodeInfo = pIntNodeInfo->m_pNextNodeInfo;
-
-	if ((pIntNodeInfo->m_pPreqTxBuffer != NULL)
-	    && (pIntNodeInfo->m_pPreqTxBuffer != &EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_PRES])) {	// delete TxBuffer entry
-		uiHandle =
-		    pIntNodeInfo->m_pPreqTxBuffer -
-		    EplDllkInstance_g.m_pTxBuffer;
-		pIntNodeInfo->m_pPreqTxBuffer = NULL;
-		Ret = EplDllkDeleteTxFrame(uiHandle);
-/*        if (Ret != kEplSuccessful)
-        {
-            goto Exit;
-        }*/
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkSoftDeleteNode()
-//
-// Description: removes the specified node not immediately from the isochronous phase.
-//              Instead the will be removed after error (late/loss PRes) without
-//              charging the error.
-//
-// Parameters:  uiNodeId_p              = node ID
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkSoftDeleteNode(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllkNodeInfo *pIntNodeInfo;
-
-	pIntNodeInfo = EplDllkGetNodeInfo(uiNodeId_p);
-	if (pIntNodeInfo == NULL) {	// no node info structure available
-		Ret = kEplDllNoNodeInfo;
-		goto Exit;
-	}
-
-	EPL_DLLK_DBG_POST_TRACE_VALUE(kEplEventTypeDllkSoftDelNode,
-				      uiNodeId_p, 0);
-
-	pIntNodeInfo->m_fSoftDelete = TRUE;
-
-      Exit:
-	return Ret;
-}
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkChangeState
-//
-// Description: change DLL state on event and diagnose some communication errors
-//
-// Parameters:  NmtEvent_p              = DLL event (wrapped in NMT event)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkChangeState(tEplNmtEvent NmtEvent_p,
-				     tEplNmtState NmtState_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-	tEplErrorHandlerkEvent DllEvent;
-
-	DllEvent.m_ulDllErrorEvents = 0;
-	DllEvent.m_uiNodeId = 0;
-	DllEvent.m_NmtState = NmtState_p;
-
-	switch (NmtState_p) {
-	case kEplNmtGsOff:
-	case kEplNmtGsInitialising:
-	case kEplNmtGsResetApplication:
-	case kEplNmtGsResetCommunication:
-	case kEplNmtGsResetConfiguration:
-	case kEplNmtCsBasicEthernet:
-		// enter DLL_GS_INIT
-		EplDllkInstance_g.m_DllState = kEplDllGsInit;
-		break;
-
-	case kEplNmtCsNotActive:
-	case kEplNmtCsPreOperational1:
-		// reduced EPL cycle is active
-		if (NmtEvent_p == kEplNmtEventDllCeSoc) {	// SoC received
-			// enter DLL_CS_WAIT_PREQ
-			EplDllkInstance_g.m_DllState = kEplDllCsWaitPreq;
-		} else {
-			// enter DLL_GS_INIT
-			EplDllkInstance_g.m_DllState = kEplDllGsInit;
-		}
-		break;
-
-	case kEplNmtCsPreOperational2:
-	case kEplNmtCsReadyToOperate:
-	case kEplNmtCsOperational:
-		// full EPL cycle is active
-
-		switch (EplDllkInstance_g.m_DllState) {
-		case kEplDllCsWaitPreq:
-			switch (NmtEvent_p) {
-				// DLL_CT2
-			case kEplNmtEventDllCePreq:
-				// enter DLL_CS_WAIT_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_RECVD_PREQ;
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoa;
-				break;
-
-				// DLL_CT8
-			case kEplNmtEventDllCeFrameTimeout:
-				if (NmtState_p == kEplNmtCsPreOperational2) {	// ignore frame timeout in PreOp2,
-					// because the previously configured cycle len
-					// may be wrong.
-					// 2008/10/15 d.k. If it would not be ignored,
-					// we would go cyclically to PreOp1 and on next
-					// SoC back to PreOp2.
-					break;
-				}
-				// report DLL_CEV_LOSS_SOC and DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA |
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-				// enter DLL_CS_WAIT_SOC
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoc;
-				break;
-
-			case kEplNmtEventDllCeSoa:
-				// check if multiplexed and PReq should have been received in this cycle
-				// and if >= NMT_CS_READY_TO_OPERATE
-				if ((EplDllkInstance_g.m_uiCycleCount == 0)
-				    && (NmtState_p >= kEplNmtCsReadyToOperate)) {	// report DLL_CEV_LOSS_OF_PREQ
-					DllEvent.m_ulDllErrorEvents |=
-					    EPL_DLL_ERR_CN_LOSS_PREQ;
-				}
-				// enter DLL_CS_WAIT_SOC
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoc;
-				break;
-
-				// DLL_CT7
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeAsnd:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-
-			case kEplNmtEventDllCePres:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllCsWaitSoc:
-			switch (NmtEvent_p) {
-				// DLL_CT1
-			case kEplNmtEventDllCeSoc:
-				// start of cycle and isochronous phase
-				// enter DLL_CS_WAIT_PREQ
-				EplDllkInstance_g.m_DllState =
-				    kEplDllCsWaitPreq;
-				break;
-
-				// DLL_CT4
-//                        case kEplNmtEventDllCePres:
-			case kEplNmtEventDllCeFrameTimeout:
-				if (NmtState_p == kEplNmtCsPreOperational2) {	// ignore frame timeout in PreOp2,
-					// because the previously configured cycle len
-					// may be wrong.
-					// 2008/10/15 d.k. If it would not be ignored,
-					// we would go cyclically to PreOp1 and on next
-					// SoC back to PreOp2.
-					break;
-				}
-				// fall through
-
-			case kEplNmtEventDllCePreq:
-			case kEplNmtEventDllCeSoa:
-				// report DLL_CEV_LOSS_SOC
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-			case kEplNmtEventDllCeAsnd:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllCsWaitSoa:
-			switch (NmtEvent_p) {
-			case kEplNmtEventDllCeFrameTimeout:
-				// DLL_CT3
-				if (NmtState_p == kEplNmtCsPreOperational2) {	// ignore frame timeout in PreOp2,
-					// because the previously configured cycle len
-					// may be wrong.
-					// 2008/10/15 d.k. If it would not be ignored,
-					// we would go cyclically to PreOp1 and on next
-					// SoC back to PreOp2.
-					break;
-				}
-				// fall through
-
-			case kEplNmtEventDllCePreq:
-				// report DLL_CEV_LOSS_SOC and DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA |
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-			case kEplNmtEventDllCeSoa:
-				// enter DLL_CS_WAIT_SOC
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoc;
-				break;
-
-				// DLL_CT9
-			case kEplNmtEventDllCeSoc:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-
-				// enter DLL_CS_WAIT_PREQ
-				EplDllkInstance_g.m_DllState =
-				    kEplDllCsWaitPreq;
-				break;
-
-				// DLL_CT10
-			case kEplNmtEventDllCeAsnd:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-
-			case kEplNmtEventDllCePres:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllGsInit:
-			// enter DLL_CS_WAIT_PREQ
-			EplDllkInstance_g.m_DllState = kEplDllCsWaitPreq;
-			break;
-
-		default:
-			break;
-		}
-		break;
-
-	case kEplNmtCsStopped:
-		// full EPL cycle is active, but without PReq/PRes
-
-		switch (EplDllkInstance_g.m_DllState) {
-		case kEplDllCsWaitPreq:
-			switch (NmtEvent_p) {
-				// DLL_CT2
-			case kEplNmtEventDllCePreq:
-				// enter DLL_CS_WAIT_SOA
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoa;
-				break;
-
-				// DLL_CT8
-			case kEplNmtEventDllCeFrameTimeout:
-				// report DLL_CEV_LOSS_SOC and DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA |
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-			case kEplNmtEventDllCeSoa:
-				// NMT_CS_STOPPED active
-				// it is Ok if no PReq was received
-
-				// enter DLL_CS_WAIT_SOC
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoc;
-				break;
-
-				// DLL_CT7
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeAsnd:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-
-			case kEplNmtEventDllCePres:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllCsWaitSoc:
-			switch (NmtEvent_p) {
-				// DLL_CT1
-			case kEplNmtEventDllCeSoc:
-				// start of cycle and isochronous phase
-				// enter DLL_CS_WAIT_SOA
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoa;
-				break;
-
-				// DLL_CT4
-//                        case kEplNmtEventDllCePres:
-			case kEplNmtEventDllCePreq:
-			case kEplNmtEventDllCeSoa:
-			case kEplNmtEventDllCeFrameTimeout:
-				// report DLL_CEV_LOSS_SOC
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-			case kEplNmtEventDllCeAsnd:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllCsWaitSoa:
-			switch (NmtEvent_p) {
-				// DLL_CT3
-			case kEplNmtEventDllCeFrameTimeout:
-				// report DLL_CEV_LOSS_SOC and DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA |
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-
-			case kEplNmtEventDllCeSoa:
-				// enter DLL_CS_WAIT_SOC
-				EplDllkInstance_g.m_DllState = kEplDllCsWaitSoc;
-				break;
-
-				// DLL_CT9
-			case kEplNmtEventDllCeSoc:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-				// remain in DLL_CS_WAIT_SOA
-				break;
-
-				// DLL_CT10
-			case kEplNmtEventDllCeAsnd:
-				// report DLL_CEV_LOSS_SOA
-				DllEvent.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOA;
-
-			case kEplNmtEventDllCePreq:
-				// NMT_CS_STOPPED active and we do not expect any PReq
-				// so just ignore it
-			case kEplNmtEventDllCePres:
-			default:
-				// remain in this state
-				break;
-			}
-			break;
-
-		case kEplDllGsInit:
-		default:
-			// enter DLL_CS_WAIT_PREQ
-			EplDllkInstance_g.m_DllState = kEplDllCsWaitSoa;
-			break;
-		}
-		break;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	case kEplNmtMsNotActive:
-	case kEplNmtMsBasicEthernet:
-		break;
-
-	case kEplNmtMsPreOperational1:
-		// reduced EPL cycle is active
-		if (EplDllkInstance_g.m_DllState != kEplDllMsNonCyclic) {	// stop cycle timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-			Ret =
-			    EplTimerHighReskDeleteTimer(&EplDllkInstance_g.
-							m_TimerHdlCycle);
-#endif
-			EplDllkInstance_g.m_DllState = kEplDllMsNonCyclic;
-
-			// stop further processing,
-			// because it will be restarted by NMT MN module
-			break;
-		}
-
-		switch (NmtEvent_p) {
-		case kEplNmtEventDllMeSocTrig:
-		case kEplNmtEventDllCeAsnd:
-			{	// because of reduced EPL cycle SoA shall be triggered, not SoC
-				tEplDllState DummyDllState;
-
-				Ret =
-				    EplDllkAsyncFrameNotReceived
-				    (EplDllkInstance_g.m_LastReqServiceId,
-				     EplDllkInstance_g.m_uiLastTargetNodeId);
-
-				// go ahead and send SoA
-				Ret = EplDllkMnSendSoa(NmtState_p,
-						       &DummyDllState,
-						       (EplDllkInstance_g.
-							m_uiCycleCount >=
-							EPL_C_DLL_PREOP1_START_CYCLES));
-				// increment cycle counter to detect if EPL_C_DLL_PREOP1_START_CYCLES empty cycles are elapsed
-				EplDllkInstance_g.m_uiCycleCount++;
-
-				// reprogram timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-				if (EplDllkInstance_g.m_DllConfigParam.
-				    m_dwAsyncSlotTimeout != 0) {
-					Ret =
-					    EplTimerHighReskModifyTimerNs
-					    (&EplDllkInstance_g.m_TimerHdlCycle,
-					     EplDllkInstance_g.m_DllConfigParam.
-					     m_dwAsyncSlotTimeout,
-					     EplDllkCbMnTimerCycle, 0L, FALSE);
-				}
-#endif
-				break;
-			}
-
-		default:
-			break;
-		}
-		break;
-
-	case kEplNmtMsPreOperational2:
-	case kEplNmtMsReadyToOperate:
-	case kEplNmtMsOperational:
-		// full EPL cycle is active
-		switch (NmtEvent_p) {
-		case kEplNmtEventDllMeSocTrig:
-			{
-				// update cycle counter
-				if (EplDllkInstance_g.m_DllConfigParam.m_uiMultiplCycleCnt > 0) {	// multiplexed cycle active
-					EplDllkInstance_g.m_uiCycleCount =
-					    (EplDllkInstance_g.m_uiCycleCount +
-					     1) %
-					    EplDllkInstance_g.m_DllConfigParam.
-					    m_uiMultiplCycleCnt;
-					// $$$ check multiplexed cycle restart
-					//     -> toggle MC flag
-					//     -> change node linked list
-				} else {	// non-multiplexed cycle active
-					// start with first node in isochronous phase
-					EplDllkInstance_g.m_pCurNodeInfo = NULL;
-				}
-
-				switch (EplDllkInstance_g.m_DllState) {
-				case kEplDllMsNonCyclic:
-					{	// start continuous cycle timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-						Ret =
-						    EplTimerHighReskModifyTimerNs
-						    (&EplDllkInstance_g.
-						     m_TimerHdlCycle,
-						     EplDllkInstance_g.
-						     m_ullFrameTimeout,
-						     EplDllkCbMnTimerCycle, 0L,
-						     TRUE);
-#endif
-						// continue with sending SoC
-					}
-
-				case kEplDllMsWaitAsnd:
-				case kEplDllMsWaitSocTrig:
-					{	// if m_LastReqServiceId is still valid,
-						// SoA was not correctly answered
-						// and user part has to be informed
-						Ret =
-						    EplDllkAsyncFrameNotReceived
-						    (EplDllkInstance_g.
-						     m_LastReqServiceId,
-						     EplDllkInstance_g.
-						     m_uiLastTargetNodeId);
-
-						// send SoC
-						Ret = EplDllkMnSendSoc();
-
-						// new DLL state
-						EplDllkInstance_g.m_DllState =
-						    kEplDllMsWaitPreqTrig;
-
-						// start WaitSoCPReq Timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-						Ret =
-						    EplTimerHighReskModifyTimerNs
-						    (&EplDllkInstance_g.
-						     m_TimerHdlResponse,
-						     EplDllkInstance_g.
-						     m_DllConfigParam.
-						     m_dwWaitSocPreq,
-						     EplDllkCbMnTimerResponse,
-						     0L, FALSE);
-#endif
-						break;
-					}
-
-				default:
-					{	// wrong DLL state / cycle time exceeded
-						DllEvent.m_ulDllErrorEvents |=
-						    EPL_DLL_ERR_MN_CYCTIMEEXCEED;
-						EplDllkInstance_g.m_DllState =
-						    kEplDllMsWaitSocTrig;
-						break;
-					}
-				}
-
-				break;
-			}
-
-		case kEplNmtEventDllMePresTimeout:
-			{
-
-				switch (EplDllkInstance_g.m_DllState) {
-				case kEplDllMsWaitPres:
-					{	// PRes not received
-
-						if (EplDllkInstance_g.m_pCurNodeInfo->m_fSoftDelete == FALSE) {	// normal isochronous CN
-							DllEvent.
-							    m_ulDllErrorEvents
-							    |=
-							    EPL_DLL_ERR_MN_CN_LOSS_PRES;
-							DllEvent.m_uiNodeId =
-							    EplDllkInstance_g.
-							    m_pCurNodeInfo->
-							    m_uiNodeId;
-						} else {	// CN shall be deleted softly
-							Event.m_EventSink =
-							    kEplEventSinkDllkCal;
-							Event.m_EventType =
-							    kEplEventTypeDllkSoftDelNode;
-							// $$$ d.k. set Event.m_NetTime to current time
-							Event.m_uiSize =
-							    sizeof(unsigned
-								   int);
-							Event.m_pArg =
-							    &EplDllkInstance_g.
-							    m_pCurNodeInfo->
-							    m_uiNodeId;
-							Ret =
-							    EplEventkPost
-							    (&Event);
-						}
-
-						// continue with sending next PReq
-					}
-
-				case kEplDllMsWaitPreqTrig:
-					{
-						// send next PReq
-						Ret =
-						    EplDllkMnSendPreq
-						    (NmtState_p,
-						     &EplDllkInstance_g.
-						     m_DllState);
-
-						break;
-					}
-
-				default:
-					{	// wrong DLL state
-						break;
-					}
-				}
-
-				break;
-			}
-
-		case kEplNmtEventDllCePres:
-			{
-
-				switch (EplDllkInstance_g.m_DllState) {
-				case kEplDllMsWaitPres:
-					{	// PRes received
-						// send next PReq
-						Ret =
-						    EplDllkMnSendPreq
-						    (NmtState_p,
-						     &EplDllkInstance_g.
-						     m_DllState);
-
-						break;
-					}
-
-				default:
-					{	// wrong DLL state
-						break;
-					}
-				}
-
-				break;
-			}
-
-		case kEplNmtEventDllMeSoaTrig:
-			{
-
-				switch (EplDllkInstance_g.m_DllState) {
-				case kEplDllMsWaitSoaTrig:
-					{	// MN PRes sent
-						// send SoA
-						Ret =
-						    EplDllkMnSendSoa(NmtState_p,
-								     &EplDllkInstance_g.
-								     m_DllState,
-								     TRUE);
-
-						break;
-					}
-
-				default:
-					{	// wrong DLL state
-						break;
-					}
-				}
-
-				break;
-			}
-
-		case kEplNmtEventDllCeAsnd:
-			{	// ASnd has been received, but it may be not the requested one
-/*
-                    // report if SoA was correctly answered
-                    Ret = EplDllkAsyncFrameNotReceived(EplDllkInstance_g.m_LastReqServiceId,
-                                                       EplDllkInstance_g.m_uiLastTargetNodeId);
-*/
-				if (EplDllkInstance_g.m_DllState ==
-				    kEplDllMsWaitAsnd) {
-					EplDllkInstance_g.m_DllState =
-					    kEplDllMsWaitSocTrig;
-				}
-				break;
-			}
-
-		default:
-			break;
-		}
-		break;
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-	default:
-		break;
-	}
-
-	if (DllEvent.m_ulDllErrorEvents != 0) {	// error event set -> post it to error handler
-		Event.m_EventSink = kEplEventSinkErrk;
-		Event.m_EventType = kEplEventTypeDllError;
-		// $$$ d.k. set Event.m_NetTime to current time
-		Event.m_uiSize = sizeof(DllEvent);
-		Event.m_pArg = &DllEvent;
-		Ret = EplEventkPost(&Event);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCbFrameReceived()
-//
-// Description: called from EdrvInterruptHandler()
-//
-// Parameters:  pRxBuffer_p             = receive buffer structure
-//
-// Returns:     (none)
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void EplDllkCbFrameReceived(tEdrvRxBuffer * pRxBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtState NmtState;
-	tEplNmtEvent NmtEvent = kEplNmtEventNoEvent;
-	tEplEvent Event;
-	tEplFrame *pFrame;
-	tEplFrame *pTxFrame;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-	tEplFrameInfo FrameInfo;
-	tEplMsgType MsgType;
-	tEplDllReqServiceId ReqServiceId;
-	unsigned int uiAsndServiceId;
-	unsigned int uiNodeId;
-	u8 bFlag1;
-
-	BENCHMARK_MOD_02_SET(3);
-	NmtState = EplNmtkGetNmtState();
-
-	if (NmtState <= kEplNmtGsResetConfiguration) {
-		goto Exit;
-	}
-
-	pFrame = (tEplFrame *) pRxBuffer_p->m_pbBuffer;
-
-#if EDRV_EARLY_RX_INT != FALSE
-	switch (pRxBuffer_p->m_BufferInFrame) {
-	case kEdrvBufferFirstInFrame:
-		{
-			MsgType =
-			    (tEplMsgType) AmiGetByteFromLe(&pFrame->
-							   m_le_bMessageType);
-			if (MsgType == kEplMsgTypePreq) {
-				if (EplDllkInstance_g.m_DllState == kEplDllCsWaitPreq) {	// PReq expected and actually received
-					// d.k.: The condition above is sufficent, because EPL cycle is active
-					//       and no non-EPL frame shall be received in isochronous phase.
-					// start transmission PRes
-					// $$$ What if Tx buffer is invalid?
-					pTxBuffer =
-					    &EplDllkInstance_g.
-					    m_pTxBuffer[EPL_DLLK_TXFRAME_PRES];
-#if (EPL_DLL_PRES_READY_AFTER_SOA != FALSE) || (EPL_DLL_PRES_READY_AFTER_SOC != FALSE)
-					Ret = EdrvTxMsgStart(pTxBuffer);
-#else
-					pTxFrame =
-					    (tEplFrame *) pTxBuffer->m_pbBuffer;
-					// update frame (NMT state, RD, RS, PR, MS, EN flags)
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bNmtStatus,
-						       (u8) NmtState);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bFlag2,
-						       EplDllkInstance_g.
-						       m_bFlag2);
-					if (NmtState != kEplNmtCsOperational) {	// mark PDO as invalid in NMT state Op
-						// $$$ reset only RD flag; set other flags appropriately
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Pres.
-							       m_le_bFlag1, 0);
-					}
-					// $$$ make function that updates Pres, StatusRes
-					// send PRes frame
-					Ret = EdrvSendTxMsg(pTxBuffer);
-#endif
-				}
-			}
-			goto Exit;
-		}
-
-	case kEdrvBufferMiddleInFrame:
-		{
-			goto Exit;
-		}
-
-	case kEdrvBufferLastInFrame:
-		{
-			break;
-		}
-	}
-#endif
-
-	FrameInfo.m_pFrame = pFrame;
-	FrameInfo.m_uiFrameSize = pRxBuffer_p->m_uiRxMsgLen;
-	FrameInfo.m_NetTime.m_dwNanoSec = pRxBuffer_p->m_NetTime.m_dwNanoSec;
-	FrameInfo.m_NetTime.m_dwSec = pRxBuffer_p->m_NetTime.m_dwSec;
-
-	if (AmiGetWordFromBe(&pFrame->m_be_wEtherType) != EPL_C_DLL_ETHERTYPE_EPL) {	// non-EPL frame
-		//TRACE2("EplDllkCbFrameReceived: pfnCbAsync=0x%p SrcMAC=0x%llx\n", EplDllkInstance_g.m_pfnCbAsync, AmiGetQword48FromBe(pFrame->m_be_abSrcMac));
-		if (EplDllkInstance_g.m_pfnCbAsync != NULL) {	// handler for async frames is registered
-			EplDllkInstance_g.m_pfnCbAsync(&FrameInfo);
-		}
-
-		goto Exit;
-	}
-
-	MsgType = (tEplMsgType) AmiGetByteFromLe(&pFrame->m_le_bMessageType);
-	switch (MsgType) {
-	case kEplMsgTypePreq:
-		{
-			// PReq frame
-			// d.k.: (we assume that this PReq frame is intended for us and don't check DstNodeId)
-			if (AmiGetByteFromLe(&pFrame->m_le_bDstNodeId) != EplDllkInstance_g.m_DllConfigParam.m_uiNodeId) {	// this PReq is not intended for us
-				goto Exit;
-			}
-			NmtEvent = kEplNmtEventDllCePreq;
-
-			if (NmtState >= kEplNmtMsNotActive) {	// MN is active -> wrong msg type
-				break;
-			}
-#if EDRV_EARLY_RX_INT == FALSE
-			if (NmtState >= kEplNmtCsPreOperational2) {	// respond to and process PReq frames only in PreOp2, ReadyToOp and Op
-				// Does PRes exist?
-				pTxBuffer =
-				    &EplDllkInstance_g.
-				    m_pTxBuffer[EPL_DLLK_TXFRAME_PRES];
-				if (pTxBuffer->m_pbBuffer != NULL) {	// PRes does exist
-#if (EPL_DLL_PRES_READY_AFTER_SOA != FALSE) || (EPL_DLL_PRES_READY_AFTER_SOC != FALSE)
-					EdrvTxMsgStart(pTxBuffer);
-#else
-					pTxFrame =
-					    (tEplFrame *) pTxBuffer->m_pbBuffer;
-					// update frame (NMT state, RD, RS, PR, MS, EN flags)
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bNmtStatus,
-						       (u8) NmtState);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bFlag2,
-						       EplDllkInstance_g.
-						       m_bFlag2);
-					bFlag1 =
-					    AmiGetByteFromLe(&pFrame->m_Data.
-							     m_Preq.
-							     m_le_bFlag1);
-					// save EA flag
-					EplDllkInstance_g.m_bMnFlag1 =
-					    (EplDllkInstance_g.
-					     m_bMnFlag1 & ~EPL_FRAME_FLAG1_EA)
-					    | (bFlag1 & EPL_FRAME_FLAG1_EA);
-					// preserve MS flag
-					bFlag1 &= EPL_FRAME_FLAG1_MS;
-					// add EN flag from Error signaling module
-					bFlag1 |=
-					    EplDllkInstance_g.
-					    m_bFlag1 & EPL_FRAME_FLAG1_EN;
-					if (NmtState != kEplNmtCsOperational) {	// mark PDO as invalid in NMT state Op
-						// reset only RD flag
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Pres.
-							       m_le_bFlag1,
-							       bFlag1);
-					} else {	// leave RD flag untouched
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Pres.
-							       m_le_bFlag1,
-							       (AmiGetByteFromLe
-								(&pTxFrame->
-								 m_Data.m_Pres.
-								 m_le_bFlag1) &
-								EPL_FRAME_FLAG1_RD)
-							       | bFlag1);
-					}
-					// $$$ update EPL_DLL_PRES_READY_AFTER_* code
-					// send PRes frame
-					Ret = EdrvSendTxMsg(pTxBuffer);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-#endif
-				}
-#endif
-				// inform PDO module
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-				if (NmtState >= kEplNmtCsReadyToOperate) {	// inform PDO module only in ReadyToOp and Op
-					if (NmtState != kEplNmtCsOperational) {
-						// reset RD flag and all other flags, but that does not matter, because they were processed above
-						AmiSetByteToLe(&pFrame->m_Data.
-							       m_Preq.
-							       m_le_bFlag1, 0);
-					}
-					// compares real frame size and PDO size
-					if ((unsigned
-					     int)(AmiGetWordFromLe(&pFrame->
-								   m_Data.
-								   m_Preq.
-								   m_le_wSize) +
-						  24)
-					    > FrameInfo.m_uiFrameSize) {	// format error
-						tEplErrorHandlerkEvent DllEvent;
-
-						DllEvent.m_ulDllErrorEvents =
-						    EPL_DLL_ERR_INVALID_FORMAT;
-						DllEvent.m_uiNodeId =
-						    AmiGetByteFromLe(&pFrame->
-								     m_le_bSrcNodeId);
-						DllEvent.m_NmtState = NmtState;
-						Event.m_EventSink =
-						    kEplEventSinkErrk;
-						Event.m_EventType =
-						    kEplEventTypeDllError;
-						Event.m_NetTime =
-						    FrameInfo.m_NetTime;
-						Event.m_uiSize =
-						    sizeof(DllEvent);
-						Event.m_pArg = &DllEvent;
-						Ret = EplEventkPost(&Event);
-						break;
-					}
-					// forward PReq frame as RPDO to PDO module
-					Ret = EplPdokCbPdoReceived(&FrameInfo);
-
-				}
-#if (EPL_DLL_PRES_READY_AFTER_SOC != FALSE)
-				if (pTxBuffer->m_pbBuffer != NULL) {	// PRes does exist
-					// inform PDO module about PRes after PReq
-					FrameInfo.m_pFrame =
-					    (tEplFrame *) pTxBuffer->m_pbBuffer;
-					FrameInfo.m_uiFrameSize =
-					    pTxBuffer->m_uiMaxBufferLen;
-					Ret =
-					    EplPdokCbPdoTransmitted(&FrameInfo);
-				}
-#endif
-#endif
-
-#if EDRV_EARLY_RX_INT == FALSE
-				// $$$ inform emergency protocol handling (error signaling module) about flags
-			}
-#endif
-
-			// reset cycle counter
-			EplDllkInstance_g.m_uiCycleCount = 0;
-
-			break;
-		}
-
-	case kEplMsgTypePres:
-		{
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			tEplDllkNodeInfo *pIntNodeInfo;
-			tEplHeartbeatEvent HeartbeatEvent;
-#endif
-
-			// PRes frame
-			NmtEvent = kEplNmtEventDllCePres;
-
-			uiNodeId = AmiGetByteFromLe(&pFrame->m_le_bSrcNodeId);
-
-			if ((NmtState >= kEplNmtCsPreOperational2)
-			    && (NmtState <= kEplNmtCsOperational)) {	// process PRes frames only in PreOp2, ReadyToOp and Op of CN
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-				pIntNodeInfo = EplDllkGetNodeInfo(uiNodeId);
-				if (pIntNodeInfo == NULL) {	// no node info structure available
-					Ret = kEplDllNoNodeInfo;
-					goto Exit;
-				}
-			} else if (EplDllkInstance_g.m_DllState == kEplDllMsWaitPres) {	// or process PRes frames in MsWaitPres
-
-				pIntNodeInfo = EplDllkInstance_g.m_pCurNodeInfo;
-				if ((pIntNodeInfo == NULL) || (pIntNodeInfo->m_uiNodeId != uiNodeId)) {	// ignore PRes, because it is from wrong CN
-					// $$$ maybe post event to NmtMn module
-					goto Exit;
-				}
-				// forward Flag2 to asynchronous scheduler
-				bFlag1 =
-				    AmiGetByteFromLe(&pFrame->m_Data.m_Asnd.
-						     m_Payload.m_StatusResponse.
-						     m_le_bFlag2);
-				Ret =
-				    EplDllkCalAsyncSetPendingRequests(uiNodeId,
-								      ((tEplDllAsyncReqPriority) ((bFlag1 & EPL_FRAME_FLAG2_PR) >> EPL_FRAME_FLAG2_PR_SHIFT)), (bFlag1 & EPL_FRAME_FLAG2_RS));
-
-#endif
-			} else {	// ignore PRes, because it was received in wrong NMT state
-				// but execute EplDllkChangeState() and post event to NMT module
-				break;
-			}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			{	// check NMT state of CN
-				HeartbeatEvent.m_wErrorCode = EPL_E_NO_ERROR;
-				HeartbeatEvent.m_NmtState =
-				    (tEplNmtState) (AmiGetByteFromLe
-						    (&pFrame->m_Data.m_Pres.
-						     m_le_bNmtStatus) |
-						    EPL_NMT_TYPE_CS);
-				if (pIntNodeInfo->m_NmtState != HeartbeatEvent.m_NmtState) {	// NMT state of CN has changed -> post event to NmtMnu module
-					if (pIntNodeInfo->m_fSoftDelete == FALSE) {	// normal isochronous CN
-						HeartbeatEvent.m_uiNodeId =
-						    uiNodeId;
-						Event.m_EventSink =
-						    kEplEventSinkNmtMnu;
-						Event.m_EventType =
-						    kEplEventTypeHeartbeat;
-						Event.m_uiSize =
-						    sizeof(HeartbeatEvent);
-						Event.m_pArg = &HeartbeatEvent;
-					} else {	// CN shall be deleted softly
-						Event.m_EventSink =
-						    kEplEventSinkDllkCal;
-						Event.m_EventType =
-						    kEplEventTypeDllkSoftDelNode;
-						Event.m_uiSize =
-						    sizeof(unsigned int);
-						Event.m_pArg =
-						    &pIntNodeInfo->m_uiNodeId;
-					}
-					Event.m_NetTime = FrameInfo.m_NetTime;
-					Ret = EplEventkPost(&Event);
-
-					// save current NMT state of CN in internal node structure
-					pIntNodeInfo->m_NmtState =
-					    HeartbeatEvent.m_NmtState;
-				}
-			}
-#endif
-
-			// inform PDO module
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-			if ((NmtState != kEplNmtCsPreOperational2)
-			    && (NmtState != kEplNmtMsPreOperational2)) {	// inform PDO module only in ReadyToOp and Op
-				// compare real frame size and PDO size?
-				if (((unsigned
-				      int)(AmiGetWordFromLe(&pFrame->m_Data.
-							    m_Pres.m_le_wSize) +
-					   24)
-				     > FrameInfo.m_uiFrameSize)
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-				    ||
-				    (AmiGetWordFromLe
-				     (&pFrame->m_Data.m_Pres.m_le_wSize) >
-				     pIntNodeInfo->m_wPresPayloadLimit)
-#endif
-				    ) {	// format error
-					tEplErrorHandlerkEvent DllEvent;
-
-					DllEvent.m_ulDllErrorEvents =
-					    EPL_DLL_ERR_INVALID_FORMAT;
-					DllEvent.m_uiNodeId = uiNodeId;
-					DllEvent.m_NmtState = NmtState;
-					Event.m_EventSink = kEplEventSinkErrk;
-					Event.m_EventType =
-					    kEplEventTypeDllError;
-					Event.m_NetTime = FrameInfo.m_NetTime;
-					Event.m_uiSize = sizeof(DllEvent);
-					Event.m_pArg = &DllEvent;
-					Ret = EplEventkPost(&Event);
-					break;
-				}
-				if ((NmtState != kEplNmtCsOperational)
-				    && (NmtState != kEplNmtMsOperational)) {
-					// reset RD flag and all other flags, but that does not matter, because they were processed above
-					AmiSetByteToLe(&pFrame->m_Data.m_Pres.
-						       m_le_bFlag1, 0);
-				}
-				Ret = EplPdokCbPdoReceived(&FrameInfo);
-			}
-#endif
-
-			break;
-		}
-
-	case kEplMsgTypeSoc:
-		{
-			// SoC frame
-			NmtEvent = kEplNmtEventDllCeSoc;
-
-			if (NmtState >= kEplNmtMsNotActive) {	// MN is active -> wrong msg type
-				break;
-			}
-#if EPL_DLL_PRES_READY_AFTER_SOC != FALSE
-			// post PRes to transmit FIFO of the ethernet controller, but don't start
-			// transmission over bus
-			pTxBuffer =
-			    &EplDllkInstance_g.
-			    m_pTxBuffer[EPL_DLLK_TXFRAME_PRES];
-			// Does PRes exist?
-			if (pTxBuffer->m_pbBuffer != NULL) {	// PRes does exist
-				pTxFrame = (tEplFrame *) pTxBuffer->m_pbBuffer;
-				// update frame (NMT state, RD, RS, PR, MS, EN flags)
-				if (NmtState < kEplNmtCsPreOperational2) {	// NMT state is not PreOp2, ReadyToOp or Op
-					// fake NMT state PreOp2, because PRes will be sent only in PreOp2 or greater
-					NmtState = kEplNmtCsPreOperational2;
-				}
-				AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-					       m_le_bNmtStatus,
-					       (u8) NmtState);
-				AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-					       m_le_bFlag2,
-					       EplDllkInstance_g.m_bFlag2);
-				if (NmtState != kEplNmtCsOperational) {	// mark PDO as invalid in NMT state Op
-					// $$$ reset only RD flag; set other flags appropriately
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.
-						       m_le_bFlag1, 0);
-				}
-				// $$$ make function that updates Pres, StatusRes
-				// mark PRes frame as ready for transmission
-				Ret = EdrvTxMsgReady(pTxBuffer);
-			}
-#endif
-
-			if (NmtState >= kEplNmtCsPreOperational2) {	// SoC frames only in PreOp2, ReadyToOp and Op
-				// trigger synchronous task
-				Event.m_EventSink = kEplEventSinkSync;
-				Event.m_EventType = kEplEventTypeSync;
-				Event.m_uiSize = 0;
-				Ret = EplEventkPost(&Event);
-
-				// update cycle counter
-				if (EplDllkInstance_g.m_DllConfigParam.m_uiMultiplCycleCnt > 0) {	// multiplexed cycle active
-					EplDllkInstance_g.m_uiCycleCount =
-					    (EplDllkInstance_g.m_uiCycleCount +
-					     1) %
-					    EplDllkInstance_g.m_DllConfigParam.
-					    m_uiMultiplCycleCnt;
-				}
-			}
-			// reprogram timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-			if (EplDllkInstance_g.m_ullFrameTimeout != 0) {
-				Ret =
-				    EplTimerHighReskModifyTimerNs
-				    (&EplDllkInstance_g.m_TimerHdlCycle,
-				     EplDllkInstance_g.m_ullFrameTimeout,
-				     EplDllkCbCnTimer, 0L, FALSE);
-			}
-#endif
-
-			break;
-		}
-
-	case kEplMsgTypeSoa:
-		{
-			// SoA frame
-			NmtEvent = kEplNmtEventDllCeSoa;
-
-			if (NmtState >= kEplNmtMsNotActive) {	// MN is active -> wrong msg type
-				break;
-			}
-
-			pTxFrame = NULL;
-
-			if ((NmtState & EPL_NMT_SUPERSTATE_MASK) != EPL_NMT_CS_EPLMODE) {	// do not respond, if NMT state is < PreOp1 (i.e. not EPL_MODE)
-				break;
-			}
-			// check TargetNodeId
-			uiNodeId =
-			    AmiGetByteFromLe(&pFrame->m_Data.m_Soa.
-					     m_le_bReqServiceTarget);
-			if (uiNodeId == EplDllkInstance_g.m_DllConfigParam.m_uiNodeId) {	// local node is the target of the current request
-
-				// check ServiceId
-				ReqServiceId =
-				    (tEplDllReqServiceId)
-				    AmiGetByteFromLe(&pFrame->m_Data.m_Soa.
-						     m_le_bReqServiceId);
-				if (ReqServiceId == kEplDllReqServiceStatus) {	// StatusRequest
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_STATUSRES].m_pbBuffer != NULL) {	// StatusRes does exist
-
-						pTxFrame =
-						    (tEplFrame *)
-						    EplDllkInstance_g.
-						    m_pTxBuffer
-						    [EPL_DLLK_TXFRAME_STATUSRES].
-						    m_pbBuffer;
-						// update StatusRes frame (NMT state, EN, EC, RS, PR flags)
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Asnd.
-							       m_Payload.
-							       m_StatusResponse.
-							       m_le_bNmtStatus,
-							       (u8) NmtState);
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Asnd.
-							       m_Payload.
-							       m_StatusResponse.
-							       m_le_bFlag1,
-							       EplDllkInstance_g.
-							       m_bFlag1);
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Asnd.
-							       m_Payload.
-							       m_StatusResponse.
-							       m_le_bFlag2,
-							       EplDllkInstance_g.
-							       m_bFlag2);
-						// send StatusRes
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_STATUSRES]);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						TGT_DBG_SIGNAL_TRACE_POINT(8);
-
-						// update error signaling
-						bFlag1 =
-						    AmiGetByteFromLe(&pFrame->
-								     m_Data.
-								     m_Soa.
-								     m_le_bFlag1);
-						if (((bFlag1 ^ EplDllkInstance_g.m_bMnFlag1) & EPL_FRAME_FLAG1_ER) != 0) {	// exception reset flag was changed by MN
-							// assume same state for EC in next cycle (clear all other bits)
-							if ((bFlag1 &
-							     EPL_FRAME_FLAG1_ER)
-							    != 0) {
-								// set EC and reset rest
-								EplDllkInstance_g.
-								    m_bFlag1 =
-								    EPL_FRAME_FLAG1_EC;
-							} else {
-								// reset complete flag 1 (including EC and EN)
-								EplDllkInstance_g.
-								    m_bFlag1 =
-								    0;
-							}
-						}
-						// save flag 1 from MN for Status request response cycle
-						EplDllkInstance_g.m_bMnFlag1 =
-						    bFlag1;
-					}
-				} else if (ReqServiceId == kEplDllReqServiceIdent) {	// IdentRequest
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_IDENTRES].m_pbBuffer != NULL) {	// IdentRes does exist
-						pTxFrame =
-						    (tEplFrame *)
-						    EplDllkInstance_g.
-						    m_pTxBuffer
-						    [EPL_DLLK_TXFRAME_IDENTRES].
-						    m_pbBuffer;
-						// update IdentRes frame (NMT state, RS, PR flags)
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Asnd.
-							       m_Payload.
-							       m_IdentResponse.
-							       m_le_bNmtStatus,
-							       (u8) NmtState);
-						AmiSetByteToLe(&pTxFrame->
-							       m_Data.m_Asnd.
-							       m_Payload.
-							       m_IdentResponse.
-							       m_le_bFlag2,
-							       EplDllkInstance_g.
-							       m_bFlag2);
-						// send IdentRes
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_IDENTRES]);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						TGT_DBG_SIGNAL_TRACE_POINT(7);
-					}
-				} else if (ReqServiceId == kEplDllReqServiceNmtRequest) {	// NmtRequest
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_pbBuffer != NULL) {	// NmtRequest does exist
-						// check if frame is not empty and not being filled
-						if (EplDllkInstance_g.
-						    m_pTxBuffer
-						    [EPL_DLLK_TXFRAME_NMTREQ].
-						    m_uiTxMsgLen >
-						    EPL_DLLK_BUFLEN_FILLING) {
-							/*if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen < EPL_DLLK_BUFLEN_MIN)
-							   {   // pad frame
-							   EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen = EPL_DLLK_BUFLEN_MIN;
-							   } */
-							// memorize transmission
-							pTxFrame =
-							    (tEplFrame *) 1;
-							// send NmtRequest
-							Ret =
-							    EdrvSendTxMsg
-							    (&EplDllkInstance_g.
-							     m_pTxBuffer
-							     [EPL_DLLK_TXFRAME_NMTREQ]);
-							if (Ret !=
-							    kEplSuccessful) {
-								goto Exit;
-							}
-
-						}
-					}
-
-				} else if (ReqServiceId == kEplDllReqServiceUnspecified) {	// unspecified invite
-					if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NONEPL].m_pbBuffer != NULL) {	// non-EPL frame does exist
-						// check if frame is not empty and not being filled
-						if (EplDllkInstance_g.
-						    m_pTxBuffer
-						    [EPL_DLLK_TXFRAME_NONEPL].
-						    m_uiTxMsgLen >
-						    EPL_DLLK_BUFLEN_FILLING) {
-							/*if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen < EPL_DLLK_BUFLEN_MIN)
-							   {   // pad frame
-							   EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_uiTxMsgLen = EPL_DLLK_BUFLEN_MIN;
-							   } */
-							// memorize transmission
-							pTxFrame =
-							    (tEplFrame *) 1;
-							// send non-EPL frame
-							Ret =
-							    EdrvSendTxMsg
-							    (&EplDllkInstance_g.
-							     m_pTxBuffer
-							     [EPL_DLLK_TXFRAME_NONEPL]);
-							if (Ret !=
-							    kEplSuccessful) {
-								goto Exit;
-							}
-
-						}
-					}
-
-				} else if (ReqServiceId == kEplDllReqServiceNo) {	// no async service requested -> do nothing
-				}
-			}
-#if EPL_DLL_PRES_READY_AFTER_SOA != FALSE
-			if (pTxFrame == NULL) {	// signal process function readiness of PRes frame
-				Event.m_EventSink = kEplEventSinkDllk;
-				Event.m_EventType = kEplEventTypeDllkPresReady;
-				Event.m_uiSize = 0;
-				Event.m_pArg = NULL;
-				Ret = EplEventkPost(&Event);
-			}
-#endif
-
-			// inform PDO module
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-//            Ret = EplPdokCbSoa(&FrameInfo);
-#endif
-
-			// $$$ put SrcNodeId, NMT state and NetTime as HeartbeatEvent into eventqueue
-
-			// $$$ inform emergency protocol handling about flags
-			break;
-		}
-
-	case kEplMsgTypeAsnd:
-		{
-			// ASnd frame
-			NmtEvent = kEplNmtEventDllCeAsnd;
-
-			// ASnd service registered?
-			uiAsndServiceId =
-			    (unsigned int)AmiGetByteFromLe(&pFrame->m_Data.
-							   m_Asnd.
-							   m_le_bServiceId);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			if ((EplDllkInstance_g.m_DllState >= kEplDllMsNonCyclic)
-			    &&
-			    ((((tEplDllAsndServiceId) uiAsndServiceId) ==
-			      kEplDllAsndStatusResponse)
-			     || (((tEplDllAsndServiceId) uiAsndServiceId) == kEplDllAsndIdentResponse))) {	// StatusRes or IdentRes received
-				uiNodeId =
-				    AmiGetByteFromLe(&pFrame->m_le_bSrcNodeId);
-				if ((EplDllkInstance_g.m_LastReqServiceId ==
-				     ((tEplDllReqServiceId) uiAsndServiceId))
-				    && (uiNodeId == EplDllkInstance_g.m_uiLastTargetNodeId)) {	// mark request as responded
-					EplDllkInstance_g.m_LastReqServiceId =
-					    kEplDllReqServiceNo;
-				}
-				if (((tEplDllAsndServiceId) uiAsndServiceId) == kEplDllAsndIdentResponse) {	// memorize MAC address of CN for PReq
-					tEplDllkNodeInfo *pIntNodeInfo;
-
-					pIntNodeInfo =
-					    EplDllkGetNodeInfo(uiNodeId);
-					if (pIntNodeInfo == NULL) {	// no node info structure available
-						Ret = kEplDllNoNodeInfo;
-					} else {
-						EPL_MEMCPY(pIntNodeInfo->
-							   m_be_abMacAddr,
-							   pFrame->
-							   m_be_abSrcMac, 6);
-					}
-				}
-				// forward Flag2 to asynchronous scheduler
-				bFlag1 =
-				    AmiGetByteFromLe(&pFrame->m_Data.m_Asnd.
-						     m_Payload.m_StatusResponse.
-						     m_le_bFlag2);
-				Ret =
-				    EplDllkCalAsyncSetPendingRequests(uiNodeId,
-								      ((tEplDllAsyncReqPriority) ((bFlag1 & EPL_FRAME_FLAG2_PR) >> EPL_FRAME_FLAG2_PR_SHIFT)), (bFlag1 & EPL_FRAME_FLAG2_RS));
-			}
-#endif
-
-			if (uiAsndServiceId < EPL_DLL_MAX_ASND_SERVICE_ID) {	// ASnd service ID is valid
-				if (EplDllkInstance_g.m_aAsndFilter[uiAsndServiceId] == kEplDllAsndFilterAny) {	// ASnd service ID is registered
-					// forward frame via async receive FIFO to userspace
-					Ret =
-					    EplDllkCalAsyncFrameReceived
-					    (&FrameInfo);
-				} else if (EplDllkInstance_g.m_aAsndFilter[uiAsndServiceId] == kEplDllAsndFilterLocal) {	// ASnd service ID is registered, but only local node ID or broadcasts
-					// shall be forwarded
-					uiNodeId =
-					    AmiGetByteFromLe(&pFrame->
-							     m_le_bDstNodeId);
-					if ((uiNodeId ==
-					     EplDllkInstance_g.m_DllConfigParam.
-					     m_uiNodeId)
-					    || (uiNodeId == EPL_C_ADR_BROADCAST)) {	// ASnd frame is intended for us
-						// forward frame via async receive FIFO to userspace
-						Ret =
-						    EplDllkCalAsyncFrameReceived
-						    (&FrameInfo);
-					}
-				}
-			}
-			break;
-		}
-
-	default:
-		{
-			break;
-		}
-	}
-
-	if (NmtEvent != kEplNmtEventNoEvent) {	// event for DLL and NMT state machine generated
-		Ret = EplDllkChangeState(NmtEvent, NmtState);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		if ((NmtEvent != kEplNmtEventDllCeAsnd)
-		    && ((NmtState <= kEplNmtCsPreOperational1) || (NmtEvent != kEplNmtEventDllCePres))) {	// NMT state machine is not interested in ASnd frames and PRes frames when not CsNotActive or CsPreOp1
-			// inform NMT module
-			Event.m_EventSink = kEplEventSinkNmtk;
-			Event.m_EventType = kEplEventTypeNmtEvent;
-			Event.m_uiSize = sizeof(NmtEvent);
-			Event.m_pArg = &NmtEvent;
-			Ret = EplEventkPost(&Event);
-		}
-	}
-
-      Exit:
-	if (Ret != kEplSuccessful) {
-		u32 dwArg;
-
-		BENCHMARK_MOD_02_TOGGLE(9);
-
-		dwArg = EplDllkInstance_g.m_DllState | (NmtEvent << 8);
-
-		// Error event for API layer
-		Ret = EplEventkPostError(kEplEventSourceDllk,
-					 Ret, sizeof(dwArg), &dwArg);
-	}
-	BENCHMARK_MOD_02_RESET(3);
-	return;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCbFrameTransmitted()
-//
-// Description: called from EdrvInterruptHandler().
-//              It signals
-//
-// Parameters:  pRxBuffer_p             = receive buffer structure
-//
-// Returns:     (none)
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void EplDllkCbFrameTransmitted(tEdrvTxBuffer * pTxBuffer_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-	tEplDllAsyncReqPriority Priority;
-	tEplNmtState NmtState;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0) \
-    && (EPL_DLL_PRES_READY_AFTER_SOC == FALSE)
-	tEplFrameInfo FrameInfo;
-#endif
-
-	NmtState = EplNmtkGetNmtState();
-
-	if (NmtState <= kEplNmtGsResetConfiguration) {
-		goto Exit;
-	}
-
-	if ((pTxBuffer_p - EplDllkInstance_g.m_pTxBuffer) == EPL_DLLK_TXFRAME_NMTREQ) {	// frame from NMT request FIFO sent
-		// mark Tx-buffer as empty
-		pTxBuffer_p->m_uiTxMsgLen = EPL_DLLK_BUFLEN_EMPTY;
-
-		// post event to DLL
-		Priority = kEplDllAsyncReqPrioNmt;
-		Event.m_EventSink = kEplEventSinkDllk;
-		Event.m_EventType = kEplEventTypeDllkFillTx;
-		EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-		Event.m_pArg = &Priority;
-		Event.m_uiSize = sizeof(Priority);
-		Ret = EplEventkPost(&Event);
-	} else if ((pTxBuffer_p - EplDllkInstance_g.m_pTxBuffer) == EPL_DLLK_TXFRAME_NONEPL) {	// frame from generic priority FIFO sent
-		// mark Tx-buffer as empty
-		pTxBuffer_p->m_uiTxMsgLen = EPL_DLLK_BUFLEN_EMPTY;
-
-		// post event to DLL
-		Priority = kEplDllAsyncReqPrioGeneric;
-		Event.m_EventSink = kEplEventSinkDllk;
-		Event.m_EventType = kEplEventTypeDllkFillTx;
-		EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-		Event.m_pArg = &Priority;
-		Event.m_uiSize = sizeof(Priority);
-		Ret = EplEventkPost(&Event);
-	}
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0) \
-    && (EPL_DLL_PRES_READY_AFTER_SOC == FALSE)) \
-    || (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	else if ((pTxBuffer_p->m_EplMsgType == kEplMsgTypePreq)
-		 || (pTxBuffer_p->m_EplMsgType == kEplMsgTypePres)) {	// PRes resp. PReq frame sent
-
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0) \
-            && (EPL_DLL_PRES_READY_AFTER_SOC == FALSE))
-		{
-			// inform PDO module
-			FrameInfo.m_pFrame =
-			    (tEplFrame *) pTxBuffer_p->m_pbBuffer;
-			FrameInfo.m_uiFrameSize = pTxBuffer_p->m_uiMaxBufferLen;
-			Ret = EplPdokCbPdoTransmitted(&FrameInfo);
-		}
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		{
-			// if own Pres on MN, trigger SoA
-			if ((NmtState >= kEplNmtMsPreOperational2)
-			    && (pTxBuffer_p ==
-				&EplDllkInstance_g.
-				m_pTxBuffer[EPL_DLLK_TXFRAME_PRES])) {
-				Ret =
-				    EplDllkChangeState(kEplNmtEventDllMeSoaTrig,
-						       NmtState);
-			}
-		}
-#endif
-
-#if EPL_DLL_PRES_READY_AFTER_SOA != FALSE
-		goto Exit;
-#endif
-	}
-#endif
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	else if (pTxBuffer_p->m_EplMsgType == kEplMsgTypeSoa) {	// SoA frame sent
-		tEplNmtEvent NmtEvent = kEplNmtEventDllMeSoaSent;
-
-		// check if we are invited
-		if (EplDllkInstance_g.m_uiLastTargetNodeId ==
-		    EplDllkInstance_g.m_DllConfigParam.m_uiNodeId) {
-			tEplFrame *pTxFrame;
-
-			if (EplDllkInstance_g.m_LastReqServiceId == kEplDllReqServiceStatus) {	// StatusRequest
-				if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_STATUSRES].m_pbBuffer != NULL) {	// StatusRes does exist
-
-					pTxFrame =
-					    (tEplFrame *) EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_STATUSRES].
-					    m_pbBuffer;
-					// update StatusRes frame (NMT state, EN, EC, RS, PR flags)
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.
-						       m_Payload.
-						       m_StatusResponse.
-						       m_le_bNmtStatus,
-						       (u8) NmtState);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.
-						       m_Payload.
-						       m_StatusResponse.
-						       m_le_bFlag1,
-						       EplDllkInstance_g.
-						       m_bFlag1);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.
-						       m_Payload.
-						       m_StatusResponse.
-						       m_le_bFlag2,
-						       EplDllkInstance_g.
-						       m_bFlag2);
-					// send StatusRes
-					Ret =
-					    EdrvSendTxMsg(&EplDllkInstance_g.
-							  m_pTxBuffer
-							  [EPL_DLLK_TXFRAME_STATUSRES]);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-					TGT_DBG_SIGNAL_TRACE_POINT(8);
-
-				}
-			} else if (EplDllkInstance_g.m_LastReqServiceId == kEplDllReqServiceIdent) {	// IdentRequest
-				if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_IDENTRES].m_pbBuffer != NULL) {	// IdentRes does exist
-					pTxFrame =
-					    (tEplFrame *) EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_IDENTRES].
-					    m_pbBuffer;
-					// update IdentRes frame (NMT state, RS, PR flags)
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.
-						       m_Payload.
-						       m_IdentResponse.
-						       m_le_bNmtStatus,
-						       (u8) NmtState);
-					AmiSetByteToLe(&pTxFrame->m_Data.m_Asnd.
-						       m_Payload.
-						       m_IdentResponse.
-						       m_le_bFlag2,
-						       EplDllkInstance_g.
-						       m_bFlag2);
-					// send IdentRes
-					Ret =
-					    EdrvSendTxMsg(&EplDllkInstance_g.
-							  m_pTxBuffer
-							  [EPL_DLLK_TXFRAME_IDENTRES]);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-					TGT_DBG_SIGNAL_TRACE_POINT(7);
-				}
-			} else if (EplDllkInstance_g.m_LastReqServiceId == kEplDllReqServiceNmtRequest) {	// NmtRequest
-				if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NMTREQ].m_pbBuffer != NULL) {	// NmtRequest does exist
-					// check if frame is not empty and not being filled
-					if (EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_NMTREQ].
-					    m_uiTxMsgLen >
-					    EPL_DLLK_BUFLEN_FILLING) {
-						// check if this frame is a NMT command,
-						// then forward this frame back to NmtMnu module,
-						// because it needs the time, when this frame is
-						// actually sent, to start the timer for monitoring
-						// the NMT state change.
-
-						pTxFrame =
-						    (tEplFrame *)
-						    EplDllkInstance_g.
-						    m_pTxBuffer
-						    [EPL_DLLK_TXFRAME_NMTREQ].
-						    m_pbBuffer;
-						if ((AmiGetByteFromLe
-						     (&pTxFrame->
-						      m_le_bMessageType)
-						     == (u8) kEplMsgTypeAsnd)
-						    &&
-						    (AmiGetByteFromLe
-						     (&pTxFrame->m_Data.m_Asnd.
-						      m_le_bServiceId)
-						     == (u8) kEplDllAsndNmtCommand)) {	// post event directly to NmtMnu module
-							Event.m_EventSink =
-							    kEplEventSinkNmtMnu;
-							Event.m_EventType =
-							    kEplEventTypeNmtMnuNmtCmdSent;
-							Event.m_uiSize =
-							    EplDllkInstance_g.
-							    m_pTxBuffer
-							    [EPL_DLLK_TXFRAME_NMTREQ].
-							    m_uiTxMsgLen;
-							Event.m_pArg = pTxFrame;
-							Ret =
-							    EplEventkPost
-							    (&Event);
-
-						}
-						// send NmtRequest
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_NMTREQ]);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-
-					}
-				}
-
-			} else if (EplDllkInstance_g.m_LastReqServiceId == kEplDllReqServiceUnspecified) {	// unspecified invite
-				if (EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_NONEPL].m_pbBuffer != NULL) {	// non-EPL frame does exist
-					// check if frame is not empty and not being filled
-					if (EplDllkInstance_g.
-					    m_pTxBuffer
-					    [EPL_DLLK_TXFRAME_NONEPL].
-					    m_uiTxMsgLen >
-					    EPL_DLLK_BUFLEN_FILLING) {
-						// send non-EPL frame
-						Ret =
-						    EdrvSendTxMsg
-						    (&EplDllkInstance_g.
-						     m_pTxBuffer
-						     [EPL_DLLK_TXFRAME_NONEPL]);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-
-					}
-				}
-			}
-			// ASnd frame was sent, remove the request
-			EplDllkInstance_g.m_LastReqServiceId =
-			    kEplDllReqServiceNo;
-		}
-		// forward event to ErrorHandler and PDO module
-		Event.m_EventSink = kEplEventSinkNmtk;
-		Event.m_EventType = kEplEventTypeNmtEvent;
-		Event.m_uiSize = sizeof(NmtEvent);
-		Event.m_pArg = &NmtEvent;
-		Ret = EplEventkPost(&Event);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-#endif
-
-#if EPL_DLL_PRES_READY_AFTER_SOA != FALSE
-	else {			// d.k.: Why that else? on CN it is entered on IdentRes and StatusRes
-		goto Exit;
-	}
-
-	// signal process function readiness of PRes frame
-	Event.m_EventSink = kEplEventSinkDllk;
-	Event.m_EventType = kEplEventTypeDllkPresReady;
-	Event.m_uiSize = 0;
-	Event.m_pArg = NULL;
-	Ret = EplEventkPost(&Event);
-
-#endif
-
-      Exit:
-	if (Ret != kEplSuccessful) {
-		u32 dwArg;
-
-		BENCHMARK_MOD_02_TOGGLE(9);
-
-		dwArg =
-		    EplDllkInstance_g.m_DllState | (pTxBuffer_p->
-						    m_EplMsgType << 16);
-
-		// Error event for API layer
-		Ret = EplEventkPostError(kEplEventSourceDllk,
-					 Ret, sizeof(dwArg), &dwArg);
-	}
-
-	return;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCheckFrame()
-//
-// Description: check frame and set missing information
-//
-// Parameters:  pFrame_p                = ethernet frame
-//              uiFrameSize_p           = size of frame
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkCheckFrame(tEplFrame * pFrame_p,
-				    unsigned int uiFrameSize_p)
-{
-	tEplMsgType MsgType;
-	u16 wEtherType;
-
-	// check frame
-	if (pFrame_p != NULL) {
-		// check SrcMAC
-		if (AmiGetQword48FromBe(pFrame_p->m_be_abSrcMac) == 0) {
-			// source MAC address
-			EPL_MEMCPY(&pFrame_p->m_be_abSrcMac[0],
-				   &EplDllkInstance_g.m_be_abSrcMac[0], 6);
-		}
-		// check ethertype
-		wEtherType = AmiGetWordFromBe(&pFrame_p->m_be_wEtherType);
-		if (wEtherType == 0) {
-			// assume EPL frame
-			wEtherType = EPL_C_DLL_ETHERTYPE_EPL;
-			AmiSetWordToBe(&pFrame_p->m_be_wEtherType, wEtherType);
-		}
-
-		if (wEtherType == EPL_C_DLL_ETHERTYPE_EPL) {
-			// source node ID
-			AmiSetByteToLe(&pFrame_p->m_le_bSrcNodeId,
-				       (u8) EplDllkInstance_g.
-				       m_DllConfigParam.m_uiNodeId);
-
-			// check message type
-			MsgType =
-			    AmiGetByteFromLe(&pFrame_p->m_le_bMessageType);
-			if (MsgType == 0) {
-				MsgType = kEplMsgTypeAsnd;
-				AmiSetByteToLe(&pFrame_p->m_le_bMessageType,
-					       (u8) MsgType);
-			}
-
-			if (MsgType == kEplMsgTypeAsnd) {
-				// destination MAC address
-				AmiSetQword48ToBe(&pFrame_p->m_be_abDstMac[0],
-						  EPL_C_DLL_MULTICAST_ASND);
-			}
-
-		}
-	}
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCbCnTimer()
-//
-// Description: called by timer module. It monitors the EPL cycle when it is a CN.
-//
-// Parameters:  pEventArg_p             = timer event argument
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-static tEplKernel EplDllkCbCnTimer(tEplTimerEventArg *pEventArg_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtState NmtState;
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	if (pEventArg_p->m_TimerHdl != EplDllkInstance_g.m_TimerHdlCycle) {	// zombie callback
-		// just exit
-		goto Exit;
-	}
-#endif
-
-	NmtState = EplNmtkGetNmtState();
-
-	if (NmtState <= kEplNmtGsResetConfiguration) {
-		goto Exit;
-	}
-
-	Ret = EplDllkChangeState(kEplNmtEventDllCeFrameTimeout, NmtState);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// 2008/10/15 d.k. reprogramming of timer not necessary,
-	// because it will be programmed, when SoC is received.
-/*
-    // reprogram timer
-#if EPL_TIMER_USE_HIGHRES != FALSE
-    if ((NmtState > kEplNmtCsPreOperational1)
-        && (EplDllkInstance_g.m_ullFrameTimeout != 0))
-    {
-        Ret = EplTimerHighReskModifyTimerNs(&EplDllkInstance_g.m_TimerHdlCycle, EplDllkInstance_g.m_ullFrameTimeout, EplDllkCbCnTimer, 0L, FALSE);
-    }
-#endif
-*/
-
-      Exit:
-	if (Ret != kEplSuccessful) {
-		u32 dwArg;
-
-		BENCHMARK_MOD_02_TOGGLE(9);
-
-		dwArg =
-		    EplDllkInstance_g.
-		    m_DllState | (kEplNmtEventDllCeFrameTimeout << 8);
-
-		// Error event for API layer
-		Ret = EplEventkPostError(kEplEventSourceDllk,
-					 Ret, sizeof(dwArg), &dwArg);
-	}
-
-	return Ret;
-}
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCbMnTimerCycle()
-//
-// Description: called by timer module. It triggers the SoC when it is a MN.
-//
-// Parameters:  pEventArg_p             = timer event argument
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkCbMnTimerCycle(tEplTimerEventArg *pEventArg_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtState NmtState;
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	if (pEventArg_p->m_TimerHdl != EplDllkInstance_g.m_TimerHdlCycle) {	// zombie callback
-		// just exit
-		goto Exit;
-	}
-#endif
-
-	NmtState = EplNmtkGetNmtState();
-
-	if (NmtState <= kEplNmtGsResetConfiguration) {
-		goto Exit;
-	}
-
-	Ret = EplDllkChangeState(kEplNmtEventDllMeSocTrig, NmtState);
-
-      Exit:
-	if (Ret != kEplSuccessful) {
-		u32 dwArg;
-
-		BENCHMARK_MOD_02_TOGGLE(9);
-
-		dwArg =
-		    EplDllkInstance_g.
-		    m_DllState | (kEplNmtEventDllMeSocTrig << 8);
-
-		// Error event for API layer
-		Ret = EplEventkPostError(kEplEventSourceDllk,
-					 Ret, sizeof(dwArg), &dwArg);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCbMnTimerResponse()
-//
-// Description: called by timer module. It monitors the PRes timeout.
-//
-// Parameters:  pEventArg_p             = timer event argument
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkCbMnTimerResponse(tEplTimerEventArg *pEventArg_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtState NmtState;
-
-#if EPL_TIMER_USE_HIGHRES != FALSE
-	if (pEventArg_p->m_TimerHdl != EplDllkInstance_g.m_TimerHdlResponse) {	// zombie callback
-		// just exit
-		goto Exit;
-	}
-#endif
-
-	NmtState = EplNmtkGetNmtState();
-
-	if (NmtState <= kEplNmtGsResetConfiguration) {
-		goto Exit;
-	}
-
-	Ret = EplDllkChangeState(kEplNmtEventDllMePresTimeout, NmtState);
-
-      Exit:
-	if (Ret != kEplSuccessful) {
-		u32 dwArg;
-
-		BENCHMARK_MOD_02_TOGGLE(9);
-
-		dwArg =
-		    EplDllkInstance_g.
-		    m_DllState | (kEplNmtEventDllMePresTimeout << 8);
-
-		// Error event for API layer
-		Ret = EplEventkPostError(kEplEventSourceDllk,
-					 Ret, sizeof(dwArg), &dwArg);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkGetNodeInfo()
-//
-// Description: returns node info structure of the specified node.
-//
-// Parameters:  uiNodeId_p              = node ID
-//
-// Returns:     tEplDllkNodeInfo*       = pointer to internal node info structure
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplDllkNodeInfo *EplDllkGetNodeInfo(unsigned int uiNodeId_p)
-{
-	// $$$ d.k.: use hash algorithm to retrieve the appropriate node info structure
-	//           if size of array is less than 254.
-	uiNodeId_p--;		// node ID starts at 1 but array at 0
-	if (uiNodeId_p >= tabentries(EplDllkInstance_g.m_aNodeInfo)) {
-		return NULL;
-	} else {
-		return &EplDllkInstance_g.m_aNodeInfo[uiNodeId_p];
-	}
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkMnSendSoa()
-//
-// Description: it updates and transmits the SoA.
-//
-// Parameters:  NmtState_p              = current NMT state
-//              pDllStateProposed_p     = proposed DLL state
-//              fEnableInvitation_p     = enable invitation for asynchronous phase
-//                                        it will be disabled for EPL_C_DLL_PREOP1_START_CYCLES SoAs
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkMnSendSoa(tEplNmtState NmtState_p,
-				   tEplDllState * pDllStateProposed_p,
-				   BOOL fEnableInvitation_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-	tEplFrame *pTxFrame;
-	tEplDllkNodeInfo *pNodeInfo;
-
-	*pDllStateProposed_p = kEplDllMsNonCyclic;
-
-	pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_SOA];
-	if (pTxBuffer->m_pbBuffer != NULL) {	// SoA does exist
-		pTxFrame = (tEplFrame *) pTxBuffer->m_pbBuffer;
-
-		if (fEnableInvitation_p != FALSE) {	// fetch target of asynchronous phase
-			if (EplDllkInstance_g.m_bFlag2 == 0) {	// own queues are empty
-				EplDllkInstance_g.m_LastReqServiceId =
-				    kEplDllReqServiceNo;
-			} else if (((tEplDllAsyncReqPriority) (EplDllkInstance_g.m_bFlag2 >> EPL_FRAME_FLAG2_PR_SHIFT)) == kEplDllAsyncReqPrioNmt) {	// frames in own NMT request queue available
-				EplDllkInstance_g.m_LastReqServiceId =
-				    kEplDllReqServiceNmtRequest;
-			} else {
-				EplDllkInstance_g.m_LastReqServiceId =
-				    kEplDllReqServiceUnspecified;
-			}
-			Ret =
-			    EplDllkCalAsyncGetSoaRequest(&EplDllkInstance_g.
-							 m_LastReqServiceId,
-							 &EplDllkInstance_g.
-							 m_uiLastTargetNodeId);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-			if (EplDllkInstance_g.m_LastReqServiceId != kEplDllReqServiceNo) {	// asynchronous phase will be assigned to one node
-				if (EplDllkInstance_g.m_uiLastTargetNodeId == EPL_C_ADR_INVALID) {	// exchange invalid node ID with local node ID
-					EplDllkInstance_g.m_uiLastTargetNodeId =
-					    EplDllkInstance_g.m_DllConfigParam.
-					    m_uiNodeId;
-					// d.k. DLL state WaitAsndTrig is not helpful;
-					//      so just step over to WaitSocTrig,
-					//      because own ASnd is sent automatically in CbFrameTransmitted() after SoA.
-					//*pDllStateProposed_p = kEplDllMsWaitAsndTrig;
-					*pDllStateProposed_p =
-					    kEplDllMsWaitSocTrig;
-				} else {	// assignment to CN
-					*pDllStateProposed_p =
-					    kEplDllMsWaitAsnd;
-				}
-
-				pNodeInfo =
-				    EplDllkGetNodeInfo(EplDllkInstance_g.
-						       m_uiLastTargetNodeId);
-				if (pNodeInfo == NULL) {	// no node info structure available
-					Ret = kEplDllNoNodeInfo;
-					goto Exit;
-				}
-				// update frame (EA, ER flags)
-				AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.
-					       m_le_bFlag1,
-					       pNodeInfo->
-					       m_bSoaFlag1 & (EPL_FRAME_FLAG1_EA
-							      |
-							      EPL_FRAME_FLAG1_ER));
-			} else {	// no assignment of asynchronous phase
-				*pDllStateProposed_p = kEplDllMsWaitSocTrig;
-				EplDllkInstance_g.m_uiLastTargetNodeId =
-				    EPL_C_ADR_INVALID;
-			}
-
-			// update frame (target)
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.
-				       m_le_bReqServiceId,
-				       (u8) EplDllkInstance_g.
-				       m_LastReqServiceId);
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.
-				       m_le_bReqServiceTarget,
-				       (u8) EplDllkInstance_g.
-				       m_uiLastTargetNodeId);
-
-		} else {	// invite nobody
-			// update frame (target)
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.
-				       m_le_bReqServiceId, (u8) 0);
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.
-				       m_le_bReqServiceTarget, (u8) 0);
-		}
-
-		// update frame (NMT state)
-		AmiSetByteToLe(&pTxFrame->m_Data.m_Soa.m_le_bNmtStatus,
-			       (u8) NmtState_p);
-
-		// send SoA frame
-		Ret = EdrvSendTxMsg(pTxBuffer);
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkMnSendSoc()
-//
-// Description: it updates and transmits the SoA.
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkMnSendSoc(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-	tEplFrame *pTxFrame;
-	tEplEvent Event;
-
-	pTxBuffer = &EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_SOC];
-	if (pTxBuffer->m_pbBuffer != NULL) {	// SoC does exist
-		pTxFrame = (tEplFrame *) pTxBuffer->m_pbBuffer;
-
-		// $$$ update NetTime
-
-		// send SoC frame
-		Ret = EdrvSendTxMsg(pTxBuffer);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		// trigger synchronous task
-		Event.m_EventSink = kEplEventSinkSync;
-		Event.m_EventType = kEplEventTypeSync;
-		Event.m_uiSize = 0;
-		Ret = EplEventkPost(&Event);
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkMnSendPreq()
-//
-// Description: it updates and transmits the PReq for the next isochronous CN
-//              or own PRes if enabled.
-//
-// Parameters:  NmtState_p              = current NMT state
-//              pDllStateProposed_p     = proposed DLL state
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkMnSendPreq(tEplNmtState NmtState_p,
-				    tEplDllState * pDllStateProposed_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEdrvTxBuffer *pTxBuffer = NULL;
-	tEplFrame *pTxFrame;
-	u8 bFlag1 = 0;
-
-	if (EplDllkInstance_g.m_pCurNodeInfo == NULL) {	// start with first isochronous CN
-		EplDllkInstance_g.m_pCurNodeInfo =
-		    EplDllkInstance_g.m_pFirstNodeInfo;
-	} else {		// iterate to next isochronous CN
-		EplDllkInstance_g.m_pCurNodeInfo =
-		    EplDllkInstance_g.m_pCurNodeInfo->m_pNextNodeInfo;
-	}
-
-	if (EplDllkInstance_g.m_pCurNodeInfo == NULL) {	// last isochronous CN reached
-		Ret = EplDllkMnSendSoa(NmtState_p, pDllStateProposed_p, TRUE);
-		goto Exit;
-	} else {
-		pTxBuffer = EplDllkInstance_g.m_pCurNodeInfo->m_pPreqTxBuffer;
-		bFlag1 =
-		    EplDllkInstance_g.m_pCurNodeInfo->
-		    m_bSoaFlag1 & EPL_FRAME_FLAG1_EA;
-		*pDllStateProposed_p = kEplDllMsWaitPres;
-
-		// start PRes Timer
-		// $$$ d.k.: maybe move this call to CbFrameTransmitted(), because the time should run from there
-#if EPL_TIMER_USE_HIGHRES != FALSE
-		Ret =
-		    EplTimerHighReskModifyTimerNs(&EplDllkInstance_g.
-						  m_TimerHdlResponse,
-						  EplDllkInstance_g.
-						  m_pCurNodeInfo->
-						  m_dwPresTimeout,
-						  EplDllkCbMnTimerResponse, 0L,
-						  FALSE);
-#endif
-	}
-
-	if (pTxBuffer == NULL) {	// PReq does not exist
-		Ret = kEplDllTxBufNotReady;
-		goto Exit;
-	}
-
-	pTxFrame = (tEplFrame *) pTxBuffer->m_pbBuffer;
-
-	if (pTxFrame != NULL) {	// PReq does exist
-		if (NmtState_p == kEplNmtMsOperational) {	// leave RD flag untouched
-			bFlag1 |=
-			    AmiGetByteFromLe(&pTxFrame->m_Data.m_Preq.
-					     m_le_bFlag1) & EPL_FRAME_FLAG1_RD;
-		}
-
-		if (pTxBuffer == &EplDllkInstance_g.m_pTxBuffer[EPL_DLLK_TXFRAME_PRES]) {	// PRes of MN will be sent
-			// update NMT state
-			AmiSetByteToLe(&pTxFrame->m_Data.m_Pres.m_le_bNmtStatus,
-				       (u8) NmtState_p);
-			*pDllStateProposed_p = kEplDllMsWaitSoaTrig;
-		}
-		// $$$ d.k. set EPL_FRAME_FLAG1_MS if necessary
-		// update frame (Flag1)
-		AmiSetByteToLe(&pTxFrame->m_Data.m_Preq.m_le_bFlag1, bFlag1);
-
-		// calculate frame size from payload size
-		pTxBuffer->m_uiTxMsgLen =
-		    AmiGetWordFromLe(&pTxFrame->m_Data.m_Preq.m_le_wSize) + 24;
-
-		// send PReq frame
-		Ret = EdrvSendTxMsg(pTxBuffer);
-	} else {
-		Ret = kEplDllTxFrameInvalid;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkAsyncFrameNotReceived()
-//
-// Description: passes empty ASnd frame to receive FIFO.
-//              It will be called only for frames with registered AsndServiceIds
-//              (only kEplDllAsndFilterAny).
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDllkAsyncFrameNotReceived(tEplDllReqServiceId
-					       ReqServiceId_p,
-					       unsigned int uiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u8 abBuffer[18];
-	tEplFrame *pFrame = (tEplFrame *) abBuffer;
-	tEplFrameInfo FrameInfo;
-
-	// check if previous SoA invitation was not answered
-	switch (ReqServiceId_p) {
-	case kEplDllReqServiceIdent:
-	case kEplDllReqServiceStatus:
-		// ASnd service registered?
-		if (EplDllkInstance_g.m_aAsndFilter[ReqServiceId_p] == kEplDllAsndFilterAny) {	// ASnd service ID is registered
-			AmiSetByteToLe(&pFrame->m_le_bSrcNodeId,
-				       (u8) uiNodeId_p);
-			// EPL MsgType ASnd
-			AmiSetByteToLe(&pFrame->m_le_bMessageType,
-				       (u8) kEplMsgTypeAsnd);
-			// ASnd Service ID
-			AmiSetByteToLe(&pFrame->m_Data.m_Asnd.m_le_bServiceId,
-				       (u8) ReqServiceId_p);
-			// create frame info structure
-			FrameInfo.m_pFrame = pFrame;
-			FrameInfo.m_uiFrameSize = 18;	// empty non existing ASnd frame
-			// forward frame via async receive FIFO to userspace
-			Ret = EplDllkCalAsyncFrameReceived(&FrameInfo);
-		}
-		break;
-	default:
-		// no invitation issued or it was successfully answered or it is uninteresting
-		break;
-	}
-
-	return Ret;
-}
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-// EOF
diff --git a/drivers/staging/epl/EplDllkCal.c b/drivers/staging/epl/EplDllkCal.c
deleted file mode 100644
index 0e283d5..0000000
--- a/drivers/staging/epl/EplDllkCal.c
+++ /dev/null
@@ -1,1260 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for kernel DLL Communication Abstraction Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllkCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.7 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/15 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "kernel/EplDllkCal.h"
-#include "kernel/EplDllk.h"
-#include "kernel/EplEventk.h"
-
-#include "EplDllCal.h"
-#ifndef EPL_NO_FIFO
-#include "SharedBuff.h"
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef min
-#define min(a,b)            (((a) < (b)) ? (a) : (b))
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplDllkCal                                          */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPL_DLLKCAL_MAX_QUEUES  5	// CnGenReq, CnNmtReq, {MnGenReq, MnNmtReq}, MnIdentReq, MnStatusReq
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-#ifndef EPL_NO_FIFO
-//    tShbInstance    m_ShbInstanceRx;      // FIFO for Rx ASnd frames
-	tShbInstance m_ShbInstanceTxNmt;	// FIFO for Tx frames with NMT request priority
-	tShbInstance m_ShbInstanceTxGen;	// FIFO for Tx frames with generic priority
-#else
-	unsigned int m_uiFrameSizeNmt;
-	u8 m_abFrameNmt[1500];
-	unsigned int m_uiFrameSizeGen;
-	u8 m_abFrameGen[1500];
-#endif
-
-	tEplDllkCalStatistics m_Statistics;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// IdentRequest queue with CN node IDs
-	unsigned int m_auiQueueIdentReq[EPL_D_NMT_MaxCNNumber_U8 + 1];	// 1 entry is reserved to distinguish between full and empty
-	unsigned int m_uiWriteIdentReq;
-	unsigned int m_uiReadIdentReq;
-
-	// StatusRequest queue with CN node IDs
-	unsigned int m_auiQueueStatusReq[EPL_D_NMT_MaxCNNumber_U8 + 1];	// 1 entry is reserved to distinguish between full and empty
-	unsigned int m_uiWriteStatusReq;
-	unsigned int m_uiReadStatusReq;
-
-	unsigned int m_auiQueueCnRequests[254 * 2];
-	// first 254 entries represent the generic requests of the corresponding node
-	// second 254 entries represent the NMT requests of the corresponding node
-	unsigned int m_uiNextQueueCnRequest;
-	unsigned int m_uiNextRequestQueue;
-#endif
-
-} tEplDllkCalInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-// if no dynamic memory allocation shall be used
-// define structures statically
-static tEplDllkCalInstance EplDllkCalInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAddInstance()
-//
-// Description: add and initialize new instance of DLL CAL module
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAddInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	unsigned int fShbNewCreated;
-
-/*    ShbError = ShbCirAllocBuffer (EPL_DLLCAL_BUFFER_SIZE_RX, EPL_DLLCAL_BUFFER_ID_RX,
-        &EplDllkCalInstance_g.m_ShbInstanceRx, &fShbNewCreated);
-    // returns kShbOk, kShbOpenMismatch, kShbOutOfMem or kShbInvalidArg
-
-    if (ShbError != kShbOk)
-    {
-        Ret = kEplNoResource;
-    }
-*/
-	ShbError =
-	    ShbCirAllocBuffer(EPL_DLLCAL_BUFFER_SIZE_TX_NMT,
-			      EPL_DLLCAL_BUFFER_ID_TX_NMT,
-			      &EplDllkCalInstance_g.m_ShbInstanceTxNmt,
-			      &fShbNewCreated);
-	// returns kShbOk, kShbOpenMismatch, kShbOutOfMem or kShbInvalidArg
-
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-	}
-
-/*    ShbError = ShbCirSetSignalHandlerNewData (EplDllkCalInstance_g.m_ShbInstanceTxNmt, EplDllkCalTxNmtSignalHandler, kShbPriorityNormal);
-    // returns kShbOk, kShbAlreadySignaling or kShbInvalidArg
-
-    if (ShbError != kShbOk)
-    {
-        Ret = kEplNoResource;
-    }
-*/
-	ShbError =
-	    ShbCirAllocBuffer(EPL_DLLCAL_BUFFER_SIZE_TX_GEN,
-			      EPL_DLLCAL_BUFFER_ID_TX_GEN,
-			      &EplDllkCalInstance_g.m_ShbInstanceTxGen,
-			      &fShbNewCreated);
-	// returns kShbOk, kShbOpenMismatch, kShbOutOfMem or kShbInvalidArg
-
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-	}
-
-/*    ShbError = ShbCirSetSignalHandlerNewData (EplDllkCalInstance_g.m_ShbInstanceTxGen, EplDllkCalTxGenSignalHandler, kShbPriorityNormal);
-    // returns kShbOk, kShbAlreadySignaling or kShbInvalidArg
-
-    if (ShbError != kShbOk)
-    {
-        Ret = kEplNoResource;
-    }
-*/
-#else
-	EplDllkCalInstance_g.m_uiFrameSizeNmt = 0;
-	EplDllkCalInstance_g.m_uiFrameSizeGen = 0;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalDelInstance()
-//
-// Description: deletes instance of DLL CAL module
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalDelInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-
-/*    ShbError = ShbCirReleaseBuffer (EplDllkCalInstance_g.m_ShbInstanceRx);
-    if (ShbError != kShbOk)
-    {
-        Ret = kEplNoResource;
-    }
-    EplDllkCalInstance_g.m_ShbInstanceRx = NULL;
-*/
-	ShbError = ShbCirReleaseBuffer(EplDllkCalInstance_g.m_ShbInstanceTxNmt);
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-	}
-	EplDllkCalInstance_g.m_ShbInstanceTxNmt = NULL;
-
-	ShbError = ShbCirReleaseBuffer(EplDllkCalInstance_g.m_ShbInstanceTxGen);
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-	}
-	EplDllkCalInstance_g.m_ShbInstanceTxGen = NULL;
-
-#else
-	EplDllkCalInstance_g.m_uiFrameSizeNmt = 0;
-	EplDllkCalInstance_g.m_uiFrameSizeGen = 0;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalProcess
-//
-// Description: process the passed configuration
-//
-// Parameters:  pEvent_p                = event containing configuration options
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalProcess(tEplEvent * pEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	switch (pEvent_p->m_EventType) {
-	case kEplEventTypeDllkServFilter:
-		{
-			tEplDllCalAsndServiceIdFilter *pServFilter;
-
-			pServFilter =
-			    (tEplDllCalAsndServiceIdFilter *) pEvent_p->m_pArg;
-			Ret =
-			    EplDllkSetAsndServiceIdFilter(pServFilter->
-							  m_ServiceId,
-							  pServFilter->
-							  m_Filter);
-			break;
-		}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	case kEplEventTypeDllkIssueReq:
-		{
-			tEplDllCalIssueRequest *pIssueReq;
-
-			pIssueReq = (tEplDllCalIssueRequest *) pEvent_p->m_pArg;
-			Ret =
-			    EplDllkCalIssueRequest(pIssueReq->m_Service,
-						   pIssueReq->m_uiNodeId,
-						   pIssueReq->m_bSoaFlag1);
-			break;
-		}
-
-	case kEplEventTypeDllkAddNode:
-		{
-			tEplDllNodeInfo *pNodeInfo;
-
-			pNodeInfo = (tEplDllNodeInfo *) pEvent_p->m_pArg;
-			Ret = EplDllkAddNode(pNodeInfo);
-			break;
-		}
-
-	case kEplEventTypeDllkDelNode:
-		{
-			unsigned int *puiNodeId;
-
-			puiNodeId = (unsigned int *)pEvent_p->m_pArg;
-			Ret = EplDllkDeleteNode(*puiNodeId);
-			break;
-		}
-
-	case kEplEventTypeDllkSoftDelNode:
-		{
-			unsigned int *puiNodeId;
-
-			puiNodeId = (unsigned int *)pEvent_p->m_pArg;
-			Ret = EplDllkSoftDeleteNode(*puiNodeId);
-			break;
-		}
-#endif
-
-	case kEplEventTypeDllkIdentity:
-		{
-			tEplDllIdentParam *pIdentParam;
-
-			pIdentParam = (tEplDllIdentParam *) pEvent_p->m_pArg;
-			if (pIdentParam->m_uiSizeOfStruct > pEvent_p->m_uiSize) {
-				pIdentParam->m_uiSizeOfStruct =
-				    pEvent_p->m_uiSize;
-			}
-			Ret = EplDllkSetIdentity(pIdentParam);
-			break;
-		}
-
-	case kEplEventTypeDllkConfig:
-		{
-			tEplDllConfigParam *pConfigParam;
-
-			pConfigParam = (tEplDllConfigParam *) pEvent_p->m_pArg;
-			if (pConfigParam->m_uiSizeOfStruct > pEvent_p->m_uiSize) {
-				pConfigParam->m_uiSizeOfStruct =
-				    pEvent_p->m_uiSize;
-			}
-			Ret = EplDllkConfig(pConfigParam);
-			break;
-		}
-
-	default:
-		break;
-	}
-
-//Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncGetTxCount()
-//
-// Description: returns count of Tx frames of FIFO with highest priority
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncGetTxCount(tEplDllAsyncReqPriority * pPriority_p,
-				     unsigned int *puiCount_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	unsigned long ulFrameCount;
-
-	// get frame count of Tx FIFO with NMT request priority
-	ShbError =
-	    ShbCirGetReadBlockCount(EplDllkCalInstance_g.m_ShbInstanceTxNmt,
-				    &ulFrameCount);
-	// returns kShbOk, kShbInvalidArg
-
-	// error handling
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	if (ulFrameCount >
-	    EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountNmt) {
-		EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountNmt =
-		    ulFrameCount;
-	}
-
-	if (ulFrameCount != 0) {	// NMT requests are in queue
-		*pPriority_p = kEplDllAsyncReqPrioNmt;
-		*puiCount_p = (unsigned int)ulFrameCount;
-		goto Exit;
-	}
-	// get frame count of Tx FIFO with generic priority
-	ShbError =
-	    ShbCirGetReadBlockCount(EplDllkCalInstance_g.m_ShbInstanceTxGen,
-				    &ulFrameCount);
-	// returns kShbOk, kShbInvalidArg
-
-	// error handling
-	if (ShbError != kShbOk) {
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	if (ulFrameCount >
-	    EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountGen) {
-		EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountGen =
-		    ulFrameCount;
-	}
-
-	*pPriority_p = kEplDllAsyncReqPrioGeneric;
-	*puiCount_p = (unsigned int)ulFrameCount;
-
-      Exit:
-#else
-	if (EplDllkCalInstance_g.m_uiFrameSizeNmt > 0) {
-		*pPriority_p = kEplDllAsyncReqPrioNmt;
-		*puiCount_p = 1;
-	} else if (EplDllkCalInstance_g.m_uiFrameSizeGen > 0) {
-		*pPriority_p = kEplDllAsyncReqPrioGeneric;
-		*puiCount_p = 1;
-	} else {
-		*pPriority_p = kEplDllAsyncReqPrioGeneric;
-		*puiCount_p = 0;
-	}
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncGetTxFrame()
-//
-// Description: returns Tx frames from FIFO with specified priority
-//
-// Parameters:  pFrame_p                = IN: pointer to buffer
-//              puiFrameSize_p          = IN: max size of buffer
-//                                        OUT: actual size of frame
-//              Priority_p              = IN: priority
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncGetTxFrame(void *pFrame_p,
-				     unsigned int *puiFrameSize_p,
-				     tEplDllAsyncReqPriority Priority_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	unsigned long ulFrameSize;
-
-	switch (Priority_p) {
-	case kEplDllAsyncReqPrioNmt:	// NMT request priority
-		ShbError =
-		    ShbCirReadDataBlock(EplDllkCalInstance_g.m_ShbInstanceTxNmt,
-					(u8 *) pFrame_p, *puiFrameSize_p,
-					&ulFrameSize);
-		// returns kShbOk, kShbDataTruncated, kShbInvalidArg, kShbNoReadableData
-		break;
-
-	default:		// generic priority
-		ShbError =
-		    ShbCirReadDataBlock(EplDllkCalInstance_g.m_ShbInstanceTxGen,
-					(u8 *) pFrame_p, *puiFrameSize_p,
-					&ulFrameSize);
-		// returns kShbOk, kShbDataTruncated, kShbInvalidArg, kShbNoReadableData
-		break;
-
-	}
-
-	// error handling
-	if (ShbError != kShbOk) {
-		if (ShbError == kShbNoReadableData) {
-			Ret = kEplDllAsyncTxBufferEmpty;
-		} else {	// other error
-			Ret = kEplNoResource;
-		}
-		goto Exit;
-	}
-
-	*puiFrameSize_p = (unsigned int)ulFrameSize;
-
-      Exit:
-#else
-	switch (Priority_p) {
-	case kEplDllAsyncReqPrioNmt:	// NMT request priority
-		*puiFrameSize_p =
-		    min(*puiFrameSize_p, EplDllkCalInstance_g.m_uiFrameSizeNmt);
-		EPL_MEMCPY(pFrame_p, EplDllkCalInstance_g.m_abFrameNmt,
-			   *puiFrameSize_p);
-		EplDllkCalInstance_g.m_uiFrameSizeNmt = 0;
-		break;
-
-	default:		// generic priority
-		*puiFrameSize_p =
-		    min(*puiFrameSize_p, EplDllkCalInstance_g.m_uiFrameSizeGen);
-		EPL_MEMCPY(pFrame_p, EplDllkCalInstance_g.m_abFrameGen,
-			   *puiFrameSize_p);
-		EplDllkCalInstance_g.m_uiFrameSizeGen = 0;
-		break;
-	}
-
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncFrameReceived()
-//
-// Description: passes ASnd frame to receive FIFO.
-//              It will be called only for frames with registered AsndServiceIds.
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncFrameReceived(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkDlluCal;
-	Event.m_EventType = kEplEventTypeAsndRx;
-	Event.m_pArg = pFrameInfo_p->m_pFrame;
-	Event.m_uiSize = pFrameInfo_p->m_uiFrameSize;
-	// pass NetTime of frame to userspace
-	Event.m_NetTime = pFrameInfo_p->m_NetTime;
-
-	Ret = EplEventkPost(&Event);
-	if (Ret != kEplSuccessful) {
-		EplDllkCalInstance_g.m_Statistics.m_ulCurRxFrameCount++;
-	} else {
-		EplDllkCalInstance_g.m_Statistics.m_ulMaxRxFrameCount++;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncSend()
-//
-// Description: puts the given frame into the transmit FIFO with the specified
-//              priority.
-//
-// Parameters:  pFrameInfo_p            = frame info structure
-//              Priority_p              = priority
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncSend(tEplFrameInfo * pFrameInfo_p,
-			       tEplDllAsyncReqPriority Priority_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-
-	switch (Priority_p) {
-	case kEplDllAsyncReqPrioNmt:	// NMT request priority
-		ShbError =
-		    ShbCirWriteDataBlock(EplDllkCalInstance_g.
-					 m_ShbInstanceTxNmt,
-					 pFrameInfo_p->m_pFrame,
-					 pFrameInfo_p->m_uiFrameSize);
-		// returns kShbOk, kShbExceedDataSizeLimit, kShbBufferFull, kShbInvalidArg
-		break;
-
-	default:		// generic priority
-		ShbError =
-		    ShbCirWriteDataBlock(EplDllkCalInstance_g.
-					 m_ShbInstanceTxGen,
-					 pFrameInfo_p->m_pFrame,
-					 pFrameInfo_p->m_uiFrameSize);
-		// returns kShbOk, kShbExceedDataSizeLimit, kShbBufferFull, kShbInvalidArg
-		break;
-
-	}
-
-	// error handling
-	switch (ShbError) {
-	case kShbOk:
-		break;
-
-	case kShbExceedDataSizeLimit:
-		Ret = kEplDllAsyncTxBufferFull;
-		break;
-
-	case kShbBufferFull:
-		Ret = kEplDllAsyncTxBufferFull;
-		break;
-
-	case kShbInvalidArg:
-	default:
-		Ret = kEplNoResource;
-		break;
-	}
-
-#else
-
-	switch (Priority_p) {
-	case kEplDllAsyncReqPrioNmt:	// NMT request priority
-		if (EplDllkCalInstance_g.m_uiFrameSizeNmt == 0) {
-			EPL_MEMCPY(EplDllkCalInstance_g.m_abFrameNmt,
-				   pFrameInfo_p->m_pFrame,
-				   pFrameInfo_p->m_uiFrameSize);
-			EplDllkCalInstance_g.m_uiFrameSizeNmt =
-			    pFrameInfo_p->m_uiFrameSize;
-		} else {
-			Ret = kEplDllAsyncTxBufferFull;
-			goto Exit;
-		}
-		break;
-
-	default:		// generic priority
-		if (EplDllkCalInstance_g.m_uiFrameSizeGen == 0) {
-			EPL_MEMCPY(EplDllkCalInstance_g.m_abFrameGen,
-				   pFrameInfo_p->m_pFrame,
-				   pFrameInfo_p->m_uiFrameSize);
-			EplDllkCalInstance_g.m_uiFrameSizeGen =
-			    pFrameInfo_p->m_uiFrameSize;
-		} else {
-			Ret = kEplDllAsyncTxBufferFull;
-			goto Exit;
-		}
-		break;
-	}
-
-#endif
-
-	// post event to DLL
-	Event.m_EventSink = kEplEventSinkDllk;
-	Event.m_EventType = kEplEventTypeDllkFillTx;
-	EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-	Event.m_pArg = &Priority_p;
-	Event.m_uiSize = sizeof(Priority_p);
-	Ret = EplEventkPost(&Event);
-
-#ifdef EPL_NO_FIFO
-      Exit:
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncClearBuffer()
-//
-// Description: clears the transmit buffer
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncClearBuffer(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-
-	ShbError =
-	    ShbCirResetBuffer(EplDllkCalInstance_g.m_ShbInstanceTxNmt, 1000,
-			      NULL);
-	ShbError =
-	    ShbCirResetBuffer(EplDllkCalInstance_g.m_ShbInstanceTxGen, 1000,
-			      NULL);
-
-#else
-	EplDllkCalInstance_g.m_uiFrameSizeNmt = 0;
-	EplDllkCalInstance_g.m_uiFrameSizeGen = 0;
-#endif
-
-//    EPL_MEMSET(&EplDllkCalInstance_g.m_Statistics, 0, sizeof (tEplDllkCalStatistics));
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncClearQueues()
-//
-// Description: clears the transmit buffer
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-tEplKernel EplDllkCalAsyncClearQueues(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// clear MN asynchronous queues
-	EplDllkCalInstance_g.m_uiNextQueueCnRequest = 0;
-	EplDllkCalInstance_g.m_uiNextRequestQueue = 0;
-	EplDllkCalInstance_g.m_uiReadIdentReq = 0;
-	EplDllkCalInstance_g.m_uiWriteIdentReq = 0;
-	EplDllkCalInstance_g.m_uiReadStatusReq = 0;
-	EplDllkCalInstance_g.m_uiWriteStatusReq = 0;
-
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalGetStatistics()
-//
-// Description: returns statistics of the asynchronous queues.
-//
-// Parameters:  ppStatistics            = statistics structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalGetStatistics(tEplDllkCalStatistics ** ppStatistics)
-{
-	tEplKernel Ret = kEplSuccessful;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-
-	ShbError =
-	    ShbCirGetReadBlockCount(EplDllkCalInstance_g.m_ShbInstanceTxNmt,
-				    &EplDllkCalInstance_g.m_Statistics.
-				    m_ulCurTxFrameCountNmt);
-	ShbError =
-	    ShbCirGetReadBlockCount(EplDllkCalInstance_g.m_ShbInstanceTxGen,
-				    &EplDllkCalInstance_g.m_Statistics.
-				    m_ulCurTxFrameCountGen);
-//    ShbError = ShbCirGetReadBlockCount (EplDllkCalInstance_g.m_ShbInstanceRx, &EplDllkCalInstance_g.m_Statistics.m_ulCurRxFrameCount);
-
-#else
-	if (EplDllkCalInstance_g.m_uiFrameSizeNmt > 0) {
-		EplDllkCalInstance_g.m_Statistics.m_ulCurTxFrameCountNmt = 1;
-	} else {
-		EplDllkCalInstance_g.m_Statistics.m_ulCurTxFrameCountNmt = 0;
-	}
-	if (EplDllkCalInstance_g.m_uiFrameSizeGen > 0) {
-		EplDllkCalInstance_g.m_Statistics.m_ulCurTxFrameCountGen = 1;
-	} else {
-		EplDllkCalInstance_g.m_Statistics.m_ulCurTxFrameCountGen = 0;
-	}
-#endif
-
-	*ppStatistics = &EplDllkCalInstance_g.m_Statistics;
-	return Ret;
-}
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalIssueRequest()
-//
-// Description: issues a StatusRequest or a IdentRequest to the specified node.
-//
-// Parameters:  Service_p               = request service ID
-//              uiNodeId_p              = node ID
-//              bSoaFlag1_p             = flag1 for this node (transmit in SoA and PReq)
-//                                        If 0xFF this flag is ignored.
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalIssueRequest(tEplDllReqServiceId Service_p,
-				  unsigned int uiNodeId_p, u8 bSoaFlag1_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (bSoaFlag1_p != 0xFF) {
-		Ret = EplDllkSetFlag1OfNode(uiNodeId_p, bSoaFlag1_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-	// add node to appropriate request queue
-	switch (Service_p) {
-	case kEplDllReqServiceIdent:
-		{
-			if (((EplDllkCalInstance_g.m_uiWriteIdentReq +
-			      1) %
-			     tabentries(EplDllkCalInstance_g.
-					m_auiQueueIdentReq))
-			    == EplDllkCalInstance_g.m_uiReadIdentReq) {	// queue is full
-				Ret = kEplDllAsyncTxBufferFull;
-				goto Exit;
-			}
-			EplDllkCalInstance_g.
-			    m_auiQueueIdentReq[EplDllkCalInstance_g.
-					       m_uiWriteIdentReq] = uiNodeId_p;
-			EplDllkCalInstance_g.m_uiWriteIdentReq =
-			    (EplDllkCalInstance_g.m_uiWriteIdentReq +
-			     1) %
-			    tabentries(EplDllkCalInstance_g.m_auiQueueIdentReq);
-			break;
-		}
-
-	case kEplDllReqServiceStatus:
-		{
-			if (((EplDllkCalInstance_g.m_uiWriteStatusReq +
-			      1) %
-			     tabentries(EplDllkCalInstance_g.
-					m_auiQueueStatusReq))
-			    == EplDllkCalInstance_g.m_uiReadStatusReq) {	// queue is full
-				Ret = kEplDllAsyncTxBufferFull;
-				goto Exit;
-			}
-			EplDllkCalInstance_g.
-			    m_auiQueueStatusReq[EplDllkCalInstance_g.
-						m_uiWriteStatusReq] =
-			    uiNodeId_p;
-			EplDllkCalInstance_g.m_uiWriteStatusReq =
-			    (EplDllkCalInstance_g.m_uiWriteStatusReq +
-			     1) %
-			    tabentries(EplDllkCalInstance_g.
-				       m_auiQueueStatusReq);
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplDllInvalidParam;
-			goto Exit;
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncGetSoaRequest()
-//
-// Description: returns next request for SoA. This function is called by DLLk module.
-//
-// Parameters:  pReqServiceId_p         = pointer to request service ID
-//                                        IN: available request for MN NMT or generic request queue (Flag2.PR)
-//                                            or kEplDllReqServiceNo if queues are empty
-//                                        OUT: next request
-//              puiNodeId_p             = OUT: pointer to node ID of next request
-//                                             = EPL_C_ADR_INVALID, if request is self addressed
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncGetSoaRequest(tEplDllReqServiceId * pReqServiceId_p,
-					unsigned int *puiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiCount;
-
-//    *pReqServiceId_p = kEplDllReqServiceNo;
-
-	for (uiCount = EPL_DLLKCAL_MAX_QUEUES; uiCount > 0; uiCount--) {
-		switch (EplDllkCalInstance_g.m_uiNextRequestQueue) {
-		case 0:
-			{	// CnGenReq
-				for (;
-				     EplDllkCalInstance_g.
-				     m_uiNextQueueCnRequest <
-				     (tabentries
-				      (EplDllkCalInstance_g.
-				       m_auiQueueCnRequests) / 2);
-				     EplDllkCalInstance_g.
-				     m_uiNextQueueCnRequest++) {
-					if (EplDllkCalInstance_g.m_auiQueueCnRequests[EplDllkCalInstance_g.m_uiNextQueueCnRequest] > 0) {	// non empty queue found
-						// remove one request from queue
-						EplDllkCalInstance_g.
-						    m_auiQueueCnRequests
-						    [EplDllkCalInstance_g.
-						     m_uiNextQueueCnRequest]--;
-						*puiNodeId_p =
-						    EplDllkCalInstance_g.
-						    m_uiNextQueueCnRequest + 1;
-						*pReqServiceId_p =
-						    kEplDllReqServiceUnspecified;
-						EplDllkCalInstance_g.
-						    m_uiNextQueueCnRequest++;
-						if (EplDllkCalInstance_g.m_uiNextQueueCnRequest >= (tabentries(EplDllkCalInstance_g.m_auiQueueCnRequests) / 2)) {	// last node reached
-							// continue with CnNmtReq queue at next SoA
-							EplDllkCalInstance_g.
-							    m_uiNextRequestQueue
-							    = 1;
-						}
-						goto Exit;
-					}
-				}
-				// all CnGenReq queues are empty -> continue with CnNmtReq queue
-				EplDllkCalInstance_g.m_uiNextRequestQueue = 1;
-				break;
-			}
-
-		case 1:
-			{	// CnNmtReq
-				for (;
-				     EplDllkCalInstance_g.
-				     m_uiNextQueueCnRequest <
-				     tabentries(EplDllkCalInstance_g.
-						m_auiQueueCnRequests);
-				     EplDllkCalInstance_g.
-				     m_uiNextQueueCnRequest++) {
-					if (EplDllkCalInstance_g.m_auiQueueCnRequests[EplDllkCalInstance_g.m_uiNextQueueCnRequest] > 0) {	// non empty queue found
-						// remove one request from queue
-						EplDllkCalInstance_g.
-						    m_auiQueueCnRequests
-						    [EplDllkCalInstance_g.
-						     m_uiNextQueueCnRequest]--;
-						*puiNodeId_p =
-						    EplDllkCalInstance_g.
-						    m_uiNextQueueCnRequest + 1 -
-						    (tabentries
-						     (EplDllkCalInstance_g.
-						      m_auiQueueCnRequests) /
-						     2);
-						*pReqServiceId_p =
-						    kEplDllReqServiceNmtRequest;
-						EplDllkCalInstance_g.
-						    m_uiNextQueueCnRequest++;
-						if (EplDllkCalInstance_g.m_uiNextQueueCnRequest > tabentries(EplDllkCalInstance_g.m_auiQueueCnRequests)) {	// last node reached
-							// restart CnGenReq queue
-							EplDllkCalInstance_g.
-							    m_uiNextQueueCnRequest
-							    = 0;
-							// continue with MnGenReq queue at next SoA
-							EplDllkCalInstance_g.
-							    m_uiNextRequestQueue
-							    = 2;
-						}
-						goto Exit;
-					}
-				}
-				// restart CnGenReq queue
-				EplDllkCalInstance_g.m_uiNextQueueCnRequest = 0;
-				// all CnNmtReq queues are empty -> continue with MnGenReq queue
-				EplDllkCalInstance_g.m_uiNextRequestQueue = 2;
-				break;
-			}
-
-		case 2:
-			{	// MnNmtReq and MnGenReq
-				// next queue will be MnIdentReq queue
-				EplDllkCalInstance_g.m_uiNextRequestQueue = 3;
-				if (*pReqServiceId_p != kEplDllReqServiceNo) {
-					*puiNodeId_p = EPL_C_ADR_INVALID;	// DLLk must exchange this with the actual node ID
-					goto Exit;
-				}
-				break;
-			}
-
-		case 3:
-			{	// MnIdentReq
-				// next queue will be MnStatusReq queue
-				EplDllkCalInstance_g.m_uiNextRequestQueue = 4;
-				if (EplDllkCalInstance_g.m_uiReadIdentReq != EplDllkCalInstance_g.m_uiWriteIdentReq) {	// queue is not empty
-					*puiNodeId_p =
-					    EplDllkCalInstance_g.
-					    m_auiQueueIdentReq
-					    [EplDllkCalInstance_g.
-					     m_uiReadIdentReq];
-					EplDllkCalInstance_g.m_uiReadIdentReq =
-					    (EplDllkCalInstance_g.
-					     m_uiReadIdentReq +
-					     1) %
-					    tabentries(EplDllkCalInstance_g.
-						       m_auiQueueIdentReq);
-					*pReqServiceId_p =
-					    kEplDllReqServiceIdent;
-					goto Exit;
-				}
-				break;
-			}
-
-		case 4:
-			{	// MnStatusReq
-				// next queue will be CnGenReq queue
-				EplDllkCalInstance_g.m_uiNextRequestQueue = 0;
-				if (EplDllkCalInstance_g.m_uiReadStatusReq != EplDllkCalInstance_g.m_uiWriteStatusReq) {	// queue is not empty
-					*puiNodeId_p =
-					    EplDllkCalInstance_g.
-					    m_auiQueueStatusReq
-					    [EplDllkCalInstance_g.
-					     m_uiReadStatusReq];
-					EplDllkCalInstance_g.m_uiReadStatusReq =
-					    (EplDllkCalInstance_g.
-					     m_uiReadStatusReq +
-					     1) %
-					    tabentries(EplDllkCalInstance_g.
-						       m_auiQueueStatusReq);
-					*pReqServiceId_p =
-					    kEplDllReqServiceStatus;
-					goto Exit;
-				}
-				break;
-			}
-
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDllkCalAsyncSetPendingRequests()
-//
-// Description: sets the pending asynchronous frame requests of the specified node.
-//              This will add the node to the asynchronous request scheduler.
-//
-// Parameters:  uiNodeId_p              = node ID
-//              AsyncReqPrio_p          = asynchronous request priority
-//              uiCount_p               = count of asynchronous frames
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDllkCalAsyncSetPendingRequests(unsigned int uiNodeId_p,
-					     tEplDllAsyncReqPriority
-					     AsyncReqPrio_p,
-					     unsigned int uiCount_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// add node to appropriate request queue
-	switch (AsyncReqPrio_p) {
-	case kEplDllAsyncReqPrioNmt:
-		{
-			uiNodeId_p--;
-			if (uiNodeId_p >=
-			    (tabentries
-			     (EplDllkCalInstance_g.m_auiQueueCnRequests) / 2)) {
-				Ret = kEplDllInvalidParam;
-				goto Exit;
-			}
-			uiNodeId_p +=
-			    tabentries(EplDllkCalInstance_g.
-				       m_auiQueueCnRequests) / 2;
-			EplDllkCalInstance_g.m_auiQueueCnRequests[uiNodeId_p] =
-			    uiCount_p;
-			break;
-		}
-
-	default:
-		{
-			uiNodeId_p--;
-			if (uiNodeId_p >=
-			    (tabentries
-			     (EplDllkCalInstance_g.m_auiQueueCnRequests) / 2)) {
-				Ret = kEplDllInvalidParam;
-				goto Exit;
-			}
-			EplDllkCalInstance_g.m_auiQueueCnRequests[uiNodeId_p] =
-			    uiCount_p;
-			break;
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//  Callback handler for new data signaling
-//---------------------------------------------------------------------------
-
-#ifndef EPL_NO_FIFO
-/*static void  EplDllkCalTxNmtSignalHandler (
-    tShbInstance pShbRxInstance_p,
-    unsigned long ulDataSize_p)
-{
-tEplKernel      Ret = kEplSuccessful;
-tEplEvent       Event;
-tEplDllAsyncReqPriority Priority;
-#ifndef EPL_NO_FIFO
-tShbError   ShbError;
-unsigned long   ulBlockCount;
-
-    ShbError = ShbCirGetReadBlockCount (EplDllkCalInstance_g.m_ShbInstanceTxNmt, &ulBlockCount);
-    if (ulBlockCount > EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountNmt)
-    {
-        EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountNmt = ulBlockCount;
-    }
-
-#endif
-
-    // post event to DLL
-    Priority = kEplDllAsyncReqPrioNmt;
-    Event.m_EventSink = kEplEventSinkDllk;
-    Event.m_EventType = kEplEventTypeDllkFillTx;
-    EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-    Event.m_pArg = &Priority;
-    Event.m_uiSize = sizeof(Priority);
-    Ret = EplEventkPost(&Event);
-
-}
-
-static void  EplDllkCalTxGenSignalHandler (
-    tShbInstance pShbRxInstance_p,
-    unsigned long ulDataSize_p)
-{
-tEplKernel      Ret = kEplSuccessful;
-tEplEvent       Event;
-tEplDllAsyncReqPriority Priority;
-#ifndef EPL_NO_FIFO
-tShbError   ShbError;
-unsigned long   ulBlockCount;
-
-    ShbError = ShbCirGetReadBlockCount (EplDllkCalInstance_g.m_ShbInstanceTxGen, &ulBlockCount);
-    if (ulBlockCount > EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountGen)
-    {
-        EplDllkCalInstance_g.m_Statistics.m_ulMaxTxFrameCountGen = ulBlockCount;
-    }
-
-#endif
-
-    // post event to DLL
-    Priority = kEplDllAsyncReqPrioGeneric;
-    Event.m_EventSink = kEplEventSinkDllk;
-    Event.m_EventType = kEplEventTypeDllkFillTx;
-    EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-    Event.m_pArg = &Priority;
-    Event.m_uiSize = sizeof(Priority);
-    Ret = EplEventkPost(&Event);
-
-}
-*/
-#endif
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplDlluCal.c b/drivers/staging/epl/EplDlluCal.c
deleted file mode 100644
index f96fe84..0000000
--- a/drivers/staging/epl/EplDlluCal.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for DLL Communication Abstraction Layer module in EPL user part
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDlluCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.7 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "user/EplDlluCal.h"
-#include "user/EplEventu.h"
-
-#include "EplDllCal.h"
-
-// include only if direct call between user- and kernelspace is enabled
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-#include "kernel/EplDllkCal.h"
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplDlluCal                                          */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplDlluCbAsnd m_apfnDlluCbAsnd[EPL_DLL_MAX_ASND_SERVICE_ID];
-
-} tEplDlluCalInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-// if no dynamic memory allocation shall be used
-// define structures statically
-static tEplDlluCalInstance EplDlluCalInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDlluCalSetAsndServiceIdFilter(tEplDllAsndServiceId
-						   ServiceId_p,
-						   tEplDllAsndFilter Filter_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalAddInstance()
-//
-// Description: add and initialize new instance of DLL CAL module
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalAddInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplDlluCalInstance_g, 0, sizeof(EplDlluCalInstance_g));
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalDelInstance()
-//
-// Description: deletes an instance of DLL CAL module
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalDelInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplDlluCalInstance_g, 0, sizeof(EplDlluCalInstance_g));
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalProcess
-//
-// Description: process the passed asynch frame
-//
-// Parameters:  pEvent_p                = event containing frame to be processed
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalProcess(tEplEvent * pEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplMsgType MsgType;
-	unsigned int uiAsndServiceId;
-	tEplFrameInfo FrameInfo;
-
-	if (pEvent_p->m_EventType == kEplEventTypeAsndRx) {
-		FrameInfo.m_pFrame = (tEplFrame *) pEvent_p->m_pArg;
-		FrameInfo.m_uiFrameSize = pEvent_p->m_uiSize;
-		// extract NetTime
-		FrameInfo.m_NetTime = pEvent_p->m_NetTime;
-
-		MsgType =
-		    (tEplMsgType) AmiGetByteFromLe(&FrameInfo.m_pFrame->
-						   m_le_bMessageType);
-		if (MsgType != kEplMsgTypeAsnd) {
-			Ret = kEplInvalidOperation;
-			goto Exit;
-		}
-
-		uiAsndServiceId =
-		    (unsigned int)AmiGetByteFromLe(&FrameInfo.m_pFrame->m_Data.
-						   m_Asnd.m_le_bServiceId);
-		if (uiAsndServiceId < EPL_DLL_MAX_ASND_SERVICE_ID) {	// ASnd service ID is valid
-			if (EplDlluCalInstance_g.m_apfnDlluCbAsnd[uiAsndServiceId] != NULL) {	// handler was registered
-				Ret =
-				    EplDlluCalInstance_g.
-				    m_apfnDlluCbAsnd[uiAsndServiceId]
-				    (&FrameInfo);
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalRegAsndService()
-//
-// Description: registers the specified handler for the specified
-//              AsndServiceId with the specified node ID filter.
-//
-// Parameters:  ServiceId_p             = ASnd Service ID
-//              pfnDlluCbAsnd_p         = callback function
-//              Filter_p                = node ID filter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalRegAsndService(tEplDllAsndServiceId ServiceId_p,
-				    tEplDlluCbAsnd pfnDlluCbAsnd_p,
-				    tEplDllAsndFilter Filter_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (ServiceId_p < tabentries(EplDlluCalInstance_g.m_apfnDlluCbAsnd)) {
-		// memorize function pointer
-		EplDlluCalInstance_g.m_apfnDlluCbAsnd[ServiceId_p] =
-		    pfnDlluCbAsnd_p;
-
-		if (pfnDlluCbAsnd_p == NULL) {	// close filter
-			Filter_p = kEplDllAsndFilterNone;
-		}
-		// set filter in DLL module in kernel part
-		Ret = EplDlluCalSetAsndServiceIdFilter(ServiceId_p, Filter_p);
-
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalAsyncSend()
-//
-// Description: sends the frame with the specified priority.
-//
-// Parameters:  pFrameInfo_p            = frame
-//                                        m_uiFrameSize does not include the
-//                                        ethernet header (14 bytes)
-//              Priority_p              = priority
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalAsyncSend(tEplFrameInfo * pFrameInfo_p,
-			       tEplDllAsyncReqPriority Priority_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-	pFrameInfo_p->m_uiFrameSize += 14;	// add size of ethernet header
-	Ret = EplDllkCalAsyncSend(pFrameInfo_p, Priority_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalIssueRequest()
-//
-// Description: issues a StatusRequest or a IdentRequest to the specified node.
-//
-// Parameters:  Service_p               = request service ID
-//              uiNodeId_p              = node ID
-//              bSoaFlag1_p             = flag1 for this node (transmit in SoA and PReq)
-//                                        If 0xFF this flag is ignored.
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalIssueRequest(tEplDllReqServiceId Service_p,
-				  unsigned int uiNodeId_p, u8 bSoaFlag1_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// add node to appropriate request queue
-	switch (Service_p) {
-	case kEplDllReqServiceIdent:
-	case kEplDllReqServiceStatus:
-		{
-			tEplEvent Event;
-			tEplDllCalIssueRequest IssueReq;
-
-			Event.m_EventSink = kEplEventSinkDllkCal;
-			Event.m_EventType = kEplEventTypeDllkIssueReq;
-			IssueReq.m_Service = Service_p;
-			IssueReq.m_uiNodeId = uiNodeId_p;
-			IssueReq.m_bSoaFlag1 = bSoaFlag1_p;
-			Event.m_pArg = &IssueReq;
-			Event.m_uiSize = sizeof(IssueReq);
-
-			Ret = EplEventuPost(&Event);
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplDllInvalidParam;
-			goto Exit;
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalAddNode()
-//
-// Description: adds the specified node to the isochronous phase.
-//
-// Parameters:  pNodeInfo_p             = pointer of node info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalAddNode(tEplDllNodeInfo * pNodeInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkDllkCal;
-	Event.m_EventType = kEplEventTypeDllkAddNode;
-	Event.m_pArg = pNodeInfo_p;
-	Event.m_uiSize = sizeof(tEplDllNodeInfo);
-
-	Ret = EplEventuPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalDeleteNode()
-//
-// Description: removes the specified node from the isochronous phase.
-//
-// Parameters:  uiNodeId_p              = node ID
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalDeleteNode(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkDllkCal;
-	Event.m_EventType = kEplEventTypeDllkDelNode;
-	Event.m_pArg = &uiNodeId_p;
-	Event.m_uiSize = sizeof(uiNodeId_p);
-
-	Ret = EplEventuPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalSoftDeleteNode()
-//
-// Description: removes the specified node softly from the isochronous phase.
-//
-// Parameters:  uiNodeId_p              = node ID
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplDlluCalSoftDeleteNode(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkDllkCal;
-	Event.m_EventType = kEplEventTypeDllkSoftDelNode;
-	Event.m_pArg = &uiNodeId_p;
-	Event.m_uiSize = sizeof(uiNodeId_p);
-
-	Ret = EplEventuPost(&Event);
-
-	return Ret;
-}
-
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplDlluCalSetAsndServiceIdFilter()
-//
-// Description: forwards call to EplDllkSetAsndServiceIdFilter() in kernel part
-//
-// Parameters:  ServiceId_p             = ASnd Service ID
-//              Filter_p                = node ID filter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplDlluCalSetAsndServiceIdFilter(tEplDllAsndServiceId
-						   ServiceId_p,
-						   tEplDllAsndFilter Filter_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-	tEplDllCalAsndServiceIdFilter ServFilter;
-
-	Event.m_EventSink = kEplEventSinkDllkCal;
-	Event.m_EventType = kEplEventTypeDllkServFilter;
-	ServFilter.m_ServiceId = ServiceId_p;
-	ServFilter.m_Filter = Filter_p;
-	Event.m_pArg = &ServFilter;
-	Event.m_uiSize = sizeof(ServFilter);
-
-	Ret = EplEventuPost(&Event);
-
-	return Ret;
-}
-
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplErrDef.h b/drivers/staging/epl/EplErrDef.h
deleted file mode 100644
index 2aee12c..0000000
--- a/drivers/staging/epl/EplErrDef.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  definitions for all EPL-function return codes
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplErrDef.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.9 $  $Date: 2008/06/23 14:56:33 $
-
-                $State: Exp $
-
-                Build Environment:
-                    all
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2005/12/05 -as:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_ERRORDEF_H_
-#define _EPL_ERRORDEF_H_
-
-//---------------------------------------------------------------------------
-// return codes
-//---------------------------------------------------------------------------
-
-typedef enum {
-	// area for generic errors 0x0000 - 0x000F
-	kEplSuccessful = 0x0000,	// no error/successful run
-	kEplIllegalInstance = 0x0001,	// the called Instanz does not exist
-	kEplInvalidInstanceParam = 0x0002,	//
-	kEplNoFreeInstance = 0x0003,	// XxxAddInstance was called but no free instance is available
-	kEplWrongSignature = 0x0004,	// wrong signature while writing to object 0x1010 or 0x1011
-	kEplInvalidOperation = 0x0005,	// operation not allowed in this situation
-	kEplInvalidNodeId = 0x0007,	// invalid NodeId was specified
-	kEplNoResource = 0x0008,	// resource could not be created (Windows, PxROS, ...)
-	kEplShutdown = 0x0009,	// stack is shutting down
-	kEplReject = 0x000A,	// reject the subsequent command
-
-	// area for EDRV module 0x0010 - 0x001F
-//    kEplEdrvNoFrame             = 0x0010,       // no CAN message was received
-//    kEplEdrvMsgHigh             = 0x0011,       // CAN message with high priority was received
-//    kEplEdrvMsgLow              = 0x0012,       // CAN message with low priority was received
-	kEplEdrvInitError = 0x0013,	// initialisation error
-	kEplEdrvNoFreeBufEntry = 0x0014,	// no free entry in internal buffer table for Tx frames
-	kEplEdrvBufNotExisting = 0x0015,	// specified Tx buffer does not exist
-//    kEplEdrvNoFreeChannel       = 0x0014,       // CAN controller has not a free channel
-//    kEplEdrvTxBuffHighOverrun   = 0x0015,       // buffer for high priority CAN transmit messages has overrun
-//    kEplEdrvTxBuffLowOverrun    = 0x0016,       // buffer for low priority CAN transmit messages has overrun
-//    kEplEdrvIllegalBdi          = 0x0017,       // unsupported baudrate within baudrate table
-//    kEplEdrvBusy                = 0x0018,       // remote frame can not be updated because no bus contact or CAN
-	// transmission is activ
-//    kEplEdrvInvalidDriverType   = 0x0019,       // (PC: Windows or Linux) invalid driver type
-//    kEplEdrvDriverNotFound      = 0x001A,       // (PC: Windows or Linux) driver (DLL) could not be found
-//    kEplEdrvInvalidBaseAddress  = 0x001B,       // (PC: Windows or Linux) driver could not found the CAN controller
-//    kEplEdrvInvalidParam        = 0x001C,       // invalid param in function call
-
-	// area for COB module 0x0020 - 0x002F
-/*    kEplCobNoFreeEntry          = 0x0020,       // no free entry in RX- or TX-COB table
-    kEplCobAlreadyExist         = 0x0021,       // COB-ID already exists in RX- resp. TX-COB table
-    */
-	kEplDllIllegalHdl = 0x0022,	// illegal handle for a TxFrame was passed
-	kEplDllCbAsyncRegistered = 0x0023,	// handler for non-EPL frames was already registered before
-//    kEplDllAsyncRxBufferFull    = 0x0024,       // receive buffer for asynchronous frames is full
-	kEplDllAsyncTxBufferEmpty = 0x0025,	// transmit buffer for asynchronous frames is empty
-	kEplDllAsyncTxBufferFull = 0x0026,	// transmit buffer for asynchronous frames is full
-	kEplDllNoNodeInfo = 0x0027,	// MN: too less space in the internal node info structure
-	kEplDllInvalidParam = 0x0028,	// invalid parameters passed to function
-	kEplDllTxBufNotReady = 0x002E,	// TxBuffer (e.g. for PReq) is not ready yet
-	kEplDllTxFrameInvalid = 0x002F,	// TxFrame (e.g. for PReq) is invalid or does not exist
-/*    kEplCobIllegalCanId         = 0x0023,       // COB-ID is not allowed (like 0x000 is reserved for NMT, ...)
-    kEplCobInvalidCanId         = 0x0024,       // COB-ID is switched off
-    kEplCobCdrvStateSet         = 0x0025,       // at least one bit of CAN driver state is set
-    kEplCobNoFreeEntryHighBuf   = 0x0026,       // no free entry in high priotity RX- or TX-COB table
-    kEplCobOwnId                = 0x0027,       // COB-ID already exists in own module which calls CobDefine() or CobCheck()
-*/
-	// area for OBD module 0x0030 - 0x003F
-	kEplObdIllegalPart = 0x0030,	// unknown OD part
-	kEplObdIndexNotExist = 0x0031,	// object index does not exist in OD
-	kEplObdSubindexNotExist = 0x0032,	// subindex does not exist in object index
-	kEplObdReadViolation = 0x0033,	// read access to a write-only object
-	kEplObdWriteViolation = 0x0034,	// write access to a read-only object
-	kEplObdAccessViolation = 0x0035,	// access not allowed
-	kEplObdUnknownObjectType = 0x0036,	// object type not defined/known
-	kEplObdVarEntryNotExist = 0x0037,	// object does not contain VarEntry structure
-	kEplObdValueTooLow = 0x0038,	// value to write to an object is too low
-	kEplObdValueTooHigh = 0x0039,	// value to write to an object is too high
-	kEplObdValueLengthError = 0x003A,	// value to write is to long or to short
-//    kEplObdIllegalFloat         = 0x003B,       // illegal float variable
-//    kEplObdWrongOdBuilderKey    = 0x003F,       // OD was generated with demo version of tool ODBuilder
-
-	// area for NMT module 0x0040 - 0x004F
-	kEplNmtUnknownCommand = 0x0040,	// unknown NMT command
-	kEplNmtInvalidFramePointer = 0x0041,	// pointer to the frame is not valid
-	kEplNmtInvalidEvent = 0x0042,	// invalid event send to NMT-modul
-	kEplNmtInvalidState = 0x0043,	// unknown state in NMT-State-Maschine
-	kEplNmtInvalidParam = 0x0044,	// invalid parameters specified
-
-	// area for SDO/UDP module 0x0050 - 0x005F
-	kEplSdoUdpMissCb = 0x0050,	// missing callback-function pointer during inti of
-	// module
-	kEplSdoUdpNoSocket = 0x0051,	// error during init of socket
-	kEplSdoUdpSocketError = 0x0052,	// error during usage of socket
-	kEplSdoUdpThreadError = 0x0053,	// error during start of listen thread
-	kEplSdoUdpNoFreeHandle = 0x0054,	// no free connection handle for Udp
-	kEplSdoUdpSendError = 0x0055,	// Error during send of frame
-	kEplSdoUdpInvalidHdl = 0x0056,	// the connection handle is invalid
-
-	// area for SDO Sequence layer module 0x0060 - 0x006F
-	kEplSdoSeqMissCb = 0x0060,	// no callback-function assign
-	kEplSdoSeqNoFreeHandle = 0x0061,	// no free handle for connection
-	kEplSdoSeqInvalidHdl = 0x0062,	// invalid handle in SDO sequence layer
-	kEplSdoSeqUnsupportedProt = 0x0063,	// unsupported Protocol selected
-	kEplSdoSeqNoFreeHistory = 0x0064,	// no free entry in history
-	kEplSdoSeqFrameSizeError = 0x0065,	// the size of the frames is not correct
-	kEplSdoSeqRequestAckNeeded = 0x0066,	// indeicates that the history buffer is full
-	// and a ack request is needed
-	kEplSdoSeqInvalidFrame = 0x0067,	// frame not valid
-	kEplSdoSeqConnectionBusy = 0x0068,	// connection is busy -> retry later
-	kEplSdoSeqInvalidEvent = 0x0069,	// invalid event received
-
-	// area for SDO Command Layer Module 0x0070 - 0x007F
-	kEplSdoComUnsupportedProt = 0x0070,	// unsupported Protocol selected
-	kEplSdoComNoFreeHandle = 0x0071,	// no free handle for connection
-	kEplSdoComInvalidServiceType = 0x0072,	// invalid SDO service type specified
-	kEplSdoComInvalidHandle = 0x0073,	// handle invalid
-	kEplSdoComInvalidSendType = 0x0074,	// the stated to of frame to send is
-	// not possible
-	kEplSdoComNotResponsible = 0x0075,	// internal error: command layer handle is
-	// not responsible for this event from sequence layer
-	kEplSdoComHandleExists = 0x0076,	// handle to same node already exists
-	kEplSdoComHandleBusy = 0x0077,	// transfer via this handle is already running
-	kEplSdoComInvalidParam = 0x0078,	// invalid parameters passed to function
-
-	// area for EPL Event-Modul 0x0080 - 0x008F
-	kEplEventUnknownSink = 0x0080,	// unknown sink for event
-	kEplEventPostError = 0x0081,	// error during post of event
-
-	// area for EPL Timer Modul 0x0090 - 0x009F
-	kEplTimerInvalidHandle = 0x0090,	// invalid handle for timer
-	kEplTimerNoTimerCreated = 0x0091,	// no timer was created caused by
-	// an error
-
-	// area for EPL SDO/Asnd Module 0x00A0 - 0x0AF
-	kEplSdoAsndInvalidNodeId = 0x00A0,	//0 node id is invalid
-	kEplSdoAsndNoFreeHandle = 0x00A1,	// no free handle for connection
-	kEplSdoAsndInvalidHandle = 0x00A2,	// handle for connection is invalid
-
-	// area for PDO module 0x00B0 - 0x00BF
-	kEplPdoNotExist = 0x00B0,	// selected PDO does not exist
-	kEplPdoLengthExceeded = 0x00B1,	// length of PDO mapping exceedes 64 bis
-	kEplPdoGranularityMismatch = 0x00B2,	// configured PDO granularity is not equal to supported granularity
-	kEplPdoInitError = 0x00B3,	// error during initialisation of PDO module
-	kEplPdoErrorPdoEncode = 0x00B4,	// error during encoding a PDO
-	kEplPdoErrorPdoDecode = 0x00B5,	// error during decoding a PDO
-	kEplPdoErrorSend = 0x00B6,	// error during sending a PDO
-	kEplPdoErrorSyncWin = 0x00B7,	// the SYNC window runs out during sending SYNC-PDOs
-	kEplPdoErrorMapp = 0x00B8,	// invalid PDO mapping
-	kEplPdoVarNotFound = 0x00B9,	// variable was not found in function PdoSignalVar()
-	kEplPdoErrorEmcyPdoLen = 0x00BA,	// the length of a received PDO is unequal to the expected value
-	kEplPdoWriteConstObject = 0x00BB,	// constant object can not be written
-	// (only TxType, Inhibit-, Event Time for CANopen Kit)
-
-	// area for LSS slave module
-/*    kEplLsssResetNode           = 0x0080,       // NMT command "reset node" has to be processed after LSS configuration
-                                                // new of NodeId
-    kEplLsssInvalidNodeId       = 0x0081,       // no valid NodeId is configured -> wait until it is configured with
-                                                // LSS service before calling CcmConnectToNet()
-*/
-	// area for emergency consumer module 0x0090 - 0x009F
-/*    kEplEmccNoFreeProducerEntry = 0x0090,       // no free entry to add a Emergency Producer
-    kEplEmccNodeIdNotExist      = 0x0091,       // selected NodeId was never added
-    kEplEmccNodeIdInvalid       = 0x0092,       // selected NodeId is outside of range (0x01 until 0x7F)
-    kEplEmccNodeIdExist         = 0x0093,       // selected NodeId already exist
-*/
-	// area for dynamic OD 0x00A0 - 0x00AF
-/*    kEplDynNoMemory             = 0x00A0,       // no memory available
-    kEplDynInvalidConfig        = 0x00A1,       // invalid configuration in segment container
-*/
-	// area for hertbeat consumer module 0x00B0 - 0x00BF
-/*    kEplHbcEntryNotExist        = 0x00B0,       // Heartbeat Producer node not configured
-    kEplHbcEntryAlreadyExist    = 0x00B1,       // NodeId was already defined in heartbeat consumer table (object 0x1016)
-*/
-	// Configuration manager module 0x00C0 - 0x00CF
-	kEplCfgMaConfigError = 0x00C0,	// error in configuration manager
-	kEplCfgMaSdocTimeOutError = 0x00C1,	// error in configuration manager, Sdo timeout
-	kEplCfgMaInvalidDcf = 0x00C2,	// configration file not valid
-	kEplCfgMaUnsupportedDcf = 0x00C3,	// unsupported Dcf format
-	kEplCfgMaConfigWithErrors = 0x00C4,	// configuration finished with errors
-	kEplCfgMaNoFreeConfig = 0x00C5,	// no free configuration entry
-	kEplCfgMaNoConfigData = 0x00C6,	// no configuration data present
-	kEplCfgMaUnsuppDatatypeDcf = 0x00C7,	// unsupported datatype found in dcf
-	// -> this entry was not configured
-
-	// area for LSS master module 0x00D0 - 0x00DF
-/*    kEplLssmIllegalMode         = 0x00D0,       // illegal LSS mode (operation / configuration)
-    kEplLssmIllegalState        = 0x00D1,       // function was called in illegal state of LSS master
-    kEplLssmBusy                = 0x00D2,       // LSS process is busy with an previous service
-    kEplLssmIllegalCmd          = 0x00D3,       // illegal command code was set for function LssmInquireIdentity()
-    kEplLssmTimeout             = 0x00D4,       // LSS slave did not answer a LSS service
-    kEplLssmErrorInConfirm      = 0x00D5,       // LSS slave replied an error code for a LSS service
-*/
-	// area for CCM modules 0x00E0 - 0xEF
-/*    kEplCcmStoreUnvalidState    = 0x00E0,       // memory device not available due device state
-    kEplCcmStoreHwError         = 0x00E1,       // hw error due device access
-*/
-	// area for SRDO module 0x0100 - 0x011F
-/*    kEplSrdoNotExist            = 0x0100,       // selected SRDO does not exist
-    kEplSrdoGranularityMismatch = 0x0101,       // configured SRDO granularity is not equal to supported granularity
-    kEplSrdoCfgTimingError      = 0x0102,       // configuration is not ok (Timing)
-    kEplSrdoCfgIdError          = 0x0103,       // configuration is not ok (CobIds)
-    kEplSrdoCfgCrcError         = 0x0104,       // configuration is not ok (CRC)
-    kEplSrdoNmtError            = 0x0105,       // an action was tried in a wrong NMT state
-    kEplSrdoInvalidCfg          = 0x0106,       // an action was tried with an invald SRDO configuration
-    kEplSrdoInvalid             = 0x0107,       // an action was tried with an invald SRDO
-    kEplSrdoRxTxConflict        = 0x0108,       // an transmission was tried with an receive SRDO (or the other way)
-    kEplSrdoIllegalCanId        = 0x0109,       // the CanId is invalid
-    kEplSrdoCanIdAlreadyInUse   = 0x010A,       // the CanId is already in use
-    kEplSrdoNotInOrder          = 0x010B,       // the two messages of a SRDO are not in order
-    kEplSrdoSctTimeout          = 0x010C,       // timeout of SCT
-    kEplSrdoSrvtTimeout         = 0x010D,       // timeout of SRVT
-    kEplSrdoCanIdNotValid       = 0x010E,       // one of received CAN-IDs are not equal to configured one
-    kEplSrdoDlcNotValid         = 0x010F,       // one of received CAN-DLC are not equal to configured one
-    kEplSrdoErrorMapp           = 0x0110,       // wrong values in mapping found
-    kEplSrdoDataError           = 0x0111,       // data of CAN messages are not invers
-    kEplSrdoLengthExceeded      = 0x0112,       // length of SRDO mapping exceedes 64 bit per CAN-message
-    kEplSrdoNotHandledInApp     = 0x0113,       // the SRDO error was not handled in AppSrdoError()
-    kEplSrdoOverrun             = 0x0114        // a RxSRDO was received but the pevious one was not else processed
-*/
-
-	kEplApiTaskDeferred = 0x0140,	// EPL performs task in background and informs the application (or vice-versa), when it is finished
-	kEplApiInvalidParam = 0x0142,	// passed invalid parameters to a function (e.g. invalid node id)
-
-	// area untill 0x07FF is reserved
-	// area for user application from 0x0800 to 0x7FFF
-
-} tEplKernel;
-
-#endif
-//EOF
-
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
-// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/EplErrorHandlerk.c b/drivers/staging/epl/EplErrorHandlerk.c
deleted file mode 100644
index 6baed04..0000000
--- a/drivers/staging/epl/EplErrorHandlerk.c
+++ /dev/null
@@ -1,810 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for error handler module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplErrorHandlerk.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.9 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/10/02 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#include "kernel/EplErrorHandlerk.h"
-#include "EplNmt.h"
-#include "kernel/EplEventk.h"
-#include "kernel/EplObdk.h"	// function prototyps of the EplOBD-Modul
-#include "kernel/EplDllk.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) == 0)
-#error "EPL ErrorHandler module needs EPL module OBDK!"
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	u32 m_dwCumulativeCnt;	// subindex 1
-	u32 m_dwThresholdCnt;	// subindex 2
-	u32 m_dwThreshold;	// subindex 3
-
-} tEplErrorHandlerkErrorCounter;
-
-typedef struct {
-	tEplErrorHandlerkErrorCounter m_CnLossSoc;	// object 0x1C0B
-	tEplErrorHandlerkErrorCounter m_CnLossPreq;	// object 0x1C0D
-	tEplErrorHandlerkErrorCounter m_CnCrcErr;	// object 0x1C0F
-	unsigned long m_ulDllErrorEvents;
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	tEplErrorHandlerkErrorCounter m_MnCrcErr;	// object 0x1C00
-	tEplErrorHandlerkErrorCounter m_MnCycTimeExceed;	// object 0x1C02
-	u32 m_adwMnCnLossPresCumCnt[254];	// object 0x1C07
-	u32 m_adwMnCnLossPresThrCnt[254];	// object 0x1C08
-	u32 m_adwMnCnLossPresThreshold[254];	// object 0x1C09
-	BOOL m_afMnCnLossPresEvent[254];
-#endif
-
-} tEplErrorHandlerkInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplErrorHandlerkInstance EplErrorHandlerkInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplErrorHandlerkLinkErrorCounter(tEplErrorHandlerkErrorCounter
-						   * pErrorCounter_p,
-						   unsigned int uiIndex_p);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-static tEplKernel EplErrorHandlerkLinkArray(u32 * pdwValue_p,
-					    unsigned int uiValueCount_p,
-					    unsigned int uiIndex_p);
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <Epl-Kernelspace-Error-Handler>                     */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkInit
-//
-// Description: function initialize the first instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplErrorHandlerkInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplErrorHandlerkAddInstance();
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkAddInstance
-//
-// Description: function add one more instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplErrorHandlerkAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset only event variable,
-	// all other instance members are reset by OD or may keep their current value
-	// d.k.: this is necessary for the cumulative counters, which shall not be reset
-	EplErrorHandlerkInstance_g.m_ulDllErrorEvents = 0;
-
-	// link counters to OD
-	// $$$ d.k. if OD resides in userspace, fetch pointer to shared memory,
-	//          which shall have the same structure as the instance (needs to be declared globally).
-	//          Other idea: error counter shall belong to the process image
-	//          (reset of counters by SDO write are a little bit tricky).
-
-	Ret =
-	    EplErrorHandlerkLinkErrorCounter(&EplErrorHandlerkInstance_g.
-					     m_CnLossSoc, 0x1C0B);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret =
-	    EplErrorHandlerkLinkErrorCounter(&EplErrorHandlerkInstance_g.
-					     m_CnLossPreq, 0x1C0D);
-	// ignore return code, because object 0x1C0D is conditional
-
-	Ret =
-	    EplErrorHandlerkLinkErrorCounter(&EplErrorHandlerkInstance_g.
-					     m_CnCrcErr, 0x1C0F);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	Ret =
-	    EplErrorHandlerkLinkErrorCounter(&EplErrorHandlerkInstance_g.
-					     m_MnCrcErr, 0x1C00);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret =
-	    EplErrorHandlerkLinkErrorCounter(&EplErrorHandlerkInstance_g.
-					     m_MnCycTimeExceed, 0x1C02);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret =
-	    EplErrorHandlerkLinkArray(EplErrorHandlerkInstance_g.
-				      m_adwMnCnLossPresCumCnt,
-				      tabentries(EplErrorHandlerkInstance_g.
-						 m_adwMnCnLossPresCumCnt),
-				      0x1C07);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret =
-	    EplErrorHandlerkLinkArray(EplErrorHandlerkInstance_g.
-				      m_adwMnCnLossPresThrCnt,
-				      tabentries(EplErrorHandlerkInstance_g.
-						 m_adwMnCnLossPresThrCnt),
-				      0x1C08);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret =
-	    EplErrorHandlerkLinkArray(EplErrorHandlerkInstance_g.
-				      m_adwMnCnLossPresThreshold,
-				      tabentries(EplErrorHandlerkInstance_g.
-						 m_adwMnCnLossPresThreshold),
-				      0x1C09);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkDelInstance
-//
-// Description: function delete instance an free the bufferstructure
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplErrorHandlerkDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkProcess
-//
-// Description: processes error events from DLL
-//
-//
-//
-// Parameters:  pEvent_p = pointer to event-structur from buffer
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplErrorHandlerkProcess(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-	unsigned long ulDllErrorEvents;
-	tEplEvent Event;
-	tEplNmtEvent NmtEvent;
-
-	Ret = kEplSuccessful;
-
-	// check m_EventType
-	switch (pEvent_p->m_EventType) {
-	case kEplEventTypeDllError:
-		{
-			tEplErrorHandlerkEvent *pErrHandlerEvent =
-			    (tEplErrorHandlerkEvent *) pEvent_p->m_pArg;
-
-			ulDllErrorEvents = pErrHandlerEvent->m_ulDllErrorEvents;
-
-			// check the several error events
-			if ((EplErrorHandlerkInstance_g.m_CnLossSoc.
-			     m_dwThreshold > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_CN_LOSS_SOC) != 0)) {	// loss of SoC event occured
-				// increment cumulative counter by 1
-				EplErrorHandlerkInstance_g.m_CnLossSoc.
-				    m_dwCumulativeCnt++;
-				// increment threshold counter by 8
-				EplErrorHandlerkInstance_g.m_CnLossSoc.
-				    m_dwThresholdCnt += 8;
-				if (EplErrorHandlerkInstance_g.m_CnLossSoc.m_dwThresholdCnt >= EplErrorHandlerkInstance_g.m_CnLossSoc.m_dwThreshold) {	// threshold is reached
-					// $$$ d.k.: generate error history entry E_DLL_LOSS_SOC_TH
-
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventNmtCycleError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-				EplErrorHandlerkInstance_g.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_LOSS_SOC;
-			}
-
-			if ((EplErrorHandlerkInstance_g.m_CnLossPreq.
-			     m_dwThreshold > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_CN_LOSS_PREQ) != 0)) {	// loss of PReq event occured
-				// increment cumulative counter by 1
-				EplErrorHandlerkInstance_g.m_CnLossPreq.
-				    m_dwCumulativeCnt++;
-				// increment threshold counter by 8
-				EplErrorHandlerkInstance_g.m_CnLossPreq.
-				    m_dwThresholdCnt += 8;
-				if (EplErrorHandlerkInstance_g.m_CnLossPreq.m_dwThresholdCnt >= EplErrorHandlerkInstance_g.m_CnLossPreq.m_dwThreshold) {	// threshold is reached
-					// $$$ d.k.: generate error history entry E_DLL_LOSS_PREQ_TH
-
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventNmtCycleError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-			}
-
-			if ((EplErrorHandlerkInstance_g.m_CnLossPreq.
-			     m_dwThresholdCnt > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_CN_RECVD_PREQ) != 0)) {	// PReq correctly received
-				// decrement threshold counter by 1
-				EplErrorHandlerkInstance_g.m_CnLossPreq.
-				    m_dwThresholdCnt--;
-			}
-
-			if ((EplErrorHandlerkInstance_g.m_CnCrcErr.
-			     m_dwThreshold > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_CN_CRC) != 0)) {	// CRC error event occured
-				// increment cumulative counter by 1
-				EplErrorHandlerkInstance_g.m_CnCrcErr.
-				    m_dwCumulativeCnt++;
-				// increment threshold counter by 8
-				EplErrorHandlerkInstance_g.m_CnCrcErr.
-				    m_dwThresholdCnt += 8;
-				if (EplErrorHandlerkInstance_g.m_CnCrcErr.m_dwThresholdCnt >= EplErrorHandlerkInstance_g.m_CnCrcErr.m_dwThreshold) {	// threshold is reached
-					// $$$ d.k.: generate error history entry E_DLL_CRC_TH
-
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventNmtCycleError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-				EplErrorHandlerkInstance_g.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_CN_CRC;
-			}
-
-			if ((ulDllErrorEvents & EPL_DLL_ERR_INVALID_FORMAT) != 0) {	// invalid format error occured (only direct reaction)
-				// $$$ d.k.: generate error history entry E_DLL_INVALID_FORMAT
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-				if (pErrHandlerEvent->m_NmtState >= kEplNmtMsNotActive) {	// MN is active
-					if (pErrHandlerEvent->m_uiNodeId != 0) {
-						tEplHeartbeatEvent
-						    HeartbeatEvent;
-
-						// remove node from isochronous phase
-						Ret =
-						    EplDllkDeleteNode
-						    (pErrHandlerEvent->
-						     m_uiNodeId);
-
-						// inform NmtMnu module about state change, which shall send NMT command ResetNode to this CN
-						HeartbeatEvent.m_uiNodeId =
-						    pErrHandlerEvent->
-						    m_uiNodeId;
-						HeartbeatEvent.m_NmtState =
-						    kEplNmtCsNotActive;
-						HeartbeatEvent.m_wErrorCode =
-						    EPL_E_DLL_INVALID_FORMAT;
-						Event.m_EventSink =
-						    kEplEventSinkNmtMnu;
-						Event.m_EventType =
-						    kEplEventTypeHeartbeat;
-						Event.m_uiSize =
-						    sizeof(HeartbeatEvent);
-						Event.m_pArg = &HeartbeatEvent;
-						Ret = EplEventkPost(&Event);
-					}
-					// $$$ and else should lead to InternComError
-				} else
-#endif
-				{	// CN is active
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventInternComError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-			}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			if ((EplErrorHandlerkInstance_g.m_MnCrcErr.
-			     m_dwThreshold > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_MN_CRC) != 0)) {	// CRC error event occured
-				// increment cumulative counter by 1
-				EplErrorHandlerkInstance_g.m_MnCrcErr.
-				    m_dwCumulativeCnt++;
-				// increment threshold counter by 8
-				EplErrorHandlerkInstance_g.m_MnCrcErr.
-				    m_dwThresholdCnt += 8;
-				if (EplErrorHandlerkInstance_g.m_MnCrcErr.m_dwThresholdCnt >= EplErrorHandlerkInstance_g.m_MnCrcErr.m_dwThreshold) {	// threshold is reached
-					// $$$ d.k.: generate error history entry E_DLL_CRC_TH
-
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventNmtCycleError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-				EplErrorHandlerkInstance_g.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_MN_CRC;
-			}
-
-			if ((EplErrorHandlerkInstance_g.m_MnCycTimeExceed.
-			     m_dwThreshold > 0)
-			    && ((ulDllErrorEvents & EPL_DLL_ERR_MN_CYCTIMEEXCEED) != 0)) {	// cycle time exceeded event occured
-				// increment cumulative counter by 1
-				EplErrorHandlerkInstance_g.m_MnCycTimeExceed.
-				    m_dwCumulativeCnt++;
-				// increment threshold counter by 8
-				EplErrorHandlerkInstance_g.m_MnCycTimeExceed.
-				    m_dwThresholdCnt += 8;
-				if (EplErrorHandlerkInstance_g.m_MnCycTimeExceed.m_dwThresholdCnt >= EplErrorHandlerkInstance_g.m_MnCycTimeExceed.m_dwThreshold) {	// threshold is reached
-					// $$$ d.k.: generate error history entry E_DLL_CYCLE_EXCEED_TH
-
-					// post event to NMT state machine
-					NmtEvent = kEplNmtEventNmtCycleError;
-					Event.m_EventSink = kEplEventSinkNmtk;
-					Event.m_EventType =
-					    kEplEventTypeNmtEvent;
-					Event.m_pArg = &NmtEvent;
-					Event.m_uiSize = sizeof(NmtEvent);
-					Ret = EplEventkPost(&Event);
-				}
-				// $$$ d.k.: else generate error history entry E_DLL_CYCLE_EXCEED
-				EplErrorHandlerkInstance_g.m_ulDllErrorEvents |=
-				    EPL_DLL_ERR_MN_CYCTIMEEXCEED;
-			}
-
-			if ((ulDllErrorEvents & EPL_DLL_ERR_MN_CN_LOSS_PRES) != 0) {	// CN loss PRes event occured
-				unsigned int uiNodeId;
-
-				uiNodeId = pErrHandlerEvent->m_uiNodeId - 1;
-				if ((uiNodeId <
-				     tabentries(EplErrorHandlerkInstance_g.
-						m_adwMnCnLossPresCumCnt))
-				    && (EplErrorHandlerkInstance_g.
-					m_adwMnCnLossPresThreshold[uiNodeId] >
-					0)) {
-					// increment cumulative counter by 1
-					EplErrorHandlerkInstance_g.
-					    m_adwMnCnLossPresCumCnt[uiNodeId]++;
-					// increment threshold counter by 8
-					EplErrorHandlerkInstance_g.
-					    m_adwMnCnLossPresThrCnt[uiNodeId] +=
-					    8;
-					if (EplErrorHandlerkInstance_g.
-					    m_adwMnCnLossPresThrCnt[uiNodeId]
-					    >= EplErrorHandlerkInstance_g.m_adwMnCnLossPresThreshold[uiNodeId]) {	// threshold is reached
-						tEplHeartbeatEvent
-						    HeartbeatEvent;
-
-						// $$$ d.k.: generate error history entry E_DLL_LOSS_PRES_TH
-
-						// remove node from isochronous phase
-						Ret =
-						    EplDllkDeleteNode
-						    (pErrHandlerEvent->
-						     m_uiNodeId);
-
-						// inform NmtMnu module about state change, which shall send NMT command ResetNode to this CN
-						HeartbeatEvent.m_uiNodeId =
-						    pErrHandlerEvent->
-						    m_uiNodeId;
-						HeartbeatEvent.m_NmtState =
-						    kEplNmtCsNotActive;
-						HeartbeatEvent.m_wErrorCode =
-						    EPL_E_DLL_LOSS_PRES_TH;
-						Event.m_EventSink =
-						    kEplEventSinkNmtMnu;
-						Event.m_EventType =
-						    kEplEventTypeHeartbeat;
-						Event.m_uiSize =
-						    sizeof(HeartbeatEvent);
-						Event.m_pArg = &HeartbeatEvent;
-						Ret = EplEventkPost(&Event);
-					}
-					EplErrorHandlerkInstance_g.
-					    m_afMnCnLossPresEvent[uiNodeId] =
-					    TRUE;
-				}
-			}
-#endif
-
-			break;
-		}
-
-		// NMT event
-	case kEplEventTypeNmtEvent:
-		{
-			if ((*(tEplNmtEvent *) pEvent_p->m_pArg) == kEplNmtEventDllCeSoa) {	// SoA event of CN -> decrement threshold counters
-
-				if ((EplErrorHandlerkInstance_g.m_ulDllErrorEvents & EPL_DLL_ERR_CN_LOSS_SOC) == 0) {	// decrement loss of SoC threshold counter, because it didn't occur last cycle
-					if (EplErrorHandlerkInstance_g.
-					    m_CnLossSoc.m_dwThresholdCnt > 0) {
-						EplErrorHandlerkInstance_g.
-						    m_CnLossSoc.
-						    m_dwThresholdCnt--;
-					}
-				}
-
-				if ((EplErrorHandlerkInstance_g.m_ulDllErrorEvents & EPL_DLL_ERR_CN_CRC) == 0) {	// decrement CRC threshold counter, because it didn't occur last cycle
-					if (EplErrorHandlerkInstance_g.
-					    m_CnCrcErr.m_dwThresholdCnt > 0) {
-						EplErrorHandlerkInstance_g.
-						    m_CnCrcErr.
-						    m_dwThresholdCnt--;
-					}
-				}
-			}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			else if ((*(tEplNmtEvent *) pEvent_p->m_pArg) == kEplNmtEventDllMeSoaSent) {	// SoA event of MN -> decrement threshold counters
-				tEplDllkNodeInfo *pIntNodeInfo;
-				unsigned int uiNodeId;
-
-				Ret = EplDllkGetFirstNodeInfo(&pIntNodeInfo);
-				if (Ret != kEplSuccessful) {
-					break;
-				}
-				// iterate through node info structure list
-				while (pIntNodeInfo != NULL) {
-					uiNodeId = pIntNodeInfo->m_uiNodeId - 1;
-					if (uiNodeId <
-					    tabentries
-					    (EplErrorHandlerkInstance_g.
-					     m_adwMnCnLossPresCumCnt)) {
-						if (EplErrorHandlerkInstance_g.
-						    m_afMnCnLossPresEvent
-						    [uiNodeId] == FALSE) {
-							if (EplErrorHandlerkInstance_g.m_adwMnCnLossPresThrCnt[uiNodeId] > 0) {
-								EplErrorHandlerkInstance_g.
-								    m_adwMnCnLossPresThrCnt
-								    [uiNodeId]--;
-							}
-						} else {
-							EplErrorHandlerkInstance_g.
-							    m_afMnCnLossPresEvent
-							    [uiNodeId] = FALSE;
-						}
-					}
-					pIntNodeInfo =
-					    pIntNodeInfo->m_pNextNodeInfo;
-				}
-
-				if ((EplErrorHandlerkInstance_g.m_ulDllErrorEvents & EPL_DLL_ERR_MN_CRC) == 0) {	// decrement CRC threshold counter, because it didn't occur last cycle
-					if (EplErrorHandlerkInstance_g.
-					    m_MnCrcErr.m_dwThresholdCnt > 0) {
-						EplErrorHandlerkInstance_g.
-						    m_MnCrcErr.
-						    m_dwThresholdCnt--;
-					}
-				}
-
-				if ((EplErrorHandlerkInstance_g.m_ulDllErrorEvents & EPL_DLL_ERR_MN_CYCTIMEEXCEED) == 0) {	// decrement cycle exceed threshold counter, because it didn't occur last cycle
-					if (EplErrorHandlerkInstance_g.
-					    m_MnCycTimeExceed.m_dwThresholdCnt >
-					    0) {
-						EplErrorHandlerkInstance_g.
-						    m_MnCycTimeExceed.
-						    m_dwThresholdCnt--;
-					}
-				}
-			}
-#endif
-
-			// reset error events
-			EplErrorHandlerkInstance_g.m_ulDllErrorEvents = 0L;
-
-			break;
-		}
-
-		// unknown type
-	default:
-		{
-		}
-
-	}			// end of switch(pEvent_p->m_EventType)
-
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkLinkErrorCounter
-//
-// Description: link specified error counter structure to OD entry
-//
-// Parameters:  pErrorCounter_p         = pointer to error counter structure
-//              uiIndex_p               = OD index
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplErrorHandlerkLinkErrorCounter(tEplErrorHandlerkErrorCounter
-						   * pErrorCounter_p,
-						   unsigned int uiIndex_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplVarParam VarParam;
-
-	VarParam.m_pData = &pErrorCounter_p->m_dwCumulativeCnt;
-	VarParam.m_Size = sizeof(u32);
-	VarParam.m_uiIndex = uiIndex_p;
-	VarParam.m_uiSubindex = 0x01;
-	VarParam.m_ValidFlag = kVarValidAll;
-	Ret = EplObdDefineVar(&VarParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	VarParam.m_pData = &pErrorCounter_p->m_dwThresholdCnt;
-	VarParam.m_Size = sizeof(u32);
-	VarParam.m_uiIndex = uiIndex_p;
-	VarParam.m_uiSubindex = 0x02;
-	VarParam.m_ValidFlag = kVarValidAll;
-	Ret = EplObdDefineVar(&VarParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	VarParam.m_pData = &pErrorCounter_p->m_dwThreshold;
-	VarParam.m_Size = sizeof(u32);
-	VarParam.m_uiIndex = uiIndex_p;
-	VarParam.m_uiSubindex = 0x03;
-	VarParam.m_ValidFlag = kVarValidAll;
-	Ret = EplObdDefineVar(&VarParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplErrorHandlerkLinkErrorCounter
-//
-// Description: link specified error counter structure to OD entry
-//
-// Parameters:  pErrorCounter_p         = pointer to error counter structure
-//              uiIndex_p               = OD index
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-static tEplKernel EplErrorHandlerkLinkArray(u32 * pdwValue_p,
-					    unsigned int uiValueCount_p,
-					    unsigned int uiIndex_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplVarParam VarParam;
-	tEplObdSize EntrySize;
-	u8 bIndexEntries;
-
-	EntrySize = (tEplObdSize) sizeof(bIndexEntries);
-	Ret = EplObdReadEntry(uiIndex_p,
-			      0x00, (void *)&bIndexEntries, &EntrySize);
-
-	if ((Ret != kEplSuccessful) || (bIndexEntries == 0x00)) {
-		// Object doesn't exist or invalid entry number
-		Ret = kEplObdIndexNotExist;
-		goto Exit;
-	}
-
-	if (bIndexEntries < uiValueCount_p) {
-		uiValueCount_p = bIndexEntries;
-	}
-
-	VarParam.m_Size = sizeof(u32);
-	VarParam.m_uiIndex = uiIndex_p;
-	VarParam.m_ValidFlag = kVarValidAll;
-
-	for (VarParam.m_uiSubindex = 0x01;
-	     VarParam.m_uiSubindex <= uiValueCount_p; VarParam.m_uiSubindex++) {
-		VarParam.m_pData = pdwValue_p;
-		Ret = EplObdDefineVar(&VarParam);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		pdwValue_p++;
-	}
-
-      Exit:
-	return Ret;
-}
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplEvent.h b/drivers/staging/epl/EplEvent.h
deleted file mode 100644
index 910bd69..0000000
--- a/drivers/staging/epl/EplEvent.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for event module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplEvent.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/12 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_EVENT_H_
-#define _EPL_EVENT_H_
-
-#include "EplInc.h"
-#include "EplNmt.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// name and size of event queues
-#define EPL_EVENT_NAME_SHB_KERNEL_TO_USER   "ShbKernelToUser"
-#ifndef EPL_EVENT_SIZE_SHB_KERNEL_TO_USER
-#define EPL_EVENT_SIZE_SHB_KERNEL_TO_USER   32768	// 32 kByte
-#endif
-
-#define EPL_EVENT_NAME_SHB_USER_TO_KERNEL   "ShbUserToKernel"
-#ifndef EPL_EVENT_SIZE_SHB_USER_TO_KERNEL
-#define EPL_EVENT_SIZE_SHB_USER_TO_KERNEL   32768	// 32 kByte
-#endif
-
-// max size of event argument
-#ifndef EPL_MAX_EVENT_ARG_SIZE
-#define EPL_MAX_EVENT_ARG_SIZE      256	// because of PDO
-#endif
-
-#define EPL_DLL_ERR_MN_CRC           0x00000001L	// object 0x1C00
-#define EPL_DLL_ERR_MN_COLLISION     0x00000002L	// object 0x1C01
-#define EPL_DLL_ERR_MN_CYCTIMEEXCEED 0x00000004L	// object 0x1C02
-#define EPL_DLL_ERR_MN_LOSS_LINK     0x00000008L	// object 0x1C03
-#define EPL_DLL_ERR_MN_CN_LATE_PRES  0x00000010L	// objects 0x1C04-0x1C06
-#define EPL_DLL_ERR_MN_CN_LOSS_PRES  0x00000080L	// objects 0x1C07-0x1C09
-#define EPL_DLL_ERR_CN_COLLISION     0x00000400L	// object 0x1C0A
-#define EPL_DLL_ERR_CN_LOSS_SOC      0x00000800L	// object 0x1C0B
-#define EPL_DLL_ERR_CN_LOSS_SOA      0x00001000L	// object 0x1C0C
-#define EPL_DLL_ERR_CN_LOSS_PREQ     0x00002000L	// object 0x1C0D
-#define EPL_DLL_ERR_CN_RECVD_PREQ    0x00004000L	// decrement object 0x1C0D/2
-#define EPL_DLL_ERR_CN_SOC_JITTER    0x00008000L	// object 0x1C0E
-#define EPL_DLL_ERR_CN_CRC           0x00010000L	// object 0x1C0F
-#define EPL_DLL_ERR_CN_LOSS_LINK     0x00020000L	// object 0x1C10
-#define EPL_DLL_ERR_MN_LOSS_STATRES  0x00040000L	// objects 0x1C15-0x1C17 (should be operated by NmtMnu module)
-#define EPL_DLL_ERR_BAD_PHYS_MODE    0x00080000L	// no object
-#define EPL_DLL_ERR_MAC_BUFFER       0x00100000L	// no object (NMT_GT6)
-#define EPL_DLL_ERR_INVALID_FORMAT   0x00200000L	// no object (NMT_GT6)
-#define EPL_DLL_ERR_ADDRESS_CONFLICT 0x00400000L	// no object (remove CN from configuration)
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-// EventType determines the argument of the event
-typedef enum {
-	kEplEventTypeNmtEvent = 0x01,	// NMT event
-	// arg is pointer to tEplNmtEvent
-	kEplEventTypePdoRx = 0x02,	// PDO frame received event (PRes/PReq)
-	// arg is pointer to tEplFrame
-	kEplEventTypePdoTx = 0x03,	// PDO frame transmitted event (PRes/PReq)
-	// arg is pointer to tEplFrameInfo
-	kEplEventTypePdoSoa = 0x04,	// SoA frame received event (isochronous phase completed)
-	// arg is pointer to nothing
-	kEplEventTypeSync = 0x05,	// Sync event (e.g. SoC or anticipated SoC)
-	// arg is pointer to nothing
-	kEplEventTypeTimer = 0x06,	// Timer event
-	// arg is pointer to tEplTimerEventArg
-	kEplEventTypeHeartbeat = 0x07,	// Heartbeat event
-	// arg is pointer to tEplHeartbeatEvent
-	kEplEventTypeDllkCreate = 0x08,	// DLL kernel create event
-	// arg is pointer to the new tEplNmtState
-	kEplEventTypeDllkDestroy = 0x09,	// DLL kernel destroy event
-	// arg is pointer to the old tEplNmtState
-	kEplEventTypeDllkFillTx = 0x0A,	// DLL kernel fill TxBuffer event
-	// arg is pointer to tEplDllAsyncReqPriority
-	kEplEventTypeDllkPresReady = 0x0B,	// DLL kernel PRes ready event
-	// arg is pointer to nothing
-	kEplEventTypeError = 0x0C,	// Error event for API layer
-	// arg is pointer to tEplEventError
-	kEplEventTypeNmtStateChange = 0x0D,	// indicate change of NMT-State
-	// arg is pointer to tEplEventNmtStateChange
-	kEplEventTypeDllError = 0x0E,	// DLL error event for Error handler
-	// arg is pointer to tEplErrorHandlerkEvent
-	kEplEventTypeAsndRx = 0x0F,	// received ASnd frame for DLL user module
-	// arg is pointer to tEplFrame
-	kEplEventTypeDllkServFilter = 0x10,	// configure ServiceIdFilter
-	// arg is pointer to tEplDllCalServiceIdFilter
-	kEplEventTypeDllkIdentity = 0x11,	// configure Identity
-	// arg is pointer to tEplDllIdentParam
-	kEplEventTypeDllkConfig = 0x12,	// configure ConfigParam
-	// arg is pointer to tEplDllConfigParam
-	kEplEventTypeDllkIssueReq = 0x13,	// issue Ident/Status request
-	// arg is pointer to tEplDllCalIssueRequest
-	kEplEventTypeDllkAddNode = 0x14,	// add node to isochronous phase
-	// arg is pointer to tEplDllNodeInfo
-	kEplEventTypeDllkDelNode = 0x15,	// remove node from isochronous phase
-	// arg is pointer to unsigned int
-	kEplEventTypeDllkSoftDelNode = 0x16,	// remove node softly from isochronous phase
-	// arg is pointer to unsigned int
-	kEplEventTypeDllkStartReducedCycle = 0x17,	// start reduced EPL cycle on MN
-	// arg is pointer to nothing
-	kEplEventTypeNmtMnuNmtCmdSent = 0x18,	// NMT command was actually sent
-	// arg is pointer to tEplFrame
-
-} tEplEventType;
-
-// EventSink determines the consumer of the event
-typedef enum {
-	kEplEventSinkSync = 0x00,	// Sync event for application or kernel EPL module
-	kEplEventSinkNmtk = 0x01,	// events for Nmtk module
-	kEplEventSinkDllk = 0x02,	// events for Dllk module
-	kEplEventSinkDlluCal = 0x03,	// events for DlluCal module
-	kEplEventSinkDllkCal = 0x04,	// events for DllkCal module
-	kEplEventSinkPdok = 0x05,	// events for Pdok module
-	kEplEventSinkNmtu = 0x06,	// events for Nmtu module
-	kEplEventSinkErrk = 0x07,	// events for Error handler module
-	kEplEventSinkErru = 0x08,	// events for Error signaling module
-	kEplEventSinkSdoAsySeq = 0x09,	// events for asyncronous SDO Sequence Layer module
-	kEplEventSinkNmtMnu = 0x0A,	// events for NmtMnu module
-	kEplEventSinkLedu = 0x0B,	// events for Ledu module
-	kEplEventSinkApi = 0x0F,	// events for API module
-
-} tEplEventSink;
-
-// EventSource determines the source of an errorevent
-typedef enum {
-	// kernelspace modules
-	kEplEventSourceDllk = 0x01,	// Dllk module
-	kEplEventSourceNmtk = 0x02,	// Nmtk module
-	kEplEventSourceObdk = 0x03,	// Obdk module
-	kEplEventSourcePdok = 0x04,	// Pdok module
-	kEplEventSourceTimerk = 0x05,	// Timerk module
-	kEplEventSourceEventk = 0x06,	// Eventk module
-	kEplEventSourceSyncCb = 0x07,	// sync-Cb
-	kEplEventSourceErrk = 0x08,	// Error handler module
-
-	// userspace modules
-	kEplEventSourceDllu = 0x10,	// Dllu module
-	kEplEventSourceNmtu = 0x11,	// Nmtu module
-	kEplEventSourceNmtCnu = 0x12,	// NmtCnu module
-	kEplEventSourceNmtMnu = 0x13,	// NmtMnu module
-	kEplEventSourceObdu = 0x14,	// Obdu module
-	kEplEventSourceSdoUdp = 0x15,	// Sdo/Udp module
-	kEplEventSourceSdoAsnd = 0x16,	// Sdo/Asnd module
-	kEplEventSourceSdoAsySeq = 0x17,	// Sdo asynchronus Sequence Layer module
-	kEplEventSourceSdoCom = 0x18,	// Sdo command layer module
-	kEplEventSourceTimeru = 0x19,	// Timeru module
-	kEplEventSourceCfgMau = 0x1A,	// CfgMau module
-	kEplEventSourceEventu = 0x1B,	// Eventu module
-	kEplEventSourceEplApi = 0x1C,	// Api module
-	kEplEventSourceLedu = 0x1D,	// Ledu module
-
-} tEplEventSource;
-
-// structure of EPL event (element order must not be changed!)
-typedef struct {
-	tEplEventType m_EventType /*:28 */ ;	// event type
-	tEplEventSink m_EventSink /*:4 */ ;	// event sink
-	tEplNetTime m_NetTime;	// timestamp
-	unsigned int m_uiSize;	// size of argument
-	void *m_pArg;		// argument of event
-
-} tEplEvent;
-
-// short structure of EPL event without argument and its size (element order must not be changed!)
-typedef struct {
-	tEplEventType m_EventType /*:28 */ ;	// event type
-	tEplEventSink m_EventSink /*:4 */ ;	// event sink
-	tEplNetTime m_NetTime;	// timestamp
-
-} tEplEventShort;
-
-typedef struct {
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubIndex;
-
-} tEplEventObdError;
-
-// structure for kEplEventTypeError
-typedef struct {
-	tEplEventSource m_EventSource;	// module which posted this error event
-	tEplKernel m_EplError;	// EPL error which occured
-	union {
-		u8 m_bArg;
-		u32 m_dwArg;
-		tEplEventSource m_EventSource;	// from Eventk/u module (originating error source)
-		tEplEventObdError m_ObdError;	// from Obd module
-//        tEplErrHistoryEntry     m_HistoryEntry; // from Nmtk/u module
-
-	} m_Arg;
-
-} tEplEventError;
-
-// structure for kEplEventTypeDllError
-typedef struct {
-	unsigned long m_ulDllErrorEvents;	// EPL_DLL_ERR_*
-	unsigned int m_uiNodeId;
-	tEplNmtState m_NmtState;
-
-} tEplErrorHandlerkEvent;
-
-// callback function to get informed about sync event
-typedef tEplKernel(*tEplSyncCb) (void);
-
-// callback function for generic events
-typedef tEplKernel(*tEplProcessEventCb) (tEplEvent *pEplEvent_p);
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_EVENT_H_
diff --git a/drivers/staging/epl/EplEventk.c b/drivers/staging/epl/EplEventk.c
deleted file mode 100644
index ef36815..0000000
--- a/drivers/staging/epl/EplEventk.c
+++ /dev/null
@@ -1,853 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for Epl-Kernelspace-Event-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplEventk.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.9 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "kernel/EplEventk.h"
-#include "kernel/EplNmtk.h"
-#include "kernel/EplDllk.h"
-#include "kernel/EplDllkCal.h"
-#include "kernel/EplErrorHandlerk.h"
-#include "Benchmark.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-#include "kernel/EplPdok.h"
-#include "kernel/EplPdokCal.h"
-#endif
-
-#ifdef EPL_NO_FIFO
-#include "user/EplEventu.h"
-#else
-#include "SharedBuff.h"
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-#ifndef EPL_NO_FIFO
-	tShbInstance m_pShbKernelToUserInstance;
-	tShbInstance m_pShbUserToKernelInstance;
-#else
-
-#endif
-	tEplSyncCb m_pfnCbSync;
-	unsigned int m_uiUserToKernelFullCount;
-
-} tEplEventkInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-static tEplEventkInstance EplEventkInstance_g;
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-// callback function for incoming events
-#ifndef EPL_NO_FIFO
-static void EplEventkRxSignalHandlerCb(tShbInstance pShbRxInstance_p,
-				       unsigned long ulDataSize_p);
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <Epl-Kernelspace-Event>                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkInit
-//
-// Description: function initializes the first instance
-//
-// Parameters:  pfnCbSync_p = callback-function for sync event
-//
-// Returns:     tEpKernel   = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkInit(tEplSyncCb pfnCbSync_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplEventkAddInstance(pfnCbSync_p);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkAddInstance
-//
-// Description: function adds one more instance
-//
-// Parameters:  pfnCbSync_p = callback-function for sync event
-//
-// Returns:     tEpKernel   = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkAddInstance(tEplSyncCb pfnCbSync_p)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	unsigned int fShbNewCreated;
-#endif
-
-	Ret = kEplSuccessful;
-
-	// init instance structure
-	EplEventkInstance_g.m_uiUserToKernelFullCount = 0;
-
-	// save cb-function
-	EplEventkInstance_g.m_pfnCbSync = pfnCbSync_p;
-
-#ifndef EPL_NO_FIFO
-	// init shared loop buffer
-	// kernel -> user
-	ShbError = ShbCirAllocBuffer(EPL_EVENT_SIZE_SHB_KERNEL_TO_USER,
-				     EPL_EVENT_NAME_SHB_KERNEL_TO_USER,
-				     &EplEventkInstance_g.
-				     m_pShbKernelToUserInstance,
-				     &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkAddInstance(): ShbCirAllocBuffer(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-	// user -> kernel
-	ShbError = ShbCirAllocBuffer(EPL_EVENT_SIZE_SHB_USER_TO_KERNEL,
-				     EPL_EVENT_NAME_SHB_USER_TO_KERNEL,
-				     &EplEventkInstance_g.
-				     m_pShbUserToKernelInstance,
-				     &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkAddInstance(): ShbCirAllocBuffer(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-	// register eventhandler
-	ShbError =
-	    ShbCirSetSignalHandlerNewData(EplEventkInstance_g.
-					  m_pShbUserToKernelInstance,
-					  EplEventkRxSignalHandlerCb,
-					  kshbPriorityHigh);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkAddInstance(): ShbCirSetSignalHandlerNewData(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-      Exit:
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkDelInstance
-//
-// Description: function deletes instance and frees the buffers
-//
-// Parameters:  void
-//
-// Returns:     tEpKernel   = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkDelInstance(void)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-#endif
-
-	Ret = kEplSuccessful;
-
-#ifndef EPL_NO_FIFO
-	// set eventhandler to NULL
-	ShbError =
-	    ShbCirSetSignalHandlerNewData(EplEventkInstance_g.
-					  m_pShbUserToKernelInstance, NULL,
-					  kShbPriorityNormal);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkDelInstance(): ShbCirSetSignalHandlerNewData(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	}
-	// free buffer User -> Kernel
-	ShbError =
-	    ShbCirReleaseBuffer(EplEventkInstance_g.m_pShbUserToKernelInstance);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkDelInstance(): ShbCirReleaseBuffer(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	} else {
-		EplEventkInstance_g.m_pShbUserToKernelInstance = NULL;
-	}
-
-	// free buffer  Kernel -> User
-	ShbError =
-	    ShbCirReleaseBuffer(EplEventkInstance_g.m_pShbKernelToUserInstance);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventkDelInstance(): ShbCirReleaseBuffer(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	} else {
-		EplEventkInstance_g.m_pShbKernelToUserInstance = NULL;
-	}
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkProcess
-//
-// Description: Kernelthread that dispatches events in kernel part
-//
-// Parameters:  pEvent_p    = pointer to event-structure from buffer
-//
-// Returns:     tEpKernel   = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkProcess(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-	tEplEventSource EventSource;
-
-	Ret = kEplSuccessful;
-
-	// error handling if event queue is full
-	if (EplEventkInstance_g.m_uiUserToKernelFullCount > 0) {	// UserToKernel event queue has run out of space -> kEplNmtEventInternComError
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-		tEplEvent Event;
-		tEplNmtEvent NmtEvent;
-#endif
-#ifndef EPL_NO_FIFO
-		tShbError ShbError;
-#endif
-
-		// directly call NMTk process function, because event queue is full
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-		NmtEvent = kEplNmtEventInternComError;
-		Event.m_EventSink = kEplEventSinkNmtk;
-		Event.m_NetTime.m_dwNanoSec = 0;
-		Event.m_NetTime.m_dwSec = 0;
-		Event.m_EventType = kEplEventTypeNmtEvent;
-		Event.m_pArg = &NmtEvent;
-		Event.m_uiSize = sizeof(NmtEvent);
-		Ret = EplNmtkProcess(&Event);
-#endif
-
-		// NMT state machine changed to reset (i.e. NMT_GS_RESET_COMMUNICATION)
-		// now, it is safe to reset the counter and empty the event queue
-#ifndef EPL_NO_FIFO
-		ShbError =
-		    ShbCirResetBuffer(EplEventkInstance_g.
-				      m_pShbUserToKernelInstance, 1000, NULL);
-#endif
-
-		EplEventkInstance_g.m_uiUserToKernelFullCount = 0;
-		TGT_DBG_SIGNAL_TRACE_POINT(22);
-
-		// also discard the current event (it doesn't matter if we lose another event)
-		goto Exit;
-	}
-	// check m_EventSink
-	switch (pEvent_p->m_EventSink) {
-	case kEplEventSinkSync:
-		{
-			if (EplEventkInstance_g.m_pfnCbSync != NULL) {
-				Ret = EplEventkInstance_g.m_pfnCbSync();
-				if (Ret == kEplSuccessful) {
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-					// mark TPDOs as valid
-					Ret = EplPdokCalSetTpdosValid(TRUE);
-#endif
-				} else if ((Ret != kEplReject)
-					   && (Ret != kEplShutdown)) {
-					EventSource = kEplEventSourceSyncCb;
-
-					// Error event for API layer
-					EplEventkPostError
-					    (kEplEventSourceEventk, Ret,
-					     sizeof(EventSource), &EventSource);
-				}
-			}
-			break;
-		}
-
-		// NMT-Kernel-Modul
-	case kEplEventSinkNmtk:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-			Ret = EplNmtkProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceNmtk;
-
-				// Error event for API layer
-				EplEventkPostError(kEplEventSourceEventk,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			if ((pEvent_p->m_EventType == kEplEventTypeNmtEvent)
-			    &&
-			    ((*((tEplNmtEvent *) pEvent_p->m_pArg) ==
-			      kEplNmtEventDllCeSoa)
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			     || (*((tEplNmtEvent *) pEvent_p->m_pArg) ==
-				 kEplNmtEventDllMeSoaSent)
-#endif
-			    )) {	// forward SoA event to error handler
-				Ret = EplErrorHandlerkProcess(pEvent_p);
-				if ((Ret != kEplSuccessful)
-				    && (Ret != kEplShutdown)) {
-					EventSource = kEplEventSourceErrk;
-
-					// Error event for API layer
-					EplEventkPostError
-					    (kEplEventSourceEventk, Ret,
-					     sizeof(EventSource), &EventSource);
-				}
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-				// forward SoA event to PDO module
-				pEvent_p->m_EventType = kEplEventTypePdoSoa;
-				Ret = EplPdokProcess(pEvent_p);
-				if ((Ret != kEplSuccessful)
-				    && (Ret != kEplShutdown)) {
-					EventSource = kEplEventSourcePdok;
-
-					// Error event for API layer
-					EplEventkPostError
-					    (kEplEventSourceEventk, Ret,
-					     sizeof(EventSource), &EventSource);
-				}
-#endif
-
-			}
-			break;
-#endif
-		}
-
-		// events for Dllk module
-	case kEplEventSinkDllk:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplDllkProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceDllk;
-
-				// Error event for API layer
-				EplEventkPostError(kEplEventSourceEventk,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-			break;
-		}
-
-		// events for DllkCal module
-	case kEplEventSinkDllkCal:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplDllkCalProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceDllk;
-
-				// Error event for API layer
-				EplEventkPostError(kEplEventSourceEventk,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-			break;
-		}
-
-		//
-	case kEplEventSinkPdok:
-		{
-			// PDO-Module
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-			Ret = EplPdokProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourcePdok;
-
-				// Error event for API layer
-				EplEventkPostError(kEplEventSourceEventk,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-			break;
-		}
-
-		// events for Error handler module
-	case kEplEventSinkErrk:
-		{
-			// only call error handler if DLL is present
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplErrorHandlerkProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceErrk;
-
-				// Error event for API layer
-				EplEventkPostError(kEplEventSourceEventk,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-			break;
-#endif
-		}
-
-		// unknown sink
-	default:
-		{
-			Ret = kEplEventUnknownSink;
-		}
-
-	}			// end of switch(pEvent_p->m_EventSink)
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkPost
-//
-// Description: post events from kernel part
-//
-// Parameters:  pEvent_p    = pointer to event-structure from buffer
-//
-// Returns:     tEpKernel   = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkPost(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	tShbCirChunk ShbCirChunk;
-	unsigned long ulDataSize;
-	unsigned int fBufferCompleted;
-#endif
-
-	Ret = kEplSuccessful;
-
-	// the event must be posted by using the abBuffer
-	// it is neede because the Argument must by copied
-	// to the buffer too and not only the pointer
-
-#ifndef EPL_NO_FIFO
-	// 2006/08/03 d.k.: Event and argument are posted as separate chunks to the event queue.
-	ulDataSize =
-	    sizeof(tEplEvent) +
-	    ((pEvent_p->m_pArg != NULL) ? pEvent_p->m_uiSize : 0);
-#endif
-
-	// decide in which buffer the event have to write
-	switch (pEvent_p->m_EventSink) {
-		// kernelspace modules
-	case kEplEventSinkSync:
-	case kEplEventSinkNmtk:
-	case kEplEventSinkDllk:
-	case kEplEventSinkDllkCal:
-	case kEplEventSinkPdok:
-	case kEplEventSinkErrk:
-		{
-#ifndef EPL_NO_FIFO
-			// post message
-			BENCHMARK_MOD_27_SET(2);
-			ShbError =
-			    ShbCirAllocDataBlock(EplEventkInstance_g.
-						 m_pShbUserToKernelInstance,
-						 &ShbCirChunk, ulDataSize);
-			switch (ShbError) {
-			case kShbOk:
-				break;
-
-			case kShbBufferFull:
-				{
-					EplEventkInstance_g.
-					    m_uiUserToKernelFullCount++;
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-
-			default:
-				{
-					EPL_DBGLVL_EVENTK_TRACE1
-					    ("EplEventkPost(): ShbCirAllocDataBlock(U2K) -> 0x%X\n",
-					     ShbError);
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-			}
-			ShbError =
-			    ShbCirWriteDataChunk(EplEventkInstance_g.
-						 m_pShbUserToKernelInstance,
-						 &ShbCirChunk, pEvent_p,
-						 sizeof(tEplEvent),
-						 &fBufferCompleted);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventkPost(): ShbCirWriteDataChunk(U2K) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			if (fBufferCompleted == FALSE) {
-				ShbError =
-				    ShbCirWriteDataChunk(EplEventkInstance_g.
-							 m_pShbUserToKernelInstance,
-							 &ShbCirChunk,
-							 pEvent_p->m_pArg,
-							 (unsigned long)
-							 pEvent_p->m_uiSize,
-							 &fBufferCompleted);
-				if ((ShbError != kShbOk)
-				    || (fBufferCompleted == FALSE)) {
-					EPL_DBGLVL_EVENTK_TRACE1
-					    ("EplEventkPost(): ShbCirWriteDataChunk2(U2K) -> 0x%X\n",
-					     ShbError);
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-			}
-			BENCHMARK_MOD_27_RESET(2);
-
-#else
-			Ret = EplEventkProcess(pEvent_p);
-#endif
-
-			break;
-		}
-
-		// userspace modules
-	case kEplEventSinkNmtu:
-	case kEplEventSinkNmtMnu:
-	case kEplEventSinkSdoAsySeq:
-	case kEplEventSinkApi:
-	case kEplEventSinkDlluCal:
-	case kEplEventSinkErru:
-		{
-#ifndef EPL_NO_FIFO
-			// post message
-//            BENCHMARK_MOD_27_SET(3);    // 74 µs until reset
-			ShbError =
-			    ShbCirAllocDataBlock(EplEventkInstance_g.
-						 m_pShbKernelToUserInstance,
-						 &ShbCirChunk, ulDataSize);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventkPost(): ShbCirAllocDataBlock(K2U) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			ShbError =
-			    ShbCirWriteDataChunk(EplEventkInstance_g.
-						 m_pShbKernelToUserInstance,
-						 &ShbCirChunk, pEvent_p,
-						 sizeof(tEplEvent),
-						 &fBufferCompleted);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventkPost(): ShbCirWriteDataChunk(K2U) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			if (fBufferCompleted == FALSE) {
-				ShbError =
-				    ShbCirWriteDataChunk(EplEventkInstance_g.
-							 m_pShbKernelToUserInstance,
-							 &ShbCirChunk,
-							 pEvent_p->m_pArg,
-							 (unsigned long)
-							 pEvent_p->m_uiSize,
-							 &fBufferCompleted);
-				if ((ShbError != kShbOk)
-				    || (fBufferCompleted == FALSE)) {
-					EPL_DBGLVL_EVENTK_TRACE1
-					    ("EplEventkPost(): ShbCirWriteDataChunk2(K2U) -> 0x%X\n",
-					     ShbError);
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-			}
-//            BENCHMARK_MOD_27_RESET(3);  // 82 µs until ShbCirGetReadDataSize() in EplEventu
-
-#else
-			Ret = EplEventuProcess(pEvent_p);
-#endif
-
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplEventUnknownSink;
-		}
-
-	}			// end of switch(pEvent_p->m_EventSink)
-
-#ifndef EPL_NO_FIFO
-      Exit:
-#endif
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkPostError
-//
-// Description: post error event from kernel part to API layer
-//
-// Parameters:  EventSource_p   = source-module of the error event
-//              EplError_p      = code of occured error
-//              ArgSize_p       = size of the argument
-//              pArg_p          = pointer to the argument
-//
-// Returns:     tEpKernel       = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplEventkPostError(tEplEventSource EventSource_p,
-			      tEplKernel EplError_p,
-			      unsigned int uiArgSize_p, void *pArg_p)
-{
-	tEplKernel Ret;
-	u8 abBuffer[EPL_MAX_EVENT_ARG_SIZE];
-	tEplEventError *pEventError = (tEplEventError *) abBuffer;
-	tEplEvent EplEvent;
-
-	Ret = kEplSuccessful;
-
-	// create argument
-	pEventError->m_EventSource = EventSource_p;
-	pEventError->m_EplError = EplError_p;
-	EPL_MEMCPY(&pEventError->m_Arg, pArg_p, uiArgSize_p);
-
-	// create event
-	EplEvent.m_EventType = kEplEventTypeError;
-	EplEvent.m_EventSink = kEplEventSinkApi;
-	EPL_MEMSET(&EplEvent.m_NetTime, 0x00, sizeof(EplEvent.m_NetTime));
-	EplEvent.m_uiSize =
-	    (sizeof(EventSource_p) + sizeof(EplError_p) + uiArgSize_p);
-	EplEvent.m_pArg = &abBuffer[0];
-
-	// post errorevent
-	Ret = EplEventkPost(&EplEvent);
-
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventkRxSignalHandlerCb()
-//
-// Description: Callback-function for events from user and kernel part
-//
-// Parameters:  pShbRxInstance_p    = Instance-pointer of buffer
-//              ulDataSize_p        = size of data
-//
-// Returns: void
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#ifndef EPL_NO_FIFO
-static void EplEventkRxSignalHandlerCb(tShbInstance pShbRxInstance_p,
-				       unsigned long ulDataSize_p)
-{
-	tEplEvent *pEplEvent;
-	tShbError ShbError;
-//unsigned long   ulBlockCount;
-//unsigned long   ulDataSize;
-	u8 abDataBuffer[sizeof(tEplEvent) + EPL_MAX_EVENT_ARG_SIZE];
-	// d.k.: abDataBuffer contains the complete tEplEvent structure
-	//       and behind this the argument
-
-	TGT_DBG_SIGNAL_TRACE_POINT(20);
-
-	BENCHMARK_MOD_27_RESET(0);
-	// copy data from event queue
-	ShbError = ShbCirReadDataBlock(pShbRxInstance_p,
-				       &abDataBuffer[0],
-				       sizeof(abDataBuffer), &ulDataSize_p);
-	if (ShbError != kShbOk) {
-		// error goto exit
-		goto Exit;
-	}
-	// resolve the pointer to the event structure
-	pEplEvent = (tEplEvent *) abDataBuffer;
-	// set Datasize
-	pEplEvent->m_uiSize = (ulDataSize_p - sizeof(tEplEvent));
-	if (pEplEvent->m_uiSize > 0) {
-		// set pointer to argument
-		pEplEvent->m_pArg = &abDataBuffer[sizeof(tEplEvent)];
-	} else {
-		//set pointer to NULL
-		pEplEvent->m_pArg = NULL;
-	}
-
-	BENCHMARK_MOD_27_SET(0);
-	// call processfunction
-	EplEventkProcess(pEplEvent);
-
-      Exit:
-	return;
-}
-#endif
-
-// EOF
diff --git a/drivers/staging/epl/EplEventu.c b/drivers/staging/epl/EplEventu.c
deleted file mode 100644
index 3ae2841..0000000
--- a/drivers/staging/epl/EplEventu.c
+++ /dev/null
@@ -1,813 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for Epl-Userspace-Event-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplEventu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplEventu.h"
-#include "user/EplNmtu.h"
-#include "user/EplNmtMnu.h"
-#include "user/EplSdoAsySequ.h"
-#include "user/EplDlluCal.h"
-#include "user/EplLedu.h"
-#include "Benchmark.h"
-
-#ifdef EPL_NO_FIFO
-#include "kernel/EplEventk.h"
-#else
-#include "SharedBuff.h"
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-#ifndef EPL_NO_FIFO
-	tShbInstance m_pShbKernelToUserInstance;
-	tShbInstance m_pShbUserToKernelInstance;
-#endif
-	tEplProcessEventCb m_pfnApiProcessEventCb;
-
-} tEplEventuInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//#ifndef EPL_NO_FIFO
-static tEplEventuInstance EplEventuInstance_g;
-//#endif
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-#ifndef EPL_NO_FIFO
-// callback function for incomming events
-static void EplEventuRxSignalHandlerCb(tShbInstance pShbRxInstance_p,
-				       unsigned long ulDataSize_p);
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <Epl-User-Event>                                    */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuInit
-//
-// Description: function initialize the first instance
-//
-//
-//
-// Parameters:  pfnApiProcessEventCb_p  = function pointer for API event callback
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuInit(tEplProcessEventCb pfnApiProcessEventCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplEventuAddInstance(pfnApiProcessEventCb_p);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuAddInstance
-//
-// Description: function add one more instance
-//
-//
-//
-// Parameters:  pfnApiProcessEventCb_p  = function pointer for API event callback
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuAddInstance(tEplProcessEventCb pfnApiProcessEventCb_p)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	unsigned int fShbNewCreated;
-#endif
-
-	Ret = kEplSuccessful;
-
-	// init instance variables
-	EplEventuInstance_g.m_pfnApiProcessEventCb = pfnApiProcessEventCb_p;
-
-#ifndef EPL_NO_FIFO
-	// init shared loop buffer
-	// kernel -> user
-	ShbError = ShbCirAllocBuffer(EPL_EVENT_SIZE_SHB_KERNEL_TO_USER,
-				     EPL_EVENT_NAME_SHB_KERNEL_TO_USER,
-				     &EplEventuInstance_g.
-				     m_pShbKernelToUserInstance,
-				     &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuAddInstance(): ShbCirAllocBuffer(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	// user -> kernel
-	ShbError = ShbCirAllocBuffer(EPL_EVENT_SIZE_SHB_USER_TO_KERNEL,
-				     EPL_EVENT_NAME_SHB_USER_TO_KERNEL,
-				     &EplEventuInstance_g.
-				     m_pShbUserToKernelInstance,
-				     &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuAddInstance(): ShbCirAllocBuffer(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-	// register eventhandler
-	ShbError =
-	    ShbCirSetSignalHandlerNewData(EplEventuInstance_g.
-					  m_pShbKernelToUserInstance,
-					  EplEventuRxSignalHandlerCb,
-					  kShbPriorityNormal);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuAddInstance(): ShbCirSetSignalHandlerNewData(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-      Exit:
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuDelInstance
-//
-// Description: function delete instance an free the bufferstructure
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuDelInstance(void)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-#endif
-
-	Ret = kEplSuccessful;
-
-#ifndef EPL_NO_FIFO
-	// set eventhandler to NULL
-	ShbError =
-	    ShbCirSetSignalHandlerNewData(EplEventuInstance_g.
-					  m_pShbKernelToUserInstance, NULL,
-					  kShbPriorityNormal);
-	if (ShbError != kShbOk) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuDelInstance(): ShbCirSetSignalHandlerNewData(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	}
-	// free buffer User -> Kernel
-	ShbError =
-	    ShbCirReleaseBuffer(EplEventuInstance_g.m_pShbUserToKernelInstance);
-	if ((ShbError != kShbOk) && (ShbError != kShbMemUsedByOtherProcs)) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuDelInstance(): ShbCirReleaseBuffer(U2K) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	} else {
-		EplEventuInstance_g.m_pShbUserToKernelInstance = NULL;
-	}
-
-	// free buffer  Kernel -> User
-	ShbError =
-	    ShbCirReleaseBuffer(EplEventuInstance_g.m_pShbKernelToUserInstance);
-	if ((ShbError != kShbOk) && (ShbError != kShbMemUsedByOtherProcs)) {
-		EPL_DBGLVL_EVENTK_TRACE1
-		    ("EplEventuDelInstance(): ShbCirReleaseBuffer(K2U) -> 0x%X\n",
-		     ShbError);
-		Ret = kEplNoResource;
-	} else {
-		EplEventuInstance_g.m_pShbKernelToUserInstance = NULL;
-	}
-
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuProcess
-//
-// Description: Kernelthread that dispatches events in kernelspace
-//
-//
-//
-// Parameters:  pEvent_p = pointer to event-structur from buffer
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuProcess(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-	tEplEventSource EventSource;
-
-	Ret = kEplSuccessful;
-
-	// check m_EventSink
-	switch (pEvent_p->m_EventSink) {
-		// NMT-User-Module
-	case kEplEventSinkNmtu:
-		{
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-			Ret = EplNmtuProcessEvent(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceNmtu;
-
-				// Error event for API layer
-				EplEventuPostError(kEplEventSourceEventu,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-			break;
-		}
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		// NMT-MN-User-Module
-	case kEplEventSinkNmtMnu:
-		{
-			Ret = EplNmtMnuProcessEvent(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceNmtMnu;
-
-				// Error event for API layer
-				EplEventuPostError(kEplEventSourceEventu,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-			break;
-		}
-#endif
-
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)   \
-     || (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0))
-		// events for asynchronus SDO Sequence Layer
-	case kEplEventSinkSdoAsySeq:
-		{
-			Ret = EplSdoAsySeqProcessEvent(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceSdoAsySeq;
-
-				// Error event for API layer
-				EplEventuPostError(kEplEventSourceEventu,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-			break;
-		}
-#endif
-
-		// LED user part module
-	case kEplEventSinkLedu:
-		{
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-			Ret = EplLeduProcessEvent(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceLedu;
-
-				// Error event for API layer
-				EplEventuPostError(kEplEventSourceEventu,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-#endif
-			break;
-		}
-
-		// event for EPL api
-	case kEplEventSinkApi:
-		{
-			if (EplEventuInstance_g.m_pfnApiProcessEventCb != NULL) {
-				Ret =
-				    EplEventuInstance_g.
-				    m_pfnApiProcessEventCb(pEvent_p);
-				if ((Ret != kEplSuccessful)
-				    && (Ret != kEplShutdown)) {
-					EventSource = kEplEventSourceEplApi;
-
-					// Error event for API layer
-					EplEventuPostError
-					    (kEplEventSourceEventu, Ret,
-					     sizeof(EventSource), &EventSource);
-				}
-			}
-			break;
-
-		}
-
-	case kEplEventSinkDlluCal:
-		{
-			Ret = EplDlluCalProcess(pEvent_p);
-			if ((Ret != kEplSuccessful) && (Ret != kEplShutdown)) {
-				EventSource = kEplEventSourceDllu;
-
-				// Error event for API layer
-				EplEventuPostError(kEplEventSourceEventu,
-						   Ret,
-						   sizeof(EventSource),
-						   &EventSource);
-			}
-			break;
-
-		}
-
-	case kEplEventSinkErru:
-		{
-			/*
-			   Ret = EplErruProcess(pEvent_p);
-			   if ((Ret != kEplSuccessful) && (Ret != kEplShutdown))
-			   {
-			   EventSource = kEplEventSourceErru;
-
-			   // Error event for API layer
-			   EplEventuPostError(kEplEventSourceEventu,
-			   Ret,
-			   sizeof(EventSource),
-			   &EventSource);
-			   }
-			 */
-			break;
-
-		}
-
-		// unknown sink
-	default:
-		{
-			Ret = kEplEventUnknownSink;
-		}
-
-	}			// end of switch(pEvent_p->m_EventSink)
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuPost
-//
-// Description: post events from userspace
-//
-//
-//
-// Parameters:  pEvent_p = pointer to event-structur from buffer
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuPost(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-#ifndef EPL_NO_FIFO
-	tShbError ShbError;
-	tShbCirChunk ShbCirChunk;
-	unsigned long ulDataSize;
-	unsigned int fBufferCompleted;
-#endif
-
-	Ret = kEplSuccessful;
-
-#ifndef EPL_NO_FIFO
-	// 2006/08/03 d.k.: Event and argument are posted as separate chunks to the event queue.
-	ulDataSize =
-	    sizeof(tEplEvent) +
-	    ((pEvent_p->m_pArg != NULL) ? pEvent_p->m_uiSize : 0);
-#endif
-
-	// decide in which buffer the event have to write
-	switch (pEvent_p->m_EventSink) {
-		// kernelspace modules
-	case kEplEventSinkSync:
-	case kEplEventSinkNmtk:
-	case kEplEventSinkDllk:
-	case kEplEventSinkDllkCal:
-	case kEplEventSinkPdok:
-	case kEplEventSinkErrk:
-		{
-#ifndef EPL_NO_FIFO
-			// post message
-			ShbError =
-			    ShbCirAllocDataBlock(EplEventuInstance_g.
-						 m_pShbUserToKernelInstance,
-						 &ShbCirChunk, ulDataSize);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventuPost(): ShbCirAllocDataBlock(U2K) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			ShbError =
-			    ShbCirWriteDataChunk(EplEventuInstance_g.
-						 m_pShbUserToKernelInstance,
-						 &ShbCirChunk, pEvent_p,
-						 sizeof(tEplEvent),
-						 &fBufferCompleted);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventuPost(): ShbCirWriteDataChunk(U2K) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			if (fBufferCompleted == FALSE) {
-				ShbError =
-				    ShbCirWriteDataChunk(EplEventuInstance_g.
-							 m_pShbUserToKernelInstance,
-							 &ShbCirChunk,
-							 pEvent_p->m_pArg,
-							 (unsigned long)
-							 pEvent_p->m_uiSize,
-							 &fBufferCompleted);
-				if ((ShbError != kShbOk)
-				    || (fBufferCompleted == FALSE)) {
-					EPL_DBGLVL_EVENTK_TRACE1
-					    ("EplEventuPost(): ShbCirWriteDataChunk2(U2K) -> 0x%X\n",
-					     ShbError);
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-			}
-#else
-			Ret = EplEventkProcess(pEvent_p);
-#endif
-
-			break;
-		}
-
-		// userspace modules
-	case kEplEventSinkNmtMnu:
-	case kEplEventSinkNmtu:
-	case kEplEventSinkSdoAsySeq:
-	case kEplEventSinkApi:
-	case kEplEventSinkDlluCal:
-	case kEplEventSinkErru:
-	case kEplEventSinkLedu:
-		{
-#ifndef EPL_NO_FIFO
-			// post message
-			ShbError =
-			    ShbCirAllocDataBlock(EplEventuInstance_g.
-						 m_pShbKernelToUserInstance,
-						 &ShbCirChunk, ulDataSize);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventuPost(): ShbCirAllocDataBlock(K2U) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			ShbError =
-			    ShbCirWriteDataChunk(EplEventuInstance_g.
-						 m_pShbKernelToUserInstance,
-						 &ShbCirChunk, pEvent_p,
-						 sizeof(tEplEvent),
-						 &fBufferCompleted);
-			if (ShbError != kShbOk) {
-				EPL_DBGLVL_EVENTK_TRACE1
-				    ("EplEventuPost(): ShbCirWriteDataChunk(K2U) -> 0x%X\n",
-				     ShbError);
-				Ret = kEplEventPostError;
-				goto Exit;
-			}
-			if (fBufferCompleted == FALSE) {
-				ShbError =
-				    ShbCirWriteDataChunk(EplEventuInstance_g.
-							 m_pShbKernelToUserInstance,
-							 &ShbCirChunk,
-							 pEvent_p->m_pArg,
-							 (unsigned long)
-							 pEvent_p->m_uiSize,
-							 &fBufferCompleted);
-				if ((ShbError != kShbOk)
-				    || (fBufferCompleted == FALSE)) {
-					EPL_DBGLVL_EVENTK_TRACE1
-					    ("EplEventuPost(): ShbCirWriteDataChunk2(K2U) -> 0x%X\n",
-					     ShbError);
-					Ret = kEplEventPostError;
-					goto Exit;
-				}
-			}
-#else
-			Ret = EplEventuProcess(pEvent_p);
-#endif
-
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplEventUnknownSink;
-		}
-
-	}			// end of switch(pEvent_p->m_EventSink)
-
-#ifndef EPL_NO_FIFO
-      Exit:
-#endif
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuPostError
-//
-// Description: post errorevent from userspace
-//
-//
-//
-// Parameters:  EventSource_p   = source-module of the errorevent
-//              EplError_p     = code of occured error
-//              uiArgSize_p     = size of the argument
-//              pArg_p          = pointer to the argument
-//
-//
-// Returns:      tEpKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplEventuPostError(tEplEventSource EventSource_p,
-			      tEplKernel EplError_p,
-			      unsigned int uiArgSize_p, void *pArg_p)
-{
-	tEplKernel Ret;
-	u8 abBuffer[EPL_MAX_EVENT_ARG_SIZE];
-	tEplEventError *pEventError = (tEplEventError *) abBuffer;
-	tEplEvent EplEvent;
-
-	Ret = kEplSuccessful;
-
-	// create argument
-	pEventError->m_EventSource = EventSource_p;
-	pEventError->m_EplError = EplError_p;
-	EPL_MEMCPY(&pEventError->m_Arg, pArg_p, uiArgSize_p);
-
-	// create event
-	EplEvent.m_EventType = kEplEventTypeError;
-	EplEvent.m_EventSink = kEplEventSinkApi;
-	EPL_MEMSET(&EplEvent.m_NetTime, 0x00, sizeof(EplEvent.m_NetTime));
-	EplEvent.m_uiSize =
-	    (sizeof(EventSource_p) + sizeof(EplError_p) + uiArgSize_p);
-	EplEvent.m_pArg = &abBuffer[0];
-
-	// post errorevent
-	Ret = EplEventuPost(&EplEvent);
-
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEventuRxSignalHandlerCb()
-//
-// Description: Callback-function for evets from kernelspace
-//
-//
-//
-// Parameters:  pShbRxInstance_p    = Instance-pointer for buffer
-//              ulDataSize_p        = size of data
-//
-//
-// Returns: void
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#ifndef EPL_NO_FIFO
-static void EplEventuRxSignalHandlerCb(tShbInstance pShbRxInstance_p,
-				       unsigned long ulDataSize_p)
-{
-	tEplEvent *pEplEvent;
-	tShbError ShbError;
-//unsigned long   ulBlockCount;
-//unsigned long   ulDataSize;
-	u8 abDataBuffer[sizeof(tEplEvent) + EPL_MAX_EVENT_ARG_SIZE];
-	// d.k.: abDataBuffer contains the complete tEplEvent structure
-	//       and behind this the argument
-
-	TGT_DBG_SIGNAL_TRACE_POINT(21);
-
-// d.k. not needed because it is already done in SharedBuff
-/*    do
-    {
-        BENCHMARK_MOD_28_SET(1);    // 4 µs until reset
-        // get messagesize
-        ShbError = ShbCirGetReadDataSize (pShbRxInstance_p, &ulDataSize);
-        if(ShbError != kShbOk)
-        {
-            // error goto exit
-            goto Exit;
-        }
-
-        BENCHMARK_MOD_28_RESET(1);  // 14 µs until set
-*/
-	// copy data from event queue
-	ShbError = ShbCirReadDataBlock(pShbRxInstance_p,
-				       &abDataBuffer[0],
-				       sizeof(abDataBuffer), &ulDataSize_p);
-	if (ShbError != kShbOk) {
-		// error goto exit
-		goto Exit;
-	}
-	// resolve the pointer to the event structure
-	pEplEvent = (tEplEvent *) abDataBuffer;
-	// set Datasize
-	pEplEvent->m_uiSize = (ulDataSize_p - sizeof(tEplEvent));
-	if (pEplEvent->m_uiSize > 0) {
-		// set pointer to argument
-		pEplEvent->m_pArg = &abDataBuffer[sizeof(tEplEvent)];
-	} else {
-		//set pointer to NULL
-		pEplEvent->m_pArg = NULL;
-	}
-
-	BENCHMARK_MOD_28_SET(1);
-	// call processfunction
-	EplEventuProcess(pEplEvent);
-
-	BENCHMARK_MOD_28_RESET(1);
-	// read number of left messages to process
-// d.k. not needed because it is already done in SharedBuff
-/*        ShbError = ShbCirGetReadBlockCount (pShbRxInstance_p, &ulBlockCount);
-        if (ShbError != kShbOk)
-        {
-            // error goto exit
-            goto Exit;
-        }
-    } while (ulBlockCount > 0);
-*/
-      Exit:
-	return;
-}
-#endif
-
-// EOF
diff --git a/drivers/staging/epl/EplFrame.h b/drivers/staging/epl/EplFrame.h
deleted file mode 100644
index ba1ae9e..0000000
--- a/drivers/staging/epl/EplFrame.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL frames
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplFrame.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/06/23 14:56:33 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_FRAME_H_
-#define _EPL_FRAME_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// defines for EplFrame.m_wFlag
-#define EPL_FRAME_FLAG1_RD          0x01	// ready                                    (PReq, PRes)
-#define EPL_FRAME_FLAG1_ER          0x02	// exception reset (error signalling)       (SoA)
-#define EPL_FRAME_FLAG1_EA          0x04	// exception acknowledge (error signalling) (PReq, SoA)
-#define EPL_FRAME_FLAG1_EC          0x08	// exception clear (error signalling)       (StatusRes)
-#define EPL_FRAME_FLAG1_EN          0x10	// exception new (error signalling)         (PRes, StatusRes)
-#define EPL_FRAME_FLAG1_MS          0x20	// multiplexed slot                         (PReq)
-#define EPL_FRAME_FLAG1_PS          0x40	// prescaled slot                           (SoC)
-#define EPL_FRAME_FLAG1_MC          0x80	// multiplexed cycle completed              (SoC)
-#define EPL_FRAME_FLAG2_RS          0x07	// number of pending requests to send       (PRes, StatusRes, IdentRes)
-#define EPL_FRAME_FLAG2_PR          0x38	// priority of requested asynch. frame      (PRes, StatusRes, IdentRes)
-#define EPL_FRAME_FLAG2_PR_SHIFT    3	// shift of priority of requested asynch. frame
-
-// error history/status entry types
-#define EPL_ERR_ENTRYTYPE_STATUS        0x8000
-#define EPL_ERR_ENTRYTYPE_HISTORY       0x0000
-#define EPL_ERR_ENTRYTYPE_EMCY          0x4000
-#define EPL_ERR_ENTRYTYPE_MODE_ACTIVE   0x1000
-#define EPL_ERR_ENTRYTYPE_MODE_CLEARED  0x2000
-#define EPL_ERR_ENTRYTYPE_MODE_OCCURRED 0x3000
-#define EPL_ERR_ENTRYTYPE_MODE_MASK     0x3000
-#define EPL_ERR_ENTRYTYPE_PROF_VENDOR   0x0001
-#define EPL_ERR_ENTRYTYPE_PROF_EPL      0x0002
-#define EPL_ERR_ENTRYTYPE_PROF_MASK     0x0FFF
-
-// defines for EPL version / PDO version
-#define EPL_VERSION_SUB             0x0F	// sub version
-#define EPL_VERSION_MAIN            0xF0	// main version
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-// $$$ d.k.: move this definition to global.h
-// byte-align structures
-#ifdef _MSC_VER
-#    pragma pack( push, packing )
-#    pragma pack( 1 )
-#    define PACK_STRUCT
-#elif defined( __GNUC__ )
-#    define PACK_STRUCT    __attribute__((packed))
-#else
-#    error you must byte-align these structures with the appropriate compiler directives
-#endif
-
-typedef struct {
-	// Offset 17
-	u8 m_le_bRes1;	// reserved
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: MC, PS
-	// Offset 19
-	u8 m_le_bFlag2;	// Flags: res
-	// Offset 20
-	tEplNetTime m_le_NetTime;	// supported if D_NMT_NetTimeIsRealTime_BOOL is set
-	// Offset 28
-	u64 m_le_RelativeTime;	// in us (supported if D_NMT_RelativeTime_BOOL is set)
-
-} PACK_STRUCT tEplSocFrame;
-
-typedef struct {
-	// Offset 17
-	u8 m_le_bRes1;	// reserved
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: MS, EA, RD
-	// Offset 19
-	u8 m_le_bFlag2;	// Flags: res
-	// Offset 20
-	u8 m_le_bPdoVersion;
-	// Offset 21
-	u8 m_le_bRes2;	// reserved
-	// Offset 22
-	u16 m_le_wSize;
-	// Offset 24
-	u8 m_le_abPayload[256 /*D_NMT_IsochrRxMaxPayload_U16 */ ];
-
-} PACK_STRUCT tEplPreqFrame;
-
-typedef struct {
-	// Offset 17
-	u8 m_le_bNmtStatus;	// NMT state
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: MS, EN, RD
-	// Offset 19
-	u8 m_le_bFlag2;	// Flags: PR, RS
-	// Offset 20
-	u8 m_le_bPdoVersion;
-	// Offset 21
-	u8 m_le_bRes2;	// reserved
-	// Offset 22
-	u16 m_le_wSize;
-	// Offset 24
-	u8 m_le_abPayload[256	/*D_NMT_IsochrRxMaxPayload_U16
-				   / D_NMT_IsochrTxMaxPayload_U16 */ ];
-
-} PACK_STRUCT tEplPresFrame;
-
-typedef struct {
-	// Offset 17
-	u8 m_le_bNmtStatus;	// NMT state
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: EA, ER
-	// Offset 19
-	u8 m_le_bFlag2;	// Flags: res
-	// Offset 20
-	u8 m_le_bReqServiceId;
-	// Offset 21
-	u8 m_le_bReqServiceTarget;
-	// Offset 22
-	u8 m_le_bEplVersion;
-
-} PACK_STRUCT tEplSoaFrame;
-
-typedef struct {
-	u16 m_wEntryType;
-	u16 m_wErrorCode;
-	tEplNetTime m_TimeStamp;
-	u8 m_abAddInfo[8];
-
-} PACK_STRUCT tEplErrHistoryEntry;
-
-typedef struct {
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: EN, EC
-	u8 m_le_bFlag2;	// Flags: PR, RS
-	u8 m_le_bNmtStatus;	// NMT state
-	u8 m_le_bRes1[3];
-	u64 m_le_qwStaticError;	// static error bit field
-	tEplErrHistoryEntry m_le_aErrHistoryEntry[14];
-
-} PACK_STRUCT tEplStatusResponse;
-
-typedef struct {
-	// Offset 18
-	u8 m_le_bFlag1;	// Flags: res
-	u8 m_le_bFlag2;	// Flags: PR, RS
-	u8 m_le_bNmtStatus;	// NMT state
-	u8 m_le_bIdentRespFlags;	// Flags: FW
-	u8 m_le_bEplProfileVersion;
-	u8 m_le_bRes1;
-	u32 m_le_dwFeatureFlags;	// NMT_FeatureFlags_U32
-	u16 m_le_wMtu;		// NMT_CycleTiming_REC.AsyncMTU_U16: C_IP_MIN_MTU - C_IP_MAX_MTU
-	u16 m_le_wPollInSize;	// NMT_CycleTiming_REC.PReqActPayload_U16
-	u16 m_le_wPollOutSize;	// NMT_CycleTiming_REC.PResActPayload_U16
-	u32 m_le_dwResponseTime;	// NMT_CycleTiming_REC.PResMaxLatency_U32
-	u16 m_le_wRes2;
-	u32 m_le_dwDeviceType;	// NMT_DeviceType_U32
-	u32 m_le_dwVendorId;	// NMT_IdentityObject_REC.VendorId_U32
-	u32 m_le_dwProductCode;	// NMT_IdentityObject_REC.ProductCode_U32
-	u32 m_le_dwRevisionNumber;	// NMT_IdentityObject_REC.RevisionNo_U32
-	u32 m_le_dwSerialNumber;	// NMT_IdentityObject_REC.SerialNo_U32
-	u64 m_le_qwVendorSpecificExt1;
-	u32 m_le_dwVerifyConfigurationDate;	// CFM_VerifyConfiguration_REC.ConfDate_U32
-	u32 m_le_dwVerifyConfigurationTime;	// CFM_VerifyConfiguration_REC.ConfTime_U32
-	u32 m_le_dwApplicationSwDate;	// PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_le_dwApplicationSwTime;	// PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
-	u32 m_le_dwIpAddress;
-	u32 m_le_dwSubnetMask;
-	u32 m_le_dwDefaultGateway;
-	u8 m_le_sHostname[32];
-	u8 m_le_abVendorSpecificExt2[48];
-
-} PACK_STRUCT tEplIdentResponse;
-
-typedef struct {
-	// Offset 18
-	u8 m_le_bNmtCommandId;
-	u8 m_le_bRes1;
-	u8 m_le_abNmtCommandData[32];
-
-} PACK_STRUCT tEplNmtCommandService;
-
-typedef struct {
-	u8 m_le_bReserved;
-	u8 m_le_bTransactionId;
-	u8 m_le_bFlags;
-	u8 m_le_bCommandId;
-	u16 m_le_wSegmentSize;
-	u16 m_le_wReserved;
-	u8 m_le_abCommandData[8];	// just reserve a minimum number of bytes as a placeholder
-
-} PACK_STRUCT tEplAsySdoCom;
-
-// asynchronous SDO Sequence Header
-typedef struct {
-	u8 m_le_bRecSeqNumCon;
-	u8 m_le_bSendSeqNumCon;
-	u8 m_le_abReserved[2];
-	tEplAsySdoCom m_le_abSdoSeqPayload;
-
-} PACK_STRUCT tEplAsySdoSeq;
-
-typedef struct {
-	// Offset 18
-	u8 m_le_bNmtCommandId;
-	u8 m_le_bTargetNodeId;
-	u8 m_le_abNmtCommandData[32];
-
-} PACK_STRUCT tEplNmtRequestService;
-
-typedef union {
-	// Offset 18
-	tEplStatusResponse m_StatusResponse;
-	tEplIdentResponse m_IdentResponse;
-	tEplNmtCommandService m_NmtCommandService;
-	tEplNmtRequestService m_NmtRequestService;
-	tEplAsySdoSeq m_SdoSequenceFrame;
-	u8 m_le_abPayload[256	/*D_NMT_ASndTxMaxPayload_U16
-				   / D_NMT_ASndRxMaxPayload_U16 */ ];
-
-} tEplAsndPayload;
-
-typedef struct {
-	// Offset 17
-	u8 m_le_bServiceId;
-	// Offset 18
-	tEplAsndPayload m_Payload;
-
-} PACK_STRUCT tEplAsndFrame;
-
-typedef union {
-	// Offset 17
-	tEplSocFrame m_Soc;
-	tEplPreqFrame m_Preq;
-	tEplPresFrame m_Pres;
-	tEplSoaFrame m_Soa;
-	tEplAsndFrame m_Asnd;
-
-} tEplFrameData;
-
-typedef struct {
-	// Offset 0
-	u8 m_be_abDstMac[6];	// MAC address of the addressed nodes
-	// Offset 6
-	u8 m_be_abSrcMac[6];	// MAC address of the transmitting node
-	// Offset 12
-	u16 m_be_wEtherType;	// Ethernet message type (big endian)
-	// Offset 14
-	u8 m_le_bMessageType;	// EPL message type
-	// Offset 15
-	u8 m_le_bDstNodeId;	// EPL node ID of the addressed nodes
-	// Offset 16
-	u8 m_le_bSrcNodeId;	// EPL node ID of the transmitting node
-	// Offset 17
-	tEplFrameData m_Data;
-
-} PACK_STRUCT tEplFrame;
-
-// un-byte-align structures
-#ifdef _MSC_VER
-#    pragma pack( pop, packing )
-#endif
-
-typedef enum {
-	kEplMsgTypeNonEpl = 0x00,
-	kEplMsgTypeSoc = 0x01,
-	kEplMsgTypePreq = 0x03,
-	kEplMsgTypePres = 0x04,
-	kEplMsgTypeSoa = 0x05,
-	kEplMsgTypeAsnd = 0x06,
-
-} tEplMsgType;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_FRAME_H_
diff --git a/drivers/staging/epl/EplIdentu.c b/drivers/staging/epl/EplIdentu.c
deleted file mode 100644
index 93d5a40..0000000
--- a/drivers/staging/epl/EplIdentu.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for Identu-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplIdentu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/21 09:00:38 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/11/15 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplIdentu.h"
-#include "user/EplDlluCal.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <xxxxx>                                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplIdentResponse *m_apIdentResponse[254];	// the IdentResponse are managed dynamically
-	tEplIdentuCbResponse m_apfnCbResponse[254];
-
-} tEplIdentuInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplIdentuInstance EplIdentuInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplIdentuCbIdentResponse(tEplFrameInfo *pFrameInfo_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplIdentuAddInstance();
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuAddInstance
-//
-// Description: init other instances of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplIdentuInstance_g, 0, sizeof(EplIdentuInstance_g));
-
-	// register IdentResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndIdentResponse,
-				     EplIdentuCbIdentResponse,
-				     kEplDllAsndFilterAny);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuDelInstance
-//
-// Description: delete instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// deregister IdentResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndIdentResponse, NULL,
-				     kEplDllAsndFilterNone);
-
-	Ret = EplIdentuReset();
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuReset
-//
-// Description: resets this instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuReset(void)
-{
-	tEplKernel Ret;
-	int iIndex;
-
-	Ret = kEplSuccessful;
-
-	for (iIndex = 0;
-	     iIndex < tabentries(EplIdentuInstance_g.m_apIdentResponse);
-	     iIndex++) {
-		if (EplIdentuInstance_g.m_apIdentResponse[iIndex] != NULL) {	// free memory
-			EPL_FREE(EplIdentuInstance_g.m_apIdentResponse[iIndex]);
-		}
-	}
-
-	EPL_MEMSET(&EplIdentuInstance_g, 0, sizeof(EplIdentuInstance_g));
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuGetIdentResponse
-//
-// Description: returns the IdentResponse for the specified node.
-//
-// Parameters:  uiNodeId_p                  = IN: node ID
-//              ppIdentResponse_p           = OUT: pointer to pointer of IdentResponse
-//                                            equals NULL, if no IdentResponse available
-//
-// Return:      tEplKernel                  = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuGetIdentResponse(unsigned int uiNodeId_p,
-				     tEplIdentResponse **ppIdentResponse_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// decrement node ID, because array is zero based
-	uiNodeId_p--;
-	if (uiNodeId_p < tabentries(EplIdentuInstance_g.m_apIdentResponse)) {
-		*ppIdentResponse_p =
-		    EplIdentuInstance_g.m_apIdentResponse[uiNodeId_p];
-	} else {		// invalid node ID specified
-		*ppIdentResponse_p = NULL;
-		Ret = kEplInvalidNodeId;
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuRequestIdentResponse
-//
-// Description: returns the IdentResponse for the specified node.
-//
-// Parameters:  uiNodeId_p                  = IN: node ID
-//              pfnCbResponse_p             = IN: function pointer to callback function
-//                                            which will be called if IdentResponse is received
-//
-// Return:      tEplKernel                  = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplIdentuRequestIdentResponse(unsigned int uiNodeId_p,
-					 tEplIdentuCbResponse pfnCbResponse_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// decrement node ID, because array is zero based
-	uiNodeId_p--;
-	if (uiNodeId_p < tabentries(EplIdentuInstance_g.m_apfnCbResponse)) {
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		if (EplIdentuInstance_g.m_apfnCbResponse[uiNodeId_p] != NULL) {	// request already issued (maybe by someone else)
-			Ret = kEplInvalidOperation;
-		} else {
-			EplIdentuInstance_g.m_apfnCbResponse[uiNodeId_p] =
-			    pfnCbResponse_p;
-			Ret =
-			    EplDlluCalIssueRequest(kEplDllReqServiceIdent,
-						   (uiNodeId_p + 1), 0xFF);
-		}
-#else
-		Ret = kEplInvalidOperation;
-#endif
-	} else {		// invalid node ID specified
-		Ret = kEplInvalidNodeId;
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuGetRunningRequests
-//
-// Description: returns a bit field with the running requests for node-ID 1-32
-//              just for debugging purposes
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-u32 EplIdentuGetRunningRequests(void)
-{
-	u32 dwReqs = 0;
-	unsigned int uiIndex;
-
-	for (uiIndex = 0; uiIndex < 32; uiIndex++) {
-		if (EplIdentuInstance_g.m_apfnCbResponse[uiIndex] != NULL) {
-			dwReqs |= (1 << uiIndex);
-		}
-	}
-
-	return dwReqs;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplIdentuCbIdentResponse
-//
-// Description: callback funktion for IdentResponse
-//
-//
-//
-// Parameters:  pFrameInfo_p            = Frame with the IdentResponse
-//
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplIdentuCbIdentResponse(tEplFrameInfo *pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiNodeId;
-	unsigned int uiIndex;
-	tEplIdentuCbResponse pfnCbResponse;
-
-	uiNodeId = AmiGetByteFromLe(&pFrameInfo_p->m_pFrame->m_le_bSrcNodeId);
-
-	uiIndex = uiNodeId - 1;
-
-	if (uiIndex < tabentries(EplIdentuInstance_g.m_apfnCbResponse)) {
-		// memorize pointer to callback function
-		pfnCbResponse = EplIdentuInstance_g.m_apfnCbResponse[uiIndex];
-		// reset callback function pointer so that caller may issue next request immediately
-		EplIdentuInstance_g.m_apfnCbResponse[uiIndex] = NULL;
-
-		if (pFrameInfo_p->m_uiFrameSize < EPL_C_DLL_MINSIZE_IDENTRES) {	// IdentResponse not received or it has invalid size
-			if (pfnCbResponse == NULL) {	// response was not requested
-				goto Exit;
-			}
-			Ret = pfnCbResponse(uiNodeId, NULL);
-		} else {	// IdentResponse received
-			if (EplIdentuInstance_g.m_apIdentResponse[uiIndex] == NULL) {	// memory for IdentResponse must be allocated
-				EplIdentuInstance_g.m_apIdentResponse[uiIndex] =
-				    EPL_MALLOC(sizeof(tEplIdentResponse));
-				if (EplIdentuInstance_g.m_apIdentResponse[uiIndex] == NULL) {	// malloc failed
-					if (pfnCbResponse == NULL) {	// response was not requested
-						goto Exit;
-					}
-					Ret =
-					    pfnCbResponse(uiNodeId,
-							  &pFrameInfo_p->
-							  m_pFrame->m_Data.
-							  m_Asnd.m_Payload.
-							  m_IdentResponse);
-					goto Exit;
-				}
-			}
-			// copy IdentResponse to instance structure
-			EPL_MEMCPY(EplIdentuInstance_g.
-				   m_apIdentResponse[uiIndex],
-				   &pFrameInfo_p->m_pFrame->m_Data.m_Asnd.
-				   m_Payload.m_IdentResponse,
-				   sizeof(tEplIdentResponse));
-			if (pfnCbResponse == NULL) {	// response was not requested
-				goto Exit;
-			}
-			Ret =
-			    pfnCbResponse(uiNodeId,
-					  EplIdentuInstance_g.
-					  m_apIdentResponse[uiIndex]);
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplInc.h b/drivers/staging/epl/EplInc.h
deleted file mode 100644
index f91797a..0000000
--- a/drivers/staging/epl/EplInc.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  basic include file for internal EPL stack modules
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplInc.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_INC_H_
-#define _EPL_INC_H_
-
-// ============================================================================
-// include files
-// ============================================================================
-#if defined(WIN32) || defined(_WIN32)
-
-#ifdef UNDER_RTSS
-	// RTX header
-#include <windows.h>
-#include <process.h>
-#include <rtapi.h>
-
-#elif __BORLANDC__
-	// borland C header
-#include <windows.h>
-#include <process.h>
-
-#elif WINCE
-#include <windows.h>
-
-#else
-	// MSVC needs to include windows.h at first
-	// the following defines ar necessary for function prototypes for waitable timers
-#define _WIN32_WINDOWS 0x0401
-#define _WIN32_WINNT   0x0400
-#include <windows.h>
-#include <process.h>
-#endif
-
-#endif
-
-// defines for module integration
-// possible other include file needed
-// These constants defines modules which can be included in the Epl application.
-// Use this constants for define EPL_MODULE_INTEGRATION in file EplCfg.h.
-#define EPL_MODULE_OBDK        0x00000001L	// OBD kernel part module
-#define EPL_MODULE_PDOK        0x00000002L	// PDO kernel part module
-#define EPL_MODULE_NMT_MN      0x00000004L	// NMT MN module
-#define EPL_MODULE_SDOS        0x00000008L	// SDO Server module
-#define EPL_MODULE_SDOC        0x00000010L	// SDO Client module
-#define EPL_MODULE_SDO_ASND    0x00000020L	// SDO over Asnd module
-#define EPL_MODULE_SDO_UDP     0x00000040L	// SDO over UDP module
-#define EPL_MODULE_SDO_PDO     0x00000080L	// SDO in PDO module
-#define EPL_MODULE_NMT_CN      0x00000100L	// NMT CN module
-#define EPL_MODULE_NMTU        0x00000200L	// NMT user part module
-#define EPL_MODULE_NMTK        0x00000400L	// NMT kernel part module
-#define EPL_MODULE_DLLK        0x00000800L	// DLL kernel part module
-#define EPL_MODULE_DLLU        0x00001000L	// DLL user part module
-#define EPL_MODULE_OBDU        0x00002000L	// OBD user part module
-#define EPL_MODULE_CFGMA       0x00004000L	// Configuartioan Manager module
-#define EPL_MODULE_VETH        0x00008000L	// virtual ethernet driver module
-#define EPL_MODULE_PDOU        0x00010000L	// PDO user part module
-#define EPL_MODULE_LEDU        0x00020000L	// LED user part module
-
-#include "EplCfg.h"		// EPL configuration file (configuration from application)
-
-#include "global.h"		// global definitions
-
-#include "EplDef.h"		// EPL configuration file (default configuration)
-#include "EplInstDef.h"		// defines macros for instance types and table
-#include "Debug.h"		// debug definitions
-
-#include "EplErrDef.h"		// EPL error codes for API funtions
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-// IEEE 1588 conformant net time structure
-typedef struct {
-	u32 m_dwSec;
-	u32 m_dwNanoSec;
-
-} tEplNetTime;
-
-#include "EplTarget.h"		// target specific functions and definitions
-
-#include "EplAmi.h"
-
-// -------------------------------------------------------------------------
-// macros
-// -------------------------------------------------------------------------
-
-#define EPL_SPEC_VERSION                    0x20	// ETHERNET Powerlink V. 2.0
-#define EPL_STACK_VERSION(ver,rev,rel)      ((((u32)(ver)) & 0xFF)|((((u32)(rev))&0xFF)<<8)|(((u32)(rel))<<16))
-#define EPL_OBJ1018_VERSION(ver,rev,rel)    ((((u32)(ver))<<16) |(((u32)(rev))&0xFFFF))
-#define EPL_STRING_VERSION(ver,rev,rel)     "V" #ver "." #rev " r" #rel
-
-#include "EplVersion.h"
-
-// defines for EPL FeatureFlags
-#define EPL_FEATURE_ISOCHR          0x00000001
-#define EPL_FEATURE_SDO_UDP         0x00000002
-#define EPL_FEATURE_SDO_ASND        0x00000004
-#define EPL_FEATURE_SDO_PDO         0x00000008
-#define EPL_FEATURE_NMT_INFO        0x00000010
-#define EPL_FEATURE_NMT_EXT         0x00000020
-#define EPL_FEATURE_PDO_DYN         0x00000040
-#define EPL_FEATURE_NMT_UDP         0x00000080
-#define EPL_FEATURE_CFGMA           0x00000100
-#define EPL_FEATURE_DLL_MULTIPLEX   0x00000200
-#define EPL_FEATURE_NODEID_SW       0x00000400
-#define EPL_FEATURE_NMT_BASICETH    0x00000800
-#define EPL_FEATURE_RT1             0x00001000
-#define EPL_FEATURE_RT2             0x00002000
-
-// generate EPL NMT_FeatureFlags_U32
-#ifndef EPL_DEF_FEATURE_ISOCHR
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-#define EPL_DEF_FEATURE_ISOCHR          (EPL_FEATURE_ISOCHR)
-#else
-#define EPL_DEF_FEATURE_ISOCHR          0
-#endif
-#endif
-
-#ifndef EPL_DEF_FEATURE_SDO_ASND
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-#define EPL_DEF_FEATURE_SDO_ASND        (EPL_FEATURE_SDO_ASND)
-#else
-#define EPL_DEF_FEATURE_SDO_ASND        0
-#endif
-#endif
-
-#ifndef EPL_DEF_FEATURE_SDO_UDP
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-#define EPL_DEF_FEATURE_SDO_UDP         (EPL_FEATURE_SDO_UDP)
-#else
-#define EPL_DEF_FEATURE_SDO_UDP         0
-#endif
-#endif
-
-#ifndef EPL_DEF_FEATURE_SDO_PDO
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_PDO)) != 0)
-#define EPL_DEF_FEATURE_SDO_PDO         (EPL_FEATURE_SDO_PDO)
-#else
-#define EPL_DEF_FEATURE_SDO_PDO         0
-#endif
-#endif
-
-#ifndef EPL_DEF_FEATURE_PDO_DYN
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-#define EPL_DEF_FEATURE_PDO_DYN         (EPL_FEATURE_PDO_DYN)
-#else
-#define EPL_DEF_FEATURE_PDO_DYN         0
-#endif
-#endif
-
-#ifndef EPL_DEF_FEATURE_CFGMA
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_CFGMA)) != 0)
-#define EPL_DEF_FEATURE_CFGMA           (EPL_FEATURE_CFGMA)
-#else
-#define EPL_DEF_FEATURE_CFGMA           0
-#endif
-#endif
-
-#define EPL_DEF_FEATURE_FLAGS                   (EPL_DEF_FEATURE_ISOCHR \
-                                                | EPL_DEF_FEATURE_SDO_ASND \
-                                                | EPL_DEF_FEATURE_SDO_UDP \
-                                                | EPL_DEF_FEATURE_SDO_PDO \
-                                                | EPL_DEF_FEATURE_PDO_DYN \
-                                                | EPL_DEF_FEATURE_CFGMA)
-
-#ifndef tabentries
-#define tabentries(a)   (sizeof(a)/sizeof(*(a)))
-#endif
-
-// ============================================================================
-// common debug macros
-// ============================================================================
-// for using macro DEBUG_TRACEx()
-//
-// Example:
-//      DEBUG_TRACE1 (EPL_DBGLVL_OBD, "Value is %d\n" , wObjectIndex);
-//
-// This message only will be printed if:
-//      - NDEBUG is not defined     AND !!!
-//      - flag 0x00000004L is set in DEF_DEBUG_LVL (can be defined in copcfg.h)
-//
-// default level is defined in copdef.h
-
-// debug-level and TRACE-macros         // standard-level   // flags for DEF_DEBUG_LVL
-#define EPL_DBGLVL_EDRV                 DEBUG_LVL_01	// 0x00000001L
-#define EPL_DBGLVL_EDRV_TRACE0          DEBUG_LVL_01_TRACE0
-#define EPL_DBGLVL_EDRV_TRACE1          DEBUG_LVL_01_TRACE1
-#define EPL_DBGLVL_EDRV_TRACE2          DEBUG_LVL_01_TRACE2
-#define EPL_DBGLVL_EDRV_TRACE3          DEBUG_LVL_01_TRACE3
-#define EPL_DBGLVL_EDRV_TRACE4          DEBUG_LVL_01_TRACE4
-
-#define EPL_DBGLVL_DLL                  DEBUG_LVL_02	// 0x00000002L
-#define EPL_DBGLVL_DLL_TRACE0           DEBUG_LVL_02_TRACE0
-#define EPL_DBGLVL_DLL_TRACE1           DEBUG_LVL_02_TRACE1
-#define EPL_DBGLVL_DLL_TRACE2           DEBUG_LVL_02_TRACE2
-#define EPL_DBGLVL_DLL_TRACE3           DEBUG_LVL_02_TRACE3
-#define EPL_DBGLVL_DLL_TRACE4           DEBUG_LVL_02_TRACE4
-
-#define EPL_DBGLVL_OBD                  DEBUG_LVL_03	// 0x00000004L
-#define EPL_DBGLVL_OBD_TRACE0           DEBUG_LVL_03_TRACE0
-#define EPL_DBGLVL_OBD_TRACE1           DEBUG_LVL_03_TRACE1
-#define EPL_DBGLVL_OBD_TRACE2           DEBUG_LVL_03_TRACE2
-#define EPL_DBGLVL_OBD_TRACE3           DEBUG_LVL_03_TRACE3
-#define EPL_DBGLVL_OBD_TRACE4           DEBUG_LVL_03_TRACE4
-
-#define EPL_DBGLVL_NMTK                 DEBUG_LVL_04	// 0x00000008L
-#define EPL_DBGLVL_NMTK_TRACE0          DEBUG_LVL_04_TRACE0
-#define EPL_DBGLVL_NMTK_TRACE1          DEBUG_LVL_04_TRACE1
-#define EPL_DBGLVL_NMTK_TRACE2          DEBUG_LVL_04_TRACE2
-#define EPL_DBGLVL_NMTK_TRACE3          DEBUG_LVL_04_TRACE3
-#define EPL_DBGLVL_NMTK_TRACE4          DEBUG_LVL_04_TRACE4
-
-#define EPL_DBGLVL_NMTCN                DEBUG_LVL_05	// 0x00000010L
-#define EPL_DBGLVL_NMTCN_TRACE0         DEBUG_LVL_05_TRACE0
-#define EPL_DBGLVL_NMTCN_TRACE1         DEBUG_LVL_05_TRACE1
-#define EPL_DBGLVL_NMTCN_TRACE2         DEBUG_LVL_05_TRACE2
-#define EPL_DBGLVL_NMTCN_TRACE3         DEBUG_LVL_05_TRACE3
-#define EPL_DBGLVL_NMTCN_TRACE4         DEBUG_LVL_05_TRACE4
-
-#define EPL_DBGLVL_NMTU                 DEBUG_LVL_06	// 0x00000020L
-#define EPL_DBGLVL_NMTU_TRACE0          DEBUG_LVL_06_TRACE0
-#define EPL_DBGLVL_NMTU_TRACE1          DEBUG_LVL_06_TRACE1
-#define EPL_DBGLVL_NMTU_TRACE2          DEBUG_LVL_06_TRACE2
-#define EPL_DBGLVL_NMTU_TRACE3          DEBUG_LVL_06_TRACE3
-#define EPL_DBGLVL_NMTU_TRACE4          DEBUG_LVL_06_TRACE4
-
-#define EPL_DBGLVL_NMTMN                DEBUG_LVL_07	// 0x00000040L
-#define EPL_DBGLVL_NMTMN_TRACE0         DEBUG_LVL_07_TRACE0
-#define EPL_DBGLVL_NMTMN_TRACE1         DEBUG_LVL_07_TRACE1
-#define EPL_DBGLVL_NMTMN_TRACE2         DEBUG_LVL_07_TRACE2
-#define EPL_DBGLVL_NMTMN_TRACE3         DEBUG_LVL_07_TRACE3
-#define EPL_DBGLVL_NMTMN_TRACE4         DEBUG_LVL_07_TRACE4
-
-//...
-
-#define EPL_DBGLVL_SDO                  DEBUG_LVL_25	// 0x01000000
-#define EPL_DBGLVL_SDO_TRACE0           DEBUG_LVL_25_TRACE0
-#define EPL_DBGLVL_SDO_TRACE1           DEBUG_LVL_25_TRACE1
-#define EPL_DBGLVL_SDO_TRACE2           DEBUG_LVL_25_TRACE2
-#define EPL_DBGLVL_SDO_TRACE3           DEBUG_LVL_25_TRACE3
-#define EPL_DBGLVL_SDO_TRACE4           DEBUG_LVL_25_TRACE4
-
-#define EPL_DBGLVL_VETH                 DEBUG_LVL_26	// 0x02000000
-#define EPL_DBGLVL_VETH_TRACE0          DEBUG_LVL_26_TRACE0
-#define EPL_DBGLVL_VETH_TRACE1          DEBUG_LVL_26_TRACE1
-#define EPL_DBGLVL_VETH_TRACE2          DEBUG_LVL_26_TRACE2
-#define EPL_DBGLVL_VETH_TRACE3          DEBUG_LVL_26_TRACE3
-#define EPL_DBGLVL_VETH_TRACE4          DEBUG_LVL_26_TRACE4
-
-#define EPL_DBGLVL_EVENTK               DEBUG_LVL_27	// 0x04000000
-#define EPL_DBGLVL_EVENTK_TRACE0        DEBUG_LVL_27_TRACE0
-#define EPL_DBGLVL_EVENTK_TRACE1        DEBUG_LVL_27_TRACE1
-#define EPL_DBGLVL_EVENTK_TRACE2        DEBUG_LVL_27_TRACE2
-#define EPL_DBGLVL_EVENTK_TRACE3        DEBUG_LVL_27_TRACE3
-#define EPL_DBGLVL_EVENTK_TRACE4        DEBUG_LVL_27_TRACE4
-
-#define EPL_DBGLVL_EVENTU               DEBUG_LVL_28	// 0x08000000
-#define EPL_DBGLVL_EVENTU_TRACE0        DEBUG_LVL_28_TRACE0
-#define EPL_DBGLVL_EVENTU_TRACE1        DEBUG_LVL_28_TRACE1
-#define EPL_DBGLVL_EVENTU_TRACE2        DEBUG_LVL_28_TRACE2
-#define EPL_DBGLVL_EVENTU_TRACE3        DEBUG_LVL_28_TRACE3
-#define EPL_DBGLVL_EVENTU_TRACE4        DEBUG_LVL_28_TRACE4
-
-// SharedBuff
-#define EPL_DBGLVL_SHB                  DEBUG_LVL_29	// 0x10000000
-#define EPL_DBGLVL_SHB_TRACE0           DEBUG_LVL_29_TRACE0
-#define EPL_DBGLVL_SHB_TRACE1           DEBUG_LVL_29_TRACE1
-#define EPL_DBGLVL_SHB_TRACE2           DEBUG_LVL_29_TRACE2
-#define EPL_DBGLVL_SHB_TRACE3           DEBUG_LVL_29_TRACE3
-#define EPL_DBGLVL_SHB_TRACE4           DEBUG_LVL_29_TRACE4
-
-#define EPL_DBGLVL_ASSERT               DEBUG_LVL_ASSERT	// 0x20000000L
-#define EPL_DBGLVL_ASSERT_TRACE0        DEBUG_LVL_ASSERT_TRACE0
-#define EPL_DBGLVL_ASSERT_TRACE1        DEBUG_LVL_ASSERT_TRACE1
-#define EPL_DBGLVL_ASSERT_TRACE2        DEBUG_LVL_ASSERT_TRACE2
-#define EPL_DBGLVL_ASSERT_TRACE3        DEBUG_LVL_ASSERT_TRACE3
-#define EPL_DBGLVL_ASSERT_TRACE4        DEBUG_LVL_ASSERT_TRACE4
-
-#define EPL_DBGLVL_ERROR                DEBUG_LVL_ERROR	// 0x40000000L
-#define EPL_DBGLVL_ERROR_TRACE0         DEBUG_LVL_ERROR_TRACE0
-#define EPL_DBGLVL_ERROR_TRACE1         DEBUG_LVL_ERROR_TRACE1
-#define EPL_DBGLVL_ERROR_TRACE2         DEBUG_LVL_ERROR_TRACE2
-#define EPL_DBGLVL_ERROR_TRACE3         DEBUG_LVL_ERROR_TRACE3
-#define EPL_DBGLVL_ERROR_TRACE4         DEBUG_LVL_ERROR_TRACE4
-
-#define EPL_DBGLVL_ALWAYS               DEBUG_LVL_ALWAYS	// 0x80000000L
-#define EPL_DBGLVL_ALWAYS_TRACE0        DEBUG_LVL_ALWAYS_TRACE0
-#define EPL_DBGLVL_ALWAYS_TRACE1        DEBUG_LVL_ALWAYS_TRACE1
-#define EPL_DBGLVL_ALWAYS_TRACE2        DEBUG_LVL_ALWAYS_TRACE2
-#define EPL_DBGLVL_ALWAYS_TRACE3        DEBUG_LVL_ALWAYS_TRACE3
-#define EPL_DBGLVL_ALWAYS_TRACE4        DEBUG_LVL_ALWAYS_TRACE4
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_INC_H_
diff --git a/drivers/staging/epl/EplInstDef.h b/drivers/staging/epl/EplInstDef.h
deleted file mode 100644
index 29ab7fb..0000000
--- a/drivers/staging/epl/EplInstDef.h
+++ /dev/null
@@ -1,363 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  definitions for generating instances
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplInstDef.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  r.d.: first implementation
-
-****************************************************************************/
-
-#ifndef _EPLINSTDEF_H_
-#define _EPLINSTDEF_H_
-
-#include <linux/kernel.h>
-
-// =========================================================================
-// types and macros for generating instances
-// =========================================================================
-
-typedef enum {
-	kStateUnused = 0,
-	kStateDeleted = 1,
-	kStateUsed = 0xFF
-} tInstState;
-
-//------------------------------------------------------------------------------------------
-
-typedef void *tEplPtrInstance;
-typedef u8 tEplInstanceHdl;
-
-// define const for illegale values
-#define CCM_ILLINSTANCE      NULL
-#define CCM_ILLINSTANCE_HDL  0xFF
-
-//------------------------------------------------------------------------------------------
-// if more than one instance then use this macros
-#if (EPL_MAX_INSTANCES > 1)
-
-    //--------------------------------------------------------------------------------------
-    // macro definition for instance table definition
-    //--------------------------------------------------------------------------------------
-
-    // memory attributes for instance table
-#define STATIC			// prevent warnings for variables with same name
-
-#define INSTANCE_TYPE_BEGIN     typedef struct {
-#define INSTANCE_TYPE_END       } tEplInstanceInfo;
-
-    //--------------------------------------------------------------------------------------
-    // macro definition for API interface
-    //--------------------------------------------------------------------------------------
-
-    // declaration:
-
-    // macros for declaration within function header or prototype of API functions
-#define CCM_DECL_INSTANCE_HDL                   tEplInstanceHdl InstanceHandle
-#define CCM_DECL_INSTANCE_HDL_                  tEplInstanceHdl InstanceHandle,
-
-    // macros for declaration of pointer to instance handle within function header or prototype of API functions
-#define CCM_DECL_PTR_INSTANCE_HDL               tEplInstanceHdl *pInstanceHandle
-#define CCM_DECL_PTR_INSTANCE_HDL_              tEplInstanceHdl *pInstanceHandle,
-
-    // macros for declaration instance as lokacl variable within functions
-#define CCM_DECL_INSTANCE_PTR_LOCAL             tCcmInstanceInfo *pInstance;
-#define CCM_DECL_PTR_INSTANCE_HDL_LOCAL         tEplInstanceHdl  *pInstanceHandle;
-
-    // reference:
-
-    // macros for reference of instance handle for function parameters
-#define CCM_INSTANCE_HDL                        InstanceHandle
-#define CCM_INSTANCE_HDL_                       InstanceHandle,
-
-    // macros for reference of instance parameter for function parameters
-#define CCM_INSTANCE_PARAM(par)                 par
-#define CCM_INSTANCE_PARAM_(par)                par,
-
-    // macros for reference of instance parameter for writing or reading values
-#define CCM_INST_ENTRY                          (*((tEplPtrInstance)pInstance))
-
-    // processing:
-
-    // macros for process instance handle
-#define CCM_CHECK_INSTANCE_HDL()                if (InstanceHandle >= EPL_MAX_INSTANCES) \
-                                                        {return (kEplIllegalInstance);}
-
-    // macros for process pointer to instance handle
-#define CCM_CHECK_PTR_INSTANCE_HDL()            if (pInstanceHandle == NULL) \
-                                                        {return (kEplInvalidInstanceParam);}
-
-    // This macro returned the handle and pointer to next free instance.
-#define CCM_GET_FREE_INSTANCE_AND_HDL()         pInstance = CcmGetFreeInstanceAndHandle (pInstanceHandle); \
-                                                    ASSERT (*pInstanceHandle != CCM_ILLINSTANCE_HDL);
-
-#define CCM_CHECK_INSTANCE_PTR()                if (pInstance == CCM_ILLINSTANCE) \
-                                                        {return (kEplNoFreeInstance);}
-
-#define CCM_GET_INSTANCE_PTR()                  pInstance = CcmGetInstancePtr (InstanceHandle);
-#define CCM_GET_FREE_INSTANCE_PTR()             pInstance = GetFreeInstance (); \
-                                                    ASSERT (pInstance != CCM_ILLINSTANCE);
-
-    //--------------------------------------------------------------------------------------
-    // macro definition for stack interface
-    //--------------------------------------------------------------------------------------
-
-    // macros for declaration within the function header, prototype or local var list
-    // Declaration of pointers within function paramater list must defined as void *
-    // pointer.
-#define EPL_MCO_DECL_INSTANCE_PTR                   void *pInstance
-#define EPL_MCO_DECL_INSTANCE_PTR_                  void *pInstance,
-#define EPL_MCO_DECL_INSTANCE_PTR_LOCAL             tEplPtrInstance  pInstance;
-
-    // macros for reference of pointer to instance
-    // These macros are used for parameter passing to called function.
-#define EPL_MCO_INSTANCE_PTR                        pInstance
-#define EPL_MCO_INSTANCE_PTR_                       pInstance,
-#define EPL_MCO_ADDR_INSTANCE_PTR_                  &pInstance,
-
-    // macro for access of struct members of one instance
-    // An access to a member of instance table must be casted by the local
-    // defined type of instance table.
-#define EPL_MCO_INST_ENTRY                          (*(tEplPtrInstance)pInstance)
-#define EPL_MCO_GLB_VAR(var)                        (((tEplPtrInstance)pInstance)->var)
-
-    // macros for process pointer to instance
-#define EPL_MCO_GET_INSTANCE_PTR()                  pInstance = (tEplPtrInstance) GetInstancePtr (InstanceHandle);
-#define EPL_MCO_GET_FREE_INSTANCE_PTR()             pInstance = (tEplPtrInstance) GetFreeInstance (); \
-                                                    ASSERT (pInstance != CCM_ILLINSTANCE);
-
-    // This macro should be used to check the passed pointer to an public function
-#define EPL_MCO_CHECK_INSTANCE_STATE()              ASSERT (pInstance != NULL); \
-                                                    ASSERT (((tEplPtrInstance)pInstance)->m_InstState == kStateUsed);
-
-    // macros for declaration of pointer to instance pointer
-#define EPL_MCO_DECL_PTR_INSTANCE_PTR               void **pInstancePtr
-#define EPL_MCO_DECL_PTR_INSTANCE_PTR_              void **pInstancePtr,
-
-    // macros for reference of pointer to instance pointer
-    // These macros are used for parameter passing to called function.
-#define EPL_MCO_PTR_INSTANCE_PTR                    pInstancePtr
-#define EPL_MCO_PTR_INSTANCE_PTR_                   pInstancePtr,
-
-    // macros for process pointer to instance pointer
-#define EPL_MCO_CHECK_PTR_INSTANCE_PTR()            ASSERT (pInstancePtr != NULL);
-#define EPL_MCO_SET_PTR_INSTANCE_PTR()              (*pInstancePtr = pInstance);
-
-#define EPL_MCO_INSTANCE_PARAM(a)                   (a)
-#define EPL_MCO_INSTANCE_PARAM_(a)                  (a),
-#define EPL_MCO_INSTANCE_PARAM_IDX_()               EPL_MCO_INSTANCE_PARAM_ (EPL_MCO_GLB_VAR (m_bInstIndex))
-#define EPL_MCO_INSTANCE_PARAM_IDX()                EPL_MCO_INSTANCE_PARAM (EPL_MCO_GLB_VAR (m_bInstIndex))
-#define EPL_MCO_WRITE_INSTANCE_STATE(a)             EPL_MCO_GLB_VAR (m_InstState) = a;
-
-    // this macro deletes all instance entries as unused
-#define EPL_MCO_DELETE_INSTANCE_TABLE()                                    \
-    {                                                                      \
-        tEplInstanceInfo *   pInstance       = &aEplInstanceTable_g[0];    \
-        tFastByte            InstNumber      = 0;                          \
-        tFastByte            i               = EPL_MAX_INSTANCES;          \
-        do {                                                               \
-            pInstance->m_InstState = (u8) kStateUnused;                  \
-            pInstance->m_bInstIndex = (u8) InstNumber;                   \
-            pInstance++; InstNumber++; i--;                                \
-        } while (i != 0);                                                  \
-    }
-
-    // definition of functions which has to be defined in each module of CANopen stack
-#define EPL_MCO_DEFINE_INSTANCE_FCT() \
-        static tEplPtrInstance GetInstancePtr (tEplInstanceHdl InstHandle_p);  \
-        static tEplPtrInstance GetFreeInstance (void);
-#define EPL_MCO_DECL_INSTANCE_FCT()                                            \
-        static tEplPtrInstance GetInstancePtr (tEplInstanceHdl InstHandle_p) { \
-            return &aEplInstanceTable_g[InstHandle_p]; }                       \
-        static tEplPtrInstance GetFreeInstance (void) {                        \
-            tEplInstanceInfo *pInstance   = &aEplInstanceTable_g[0];           \
-            tFastByte         i           = EPL_MAX_INSTANCES;                 \
-            do { if (pInstance->m_InstState != kStateUsed) {                   \
-                    return (tEplPtrInstance) pInstance; }                      \
-                pInstance++; i--; }                                            \
-            while (i != 0);                                                    \
-            return CCM_ILLINSTANCE; }
-
-    // this macro defines the instance table. Each entry is reserved for an instance of CANopen.
-#define EPL_MCO_DECL_INSTANCE_VAR() \
-        static tEplInstanceInfo aEplInstanceTable_g [EPL_MAX_INSTANCES];
-
-    // this macro defines member variables in instance table which are needed in
-    // all modules of Epl stack
-#define EPL_MCO_DECL_INSTANCE_MEMBER() \
-        STATIC  u8                            m_InstState; \
-        STATIC  u8                            m_bInstIndex;
-
-#define EPL_MCO_INSTANCE_PARAM_IDX_()           EPL_MCO_INSTANCE_PARAM_ (EPL_MCO_GLB_VAR (m_bInstIndex))
-#define EPL_MCO_INSTANCE_PARAM_IDX()            EPL_MCO_INSTANCE_PARAM (EPL_MCO_GLB_VAR (m_bInstIndex))
-
-#else // only one instance is used
-
-    // Memory attributes for instance table.
-#define STATIC      static	// prevent warnings for variables with same name
-
-#define INSTANCE_TYPE_BEGIN
-#define INSTANCE_TYPE_END
-
-// macros for declaration, initializing and member access for instance handle
-// This class of macros are used by API function to inform CCM-modul which
-// instance is to be used.
-
-    // macros for reference of instance handle
-    // These macros are used for parameter passing to CANopen API function.
-#define CCM_INSTANCE_HDL
-#define CCM_INSTANCE_HDL_
-
-#define CCM_DECL_INSTANCE_PTR_LOCAL
-
-    // macros for declaration within the function header or prototype
-#define CCM_DECL_INSTANCE_HDL                   void
-#define CCM_DECL_INSTANCE_HDL_
-
-    // macros for process instance handle
-#define CCM_CHECK_INSTANCE_HDL()
-
-    // macros for declaration of pointer to instance handle
-#define CCM_DECL_PTR_INSTANCE_HDL               void
-#define CCM_DECL_PTR_INSTANCE_HDL_
-
-    // macros for process pointer to instance handle
-#define CCM_CHECK_PTR_INSTANCE_HDL()
-
-    // This macro returned the handle and pointer to next free instance.
-#define CCM_GET_FREE_INSTANCE_AND_HDL()
-
-#define CCM_CHECK_INSTANCE_PTR()
-
-#define CCM_GET_INSTANCE_PTR()
-#define CCM_GET_FREE_INSTANCE_PTR()
-
-#define CCM_INSTANCE_PARAM(par)
-#define CCM_INSTANCE_PARAM_(par)
-
-#define CCM_INST_ENTRY                          aCcmInstanceTable_g[0]
-
-// macros for declaration, initializing and member access for instance pointer
-// This class of macros are used by CANopen internal function to point to one instance.
-
-    // macros for declaration within the function header, prototype or local var list
-#define EPL_MCO_DECL_INSTANCE_PTR                   void
-#define EPL_MCO_DECL_INSTANCE_PTR_
-#define EPL_MCO_DECL_INSTANCE_PTR_LOCAL
-
-    // macros for reference of pointer to instance
-    // These macros are used for parameter passing to called function.
-#define EPL_MCO_INSTANCE_PTR
-#define EPL_MCO_INSTANCE_PTR_
-#define EPL_MCO_ADDR_INSTANCE_PTR_
-
-    // macros for process pointer to instance
-#define EPL_MCO_GET_INSTANCE_PTR()
-#define EPL_MCO_GET_FREE_INSTANCE_PTR()
-
-    // This macro should be used to check the passed pointer to an public function
-#define EPL_MCO_CHECK_INSTANCE_STATE()
-
-    // macros for declaration of pointer to instance pointer
-#define EPL_MCO_DECL_PTR_INSTANCE_PTR               void
-#define EPL_MCO_DECL_PTR_INSTANCE_PTR_
-
-    // macros for reference of pointer to instance pointer
-    // These macros are used for parameter passing to called function.
-#define EPL_MCO_PTR_INSTANCE_PTR
-#define EPL_MCO_PTR_INSTANCE_PTR_
-
-    // macros for process pointer to instance pointer
-#define EPL_MCO_CHECK_PTR_INSTANCE_PTR()
-#define EPL_MCO_SET_PTR_INSTANCE_PTR()
-
-#define EPL_MCO_INSTANCE_PARAM(a)
-#define EPL_MCO_INSTANCE_PARAM_(a)
-#define EPL_MCO_INSTANCE_PARAM_IDX_()
-#define EPL_MCO_INSTANCE_PARAM_IDX()
-
-    // macro for access of struct members of one instance
-#define EPL_MCO_INST_ENTRY                          aEplInstanceTable_g[0]
-#define EPL_MCO_GLB_VAR(var)                        (var)
-#define EPL_MCO_WRITE_INSTANCE_STATE(a)
-
-    // this macro deletes all instance entries as unused
-#define EPL_MCO_DELETE_INSTANCE_TABLE()
-
-    // definition of functions which has to be defined in each module of CANopen stack
-#define EPL_MCO_DEFINE_INSTANCE_FCT()
-#define EPL_MCO_DECL_INSTANCE_FCT()
-
-    // this macro defines the instance table. Each entry is reserved for an instance of CANopen.
-#define EPL_MCO_DECL_INSTANCE_VAR()
-
-    // this macro defines member variables in instance table which are needed in
-    // all modules of CANopen stack
-#define EPL_MCO_DECL_INSTANCE_MEMBER()
-
-#endif
-
-#endif // _EPLINSTDEF_H_
-
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
-// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/EplLed.h b/drivers/staging/epl/EplLed.h
deleted file mode 100644
index 6a29aed..0000000
--- a/drivers/staging/epl/EplLed.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for status and error LED
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplLed.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.1 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2008/11/17 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLLED_H_
-#define _EPLLED_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef enum {
-	kEplLedTypeStatus = 0x00,
-	kEplLedTypeError = 0x01,
-
-} tEplLedType;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPLLED_H_
diff --git a/drivers/staging/epl/EplNmt.h b/drivers/staging/epl/EplNmt.h
deleted file mode 100644
index e351b55..0000000
--- a/drivers/staging/epl/EplNmt.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  global include file for EPL-NMT-Modules
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmt.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMT_H_
-#define _EPLNMT_H_
-
-#include "EplInc.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// define super-states and masks to identify a super-state
-#define EPL_NMT_GS_POWERED          0x0008	// super state
-#define EPL_NMT_GS_INITIALISATION   0x0009	// super state
-#define EPL_NMT_GS_COMMUNICATING    0x000C	// super state
-#define EPL_NMT_CS_EPLMODE          0x000D	// super state
-#define EPL_NMT_MS_EPLMODE          0x000D	// super state
-
-#define EPL_NMT_SUPERSTATE_MASK     0x000F	// mask to select state
-
-#define EPL_NMT_TYPE_UNDEFINED      0x0000	// type of NMT state is still undefined
-#define EPL_NMT_TYPE_CS             0x0100	// CS type of NMT state
-#define EPL_NMT_TYPE_MS             0x0200	// MS type of NMT state
-#define EPL_NMT_TYPE_MASK           0x0300	// mask to select type of NMT state (i.e. CS or MS)
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-// the lower Byte of the NMT-State is encoded
-// like the values in the EPL-Standard
-// the higher byte is used to encode MN
-// (Bit 1 of the higher byte = 1) or CN (Bit 0 of the
-// higher byte  = 1)
-// the super-states are not mentioned in this
-// enum because they are no real states
-// --> there are masks defined to indentify the
-// super-states
-
-typedef enum {
-	kEplNmtGsOff = 0x0000,
-	kEplNmtGsInitialising = 0x0019,
-	kEplNmtGsResetApplication = 0x0029,
-	kEplNmtGsResetCommunication = 0x0039,
-	kEplNmtGsResetConfiguration = 0x0079,
-	kEplNmtCsNotActive = 0x011C,
-	kEplNmtCsPreOperational1 = 0x011D,
-	kEplNmtCsStopped = 0x014D,
-	kEplNmtCsPreOperational2 = 0x015D,
-	kEplNmtCsReadyToOperate = 0x016D,
-	kEplNmtCsOperational = 0x01FD,
-	kEplNmtCsBasicEthernet = 0x011E,
-	kEplNmtMsNotActive = 0x021C,
-	kEplNmtMsPreOperational1 = 0x021D,
-	kEplNmtMsPreOperational2 = 0x025D,
-	kEplNmtMsReadyToOperate = 0x026D,
-	kEplNmtMsOperational = 0x02FD,
-	kEplNmtMsBasicEthernet = 0x021E
-} tEplNmtState;
-
-// NMT-events
-typedef enum {
-	// Events from DLL
-	// Events defined by EPL V2 specification
-	kEplNmtEventNoEvent = 0x00,
-//    kEplNmtEventDllMePres           =   0x01,
-	kEplNmtEventDllMePresTimeout = 0x02,
-//    kEplNmtEventDllMeAsnd           =   0x03,
-//    kEplNmtEventDllMeAsndTimeout    =   0x04,
-	kEplNmtEventDllMeSoaSent = 0x04,
-	kEplNmtEventDllMeSocTrig = 0x05,
-	kEplNmtEventDllMeSoaTrig = 0x06,
-	kEplNmtEventDllCeSoc = 0x07,
-	kEplNmtEventDllCePreq = 0x08,
-	kEplNmtEventDllCePres = 0x09,
-	kEplNmtEventDllCeSoa = 0x0A,
-	kEplNmtEventDllCeAsnd = 0x0B,
-	kEplNmtEventDllCeFrameTimeout = 0x0C,
-
-	// Events triggered by NMT-Commands
-	kEplNmtEventSwReset = 0x10,	// NMT_GT1, NMT_GT2, NMT_GT8
-	kEplNmtEventResetNode = 0x11,
-	kEplNmtEventResetCom = 0x12,
-	kEplNmtEventResetConfig = 0x13,
-	kEplNmtEventEnterPreOperational2 = 0x14,
-	kEplNmtEventEnableReadyToOperate = 0x15,
-	kEplNmtEventStartNode = 0x16,	// NMT_CT7
-	kEplNmtEventStopNode = 0x17,
-
-	// Events triggered by higher layer
-	kEplNmtEventEnterResetApp = 0x20,
-	kEplNmtEventEnterResetCom = 0x21,
-	kEplNmtEventInternComError = 0x22,	// NMT_GT6, internal communication error -> enter ResetCommunication
-	kEplNmtEventEnterResetConfig = 0x23,
-	kEplNmtEventEnterCsNotActive = 0x24,
-	kEplNmtEventEnterMsNotActive = 0x25,
-	kEplNmtEventTimerBasicEthernet = 0x26,	// NMT_CT3; timer triggered state change (NotActive -> BasicEth)
-	kEplNmtEventTimerMsPreOp1 = 0x27,	// enter PreOp1 on MN (NotActive -> MsPreOp1)
-	kEplNmtEventNmtCycleError = 0x28,	// NMT_CT11, NMT_MT6; error during cycle -> enter PreOp1
-	kEplNmtEventTimerMsPreOp2 = 0x29,	// enter PreOp2 on MN (MsPreOp1 -> MsPreOp2 if kEplNmtEventAllMandatoryCNIdent)
-	kEplNmtEventAllMandatoryCNIdent = 0x2A,	// enter PreOp2 on MN if kEplNmtEventTimerMsPreOp2
-	kEplNmtEventEnterReadyToOperate = 0x2B,	// application ready for the state ReadyToOp
-	kEplNmtEventEnterMsOperational = 0x2C,	// enter Operational on MN
-	kEplNmtEventSwitchOff = 0x2D,	// enter state Off
-	kEplNmtEventCriticalError = 0x2E,	// enter state Off because of critical error
-
-} tEplNmtEvent;
-
-// type for argument of event kEplEventTypeNmtStateChange
-typedef struct {
-	tEplNmtState m_NewNmtState;
-	tEplNmtEvent m_NmtEvent;
-
-} tEplEventNmtStateChange;
-
-// structure for kEplEventTypeHeartbeat
-typedef struct {
-	unsigned int m_uiNodeId;	// NodeId
-	tEplNmtState m_NmtState;	// NMT state (remember distinguish between MN / CN)
-	u16 m_wErrorCode;	// EPL error code in case of NMT state NotActive
-
-} tEplHeartbeatEvent;
-
-typedef enum {
-	kEplNmtNodeEventFound = 0x00,
-	kEplNmtNodeEventUpdateSw = 0x01,	// application shall update software on CN
-	kEplNmtNodeEventCheckConf = 0x02,	// application / Configuration Manager shall check and update configuration on CN
-	kEplNmtNodeEventUpdateConf = 0x03,	// application / Configuration Manager shall update configuration on CN (check was done by NmtMn module)
-	kEplNmtNodeEventVerifyConf = 0x04,	// application / Configuration Manager shall verify configuration of CN
-	kEplNmtNodeEventReadyToStart = 0x05,	// issued if EPL_NMTST_NO_STARTNODE set
-	// application must call EplNmtMnuSendNmtCommand(kEplNmtCmdStartNode) manually
-	kEplNmtNodeEventNmtState = 0x06,
-	kEplNmtNodeEventError = 0x07,	// NMT error of CN
-
-} tEplNmtNodeEvent;
-
-typedef enum {
-	kEplNmtNodeCommandBoot = 0x01,	// if EPL_NODEASSIGN_START_CN not set it must be issued after kEplNmtNodeEventFound
-	kEplNmtNodeCommandSwOk = 0x02,	// application updated software on CN successfully
-	kEplNmtNodeCommandSwUpdated = 0x03,	// application updated software on CN successfully
-	kEplNmtNodeCommandConfOk = 0x04,	// application / Configuration Manager has updated configuration on CN successfully
-	kEplNmtNodeCommandConfReset = 0x05,	// application / Configuration Manager has updated configuration on CN successfully
-	// and CN needs ResetConf so that the configuration gets actived
-	kEplNmtNodeCommandConfErr = 0x06,	// application / Configuration Manager failed on updating configuration on CN
-	kEplNmtNodeCommandStart = 0x07,	// if EPL_NMTST_NO_STARTNODE set it must be issued after kEplNmtNodeEventReadyToStart
-
-} tEplNmtNodeCommand;
-
-typedef enum {
-	kEplNmtBootEventBootStep1Finish = 0x00,	// PreOp2 is possible
-	kEplNmtBootEventBootStep2Finish = 0x01,	// ReadyToOp is possible
-	kEplNmtBootEventCheckComFinish = 0x02,	// Operational is possible
-	kEplNmtBootEventOperational = 0x03,	// all mandatory CNs are Operational
-	kEplNmtBootEventError = 0x04,	// boot process halted because of an error
-
-} tEplNmtBootEvent;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPLNMT_H_
diff --git a/drivers/staging/epl/EplNmtCnu.c b/drivers/staging/epl/EplNmtCnu.c
deleted file mode 100644
index c27ca8f..0000000
--- a/drivers/staging/epl/EplNmtCnu.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for NMT-CN-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtCnu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "user/EplNmtCnu.h"
-#include "user/EplDlluCal.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	unsigned int m_uiNodeId;
-	tEplNmtuCheckEventCallback m_pfnCheckEventCb;
-
-} tEplNmtCnuInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplNmtCnuInstance EplNmtCnuInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplNmtCommand EplNmtCnuGetNmtCommand(tEplFrameInfo * pFrameInfo_p);
-
-static BOOL EplNmtCnuNodeIdList(u8 * pbNmtCommandDate_p);
-
-static tEplKernel EplNmtCnuCommandCb(tEplFrameInfo *pFrameInfo_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuInit
-//
-// Description: init the first instance of the module
-//
-//
-//
-// Parameters:      uiNodeId_p = NodeId of the local node
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtCnuInit(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplNmtCnuAddInstance(uiNodeId_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuAddInstance
-//
-// Description: init the add new instance of the module
-//
-//
-//
-// Parameters:      uiNodeId_p = NodeId of the local node
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtCnuAddInstance(unsigned int uiNodeId_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplNmtCnuInstance_g, 0, sizeof(EplNmtCnuInstance_g));
-
-	// save nodeid
-	EplNmtCnuInstance_g.m_uiNodeId = uiNodeId_p;
-
-	// register callback-function for NMT-commands
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalRegAsndService(kEplDllAsndNmtCommand,
-				       EplNmtCnuCommandCb,
-				       kEplDllAsndFilterLocal);
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuDelInstance
-//
-// Description: delte instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtCnuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	// deregister callback function from DLL
-	Ret = EplDlluCalRegAsndService(kEplDllAsndNmtCommand,
-				       NULL, kEplDllAsndFilterNone);
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuSendNmtRequest
-//
-// Description: Send an NMT-Request to the MN
-//
-//
-//
-// Parameters:      uiNodeId_p = NodeId of the local node
-//                  NmtCommand_p = requested NMT-Command
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtCnuSendNmtRequest(unsigned int uiNodeId_p,
-				   tEplNmtCommand NmtCommand_p)
-{
-	tEplKernel Ret;
-	tEplFrameInfo NmtRequestFrameInfo;
-	tEplFrame NmtRequestFrame;
-
-	Ret = kEplSuccessful;
-
-	// build frame
-	EPL_MEMSET(&NmtRequestFrame.m_be_abDstMac[0], 0x00, sizeof(NmtRequestFrame.m_be_abDstMac));	// set by DLL
-	EPL_MEMSET(&NmtRequestFrame.m_be_abSrcMac[0], 0x00, sizeof(NmtRequestFrame.m_be_abSrcMac));	// set by DLL
-	AmiSetWordToBe(&NmtRequestFrame.m_be_wEtherType,
-		       EPL_C_DLL_ETHERTYPE_EPL);
-	AmiSetByteToLe(&NmtRequestFrame.m_le_bDstNodeId, (u8) EPL_C_ADR_MN_DEF_NODE_ID);	// node id of the MN
-	AmiSetByteToLe(&NmtRequestFrame.m_le_bMessageType,
-		       (u8) kEplMsgTypeAsnd);
-	AmiSetByteToLe(&NmtRequestFrame.m_Data.m_Asnd.m_le_bServiceId,
-		       (u8) kEplDllAsndNmtRequest);
-	AmiSetByteToLe(&NmtRequestFrame.m_Data.m_Asnd.m_Payload.
-		       m_NmtRequestService.m_le_bNmtCommandId,
-		       (u8) NmtCommand_p);
-	AmiSetByteToLe(&NmtRequestFrame.m_Data.m_Asnd.m_Payload.m_NmtRequestService.m_le_bTargetNodeId, (u8) uiNodeId_p);	// target for the nmt command
-	EPL_MEMSET(&NmtRequestFrame.m_Data.m_Asnd.m_Payload.m_NmtRequestService.
-		   m_le_abNmtCommandData[0], 0x00,
-		   sizeof(NmtRequestFrame.m_Data.m_Asnd.m_Payload.
-			  m_NmtRequestService.m_le_abNmtCommandData));
-
-	// build info-structure
-	NmtRequestFrameInfo.m_NetTime.m_dwNanoSec = 0;
-	NmtRequestFrameInfo.m_NetTime.m_dwSec = 0;
-	NmtRequestFrameInfo.m_pFrame = &NmtRequestFrame;
-	NmtRequestFrameInfo.m_uiFrameSize = EPL_C_DLL_MINSIZE_NMTREQ;	// sizeof(NmtRequestFrame);
-
-	// send NMT-Request
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalAsyncSend(&NmtRequestFrameInfo,	// pointer to frameinfo
-				  kEplDllAsyncReqPrioNmt);	// priority
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuRegisterStateChangeCb
-//
-// Description: register Callback-function go get informed about a
-//              NMT-Change-State-Event
-//
-//
-//
-// Parameters:  pfnEplNmtStateChangeCb_p = functionpointer
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtCnuRegisterCheckEventCb(tEplNmtuCheckEventCallback pfnEplNmtCheckEventCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// save callback-function in modul global var
-	EplNmtCnuInstance_g.m_pfnCheckEventCb = pfnEplNmtCheckEventCb_p;
-
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuCommandCb
-//
-// Description: callback funktion for NMT-Commands
-//
-//
-//
-// Parameters:      pFrameInfo_p = Frame with the NMT-Commando
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplNmtCnuCommandCb(tEplFrameInfo *pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtCommand NmtCommand;
-	BOOL fNodeIdInList;
-	tEplNmtEvent NmtEvent = kEplNmtEventNoEvent;
-
-	if (pFrameInfo_p == NULL) {
-		Ret = kEplNmtInvalidFramePointer;
-		goto Exit;
-	}
-
-	NmtCommand = EplNmtCnuGetNmtCommand(pFrameInfo_p);
-
-	// check NMT-Command
-	switch (NmtCommand) {
-
-		//------------------------------------------------------------------------
-		// plain NMT state commands
-	case kEplNmtCmdStartNode:
-		{		// send NMT-Event to state maschine kEplNmtEventStartNode
-			NmtEvent = kEplNmtEventStartNode;
-			break;
-		}
-
-	case kEplNmtCmdStopNode:
-		{		// send NMT-Event to state maschine kEplNmtEventStopNode
-			NmtEvent = kEplNmtEventStopNode;
-			break;
-		}
-
-	case kEplNmtCmdEnterPreOperational2:
-		{		// send NMT-Event to state maschine kEplNmtEventEnterPreOperational2
-			NmtEvent = kEplNmtEventEnterPreOperational2;
-			break;
-		}
-
-	case kEplNmtCmdEnableReadyToOperate:
-		{		// send NMT-Event to state maschine kEplNmtEventEnableReadyToOperate
-			NmtEvent = kEplNmtEventEnableReadyToOperate;
-			break;
-		}
-
-	case kEplNmtCmdResetNode:
-		{		// send NMT-Event to state maschine kEplNmtEventResetNode
-			NmtEvent = kEplNmtEventResetNode;
-			break;
-		}
-
-	case kEplNmtCmdResetCommunication:
-		{		// send NMT-Event to state maschine kEplNmtEventResetCom
-			NmtEvent = kEplNmtEventResetCom;
-			break;
-		}
-
-	case kEplNmtCmdResetConfiguration:
-		{		// send NMT-Event to state maschine kEplNmtEventResetConfig
-			NmtEvent = kEplNmtEventResetConfig;
-			break;
-		}
-
-	case kEplNmtCmdSwReset:
-		{		// send NMT-Event to state maschine kEplNmtEventSwReset
-			NmtEvent = kEplNmtEventSwReset;
-			break;
-		}
-
-		//------------------------------------------------------------------------
-		// extended NMT state commands
-
-	case kEplNmtCmdStartNodeEx:
-		{
-			// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&
-						(pFrameInfo_p->m_pFrame->m_Data.
-						 m_Asnd.m_Payload.
-						 m_NmtCommandService.
-						 m_le_abNmtCommandData[0]));
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventStartNode;
-			}
-			break;
-		}
-
-	case kEplNmtCmdStopNodeEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventStopNode;
-			}
-			break;
-		}
-
-	case kEplNmtCmdEnterPreOperational2Ex:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventEnterPreOperational2;
-			}
-			break;
-		}
-
-	case kEplNmtCmdEnableReadyToOperateEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventEnableReadyToOperate;
-			}
-			break;
-		}
-
-	case kEplNmtCmdResetNodeEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventResetNode;
-			}
-			break;
-		}
-
-	case kEplNmtCmdResetCommunicationEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventResetCom;
-			}
-			break;
-		}
-
-	case kEplNmtCmdResetConfigurationEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventResetConfig;
-			}
-			break;
-		}
-
-	case kEplNmtCmdSwResetEx:
-		{		// check if own nodeid is in EPL node list
-			fNodeIdInList =
-			    EplNmtCnuNodeIdList(&pFrameInfo_p->m_pFrame->m_Data.
-						m_Asnd.m_Payload.
-						m_NmtCommandService.
-						m_le_abNmtCommandData[0]);
-			if (fNodeIdInList != FALSE) {	// own nodeid in list
-				// send event to process command
-				NmtEvent = kEplNmtEventSwReset;
-			}
-			break;
-		}
-
-		//------------------------------------------------------------------------
-		// NMT managing commands
-
-		// TODO: add functions to process managing command (optional)
-
-	case kEplNmtCmdNetHostNameSet:
-		{
-			break;
-		}
-
-	case kEplNmtCmdFlushArpEntry:
-		{
-			break;
-		}
-
-		//------------------------------------------------------------------------
-		// NMT info services
-
-		// TODO: forward event with infos to the application (optional)
-
-	case kEplNmtCmdPublishConfiguredCN:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishActiveCN:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishPreOperational1:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishPreOperational2:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishReadyToOperate:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishOperational:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishStopped:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishEmergencyNew:
-		{
-			break;
-		}
-
-	case kEplNmtCmdPublishTime:
-		{
-			break;
-		}
-
-		//-----------------------------------------------------------------------
-		// error from MN
-		// -> requested command not supported by MN
-	case kEplNmtCmdInvalidService:
-		{
-
-			// TODO: errorevent to application
-			break;
-		}
-
-		//------------------------------------------------------------------------
-		// default
-	default:
-		{
-			Ret = kEplNmtUnknownCommand;
-			goto Exit;
-		}
-
-	}			// end of switch(NmtCommand)
-
-	if (NmtEvent != kEplNmtEventNoEvent) {
-		if (EplNmtCnuInstance_g.m_pfnCheckEventCb != NULL) {
-			Ret = EplNmtCnuInstance_g.m_pfnCheckEventCb(NmtEvent);
-			if (Ret == kEplReject) {
-				Ret = kEplSuccessful;
-				goto Exit;
-			} else if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-		}
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-		Ret = EplNmtuNmtEvent(NmtEvent);
-#endif
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuGetNmtCommand()
-//
-// Description: returns the NMT-Command from the frame
-//
-//
-//
-// Parameters:      pFrameInfo_p = pointer to the Frame
-//                                 with the NMT-Command
-//
-//
-// Returns:         tEplNmtCommand = NMT-Command
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplNmtCommand EplNmtCnuGetNmtCommand(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplNmtCommand NmtCommand;
-	tEplNmtCommandService *pNmtCommandService;
-
-	pNmtCommandService =
-	    &pFrameInfo_p->m_pFrame->m_Data.m_Asnd.m_Payload.
-	    m_NmtCommandService;
-
-	NmtCommand =
-	    (tEplNmtCommand) AmiGetByteFromLe(&pNmtCommandService->
-					      m_le_bNmtCommandId);
-
-	return NmtCommand;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtCnuNodeIdList()
-//
-// Description: check if the own nodeid is set in EPL Node List
-//
-//
-//
-// Parameters:      pbNmtCommandDate_p = pointer to the data of the NMT Command
-//
-//
-// Returns:         BOOL = TRUE if nodeid is set in EPL Node List
-//                         FALSE if nodeid not set in EPL Node List
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static BOOL EplNmtCnuNodeIdList(u8 * pbNmtCommandDate_p)
-{
-	BOOL fNodeIdInList;
-	unsigned int uiByteOffset;
-	u8 bBitOffset;
-	u8 bNodeListByte;
-
-	// get byte-offset of the own nodeid in NodeIdList
-	// devide though 8
-	uiByteOffset = (unsigned int)(EplNmtCnuInstance_g.m_uiNodeId >> 3);
-	// get bitoffset
-	bBitOffset = (u8) EplNmtCnuInstance_g.m_uiNodeId % 8;
-
-	bNodeListByte = AmiGetByteFromLe(&pbNmtCommandDate_p[uiByteOffset]);
-	if ((bNodeListByte & bBitOffset) == 0) {
-		fNodeIdInList = FALSE;
-	} else {
-		fNodeIdInList = TRUE;
-	}
-
-	return fNodeIdInList;
-}
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplNmtMnu.c b/drivers/staging/epl/EplNmtMnu.c
deleted file mode 100644
index d19434f..0000000
--- a/drivers/staging/epl/EplNmtMnu.c
+++ /dev/null
@@ -1,2828 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for NMT-MN-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtMnu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.18 $  $Date: 2008/11/19 09:52:24 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplNmtMnu.h"
-#include "user/EplTimeru.h"
-#include "user/EplIdentu.h"
-#include "user/EplStatusu.h"
-#include "user/EplObdu.h"
-#include "user/EplDlluCal.h"
-#include "Benchmark.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) == 0) && (EPL_OBD_USE_KERNEL == FALSE)
-#error "EPL NmtMnu module needs EPL module OBDU or OBDK!"
-#endif
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-#define EPL_NMTMNU_DBG_POST_TRACE_VALUE(Event_p, uiNodeId_p, wErrorCode_p) \
-    TGT_DBG_POST_TRACE_VALUE((kEplEventSinkNmtMnu << 28) | (Event_p << 24) \
-                             | (uiNodeId_p << 16) | wErrorCode_p)
-
-// defines for flags in node info structure
-#define EPL_NMTMNU_NODE_FLAG_ISOCHRON       0x0001	// CN is being accessed isochronously
-#define EPL_NMTMNU_NODE_FLAG_NOT_SCANNED    0x0002	// CN was not scanned once -> decrement SignalCounter and reset flag
-#define EPL_NMTMNU_NODE_FLAG_HALTED         0x0004	// boot process for this CN is halted
-#define EPL_NMTMNU_NODE_FLAG_NMT_CMD_ISSUED 0x0008	// NMT command was just issued, wrong NMT states will be tolerated
-#define EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ  0x0300	// counter for StatusRequest timer handle
-#define EPL_NMTMNU_NODE_FLAG_COUNT_LONGER   0x0C00	// counter for longer timeouts timer handle
-#define EPL_NMTMNU_NODE_FLAG_INC_STATREQ    0x0100	// increment for StatusRequest timer handle
-#define EPL_NMTMNU_NODE_FLAG_INC_LONGER     0x0400	// increment for longer timeouts timer handle
-		    // These counters will be incremented at every timer start
-		    // and copied to timerarg. When the timer event occures
-		    // both will be compared and if unequal the timer event
-		    // will be discarded, because it is an old one.
-
-// defines for timer arguments to draw a distinction between serveral events
-#define EPL_NMTMNU_TIMERARG_NODE_MASK   0x000000FFL	// mask that contains the node-ID
-#define EPL_NMTMNU_TIMERARG_IDENTREQ    0x00010000L	// timer event is for IdentRequest
-#define EPL_NMTMNU_TIMERARG_STATREQ     0x00020000L	// timer event is for StatusRequest
-#define EPL_NMTMNU_TIMERARG_LONGER      0x00040000L	// timer event is for longer timeouts
-#define EPL_NMTMNU_TIMERARG_STATE_MON   0x00080000L	// timer event for StatusRequest to monitor execution of NMT state changes
-#define EPL_NMTMNU_TIMERARG_COUNT_SR    0x00000300L	// counter for StatusRequest
-#define EPL_NMTMNU_TIMERARG_COUNT_LO    0x00000C00L	// counter for longer timeouts
-		    // The counters must have the same position as in the node flags above.
-
-#define EPL_NMTMNU_SET_FLAGS_TIMERARG_STATREQ(pNodeInfo_p, uiNodeId_p, TimerArg_p) \
-    pNodeInfo_p->m_wFlags = \
-        ((pNodeInfo_p->m_wFlags + EPL_NMTMNU_NODE_FLAG_INC_STATREQ) \
-         & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) \
-        | (pNodeInfo_p->m_wFlags & ~EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_ulArg = EPL_NMTMNU_TIMERARG_STATREQ | uiNodeId_p | \
-        (pNodeInfo_p->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_EventSink = kEplEventSinkNmtMnu;
-
-#define EPL_NMTMNU_SET_FLAGS_TIMERARG_IDENTREQ(pNodeInfo_p, uiNodeId_p, TimerArg_p) \
-    pNodeInfo_p->m_wFlags = \
-        ((pNodeInfo_p->m_wFlags + EPL_NMTMNU_NODE_FLAG_INC_STATREQ) \
-         & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) \
-        | (pNodeInfo_p->m_wFlags & ~EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_ulArg = EPL_NMTMNU_TIMERARG_IDENTREQ | uiNodeId_p | \
-        (pNodeInfo_p->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_EventSink = kEplEventSinkNmtMnu;
-
-#define EPL_NMTMNU_SET_FLAGS_TIMERARG_LONGER(pNodeInfo_p, uiNodeId_p, TimerArg_p) \
-    pNodeInfo_p->m_wFlags = \
-        ((pNodeInfo_p->m_wFlags + EPL_NMTMNU_NODE_FLAG_INC_LONGER) \
-         & EPL_NMTMNU_NODE_FLAG_COUNT_LONGER) \
-        | (pNodeInfo_p->m_wFlags & ~EPL_NMTMNU_NODE_FLAG_COUNT_LONGER); \
-    TimerArg_p.m_ulArg = EPL_NMTMNU_TIMERARG_LONGER | uiNodeId_p | \
-        (pNodeInfo_p->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_LONGER); \
-    TimerArg_p.m_EventSink = kEplEventSinkNmtMnu;
-
-#define EPL_NMTMNU_SET_FLAGS_TIMERARG_STATE_MON(pNodeInfo_p, uiNodeId_p, TimerArg_p) \
-    pNodeInfo_p->m_wFlags = \
-        ((pNodeInfo_p->m_wFlags + EPL_NMTMNU_NODE_FLAG_INC_STATREQ) \
-         & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) \
-        | (pNodeInfo_p->m_wFlags & ~EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_ulArg = EPL_NMTMNU_TIMERARG_STATE_MON | uiNodeId_p | \
-        (pNodeInfo_p->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ); \
-    TimerArg_p.m_EventSink = kEplEventSinkNmtMnu;
-
-// defines for global flags
-#define EPL_NMTMNU_FLAG_HALTED          0x0001	// boot process is halted
-#define EPL_NMTMNU_FLAG_APP_INFORMED    0x0002	// application was informed about possible NMT state change
-
-// return pointer to node info structure for specified node ID
-// d.k. may be replaced by special (hash) function if node ID array is smaller than 254
-#define EPL_NMTMNU_GET_NODEINFO(uiNodeId_p) (&EplNmtMnuInstance_g.m_aNodeInfo[uiNodeId_p - 1])
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef enum {
-	kEplNmtMnuIntNodeEventNoIdentResponse = 0x00,
-	kEplNmtMnuIntNodeEventIdentResponse = 0x01,
-	kEplNmtMnuIntNodeEventBoot = 0x02,
-	kEplNmtMnuIntNodeEventExecReset = 0x03,
-	kEplNmtMnuIntNodeEventConfigured = 0x04,
-	kEplNmtMnuIntNodeEventNoStatusResponse = 0x05,
-	kEplNmtMnuIntNodeEventStatusResponse = 0x06,
-	kEplNmtMnuIntNodeEventHeartbeat = 0x07,
-	kEplNmtMnuIntNodeEventNmtCmdSent = 0x08,
-	kEplNmtMnuIntNodeEventTimerIdentReq = 0x09,
-	kEplNmtMnuIntNodeEventTimerStatReq = 0x0A,
-	kEplNmtMnuIntNodeEventTimerStateMon = 0x0B,
-	kEplNmtMnuIntNodeEventTimerLonger = 0x0C,
-	kEplNmtMnuIntNodeEventError = 0x0D,
-
-} tEplNmtMnuIntNodeEvent;
-
-typedef enum {
-	kEplNmtMnuNodeStateUnknown = 0x00,
-	kEplNmtMnuNodeStateIdentified = 0x01,
-	kEplNmtMnuNodeStateResetConf = 0x02,	// CN reset after configuration update
-	kEplNmtMnuNodeStateConfigured = 0x03,	// BootStep1 completed
-	kEplNmtMnuNodeStateReadyToOp = 0x04,	// BootStep2 completed
-	kEplNmtMnuNodeStateComChecked = 0x05,	// Communication checked successfully
-	kEplNmtMnuNodeStateOperational = 0x06,	// CN is in NMT state OPERATIONAL
-
-} tEplNmtMnuNodeState;
-
-typedef struct {
-	tEplTimerHdl m_TimerHdlStatReq;	// timer to delay StatusRequests and IdentRequests
-	tEplTimerHdl m_TimerHdlLonger;	// 2nd timer for NMT command EnableReadyToOp and CheckCommunication
-	tEplNmtMnuNodeState m_NodeState;	// internal node state (kind of sub state of NMT state)
-	u32 m_dwNodeCfg;	// subindex from 0x1F81
-	u16 m_wFlags;		// flags: CN is being accessed isochronously
-
-} tEplNmtMnuNodeInfo;
-
-typedef struct {
-	tEplNmtMnuNodeInfo m_aNodeInfo[EPL_NMT_MAX_NODE_ID];
-	tEplTimerHdl m_TimerHdlNmtState;	// timeout for stay in NMT state
-	unsigned int m_uiMandatorySlaveCount;
-	unsigned int m_uiSignalSlaveCount;
-	unsigned long m_ulStatusRequestDelay;	// in [ms] (object 0x1006 * EPL_C_NMT_STATREQ_CYCLE)
-	unsigned long m_ulTimeoutReadyToOp;	// in [ms] (object 0x1F89/5)
-	unsigned long m_ulTimeoutCheckCom;	// in [ms] (object 0x1006 * MultiplexedCycleCount)
-	u16 m_wFlags;		// global flags
-	u32 m_dwNmtStartup;	// object 0x1F80 NMT_StartUp_U32
-	tEplNmtMnuCbNodeEvent m_pfnCbNodeEvent;
-	tEplNmtMnuCbBootEvent m_pfnCbBootEvent;
-
-} tEplNmtMnuInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplNmtMnuInstance EplNmtMnuInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuCbNmtRequest(tEplFrameInfo *pFrameInfo_p);
-
-static tEplKernel EplNmtMnuCbIdentResponse(unsigned int uiNodeId_p,
-					   tEplIdentResponse *pIdentResponse_p);
-
-static tEplKernel EplNmtMnuCbStatusResponse(unsigned int uiNodeId_p,
-					    tEplStatusResponse *pStatusResponse_p);
-
-static tEplKernel EplNmtMnuCheckNmtState(unsigned int uiNodeId_p,
-					 tEplNmtMnuNodeInfo * pNodeInfo_p,
-					 tEplNmtState NodeNmtState_p,
-					 u16 wErrorCode_p,
-					 tEplNmtState LocalNmtState_p);
-
-static tEplKernel EplNmtMnuStartBootStep1(void);
-
-static tEplKernel EplNmtMnuStartBootStep2(void);
-
-static tEplKernel EplNmtMnuStartCheckCom(void);
-
-static tEplKernel EplNmtMnuNodeBootStep2(unsigned int uiNodeId_p,
-					 tEplNmtMnuNodeInfo * pNodeInfo_p);
-
-static tEplKernel EplNmtMnuNodeCheckCom(unsigned int uiNodeId_p,
-					tEplNmtMnuNodeInfo * pNodeInfo_p);
-
-static tEplKernel EplNmtMnuStartNodes(void);
-
-static tEplKernel EplNmtMnuProcessInternalEvent(unsigned int uiNodeId_p,
-						tEplNmtState NodeNmtState_p,
-						u16 wErrorCode_p,
-						tEplNmtMnuIntNodeEvent
-						NodeEvent_p);
-
-static tEplKernel EplNmtMnuReset(void);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuInit(tEplNmtMnuCbNodeEvent pfnCbNodeEvent_p,
-			 tEplNmtMnuCbBootEvent pfnCbBootEvent_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplNmtMnuAddInstance(pfnCbNodeEvent_p, pfnCbBootEvent_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuAddInstance
-//
-// Description: init other instances of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuAddInstance(tEplNmtMnuCbNodeEvent pfnCbNodeEvent_p,
-				tEplNmtMnuCbBootEvent pfnCbBootEvent_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplNmtMnuInstance_g, 0, sizeof(EplNmtMnuInstance_g));
-
-	if ((pfnCbNodeEvent_p == NULL) || (pfnCbBootEvent_p == NULL)) {
-		Ret = kEplNmtInvalidParam;
-		goto Exit;
-	}
-	EplNmtMnuInstance_g.m_pfnCbNodeEvent = pfnCbNodeEvent_p;
-	EplNmtMnuInstance_g.m_pfnCbBootEvent = pfnCbBootEvent_p;
-
-	// initialize StatusRequest delay
-	EplNmtMnuInstance_g.m_ulStatusRequestDelay = 5000L;
-
-	// register NmtMnResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndNmtRequest,
-				     EplNmtMnuCbNmtRequest,
-				     kEplDllAsndFilterLocal);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuDelInstance
-//
-// Description: delete instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// deregister NmtMnResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndNmtRequest, NULL,
-				     kEplDllAsndFilterNone);
-
-	Ret = EplNmtMnuReset();
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuSendNmtCommandEx
-//
-// Description: sends the specified NMT command to the specified node.
-//
-// Parameters:  uiNodeId_p              = node ID to which the NMT command will be sent
-//              NmtCommand_p            = NMT command
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuSendNmtCommandEx(unsigned int uiNodeId_p,
-				     tEplNmtCommand NmtCommand_p,
-				     void *pNmtCommandData_p,
-				     unsigned int uiDataSize_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplFrameInfo FrameInfo;
-	u8 abBuffer[EPL_C_DLL_MINSIZE_NMTCMDEXT];
-	tEplFrame *pFrame = (tEplFrame *) abBuffer;
-	BOOL fSoftDeleteNode = FALSE;
-
-	if ((uiNodeId_p == 0) || (uiNodeId_p > EPL_C_ADR_BROADCAST)) {	// invalid node ID specified
-		Ret = kEplInvalidNodeId;
-		goto Exit;
-	}
-
-	if ((pNmtCommandData_p != NULL)
-	    && (uiDataSize_p >
-		(EPL_C_DLL_MINSIZE_NMTCMDEXT - EPL_C_DLL_MINSIZE_NMTCMD))) {
-		Ret = kEplNmtInvalidParam;
-		goto Exit;
-	}
-	// $$$ d.k. may be check in future versions if the caller wants to perform prohibited state transitions
-	//     the CN should not perform these transitions, but the expected NMT state will be changed and never fullfilled.
-
-	// build frame
-	EPL_MEMSET(pFrame, 0x00, sizeof(abBuffer));
-	AmiSetByteToLe(&pFrame->m_le_bDstNodeId, (u8) uiNodeId_p);
-	AmiSetByteToLe(&pFrame->m_Data.m_Asnd.m_le_bServiceId,
-		       (u8) kEplDllAsndNmtCommand);
-	AmiSetByteToLe(&pFrame->m_Data.m_Asnd.m_Payload.m_NmtCommandService.
-		       m_le_bNmtCommandId, (u8) NmtCommand_p);
-	if ((pNmtCommandData_p != NULL) && (uiDataSize_p > 0)) {	// copy command data to frame
-		EPL_MEMCPY(&pFrame->m_Data.m_Asnd.m_Payload.m_NmtCommandService.
-			   m_le_abNmtCommandData[0], pNmtCommandData_p,
-			   uiDataSize_p);
-	}
-	// build info structure
-	FrameInfo.m_NetTime.m_dwNanoSec = 0;
-	FrameInfo.m_NetTime.m_dwSec = 0;
-	FrameInfo.m_pFrame = pFrame;
-	FrameInfo.m_uiFrameSize = sizeof(abBuffer);
-
-	// send NMT-Request
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalAsyncSend(&FrameInfo,	// pointer to frameinfo
-				  kEplDllAsyncReqPrioNmt);	// priority
-#endif
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	EPL_DBGLVL_NMTMN_TRACE2("NMTCmd(%02X->%02X)\n", NmtCommand_p,
-				uiNodeId_p);
-
-	switch (NmtCommand_p) {
-	case kEplNmtCmdStartNode:
-	case kEplNmtCmdEnterPreOperational2:
-	case kEplNmtCmdEnableReadyToOperate:
-		{
-			// nothing left to do,
-			// because any further processing is done
-			// when the NMT command is actually sent
-			goto Exit;
-		}
-
-	case kEplNmtCmdStopNode:
-		{
-			fSoftDeleteNode = TRUE;
-			break;
-		}
-
-	case kEplNmtCmdResetNode:
-	case kEplNmtCmdResetCommunication:
-	case kEplNmtCmdResetConfiguration:
-	case kEplNmtCmdSwReset:
-		{
-			break;
-		}
-
-	default:
-		goto Exit;
-	}
-
-	// remove CN from isochronous phase;
-	// This must be done here and not when NMT command is actually sent
-	// because it will be too late and may cause unwanted errors
-	if (uiNodeId_p != EPL_C_ADR_BROADCAST) {
-		if (fSoftDeleteNode == FALSE) {	// remove CN immediately from isochronous phase
-			Ret = EplDlluCalDeleteNode(uiNodeId_p);
-		} else {	// remove CN from isochronous phase softly
-			Ret = EplDlluCalSoftDeleteNode(uiNodeId_p);
-		}
-	} else {		// do it for all active CNs
-		for (uiNodeId_p = 1;
-		     uiNodeId_p <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo);
-		     uiNodeId_p++) {
-			if ((EPL_NMTMNU_GET_NODEINFO(uiNodeId_p)->
-			     m_dwNodeCfg & (EPL_NODEASSIGN_NODE_IS_CN |
-					    EPL_NODEASSIGN_NODE_EXISTS)) != 0) {
-				if (fSoftDeleteNode == FALSE) {	// remove CN immediately from isochronous phase
-					Ret = EplDlluCalDeleteNode(uiNodeId_p);
-				} else {	// remove CN from isochronous phase softly
-					Ret =
-					    EplDlluCalSoftDeleteNode
-					    (uiNodeId_p);
-				}
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuSendNmtCommand
-//
-// Description: sends the specified NMT command to the specified node.
-//
-// Parameters:  uiNodeId_p              = node ID to which the NMT command will be sent
-//              NmtCommand_p            = NMT command
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuSendNmtCommand(unsigned int uiNodeId_p,
-				   tEplNmtCommand NmtCommand_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	Ret = EplNmtMnuSendNmtCommandEx(uiNodeId_p, NmtCommand_p, NULL, 0);
-
-//Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuTriggerStateChange
-//
-// Description: triggers the specified node command for the specified node.
-//
-// Parameters:  uiNodeId_p              = node ID for which the node command will be executed
-//              NodeCommand_p           = node command
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuTriggerStateChange(unsigned int uiNodeId_p,
-				       tEplNmtNodeCommand NodeCommand_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtMnuIntNodeEvent NodeEvent;
-	tEplObdSize ObdSize;
-	u8 bNmtState;
-	u16 wErrorCode = EPL_E_NO_ERROR;
-
-	if ((uiNodeId_p == 0) || (uiNodeId_p >= EPL_C_ADR_BROADCAST)) {
-		Ret = kEplInvalidNodeId;
-		goto Exit;
-	}
-
-	switch (NodeCommand_p) {
-	case kEplNmtNodeCommandBoot:
-		{
-			NodeEvent = kEplNmtMnuIntNodeEventBoot;
-			break;
-		}
-
-	case kEplNmtNodeCommandConfOk:
-		{
-			NodeEvent = kEplNmtMnuIntNodeEventConfigured;
-			break;
-		}
-
-	case kEplNmtNodeCommandConfErr:
-		{
-			NodeEvent = kEplNmtMnuIntNodeEventError;
-			wErrorCode = EPL_E_NMT_BPO1_CF_VERIFY;
-			break;
-		}
-
-	case kEplNmtNodeCommandConfReset:
-		{
-			NodeEvent = kEplNmtMnuIntNodeEventExecReset;
-			break;
-		}
-
-	default:
-		{		// invalid node command
-			goto Exit;
-		}
-	}
-
-	// fetch current NMT state
-	ObdSize = 1;
-	Ret = EplObduReadEntry(0x1F8E, uiNodeId_p, &bNmtState, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret = EplNmtMnuProcessInternalEvent(uiNodeId_p,
-					    (tEplNmtState) (bNmtState |
-							    EPL_NMT_TYPE_CS),
-					    wErrorCode, NodeEvent);
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCbNmtStateChange
-//
-// Description: callback function for NMT state changes
-//
-// Parameters:  NmtStateChange_p        = NMT state change event
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuCbNmtStateChange(tEplEventNmtStateChange NmtStateChange_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// do work which must be done in that state
-	switch (NmtStateChange_p.m_NewNmtState) {
-		// EPL stack is not running
-/*        case kEplNmtGsOff:
-            break;
-
-        // first init of the hardware
-        case kEplNmtGsInitialising:
-            break;
-
-        // init of the manufacturer-specific profile area and the
-        // standardised device profile area
-        case kEplNmtGsResetApplication:
-        {
-            break;
-        }
-
-        // init of the communication profile area
-        case kEplNmtGsResetCommunication:
-        {
-            break;
-        }
-*/
-		// build the configuration with infos from OD
-	case kEplNmtGsResetConfiguration:
-		{
-			u32 dwTimeout;
-			tEplObdSize ObdSize;
-
-			// read object 0x1F80 NMT_StartUp_U32
-			ObdSize = 4;
-			Ret =
-			    EplObduReadEntry(0x1F80, 0,
-					     &EplNmtMnuInstance_g.
-					     m_dwNmtStartup, &ObdSize);
-			if (Ret != kEplSuccessful) {
-				break;
-			}
-			// compute StatusReqDelay = object 0x1006 * EPL_C_NMT_STATREQ_CYCLE
-			ObdSize = sizeof(dwTimeout);
-			Ret = EplObduReadEntry(0x1006, 0, &dwTimeout, &ObdSize);
-			if (Ret != kEplSuccessful) {
-				break;
-			}
-			if (dwTimeout != 0L) {
-				EplNmtMnuInstance_g.m_ulStatusRequestDelay =
-				    dwTimeout * EPL_C_NMT_STATREQ_CYCLE / 1000L;
-				if (EplNmtMnuInstance_g.
-				    m_ulStatusRequestDelay == 0L) {
-					EplNmtMnuInstance_g.m_ulStatusRequestDelay = 1L;	// at least 1 ms
-				}
-				// $$$ fetch and use MultiplexedCycleCount from OD
-				EplNmtMnuInstance_g.m_ulTimeoutCheckCom =
-				    dwTimeout * EPL_C_NMT_STATREQ_CYCLE / 1000L;
-				if (EplNmtMnuInstance_g.m_ulTimeoutCheckCom ==
-				    0L) {
-					EplNmtMnuInstance_g.m_ulTimeoutCheckCom = 1L;	// at least 1 ms
-				}
-			}
-			// fetch ReadyToOp Timeout from OD
-			ObdSize = sizeof(dwTimeout);
-			Ret = EplObduReadEntry(0x1F89, 5, &dwTimeout, &ObdSize);
-			if (Ret != kEplSuccessful) {
-				break;
-			}
-			if (dwTimeout != 0L) {
-				// convert [us] to [ms]
-				dwTimeout /= 1000L;
-				if (dwTimeout == 0L) {
-					dwTimeout = 1L;	// at least 1 ms
-				}
-				EplNmtMnuInstance_g.m_ulTimeoutReadyToOp =
-				    dwTimeout;
-			} else {
-				EplNmtMnuInstance_g.m_ulTimeoutReadyToOp = 0L;
-			}
-			break;
-		}
-/*
-        //-----------------------------------------------------------
-        // CN part of the state machine
-
-        // node liste for EPL-Frames and check timeout
-        case kEplNmtCsNotActive:
-        {
-            break;
-        }
-
-        // node process only async frames
-        case kEplNmtCsPreOperational1:
-        {
-            break;
-        }
-
-        // node process isochronus and asynchronus frames
-        case kEplNmtCsPreOperational2:
-        {
-            break;
-        }
-
-        // node should be configured und application is ready
-        case kEplNmtCsReadyToOperate:
-        {
-            break;
-        }
-
-        // normal work state
-        case kEplNmtCsOperational:
-        {
-            break;
-        }
-
-        // node stopped by MN
-        // -> only process asynchronus frames
-        case kEplNmtCsStopped:
-        {
-            break;
-        }
-
-        // no EPL cycle
-        // -> normal ethernet communication
-        case kEplNmtCsBasicEthernet:
-        {
-            break;
-        }
-*/
-		//-----------------------------------------------------------
-		// MN part of the state machine
-
-		// node listens for EPL-Frames and check timeout
-	case kEplNmtMsNotActive:
-		{
-			break;
-		}
-
-		// node processes only async frames
-	case kEplNmtMsPreOperational1:
-		{
-			u32 dwTimeout;
-			tEplTimerArg TimerArg;
-			tEplObdSize ObdSize;
-			tEplEvent Event;
-
-			// clear global flags, e.g. reenable boot process
-			EplNmtMnuInstance_g.m_wFlags = 0;
-
-			// reset IdentResponses and running IdentRequests and StatusRequests
-			Ret = EplIdentuReset();
-			Ret = EplStatusuReset();
-
-			// reset timers
-			Ret = EplNmtMnuReset();
-
-			// 2008/11/18 d.k. reset internal node info is not necessary,
-			//                 because timer flags are important and other
-			//                 things are reset by EplNmtMnuStartBootStep1().
-/*
-            EPL_MEMSET(EplNmtMnuInstance_g.m_aNodeInfo,
-                       0,
-                       sizeof (EplNmtMnuInstance_g.m_aNodeInfo));
-*/
-
-			// inform DLL about NMT state change,
-			// so that it can clear the asynchonous queues and start the reduced cycle
-			Event.m_EventSink = kEplEventSinkDllk;
-			Event.m_EventType = kEplEventTypeDllkStartReducedCycle;
-			EPL_MEMSET(&Event.m_NetTime, 0x00,
-				   sizeof(Event.m_NetTime));
-			Event.m_pArg = NULL;
-			Event.m_uiSize = 0;
-			Ret = EplEventuPost(&Event);
-			if (Ret != kEplSuccessful) {
-				break;
-			}
-			// reset all nodes
-			// d.k.: skip this step if was just done before, e.g. because of a ResetNode command from a diagnostic node
-			if (NmtStateChange_p.m_NmtEvent ==
-			    kEplNmtEventTimerMsPreOp1) {
-				BENCHMARK_MOD_07_TOGGLE(9);
-
-				EPL_NMTMNU_DBG_POST_TRACE_VALUE(0,
-								EPL_C_ADR_BROADCAST,
-								kEplNmtCmdResetNode);
-
-				Ret =
-				    EplNmtMnuSendNmtCommand(EPL_C_ADR_BROADCAST,
-							    kEplNmtCmdResetNode);
-				if (Ret != kEplSuccessful) {
-					break;
-				}
-			}
-			// start network scan
-			Ret = EplNmtMnuStartBootStep1();
-
-			// start timer for 0x1F89/2 MNTimeoutPreOp1_U32
-			ObdSize = sizeof(dwTimeout);
-			Ret = EplObduReadEntry(0x1F89, 2, &dwTimeout, &ObdSize);
-			if (Ret != kEplSuccessful) {
-				break;
-			}
-			if (dwTimeout != 0L) {
-				dwTimeout /= 1000L;
-				if (dwTimeout == 0L) {
-					dwTimeout = 1L;	// at least 1 ms
-				}
-				TimerArg.m_EventSink = kEplEventSinkNmtMnu;
-				TimerArg.m_ulArg = 0;
-				Ret =
-				    EplTimeruModifyTimerMs(&EplNmtMnuInstance_g.
-							   m_TimerHdlNmtState,
-							   dwTimeout, TimerArg);
-			}
-			break;
-		}
-
-		// node processes isochronous and asynchronous frames
-	case kEplNmtMsPreOperational2:
-		{
-			// add identified CNs to isochronous phase
-			// send EnableReadyToOp to all identified CNs
-			Ret = EplNmtMnuStartBootStep2();
-
-			// wait for NMT state change of CNs
-			break;
-		}
-
-		// node should be configured und application is ready
-	case kEplNmtMsReadyToOperate:
-		{
-			// check if PRes of CNs are OK
-			// d.k. that means wait CycleLength * MultiplexCycleCount (i.e. start timer)
-			//      because Dllk checks PRes of CNs automatically in ReadyToOp
-			Ret = EplNmtMnuStartCheckCom();
-			break;
-		}
-
-		// normal work state
-	case kEplNmtMsOperational:
-		{
-			// send StartNode to CNs
-			// wait for NMT state change of CNs
-			Ret = EplNmtMnuStartNodes();
-			break;
-		}
-
-		// no EPL cycle
-		// -> normal ethernet communication
-	case kEplNmtMsBasicEthernet:
-		{
-			break;
-		}
-
-	default:
-		{
-//            TRACE0("EplNmtMnuCbNmtStateChange(): unhandled NMT state\n");
-		}
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCbCheckEvent
-//
-// Description: callback funktion for NMT events before they are actually executed.
-//              The EPL API layer must forward NMT events from NmtCnu module.
-//              This module will reject some NMT commands while MN.
-//
-// Parameters:  NmtEvent_p              = outstanding NMT event for approval
-//
-// Returns:     tEplKernel              = error code
-//                      kEplReject      = reject the NMT event
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuCbCheckEvent(tEplNmtEvent NmtEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuProcessEvent
-//
-// Description: processes events from event queue
-//
-// Parameters:  pEvent_p        = pointer to event
-//
-// Returns:     tEplKernel      = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuProcessEvent(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// process event
-	switch (pEvent_p->m_EventType) {
-		// timer event
-	case kEplEventTypeTimer:
-		{
-			tEplTimerEventArg *pTimerEventArg =
-			    (tEplTimerEventArg *) pEvent_p->m_pArg;
-			unsigned int uiNodeId;
-
-			uiNodeId =
-			    (unsigned int)(pTimerEventArg->
-					   m_ulArg &
-					   EPL_NMTMNU_TIMERARG_NODE_MASK);
-			if (uiNodeId != 0) {
-				tEplObdSize ObdSize;
-				u8 bNmtState;
-				tEplNmtMnuNodeInfo *pNodeInfo;
-
-				pNodeInfo = EPL_NMTMNU_GET_NODEINFO(uiNodeId);
-
-				ObdSize = 1;
-				Ret =
-				    EplObduReadEntry(0x1F8E, uiNodeId,
-						     &bNmtState, &ObdSize);
-				if (Ret != kEplSuccessful) {
-					break;
-				}
-
-				if ((pTimerEventArg->
-				     m_ulArg & EPL_NMTMNU_TIMERARG_IDENTREQ) !=
-				    0L) {
-					if ((pNodeInfo->
-					     m_wFlags &
-					     EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ)
-					    != (pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR)) {	// this is an old (already deleted or modified) timer
-						// but not the current timer
-						// so discard it
-						EPL_NMTMNU_DBG_POST_TRACE_VALUE
-						    (kEplNmtMnuIntNodeEventTimerIdentReq,
-						     uiNodeId,
-						     ((pNodeInfo->
-						       m_NodeState << 8)
-						      | 0xFF));
-
-						break;
-					}
-/*
-                    EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventTimerIdentReq,
-                                                    uiNodeId,
-                                                    ((pNodeInfo->m_NodeState << 8)
-                                                     | 0x80
-                                                     | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) >> 6)
-                                                     | ((pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR) >> 8)));
-*/
-					Ret =
-					    EplNmtMnuProcessInternalEvent
-					    (uiNodeId,
-					     (tEplNmtState) (bNmtState |
-							     EPL_NMT_TYPE_CS),
-					     EPL_E_NO_ERROR,
-					     kEplNmtMnuIntNodeEventTimerIdentReq);
-				}
-
-				else if ((pTimerEventArg->
-					  m_ulArg & EPL_NMTMNU_TIMERARG_STATREQ)
-					 != 0L) {
-					if ((pNodeInfo->
-					     m_wFlags &
-					     EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ)
-					    != (pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR)) {	// this is an old (already deleted or modified) timer
-						// but not the current timer
-						// so discard it
-						EPL_NMTMNU_DBG_POST_TRACE_VALUE
-						    (kEplNmtMnuIntNodeEventTimerStatReq,
-						     uiNodeId,
-						     ((pNodeInfo->
-						       m_NodeState << 8)
-						      | 0xFF));
-
-						break;
-					}
-/*
-                    EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventTimerStatReq,
-                                                    uiNodeId,
-                                                    ((pNodeInfo->m_NodeState << 8)
-                                                     | 0x80
-                                                     | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) >> 6)
-                                                     | ((pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR) >> 8)));
-*/
-					Ret =
-					    EplNmtMnuProcessInternalEvent
-					    (uiNodeId,
-					     (tEplNmtState) (bNmtState |
-							     EPL_NMT_TYPE_CS),
-					     EPL_E_NO_ERROR,
-					     kEplNmtMnuIntNodeEventTimerStatReq);
-				}
-
-				else if ((pTimerEventArg->
-					  m_ulArg &
-					  EPL_NMTMNU_TIMERARG_STATE_MON) !=
-					 0L) {
-					if ((pNodeInfo->
-					     m_wFlags &
-					     EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ)
-					    != (pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR)) {	// this is an old (already deleted or modified) timer
-						// but not the current timer
-						// so discard it
-						EPL_NMTMNU_DBG_POST_TRACE_VALUE
-						    (kEplNmtMnuIntNodeEventTimerStateMon,
-						     uiNodeId,
-						     ((pNodeInfo->
-						       m_NodeState << 8)
-						      | 0xFF));
-
-						break;
-					}
-/*
-                    EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventTimerStatReq,
-                                                    uiNodeId,
-                                                    ((pNodeInfo->m_NodeState << 8)
-                                                     | 0x80
-                                                     | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) >> 6)
-                                                     | ((pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR) >> 8)));
-*/
-					Ret =
-					    EplNmtMnuProcessInternalEvent
-					    (uiNodeId,
-					     (tEplNmtState) (bNmtState |
-							     EPL_NMT_TYPE_CS),
-					     EPL_E_NO_ERROR,
-					     kEplNmtMnuIntNodeEventTimerStateMon);
-				}
-
-				else if ((pTimerEventArg->
-					  m_ulArg & EPL_NMTMNU_TIMERARG_LONGER)
-					 != 0L) {
-					if ((pNodeInfo->
-					     m_wFlags &
-					     EPL_NMTMNU_NODE_FLAG_COUNT_LONGER)
-					    != (pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_LO)) {	// this is an old (already deleted or modified) timer
-						// but not the current timer
-						// so discard it
-						EPL_NMTMNU_DBG_POST_TRACE_VALUE
-						    (kEplNmtMnuIntNodeEventTimerLonger,
-						     uiNodeId,
-						     ((pNodeInfo->
-						       m_NodeState << 8)
-						      | 0xFF));
-
-						break;
-					}
-/*
-                    EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventTimerLonger,
-                                                    uiNodeId,
-                                                    ((pNodeInfo->m_NodeState << 8)
-                                                     | 0x80
-                                                     | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_LONGER) >> 6)
-                                                     | ((pTimerEventArg->m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_LO) >> 8)));
-*/
-					Ret =
-					    EplNmtMnuProcessInternalEvent
-					    (uiNodeId,
-					     (tEplNmtState) (bNmtState |
-							     EPL_NMT_TYPE_CS),
-					     EPL_E_NO_ERROR,
-					     kEplNmtMnuIntNodeEventTimerLonger);
-				}
-
-			} else {	// global timer event
-			}
-			break;
-		}
-
-	case kEplEventTypeHeartbeat:
-		{
-			tEplHeartbeatEvent *pHeartbeatEvent =
-			    (tEplHeartbeatEvent *) pEvent_p->m_pArg;
-
-			Ret =
-			    EplNmtMnuProcessInternalEvent(pHeartbeatEvent->
-							  m_uiNodeId,
-							  pHeartbeatEvent->
-							  m_NmtState,
-							  pHeartbeatEvent->
-							  m_wErrorCode,
-							  kEplNmtMnuIntNodeEventHeartbeat);
-			break;
-		}
-
-	case kEplEventTypeNmtMnuNmtCmdSent:
-		{
-			tEplFrame *pFrame = (tEplFrame *) pEvent_p->m_pArg;
-			unsigned int uiNodeId;
-			tEplNmtCommand NmtCommand;
-			u8 bNmtState;
-
-			uiNodeId = AmiGetByteFromLe(&pFrame->m_le_bDstNodeId);
-			NmtCommand =
-			    (tEplNmtCommand) AmiGetByteFromLe(&pFrame->m_Data.
-							      m_Asnd.m_Payload.
-							      m_NmtCommandService.
-							      m_le_bNmtCommandId);
-
-			switch (NmtCommand) {
-			case kEplNmtCmdStartNode:
-				bNmtState =
-				    (u8) (kEplNmtCsOperational & 0xFF);
-				break;
-
-			case kEplNmtCmdStopNode:
-				bNmtState = (u8) (kEplNmtCsStopped & 0xFF);
-				break;
-
-			case kEplNmtCmdEnterPreOperational2:
-				bNmtState =
-				    (u8) (kEplNmtCsPreOperational2 & 0xFF);
-				break;
-
-			case kEplNmtCmdEnableReadyToOperate:
-				// d.k. do not change expected node state, because of DS 1.0.0 7.3.1.2.1 Plain NMT State Command
-				//      and because node may not change NMT state within EPL_C_NMT_STATE_TOLERANCE
-				bNmtState =
-				    (u8) (kEplNmtCsPreOperational2 & 0xFF);
-				break;
-
-			case kEplNmtCmdResetNode:
-			case kEplNmtCmdResetCommunication:
-			case kEplNmtCmdResetConfiguration:
-			case kEplNmtCmdSwReset:
-				bNmtState = (u8) (kEplNmtCsNotActive & 0xFF);
-				// EplNmtMnuProcessInternalEvent() sets internal node state to kEplNmtMnuNodeStateUnknown
-				// after next unresponded IdentRequest/StatusRequest
-				break;
-
-			default:
-				goto Exit;
-			}
-
-			// process as internal event which update expected NMT state in OD
-			if (uiNodeId != EPL_C_ADR_BROADCAST) {
-				Ret = EplNmtMnuProcessInternalEvent(uiNodeId,
-								    (tEplNmtState)
-								    (bNmtState |
-								     EPL_NMT_TYPE_CS),
-								    0,
-								    kEplNmtMnuIntNodeEventNmtCmdSent);
-
-			} else {	// process internal event for all active nodes (except myself)
-
-				for (uiNodeId = 1;
-				     uiNodeId <=
-				     tabentries(EplNmtMnuInstance_g.
-						m_aNodeInfo); uiNodeId++) {
-					if ((EPL_NMTMNU_GET_NODEINFO(uiNodeId)->
-					     m_dwNodeCfg &
-					     (EPL_NODEASSIGN_NODE_IS_CN |
-					      EPL_NODEASSIGN_NODE_EXISTS)) !=
-					    0) {
-						Ret =
-						    EplNmtMnuProcessInternalEvent
-						    (uiNodeId,
-						     (tEplNmtState) (bNmtState |
-								     EPL_NMT_TYPE_CS),
-						     0,
-						     kEplNmtMnuIntNodeEventNmtCmdSent);
-
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-					}
-				}
-			}
-
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplNmtInvalidEvent;
-		}
-
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuGetRunningTimerStatReq
-//
-// Description: returns a bit field with running StatReq timers
-//              just for debugging purposes
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplNmtMnuGetDiagnosticInfo(unsigned int *puiMandatorySlaveCount_p,
-				      unsigned int *puiSignalSlaveCount_p,
-				      u16 *pwFlags_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if ((puiMandatorySlaveCount_p == NULL)
-	    || (puiSignalSlaveCount_p == NULL)
-	    || (pwFlags_p == NULL)) {
-		Ret = kEplNmtInvalidParam;
-		goto Exit;
-	}
-
-	*puiMandatorySlaveCount_p = EplNmtMnuInstance_g.m_uiMandatorySlaveCount;
-	*puiSignalSlaveCount_p = EplNmtMnuInstance_g.m_uiSignalSlaveCount;
-	*pwFlags_p = EplNmtMnuInstance_g.m_wFlags;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuGetRunningTimerStatReq
-//
-// Description: returns a bit field with running StatReq timers
-//              just for debugging purposes
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-/*
-u32 EplNmtMnuGetRunningTimerStatReq(void)
-{
-tEplKernel      Ret = kEplSuccessful;
-unsigned int    uiIndex;
-tEplNmtMnuNodeInfo* pNodeInfo;
-
-    pNodeInfo = EplNmtMnuInstance_g.m_aNodeInfo;
-    for (uiIndex = 1; uiIndex <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo); uiIndex++, pNodeInfo++)
-    {
-        if (pNodeInfo->m_NodeState == kEplNmtMnuNodeStateConfigured)
-        {
-            // reset flag "scanned once"
-            pNodeInfo->m_wFlags &= ~EPL_NMTMNU_NODE_FLAG_SCANNED;
-
-            Ret = EplNmtMnuNodeBootStep2(uiIndex, pNodeInfo);
-            if (Ret != kEplSuccessful)
-            {
-                goto Exit;
-            }
-            EplNmtMnuInstance_g.m_uiSignalSlaveCount++;
-            // signal slave counter shall be decremented if StatusRequest was sent once to a CN
-            // mandatory slave counter shall be decremented if mandatory CN is ReadyToOp
-        }
-    }
-
-Exit:
-    return Ret;
-}
-*/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCbNmtRequest
-//
-// Description: callback funktion for NmtRequest
-//
-// Parameters:  pFrameInfo_p            = Frame with the NmtRequest
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuCbNmtRequest(tEplFrameInfo *pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// $$$ perform NMTRequest
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCbIdentResponse
-//
-// Description: callback funktion for IdentResponse
-//
-// Parameters:  uiNodeId_p              = node ID for which IdentReponse was received
-//              pIdentResponse_p        = pointer to IdentResponse
-//                                        is NULL if node did not answer
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuCbIdentResponse(unsigned int uiNodeId_p,
-					   tEplIdentResponse *pIdentResponse_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (pIdentResponse_p == NULL) {	// node did not answer
-		Ret = EplNmtMnuProcessInternalEvent(uiNodeId_p, kEplNmtCsNotActive, EPL_E_NMT_NO_IDENT_RES,	// was EPL_E_NO_ERROR
-						    kEplNmtMnuIntNodeEventNoIdentResponse);
-	} else {		// node answered IdentRequest
-		tEplObdSize ObdSize;
-		u32 dwDevType;
-		u16 wErrorCode = EPL_E_NO_ERROR;
-		tEplNmtState NmtState =
-		    (tEplNmtState) (AmiGetByteFromLe
-				    (&pIdentResponse_p->
-				     m_le_bNmtStatus) | EPL_NMT_TYPE_CS);
-
-		// check IdentResponse $$$ move to ProcessIntern, because this function may be called also if CN
-
-		// check DeviceType (0x1F84)
-		ObdSize = 4;
-		Ret =
-		    EplObduReadEntry(0x1F84, uiNodeId_p, &dwDevType, &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		if (dwDevType != 0L) {	// actually compare it with DeviceType from IdentResponse
-			if (AmiGetDwordFromLe(&pIdentResponse_p->m_le_dwDeviceType) != dwDevType) {	// wrong DeviceType
-				NmtState = kEplNmtCsNotActive;
-				wErrorCode = EPL_E_NMT_BPO1_DEVICE_TYPE;
-			}
-		}
-
-		Ret = EplNmtMnuProcessInternalEvent(uiNodeId_p,
-						    NmtState,
-						    wErrorCode,
-						    kEplNmtMnuIntNodeEventIdentResponse);
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCbStatusResponse
-//
-// Description: callback funktion for StatusResponse
-//
-// Parameters:  uiNodeId_p              = node ID for which IdentReponse was received
-//              pIdentResponse_p        = pointer to IdentResponse
-//                                        is NULL if node did not answer
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuCbStatusResponse(unsigned int uiNodeId_p,
-					    tEplStatusResponse *pStatusResponse_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (pStatusResponse_p == NULL) {	// node did not answer
-		Ret = EplNmtMnuProcessInternalEvent(uiNodeId_p, kEplNmtCsNotActive, EPL_E_NMT_NO_STATUS_RES,	// was EPL_E_NO_ERROR
-						    kEplNmtMnuIntNodeEventNoStatusResponse);
-	} else {		// node answered StatusRequest
-		Ret = EplNmtMnuProcessInternalEvent(uiNodeId_p,
-						    (tEplNmtState)
-						    (AmiGetByteFromLe
-						     (&pStatusResponse_p->
-						      m_le_bNmtStatus) |
-						     EPL_NMT_TYPE_CS),
-						    EPL_E_NO_ERROR,
-						    kEplNmtMnuIntNodeEventStatusResponse);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuStartBootStep1
-//
-// Description: starts BootStep1
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuStartBootStep1(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiSubIndex;
-	unsigned int uiLocalNodeId;
-	u32 dwNodeCfg;
-	tEplObdSize ObdSize;
-
-	// $$$ d.k.: save current time for 0x1F89/2 MNTimeoutPreOp1_U32
-
-	// start network scan
-	EplNmtMnuInstance_g.m_uiMandatorySlaveCount = 0;
-	EplNmtMnuInstance_g.m_uiSignalSlaveCount = 0;
-	// check 0x1F81
-	uiLocalNodeId = EplObduGetNodeId();
-	for (uiSubIndex = 1; uiSubIndex <= 254; uiSubIndex++) {
-		ObdSize = 4;
-		Ret =
-		    EplObduReadEntry(0x1F81, uiSubIndex, &dwNodeCfg, &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		if (uiSubIndex != uiLocalNodeId) {
-			// reset flags "not scanned" and "isochronous"
-			EPL_NMTMNU_GET_NODEINFO(uiSubIndex)->m_wFlags &=
-			    ~(EPL_NMTMNU_NODE_FLAG_ISOCHRON |
-			      EPL_NMTMNU_NODE_FLAG_NOT_SCANNED);
-
-			if (uiSubIndex == EPL_C_ADR_DIAG_DEF_NODE_ID) {	// diagnostic node must be scanned by MN in any case
-				dwNodeCfg |=
-				    (EPL_NODEASSIGN_NODE_IS_CN |
-				     EPL_NODEASSIGN_NODE_EXISTS);
-				// and it must be isochronously accessed
-				dwNodeCfg &= ~EPL_NODEASSIGN_ASYNCONLY_NODE;
-			}
-			// save node config in local node info structure
-			EPL_NMTMNU_GET_NODEINFO(uiSubIndex)->m_dwNodeCfg =
-			    dwNodeCfg;
-			EPL_NMTMNU_GET_NODEINFO(uiSubIndex)->m_NodeState =
-			    kEplNmtMnuNodeStateUnknown;
-
-			if ((dwNodeCfg & (EPL_NODEASSIGN_NODE_IS_CN | EPL_NODEASSIGN_NODE_EXISTS)) != 0) {	// node is configured as CN
-				// identify the node
-				Ret =
-				    EplIdentuRequestIdentResponse(uiSubIndex,
-								  EplNmtMnuCbIdentResponse);
-				if (Ret != kEplSuccessful) {
-					goto Exit;
-				}
-				// set flag "not scanned"
-				EPL_NMTMNU_GET_NODEINFO(uiSubIndex)->m_wFlags |=
-				    EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount++;
-				// signal slave counter shall be decremented if IdentRequest was sent once to a CN
-
-				if ((dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN
-					EplNmtMnuInstance_g.
-					    m_uiMandatorySlaveCount++;
-					// mandatory slave counter shall be decremented if mandatory CN was configured successfully
-				}
-			}
-		} else {	// subindex of MN
-			if ((dwNodeCfg & (EPL_NODEASSIGN_MN_PRES | EPL_NODEASSIGN_NODE_EXISTS)) != 0) {	// MN shall send PRes
-				tEplDllNodeInfo DllNodeInfo;
-
-				EPL_MEMSET(&DllNodeInfo, 0,
-					   sizeof(DllNodeInfo));
-				DllNodeInfo.m_uiNodeId = uiLocalNodeId;
-
-				Ret = EplDlluCalAddNode(&DllNodeInfo);
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuStartBootStep2
-//
-// Description: starts BootStep2.
-//              That means add nodes to isochronous phase and send
-//              NMT EnableReadyToOp.
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuStartBootStep2(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	tEplNmtMnuNodeInfo *pNodeInfo;
-
-	if ((EplNmtMnuInstance_g.m_wFlags & EPL_NMTMNU_FLAG_HALTED) == 0) {	// boot process is not halted
-		// add nodes to isochronous phase and send NMT EnableReadyToOp
-		EplNmtMnuInstance_g.m_uiMandatorySlaveCount = 0;
-		EplNmtMnuInstance_g.m_uiSignalSlaveCount = 0;
-		// reset flag that application was informed about possible state change
-		EplNmtMnuInstance_g.m_wFlags &= ~EPL_NMTMNU_FLAG_APP_INFORMED;
-
-		pNodeInfo = EplNmtMnuInstance_g.m_aNodeInfo;
-		for (uiIndex = 1;
-		     uiIndex <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo);
-		     uiIndex++, pNodeInfo++) {
-			if (pNodeInfo->m_NodeState ==
-			    kEplNmtMnuNodeStateConfigured) {
-				Ret =
-				    EplNmtMnuNodeBootStep2(uiIndex, pNodeInfo);
-				if (Ret != kEplSuccessful) {
-					goto Exit;
-				}
-				// set flag "not scanned"
-				pNodeInfo->m_wFlags |=
-				    EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount++;
-				// signal slave counter shall be decremented if StatusRequest was sent once to a CN
-
-				if ((pNodeInfo->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN
-					EplNmtMnuInstance_g.
-					    m_uiMandatorySlaveCount++;
-				}
-				// mandatory slave counter shall be decremented if mandatory CN is ReadyToOp
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuNodeBootStep2
-//
-// Description: starts BootStep2 for the specified node.
-//              This means the CN is added to isochronous phase if not
-//              async-only and it gets the NMT command EnableReadyToOp.
-//              The CN must be in node state Configured, when it enters
-//              BootStep2. When BootStep2 finishes, the CN is in node state
-//              ReadyToOp.
-//              If TimeoutReadyToOp in object 0x1F89/5 is configured,
-//              TimerHdlLonger will be started with this timeout.
-//
-// Parameters:  uiNodeId_p              = node ID
-//              pNodeInfo_p             = pointer to internal node info structure
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuNodeBootStep2(unsigned int uiNodeId_p,
-					 tEplNmtMnuNodeInfo * pNodeInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplDllNodeInfo DllNodeInfo;
-	u32 dwNodeCfg;
-	tEplObdSize ObdSize;
-	tEplTimerArg TimerArg;
-
-	dwNodeCfg = pNodeInfo_p->m_dwNodeCfg;
-	if ((dwNodeCfg & EPL_NODEASSIGN_ASYNCONLY_NODE) == 0) {	// add node to isochronous phase
-		DllNodeInfo.m_uiNodeId = uiNodeId_p;
-		ObdSize = 4;
-		Ret =
-		    EplObduReadEntry(0x1F92, uiNodeId_p,
-				     &DllNodeInfo.m_dwPresTimeout, &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		ObdSize = 2;
-		Ret =
-		    EplObduReadEntry(0x1F8B, uiNodeId_p,
-				     &DllNodeInfo.m_wPreqPayloadLimit,
-				     &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		ObdSize = 2;
-		Ret =
-		    EplObduReadEntry(0x1F8D, uiNodeId_p,
-				     &DllNodeInfo.m_wPresPayloadLimit,
-				     &ObdSize);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		pNodeInfo_p->m_wFlags |= EPL_NMTMNU_NODE_FLAG_ISOCHRON;
-
-		Ret = EplDlluCalAddNode(&DllNodeInfo);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-	}
-
-	EPL_NMTMNU_DBG_POST_TRACE_VALUE(0,
-					uiNodeId_p,
-					kEplNmtCmdEnableReadyToOperate);
-
-	Ret =
-	    EplNmtMnuSendNmtCommand(uiNodeId_p, kEplNmtCmdEnableReadyToOperate);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	if (EplNmtMnuInstance_g.m_ulTimeoutReadyToOp != 0L) {	// start timer
-		// when the timer expires the CN must be ReadyToOp
-		EPL_NMTMNU_SET_FLAGS_TIMERARG_LONGER(pNodeInfo_p, uiNodeId_p,
-						     TimerArg);
-//        TimerArg.m_EventSink = kEplEventSinkNmtMnu;
-//        TimerArg.m_ulArg = EPL_NMTMNU_TIMERARG_LONGER | uiNodeId_p;
-		Ret =
-		    EplTimeruModifyTimerMs(&pNodeInfo_p->m_TimerHdlLonger,
-					   EplNmtMnuInstance_g.
-					   m_ulTimeoutReadyToOp, TimerArg);
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuStartCheckCom
-//
-// Description: starts CheckCommunication
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuStartCheckCom(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	tEplNmtMnuNodeInfo *pNodeInfo;
-
-	if ((EplNmtMnuInstance_g.m_wFlags & EPL_NMTMNU_FLAG_HALTED) == 0) {	// boot process is not halted
-		// wait some time and check that no communication error occurs
-		EplNmtMnuInstance_g.m_uiMandatorySlaveCount = 0;
-		EplNmtMnuInstance_g.m_uiSignalSlaveCount = 0;
-		// reset flag that application was informed about possible state change
-		EplNmtMnuInstance_g.m_wFlags &= ~EPL_NMTMNU_FLAG_APP_INFORMED;
-
-		pNodeInfo = EplNmtMnuInstance_g.m_aNodeInfo;
-		for (uiIndex = 1;
-		     uiIndex <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo);
-		     uiIndex++, pNodeInfo++) {
-			if (pNodeInfo->m_NodeState ==
-			    kEplNmtMnuNodeStateReadyToOp) {
-				Ret = EplNmtMnuNodeCheckCom(uiIndex, pNodeInfo);
-				if (Ret == kEplReject) {	// timer was started
-					// wait until it expires
-					if ((pNodeInfo->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN
-						EplNmtMnuInstance_g.
-						    m_uiMandatorySlaveCount++;
-					}
-				} else if (Ret != kEplSuccessful) {
-					goto Exit;
-				}
-				// set flag "not scanned"
-				pNodeInfo->m_wFlags |=
-				    EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount++;
-				// signal slave counter shall be decremented if timeout elapsed and regardless of an error
-				// mandatory slave counter shall be decremented if timeout elapsed and no error occured
-			}
-		}
-	}
-
-	Ret = kEplSuccessful;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuNodeCheckCom
-//
-// Description: checks communication of the specified node.
-//              That means wait some time and if no error occured everything
-//              is OK.
-//
-// Parameters:  uiNodeId_p              = node ID
-//              pNodeInfo_p             = pointer to internal node info structure
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuNodeCheckCom(unsigned int uiNodeId_p,
-					tEplNmtMnuNodeInfo * pNodeInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u32 dwNodeCfg;
-	tEplTimerArg TimerArg;
-
-	dwNodeCfg = pNodeInfo_p->m_dwNodeCfg;
-	if (((dwNodeCfg & EPL_NODEASSIGN_ASYNCONLY_NODE) == 0)
-	    && (EplNmtMnuInstance_g.m_ulTimeoutCheckCom != 0L)) {	// CN is not async-only and timeout for CheckCom was set
-
-		// check communication,
-		// that means wait some time and if no error occured everything is OK;
-
-		// start timer (when the timer expires the CN must be still ReadyToOp)
-		EPL_NMTMNU_SET_FLAGS_TIMERARG_LONGER(pNodeInfo_p, uiNodeId_p,
-						     TimerArg);
-//        TimerArg.m_EventSink = kEplEventSinkNmtMnu;
-//        TimerArg.m_ulArg = EPL_NMTMNU_TIMERARG_LONGER | uiNodeId_p;
-		Ret =
-		    EplTimeruModifyTimerMs(&pNodeInfo_p->m_TimerHdlLonger,
-					   EplNmtMnuInstance_g.
-					   m_ulTimeoutCheckCom, TimerArg);
-
-		// update mandatory slave counter, because timer was started
-		if (Ret == kEplSuccessful) {
-			Ret = kEplReject;
-		}
-	} else {		// timer was not started
-		// assume everything is OK
-		pNodeInfo_p->m_NodeState = kEplNmtMnuNodeStateComChecked;
-	}
-
-//Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuStartNodes
-//
-// Description: really starts all nodes which are ReadyToOp and CheckCom did not fail
-//
-// Parameters:  (none)
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuStartNodes(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	tEplNmtMnuNodeInfo *pNodeInfo;
-
-	if ((EplNmtMnuInstance_g.m_wFlags & EPL_NMTMNU_FLAG_HALTED) == 0) {	// boot process is not halted
-		// send NMT command Start Node
-		EplNmtMnuInstance_g.m_uiMandatorySlaveCount = 0;
-		EplNmtMnuInstance_g.m_uiSignalSlaveCount = 0;
-		// reset flag that application was informed about possible state change
-		EplNmtMnuInstance_g.m_wFlags &= ~EPL_NMTMNU_FLAG_APP_INFORMED;
-
-		pNodeInfo = EplNmtMnuInstance_g.m_aNodeInfo;
-		for (uiIndex = 1;
-		     uiIndex <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo);
-		     uiIndex++, pNodeInfo++) {
-			if (pNodeInfo->m_NodeState ==
-			    kEplNmtMnuNodeStateComChecked) {
-				if ((EplNmtMnuInstance_g.
-				     m_dwNmtStartup & EPL_NMTST_STARTALLNODES)
-				    == 0) {
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE(0,
-									uiIndex,
-									kEplNmtCmdStartNode);
-
-					Ret =
-					    EplNmtMnuSendNmtCommand(uiIndex,
-								    kEplNmtCmdStartNode);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-				}
-
-				if ((pNodeInfo->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN
-					EplNmtMnuInstance_g.
-					    m_uiMandatorySlaveCount++;
-				}
-				// set flag "not scanned"
-				pNodeInfo->m_wFlags |=
-				    EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount++;
-				// signal slave counter shall be decremented if StatusRequest was sent once to a CN
-				// mandatory slave counter shall be decremented if mandatory CN is OPERATIONAL
-			}
-		}
-
-		// $$$ inform application if EPL_NMTST_NO_STARTNODE is set
-
-		if ((EplNmtMnuInstance_g.
-		     m_dwNmtStartup & EPL_NMTST_STARTALLNODES) != 0) {
-			EPL_NMTMNU_DBG_POST_TRACE_VALUE(0, EPL_C_ADR_BROADCAST,
-							kEplNmtCmdStartNode);
-
-			Ret =
-			    EplNmtMnuSendNmtCommand(EPL_C_ADR_BROADCAST,
-						    kEplNmtCmdStartNode);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuProcessInternalEvent
-//
-// Description: processes internal node events
-//
-// Parameters:  uiNodeId_p              = node ID
-//              NodeNmtState_p          = NMT state of CN
-//              NodeEvent_p             = occured events
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuProcessInternalEvent(unsigned int uiNodeId_p,
-						tEplNmtState NodeNmtState_p,
-						u16 wErrorCode_p,
-						tEplNmtMnuIntNodeEvent
-						NodeEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplNmtState NmtState;
-	tEplNmtMnuNodeInfo *pNodeInfo;
-	tEplTimerArg TimerArg;
-
-	pNodeInfo = EPL_NMTMNU_GET_NODEINFO(uiNodeId_p);
-	NmtState = EplNmtuGetNmtState();
-	if (NmtState <= kEplNmtMsNotActive) {	// MN is not active
-		goto Exit;
-	}
-
-	switch (NodeEvent_p) {
-	case kEplNmtMnuIntNodeEventIdentResponse:
-		{
-			u8 bNmtState;
-
-			EPL_NMTMNU_DBG_POST_TRACE_VALUE(NodeEvent_p,
-							uiNodeId_p,
-							pNodeInfo->m_NodeState);
-
-			if (pNodeInfo->m_NodeState !=
-			    kEplNmtMnuNodeStateResetConf) {
-				pNodeInfo->m_NodeState =
-				    kEplNmtMnuNodeStateIdentified;
-			}
-			// reset flags ISOCHRON and NMT_CMD_ISSUED
-			pNodeInfo->m_wFlags &= ~(EPL_NMTMNU_NODE_FLAG_ISOCHRON
-						 |
-						 EPL_NMTMNU_NODE_FLAG_NMT_CMD_ISSUED);
-
-			if ((NmtState == kEplNmtMsPreOperational1)
-			    &&
-			    ((pNodeInfo->
-			      m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) !=
-			     0)) {
-				// decrement only signal slave count
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-				pNodeInfo->m_wFlags &=
-				    ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-			}
-			// update object 0x1F8F NMT_MNNodeExpState_AU8 to PreOp1 (even if local state >= PreOp2)
-			bNmtState = (u8) (kEplNmtCsPreOperational1 & 0xFF);
-			Ret =
-			    EplObduWriteEntry(0x1F8F, uiNodeId_p, &bNmtState,
-					      1);
-
-			// check NMT state of CN
-			Ret =
-			    EplNmtMnuCheckNmtState(uiNodeId_p, pNodeInfo,
-						   NodeNmtState_p, wErrorCode_p,
-						   NmtState);
-			if (Ret != kEplSuccessful) {
-				if (Ret == kEplReject) {
-					Ret = kEplSuccessful;
-				}
-				break;
-			}
-			// request StatusResponse immediately,
-			// because we want a fast boot-up of CNs
-			Ret =
-			    EplStatusuRequestStatusResponse(uiNodeId_p,
-							    EplNmtMnuCbStatusResponse);
-			if (Ret != kEplSuccessful) {
-				EPL_NMTMNU_DBG_POST_TRACE_VALUE(NodeEvent_p,
-								uiNodeId_p,
-								Ret);
-
-				if (Ret == kEplInvalidOperation) {	// the only situation when this should happen is, when
-					// StatusResponse was already requested from within
-					// the StatReq timer event.
-					// so ignore this error.
-					Ret = kEplSuccessful;
-				} else {
-					break;
-				}
-			}
-
-			if (pNodeInfo->m_NodeState !=
-			    kEplNmtMnuNodeStateResetConf) {
-				// inform application
-				Ret =
-				    EplNmtMnuInstance_g.
-				    m_pfnCbNodeEvent(uiNodeId_p,
-						     kEplNmtNodeEventFound,
-						     NodeNmtState_p,
-						     EPL_E_NO_ERROR,
-						     (pNodeInfo->
-						      m_dwNodeCfg &
-						      EPL_NODEASSIGN_MANDATORY_CN)
-						     != 0);
-				if (Ret == kEplReject) {	// interrupt boot process on user request
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE
-					    (NodeEvent_p, uiNodeId_p,
-					     ((pNodeInfo->m_NodeState << 8)
-					      | Ret));
-
-					Ret = kEplSuccessful;
-					break;
-				} else if (Ret != kEplSuccessful) {
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE
-					    (NodeEvent_p, uiNodeId_p,
-					     ((pNodeInfo->m_NodeState << 8)
-					      | Ret));
-
-					break;
-				}
-			}
-			// continue BootStep1
-		}
-
-	case kEplNmtMnuIntNodeEventBoot:
-		{
-
-			// $$$ check identification (vendor ID, product code, revision no, serial no)
-
-			if (pNodeInfo->m_NodeState ==
-			    kEplNmtMnuNodeStateIdentified) {
-				// $$$ check software
-
-				// check/start configuration
-				// inform application
-				Ret =
-				    EplNmtMnuInstance_g.
-				    m_pfnCbNodeEvent(uiNodeId_p,
-						     kEplNmtNodeEventCheckConf,
-						     NodeNmtState_p,
-						     EPL_E_NO_ERROR,
-						     (pNodeInfo->
-						      m_dwNodeCfg &
-						      EPL_NODEASSIGN_MANDATORY_CN)
-						     != 0);
-				if (Ret == kEplReject) {	// interrupt boot process on user request
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE
-					    (kEplNmtMnuIntNodeEventBoot,
-					     uiNodeId_p,
-					     ((pNodeInfo->m_NodeState << 8)
-					      | Ret));
-
-					Ret = kEplSuccessful;
-					break;
-				} else if (Ret != kEplSuccessful) {
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE
-					    (kEplNmtMnuIntNodeEventBoot,
-					     uiNodeId_p,
-					     ((pNodeInfo->m_NodeState << 8)
-					      | Ret));
-
-					break;
-				}
-			} else if (pNodeInfo->m_NodeState != kEplNmtMnuNodeStateResetConf) {	// wrong CN state
-				// ignore event
-				break;
-			}
-			// $$$ d.k.: currently we assume configuration is OK
-
-			// continue BootStep1
-		}
-
-	case kEplNmtMnuIntNodeEventConfigured:
-		{
-			if ((pNodeInfo->m_NodeState !=
-			     kEplNmtMnuNodeStateIdentified)
-			    && (pNodeInfo->m_NodeState != kEplNmtMnuNodeStateResetConf)) {	// wrong CN state
-				// ignore event
-				break;
-			}
-
-			pNodeInfo->m_NodeState = kEplNmtMnuNodeStateConfigured;
-
-			if (NmtState == kEplNmtMsPreOperational1) {
-				if ((pNodeInfo->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// decrement mandatory CN counter
-					EplNmtMnuInstance_g.
-					    m_uiMandatorySlaveCount--;
-				}
-			} else {
-				// put optional node to next step (BootStep2)
-				Ret =
-				    EplNmtMnuNodeBootStep2(uiNodeId_p,
-							   pNodeInfo);
-			}
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventNoIdentResponse:
-		{
-			if ((NmtState == kEplNmtMsPreOperational1)
-			    &&
-			    ((pNodeInfo->
-			      m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) !=
-			     0)) {
-				// decrement only signal slave count
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-				pNodeInfo->m_wFlags &=
-				    ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-			}
-
-			if (pNodeInfo->m_NodeState !=
-			    kEplNmtMnuNodeStateResetConf) {
-				pNodeInfo->m_NodeState =
-				    kEplNmtMnuNodeStateUnknown;
-			}
-			// $$$ d.k. check start time for 0x1F89/2 MNTimeoutPreOp1_U32
-			// $$$ d.k. check individual timeout 0x1F89/6 MNIdentificationTimeout_U32
-			// if mandatory node and timeout elapsed -> halt boot procedure
-			// trigger IdentRequest again (if >= PreOp2, after delay)
-			if (NmtState >= kEplNmtMsPreOperational2) {	// start timer
-				EPL_NMTMNU_SET_FLAGS_TIMERARG_IDENTREQ
-				    (pNodeInfo, uiNodeId_p, TimerArg);
-//                TimerArg.m_EventSink = kEplEventSinkNmtMnu;
-//                TimerArg.m_ulArg = EPL_NMTMNU_TIMERARG_IDENTREQ | uiNodeId_p;
-/*
-                EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventNoIdentResponse,
-                                                uiNodeId_p,
-                                                ((pNodeInfo->m_NodeState << 8)
-                                                 | 0x80
-                                                 | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) >> 6)
-                                                 | ((TimerArg.m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR) >> 8)));
-*/
-				Ret =
-				    EplTimeruModifyTimerMs(&pNodeInfo->
-							   m_TimerHdlStatReq,
-							   EplNmtMnuInstance_g.
-							   m_ulStatusRequestDelay,
-							   TimerArg);
-			} else {	// trigger IdentRequest immediately
-				Ret =
-				    EplIdentuRequestIdentResponse(uiNodeId_p,
-								  EplNmtMnuCbIdentResponse);
-			}
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventStatusResponse:
-		{
-			if ((NmtState >= kEplNmtMsPreOperational2)
-			    &&
-			    ((pNodeInfo->
-			      m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) !=
-			     0)) {
-				// decrement only signal slave count if checked once for ReadyToOp, CheckCom, Operational
-				EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-				pNodeInfo->m_wFlags &=
-				    ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-			}
-			// check NMT state of CN
-			Ret =
-			    EplNmtMnuCheckNmtState(uiNodeId_p, pNodeInfo,
-						   NodeNmtState_p, wErrorCode_p,
-						   NmtState);
-			if (Ret != kEplSuccessful) {
-				if (Ret == kEplReject) {
-					Ret = kEplSuccessful;
-				}
-				break;
-			}
-
-			if (NmtState == kEplNmtMsPreOperational1) {
-				// request next StatusResponse immediately
-				Ret =
-				    EplStatusuRequestStatusResponse(uiNodeId_p,
-								    EplNmtMnuCbStatusResponse);
-				if (Ret != kEplSuccessful) {
-					EPL_NMTMNU_DBG_POST_TRACE_VALUE
-					    (NodeEvent_p, uiNodeId_p, Ret);
-				}
-
-			} else if ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_ISOCHRON) == 0) {	// start timer
-				// not isochronously accessed CN (e.g. async-only or stopped CN)
-				EPL_NMTMNU_SET_FLAGS_TIMERARG_STATREQ(pNodeInfo,
-								      uiNodeId_p,
-								      TimerArg);
-//                TimerArg.m_EventSink = kEplEventSinkNmtMnu;
-//                TimerArg.m_ulArg = EPL_NMTMNU_TIMERARG_STATREQ | uiNodeId_p;
-/*
-                EPL_NMTMNU_DBG_POST_TRACE_VALUE(kEplNmtMnuIntNodeEventStatusResponse,
-                                                uiNodeId_p,
-                                                ((pNodeInfo->m_NodeState << 8)
-                                                 | 0x80
-                                                 | ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_COUNT_STATREQ) >> 6)
-                                                 | ((TimerArg.m_ulArg & EPL_NMTMNU_TIMERARG_COUNT_SR) >> 8)));
-*/
-				Ret =
-				    EplTimeruModifyTimerMs(&pNodeInfo->
-							   m_TimerHdlStatReq,
-							   EplNmtMnuInstance_g.
-							   m_ulStatusRequestDelay,
-							   TimerArg);
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventNoStatusResponse:
-		{
-			// function CheckNmtState sets node state to unknown if necessary
-/*
-            if ((NmtState >= kEplNmtMsPreOperational2)
-                && ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) != 0))
-            {
-                // decrement only signal slave count if checked once for ReadyToOp, CheckCom, Operational
-                EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-                pNodeInfo->m_wFlags &= ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-            }
-*/
-			// check NMT state of CN
-			Ret =
-			    EplNmtMnuCheckNmtState(uiNodeId_p, pNodeInfo,
-						   NodeNmtState_p, wErrorCode_p,
-						   NmtState);
-			if (Ret != kEplSuccessful) {
-				if (Ret == kEplReject) {
-					Ret = kEplSuccessful;
-				}
-				break;
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventError:
-		{		// currently only issued on kEplNmtNodeCommandConfErr
-
-			if (pNodeInfo->m_NodeState != kEplNmtMnuNodeStateIdentified) {	// wrong CN state
-				// ignore event
-				break;
-			}
-			// check NMT state of CN
-			Ret =
-			    EplNmtMnuCheckNmtState(uiNodeId_p, pNodeInfo,
-						   kEplNmtCsNotActive,
-						   wErrorCode_p, NmtState);
-			if (Ret != kEplSuccessful) {
-				if (Ret == kEplReject) {
-					Ret = kEplSuccessful;
-				}
-				break;
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventExecReset:
-		{
-			if (pNodeInfo->m_NodeState != kEplNmtMnuNodeStateIdentified) {	// wrong CN state
-				// ignore event
-				break;
-			}
-
-			pNodeInfo->m_NodeState = kEplNmtMnuNodeStateResetConf;
-
-			EPL_NMTMNU_DBG_POST_TRACE_VALUE(NodeEvent_p,
-							uiNodeId_p,
-							(((NodeNmtState_p &
-							   0xFF) << 8)
-							 |
-							 kEplNmtCmdResetConfiguration));
-
-			// send NMT reset configuration to CN for activation of configuration
-			Ret =
-			    EplNmtMnuSendNmtCommand(uiNodeId_p,
-						    kEplNmtCmdResetConfiguration);
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventHeartbeat:
-		{
-/*
-            if ((NmtState >= kEplNmtMsPreOperational2)
-                && ((pNodeInfo->m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) != 0))
-            {
-                // decrement only signal slave count if checked once for ReadyToOp, CheckCom, Operational
-                EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-                pNodeInfo->m_wFlags &= ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-            }
-*/
-			// check NMT state of CN
-			Ret =
-			    EplNmtMnuCheckNmtState(uiNodeId_p, pNodeInfo,
-						   NodeNmtState_p, wErrorCode_p,
-						   NmtState);
-			if (Ret != kEplSuccessful) {
-				if (Ret == kEplReject) {
-					Ret = kEplSuccessful;
-				}
-				break;
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventTimerIdentReq:
-		{
-			EPL_DBGLVL_NMTMN_TRACE1
-			    ("TimerStatReq->IdentReq(%02X)\n", uiNodeId_p);
-			// trigger IdentRequest again
-			Ret =
-			    EplIdentuRequestIdentResponse(uiNodeId_p,
-							  EplNmtMnuCbIdentResponse);
-			if (Ret != kEplSuccessful) {
-				EPL_NMTMNU_DBG_POST_TRACE_VALUE(NodeEvent_p,
-								uiNodeId_p,
-								(((NodeNmtState_p & 0xFF) << 8)
-								 | Ret));
-				if (Ret == kEplInvalidOperation) {	// this can happen because of a bug in EplTimeruLinuxKernel.c
-					// so ignore this error.
-					Ret = kEplSuccessful;
-				}
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventTimerStateMon:
-		{
-			// reset NMT state change flag
-			// because from now on the CN must have the correct NMT state
-			pNodeInfo->m_wFlags &=
-			    ~EPL_NMTMNU_NODE_FLAG_NMT_CMD_ISSUED;
-
-			// continue with normal StatReq processing
-		}
-
-	case kEplNmtMnuIntNodeEventTimerStatReq:
-		{
-			EPL_DBGLVL_NMTMN_TRACE1("TimerStatReq->StatReq(%02X)\n",
-						uiNodeId_p);
-			// request next StatusResponse
-			Ret =
-			    EplStatusuRequestStatusResponse(uiNodeId_p,
-							    EplNmtMnuCbStatusResponse);
-			if (Ret != kEplSuccessful) {
-				EPL_NMTMNU_DBG_POST_TRACE_VALUE(NodeEvent_p,
-								uiNodeId_p,
-								(((NodeNmtState_p & 0xFF) << 8)
-								 | Ret));
-				if (Ret == kEplInvalidOperation) {	// the only situation when this should happen is, when
-					// StatusResponse was already requested while processing
-					// event IdentResponse.
-					// so ignore this error.
-					Ret = kEplSuccessful;
-				}
-			}
-
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventTimerLonger:
-		{
-			switch (pNodeInfo->m_NodeState) {
-			case kEplNmtMnuNodeStateConfigured:
-				{	// node should be ReadyToOp but it is not
-
-					// check NMT state which shall be intentionally wrong, so that ERROR_TREATMENT will be started
-					Ret =
-					    EplNmtMnuCheckNmtState(uiNodeId_p,
-								   pNodeInfo,
-								   kEplNmtCsNotActive,
-								   EPL_E_NMT_BPO2,
-								   NmtState);
-					if (Ret != kEplSuccessful) {
-						if (Ret == kEplReject) {
-							Ret = kEplSuccessful;
-						}
-						break;
-					}
-
-					break;
-				}
-
-			case kEplNmtMnuNodeStateReadyToOp:
-				{	// CheckCom finished successfully
-
-					pNodeInfo->m_NodeState =
-					    kEplNmtMnuNodeStateComChecked;
-
-					if ((pNodeInfo->
-					     m_wFlags &
-					     EPL_NMTMNU_NODE_FLAG_NOT_SCANNED)
-					    != 0) {
-						// decrement only signal slave count if checked once for ReadyToOp, CheckCom, Operational
-						EplNmtMnuInstance_g.
-						    m_uiSignalSlaveCount--;
-						pNodeInfo->m_wFlags &=
-						    ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-					}
-
-					if ((pNodeInfo->
-					     m_dwNodeCfg &
-					     EPL_NODEASSIGN_MANDATORY_CN) !=
-					    0) {
-						// decrement mandatory slave counter
-						EplNmtMnuInstance_g.
-						    m_uiMandatorySlaveCount--;
-					}
-					if (NmtState != kEplNmtMsReadyToOperate) {
-						EPL_NMTMNU_DBG_POST_TRACE_VALUE
-						    (NodeEvent_p, uiNodeId_p,
-						     (((NodeNmtState_p & 0xFF)
-						       << 8)
-						      | kEplNmtCmdStartNode));
-
-						// start optional CN
-						Ret =
-						    EplNmtMnuSendNmtCommand
-						    (uiNodeId_p,
-						     kEplNmtCmdStartNode);
-					}
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-	case kEplNmtMnuIntNodeEventNmtCmdSent:
-		{
-			u8 bNmtState;
-
-			// update expected NMT state with the one that results
-			// from the sent NMT command
-			bNmtState = (u8) (NodeNmtState_p & 0xFF);
-
-			// write object 0x1F8F NMT_MNNodeExpState_AU8
-			Ret =
-			    EplObduWriteEntry(0x1F8F, uiNodeId_p, &bNmtState,
-					      1);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			if (NodeNmtState_p == kEplNmtCsNotActive) {	// restart processing with IdentRequest
-				EPL_NMTMNU_SET_FLAGS_TIMERARG_IDENTREQ
-				    (pNodeInfo, uiNodeId_p, TimerArg);
-			} else {	// monitor NMT state change with StatusRequest after
-				// the corresponding delay;
-				// until then wrong NMT states will be ignored
-				EPL_NMTMNU_SET_FLAGS_TIMERARG_STATE_MON
-				    (pNodeInfo, uiNodeId_p, TimerArg);
-
-				// set NMT state change flag
-				pNodeInfo->m_wFlags |=
-				    EPL_NMTMNU_NODE_FLAG_NMT_CMD_ISSUED;
-			}
-
-			Ret =
-			    EplTimeruModifyTimerMs(&pNodeInfo->
-						   m_TimerHdlStatReq,
-						   EplNmtMnuInstance_g.
-						   m_ulStatusRequestDelay,
-						   TimerArg);
-
-			// finish processing, because NmtState_p is the expected and not the current state
-			goto Exit;
-		}
-
-	default:
-		{
-			break;
-		}
-	}
-
-	// check if network is ready to change local NMT state and this was not done before
-	if ((EplNmtMnuInstance_g.m_wFlags & (EPL_NMTMNU_FLAG_HALTED | EPL_NMTMNU_FLAG_APP_INFORMED)) == 0) {	// boot process is not halted
-		switch (NmtState) {
-		case kEplNmtMsPreOperational1:
-			{
-				if ((EplNmtMnuInstance_g.m_uiSignalSlaveCount ==
-				     0)
-				    && (EplNmtMnuInstance_g.m_uiMandatorySlaveCount == 0)) {	// all optional CNs scanned once and all mandatory CNs configured successfully
-					EplNmtMnuInstance_g.m_wFlags |=
-					    EPL_NMTMNU_FLAG_APP_INFORMED;
-					// inform application
-					Ret =
-					    EplNmtMnuInstance_g.
-					    m_pfnCbBootEvent
-					    (kEplNmtBootEventBootStep1Finish,
-					     NmtState, EPL_E_NO_ERROR);
-					if (Ret != kEplSuccessful) {
-						if (Ret == kEplReject) {
-							// wait for application
-							Ret = kEplSuccessful;
-						}
-						break;
-					}
-					// enter PreOp2
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventAllMandatoryCNIdent);
-				}
-				break;
-			}
-
-		case kEplNmtMsPreOperational2:
-			{
-				if ((EplNmtMnuInstance_g.m_uiSignalSlaveCount ==
-				     0)
-				    && (EplNmtMnuInstance_g.m_uiMandatorySlaveCount == 0)) {	// all optional CNs checked once for ReadyToOp and all mandatory CNs are ReadyToOp
-					EplNmtMnuInstance_g.m_wFlags |=
-					    EPL_NMTMNU_FLAG_APP_INFORMED;
-					// inform application
-					Ret =
-					    EplNmtMnuInstance_g.
-					    m_pfnCbBootEvent
-					    (kEplNmtBootEventBootStep2Finish,
-					     NmtState, EPL_E_NO_ERROR);
-					if (Ret != kEplSuccessful) {
-						if (Ret == kEplReject) {
-							// wait for application
-							Ret = kEplSuccessful;
-						}
-						break;
-					}
-					// enter ReadyToOp
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventEnterReadyToOperate);
-				}
-				break;
-			}
-
-		case kEplNmtMsReadyToOperate:
-			{
-				if ((EplNmtMnuInstance_g.m_uiSignalSlaveCount ==
-				     0)
-				    && (EplNmtMnuInstance_g.m_uiMandatorySlaveCount == 0)) {	// all CNs checked for errorless communication
-					EplNmtMnuInstance_g.m_wFlags |=
-					    EPL_NMTMNU_FLAG_APP_INFORMED;
-					// inform application
-					Ret =
-					    EplNmtMnuInstance_g.
-					    m_pfnCbBootEvent
-					    (kEplNmtBootEventCheckComFinish,
-					     NmtState, EPL_E_NO_ERROR);
-					if (Ret != kEplSuccessful) {
-						if (Ret == kEplReject) {
-							// wait for application
-							Ret = kEplSuccessful;
-						}
-						break;
-					}
-					// enter Operational
-					Ret =
-					    EplNmtuNmtEvent
-					    (kEplNmtEventEnterMsOperational);
-				}
-				break;
-			}
-
-		case kEplNmtMsOperational:
-			{
-				if ((EplNmtMnuInstance_g.m_uiSignalSlaveCount ==
-				     0)
-				    && (EplNmtMnuInstance_g.m_uiMandatorySlaveCount == 0)) {	// all optional CNs scanned once and all mandatory CNs are OPERATIONAL
-					EplNmtMnuInstance_g.m_wFlags |=
-					    EPL_NMTMNU_FLAG_APP_INFORMED;
-					// inform application
-					Ret =
-					    EplNmtMnuInstance_g.
-					    m_pfnCbBootEvent
-					    (kEplNmtBootEventOperational,
-					     NmtState, EPL_E_NO_ERROR);
-					if (Ret != kEplSuccessful) {
-						if (Ret == kEplReject) {
-							// ignore error code
-							Ret = kEplSuccessful;
-						}
-						break;
-					}
-				}
-				break;
-			}
-
-		default:
-			{
-				break;
-			}
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuCheckNmtState
-//
-// Description: checks the NMT state, i.e. evaluates it with object 0x1F8F
-//              NMT_MNNodeExpState_AU8 and updates object 0x1F8E
-//              NMT_MNNodeCurrState_AU8.
-//              It manipulates m_NodeState in internal node info structure.
-//
-// Parameters:  uiNodeId_p              = node ID
-//              NodeNmtState_p          = NMT state of CN
-//
-// Returns:     tEplKernel              = error code
-//                  kEplReject          = CN was in wrong state and has been reset
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuCheckNmtState(unsigned int uiNodeId_p,
-					 tEplNmtMnuNodeInfo * pNodeInfo_p,
-					 tEplNmtState NodeNmtState_p,
-					 u16 wErrorCode_p,
-					 tEplNmtState LocalNmtState_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplObdSize ObdSize;
-	u8 bNmtState;
-	u8 bNmtStatePrev;
-	tEplNmtState ExpNmtState;
-
-	ObdSize = 1;
-	// read object 0x1F8F NMT_MNNodeExpState_AU8
-	Ret = EplObduReadEntry(0x1F8F, uiNodeId_p, &bNmtState, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// compute expected NMT state
-	ExpNmtState = (tEplNmtState) (bNmtState | EPL_NMT_TYPE_CS);
-	// compute u8 of current NMT state
-	bNmtState = ((u8) NodeNmtState_p & 0xFF);
-
-	if (ExpNmtState == kEplNmtCsNotActive) {	// ignore the current state, because the CN shall be not active
-		Ret = kEplReject;
-		goto Exit;
-	} else if ((ExpNmtState == kEplNmtCsPreOperational2)
-		   && (NodeNmtState_p == kEplNmtCsReadyToOperate)) {	// CN switched to ReadyToOp
-		// delete timer for timeout handling
-		Ret = EplTimeruDeleteTimer(&pNodeInfo_p->m_TimerHdlLonger);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		pNodeInfo_p->m_NodeState = kEplNmtMnuNodeStateReadyToOp;
-
-		// update object 0x1F8F NMT_MNNodeExpState_AU8 to ReadyToOp
-		Ret = EplObduWriteEntry(0x1F8F, uiNodeId_p, &bNmtState, 1);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		if ((pNodeInfo_p->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN -> decrement counter
-			EplNmtMnuInstance_g.m_uiMandatorySlaveCount--;
-		}
-		if (LocalNmtState_p >= kEplNmtMsReadyToOperate) {	// start procedure CheckCommunication for this node
-			Ret = EplNmtMnuNodeCheckCom(uiNodeId_p, pNodeInfo_p);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-
-			if ((LocalNmtState_p == kEplNmtMsOperational)
-			    && (pNodeInfo_p->m_NodeState ==
-				kEplNmtMnuNodeStateComChecked)) {
-				EPL_NMTMNU_DBG_POST_TRACE_VALUE(0, uiNodeId_p,
-								(((NodeNmtState_p & 0xFF) << 8)
-								 |
-								 kEplNmtCmdStartNode));
-
-				// immediately start optional CN, because communication is always OK (e.g. async-only CN)
-				Ret =
-				    EplNmtMnuSendNmtCommand(uiNodeId_p,
-							    kEplNmtCmdStartNode);
-				if (Ret != kEplSuccessful) {
-					goto Exit;
-				}
-			}
-		}
-
-	} else if ((ExpNmtState == kEplNmtCsReadyToOperate)
-		   && (NodeNmtState_p == kEplNmtCsOperational)) {	// CN switched to OPERATIONAL
-		pNodeInfo_p->m_NodeState = kEplNmtMnuNodeStateOperational;
-
-		if ((pNodeInfo_p->m_dwNodeCfg & EPL_NODEASSIGN_MANDATORY_CN) != 0) {	// node is a mandatory CN -> decrement counter
-			EplNmtMnuInstance_g.m_uiMandatorySlaveCount--;
-		}
-
-	} else if ((ExpNmtState != NodeNmtState_p)
-		   && !((ExpNmtState == kEplNmtCsPreOperational1)
-			&& (NodeNmtState_p == kEplNmtCsPreOperational2))) {	// CN is not in expected NMT state (without the exceptions above)
-		u16 wbeErrorCode;
-
-		if ((pNodeInfo_p->
-		     m_wFlags & EPL_NMTMNU_NODE_FLAG_NOT_SCANNED) != 0) {
-			// decrement only signal slave count if checked once
-			EplNmtMnuInstance_g.m_uiSignalSlaveCount--;
-			pNodeInfo_p->m_wFlags &=
-			    ~EPL_NMTMNU_NODE_FLAG_NOT_SCANNED;
-		}
-
-		if (pNodeInfo_p->m_NodeState == kEplNmtMnuNodeStateUnknown) {	// CN is already in state unknown, which means that it got
-			// NMT reset command earlier
-			goto Exit;
-		}
-		// -> CN is in wrong NMT state
-		pNodeInfo_p->m_NodeState = kEplNmtMnuNodeStateUnknown;
-
-		if (wErrorCode_p == 0) {	// assume wrong NMT state error
-			if ((pNodeInfo_p->m_wFlags & EPL_NMTMNU_NODE_FLAG_NMT_CMD_ISSUED) != 0) {	// NMT command has been just issued;
-				// ignore wrong NMT state until timer expires;
-				// other errors like LOSS_PRES_TH are still processed
-				goto Exit;
-			}
-
-			wErrorCode_p = EPL_E_NMT_WRONG_STATE;
-		}
-
-		BENCHMARK_MOD_07_TOGGLE(9);
-
-		// $$$ start ERROR_TREATMENT and inform application
-		Ret = EplNmtMnuInstance_g.m_pfnCbNodeEvent(uiNodeId_p,
-							   kEplNmtNodeEventError,
-							   NodeNmtState_p,
-							   wErrorCode_p,
-							   (pNodeInfo_p->
-							    m_dwNodeCfg &
-							    EPL_NODEASSIGN_MANDATORY_CN)
-							   != 0);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-
-		EPL_NMTMNU_DBG_POST_TRACE_VALUE(0,
-						uiNodeId_p,
-						(((NodeNmtState_p & 0xFF) << 8)
-						 | kEplNmtCmdResetNode));
-
-		// reset CN
-		// store error code in NMT command data for diagnostic purpose
-		AmiSetWordToLe(&wbeErrorCode, wErrorCode_p);
-		Ret =
-		    EplNmtMnuSendNmtCommandEx(uiNodeId_p, kEplNmtCmdResetNode,
-					      &wbeErrorCode,
-					      sizeof(wbeErrorCode));
-		if (Ret == kEplSuccessful) {
-			Ret = kEplReject;
-		}
-
-		goto Exit;
-	}
-	// check if NMT_MNNodeCurrState_AU8 has to be changed
-	ObdSize = 1;
-	Ret = EplObduReadEntry(0x1F8E, uiNodeId_p, &bNmtStatePrev, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	if (bNmtState != bNmtStatePrev) {
-		// update object 0x1F8E NMT_MNNodeCurrState_AU8
-		Ret = EplObduWriteEntry(0x1F8E, uiNodeId_p, &bNmtState, 1);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		Ret = EplNmtMnuInstance_g.m_pfnCbNodeEvent(uiNodeId_p,
-							   kEplNmtNodeEventNmtState,
-							   NodeNmtState_p,
-							   wErrorCode_p,
-							   (pNodeInfo_p->
-							    m_dwNodeCfg &
-							    EPL_NODEASSIGN_MANDATORY_CN)
-							   != 0);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtMnuReset
-//
-// Description: reset internal structures, e.g. timers
-//
-// Parameters:  void
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplNmtMnuReset(void)
-{
-	tEplKernel Ret;
-	int iIndex;
-
-	Ret = EplTimeruDeleteTimer(&EplNmtMnuInstance_g.m_TimerHdlNmtState);
-
-	for (iIndex = 1; iIndex <= tabentries(EplNmtMnuInstance_g.m_aNodeInfo);
-	     iIndex++) {
-		// delete timer handles
-		Ret =
-		    EplTimeruDeleteTimer(&EPL_NMTMNU_GET_NODEINFO(iIndex)->
-					 m_TimerHdlStatReq);
-		Ret =
-		    EplTimeruDeleteTimer(&EPL_NMTMNU_GET_NODEINFO(iIndex)->
-					 m_TimerHdlLonger);
-	}
-
-	return Ret;
-}
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplNmtk.c b/drivers/staging/epl/EplNmtk.c
deleted file mode 100644
index 609d5c0..0000000
--- a/drivers/staging/epl/EplNmtk.c
+++ /dev/null
@@ -1,1840 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for NMT-Kernelspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtk.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.12 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "kernel/EplNmtk.h"
-#include "kernel/EplTimerk.h"
-
-#include "kernel/EplDllk.h"	// for EplDllkProcess()
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-#define EPL_NMTK_DBG_POST_TRACE_VALUE(NmtEvent_p, OldNmtState_p, NewNmtState_p) \
-    TGT_DBG_POST_TRACE_VALUE((kEplEventSinkNmtk << 28) | (NmtEvent_p << 16) \
-                             | ((OldNmtState_p & 0xFF) << 8) \
-                             | (NewNmtState_p & 0xFF))
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-// struct for instance table
-INSTANCE_TYPE_BEGIN EPL_MCO_DECL_INSTANCE_MEMBER()
-
-STATIC volatile tEplNmtState m_NmtState;
-STATIC volatile BOOL m_fEnableReadyToOperate;
-STATIC volatile BOOL m_fAppReadyToOperate;
-STATIC volatile BOOL m_fTimerMsPreOp2;
-STATIC volatile BOOL m_fAllMandatoryCNIdent;
-STATIC volatile BOOL m_fFrozen;
-
-INSTANCE_TYPE_END
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-// This macro replace the unspecific pointer to an instance through
-// the modul specific type for the local instance table. This macro
-// must defined in each modul.
-//#define tEplPtrInstance             tEplInstanceInfo*
-EPL_MCO_DECL_INSTANCE_VAR()
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-EPL_MCO_DEFINE_INSTANCE_FCT()
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <NMT_Kernel-Module>                                 */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: This module realize the NMT-State-Machine of the EPL-Stack
-//
-//
-/***************************************************************************/
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-//---------------------------------------------------------------------------
-//
-// Function:        EplNmtkInit
-//
-// Description: initializes the first instance
-//
-//
-//
-// Parameters:  EPL_MCO_DECL_PTR_INSTANCE_PTR = Instance pointer
-//              uiNodeId_p = Node Id of the lokal node
-//
-//
-// Returns:     tEplKernel  =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtkInit(EPL_MCO_DECL_PTR_INSTANCE_PTR)
-{
-	tEplKernel Ret;
-
-	Ret = EplNmtkAddInstance(EPL_MCO_PTR_INSTANCE_PTR);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplNmtkAddInstance
-//
-// Description: adds a new instance
-//
-//
-//
-// Parameters:  EPL_MCO_DECL_PTR_INSTANCE_PTR = Instance pointer
-//
-//
-// Returns:     tEplKernel  =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtkAddInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR)
-{
-	EPL_MCO_DECL_INSTANCE_PTR_LOCAL tEplKernel Ret;
-//tEplEvent               Event;
-//tEplEventNmtStateChange NmtStateChange;
-
-	// check if pointer to instance pointer valid
-	// get free instance and set the globale instance pointer
-	// set also the instance addr to parameterlist
-	EPL_MCO_CHECK_PTR_INSTANCE_PTR();
-	EPL_MCO_GET_FREE_INSTANCE_PTR();
-	EPL_MCO_SET_PTR_INSTANCE_PTR();
-
-	// sign instance as used
-	EPL_MCO_WRITE_INSTANCE_STATE(kStateUsed);
-
-	Ret = kEplSuccessful;
-
-	// initialize intern vaiables
-	// 2006/07/31 d.k.: set NMT-State to kEplNmtGsOff
-	EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtGsOff;
-	// set NMT-State to kEplNmtGsInitialising
-	//EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtGsInitialising;
-
-	// set flags to FALSE
-	EPL_MCO_GLB_VAR(m_fEnableReadyToOperate) = FALSE;
-	EPL_MCO_GLB_VAR(m_fAppReadyToOperate) = FALSE;
-	EPL_MCO_GLB_VAR(m_fTimerMsPreOp2) = FALSE;
-	EPL_MCO_GLB_VAR(m_fAllMandatoryCNIdent) = FALSE;
-	EPL_MCO_GLB_VAR(m_fFrozen) = FALSE;
-
-//    EPL_MCO_GLB_VAR(m_TimerHdl) = 0;
-
-	// inform higher layer about state change
-	// 2006/07/31 d.k.: The EPL API layer/application has to start NMT state
-	//                  machine via NmtEventSwReset after initialisation of
-	//                  all modules has been completed. DLL has to be initialised
-	//                  after NMTk because NMT state shall not be uninitialised
-	//                  at that time.
-/*    NmtStateChange.m_NewNmtState = EPL_MCO_GLB_VAR(m_NmtState);
-    NmtStateChange.m_NmtEvent = kEplNmtEventNoEvent;
-    Event.m_EventSink = kEplEventSinkNmtu;
-    Event.m_EventType = kEplEventTypeNmtStateChange;
-    EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-    Event.m_pArg = &NmtStateChange;
-    Event.m_uiSize = sizeof(NmtStateChange);
-    Ret = EplEventkPost(&Event);
-*/
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplNmtkDelInstance
-//
-// Description: delete instance
-//
-//
-//
-// Parameters:  EPL_MCO_DECL_PTR_INSTANCE_PTR = Instance pointer
-//
-//
-// Returns:     tEplKernel  =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if (EPL_USE_DELETEINST_FUNC != FALSE)
-tEplKernel EplNmtkDelInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR)
-{
-	tEplKernel Ret = kEplSuccessful;
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	// set NMT-State to kEplNmtGsOff
-	EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtGsOff;
-
-	// sign instance as unused
-	EPL_MCO_WRITE_INSTANCE_STATE(kStateUnused);
-
-	// delete timer
-//    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-
-	return Ret;
-}
-#endif // (EPL_USE_DELETEINST_FUNC != FALSE)
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplNmtkProcess
-//
-// Description: main process function
-//              -> process NMT-State-Maschine und read NMT-Events from Queue
-//
-//
-//
-// Parameters:  EPL_MCO_DECL_PTR_INSTANCE_PTR_ = Instance pointer
-//              pEvent_p    =   Epl-Event with NMT-event to process
-//
-//
-// Returns:     tEplKernel  =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtkProcess(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-	tEplNmtState OldNmtState;
-	tEplNmtEvent NmtEvent;
-	tEplEvent Event;
-	tEplEventNmtStateChange NmtStateChange;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	Ret = kEplSuccessful;
-
-	switch (pEvent_p->m_EventType) {
-	case kEplEventTypeNmtEvent:
-		{
-			NmtEvent = *((tEplNmtEvent *) pEvent_p->m_pArg);
-			break;
-		}
-
-	case kEplEventTypeTimer:
-		{
-			NmtEvent =
-			    (tEplNmtEvent) ((tEplTimerEventArg *) pEvent_p->
-					    m_pArg)->m_ulArg;
-			break;
-		}
-	default:
-		{
-			Ret = kEplNmtInvalidEvent;
-			goto Exit;
-		}
-	}
-
-	// save NMT-State
-	// needed for later comparison to
-	// inform hgher layer about state change
-	OldNmtState = EPL_MCO_GLB_VAR(m_NmtState);
-
-	// NMT-State-Maschine
-	switch (EPL_MCO_GLB_VAR(m_NmtState)) {
-		//-----------------------------------------------------------
-		// general part of the statemaschine
-
-		// first init of the hardware
-	case kEplNmtGsOff:
-		{
-			// leave this state only if higher layer says so
-			if (NmtEvent == kEplNmtEventSwReset) {	// new state kEplNmtGsInitialising
-				EPL_MCO_GLB_VAR(m_NmtState) =
-				    kEplNmtGsInitialising;
-			}
-			break;
-		}
-
-		// first init of the hardware
-	case kEplNmtGsInitialising:
-		{
-			// leave this state only if higher layer says so
-
-			// check events
-			switch (NmtEvent) {
-				// 2006/07/31 d.k.: react also on NMT reset commands in ResetApp state
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// new state kEplNmtGsResetApplication
-			case kEplNmtEventEnterResetApp:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-		// init of the manufacturer-specific profile area and the
-		// standardised device profile area
-	case kEplNmtGsResetApplication:
-		{
-			// check events
-			switch (NmtEvent) {
-				// 2006/07/31 d.k.: react also on NMT reset commands in ResetApp state
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// leave this state only if higher layer
-				// say so
-			case kEplNmtEventEnterResetCom:
-				{
-					// new state kEplNmtGsResetCommunication
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-		// init of the communication profile area
-	case kEplNmtGsResetCommunication:
-		{
-			// check events
-			switch (NmtEvent) {
-				// 2006/07/31 d.k.: react also on NMT reset commands in ResetComm state
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// leave this state only if higher layer
-				// say so
-			case kEplNmtEventEnterResetConfig:
-				{
-					// new state kEplNmtGsResetCommunication
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-		// build the configuration with infos from OD
-	case kEplNmtGsResetConfiguration:
-		{
-			// reset flags
-			EPL_MCO_GLB_VAR(m_fEnableReadyToOperate) = FALSE;
-			EPL_MCO_GLB_VAR(m_fAppReadyToOperate) = FALSE;
-			EPL_MCO_GLB_VAR(m_fFrozen) = FALSE;
-
-			// check events
-			switch (NmtEvent) {
-				// 2006/07/31 d.k.: react also on NMT reset commands in ResetConf state
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-			case kEplNmtEventResetCom:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// leave this state only if higher layer says so
-			case kEplNmtEventEnterCsNotActive:
-				{	// Node should be CN
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsNotActive;
-					break;
-
-				}
-
-			case kEplNmtEventEnterMsNotActive:
-				{	// Node should be CN
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) == 0)
-					// no MN functionality
-					// TODO: -create error E_NMT_BA1_NO_MN_SUPPORT
-					EPL_MCO_GLB_VAR(m_fFrozen) = TRUE;
-#else
-
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsNotActive;
-#endif
-					break;
-
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-		//-----------------------------------------------------------
-		// CN part of the statemaschine
-
-		// node liste for EPL-Frames and check timeout
-	case kEplNmtCsNotActive:
-		{
-
-			// check events
-			switch (NmtEvent) {
-				// 2006/07/31 d.k.: react also on NMT reset commands in NotActive state
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-//                    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-//                    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-//                    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-					break;
-				}
-
-				// NMT Command Reset Configuration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-//                    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-					break;
-				}
-
-				// see if SoA or SoC received
-				// k.t. 20.07.2006: only SoA forces change of state
-				// see EPL V2 DS 1.0.0 p.267
-				// case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// new state PRE_OPERATIONAL1
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-//                    Ret = EplTimerkDeleteTimer(&EPL_MCO_GLB_VAR(m_TimerHdl));
-					break;
-				}
-				// timeout for SoA and Soc
-			case kEplNmtEventTimerBasicEthernet:
-				{
-					// new state BASIC_ETHERNET
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsBasicEthernet;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}	// end of switch(NmtEvent)
-
-			break;
-		}
-
-		// node processes only async frames
-	case kEplNmtCsPreOperational1:
-		{
-
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command Reset Configuration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// NMT Command StopNode
-			case kEplNmtEventStopNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsStopped;
-					break;
-				}
-
-				// check if SoC received
-			case kEplNmtEventDllCeSoc:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational2;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-
-			break;
-		}
-
-		// node processes isochronous and asynchronous frames
-	case kEplNmtCsPreOperational2:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command Reset Configuration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// NMT Command StopNode
-			case kEplNmtEventStopNode:
-				{
-					// reset flags
-					EPL_MCO_GLB_VAR(m_fEnableReadyToOperate)
-					    = FALSE;
-					EPL_MCO_GLB_VAR(m_fAppReadyToOperate) =
-					    FALSE;
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsStopped;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					// reset flags
-					EPL_MCO_GLB_VAR(m_fEnableReadyToOperate)
-					    = FALSE;
-					EPL_MCO_GLB_VAR(m_fAppReadyToOperate) =
-					    FALSE;
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-					break;
-				}
-
-				// check if application is ready to operate
-			case kEplNmtEventEnterReadyToOperate:
-				{
-					// check if command NMTEnableReadyToOperate from MN was received
-					if (EPL_MCO_GLB_VAR(m_fEnableReadyToOperate) == TRUE) {	// reset flags
-						EPL_MCO_GLB_VAR
-						    (m_fEnableReadyToOperate) =
-						    FALSE;
-						EPL_MCO_GLB_VAR
-						    (m_fAppReadyToOperate) =
-						    FALSE;
-						// change state
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtCsReadyToOperate;
-					} else {	// set Flag
-						EPL_MCO_GLB_VAR
-						    (m_fAppReadyToOperate) =
-						    TRUE;
-					}
-					break;
-				}
-
-				// NMT Commando EnableReadyToOperate
-			case kEplNmtEventEnableReadyToOperate:
-				{
-					// check if application is ready
-					if (EPL_MCO_GLB_VAR(m_fAppReadyToOperate) == TRUE) {	// reset flags
-						EPL_MCO_GLB_VAR
-						    (m_fEnableReadyToOperate) =
-						    FALSE;
-						EPL_MCO_GLB_VAR
-						    (m_fAppReadyToOperate) =
-						    FALSE;
-						// change state
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtCsReadyToOperate;
-					} else {	// set Flag
-						EPL_MCO_GLB_VAR
-						    (m_fEnableReadyToOperate) =
-						    TRUE;
-					}
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		// node should be configured und application is ready
-	case kEplNmtCsReadyToOperate:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// NMT Command StopNode
-			case kEplNmtEventStopNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsStopped;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-					break;
-				}
-
-				// NMT Command StartNode
-			case kEplNmtEventStartNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsOperational;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		// normal work state
-	case kEplNmtCsOperational:
-		{
-
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// NMT Command StopNode
-			case kEplNmtEventStopNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsStopped;
-					break;
-				}
-
-				// NMT Command EnterPreOperational2
-			case kEplNmtEventEnterPreOperational2:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational2;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		// node stopped by MN
-		// -> only process asynchronous frames
-	case kEplNmtCsStopped:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// NMT Command EnterPreOperational2
-			case kEplNmtEventEnterPreOperational2:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational2;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		// no epl cycle
-		// -> normal ethernet communication
-	case kEplNmtCsBasicEthernet:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// error occured
-				// d.k.: how does this error occur? on CRC errors
-/*                case kEplNmtEventNmtCycleError:
-                {
-                    EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtCsPreOperational1;
-                    break;
-                }
-*/
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCePreq:
-			case kEplNmtEventDllCePres:
-			case kEplNmtEventDllCeSoa:
-				{	// Epl-Frame on net -> stop any communication
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtCsPreOperational1;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-
-			break;
-		}
-
-		//-----------------------------------------------------------
-		// MN part of the statemaschine
-
-		// MN listen to network
-		// -> if no EPL traffic go to next state
-	case kEplNmtMsNotActive:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) == 0)
-			// no MN functionality
-			// TODO: -create error E_NMT_BA1_NO_MN_SUPPORT
-			EPL_MCO_GLB_VAR(m_fFrozen) = TRUE;
-#else
-
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_fFrozen) = TRUE;
-					break;
-				}
-
-				// timeout event
-			case kEplNmtEventTimerBasicEthernet:
-				{
-					if (EPL_MCO_GLB_VAR(m_fFrozen) == FALSE) {	// new state BasicEthernet
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtMsBasicEthernet;
-					}
-					break;
-				}
-
-				// timeout event
-			case kEplNmtEventTimerMsPreOp1:
-				{
-					if (EPL_MCO_GLB_VAR(m_fFrozen) == FALSE) {	// new state PreOp1
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtMsPreOperational1;
-						EPL_MCO_GLB_VAR
-						    (m_fTimerMsPreOp2) = FALSE;
-						EPL_MCO_GLB_VAR
-						    (m_fAllMandatoryCNIdent) =
-						    FALSE;
-
-					}
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-
-#endif // ((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) == 0)
-
-			break;
-		}
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		// MN process reduces epl cycle
-	case kEplNmtMsPreOperational1:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// error occured
-				// d.k. MSPreOp1->CSPreOp1: nonsense -> keep state
-				/*
-				   case kEplNmtEventNmtCycleError:
-				   {
-				   EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtCsPreOperational1;
-				   break;
-				   }
-				 */
-
-			case kEplNmtEventAllMandatoryCNIdent:
-				{	// all mandatory CN identified
-					if (EPL_MCO_GLB_VAR(m_fTimerMsPreOp2) !=
-					    FALSE) {
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtMsPreOperational2;
-					} else {
-						EPL_MCO_GLB_VAR
-						    (m_fAllMandatoryCNIdent) =
-						    TRUE;
-					}
-					break;
-				}
-
-			case kEplNmtEventTimerMsPreOp2:
-				{	// residence time for PreOp1 is elapsed
-					if (EPL_MCO_GLB_VAR
-					    (m_fAllMandatoryCNIdent) != FALSE) {
-						EPL_MCO_GLB_VAR(m_NmtState) =
-						    kEplNmtMsPreOperational2;
-					} else {
-						EPL_MCO_GLB_VAR
-						    (m_fTimerMsPreOp2) = TRUE;
-					}
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		// MN process full epl cycle
-	case kEplNmtMsPreOperational2:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsPreOperational1;
-					break;
-				}
-
-			case kEplNmtEventEnterReadyToOperate:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsReadyToOperate;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-
-			break;
-		}
-
-		// all madatory nodes ready to operate
-		// -> MN process full epl cycle
-	case kEplNmtMsReadyToOperate:
-		{
-
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsPreOperational1;
-					break;
-				}
-
-			case kEplNmtEventEnterMsOperational:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsOperational;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-
-			break;
-		}
-
-		// normal eplcycle processing
-	case kEplNmtMsOperational:
-		{
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// error occured
-			case kEplNmtEventNmtCycleError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtMsPreOperational1;
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-
-		//  normal ethernet traffic
-	case kEplNmtMsBasicEthernet:
-		{
-
-			// check events
-			switch (NmtEvent) {
-				// NMT Command SwitchOff
-			case kEplNmtEventCriticalError:
-			case kEplNmtEventSwitchOff:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsOff;
-					break;
-				}
-
-				// NMT Command SwReset
-			case kEplNmtEventSwReset:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsInitialising;
-					break;
-				}
-
-				// NMT Command ResetNode
-			case kEplNmtEventResetNode:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetApplication;
-					break;
-				}
-
-				// NMT Command ResetCommunication
-				// or internal Communication error
-			case kEplNmtEventResetCom:
-			case kEplNmtEventInternComError:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// NMT Command ResetConfiguration
-			case kEplNmtEventResetConfig:
-				{
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetConfiguration;
-					break;
-				}
-
-				// EPL frames received
-			case kEplNmtEventDllCeSoc:
-			case kEplNmtEventDllCeSoa:
-				{	// other MN in network
-					// $$$ d.k.: generate error history entry
-					EPL_MCO_GLB_VAR(m_NmtState) =
-					    kEplNmtGsResetCommunication;
-					break;
-				}
-
-				// error occured
-				// d.k. BE->PreOp1 on cycle error? No
-/*                case kEplNmtEventNmtCycleError:
-                {
-                    EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtCsPreOperational1;
-                    break;
-                }
-*/
-			default:
-				{
-					break;
-				}
-
-			}	// end of switch(NmtEvent)
-			break;
-		}
-#endif //#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-	default:
-		{
-			//DEBUG_EPL_DBGLVL_NMTK_TRACE0(EPL_DBGLVL_NMT ,"Error in EplNmtProcess: Unknown NMT-State");
-			//EPL_MCO_GLB_VAR(m_NmtState) = kEplNmtGsResetApplication;
-			Ret = kEplNmtInvalidState;
-			goto Exit;
-		}
-
-	}			// end of switch(NmtEvent)
-
-	// inform higher layer about State-Change if needed
-	if (OldNmtState != EPL_MCO_GLB_VAR(m_NmtState)) {
-		EPL_NMTK_DBG_POST_TRACE_VALUE(NmtEvent, OldNmtState,
-					      EPL_MCO_GLB_VAR(m_NmtState));
-
-		// d.k.: memorize NMT state before posting any events
-		NmtStateChange.m_NewNmtState = EPL_MCO_GLB_VAR(m_NmtState);
-
-		// inform DLL
-		if ((OldNmtState > kEplNmtGsResetConfiguration)
-		    && (EPL_MCO_GLB_VAR(m_NmtState) <=
-			kEplNmtGsResetConfiguration)) {
-			// send DLL DEINIT
-			Event.m_EventSink = kEplEventSinkDllk;
-			Event.m_EventType = kEplEventTypeDllkDestroy;
-			EPL_MEMSET(&Event.m_NetTime, 0x00,
-				   sizeof(Event.m_NetTime));
-			Event.m_pArg = &OldNmtState;
-			Event.m_uiSize = sizeof(OldNmtState);
-			// d.k.: directly call DLLk process function, because
-			//       1. execution of process function is still synchonized and serialized,
-			//       2. it is the same as without event queues (i.e. well tested),
-			//       3. DLLk will get those necessary events even if event queue is full,
-			//       4. event queue is very inefficient
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplDllkProcess(&Event);
-#else
-			Ret = EplEventkPost(&Event);
-#endif
-		} else if ((OldNmtState <= kEplNmtGsResetConfiguration)
-			   && (EPL_MCO_GLB_VAR(m_NmtState) >
-			       kEplNmtGsResetConfiguration)) {
-			// send DLL INIT
-			Event.m_EventSink = kEplEventSinkDllk;
-			Event.m_EventType = kEplEventTypeDllkCreate;
-			EPL_MEMSET(&Event.m_NetTime, 0x00,
-				   sizeof(Event.m_NetTime));
-			Event.m_pArg = &NmtStateChange.m_NewNmtState;
-			Event.m_uiSize = sizeof(NmtStateChange.m_NewNmtState);
-			// d.k.: directly call DLLk process function, because
-			//       1. execution of process function is still synchonized and serialized,
-			//       2. it is the same as without event queues (i.e. well tested),
-			//       3. DLLk will get those necessary events even if event queue is full
-			//       4. event queue is very inefficient
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplDllkProcess(&Event);
-#else
-			Ret = EplEventkPost(&Event);
-#endif
-		} else
-		    if ((EPL_MCO_GLB_VAR(m_NmtState) == kEplNmtCsBasicEthernet)
-			|| (EPL_MCO_GLB_VAR(m_NmtState) ==
-			    kEplNmtMsBasicEthernet)) {
-			tEplDllAsyncReqPriority AsyncReqPriority;
-
-			// send DLL Fill Async Tx Buffer, because state BasicEthernet was entered
-			Event.m_EventSink = kEplEventSinkDllk;
-			Event.m_EventType = kEplEventTypeDllkFillTx;
-			EPL_MEMSET(&Event.m_NetTime, 0x00,
-				   sizeof(Event.m_NetTime));
-			AsyncReqPriority = kEplDllAsyncReqPrioGeneric;
-			Event.m_pArg = &AsyncReqPriority;
-			Event.m_uiSize = sizeof(AsyncReqPriority);
-			// d.k.: directly call DLLk process function, because
-			//       1. execution of process function is still synchonized and serialized,
-			//       2. it is the same as without event queues (i.e. well tested),
-			//       3. DLLk will get those necessary events even if event queue is full
-			//       4. event queue is very inefficient
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-			Ret = EplDllkProcess(&Event);
-#else
-			Ret = EplEventkPost(&Event);
-#endif
-		}
-		// inform higher layer about state change
-		NmtStateChange.m_NmtEvent = NmtEvent;
-		Event.m_EventSink = kEplEventSinkNmtu;
-		Event.m_EventType = kEplEventTypeNmtStateChange;
-		EPL_MEMSET(&Event.m_NetTime, 0x00, sizeof(Event.m_NetTime));
-		Event.m_pArg = &NmtStateChange;
-		Event.m_uiSize = sizeof(NmtStateChange);
-		Ret = EplEventkPost(&Event);
-		EPL_DBGLVL_NMTK_TRACE2
-		    ("EplNmtkProcess(NMT-Event = 0x%04X): New NMT-State = 0x%03X\n",
-		     NmtEvent, NmtStateChange.m_NewNmtState);
-
-	}
-
-      Exit:
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtkGetNmtState
-//
-// Description: return the actuell NMT-State and the bits
-//              to for MN- or CN-mode
-//
-//
-//
-// Parameters:  EPL_MCO_DECL_PTR_INSTANCE_PTR_ = Instancepointer
-//
-//
-// Returns:     tEplNmtState = NMT-State
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplNmtState EplNmtkGetNmtState(EPL_MCO_DECL_PTR_INSTANCE_PTR)
-{
-	tEplNmtState NmtState;
-
-	NmtState = EPL_MCO_GLB_VAR(m_NmtState);
-
-	return NmtState;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-EPL_MCO_DECL_INSTANCE_FCT()
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-// EOF
diff --git a/drivers/staging/epl/EplNmtkCal.c b/drivers/staging/epl/EplNmtkCal.c
deleted file mode 100644
index 4453c09..0000000
--- a/drivers/staging/epl/EplNmtkCal.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for communication abstraction layer of the
-                NMT-Kernel-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtkCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/16 -k.t.:   start of the implementation
-
-****************************************************************************/
-
-// TODO: init function needed to prepare EplNmtkGetNmtState for
-//       io-controll-call from EplNmtuCal-Modul
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-// EOF
diff --git a/drivers/staging/epl/EplNmtu.c b/drivers/staging/epl/EplNmtu.c
deleted file mode 100644
index 9ac2e8e..0000000
--- a/drivers/staging/epl/EplNmtu.c
+++ /dev/null
@@ -1,706 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for NMT-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/10 17:17:42 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "user/EplNmtu.h"
-#include "user/EplObdu.h"
-#include "user/EplTimeru.h"
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-#include "kernel/EplNmtk.h"
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplNmtuStateChangeCallback m_pfnNmtChangeCb;
-	tEplTimerHdl m_TimerHdl;
-
-} tEplNmtuInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplNmtuInstance EplNmtuInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplNmtuAddInstance();
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuAddInstance
-//
-// Description: init other instances of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	EplNmtuInstance_g.m_pfnNmtChangeCb = NULL;
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuDelInstance
-//
-// Description: delete instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	EplNmtuInstance_g.m_pfnNmtChangeCb = NULL;
-
-	// delete timer
-	Ret = EplTimeruDeleteTimer(&EplNmtuInstance_g.m_TimerHdl);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuNmtEvent
-//
-// Description: sends the NMT-Event to the NMT-State-Maschine
-//
-//
-//
-// Parameters:  NmtEvent_p  = NMT-Event to send
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuNmtEvent(tEplNmtEvent NmtEvent_p)
-{
-	tEplKernel Ret;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkNmtk;
-	Event.m_NetTime.m_dwNanoSec = 0;
-	Event.m_NetTime.m_dwSec = 0;
-	Event.m_EventType = kEplEventTypeNmtEvent;
-	Event.m_pArg = &NmtEvent_p;
-	Event.m_uiSize = sizeof(NmtEvent_p);
-
-	Ret = EplEventuPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuGetNmtState
-//
-// Description: returns the actuell NMT-State
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplNmtState  = NMT-State
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplNmtState EplNmtuGetNmtState(void)
-{
-	tEplNmtState NmtState;
-
-	// $$$ call function of communication abstraction layer
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-	NmtState = EplNmtkGetNmtState();
-#else
-	NmtState = 0;
-#endif
-
-	return NmtState;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuProcessEvent
-//
-// Description: processes events from event queue
-//
-//
-//
-// Parameters:  pEplEvent_p =   pointer to event
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuProcessEvent(tEplEvent *pEplEvent_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// process event
-	switch (pEplEvent_p->m_EventType) {
-		// state change of NMT-Module
-	case kEplEventTypeNmtStateChange:
-		{
-			tEplEventNmtStateChange *pNmtStateChange;
-
-			// delete timer
-			Ret =
-			    EplTimeruDeleteTimer(&EplNmtuInstance_g.m_TimerHdl);
-
-			pNmtStateChange =
-			    (tEplEventNmtStateChange *) pEplEvent_p->m_pArg;
-
-			// call cb-functions to inform higher layer
-			if (EplNmtuInstance_g.m_pfnNmtChangeCb != NULL) {
-				Ret =
-				    EplNmtuInstance_g.
-				    m_pfnNmtChangeCb(*pNmtStateChange);
-			}
-
-			if (Ret == kEplSuccessful) {	// everything is OK, so switch to next state if necessary
-				switch (pNmtStateChange->m_NewNmtState) {
-					// EPL stack is not running
-				case kEplNmtGsOff:
-					break;
-
-					// first init of the hardware
-				case kEplNmtGsInitialising:
-					{
-						Ret =
-						    EplNmtuNmtEvent
-						    (kEplNmtEventEnterResetApp);
-						break;
-					}
-
-					// init of the manufacturer-specific profile area and the
-					// standardised device profile area
-				case kEplNmtGsResetApplication:
-					{
-						Ret =
-						    EplNmtuNmtEvent
-						    (kEplNmtEventEnterResetCom);
-						break;
-					}
-
-					// init of the communication profile area
-				case kEplNmtGsResetCommunication:
-					{
-						Ret =
-						    EplNmtuNmtEvent
-						    (kEplNmtEventEnterResetConfig);
-						break;
-					}
-
-					// build the configuration with infos from OD
-				case kEplNmtGsResetConfiguration:
-					{
-						unsigned int uiNodeId;
-
-						// get node ID from OD
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) || (EPL_OBD_USE_KERNEL != FALSE)
-						uiNodeId =
-						    EplObduGetNodeId
-						    (EPL_MCO_PTR_INSTANCE_PTR);
-#else
-						uiNodeId = 0;
-#endif
-						//check node ID if not should be master or slave
-						if (uiNodeId == EPL_C_ADR_MN_DEF_NODE_ID) {	// node shall be MN
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-							Ret =
-							    EplNmtuNmtEvent
-							    (kEplNmtEventEnterMsNotActive);
-#else
-							TRACE0
-							    ("EplNmtuProcess(): no MN functionality implemented\n");
-#endif
-						} else {	// node shall be CN
-							Ret =
-							    EplNmtuNmtEvent
-							    (kEplNmtEventEnterCsNotActive);
-						}
-						break;
-					}
-
-					//-----------------------------------------------------------
-					// CN part of the state machine
-
-					// node listens for EPL-Frames and check timeout
-				case kEplNmtCsNotActive:
-					{
-						u32 dwBuffer;
-						tEplObdSize ObdSize;
-						tEplTimerArg TimerArg;
-
-						// create timer to switch automatically to BasicEthernet if no MN available in network
-
-						// read NMT_CNBasicEthernetTimerout_U32 from OD
-						ObdSize = sizeof(dwBuffer);
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) || (EPL_OBD_USE_KERNEL != FALSE)
-						Ret =
-						    EplObduReadEntry
-						    (EPL_MCO_PTR_INSTANCE_PTR_
-						     0x1F99, 0x00, &dwBuffer,
-						     &ObdSize);
-#else
-						Ret = kEplObdIndexNotExist;
-#endif
-						if (Ret != kEplSuccessful) {
-							break;
-						}
-						if (dwBuffer != 0) {	// BasicEthernet is enabled
-							// convert us into ms
-							dwBuffer =
-							    dwBuffer / 1000;
-							if (dwBuffer == 0) {	// timer was below one ms
-								// set one ms
-								dwBuffer = 1;
-							}
-							TimerArg.m_EventSink =
-							    kEplEventSinkNmtk;
-							TimerArg.m_ulArg =
-							    (unsigned long)
-							    kEplNmtEventTimerBasicEthernet;
-							Ret =
-							    EplTimeruModifyTimerMs
-							    (&EplNmtuInstance_g.
-							     m_TimerHdl,
-							     (unsigned long)
-							     dwBuffer,
-							     TimerArg);
-							// potential error is forwarded to event queue which generates error event
-						}
-						break;
-					}
-
-					// node processes only async frames
-				case kEplNmtCsPreOperational1:
-					{
-						break;
-					}
-
-					// node processes isochronous and asynchronous frames
-				case kEplNmtCsPreOperational2:
-					{
-						Ret =
-						    EplNmtuNmtEvent
-						    (kEplNmtEventEnterReadyToOperate);
-						break;
-					}
-
-					// node should be configured und application is ready
-				case kEplNmtCsReadyToOperate:
-					{
-						break;
-					}
-
-					// normal work state
-				case kEplNmtCsOperational:
-					{
-						break;
-					}
-
-					// node stopped by MN
-					// -> only process asynchronous frames
-				case kEplNmtCsStopped:
-					{
-						break;
-					}
-
-					// no EPL cycle
-					// -> normal ethernet communication
-				case kEplNmtCsBasicEthernet:
-					{
-						break;
-					}
-
-					//-----------------------------------------------------------
-					// MN part of the state machine
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-					// node listens for EPL-Frames and check timeout
-				case kEplNmtMsNotActive:
-					{
-						u32 dwBuffer;
-						tEplObdSize ObdSize;
-						tEplTimerArg TimerArg;
-
-						// create timer to switch automatically to BasicEthernet/PreOp1 if no other MN active in network
-
-						// check NMT_StartUp_U32.Bit13
-						// read NMT_StartUp_U32 from OD
-						ObdSize = sizeof(dwBuffer);
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) || (EPL_OBD_USE_KERNEL != FALSE)
-						Ret =
-						    EplObduReadEntry
-						    (EPL_MCO_PTR_INSTANCE_PTR_
-						     0x1F80, 0x00, &dwBuffer,
-						     &ObdSize);
-#else
-						Ret = kEplObdIndexNotExist;
-#endif
-						if (Ret != kEplSuccessful) {
-							break;
-						}
-
-						if ((dwBuffer & EPL_NMTST_BASICETHERNET) == 0) {	// NMT_StartUp_U32.Bit13 == 0
-							// new state PreOperational1
-							TimerArg.m_ulArg =
-							    (unsigned long)
-							    kEplNmtEventTimerMsPreOp1;
-						} else {	// NMT_StartUp_U32.Bit13 == 1
-							// new state BasicEthernet
-							TimerArg.m_ulArg =
-							    (unsigned long)
-							    kEplNmtEventTimerBasicEthernet;
-						}
-
-						// read NMT_BootTime_REC.MNWaitNotAct_U32 from OD
-						ObdSize = sizeof(dwBuffer);
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) || (EPL_OBD_USE_KERNEL != FALSE)
-						Ret =
-						    EplObduReadEntry
-						    (EPL_MCO_PTR_INSTANCE_PTR_
-						     0x1F89, 0x01, &dwBuffer,
-						     &ObdSize);
-#else
-						Ret = kEplObdIndexNotExist;
-#endif
-						if (Ret != kEplSuccessful) {
-							break;
-						}
-						// convert us into ms
-						dwBuffer = dwBuffer / 1000;
-						if (dwBuffer == 0) {	// timer was below one ms
-							// set one ms
-							dwBuffer = 1;
-						}
-						TimerArg.m_EventSink =
-						    kEplEventSinkNmtk;
-						Ret =
-						    EplTimeruModifyTimerMs
-						    (&EplNmtuInstance_g.
-						     m_TimerHdl,
-						     (unsigned long)dwBuffer,
-						     TimerArg);
-						// potential error is forwarded to event queue which generates error event
-						break;
-					}
-
-					// node processes only async frames
-				case kEplNmtMsPreOperational1:
-					{
-						u32 dwBuffer = 0;
-						tEplObdSize ObdSize;
-						tEplTimerArg TimerArg;
-
-						// create timer to switch automatically to PreOp2 if MN identified all mandatory CNs
-
-						// read NMT_BootTime_REC.MNWaitPreOp1_U32 from OD
-						ObdSize = sizeof(dwBuffer);
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) || (EPL_OBD_USE_KERNEL != FALSE)
-						Ret =
-						    EplObduReadEntry
-						    (EPL_MCO_PTR_INSTANCE_PTR_
-						     0x1F89, 0x03, &dwBuffer,
-						     &ObdSize);
-						if (Ret != kEplSuccessful) {
-							// ignore error, because this timeout is optional
-							dwBuffer = 0;
-						}
-#endif
-						if (dwBuffer == 0) {	// delay is deactivated
-							// immediately post timer event
-							Ret =
-							    EplNmtuNmtEvent
-							    (kEplNmtEventTimerMsPreOp2);
-							break;
-						}
-						// convert us into ms
-						dwBuffer = dwBuffer / 1000;
-						if (dwBuffer == 0) {	// timer was below one ms
-							// set one ms
-							dwBuffer = 1;
-						}
-						TimerArg.m_EventSink =
-						    kEplEventSinkNmtk;
-						TimerArg.m_ulArg =
-						    (unsigned long)
-						    kEplNmtEventTimerMsPreOp2;
-						Ret =
-						    EplTimeruModifyTimerMs
-						    (&EplNmtuInstance_g.
-						     m_TimerHdl,
-						     (unsigned long)dwBuffer,
-						     TimerArg);
-						// potential error is forwarded to event queue which generates error event
-						break;
-					}
-
-					// node processes isochronous and asynchronous frames
-				case kEplNmtMsPreOperational2:
-					{
-						break;
-					}
-
-					// node should be configured und application is ready
-				case kEplNmtMsReadyToOperate:
-					{
-						break;
-					}
-
-					// normal work state
-				case kEplNmtMsOperational:
-					{
-						break;
-					}
-
-					// no EPL cycle
-					// -> normal ethernet communication
-				case kEplNmtMsBasicEthernet:
-					{
-						break;
-					}
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-				default:
-					{
-						TRACE1
-						    ("EplNmtuProcess(): unhandled NMT state 0x%X\n",
-						     pNmtStateChange->
-						     m_NewNmtState);
-					}
-				}
-			} else if (Ret == kEplReject) {	// application wants to change NMT state itself
-				// it's OK
-				Ret = kEplSuccessful;
-			}
-
-			EPL_DBGLVL_NMTU_TRACE0
-			    ("EplNmtuProcessEvent(): NMT-State-Maschine announce change of NMT State\n");
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplNmtInvalidEvent;
-		}
-
-	}
-
-//Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtuRegisterStateChangeCb
-//
-// Description: register Callback-function go get informed about a
-//              NMT-Change-State-Event
-//
-//
-//
-// Parameters:  pfnEplNmtStateChangeCb_p = functionpointer
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplNmtuRegisterStateChangeCb(tEplNmtuStateChangeCallback pfnEplNmtStateChangeCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// save callback-function in modul global var
-	EplNmtuInstance_g.m_pfnNmtChangeCb = pfnEplNmtStateChangeCb_p;
-
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplNmtuCal.c b/drivers/staging/epl/EplNmtuCal.c
deleted file mode 100644
index 92164c5..0000000
--- a/drivers/staging/epl/EplNmtuCal.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for communication abstraction layer of the
-                NMT-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtuCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/16 -k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplNmtuCal.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplNmtkCalGetNmtState
-//
-// Description: return current NMT-State
-//              -> encapsulate access to kernelspace
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplNmtState = current NMT-State
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplNmtState EplNmtkCalGetNmtState(void)
-{
-	tEplNmtState NmtState;
-	// for test direkt call for EplNmtkGetNmtState()
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-	NmtState = EplNmtkGetNmtState();
-#else
-	NmtState = 0;
-#endif
-	return NmtState;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-// EOF
diff --git a/drivers/staging/epl/EplObd.c b/drivers/staging/epl/EplObd.c
deleted file mode 100644
index 1e46323..0000000
--- a/drivers/staging/epl/EplObd.c
+++ /dev/null
@@ -1,3192 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for api function of EplOBD-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObd.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.12 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Microsoft VC7
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/02 k.t.:   start of the implementation, version 1.00
-		     ->based on CANopen OBD-Modul
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "kernel/EplObdk.h"	// function prototyps of the EplOBD-Modul
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// float definitions and macros
-#define _SHIFTED_EXPONENT_MASK_SP   0xff
-#define _BIAS_SP                    126
-#define T_SP                        23
-#define EXPONENT_DENORM_SP          (-_BIAS_SP)
-#define BASE_TO_THE_T_SP            ((float) 8388608.0)
-#define GET_EXPONENT_SP(x)          ((((x) >> T_SP) & _SHIFTED_EXPONENT_MASK_SP) - _BIAS_SP)
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-// struct for instance table
-INSTANCE_TYPE_BEGIN EPL_MCO_DECL_INSTANCE_MEMBER()
-
-STATIC tEplObdInitParam m_ObdInitParam;
-STATIC tEplObdStoreLoadObjCallback m_fpStoreLoadObjCallback;
-
-INSTANCE_TYPE_END
-// decomposition of float
-typedef union {
-	tEplObdReal32 m_flRealPart;
-	int m_nIntegerPart;
-
-} tEplObdRealParts;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-// This macro replace the unspecific pointer to an instance through
-// the modul specific type for the local instance table. This macro
-// must defined in each modul.
-//#define tEplPtrInstance             tEplInstanceInfo *
-
-EPL_MCO_DECL_INSTANCE_VAR()
-
-u8 abEplObdTrashObject_g[8];
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-EPL_MCO_DEFINE_INSTANCE_FCT()
-
-static tEplKernel EplObdCallObjectCallback(EPL_MCO_DECL_INSTANCE_PTR_
-					   tEplObdCallback fpCallback_p,
-					   tEplObdCbParam *pCbParam_p);
-
-static tEplObdSize EplObdGetDataSizeIntern(tEplObdSubEntryPtr pSubIndexEntry_p);
-
-static tEplObdSize EplObdGetStrLen(void *pObjData_p,
-				   tEplObdSize ObjLen_p, tEplObdType ObjType_p);
-
-#if (EPL_OBD_CHECK_OBJECT_RANGE != FALSE)
-static tEplKernel EplObdCheckObjectRange(tEplObdSubEntryPtr pSubindexEntry_p,
-					 void *pData_p);
-#endif
-
-static tEplKernel EplObdGetVarEntry(tEplObdSubEntryPtr pSubindexEntry_p,
-				    tEplObdVarEntry **ppVarEntry_p);
-
-static tEplKernel EplObdGetEntry(EPL_MCO_DECL_INSTANCE_PTR_
-				 unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 tEplObdEntryPtr * ppObdEntry_p,
-				 tEplObdSubEntryPtr * ppObdSubEntry_p);
-
-static tEplObdSize EplObdGetObjectSize(tEplObdSubEntryPtr pSubIndexEntry_p);
-
-static tEplKernel EplObdGetIndexIntern(tEplObdInitParam *pInitParam_p,
-				       unsigned int uiIndex_p,
-				       tEplObdEntryPtr * ppObdEntry_p);
-
-static tEplKernel EplObdGetSubindexIntern(tEplObdEntryPtr pObdEntry_p,
-					  unsigned int uiSubIndex_p,
-					  tEplObdSubEntryPtr * ppObdSubEntry_p);
-
-static tEplKernel EplObdAccessOdPartIntern(EPL_MCO_DECL_INSTANCE_PTR_
-					   tEplObdPart CurrentOdPart_p,
-					   tEplObdEntryPtr pObdEnty_p,
-					   tEplObdDir Direction_p);
-
-static void *EplObdGetObjectDefaultPtr(tEplObdSubEntryPtr pSubIndexEntry_p);
-static void *EplObdGetObjectCurrentPtr(tEplObdSubEntryPtr pSubIndexEntry_p);
-
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-
-static tEplKernel EplObdCallStoreCallback(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdCbStoreParam *pCbStoreParam_p);
-
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-
-static void EplObdCopyObjectData(void *pDstData_p,
-				 void *pSrcData_p,
-				 tEplObdSize ObjSize_p, tEplObdType ObjType_p);
-
-void *EplObdGetObjectDataPtrIntern(tEplObdSubEntryPtr pSubindexEntry_p);
-
-static tEplKernel EplObdIsNumericalIntern(tEplObdSubEntryPtr pObdSubEntry_p,
-					  BOOL * pfEntryNumerical_p);
-
-static tEplKernel EplObdWriteEntryPre(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				      unsigned int uiSubIndex_p,
-				      void *pSrcData_p,
-				      void **ppDstData_p,
-				      tEplObdSize Size_p,
-				      tEplObdEntryPtr *ppObdEntry_p,
-				      tEplObdSubEntryPtr *ppSubEntry_p,
-				      tEplObdCbParam *pCbParam_p,
-				      tEplObdSize *pObdSize_p);
-
-static tEplKernel EplObdWriteEntryPost(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pObdEntry_p,
-				       tEplObdSubEntryPtr pSubEntry_p,
-				       tEplObdCbParam *pCbParam_p,
-				       void *pSrcData_p,
-				       void *pDstData_p,
-				       tEplObdSize ObdSize_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdInit()
-//
-// Description: initializes the first instance
-//
-// Parameters:  pInitParam_p    = init parameter
-//
-// Return:      tEplKernel      =   errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdInit(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p)
-{
-
-	tEplKernel Ret;
-	EPL_MCO_DELETE_INSTANCE_TABLE();
-
-	if (pInitParam_p == NULL) {
-		Ret = kEplSuccessful;
-		goto Exit;
-	}
-
-	Ret = EplObdAddInstance(EPL_MCO_PTR_INSTANCE_PTR_ pInitParam_p);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdAddInstance()
-//
-// Description: adds a new instance
-//
-// Parameters:  pInitParam_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdAddInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p)
-{
-
-	EPL_MCO_DECL_INSTANCE_PTR_LOCAL tEplKernel Ret;
-
-	// check if pointer to instance pointer valid
-	// get free instance and set the globale instance pointer
-	// set also the instance addr to parameterlist
-	EPL_MCO_CHECK_PTR_INSTANCE_PTR();
-	EPL_MCO_GET_FREE_INSTANCE_PTR();
-	EPL_MCO_SET_PTR_INSTANCE_PTR();
-
-	// save init parameters
-	EPL_MEMCPY(&EPL_MCO_GLB_VAR(m_ObdInitParam), pInitParam_p,
-		   sizeof(tEplObdInitParam));
-
-	// clear callback function for command LOAD and STORE
-	EPL_MCO_GLB_VAR(m_fpStoreLoadObjCallback) = NULL;
-
-	// sign instance as used
-	EPL_MCO_WRITE_INSTANCE_STATE(kStateUsed);
-
-	// initialize object dictionary
-	// so all all VarEntries will be initialized to trash object and default values will be set to current data
-	Ret = EplObdAccessOdPart(EPL_MCO_INSTANCE_PTR_
-				 kEplObdPartAll, kEplObdDirInit);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdDeleteInstance()
-//
-// Description: delete instance
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if (EPL_USE_DELETEINST_FUNC != FALSE)
-tEplKernel EplObdDeleteInstance(EPL_MCO_DECL_INSTANCE_PTR)
-{
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	// sign instance as unused
-	EPL_MCO_WRITE_INSTANCE_STATE(kStateUnused);
-
-	return kEplSuccessful;
-
-}
-#endif // (EPL_USE_DELETEINST_FUNC != FALSE)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdWriteEntry()
-//
-// Description: Function writes data to an OBD entry. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdWriteEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			    unsigned int uiSubIndex_p,
-			    void *pSrcData_p, tEplObdSize Size_p)
-{
-
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pSubEntry;
-	tEplObdCbParam CbParam;
-	void *pDstData;
-	tEplObdSize ObdSize;
-
-	Ret = EplObdWriteEntryPre(EPL_MCO_INSTANCE_PTR_
-				  uiIndex_p,
-				  uiSubIndex_p,
-				  pSrcData_p,
-				  &pDstData,
-				  Size_p,
-				  &pObdEntry, &pSubEntry, &CbParam, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret = EplObdWriteEntryPost(EPL_MCO_INSTANCE_PTR_
-				   pObdEntry,
-				   pSubEntry,
-				   &CbParam, pSrcData_p, pDstData, ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdReadEntry()
-//
-// Description: The function reads an object entry. The application
-//              can always read the data even if attrib kEplObdAccRead
-//              is not set. The attrib is only checked up for SDO transfer.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       = Index oof the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdReadEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			   unsigned int uiSubIndex_p,
-			   void *pDstData_p, tEplObdSize *pSize_p)
-{
-
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pSubEntry;
-	tEplObdCbParam CbParam;
-	void *pSrcData;
-	tEplObdSize ObdSize;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	ASSERT(pDstData_p != NULL);
-	ASSERT(pSize_p != NULL);
-
-	// get address of index and subindex entry
-	Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_
-			     uiIndex_p, uiSubIndex_p, &pObdEntry, &pSubEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get pointer to object data
-	pSrcData = EplObdGetObjectDataPtrIntern(pSubEntry);
-
-	// check source pointer
-	if (pSrcData == NULL) {
-		Ret = kEplObdReadViolation;
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// address of source data to structure of callback parameters
-	// so callback function can change this data before reading
-	CbParam.m_uiIndex = uiIndex_p;
-	CbParam.m_uiSubIndex = uiSubIndex_p;
-	CbParam.m_pArg = pSrcData;
-	CbParam.m_ObdEvent = kEplObdEvPreRead;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, &CbParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get size of data and check if application has reserved enough memory
-	ObdSize = EplObdGetDataSizeIntern(pSubEntry);
-	// check if offset given and calc correct number of bytes to read
-	if (*pSize_p < ObdSize) {
-		Ret = kEplObdValueLengthError;
-		goto Exit;
-	}
-	// read value from object
-	EPL_MEMCPY(pDstData_p, pSrcData, ObdSize);
-	*pSize_p = ObdSize;
-
-	// write address of destination data to structure of callback parameters
-	// so callback function can change this data after reading
-	CbParam.m_pArg = pDstData_p;
-	CbParam.m_ObdEvent = kEplObdEvPostRead;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, &CbParam);
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdAccessOdPart()
-//
-// Description: restores default values of one part of OD
-//
-// Parameters:  ObdPart_p
-//              Direction_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdAccessOdPart(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdPart ObdPart_p,
-			      tEplObdDir Direction_p)
-{
-
-	tEplKernel Ret = kEplSuccessful;
-	BOOL fPartFount;
-	tEplObdEntryPtr pObdEntry;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	//  part always has to be unequal to NULL
-	pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pPart);
-	ASSERTMSG(pObdEntry != NULL,
-		  "EplObdAccessOdPart(): no  OD part is defined!\n");
-
-	// if ObdPart_p is not valid fPartFound keeps FALSE and function returns kEplObdIllegalPart
-	fPartFount = FALSE;
-
-	// access to  part
-	if ((ObdPart_p & kEplObdPartGen) != 0) {
-		fPartFount = TRUE;
-
-		Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_
-					       kEplObdPartGen, pObdEntry,
-					       Direction_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-	// access to manufacturer part
-	pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pManufacturerPart);
-
-	if (((ObdPart_p & kEplObdPartMan) != 0) && (pObdEntry != NULL)) {
-		fPartFount = TRUE;
-
-		Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_
-					       kEplObdPartMan, pObdEntry,
-					       Direction_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-	// access to device part
-	pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pDevicePart);
-
-	if (((ObdPart_p & kEplObdPartDev) != 0) && (pObdEntry != NULL)) {
-		fPartFount = TRUE;
-
-		Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_
-					       kEplObdPartDev, pObdEntry,
-					       Direction_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-	{
-		// access to user part
-		pObdEntry = EPL_MCO_GLB_VAR(m_ObdInitParam.m_pUserPart);
-
-		if (((ObdPart_p & kEplObdPartUsr) != 0) && (pObdEntry != NULL)) {
-			fPartFount = TRUE;
-
-			Ret = EplObdAccessOdPartIntern(EPL_MCO_INSTANCE_PTR_
-						       kEplObdPartUsr,
-						       pObdEntry, Direction_p);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-		}
-	}
-#endif
-
-	// no access to an OD part was done? illegal OD part was specified!
-	if (fPartFount == FALSE) {
-		Ret = kEplObdIllegalPart;
-	}
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdDefineVar()
-//
-// Description: defines a variable in OD
-//
-// Parameters:  pEplVarParam_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdDefineVar(EPL_MCO_DECL_INSTANCE_PTR_ tEplVarParam *pVarParam_p)
-{
-
-	tEplKernel Ret;
-	tEplObdVarEntry *pVarEntry;
-	tEplVarParamValid VarValid;
-	tEplObdSubEntryPtr pSubindexEntry;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	ASSERT(pVarParam_p != NULL);	// is not allowed to be NULL
-
-	// get address of subindex entry
-	Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_
-			     pVarParam_p->m_uiIndex,
-			     pVarParam_p->m_uiSubindex, NULL, &pSubindexEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get var entry
-	Ret = EplObdGetVarEntry(pSubindexEntry, &pVarEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	VarValid = pVarParam_p->m_ValidFlag;
-
-	// copy only this values, which valid flag is set
-	if ((VarValid & kVarValidSize) != 0) {
-		if (pSubindexEntry->m_Type != kEplObdTypDomain) {
-			tEplObdSize DataSize;
-
-			// check passed size parameter
-			DataSize = EplObdGetObjectSize(pSubindexEntry);
-			if (DataSize != pVarParam_p->m_Size) {	// size of variable does not match
-				Ret = kEplObdValueLengthError;
-				goto Exit;
-			}
-		} else {	// size can be set only for objects of type DOMAIN
-			pVarEntry->m_Size = pVarParam_p->m_Size;
-		}
-	}
-
-	if ((VarValid & kVarValidData) != 0) {
-		pVarEntry->m_pData = pVarParam_p->m_pData;
-	}
-/*
-    #if (EPL_PDO_USE_STATIC_MAPPING == FALSE)
-    {
-        if ((VarValid & kVarValidCallback) != 0)
-        {
-           pVarEntry->m_fpCallback = pVarParam_p->m_fpCallback;
-        }
-
-        if ((VarValid & kVarValidArg) != 0)
-        {
-           pVarEntry->m_pArg = pVarParam_p->m_pArg;
-        }
-    }
-    #endif
-*/
-	// Ret is already set to kEplSuccessful from ObdGetVarIntern()
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetObjectDataPtr()
-//
-// Description: It returnes the current data pointer. But if object is an
-//              constant object it returnes the default pointer.
-//
-// Parameters:  uiIndex_p    =   Index of the entry
-//              uiSubindex_p =   Subindex of the entry
-//
-// Return:      void *    = pointer to object data
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-void *EplObdGetObjectDataPtr(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			     unsigned int uiSubIndex_p)
-{
-	tEplKernel Ret;
-	void *pData;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pObdSubEntry;
-
-	// get pointer to index structure
-	Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam),
-				   uiIndex_p, &pObdEntry);
-	if (Ret != kEplSuccessful) {
-		pData = NULL;
-		goto Exit;
-	}
-	// get pointer to subindex structure
-	Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry);
-	if (Ret != kEplSuccessful) {
-		pData = NULL;
-		goto Exit;
-	}
-	// get Datapointer
-	pData = EplObdGetObjectDataPtrIntern(pObdSubEntry);
-
-      Exit:
-	return pData;
-
-}
-
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdRegisterUserOd()
-//
-// Description: function registers the user OD
-//
-// Parameters:  pUserOd_p   =pointer to user ODd
-//
-// Return:     tEplKernel = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdRegisterUserOd(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pUserOd_p)
-{
-
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	EPL_MCO_GLB_VAR(m_ObdInitParam.m_pUserPart) = pUserOd_p;
-
-	return kEplSuccessful;
-
-}
-
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdInitVarEntry()
-//
-// Description: function to initialize VarEntry dependened on object type
-//
-// Parameters:  pVarEntry_p = pointer to var entry structure
-//              Type_p      = object type
-//              ObdSize_p   = size of object data
-//
-// Returns:     none
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-void EplObdInitVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdVarEntry *pVarEntry_p,
-			tEplObdType Type_p, tEplObdSize ObdSize_p)
-{
-/*
-    #if (EPL_PDO_USE_STATIC_MAPPING == FALSE)
-    {
-        // reset pointer to VAR callback and argument
-        pVarEntry_p->m_fpCallback  = NULL;
-        pVarEntry_p->m_pArg = NULL;
-    }
-    #endif
-*/
-
-// 10-dec-2004 r.d.: this function will not be used for strings
-	if ((Type_p == kEplObdTypDomain))
-//         (bType_p == kEplObdTypVString) /* ||
-//         (bType_p == kEplObdTypOString) ||
-//         (bType_p == kEplObdTypUString)    */ )
-	{
-		// variables which are defined as DOMAIN or VSTRING should not point to
-		// trash object, because this trash object contains only 8 bytes. DOMAINS or
-		// STRINGS can be longer.
-		pVarEntry_p->m_pData = NULL;
-		pVarEntry_p->m_Size = 0;
-	} else {
-		// set address to variable data to trash object
-		// This prevents an access violation if user forgets to call EplObdDefineVar()
-		// for this variable but mappes it in a PDO.
-		pVarEntry_p->m_pData = &abEplObdTrashObject_g[0];
-		pVarEntry_p->m_Size = ObdSize_p;
-	}
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetDataSize()
-//
-// Description: function to initialize VarEntry dependened on object type
-//
-//              gets the data size of an object
-//              for string objects it returnes the string length
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer
-//              uiIndex_p   =   Index
-//              uiSubIndex_p=   Subindex
-//
-// Return:      tEplObdSize
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplObdSize EplObdGetDataSize(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			      unsigned int uiSubIndex_p)
-{
-	tEplKernel Ret;
-	tEplObdSize ObdSize;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pObdSubEntry;
-
-	// get pointer to index structure
-	Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam),
-				   uiIndex_p, &pObdEntry);
-	if (Ret != kEplSuccessful) {
-		ObdSize = 0;
-		goto Exit;
-	}
-	// get pointer to subindex structure
-	Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry);
-	if (Ret != kEplSuccessful) {
-		ObdSize = 0;
-		goto Exit;
-	}
-	// get size
-	ObdSize = EplObdGetDataSizeIntern(pObdSubEntry);
-      Exit:
-	return ObdSize;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetNodeId()
-//
-// Description: function returns nodeid from entry 0x1F93
-//
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR = Instancepointer
-//
-// Return:      unsigned int = Node Id
-//
-// State:
-//
-//---------------------------------------------------------------------------
-unsigned int EplObdGetNodeId(EPL_MCO_DECL_INSTANCE_PTR)
-{
-	tEplKernel Ret;
-	tEplObdSize ObdSize;
-	u8 bNodeId;
-
-	bNodeId = 0;
-	ObdSize = sizeof(bNodeId);
-	Ret = EplObdReadEntry(EPL_MCO_PTR_INSTANCE_PTR_
-			      EPL_OBD_NODE_ID_INDEX,
-			      EPL_OBD_NODE_ID_SUBINDEX, &bNodeId, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		bNodeId = EPL_C_ADR_INVALID;
-		goto Exit;
-	}
-
-      Exit:
-	return (unsigned int)bNodeId;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdSetNodeId()
-//
-// Description: function sets nodeid in entry 0x1F93
-//
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer
-//              uiNodeId_p  =   Node Id to set
-//              NodeIdType_p=   Type on which way the Node Id was set
-//
-// Return:      tEplKernel = Errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdSetNodeId(EPL_MCO_DECL_PTR_INSTANCE_PTR_ unsigned int uiNodeId_p,
-			   tEplObdNodeIdType NodeIdType_p)
-{
-	tEplKernel Ret;
-	tEplObdSize ObdSize;
-	u8 fHwBool;
-	u8 bNodeId;
-
-	// check Node Id
-	if (uiNodeId_p == EPL_C_ADR_INVALID) {
-		Ret = kEplInvalidNodeId;
-		goto Exit;
-	}
-	bNodeId = (u8) uiNodeId_p;
-	ObdSize = sizeof(u8);
-	// write NodeId to OD entry
-	Ret = EplObdWriteEntry(EPL_MCO_PTR_INSTANCE_PTR_
-			       EPL_OBD_NODE_ID_INDEX,
-			       EPL_OBD_NODE_ID_SUBINDEX, &bNodeId, ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// set HWBOOL-Flag in Subindex EPL_OBD_NODE_ID_HWBOOL_SUBINDEX
-	switch (NodeIdType_p) {
-		// type unknown
-	case kEplObdNodeIdUnknown:
-		{
-			fHwBool = OBD_FALSE;
-			break;
-		}
-
-	case kEplObdNodeIdSoftware:
-		{
-			fHwBool = OBD_FALSE;
-			break;
-		}
-
-	case kEplObdNodeIdHardware:
-		{
-			fHwBool = OBD_TRUE;
-			break;
-		}
-
-	default:
-		{
-			fHwBool = OBD_FALSE;
-		}
-
-	}			// end of switch (NodeIdType_p)
-
-	// write flag
-	ObdSize = sizeof(fHwBool);
-	Ret = EplObdWriteEntry(EPL_MCO_PTR_INSTANCE_PTR
-			       EPL_OBD_NODE_ID_INDEX,
-			       EPL_OBD_NODE_ID_HWBOOL_SUBINDEX,
-			       &fHwBool, ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdIsNumerical()
-//
-// Description: function checks if a entry is numerical or not
-//
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer
-//              uiIndex_p           = Index
-//              uiSubIndex_p        = Subindex
-//              pfEntryNumerical_p  = pointer to BOOL for returnvalue
-//                                  -> TRUE if entry a numerical value
-//                                  -> FALSE if entry not a numerical value
-//
-// Return:      tEplKernel = Errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdIsNumerical(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			     unsigned int uiSubIndex_p,
-			     BOOL *pfEntryNumerical_p)
-{
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pObdSubEntry;
-
-	// get pointer to index structure
-	Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam),
-				   uiIndex_p, &pObdEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get pointer to subindex structure
-	Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	Ret = EplObdIsNumericalIntern(pObdSubEntry, pfEntryNumerical_p);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdReadEntryToLe()
-//
-// Description: The function reads an object entry from the byteoder
-//              of the system to the little endian byteorder for numerical values.
-//              For other types a normal read will be processed. This is usefull for
-//              the PDO and SDO module. The application
-//              can always read the data even if attrib kEplObdAccRead
-//              is not set. The attrib is only checked up for SDO transfer.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       = Index of the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdReadEntryToLe(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       void *pDstData_p, tEplObdSize *pSize_p)
-{
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pSubEntry;
-	tEplObdCbParam CbParam;
-	void *pSrcData;
-	tEplObdSize ObdSize;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	ASSERT(pDstData_p != NULL);
-	ASSERT(pSize_p != NULL);
-
-	// get address of index and subindex entry
-	Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_
-			     uiIndex_p, uiSubIndex_p, &pObdEntry, &pSubEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get pointer to object data
-	pSrcData = EplObdGetObjectDataPtrIntern(pSubEntry);
-
-	// check source pointer
-	if (pSrcData == NULL) {
-		Ret = kEplObdReadViolation;
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// address of source data to structure of callback parameters
-	// so callback function can change this data before reading
-	CbParam.m_uiIndex = uiIndex_p;
-	CbParam.m_uiSubIndex = uiSubIndex_p;
-	CbParam.m_pArg = pSrcData;
-	CbParam.m_ObdEvent = kEplObdEvPreRead;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, &CbParam);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get size of data and check if application has reserved enough memory
-	ObdSize = EplObdGetDataSizeIntern(pSubEntry);
-	// check if offset given and calc correct number of bytes to read
-	if (*pSize_p < ObdSize) {
-		Ret = kEplObdValueLengthError;
-		goto Exit;
-	}
-	// check if numerical type
-	switch (pSubEntry->m_Type) {
-		//-----------------------------------------------
-		// types without ami
-	case kEplObdTypVString:
-	case kEplObdTypOString:
-	case kEplObdTypDomain:
-	default:
-		{
-			// read value from object
-			EPL_MEMCPY(pDstData_p, pSrcData, ObdSize);
-			break;
-		}
-
-		//-----------------------------------------------
-		// numerical type which needs ami-write
-		// 8 bit or smaller values
-	case kEplObdTypBool:
-	case kEplObdTypInt8:
-	case kEplObdTypUInt8:
-		{
-			AmiSetByteToLe(pDstData_p, *((u8 *) pSrcData));
-			break;
-		}
-
-		// 16 bit values
-	case kEplObdTypInt16:
-	case kEplObdTypUInt16:
-		{
-			AmiSetWordToLe(pDstData_p, *((u16 *) pSrcData));
-			break;
-		}
-
-		// 24 bit values
-	case kEplObdTypInt24:
-	case kEplObdTypUInt24:
-		{
-			AmiSetDword24ToLe(pDstData_p, *((u32 *) pSrcData));
-			break;
-		}
-
-		// 32 bit values
-	case kEplObdTypInt32:
-	case kEplObdTypUInt32:
-	case kEplObdTypReal32:
-		{
-			AmiSetDwordToLe(pDstData_p, *((u32 *) pSrcData));
-			break;
-		}
-
-		// 40 bit values
-	case kEplObdTypInt40:
-	case kEplObdTypUInt40:
-		{
-			AmiSetQword40ToLe(pDstData_p, *((u64 *) pSrcData));
-			break;
-		}
-
-		// 48 bit values
-	case kEplObdTypInt48:
-	case kEplObdTypUInt48:
-		{
-			AmiSetQword48ToLe(pDstData_p, *((u64 *) pSrcData));
-			break;
-		}
-
-		// 56 bit values
-	case kEplObdTypInt56:
-	case kEplObdTypUInt56:
-		{
-			AmiSetQword56ToLe(pDstData_p, *((u64 *) pSrcData));
-			break;
-		}
-
-		// 64 bit values
-	case kEplObdTypInt64:
-	case kEplObdTypUInt64:
-	case kEplObdTypReal64:
-		{
-			AmiSetQword64ToLe(pDstData_p, *((u64 *) pSrcData));
-			break;
-		}
-
-		// time of day
-	case kEplObdTypTimeOfDay:
-	case kEplObdTypTimeDiff:
-		{
-			AmiSetTimeOfDay(pDstData_p, ((tTimeOfDay *) pSrcData));
-			break;
-		}
-
-	}			// end of switch(pSubEntry->m_Type)
-
-	*pSize_p = ObdSize;
-
-	// write address of destination data to structure of callback parameters
-	// so callback function can change this data after reading
-	CbParam.m_pArg = pDstData_p;
-	CbParam.m_ObdEvent = kEplObdEvPostRead;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, &CbParam);
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdWriteEntryFromLe()
-//
-// Description: Function writes data to an OBD entry from a source with
-//              little endian byteorder to the od with system specuific
-//              byteorder. Not numerical values will only by copied. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdWriteEntryFromLe(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				  unsigned int uiSubIndex_p,
-				  void *pSrcData_p, tEplObdSize Size_p)
-{
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pSubEntry;
-	tEplObdCbParam CbParam;
-	void *pDstData;
-	tEplObdSize ObdSize;
-	u64 qwBuffer;
-	void *pBuffer = &qwBuffer;
-
-	Ret = EplObdWriteEntryPre(EPL_MCO_INSTANCE_PTR_
-				  uiIndex_p,
-				  uiSubIndex_p,
-				  pSrcData_p,
-				  &pDstData,
-				  Size_p,
-				  &pObdEntry, &pSubEntry, &CbParam, &ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	// check if numerical type
-	switch (pSubEntry->m_Type) {
-		//-----------------------------------------------
-		// types without ami
-	default:
-		{		// do nothing, i.e. use the given source pointer
-			pBuffer = pSrcData_p;
-			break;
-		}
-
-		//-----------------------------------------------
-		// numerical type which needs ami-write
-		// 8 bit or smaller values
-	case kEplObdTypBool:
-	case kEplObdTypInt8:
-	case kEplObdTypUInt8:
-		{
-			*((u8 *) pBuffer) = AmiGetByteFromLe(pSrcData_p);
-			break;
-		}
-
-		// 16 bit values
-	case kEplObdTypInt16:
-	case kEplObdTypUInt16:
-		{
-			*((u16 *) pBuffer) = AmiGetWordFromLe(pSrcData_p);
-			break;
-		}
-
-		// 24 bit values
-	case kEplObdTypInt24:
-	case kEplObdTypUInt24:
-		{
-			*((u32 *) pBuffer) = AmiGetDword24FromLe(pSrcData_p);
-			break;
-		}
-
-		// 32 bit values
-	case kEplObdTypInt32:
-	case kEplObdTypUInt32:
-	case kEplObdTypReal32:
-		{
-			*((u32 *) pBuffer) = AmiGetDwordFromLe(pSrcData_p);
-			break;
-		}
-
-		// 40 bit values
-	case kEplObdTypInt40:
-	case kEplObdTypUInt40:
-		{
-			*((u64 *) pBuffer) = AmiGetQword40FromLe(pSrcData_p);
-			break;
-		}
-
-		// 48 bit values
-	case kEplObdTypInt48:
-	case kEplObdTypUInt48:
-		{
-			*((u64 *) pBuffer) = AmiGetQword48FromLe(pSrcData_p);
-			break;
-		}
-
-		// 56 bit values
-	case kEplObdTypInt56:
-	case kEplObdTypUInt56:
-		{
-			*((u64 *) pBuffer) = AmiGetQword56FromLe(pSrcData_p);
-			break;
-		}
-
-		// 64 bit values
-	case kEplObdTypInt64:
-	case kEplObdTypUInt64:
-	case kEplObdTypReal64:
-		{
-			*((u64 *) pBuffer) = AmiGetQword64FromLe(pSrcData_p);
-			break;
-		}
-
-		// time of day
-	case kEplObdTypTimeOfDay:
-	case kEplObdTypTimeDiff:
-		{
-			AmiGetTimeOfDay(pBuffer, ((tTimeOfDay *) pSrcData_p));
-			break;
-		}
-
-	}			// end of switch(pSubEntry->m_Type)
-
-	Ret = EplObdWriteEntryPost(EPL_MCO_INSTANCE_PTR_
-				   pObdEntry,
-				   pSubEntry,
-				   &CbParam, pBuffer, pDstData, ObdSize);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetAccessType()
-//
-// Description: Function returns accesstype of the entry
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pAccessTyp_p    =   pointer to buffer to store accesstype
-//
-// Return:      tEplKernel     =   errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObdGetAccessType(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       tEplObdAccess *pAccessTyp_p)
-{
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pObdSubEntry;
-
-	// get pointer to index structure
-	Ret = EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam),
-				   uiIndex_p, &pObdEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get pointer to subindex structure
-	Ret = EplObdGetSubindexIntern(pObdEntry, uiSubIndex_p, &pObdSubEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get accessType
-	*pAccessTyp_p = pObdSubEntry->m_Access;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdSearchVarEntry()
-//
-// Description: gets variable from OD
-//
-// Parameters:  uiIndex_p       =   index of the var entry to search
-//              uiSubindex_p    =   subindex of var entry to search
-//              ppVarEntry_p    =   pointer to the pointer to the varentry
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplObdSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				unsigned int uiSubindex_p,
-				tEplObdVarEntry **ppVarEntry_p)
-{
-
-	tEplKernel Ret;
-	tEplObdSubEntryPtr pSubindexEntry;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	// get address of subindex entry
-	Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_
-			     uiIndex_p, uiSubindex_p, NULL, &pSubindexEntry);
-	if (Ret == kEplSuccessful) {
-		// get var entry
-		Ret = EplObdGetVarEntry(pSubindexEntry, ppVarEntry_p);
-	}
-
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-EPL_MCO_DECL_INSTANCE_FCT()
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdCallObjectCallback()
-//
-// Description: calls callback function of an object or of a variable
-//
-// Parameters:  fpCallback_p
-//              pCbParam_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplObdCallObjectCallback(EPL_MCO_DECL_INSTANCE_PTR_
-					   tEplObdCallback fpCallback_p,
-					   tEplObdCbParam *pCbParam_p)
-{
-
-	tEplKernel Ret;
-	tEplObdCallback fpCallback;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	ASSERT(pCbParam_p != NULL);
-
-	Ret = kEplSuccessful;
-
-	// check address of callback function before calling it
-	if (fpCallback_p != NULL) {
-		// KEIL C51 V6.01 has a bug.
-		// Therefore the parameter fpCallback_p has to be copied in local variable fpCallback.
-		fpCallback = fpCallback_p;
-
-		// call callback function for this object
-		Ret = fpCallback(EPL_MCO_INSTANCE_PARAM_IDX_()
-				 pCbParam_p);
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetDataSizeIntern()
-//
-// Description: gets the data size of an object
-//              for string objects it returnes the string length
-//
-// Parameters:  pSubIndexEntry_p
-//
-// Return:      tEplObdSize
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplObdSize EplObdGetDataSizeIntern(tEplObdSubEntryPtr pSubIndexEntry_p)
-{
-
-	tEplObdSize DataSize;
-	void *pData;
-
-	// If OD entry is defined by macro EPL_OBD_SUBINDEX_ROM_VSTRING
-	// then the current pointer is always NULL. The function
-	// returns the length of default string.
-	DataSize = EplObdGetObjectSize(pSubIndexEntry_p);
-
-	if (pSubIndexEntry_p->m_Type == kEplObdTypVString) {
-		// The pointer to current value can be received from EplObdGetObjectCurrentPtr()
-		pData = ((void *)EplObdGetObjectCurrentPtr(pSubIndexEntry_p));
-		if (pData != NULL) {
-			DataSize =
-			    EplObdGetStrLen((void *)pData, DataSize,
-					    pSubIndexEntry_p->m_Type);
-		}
-
-	}
-
-	return DataSize;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetStrLen()
-//
-// Description: The function calculates the length of string. The '\0'
-//              character is included!!
-//
-// Parameters:  pObjData_p          = pointer to string
-//              ObjLen_p            = max. length of objectr entry
-//              bObjType_p          = object type (VSTRING, ...)
-//
-// Returns:     string length + 1
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplObdSize EplObdGetStrLen(void *pObjData_p,
-				   tEplObdSize ObjLen_p, tEplObdType ObjType_p)
-{
-
-	tEplObdSize StrLen = 0;
-	u8 *pbString;
-
-	if (pObjData_p == NULL) {
-		goto Exit;
-	}
-	//----------------------------------------
-	// Visible String: data format byte
-	if (ObjType_p == kEplObdTypVString) {
-		pbString = pObjData_p;
-
-		for (StrLen = 0; StrLen < ObjLen_p; StrLen++) {
-			if (*pbString == '\0') {
-				StrLen++;
-				break;
-			}
-
-			pbString++;
-		}
-	}
-	//----------------------------------------
-	// other string types ...
-
-      Exit:
-	return (StrLen);
-
-}
-
-#if (EPL_OBD_CHECK_OBJECT_RANGE != FALSE)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdCheckObjectRange()
-//
-// Description: function to check value range of object data
-//
-// NOTICE: The pointer of data (pData_p) must point out to an even address,
-//         if ObjType is unequal to kEplObdTypInt8 or kEplObdTypUInt8! But it is
-//         always realiced because pointer m_pDefault points always to an
-//         array of the SPECIFIED type.
-//
-// Parameters:  pSubindexEntry_p
-//              pData_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdCheckObjectRange(tEplObdSubEntryPtr pSubindexEntry_p,
-					 void *pData_p)
-{
-
-	tEplKernel Ret;
-	void *pRangeData;
-
-	ASSERTMSG(pSubindexEntry_p != NULL,
-		  "EplObdCheckObjectRange(): no address to subindex struct!\n");
-
-	Ret = kEplSuccessful;
-
-	// check if data range has to be checked
-	if ((pSubindexEntry_p->m_Access & kEplObdAccRange) == 0) {
-		goto Exit;
-	}
-	// get address of default data
-	pRangeData = pSubindexEntry_p->m_pDefault;
-
-	// jump to called object type
-	switch ((tEplObdType) pSubindexEntry_p->m_Type) {
-		// -----------------------------------------------------------------
-		// ObdType kEplObdTypBool will not be checked because there are only
-		// two possible values 0 or 1.
-
-		// -----------------------------------------------------------------
-		// ObdTypes which has to be check up because numerical values
-	case kEplObdTypInt8:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdInteger8 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdInteger8 *) pData_p) <
-		    *((tEplObdInteger8 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdInteger8 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdInteger8 *) pData_p) >
-		    *((tEplObdInteger8 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypUInt8:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdUnsigned8 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdUnsigned8 *) pData_p) <
-		    *((tEplObdUnsigned8 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdUnsigned8 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdUnsigned8 *) pData_p) >
-		    *((tEplObdUnsigned8 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypInt16:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdInteger16 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdInteger16 *) pData_p) <
-		    *((tEplObdInteger16 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdInteger16 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdInteger16 *) pData_p) >
-		    *((tEplObdInteger16 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypUInt16:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdUnsigned16 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdUnsigned16 *) pData_p) <
-		    *((tEplObdUnsigned16 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdUnsigned16 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdUnsigned16 *) pData_p) >
-		    *((tEplObdUnsigned16 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypInt32:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdInteger32 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdInteger32 *) pData_p) <
-		    *((tEplObdInteger32 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdInteger32 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdInteger32 *) pData_p) >
-		    *((tEplObdInteger32 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypUInt32:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdUnsigned32 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdUnsigned32 *) pData_p) <
-		    *((tEplObdUnsigned32 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdUnsigned32 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdUnsigned32 *) pData_p) >
-		    *((tEplObdUnsigned32 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-	case kEplObdTypReal32:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdReal32 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdReal32 *) pData_p) <
-		    *((tEplObdReal32 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdReal32 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdReal32 *) pData_p) >
-		    *((tEplObdReal32 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt40:
-	case kEplObdTypInt48:
-	case kEplObdTypInt56:
-	case kEplObdTypInt64:
-
-		// switch to lower limit
-		pRangeData = ((signed u64 *)pRangeData) + 1;
-
-		// check if value is to low
-		if (*((signed u64 *)pData_p) < *((signed u64 *)pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((signed u64 *)pRangeData) + 1;
-
-		// check if value is to high
-		if (*((signed u64 *)pData_p) > *((signed u64 *)pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypUInt40:
-	case kEplObdTypUInt48:
-	case kEplObdTypUInt56:
-	case kEplObdTypUInt64:
-
-		// switch to lower limit
-		pRangeData = ((unsigned u64 *)pRangeData) + 1;
-
-		// check if value is to low
-		if (*((unsigned u64 *)pData_p) <
-		    *((unsigned u64 *)pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((unsigned u64 *)pRangeData) + 1;
-
-		// check if value is to high
-		if (*((unsigned u64 *)pData_p) >
-		    *((unsigned u64 *)pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypReal64:
-
-		// switch to lower limit
-		pRangeData = ((tEplObdReal64 *) pRangeData) + 1;
-
-		// check if value is to low
-		if (*((tEplObdReal64 *) pData_p) <
-		    *((tEplObdReal64 *) pRangeData)) {
-			Ret = kEplObdValueTooLow;
-			break;
-		}
-		// switch to higher limit
-		pRangeData = ((tEplObdReal64 *) pRangeData) + 1;
-
-		// check if value is to high
-		if (*((tEplObdReal64 *) pData_p) >
-		    *((tEplObdReal64 *) pRangeData)) {
-			Ret = kEplObdValueTooHigh;
-		}
-
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypTimeOfDay:
-	case kEplObdTypTimeDiff:
-		break;
-
-		// -----------------------------------------------------------------
-		// ObdTypes kEplObdTypXString and kEplObdTypDomain can not be checkt because
-		// they have no numerical value.
-	default:
-
-		Ret = kEplObdUnknownObjectType;
-		break;
-	}
-
-      Exit:
-
-	return Ret;
-
-}
-#endif // (EPL_OBD_CHECK_OBJECT_RANGE != FALSE)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdWriteEntryPre()
-//
-// Description: Function prepares write of data to an OBD entry. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdWriteEntryPre(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				      unsigned int uiSubIndex_p,
-				      void *pSrcData_p,
-				      void **ppDstData_p,
-				      tEplObdSize Size_p,
-				      tEplObdEntryPtr *ppObdEntry_p,
-				      tEplObdSubEntryPtr *ppSubEntry_p,
-				      tEplObdCbParam *pCbParam_p,
-				      tEplObdSize *pObdSize_p)
-{
-
-	tEplKernel Ret;
-	tEplObdEntryPtr pObdEntry;
-	tEplObdSubEntryPtr pSubEntry;
-	tEplObdAccess Access;
-	void *pDstData;
-	tEplObdSize ObdSize;
-	BOOL fEntryNumerical;
-
-#if (EPL_OBD_USE_STRING_DOMAIN_IN_RAM != FALSE)
-	tEplObdVStringDomain MemVStringDomain;
-	void *pCurrData;
-#endif
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	ASSERT(pSrcData_p != NULL);	// should never be NULL
-
-	//------------------------------------------------------------------------
-	// get address of index and subindex entry
-	Ret = EplObdGetEntry(EPL_MCO_INSTANCE_PTR_
-			     uiIndex_p, uiSubIndex_p, &pObdEntry, &pSubEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// get pointer to object data
-	pDstData = (void *)EplObdGetObjectDataPtrIntern(pSubEntry);
-
-	Access = (tEplObdAccess) pSubEntry->m_Access;
-
-	// check access for write
-	// access violation if adress to current value is NULL
-	if (((Access & kEplObdAccConst) != 0) || (pDstData == NULL)) {
-		Ret = kEplObdAccessViolation;
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// get size of object
-	// -as ObdSize = ObdGetObjectSize (pSubEntry);
-
-	//------------------------------------------------------------------------
-	// To use the same callback function for ObdWriteEntry as well as for
-	// an SDO download call at first (kEplObdEvPre...) the callback function
-	// with the argument pointer to object size.
-	pCbParam_p->m_uiIndex = uiIndex_p;
-	pCbParam_p->m_uiSubIndex = uiSubIndex_p;
-
-	// Because object size and object pointer are
-	// adapted by user callback function, re-read
-	// this values.
-	ObdSize = EplObdGetObjectSize(pSubEntry);
-	pDstData = (void *)EplObdGetObjectDataPtrIntern(pSubEntry);
-
-	// 09-dec-2004 r.d.:
-	//      Function EplObdWriteEntry() calls new event kEplObdEvWrStringDomain
-	//      for String or Domain which lets called module directly change
-	//      the data pointer or size. This prevents a recursive call to
-	//      the callback function if it calls EplObdGetEntry().
-#if (EPL_OBD_USE_STRING_DOMAIN_IN_RAM != FALSE)
-	if ((pSubEntry->m_Type == kEplObdTypVString) ||
-	    (pSubEntry->m_Type == kEplObdTypDomain) ||
-	    (pSubEntry->m_Type == kEplObdTypOString)) {
-		if (pSubEntry->m_Type == kEplObdTypVString) {
-			// reserve one byte for 0-termination
-			// -as ObdSize -= 1;
-			Size_p += 1;
-		}
-		// fill out new arg-struct
-		MemVStringDomain.m_DownloadSize = Size_p;
-		MemVStringDomain.m_ObjSize = ObdSize;
-		MemVStringDomain.m_pData = pDstData;
-
-		pCbParam_p->m_ObdEvent = kEplObdEvWrStringDomain;
-		pCbParam_p->m_pArg = &MemVStringDomain;
-		//  call user callback
-		Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-					       pObdEntry->m_fpCallback,
-					       pCbParam_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		// write back new settings
-		pCurrData = pSubEntry->m_pCurrent;
-		if ((pSubEntry->m_Type == kEplObdTypVString)
-		    || (pSubEntry->m_Type == kEplObdTypOString)) {
-			((tEplObdVString *)pCurrData)->m_Size = MemVStringDomain.m_ObjSize;
-			((tEplObdVString *)pCurrData)->m_pString = MemVStringDomain.m_pData;
-		} else		// if (pSdosTableEntry_p->m_bObjType == kEplObdTypDomain)
-		{
-			((tEplObdVarEntry *)pCurrData)->m_Size = MemVStringDomain.m_ObjSize;
-			((tEplObdVarEntry *)pCurrData)->m_pData = (void *)MemVStringDomain.m_pData;
-		}
-
-		// Because object size and object pointer are
-		// adapted by user callback function, re-read
-		// this values.
-		ObdSize = MemVStringDomain.m_ObjSize;
-		pDstData = (void *)MemVStringDomain.m_pData;
-	}
-#endif //#if (OBD_USE_STRING_DOMAIN_IN_RAM != FALSE)
-
-	// 07-dec-2004 r.d.: size from application is needed because callback function can change the object size
-	// -as 16.11.04 CbParam.m_pArg     = &ObdSize;
-	// 09-dec-2004 r.d.: CbParam.m_pArg     = &Size_p;
-	pCbParam_p->m_pArg = &ObdSize;
-	pCbParam_p->m_ObdEvent = kEplObdEvInitWrite;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, pCbParam_p);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	if (Size_p > ObdSize) {
-		Ret = kEplObdValueLengthError;
-		goto Exit;
-	}
-
-	if (pSubEntry->m_Type == kEplObdTypVString) {
-		if (((char *)pSrcData_p)[Size_p - 1] == '\0') {	// last byte of source string contains null character
-
-			// reserve one byte in destination for 0-termination
-			Size_p -= 1;
-		} else if (Size_p >= ObdSize) {	// source string is not 0-terminated
-			// and destination buffer is too short
-			Ret = kEplObdValueLengthError;
-			goto Exit;
-		}
-	}
-
-	Ret = EplObdIsNumericalIntern(pSubEntry, &fEntryNumerical);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-	if ((fEntryNumerical != FALSE)
-	    && (Size_p != ObdSize)) {
-		// type is numerical, therefor size has to fit, but it does not.
-		Ret = kEplObdValueLengthError;
-		goto Exit;
-	}
-	// use given size, because non-numerical objects can be written with shorter values
-	ObdSize = Size_p;
-
-	// set output parameters
-	*pObdSize_p = ObdSize;
-	*ppObdEntry_p = pObdEntry;
-	*ppSubEntry_p = pSubEntry;
-	*ppDstData_p = pDstData;
-
-	// all checks are done
-	// the caller may now convert the numerial source value to platform byte order in a temporary buffer
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdWriteEntryPost()
-//
-// Description: Function finishes write of data to an OBD entry. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdWriteEntryPost(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pObdEntry_p,
-				       tEplObdSubEntryPtr pSubEntry_p,
-				       tEplObdCbParam *pCbParam_p,
-				       void *pSrcData_p,
-				       void *pDstData_p,
-				       tEplObdSize ObdSize_p)
-{
-
-	tEplKernel Ret;
-
-	// caller converted the source value to platform byte order
-	// now the range of the value may be checked
-
-#if (EPL_OBD_CHECK_OBJECT_RANGE != FALSE)
-	{
-		// check data range
-		Ret = EplObdCheckObjectRange(pSubEntry_p, pSrcData_p);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-	}
-#endif
-
-	// now call user callback function to check value
-	// write address of source data to structure of callback parameters
-	// so callback function can check this data
-	pCbParam_p->m_pArg = pSrcData_p;
-	pCbParam_p->m_ObdEvent = kEplObdEvPreWrite;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry_p->m_fpCallback, pCbParam_p);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	// copy object data to OBD
-	EPL_MEMCPY(pDstData_p, pSrcData_p, ObdSize_p);
-
-	// terminate string with 0
-	if (pSubEntry_p->m_Type == kEplObdTypVString) {
-		((char *)pDstData_p)[ObdSize_p] = '\0';
-	}
-	// write address of destination to structure of callback parameters
-	// so callback function can change data subsequently
-	pCbParam_p->m_pArg = pDstData_p;
-	pCbParam_p->m_ObdEvent = kEplObdEvPostWrite;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry_p->m_fpCallback, pCbParam_p);
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetObjectSize()
-//
-// Description: function to get size of object
-//              The function determines if an object type an fixed data type (u8, u16, ...)
-//              or non fixed object (string, domain). This information is used to decide
-//              if download data are stored temporary or not. For objects with fixed data length
-//              and types a value range checking can process.
-//              For strings the function returns the whole object size not the
-//              length of string.
-//
-// Parameters:  pSubIndexEntry_p
-//
-// Return:      tEplObdSize
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplObdSize EplObdGetObjectSize(tEplObdSubEntryPtr pSubIndexEntry_p)
-{
-
-	tEplObdSize DataSize = 0;
-	void *pData;
-
-	switch (pSubIndexEntry_p->m_Type) {
-		// -----------------------------------------------------------------
-	case kEplObdTypBool:
-
-		DataSize = 1;
-		break;
-
-		// -----------------------------------------------------------------
-		// ObdTypes which has to be check because numerical values
-	case kEplObdTypInt8:
-		DataSize = sizeof(tEplObdInteger8);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypUInt8:
-		DataSize = sizeof(tEplObdUnsigned8);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt16:
-		DataSize = sizeof(tEplObdInteger16);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypUInt16:
-		DataSize = sizeof(tEplObdUnsigned16);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt32:
-		DataSize = sizeof(tEplObdInteger32);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypUInt32:
-		DataSize = sizeof(tEplObdUnsigned32);
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypReal32:
-		DataSize = sizeof(tEplObdReal32);
-		break;
-
-		// -----------------------------------------------------------------
-		// ObdTypes which has to be not checked because not NUM values
-	case kEplObdTypDomain:
-
-		pData = (void *)pSubIndexEntry_p->m_pCurrent;
-		if ((void *)pData != (void *)NULL) {
-			DataSize = ((tEplObdVarEntry *) pData)->m_Size;
-		}
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypVString:
-		//case kEplObdTypUString:
-
-		// If OD entry is defined by macro EPL_OBD_SUBINDEX_ROM_VSTRING
-		// then the current pointer is always NULL. The function
-		// returns the length of default string.
-		pData = (void *)pSubIndexEntry_p->m_pCurrent;
-		if ((void *)pData != (void *)NULL) {
-			// The max. size of strings defined by STRING-Macro is stored in
-			// tEplObdVString of current value.
-			// (types tEplObdVString, tEplObdOString and tEplObdUString has the same members)
-			DataSize = ((tEplObdVString *) pData)->m_Size;
-		} else {
-			// The current position is not decleared. The string
-			// is located in ROM, therefor use default pointer.
-			pData = (void *)pSubIndexEntry_p->m_pDefault;
-			if ((const void *)pData != (const void *)NULL) {
-				// The max. size of strings defined by STRING-Macro is stored in
-				// tEplObdVString of default value.
-				DataSize = ((const tEplObdVString *)pData)->m_Size;
-			}
-		}
-
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypOString:
-
-		pData = (void *)pSubIndexEntry_p->m_pCurrent;
-		if ((void *)pData != (void *)NULL) {
-			// The max. size of strings defined by STRING-Macro is stored in
-			// tEplObdVString of current value.
-			// (types tEplObdVString, tEplObdOString and tEplObdUString has the same members)
-			DataSize = ((tEplObdOString *) pData)->m_Size;
-		} else {
-			// The current position is not decleared. The string
-			// is located in ROM, therefor use default pointer.
-			pData = (void *)pSubIndexEntry_p->m_pDefault;
-			if ((const void *)pData != (const void *)NULL) {
-				// The max. size of strings defined by STRING-Macro is stored in
-				// tEplObdVString of default value.
-				DataSize = ((const tEplObdOString *)pData)->m_Size;
-			}
-		}
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt24:
-	case kEplObdTypUInt24:
-
-		DataSize = 3;
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt40:
-	case kEplObdTypUInt40:
-
-		DataSize = 5;
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt48:
-	case kEplObdTypUInt48:
-
-		DataSize = 6;
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt56:
-	case kEplObdTypUInt56:
-
-		DataSize = 7;
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypInt64:
-	case kEplObdTypUInt64:
-	case kEplObdTypReal64:
-
-		DataSize = 8;
-		break;
-
-		// -----------------------------------------------------------------
-	case kEplObdTypTimeOfDay:
-	case kEplObdTypTimeDiff:
-
-		DataSize = 6;
-		break;
-
-		// -----------------------------------------------------------------
-	default:
-		break;
-	}
-
-	return DataSize;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetObjectDefaultPtr()
-//
-// Description: function to get the default pointer (type specific)
-//
-// Parameters:  pSubIndexEntry_p    = pointer to subindex structure
-//
-// Returns:     (void *)   = pointer to default value
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void *EplObdGetObjectDefaultPtr(tEplObdSubEntryPtr pSubIndexEntry_p)
-{
-
-	void *pDefault;
-	tEplObdType Type;
-
-	ASSERTMSG(pSubIndexEntry_p != NULL,
-		  "EplObdGetObjectDefaultPtr(): pointer to SubEntry not valid!\n");
-
-	// get address to default data from default pointer
-	pDefault = pSubIndexEntry_p->m_pDefault;
-	if (pDefault != NULL) {
-		// there are some special types, whose default pointer always is NULL or has to get from other structure
-		// get type from subindex structure
-		Type = pSubIndexEntry_p->m_Type;
-
-		// check if object type is a string value
-		if ((Type == kEplObdTypVString)	/* ||
-						   (Type == kEplObdTypUString) */ ) {
-
-			// EPL_OBD_SUBINDEX_RAM_VSTRING
-			//    tEplObdSize         m_Size;       --> size of default string
-			//    char *    m_pDefString; --> pointer to  default string
-			//    char *    m_pString;    --> pointer to string in RAM
-			//
-			pDefault =
-			    (void *)((tEplObdVString *) pDefault)->m_pString;
-		} else if (Type == kEplObdTypOString) {
-			pDefault =
-			    (void *)((tEplObdOString *) pDefault)->m_pString;
-		}
-	}
-
-	return pDefault;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetVarEntry()
-//
-// Description: gets a variable entry of an object
-//
-// Parameters:  pSubindexEntry_p
-//              ppVarEntry_p
-//
-// Return:      tCopKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdGetVarEntry(tEplObdSubEntryPtr pSubindexEntry_p,
-				    tEplObdVarEntry **ppVarEntry_p)
-{
-
-	tEplKernel Ret = kEplObdVarEntryNotExist;
-
-	ASSERT(ppVarEntry_p != NULL);	// is not allowed to be NULL
-	ASSERT(pSubindexEntry_p != NULL);
-
-	// check VAR-Flag - only this object points to variables
-	if ((pSubindexEntry_p->m_Access & kEplObdAccVar) != 0) {
-		// check if object is an array
-		if ((pSubindexEntry_p->m_Access & kEplObdAccArray) != 0) {
-			*ppVarEntry_p = &((tEplObdVarEntry *)pSubindexEntry_p->m_pCurrent)[pSubindexEntry_p->m_uiSubIndex - 1];
-		} else {
-			*ppVarEntry_p = (tEplObdVarEntry *)pSubindexEntry_p->m_pCurrent;
-		}
-
-		Ret = kEplSuccessful;
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetEntry()
-//
-// Description: gets a index entry from OD
-//
-// Parameters:  uiIndex_p       =   Index number
-//              uiSubindex_p    =   Subindex number
-//              ppObdEntry_p    =   pointer to the pointer to the entry
-//              ppObdSubEntry_p =   pointer to the pointer to the subentry
-//
-// Return:      tEplKernel
-
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdGetEntry(EPL_MCO_DECL_INSTANCE_PTR_
-				 unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 tEplObdEntryPtr * ppObdEntry_p,
-				 tEplObdSubEntryPtr * ppObdSubEntry_p)
-{
-
-	tEplObdEntryPtr pObdEntry;
-	tEplObdCbParam CbParam;
-	tEplKernel Ret;
-
-	// check for all API function if instance is valid
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	//------------------------------------------------------------------------
-	// get address of entry of index
-	Ret =
-	    EplObdGetIndexIntern(&EPL_MCO_GLB_VAR(m_ObdInitParam), uiIndex_p,
-				 &pObdEntry);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// get address of entry of subindex
-	Ret = EplObdGetSubindexIntern(pObdEntry, uiSubindex_p, ppObdSubEntry_p);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// call callback function to inform user/stack that an object will be searched
-	// if the called module returnes an error then we abort the searching with kEplObdIndexNotExist
-	CbParam.m_uiIndex = uiIndex_p;
-	CbParam.m_uiSubIndex = uiSubindex_p;
-	CbParam.m_pArg = NULL;
-	CbParam.m_ObdEvent = kEplObdEvCheckExist;
-	Ret = EplObdCallObjectCallback(EPL_MCO_INSTANCE_PTR_
-				       pObdEntry->m_fpCallback, &CbParam);
-	if (Ret != kEplSuccessful) {
-		Ret = kEplObdIndexNotExist;
-		goto Exit;
-	}
-	//------------------------------------------------------------------------
-	// it is allowed to set ppObdEntry_p to NULL
-	// if so, no address will be written to calling function
-	if (ppObdEntry_p != NULL) {
-		*ppObdEntry_p = pObdEntry;
-	}
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetObjectCurrentPtr()
-//
-// Description: function to get Current pointer (type specific)
-//
-// Parameters:  pSubIndexEntry_p
-//
-// Return:      void *
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void *EplObdGetObjectCurrentPtr(tEplObdSubEntryPtr pSubIndexEntry_p)
-{
-
-	void *pData;
-	unsigned int uiArrayIndex;
-	tEplObdSize Size;
-
-	pData = pSubIndexEntry_p->m_pCurrent;
-
-	// check if constant object
-	if (pData != NULL) {
-		// check if object is an array
-		if ((pSubIndexEntry_p->m_Access & kEplObdAccArray) != 0) {
-			// calculate correct data pointer
-			uiArrayIndex = pSubIndexEntry_p->m_uiSubIndex - 1;
-			if ((pSubIndexEntry_p->m_Access & kEplObdAccVar) != 0) {
-				Size = sizeof(tEplObdVarEntry);
-			} else {
-				Size = EplObdGetObjectSize(pSubIndexEntry_p);
-			}
-			pData = ((u8 *) pData) + (Size * uiArrayIndex);
-		}
-		// check if VarEntry
-		if ((pSubIndexEntry_p->m_Access & kEplObdAccVar) != 0) {
-			// The data pointer is stored in VarEntry->pData
-			pData = ((tEplObdVarEntry *) pData)->m_pData;
-		}
-		// the default pointer is stored for strings in tEplObdVString
-		else if ((pSubIndexEntry_p->m_Type == kEplObdTypVString)	/* ||
-										   (pSubIndexEntry_p->m_Type == kEplObdTypUString)    */
-			 ) {
-			pData = (void *)((tEplObdVString *)pData)->m_pString;
-		} else if (pSubIndexEntry_p->m_Type == kEplObdTypOString) {
-			pData =
-			    (void *)((tEplObdOString *)pData)->m_pString;
-		}
-	}
-
-	return pData;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetIndexIntern()
-//
-// Description: gets a index entry from OD
-//
-// Parameters:  pInitParam_p
-//              uiIndex_p
-//              ppObdEntry_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdGetIndexIntern(tEplObdInitParam *pInitParam_p,
-				       unsigned int uiIndex_p,
-				       tEplObdEntryPtr * ppObdEntry_p)
-{
-
-	tEplObdEntryPtr pObdEntry;
-	tEplKernel Ret;
-	unsigned int uiIndex;
-
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-
-	unsigned int nLoop;
-
-	// if user OD is used then objekts also has to be searched in user OD
-	// there is less code need if we do this in a loop
-	nLoop = 2;
-
-#endif
-
-	ASSERTMSG(ppObdEntry_p != NULL,
-		  "EplObdGetIndexIntern(): pointer to index entry is NULL!\n");
-
-	Ret = kEplObdIndexNotExist;
-
-	// get start address of OD part
-	// start address depends on object index because
-	// object dictionary is divided in 3 parts
-	if ((uiIndex_p >= 0x1000) && (uiIndex_p < 0x2000)) {
-		pObdEntry = pInitParam_p->m_pPart;
-	} else if ((uiIndex_p >= 0x2000) && (uiIndex_p < 0x6000)) {
-		pObdEntry = pInitParam_p->m_pManufacturerPart;
-	}
-	// index range 0xA000 to 0xFFFF is reserved for DSP-405
-	// DS-301 defines that range 0x6000 to 0x9FFF (!!!) is stored if "store" was written to 0x1010/3.
-	// Therefore default configuration is OBD_INCLUDE_A000_TO_DEVICE_PART = FALSE.
-	// But a CANopen Application which does not implement dynamic OD or user-OD but wants to use static objets 0xA000...
-	// should set OBD_INCLUDE_A000_TO_DEVICE_PART to TRUE.
-
-#if (EPL_OBD_INCLUDE_A000_TO_DEVICE_PART == FALSE)
-	else if ((uiIndex_p >= 0x6000) && (uiIndex_p < 0x9FFF))
-#else
-	else if ((uiIndex_p >= 0x6000) && (uiIndex_p < 0xFFFF))
-#endif
-	{
-		pObdEntry = pInitParam_p->m_pDevicePart;
-	}
-
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-
-	// if index does not match in static OD then index only has to be searched in user OD
-	else {
-		// begin from first entry of user OD part
-		pObdEntry = pInitParam_p->m_pUserPart;
-
-		// no user OD is available
-		if (pObdEntry == NULL) {
-			goto Exit;
-		}
-		// loop must only run once
-		nLoop = 1;
-	}
-
-	do {
-
-#else
-
-	// no user OD is available
-	// so other object can be found in OD
-	else {
-		Ret = kEplObdIllegalPart;
-		goto Exit;
-	}
-
-#endif
-
-	// note:
-	// The end of Index table is marked with m_uiIndex = 0xFFFF.
-	// If this function will be called with wIndex_p = 0xFFFF, entry
-	// should not be found. Therefor it is important to use
-	// while{} instead of do{}while !!!
-
-	// get first index of index table
-	uiIndex = pObdEntry->m_uiIndex;
-
-	// search Index in OD part
-	while (uiIndex != EPL_OBD_TABLE_INDEX_END) {
-		// go to the end of this function if index is found
-		if (uiIndex_p == uiIndex) {
-			// write address of OD entry to calling function
-			*ppObdEntry_p = pObdEntry;
-			Ret = kEplSuccessful;
-			goto Exit;
-		}
-		// objects are sorted in OD
-		// if the current index in OD is greater than the index which is to search then break loop
-		// in this case user OD has to be search too
-		if (uiIndex_p < uiIndex) {
-			break;
-		}
-		// next entry in index table
-		pObdEntry++;
-
-		// get next index of index table
-		uiIndex = pObdEntry->m_uiIndex;
-	}
-
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-
-	// begin from first entry of user OD part
-	pObdEntry = pInitParam_p->m_pUserPart;
-
-	// no user OD is available
-	if (pObdEntry == NULL) {
-		goto Exit;
-	}
-	// switch next loop for user OD
-	nLoop--;
-
-}
-
-while (nLoop > 0) ;
-
-#endif
-
-    // in this line Index was not found
-
-Exit:
-
-return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetSubindexIntern()
-//
-// Description: gets a subindex entry from a index entry
-//
-// Parameters:  pObdEntry_p
-//              bSubIndex_p
-//              ppObdSubEntry_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdGetSubindexIntern(tEplObdEntryPtr pObdEntry_p,
-					  unsigned int uiSubIndex_p,
-					  tEplObdSubEntryPtr * ppObdSubEntry_p)
-{
-
-	tEplObdSubEntryPtr pSubEntry;
-	unsigned int nSubIndexCount;
-	tEplKernel Ret;
-
-	ASSERTMSG(pObdEntry_p != NULL,
-		  "EplObdGetSubindexIntern(): pointer to index is NULL!\n");
-	ASSERTMSG(ppObdSubEntry_p != NULL,
-		  "EplObdGetSubindexIntern(): pointer to subindex is NULL!\n");
-
-	Ret = kEplObdSubindexNotExist;
-
-	// get start address of subindex table and count of subindices
-	pSubEntry = pObdEntry_p->m_pSubIndex;
-	nSubIndexCount = pObdEntry_p->m_uiCount;
-	ASSERTMSG((pSubEntry != NULL) && (nSubIndexCount > 0), "ObdGetSubindexIntern(): invalid subindex table within index table!\n");	// should never be NULL
-
-	// search subindex in subindex table
-	while (nSubIndexCount > 0) {
-		// check if array is found
-		if ((pSubEntry->m_Access & kEplObdAccArray) != 0) {
-			// check if subindex is in range
-			if (uiSubIndex_p < pObdEntry_p->m_uiCount) {
-				// update subindex number (subindex entry of an array is always in RAM !!!)
-				pSubEntry->m_uiSubIndex = uiSubIndex_p;
-				*ppObdSubEntry_p = pSubEntry;
-				Ret = kEplSuccessful;
-				goto Exit;
-			}
-		}
-		// go to the end of this function if subindex is found
-		else if (uiSubIndex_p == pSubEntry->m_uiSubIndex) {
-			*ppObdSubEntry_p = pSubEntry;
-			Ret = kEplSuccessful;
-			goto Exit;
-		}
-		// objects are sorted in OD
-		// if the current subindex in OD is greater than the subindex which is to search then break loop
-		// in this case user OD has to be search too
-		if (uiSubIndex_p < pSubEntry->m_uiSubIndex) {
-			break;
-		}
-
-		pSubEntry++;
-		nSubIndexCount--;
-	}
-
-	// in this line SubIndex was not fount
-
-      Exit:
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdSetStoreLoadObjCallback()
-//
-// Description: function set address to callbackfunction for command Store and Load
-//
-// Parameters:  fpCallback_p
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-tEplKernel EplObdSetStoreLoadObjCallback(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdStoreLoadObjCallback fpCallback_p)
-{
-
-	EPL_MCO_CHECK_INSTANCE_STATE();
-
-	// set new address of callback function
-	EPL_MCO_GLB_VAR(m_fpStoreLoadObjCallback) = fpCallback_p;
-
-	return kEplSuccessful;
-
-}
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdAccessOdPartIntern()
-//
-// Description: runs through OD and executes a job
-//
-// Parameters:  CurrentOdPart_p
-//              pObdEnty_p
-//              Direction_p     = what is to do (load values from flash or EEPROM, store, ...)
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplObdAccessOdPartIntern(EPL_MCO_DECL_INSTANCE_PTR_
-					   tEplObdPart CurrentOdPart_p,
-					   tEplObdEntryPtr pObdEnty_p,
-					   tEplObdDir Direction_p)
-{
-
-	tEplObdSubEntryPtr pSubIndex;
-	unsigned int nSubIndexCount;
-	tEplObdAccess Access;
-	void *pDstData;
-	void *pDefault;
-	tEplObdSize ObjSize;
-	tEplKernel Ret;
-	tEplObdCbStoreParam CbStore;
-	tEplObdVarEntry *pVarEntry;
-
-	ASSERT(pObdEnty_p != NULL);
-
-	Ret = kEplSuccessful;
-
-	// prepare structure for STORE RESTORE callback function
-	CbStore.m_bCurrentOdPart = (u8) CurrentOdPart_p;
-	CbStore.m_pData = NULL;
-	CbStore.m_ObjSize = 0;
-
-	// command of first action depends on direction to access
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-	if (Direction_p == kEplObdDirLoad) {
-		CbStore.m_bCommand = (u8) kEplObdCommOpenRead;
-
-		// call callback function for previous command
-		Ret = EplObdCallStoreCallback(EPL_MCO_INSTANCE_PTR_ & CbStore);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		// set command for index and subindex loop
-		CbStore.m_bCommand = (u8) kEplObdCommReadObj;
-	} else if (Direction_p == kEplObdDirStore) {
-		CbStore.m_bCommand = (u8) kEplObdCommOpenWrite;
-
-		// call callback function for previous command
-		Ret = EplObdCallStoreCallback(EPL_MCO_INSTANCE_PTR_ & CbStore);
-		if (Ret != kEplSuccessful) {
-			goto Exit;
-		}
-		// set command for index and subindex loop
-		CbStore.m_bCommand = (u8) kEplObdCommWriteObj;
-	}
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-
-	// we should not restore the OD values here
-	// the next NMT command "Reset Node" or "Reset Communication" resets the OD data
-	if (Direction_p != kEplObdDirRestore) {
-		// walk through OD part till end is found
-		while (pObdEnty_p->m_uiIndex != EPL_OBD_TABLE_INDEX_END) {
-			// get address to subindex table and count of subindices
-			pSubIndex = pObdEnty_p->m_pSubIndex;
-			nSubIndexCount = pObdEnty_p->m_uiCount;
-			ASSERT((pSubIndex != NULL) && (nSubIndexCount > 0));	// should never be NULL
-
-			// walk through subindex table till all subinices were restored
-			while (nSubIndexCount != 0) {
-				Access = (tEplObdAccess) pSubIndex->m_Access;
-
-				// get pointer to current and default data
-				pDefault = EplObdGetObjectDefaultPtr(pSubIndex);
-				pDstData = EplObdGetObjectCurrentPtr(pSubIndex);
-
-				// NOTE (for kEplObdTypVString):
-				//      The function returnes the max. number of bytes for a
-				//      current string.
-				//      r.d.: For stings the default-size will be read in other lines following (kEplObdDirInit).
-				ObjSize = EplObdGetObjectSize(pSubIndex);
-
-				// switch direction of OD access
-				switch (Direction_p) {
-					// --------------------------------------------------------------------------
-					// VarEntry structures has to be initialized
-				case kEplObdDirInit:
-
-					// If VAR-Flag is set, m_pCurrent means not address of data
-					// but address of tEplObdVarEntry. Address of data has to be get from
-					// this structure.
-					if ((Access & kEplObdAccVar) != 0) {
-						EplObdGetVarEntry(pSubIndex,
-								  &pVarEntry);
-						EplObdInitVarEntry(pVarEntry,
-								   pSubIndex->
-								   m_Type,
-								   ObjSize);
-/*
-                            if ((Access & kEplObdAccArray) == 0)
-                            {
-                                EplObdInitVarEntry (pSubIndex->m_pCurrent, pSubIndex->m_Type, ObjSize);
-                            }
-                            else
-                            {
-                                EplObdInitVarEntry ((tEplObdVarEntry *) (((u8 *) pSubIndex->m_pCurrent) + (sizeof (tEplObdVarEntry) * pSubIndex->m_uiSubIndex)),
-                                    pSubIndex->m_Type, ObjSize);
-                            }
-*/
-						// at this time no application variable is defined !!!
-						// therefore data can not be copied.
-						break;
-					} else if (pSubIndex->m_Type ==
-						   kEplObdTypVString) {
-						// If pointer m_pCurrent is not equal to NULL then the
-						// string was defined with EPL_OBD_SUBINDEX_RAM_VSTRING. The current
-						// pointer points to struct tEplObdVString located in MEM.
-						// The element size includes the max. number of
-						// bytes. The element m_pString includes the pointer
-						// to string in MEM. The memory location of default string
-						// must be copied to memory location of current string.
-
-						pDstData =
-						    pSubIndex->m_pCurrent;
-						if (pDstData != NULL) {
-							// 08-dec-2004: code optimization !!!
-							//              entries ((tEplObdVStringDef*) pSubIndex->m_pDefault)->m_pString
-							//              and ((tEplObdVStringDef*) pSubIndex->m_pDefault)->m_Size were read
-							//              twice. thats not necessary!
-
-							// For copying data we have to set the destination pointer to the real RAM string. This
-							// pointer to RAM string is located in default string info structure. (translated r.d.)
-							pDstData = (void *)((tEplObdVStringDef*) pSubIndex->m_pDefault)->m_pString;
-							ObjSize = ((tEplObdVStringDef *)pSubIndex->m_pDefault)->m_Size;
-
-							((tEplObdVString *)pSubIndex->m_pCurrent)->m_pString = pDstData;
-							((tEplObdVString *)pSubIndex->m_pCurrent)->m_Size = ObjSize;
-						}
-
-					} else if (pSubIndex->m_Type ==
-						   kEplObdTypOString) {
-						pDstData =
-						    pSubIndex->m_pCurrent;
-						if (pDstData != NULL) {
-							// 08-dec-2004: code optimization !!!
-							//              entries ((tEplObdOStringDef*) pSubIndex->m_pDefault)->m_pString
-							//              and ((tEplObdOStringDef*) pSubIndex->m_pDefault)->m_Size were read
-							//              twice. thats not necessary!
-
-							// For copying data we have to set the destination pointer to the real RAM string. This
-							// pointer to RAM string is located in default string info structure. (translated r.d.)
-							pDstData = (void *)((tEplObdOStringDef *) pSubIndex->m_pDefault)->m_pString;
-							ObjSize = ((tEplObdOStringDef *)pSubIndex->m_pDefault)->m_Size;
-
-							((tEplObdOString *)pSubIndex->m_pCurrent)->m_pString = pDstData;
-							((tEplObdOString *)pSubIndex->m_pCurrent)->m_Size = ObjSize;
-						}
-
-					}
-
-					// no break !! because copy of data has to done too.
-
-					// --------------------------------------------------------------------------
-					// all objects has to be restored with default values
-				case kEplObdDirRestore:
-
-					// 09-dec-2004 r.d.: optimization! the same code for kEplObdDirRestore and kEplObdDirLoad
-					//                   is replaced to function ObdCopyObjectData() with a new parameter.
-
-					// restore object data for init phase
-					EplObdCopyObjectData(pDstData, pDefault,
-							     ObjSize,
-							     pSubIndex->m_Type);
-					break;
-
-					// --------------------------------------------------------------------------
-					// objects with attribute kEplObdAccStore has to be load from EEPROM or from a file
-				case kEplObdDirLoad:
-
-					// restore object data for init phase
-					EplObdCopyObjectData(pDstData, pDefault,
-							     ObjSize,
-							     pSubIndex->m_Type);
-
-					// no break !! because callback function has to be called too.
-
-					// --------------------------------------------------------------------------
-					// objects with attribute kEplObdAccStore has to be stored in EEPROM or in a file
-				case kEplObdDirStore:
-
-					// when attribute kEplObdAccStore is set, then call callback function
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-					if ((Access & kEplObdAccStore) != 0) {
-						// fill out data pointer and size of data
-						CbStore.m_pData = pDstData;
-						CbStore.m_ObjSize = ObjSize;
-
-						// call callback function for read or write object
-						Ret =
-						    ObdCallStoreCallback
-						    (EPL_MCO_INSTANCE_PTR_ &
-						     CbStore);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-					}
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-					break;
-
-					// --------------------------------------------------------------------------
-					// if OD Builder key has to be checked no access to subindex and data should be made
-				case kEplObdDirOBKCheck:
-
-					// no break !! because we want to break the second loop too.
-
-					// --------------------------------------------------------------------------
-					// unknown Direction
-				default:
-
-					// so we can break the second loop earler
-					nSubIndexCount = 1;
-					break;
-				}
-
-				nSubIndexCount--;
-
-				// next subindex entry
-				if ((Access & kEplObdAccArray) == 0) {
-					pSubIndex++;
-					if ((nSubIndexCount > 0)
-					    &&
-					    ((pSubIndex->
-					      m_Access & kEplObdAccArray) !=
-					     0)) {
-						// next subindex points to an array
-						// reset subindex number
-						pSubIndex->m_uiSubIndex = 1;
-					}
-				} else {
-					if (nSubIndexCount > 0) {
-						// next subindex points to an array
-						// increment subindex number
-						pSubIndex->m_uiSubIndex++;
-					}
-				}
-			}
-
-			// next index entry
-			pObdEnty_p++;
-		}
-	}
-	// -----------------------------------------------------------------------------------------
-	// command of last action depends on direction to access
-	if (Direction_p == kEplObdDirOBKCheck) {
-
-		goto Exit;
-	}
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-	else {
-		if (Direction_p == kEplObdDirLoad) {
-			CbStore.m_bCommand = (u8) kEplObdCommCloseRead;
-		} else if (Direction_p == kEplObdDirStore) {
-			CbStore.m_bCommand = (u8) kEplObdCommCloseWrite;
-		} else if (Direction_p == kEplObdDirRestore) {
-			CbStore.m_bCommand = (u8) kEplObdCommClear;
-		} else {
-			goto Exit;
-		}
-
-		// call callback function for last command
-		Ret = EplObdCallStoreCallback(EPL_MCO_INSTANCE_PTR_ & CbStore);
-	}
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-
-//    goto Exit;
-
-      Exit:
-
-	return Ret;
-
-}
-
-// ----------------------------------------------------------------------------
-// Function:    EplObdCopyObjectData()
-//
-// Description: checks pointers to object data and copy them from source to destination
-//
-// Parameters:  pDstData_p              = destination pointer
-//              pSrcData_p              = source pointer
-//              ObjSize_p               = size of object
-//              ObjType_p               =
-//
-// Returns:     tEplKernel              = error code
-// ----------------------------------------------------------------------------
-
-static void EplObdCopyObjectData(void *pDstData_p,
-				 void *pSrcData_p,
-				 tEplObdSize ObjSize_p, tEplObdType ObjType_p)
-{
-
-	tEplObdSize StrSize = 0;
-
-	// it is allowed to set default and current address to NULL (nothing to copy)
-	if (pDstData_p != NULL) {
-
-		if (ObjType_p == kEplObdTypVString) {
-			// The function calculates the really number of characters of string. The
-			// object entry size can be bigger as string size of default string.
-			// The '\0'-termination is included. A string with no characters has a
-			// size of 1.
-			StrSize =
-			    EplObdGetStrLen((void *)pSrcData_p, ObjSize_p,
-					    kEplObdTypVString);
-
-			// If the string length is greater than or equal to the entry size in OD then only copy
-			// entry size - 1 and always set the '\0'-termination.
-			if (StrSize >= ObjSize_p) {
-				StrSize = ObjSize_p - 1;
-			}
-		}
-
-		if (pSrcData_p != NULL) {
-			// copy data
-			EPL_MEMCPY(pDstData_p, pSrcData_p, ObjSize_p);
-
-			if (ObjType_p == kEplObdTypVString) {
-				((char *)pDstData_p)[StrSize] = '\0';
-			}
-		}
-	}
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdIsNumericalIntern()
-//
-// Description: function checks if a entry is numerical or not
-//
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_ = Instancepointer
-//              uiIndex_p           = Index
-//              uiSubIndex_p        = Subindex
-//              pfEntryNumerical_p  = pointer to BOOL for returnvalue
-//                                  -> TRUE if entry a numerical value
-//                                  -> FALSE if entry not a numerical value
-//
-// Return:      tEplKernel = Errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplObdIsNumericalIntern(tEplObdSubEntryPtr pObdSubEntry_p,
-					  BOOL * pfEntryNumerical_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// get Type
-	if ((pObdSubEntry_p->m_Type == kEplObdTypVString)
-	    || (pObdSubEntry_p->m_Type == kEplObdTypOString)
-	    || (pObdSubEntry_p->m_Type == kEplObdTypDomain)) {	// not numerical types
-		*pfEntryNumerical_p = FALSE;
-	} else {		// numerical types
-		*pfEntryNumerical_p = TRUE;
-	}
-
-	return Ret;
-
-}
-
-// -------------------------------------------------------------------------
-// function to classify object type (fixed/non fixed)
-// -------------------------------------------------------------------------
-
-// ----------------------------------------------------------------------------
-// Function:    EplObdCallStoreCallback()
-//
-// Description: checks address to callback function and calles it when unequal
-//              to NULL
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_ = (instance pointer)
-//              pCbStoreParam_p        = address to callback parameters
-//
-// Returns:     tEplKernel             = error code
-// ----------------------------------------------------------------------------
-#if (EPL_OBD_USE_STORE_RESTORE != FALSE)
-static tEplKernel EplObdCallStoreCallback(EPL_MCO_DECL_INSTANCE_PTR_
-					  tEplObdCbStoreParam *
-					  pCbStoreParam_p)
-{
-
-	tEplKernel Ret = kEplSuccessful;
-
-	ASSERT(pCbStoreParam_p != NULL);
-
-	// check if function pointer is NULL - if so, no callback should be called
-	if (EPL_MCO_GLB_VAR(m_fpStoreLoadObjCallback) != NULL) {
-		Ret =
-		    EPL_MCO_GLB_VAR(m_fpStoreLoadObjCallback)
-		    (EPL_MCO_INSTANCE_PARAM_IDX_()
-		     pCbStoreParam_p);
-	}
-
-	return Ret;
-
-}
-#endif // (EPL_OBD_USE_STORE_RESTORE != FALSE)
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdGetObjectDataPtrIntern()
-//
-// Description: Function gets the data pointer of an object.
-//              It returnes the current data pointer. But if object is an
-//              constant object it returnes the default pointer.
-//
-// Parameters:  pSubindexEntry_p = pointer to subindex entry
-//
-// Return:      void *    = pointer to object data
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-void *EplObdGetObjectDataPtrIntern(tEplObdSubEntryPtr pSubindexEntry_p)
-{
-
-	void *pData;
-	tEplObdAccess Access;
-
-	ASSERTMSG(pSubindexEntry_p != NULL,
-		  "EplObdGetObjectDataPtrIntern(): pointer to SubEntry not valid!\n");
-
-	// there are are some objects whose data pointer has to get from other structure
-	// get access type for this object
-	Access = pSubindexEntry_p->m_Access;
-
-	// If object has access type = const,
-	// for data only exists default values.
-	if ((Access & kEplObdAccConst) != 0) {
-		// The pointer to defualt value can be received from ObdGetObjectDefaultPtr()
-		pData = ((void *)EplObdGetObjectDefaultPtr(pSubindexEntry_p));
-	} else {
-		// The pointer to current value can be received from ObdGetObjectCurrentPtr()
-		pData = ((void *)EplObdGetObjectCurrentPtr(pSubindexEntry_p));
-	}
-
-	return pData;
-
-}
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-// EOF
diff --git a/drivers/staging/epl/EplObd.h b/drivers/staging/epl/EplObd.h
deleted file mode 100644
index 6bb5a27..0000000
--- a/drivers/staging/epl/EplObd.h
+++ /dev/null
@@ -1,456 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for api function of EplOBD-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObd.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Microsoft VC7
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/02 k.t.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPLOBD_H_
-#define _EPLOBD_H_
-
-#include "EplInc.h"
-
-// ============================================================================
-// defines
-// ============================================================================
-
-#define EPL_OBD_TABLE_INDEX_END     0xFFFF
-
-// for the usage of BOOLEAN in OD
-#define OBD_TRUE    0x01
-#define OBD_FALSE   0x00
-
-// default OD index for Node id
-#define EPL_OBD_NODE_ID_INDEX               0x1F93
-// default subindex for NodeId in OD
-#define EPL_OBD_NODE_ID_SUBINDEX            0x01
-// default subindex for NodeIDByHW_BOOL
-#define EPL_OBD_NODE_ID_HWBOOL_SUBINDEX     0x02
-
-// ============================================================================
-// enums
-// ============================================================================
-
-// directions for access to object dictionary
-typedef enum {
-	kEplObdDirInit = 0x00,	// initialising after power on
-	kEplObdDirStore = 0x01,	// store all object values to non volatile memory
-	kEplObdDirLoad = 0x02,	// load all object values from non volatile memory
-	kEplObdDirRestore = 0x03,	// deletes non volatile memory (restore)
-	kEplObdDirOBKCheck = 0xFF	// reserved
-} tEplObdDir;
-
-// commands for store
-typedef enum {
-	kEplObdCommNothing = 0x00,
-	kEplObdCommOpenWrite = 0x01,
-	kEplObdCommWriteObj = 0x02,
-	kEplObdCommCloseWrite = 0x03,
-	kEplObdCommOpenRead = 0x04,
-	kEplObdCommReadObj = 0x05,
-	kEplObdCommCloseRead = 0x06,
-	kEplObdCommClear = 0x07,
-	kEplObdCommUnknown = 0xFF
-} tEplObdCommand;
-
-//-----------------------------------------------------------------------------------------------------------
-// events of object callback function
-typedef enum {
-//                                                                                                      m_pArg points to
-//                                                                                                    ---------------------
-	kEplObdEvCheckExist = 0x06,	// checking if object does exist (reading and writing)    NULL
-	kEplObdEvPreRead = 0x00,	// before reading an object                               source data buffer in OD
-	kEplObdEvPostRead = 0x01,	// after reading an object                                destination data buffer from caller
-	kEplObdEvWrStringDomain = 0x07,	// event for changing string/domain data pointer or size  struct tEplObdVStringDomain in RAM
-	kEplObdEvInitWrite = 0x04,	// initializes writing an object (checking object size)   size of object in OD (tEplObdSize)
-	kEplObdEvPreWrite = 0x02,	// before writing an object                               source data buffer from caller
-	kEplObdEvPostWrite = 0x03,	// after writing an object                                destination data buffer in OD
-//    kEplObdEvAbortSdo              = 0x05     // after an abort of an SDO transfer
-
-} tEplObdEvent;
-
-// part of OD (bit oriented)
-typedef unsigned int tEplObdPart;
-
-#define kEplObdPartNo          0x00	// nothing
-#define kEplObdPartGen         0x01	//  part      (0x1000 - 0x1FFF)
-#define kEplObdPartMan         0x02	// manufacturer part (0x2000 - 0x5FFF)
-#define kEplObdPartDev         0x04	// device part       (0x6000 - 0x9FFF)
-#define kEplObdPartUsr         0x08	// dynamic part e.g. for ICE61131-3
-
-// combinations
-#define kEplObdPartApp         (              kEplObdPartMan | kEplObdPartDev | kEplObdPartUsr)	// manufacturer and device part (0x2000 - 0x9FFF) and user OD
-#define kEplObdPartAll         (kEplObdPartGen | kEplObdPartMan | kEplObdPartDev | kEplObdPartUsr)	// whole OD
-
-//-----------------------------------------------------------------------------------------------------------
-// access types for objects
-// must be a difine because bit-flags
-typedef unsigned int tEplObdAccess;
-
-#define kEplObdAccRead         0x01	// object can be read
-#define kEplObdAccWrite        0x02	// object can be written
-#define kEplObdAccConst        0x04	// object contains a constant value
-#define kEplObdAccPdo          0x08	// object can be mapped in a PDO
-#define kEplObdAccArray        0x10	// object contains an array of numerical values
-#define kEplObdAccRange        0x20	// object contains lower and upper limit
-#define kEplObdAccVar          0x40	// object data is placed in application
-#define kEplObdAccStore        0x80	// object data can be stored to non volatile memory
-
-// combinations (not all combinations are required)
-#define kEplObdAccR            (0            | 0          | 0            | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccW            (0            | 0          | 0            | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccRW           (0            | 0          | 0            | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccCR           (0            | 0          | 0            | 0          | kEplObdAccConst | 0            | kEplObdAccRead)
-#define kEplObdAccGR           (0            | 0          | kEplObdAccRange | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccGW           (0            | 0          | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccGRW          (0            | 0          | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccVR           (0            | kEplObdAccVar | 0            | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccVW           (0            | kEplObdAccVar | 0            | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccVRW          (0            | kEplObdAccVar | 0            | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccVPR          (0            | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccVPW          (0            | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccVPRW         (0            | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccVGR          (0            | kEplObdAccVar | kEplObdAccRange | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccVGW          (0            | kEplObdAccVar | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccVGRW         (0            | kEplObdAccVar | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccVGPR         (0            | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccVGPW         (0            | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccVGPRW        (0            | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSR           (kEplObdAccStore | 0          | 0            | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSW           (kEplObdAccStore | 0          | 0            | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSRW          (kEplObdAccStore | 0          | 0            | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSCR          (kEplObdAccStore | 0          | 0            | 0          | kEplObdAccConst | 0            | kEplObdAccRead)
-#define kEplObdAccSGR          (kEplObdAccStore | 0          | kEplObdAccRange | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSGW          (kEplObdAccStore | 0          | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSGRW         (kEplObdAccStore | 0          | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSVR          (kEplObdAccStore | kEplObdAccVar | 0            | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSVW          (kEplObdAccStore | kEplObdAccVar | 0            | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSVRW         (kEplObdAccStore | kEplObdAccVar | 0            | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSVPR         (kEplObdAccStore | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSVPW         (kEplObdAccStore | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSVPRW        (kEplObdAccStore | kEplObdAccVar | 0            | kEplObdAccPdo | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSVGR         (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0          | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSVGW         (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSVGRW        (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | 0          | 0            | kEplObdAccWrite | kEplObdAccRead)
-#define kEplObdAccSVGPR        (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | 0            | kEplObdAccRead)
-#define kEplObdAccSVGPW        (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | kEplObdAccWrite | 0          )
-#define kEplObdAccSVGPRW       (kEplObdAccStore | kEplObdAccVar | kEplObdAccRange | kEplObdAccPdo | 0            | kEplObdAccWrite | kEplObdAccRead)
-
-typedef unsigned int tEplObdSize;	// For all objects as objects size are used an unsigned int.
-
-// -------------------------------------------------------------------------
-// types for data types defined in DS301
-// -------------------------------------------------------------------------
-
-// types of objects in object dictionary
-// DS-301 defines these types as u16
-typedef enum {
-// types which are always supported
-	kEplObdTypBool = 0x0001,
-
-	kEplObdTypInt8 = 0x0002,
-	kEplObdTypInt16 = 0x0003,
-	kEplObdTypInt32 = 0x0004,
-	kEplObdTypUInt8 = 0x0005,
-	kEplObdTypUInt16 = 0x0006,
-	kEplObdTypUInt32 = 0x0007,
-	kEplObdTypReal32 = 0x0008,
-	kEplObdTypVString = 0x0009,
-	kEplObdTypOString = 0x000A,
-	kEplObdTypDomain = 0x000F,
-
-	kEplObdTypInt24 = 0x0010,
-	kEplObdTypUInt24 = 0x0016,
-
-	kEplObdTypReal64 = 0x0011,
-	kEplObdTypInt40 = 0x0012,
-	kEplObdTypInt48 = 0x0013,
-	kEplObdTypInt56 = 0x0014,
-	kEplObdTypInt64 = 0x0015,
-	kEplObdTypUInt40 = 0x0018,
-	kEplObdTypUInt48 = 0x0019,
-	kEplObdTypUInt56 = 0x001A,
-	kEplObdTypUInt64 = 0x001B,
-	kEplObdTypTimeOfDay = 0x000C,
-	kEplObdTypTimeDiff = 0x000D
-} tEplObdType;
-// other types are not supported in this version
-
-// -------------------------------------------------------------------------
-// types for data types defined in DS301
-// -------------------------------------------------------------------------
-
-typedef unsigned char tEplObdBoolean;	// 0001
-typedef signed char tEplObdInteger8;	// 0002
-typedef signed short int tEplObdInteger16;	// 0003
-typedef signed long tEplObdInteger32;	// 0004
-typedef unsigned char tEplObdUnsigned8;	// 0005
-typedef unsigned short int tEplObdUnsigned16;	// 0006
-typedef unsigned long tEplObdUnsigned32;	// 0007
-typedef float tEplObdReal32;	// 0008
-typedef unsigned char tEplObdDomain;	// 000F
-typedef signed long tEplObdInteger24;	// 0010
-typedef unsigned long tEplObdUnsigned24;	// 0016
-
-typedef s64 tEplObdInteger40;	// 0012
-typedef s64 tEplObdInteger48;	// 0013
-typedef s64 tEplObdInteger56;	// 0014
-typedef s64 tEplObdInteger64;	// 0015
-
-typedef u64 tEplObdUnsigned40;	// 0018
-typedef u64 tEplObdUnsigned48;	// 0019
-typedef u64 tEplObdUnsigned56;	// 001A
-typedef u64 tEplObdUnsigned64;	// 001B
-
-typedef double tEplObdReal64;	// 0011
-
-typedef tTimeOfDay tEplObdTimeOfDay;	// 000C
-typedef tTimeOfDay tEplObdTimeDifference;	// 000D
-
-// -------------------------------------------------------------------------
-// structur for defining a variable
-// -------------------------------------------------------------------------
-// -------------------------------------------------------------------------
-typedef enum {
-	kVarValidSize = 0x01,
-	kVarValidData = 0x02,
-//    kVarValidCallback       = 0x04,
-//    kVarValidArg            = 0x08,
-
-	kVarValidAll = 0x03	// currently only size and data are implemented and used
-} tEplVarParamValid;
-
-typedef tEplKernel(*tEplVarCallback) (CCM_DECL_INSTANCE_HDL_ void *pParam_p);
-
-typedef struct {
-	tEplVarParamValid m_ValidFlag;
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubindex;
-	tEplObdSize m_Size;
-	void *m_pData;
-//    tEplVarCallback     m_fpCallback;
-//    void *       m_pArg;
-
-} tEplVarParam;
-
-typedef struct {
-	void *m_pData;
-	tEplObdSize m_Size;
-/*
-    #if (EPL_PDO_USE_STATIC_MAPPING == FALSE)
-        tEplVarCallback    m_fpCallback;
-        void *   m_pArg;
-    #endif
-*/
-} tEplObdVarEntry;
-
-typedef struct {
-	tEplObdSize m_Size;
-	u8 *m_pString;
-
-} tEplObdOString;		// 000C
-
-typedef struct {
-	tEplObdSize m_Size;
-	char *m_pString;
-} tEplObdVString;		// 000D
-
-typedef struct {
-	tEplObdSize m_Size;
-	char *m_pDefString;	// $$$ d.k. it is unused, so we could delete it
-	char *m_pString;
-
-} tEplObdVStringDef;
-
-typedef struct {
-	tEplObdSize m_Size;
-	u8 *m_pDefString;	// $$$ d.k. it is unused, so we could delete it
-	u8 *m_pString;
-
-} tEplObdOStringDef;
-
-//r.d. parameter struct for changing object size and/or pointer to data of Strings or Domains
-typedef struct {
-	tEplObdSize m_DownloadSize;	// download size from SDO or APP
-	tEplObdSize m_ObjSize;	// current object size from OD - should be changed from callback function
-	void *m_pData;		// current object ptr  from OD - should be changed from callback function
-
-} tEplObdVStringDomain;		// 000D
-
-// ============================================================================
-// types
-// ============================================================================
-// -------------------------------------------------------------------------
-// subindexstruct
-// -------------------------------------------------------------------------
-
-// Change not the order for this struct!!!
-typedef struct {
-	unsigned int m_uiSubIndex;
-	tEplObdType m_Type;
-	tEplObdAccess m_Access;
-	void *m_pDefault;
-	void *m_pCurrent;	// points always to RAM
-
-} tEplObdSubEntry;
-
-// r.d.: has always to be  because new OBD-Macros for arrays
-typedef tEplObdSubEntry *tEplObdSubEntryPtr;
-
-// -------------------------------------------------------------------------
-// callback function for objdictionary modul
-// -------------------------------------------------------------------------
-
-// parameters for callback function
-typedef struct {
-	tEplObdEvent m_ObdEvent;
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubIndex;
-	void *m_pArg;
-	u32 m_dwAbortCode;
-
-} tEplObdCbParam;
-
-// define type for callback function: pParam_p points to tEplObdCbParam
-typedef tEplKernel(*tEplObdCallback) (CCM_DECL_INSTANCE_HDL_ tEplObdCbParam *pParam_p);
-
-// do not change the order for this struct!!!
-
-typedef struct {
-	unsigned int m_uiIndex;
-	tEplObdSubEntryPtr m_pSubIndex;
-	unsigned int m_uiCount;
-	tEplObdCallback m_fpCallback;	// function is called back if object access
-
-} tEplObdEntry;
-
-// allways  pointer
-typedef tEplObdEntry *tEplObdEntryPtr;
-
-// -------------------------------------------------------------------------
-// structur to initialize OBD module
-// -------------------------------------------------------------------------
-
-typedef struct {
-	tEplObdEntryPtr m_pPart;
-	tEplObdEntryPtr m_pManufacturerPart;
-	tEplObdEntryPtr m_pDevicePart;
-
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-
-	tEplObdEntryPtr m_pUserPart;
-
-#endif
-
-} tEplObdInitParam;
-
-// -------------------------------------------------------------------------
-// structur for parameters of STORE RESTORE command
-// -------------------------------------------------------------------------
-
-typedef struct {
-	tEplObdCommand m_bCommand;
-	tEplObdPart m_bCurrentOdPart;
-	void *m_pData;
-	tEplObdSize m_ObjSize;
-
-} tEplObdCbStoreParam;
-
-typedef tEplKernel(*tInitTabEntryCallback) (void *pTabEntry_p, unsigned int uiObjIndex_p);
-
-typedef tEplKernel(*tEplObdStoreLoadObjCallback) (CCM_DECL_INSTANCE_HDL_ tEplObdCbStoreParam *pCbStoreParam_p);
-
-// -------------------------------------------------------------------------
-// this stucture is used for parameters for function ObdInitModuleTab()
-// -------------------------------------------------------------------------
-typedef struct {
-	unsigned int m_uiLowerObjIndex;	// lower limit of ObjIndex
-	unsigned int m_uiUpperObjIndex;	// upper limit of ObjIndex
-	tInitTabEntryCallback m_fpInitTabEntry;	// will be called if ObjIndex was found
-	void *m_pTabBase;	// base address of table
-	unsigned int m_uiEntrySize;	// size of table entry      // 25-feb-2005 r.d.: expansion from u8 to u16 necessary for PDO bit mapping
-	unsigned int m_uiMaxEntries;	// max. tabel entries
-
-} tEplObdModulTabParam;
-
-//-------------------------------------------------------------------
-//  enum for function EplObdSetNodeId
-//-------------------------------------------------------------------
-typedef enum {
-	kEplObdNodeIdUnknown = 0x00,	// unknown how the node id was set
-	kEplObdNodeIdSoftware = 0x01,	// node id set by software
-	kEplObdNodeIdHardware = 0x02	// node id set by hardware
-} tEplObdNodeIdType;
-
-// ============================================================================
-// global variables
-// ============================================================================
-
-// ============================================================================
-// public functions
-// ============================================================================
-
-#endif // #ifndef _EPLOBD_H_
diff --git a/drivers/staging/epl/EplObdMacro.h b/drivers/staging/epl/EplObdMacro.h
deleted file mode 100644
index fc325bf..0000000
--- a/drivers/staging/epl/EplObdMacro.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for macros of EplOBD-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObdMacro.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/05 k.t.:   start of the implementation
-                    -> based on CANopen ObdMacro.h
-
-****************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#if defined (EPL_OBD_DEFINE_MACRO)
-
-    //-------------------------------------------------------------------------------------------
-#if defined (EPL_OBD_CREATE_ROM_DATA)
-
-//        #pragma message ("EPL_OBD_CREATE_ROM_DATA")
-
-#define EPL_OBD_BEGIN()                                                         static  u32  dwObd_OBK_g = 0x0000;
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()
-#define EPL_OBD_BEGIN_PART_DEVICE()
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)         static  tEplObdUnsigned8    xDef##ind##_0x00_g = (cnt); \
-                                                                                        static  dtyp  xDef##ind##_0x01_g = (def);
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)      static  tEplObdUnsigned8    xDef##ind##_0x00_g = (cnt); \
-                                                                                        static  dtyp  xDef##ind##_0x01_g = (def);
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)   static  tEplObdUnsigned8    xDef##ind##_0x00_g = (cnt);
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)                 static  dtyp  xDef##ind##_##sub##_g        = val;
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)     static  dtyp  xDef##ind##_##sub##_g[3]     = {val,low,high};
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)                 static char  szCur##ind##_##sub##_g[size+1]; \
-                                                                                        static  tEplObdVStringDef  xDef##ind##_##sub##_g = {size, val, szCur##ind##_##sub##_g};
-
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)                     static  u8  bCur##ind##_##sub##_g[size]; \
-                                                                                        static  tEplObdOStringDef  xDef##ind##_##sub##_g = {size, ((u8*)""), bCur##ind##_##sub##_g};
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)             static  dtyp  xDef##ind##_##sub##_g        = val;
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high) static  dtyp  xDef##ind##_##sub##_g[3]     = {val,low,high};
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)
-
-//-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_CREATE_RAM_DATA)
-
-//        #pragma message ("EPL_OBD_CREATE_RAM_DATA")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()
-#define EPL_OBD_BEGIN_PART_DEVICE()
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)         static dtyp         axCur##ind##_g[cnt];
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)      static tEplObdVarEntry aVarEntry##ind##_g[cnt];
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)   static tEplObdVarEntry aVarEntry##ind##_g[cnt];
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)                 static dtyp         xCur##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)     static dtyp         xCur##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)                 static tEplObdVString  xCur##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)                     static tEplObdOString  xCur##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)              static dtyp         xCur##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)                           static tEplObdVarEntry VarEntry##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)             static tEplObdVarEntry VarEntry##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high) static tEplObdVarEntry VarEntry##ind##_##sub##_g;
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)          static tEplObdVarEntry VarEntry##ind##_##sub##_g;
-
-    //-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_CREATE_SUBINDEX_TAB)
-
-//        #pragma message ("EPL_OBD_CREATE_SUBINDEX_TAB")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()
-#define EPL_OBD_BEGIN_PART_DEVICE()
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)                                   static tEplObdSubEntry aObdSubEntry##ind##Ram_g[cnt]= {
-#define EPL_OBD_END_INDEX(ind)                                                  EPL_OBD_END_SUBINDEX()};
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)         static tEplObdSubEntry aObdSubEntry##ind##Ram_g[]= { \
-                                                                                        {0, kEplObdTypUInt8, kEplObdAccCR,          &xDef##ind##_0x00_g,   NULL}, \
-                                                                                        {1, typ,          (acc)|kEplObdAccArray, &xDef##ind##_0x01_g,   &axCur##ind##_g[0]}, \
-                                                                                        EPL_OBD_END_SUBINDEX()};
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)      static tEplObdSubEntry aObdSubEntry##ind##Ram_g[]= { \
-                                                                                        {0, kEplObdTypUInt8, kEplObdAccCR,                     &xDef##ind##_0x00_g,   NULL}, \
-                                                                                        {1, typ,          (acc)|kEplObdAccArray|kEplObdAccVar, &xDef##ind##_0x01_g,   &aVarEntry##ind##_g[0]}, \
-                                                                                        EPL_OBD_END_SUBINDEX()};
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)   static tEplObdSubEntry aObdSubEntry##ind##Ram_g[]= { \
-                                                                                        {0, kEplObdTypUInt8, kEplObdAccCR,                     &xDef##ind##_0x00_g,   NULL}, \
-                                                                                        {1, typ,          (acc)|kEplObdAccArray|kEplObdAccVar, NULL,                  &aVarEntry##ind##_g[0]}, \
-                                                                                        EPL_OBD_END_SUBINDEX()};
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)                 {sub,typ,            (acc),                        &xDef##ind##_##sub##_g,   &xCur##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)     {sub,typ,            (acc)|kEplObdAccRange,           &xDef##ind##_##sub##_g[0],&xCur##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)              {sub,typ,            (acc),                        NULL,   &xCur##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)                 {sub,kEplObdTypVString,(acc)/*|kEplObdAccVar*/,         &xDef##ind##_##sub##_g,   &xCur##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)                     {sub,kEplObdTypOString,(acc)/*|kEplObdAccVar*/,         &xDef##ind##_##sub##_g,   &xCur##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)                           {sub,kEplObdTypDomain, (acc)|kEplObdAccVar,             NULL,                     &VarEntry##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)             {sub,typ,           (acc)|kEplObdAccVar,             &xDef##ind##_##sub##_g,   &VarEntry##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high) {sub,typ,           (acc)|kEplObdAccVar|kEplObdAccRange,&xDef##ind##_##sub##_g[0],&VarEntry##ind##_##sub##_g},
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)          {sub,typ,           (acc)|kEplObdAccVar,             NULL,    &VarEntry##ind##_##sub##_g},
-
-    //-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_CREATE_INDEX_TAB)
-
-//        #pragma message ("EPL_OBD_CREATE_INDEX_TAB")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()                                                   static  tEplObdEntry  aObdTab_g[]      = {
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()                                       static  tEplObdEntry  aObdTabManufacturer_g[] = {
-#define EPL_OBD_BEGIN_PART_DEVICE()                                             static  tEplObdEntry  aObdTabDevice_g[]       = {
-#define EPL_OBD_END_PART()                                                      {EPL_OBD_TABLE_INDEX_END,(tEplObdSubEntryPtr)&dwObd_OBK_g,0,NULL}};
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)                                   {ind,(tEplObdSubEntryPtr)&aObdSubEntry##ind##Ram_g[0],cnt,(tEplObdCallback)call},
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)         {ind,(tEplObdSubEntryPtr)&aObdSubEntry##ind##Ram_g[0],(cnt)+1,(tEplObdCallback)call},
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)      {ind,(tEplObdSubEntryPtr)&aObdSubEntry##ind##Ram_g[0],(cnt)+1,(tEplObdCallback)call},
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)   {ind,(tEplObdSubEntryPtr)&aObdSubEntry##ind##Ram_g[0],(cnt)+1,(tEplObdCallback)call},
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)
-
-	    //-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_CREATE_INIT_FUNCTION)
-
-//        #pragma message ("EPL_OBD_CREATE_INIT_FUNCTION")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()                                                   pInitParam->m_pPart      = (tEplObdEntryPtr) &aObdTab_g[0];
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()                                       pInitParam->m_pManufacturerPart = (tEplObdEntryPtr) &aObdTabManufacturer_g[0];
-#define EPL_OBD_BEGIN_PART_DEVICE()                                             pInitParam->m_pDevicePart       = (tEplObdEntryPtr) &aObdTabDevice_g[0];
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)
-
-    //-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_CREATE_INIT_SUBINDEX)
-
-//        #pragma message ("EPL_OBD_CREATE_INIT_SUBINDEX")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()
-#define EPL_OBD_BEGIN_PART_DEVICE()
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)	//CCM_SUBINDEX_RAM_ONLY (EPL_MEMCPY (&aObdSubEntry##ind##Ram_g[0],&aObdSubEntry##ind##Rom_g[0],sizeof(aObdSubEntry##ind##Ram_g)));
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)	//EPL_MEMCPY (&aObdSubEntry##ind##Ram_g[0],&aObdSubEntry##ind##Rom_g[0],sizeof(aObdSubEntry##ind##Ram_g));
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)	//EPL_MEMCPY (&aObdSubEntry##ind##Ram_g[0],&aObdSubEntry##ind##Rom_g[0],sizeof(aObdSubEntry##ind##Ram_g));
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)	//EPL_MEMCPY (&aObdSubEntry##ind##Ram_g[0],&aObdSubEntry##ind##Rom_g[0],sizeof(aObdSubEntry##ind##Ram_g));
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,size,val)
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)
-
-    //-------------------------------------------------------------------------------------------
-#else
-
-//        #pragma message ("ELSE OF DEFINE")
-
-#define EPL_OBD_BEGIN()
-#define EPL_OBD_END()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_PART_GENERIC()
-#define EPL_OBD_BEGIN_PART_MANUFACTURER()
-#define EPL_OBD_BEGIN_PART_DEVICE()
-#define EPL_OBD_END_PART()
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_BEGIN_INDEX_RAM(ind,cnt,call)
-#define EPL_OBD_END_INDEX(ind)
-#define EPL_OBD_RAM_INDEX_RAM_ARRAY(ind,cnt,call,typ,acc,dtyp,name,def)
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY(ind,cnt,call,typ,acc,dtyp,name,def)
-#define EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT(ind,cnt,call,typ,acc,dtyp,name)
-
-	//---------------------------------------------------------------------------------------
-#define EPL_OBD_SUBINDEX_RAM_VAR(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_VAR_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_VSTRING(ind,sub,acc,name,sizes,val)
-#define EPL_OBD_SUBINDEX_RAM_OSTRING(ind,sub,acc,name,size)
-#define EPL_OBD_SUBINDEX_RAM_VAR_NOINIT(ind,sub,typ,acc,dtyp,name)
-#define EPL_OBD_SUBINDEX_RAM_DOMAIN(ind,sub,acc,name)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF(ind,sub,typ,acc,dtyp,name,val)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_RG(ind,sub,typ,acc,dtyp,name,val,low,high)
-#define EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT(ind,sub,typ,acc,dtyp,name)
-
-#endif
-
-    //-------------------------------------------------------------------------------------------
-#elif defined (EPL_OBD_UNDEFINE_MACRO)
-
-//    #pragma message ("EPL_OBD_UNDEFINE_MACRO")
-
-#undef EPL_OBD_BEGIN
-#undef EPL_OBD_END
-
-    //---------------------------------------------------------------------------------------
-#undef EPL_OBD_BEGIN_PART_GENERIC
-#undef EPL_OBD_BEGIN_PART_MANUFACTURER
-#undef EPL_OBD_BEGIN_PART_DEVICE
-#undef EPL_OBD_END_PART
-
-    //---------------------------------------------------------------------------------------
-#undef EPL_OBD_BEGIN_INDEX_RAM
-#undef EPL_OBD_END_INDEX
-#undef EPL_OBD_RAM_INDEX_RAM_ARRAY
-#undef EPL_OBD_RAM_INDEX_RAM_VARARRAY
-#undef EPL_OBD_RAM_INDEX_RAM_VARARRAY_NOINIT
-
-    //---------------------------------------------------------------------------------------
-#undef EPL_OBD_SUBINDEX_RAM_VAR
-#undef EPL_OBD_SUBINDEX_RAM_VAR_RG
-#undef EPL_OBD_SUBINDEX_RAM_VSTRING
-#undef EPL_OBD_SUBINDEX_RAM_OSTRING
-#undef EPL_OBD_SUBINDEX_RAM_VAR_NOINIT
-#undef EPL_OBD_SUBINDEX_RAM_DOMAIN
-#undef EPL_OBD_SUBINDEX_RAM_USERDEF
-#undef EPL_OBD_SUBINDEX_RAM_USERDEF_RG
-#undef EPL_OBD_SUBINDEX_RAM_USERDEF_NOINIT
-
-#else
-
-#error "nothing defined"
-
-#endif
diff --git a/drivers/staging/epl/EplObdkCal.c b/drivers/staging/epl/EplObdkCal.c
deleted file mode 100644
index 02bd722..0000000
--- a/drivers/staging/epl/EplObdkCal.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for communication abstraction layer
-                for the Epl-Obd-Kernelspace-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObdkCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-// EOF
diff --git a/drivers/staging/epl/EplObdu.c b/drivers/staging/epl/EplObdu.c
deleted file mode 100644
index 5f1d998..0000000
--- a/drivers/staging/epl/EplObdu.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for Epl-Obd-Userspace-module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObdu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "user/EplObdu.h"
-#include "user/EplObduCal.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduWriteEntry()
-//
-// Description: Function writes data to an OBD entry. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduWriteEntry(unsigned int uiIndex_p,
-			     unsigned int uiSubIndex_p,
-			     void *pSrcData_p, tEplObdSize Size_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalWriteEntry(uiIndex_p, uiSubIndex_p, pSrcData_p, Size_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduReadEntry()
-//
-// Description: The function reads an object entry. The application
-//              can always read the data even if attrib kEplObdAccRead
-//              is not set. The attrib is only checked up for SDO transfer.
-//
-// Parameters:  uiIndex_p       = Index oof the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel      =   errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduReadEntry(unsigned int uiIndex_p,
-			    unsigned int uiSubIndex_p,
-			    void *pDstData_p,
-			    tEplObdSize *pSize_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalReadEntry(uiIndex_p, uiSubIndex_p, pDstData_p, pSize_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdAccessOdPart()
-//
-// Description: restores default values of one part of OD
-//
-// Parameters:  ObdPart_p       = od-part to reset
-//              Direction_p     = directory flag for
-//
-// Return:      tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduAccessOdPart(tEplObdPart ObdPart_p, tEplObdDir Direction_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalAccessOdPart(ObdPart_p, Direction_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduDefineVar()
-//
-// Description: defines a variable in OD
-//
-// Parameters:  pEplVarParam_p = varentry
-//
-// Return:      tEplKernel  =   errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduDefineVar(tEplVarParam *pVarParam_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalDefineVar(pVarParam_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduGetObjectDataPtr()
-//
-// Description: It returnes the current data pointer. But if object is an
-//              constant object it returnes the default pointer.
-//
-// Parameters:  uiIndex_p    =   Index of the entry
-//              uiSubindex_p =   Subindex of the entry
-//
-// Return:      void *    = pointer to object data
-//
-// State:
-//
-//---------------------------------------------------------------------------
-void *EplObduGetObjectDataPtr(unsigned int uiIndex_p, unsigned int uiSubIndex_p)
-{
-	void *pData;
-
-	pData = EplObduCalGetObjectDataPtr(uiIndex_p, uiSubIndex_p);
-
-	return pData;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduRegisterUserOd()
-//
-// Description: function registers the user OD
-//
-// Parameters:  pUserOd_p   =pointer to user ODd
-//
-// Return:     tEplKernel = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-tEplKernel EplObduRegisterUserOd(tEplObdEntryPtr pUserOd_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalRegisterUserOd(pUserOd_p);
-
-	return Ret;
-
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduInitVarEntry()
-//
-// Description: function to initialize VarEntry dependened on object type
-//
-// Parameters:  pVarEntry_p = pointer to var entry structure
-//              bType_p     = object type
-//              ObdSize_p   = size of object data
-//
-// Returns:     none
-//
-// State:
-//
-//---------------------------------------------------------------------------
-void EplObduInitVarEntry(tEplObdVarEntry *pVarEntry_p, u8 bType_p, tEplObdSize ObdSize_p)
-{
-	EplObduCalInitVarEntry(pVarEntry_p, bType_p, ObdSize_p);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduGetDataSize()
-//
-// Description: function to initialize VarEntry dependened on object type
-//
-//              gets the data size of an object
-//              for string objects it returnes the string length
-//
-// Parameters:  uiIndex_p   =   Index
-//              uiSubIndex_p=   Subindex
-//
-// Return:      tEplObdSize
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplObdSize EplObduGetDataSize(unsigned int uiIndex_p, unsigned int uiSubIndex_p)
-{
-	tEplObdSize Size;
-
-	Size = EplObduCalGetDataSize(uiIndex_p, uiSubIndex_p);
-
-	return Size;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduGetNodeId()
-//
-// Description: function returns nodeid from entry 0x1F93
-//
-//
-// Parameters:
-//
-// Return:      unsigned int = Node Id
-//
-// State:
-//
-//---------------------------------------------------------------------------
-unsigned int EplObduGetNodeId(void)
-{
-	unsigned int uiNodeId;
-
-	uiNodeId = EplObduCalGetNodeId();
-
-	return uiNodeId;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduSetNodeId()
-//
-// Description: function sets nodeid in entry 0x1F93
-//
-//
-// Parameters:  uiNodeId_p  =   Node Id to set
-//              NodeIdType_p=   Type on which way the Node Id was set
-//
-// Return:      tEplKernel = Errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduSetNodeId(unsigned int uiNodeId_p, tEplObdNodeIdType NodeIdType_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalSetNodeId(uiNodeId_p, NodeIdType_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduGetAccessType()
-//
-// Description: Function returns accesstype of the entry
-//
-// Parameters:  uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pAccessTyp_p    =   pointer to buffer to store accesstyp
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduGetAccessType(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				tEplObdAccess *pAccessTyp_p)
-{
-	tEplObdAccess AccessType;
-
-	AccessType =
-	    EplObduCalGetAccessType(uiIndex_p, uiSubIndex_p, pAccessTyp_p);
-
-	return AccessType;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObdReaduEntryToLe()
-//
-// Description: The function reads an object entry from the byteoder
-//              of the system to the little endian byteorder for numeric values.
-//              For other types a normal read will be processed. This is usefull for
-//              the PDO and SDO module. The application
-//              can always read the data even if attrib kEplObdAccRead
-//              is not set. The attrib is only checked up for SDO transfer.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       = Index of the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduReadEntryToLe(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				void *pDstData_p,
-				tEplObdSize *pSize_p)
-{
-	tEplKernel Ret;
-
-	Ret =
-	    EplObduCalReadEntryToLe(uiIndex_p, uiSubIndex_p, pDstData_p,
-				    pSize_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduWriteEntryFromLe()
-//
-// Description: Function writes data to an OBD entry from a source with
-//              little endian byteorder to the od with system specuific
-//              byteorder. Not numeric values will only by copied. Strings
-//              are stored with added '\0' character.
-//
-// Parameters:  EPL_MCO_DECL_INSTANCE_PTR_
-//              uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduWriteEntryFromLe(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   void *pSrcData_p,
-				   tEplObdSize Size_p)
-{
-	tEplKernel Ret;
-
-	Ret =
-	    EplObduCalWriteEntryFromLe(uiIndex_p, uiSubIndex_p, pSrcData_p,
-				       Size_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduSearchVarEntry()
-//
-// Description: gets variable from OD
-//
-// Parameters:  uiIndex_p       =   index of the var entry to search
-//              uiSubindex_p    =   subindex of var entry to search
-//              ppVarEntry_p    =   pointer to the pointer to the varentry
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 tEplObdVarEntry **ppVarEntry_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplObduCalSearchVarEntry(uiIndex_p, uiSubindex_p, ppVarEntry_p);
-
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplObduCal.c b/drivers/staging/epl/EplObduCal.c
deleted file mode 100644
index 55612cf..0000000
--- a/drivers/staging/epl/EplObduCal.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for communication abstraction layer
-                for the Epl-Obd-Userspace-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObduCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-#include "EplInc.h"
-#include "user/EplObduCal.h"
-#include "kernel/EplObdk.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0) && (EPL_OBD_USE_KERNEL != FALSE)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalWriteEntry()
-//
-// Description: Function encapsulate access of function EplObdWriteEntry
-//
-// Parameters:  uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalWriteEntry(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				void *pSrcData_p, tEplObdSize Size_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdWriteEntry(uiIndex_p, uiSubIndex_p, pSrcData_p, Size_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalReadEntry()
-//
-// Description: Function encapsulate access of function EplObdReadEntry
-//
-// Parameters:  uiIndex_p       = Index oof the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel      =   errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalReadEntry(unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       void *pDstData_p, tEplObdSize *pSize_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdReadEntry(uiIndex_p, uiSubIndex_p, pDstData_p, pSize_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalAccessOdPart()
-//
-// Description: Function encapsulate access of function EplObdAccessOdPart
-//
-// Parameters:  ObdPart_p       = od-part to reset
-//              Direction_p     = directory flag for
-//
-// Return:      tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalAccessOdPart(tEplObdPart ObdPart_p, tEplObdDir Direction_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdAccessOdPart(ObdPart_p, Direction_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalDefineVar()
-//
-// Description: Function encapsulate access of function EplObdDefineVar
-//
-// Parameters:  pEplVarParam_p = varentry
-//
-// Return:      tEplKernel  =   errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalDefineVar(tEplVarParam *pVarParam_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdDefineVar(pVarParam_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalGetObjectDataPtr()
-//
-// Description: Function encapsulate access of function EplObdGetObjectDataPtr
-//
-// Parameters:  uiIndex_p    =   Index of the entry
-//              uiSubindex_p =   Subindex of the entry
-//
-// Return:      void *    = pointer to object data
-//
-// State:
-//
-//---------------------------------------------------------------------------
-void *EplObduCalGetObjectDataPtr(unsigned int uiIndex_p, unsigned int uiSubIndex_p)
-{
-	void *pData;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	pData = EplObdGetObjectDataPtr(uiIndex_p, uiSubIndex_p);
-#else
-	pData = NULL;
-#endif
-
-	return pData;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalRegisterUserOd()
-//
-// Description: Function encapsulate access of function EplObdRegisterUserOd
-//
-// Parameters:  pUserOd_p   = pointer to user OD
-//
-// Return:     tEplKernel = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if (defined (EPL_OBD_USER_OD) && (EPL_OBD_USER_OD != FALSE))
-tEplKernel EplObduCalRegisterUserOd(tEplObdEntryPtr pUserOd_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdRegisterUserOd(pUserOd_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalInitVarEntry()
-//
-// Description: Function encapsulate access of function EplObdInitVarEntry
-//
-// Parameters:  pVarEntry_p = pointer to var entry structure
-//              bType_p     = object type
-//              ObdSize_p   = size of object data
-//
-// Returns:     none
-//
-// State:
-//
-//---------------------------------------------------------------------------
-void EplObduCalInitVarEntry(tEplObdVarEntry *pVarEntry_p, u8 bType_p,
-			    tEplObdSize ObdSize_p)
-{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	EplObdInitVarEntry(pVarEntry_p, bType_p, ObdSize_p);
-#endif
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalGetDataSize()
-//
-// Description: Function encapsulate access of function EplObdGetDataSize
-//
-//              gets the data size of an object
-//              for string objects it returnes the string length
-//
-// Parameters:  uiIndex_p   =   Index
-//              uiSubIndex_p=   Subindex
-//
-// Return:      tEplObdSize
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplObdSize EplObduCalGetDataSize(unsigned int uiIndex_p,
-				  unsigned int uiSubIndex_p)
-{
-	tEplObdSize Size;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Size = EplObdGetDataSize(uiIndex_p, uiSubIndex_p);
-#else
-	Size = 0;
-#endif
-
-	return Size;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalGetNodeId()
-//
-// Description: Function encapsulate access of function EplObdGetNodeId
-//
-//
-// Parameters:
-//
-// Return:      unsigned int = Node Id
-//
-// State:
-//
-//---------------------------------------------------------------------------
-unsigned int EplObduCalGetNodeId(void)
-{
-	unsigned int uiNodeId;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	uiNodeId = EplObdGetNodeId();
-#else
-	uiNodeId = 0;
-#endif
-
-	return uiNodeId;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalSetNodeId()
-//
-// Description: Function encapsulate access of function EplObdSetNodeId
-//
-//
-// Parameters:  uiNodeId_p  =   Node Id to set
-//              NodeIdType_p=   Type on which way the Node Id was set
-//
-// Return:      tEplKernel = Errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalSetNodeId(unsigned int uiNodeId_p,
-			       tEplObdNodeIdType NodeIdType_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdSetNodeId(uiNodeId_p, NodeIdType_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalGetAccessType()
-//
-// Description: Function encapsulate access of function EplObdGetAccessType
-//
-// Parameters:  uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pAccessTyp_p    =   pointer to buffer to store accesstype
-//
-// Return:      tEplKernel      =   errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalGetAccessType(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   tEplObdAccess *pAccessTyp_p)
-{
-	tEplObdAccess AccesType;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	AccesType = EplObdGetAccessType(uiIndex_p, uiSubIndex_p, pAccessTyp_p);
-#else
-	AccesType = 0;
-#endif
-
-	return AccesType;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalReadEntryToLe()
-//
-// Description: Function encapsulate access of function EplObdReadEntryToLe
-//
-// Parameters:  uiIndex_p       = Index of the OD entry to read
-//              uiSubIndex_p    = Subindex to read
-//              pDstData_p      = pointer to the buffer for data
-//              Offset_p        = offset in data for read access
-//              pSize_p         = IN: Size of the buffer
-//                                OUT: number of readed Bytes
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalReadEntryToLe(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   void *pDstData_p,
-				   tEplObdSize *pSize_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdReadEntryToLe(uiIndex_p, uiSubIndex_p, pDstData_p, pSize_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalWriteEntryFromLe()
-//
-// Description: Function encapsulate access of function EplObdWriteEntryFromLe
-//
-// Parameters:  uiIndex_p       =   Index of the OD entry
-//              uiSubIndex_p    =   Subindex of the OD Entry
-//              pSrcData_p      =   Pointer to the data to write
-//              Size_p          =   Size of the data in Byte
-//
-// Return:      tEplKernel      =   Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalWriteEntryFromLe(unsigned int uiIndex_p,
-				      unsigned int uiSubIndex_p,
-				      void *pSrcData_p, tEplObdSize Size_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret =
-	    EplObdWriteEntryFromLe(uiIndex_p, uiSubIndex_p, pSrcData_p, Size_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplObduCalSearchVarEntry()
-//
-// Description: gets variable from OD
-//
-// Parameters:  uiIndex_p       =   index of the var entry to search
-//              uiSubindex_p    =   subindex of var entry to search
-//              ppVarEntry_p    =   pointer to the pointer to the varentry
-//
-// Return:      tEplKernel
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				    unsigned int uiSubindex_p,
-				    tEplObdVarEntry **ppVarEntry_p)
-{
-	tEplKernel Ret;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-	Ret = EplObdSearchVarEntry(uiIndex_p, uiSubindex_p, ppVarEntry_p);
-#else
-	Ret = kEplSuccessful;
-#endif
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplPdo.h b/drivers/staging/epl/EplPdo.h
deleted file mode 100644
index 0b3ad5b..0000000
--- a/drivers/staging/epl/EplPdo.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for PDO module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdo.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_PDO_H_
-#define _EPL_PDO_H_
-
-#include "EplInc.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// invalid PDO-NodeId
-#define EPL_PDO_INVALID_NODE_ID     0xFF
-// NodeId for PReq RPDO
-#define EPL_PDO_PREQ_NODE_ID        0x00
-// NodeId for PRes TPDO
-#define EPL_PDO_PRES_NODE_ID        0x00
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct {
-	void *m_pVar;
-	u16 m_wOffset;		// in Bits
-	u16 m_wSize;		// in Bits
-	BOOL m_fNumeric;	// numeric value -> use AMI functions
-
-} tEplPdoMapping;
-
-typedef struct {
-	unsigned int m_uiSizeOfStruct;
-	unsigned int m_uiPdoId;
-	unsigned int m_uiNodeId;
-	// 0xFF=invalid, RPDO: 0x00=PReq, localNodeId=PRes, remoteNodeId=PRes
-	//               TPDO: 0x00=PRes, MN: CnNodeId=PReq
-
-	BOOL m_fTxRx;
-	u8 m_bMappingVersion;
-	unsigned int m_uiMaxMappingEntries;	// maximum number of mapping entries, i.e. size of m_aPdoMapping
-	tEplPdoMapping m_aPdoMapping[1];
-
-} tEplPdoParam;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPL_PDO_H_
diff --git a/drivers/staging/epl/EplPdok.c b/drivers/staging/epl/EplPdok.c
deleted file mode 100644
index db9b3f0..0000000
--- a/drivers/staging/epl/EplPdok.c
+++ /dev/null
@@ -1,669 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for kernel PDO module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdok.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "kernel/EplPdok.h"
-#include "kernel/EplPdokCal.h"
-#include "kernel/EplEventk.h"
-#include "kernel/EplObdk.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) == 0)
-
-#error 'ERROR: Missing DLLk-Modul!'
-
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) == 0)
-
-#error 'ERROR: Missing OBDk-Modul!'
-
-#endif
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPL_PDOK_OBD_IDX_RX_COMM_PARAM  0x1400
-#define EPL_PDOK_OBD_IDX_RX_MAPP_PARAM  0x1600
-#define EPL_PDOK_OBD_IDX_TX_COMM_PARAM  0x1800
-#define EPL_PDOK_OBD_IDX_TX_MAPP_PARAM  0x1A00
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplPdok                                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokAddInstance()
-//
-// Description: add and initialize new instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokAddInstance(void)
-{
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokDelInstance()
-//
-// Description: deletes an instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokDelInstance(void)
-{
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCbPdoReceived
-//
-// Description: This function is called by DLL if PRes or PReq frame was
-//              received. It posts the frame to the event queue.
-//              It is called in states NMT_CS_READY_TO_OPERATE and NMT_CS_OPERATIONAL.
-//              The passed PDO needs not to be valid.
-//
-// Parameters:  pFrameInfo_p            = pointer to frame info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCbPdoReceived(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkPdok;
-	Event.m_EventType = kEplEventTypePdoRx;
-	// limit copied data to size of PDO (because from some CNs the frame is larger than necessary)
-	Event.m_uiSize = AmiGetWordFromLe(&pFrameInfo_p->m_pFrame->m_Data.m_Pres.m_le_wSize) + 24;	// pFrameInfo_p->m_uiFrameSize;
-	Event.m_pArg = pFrameInfo_p->m_pFrame;
-	Ret = EplEventkPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCbPdoTransmitted
-//
-// Description: This function is called by DLL if PRes or PReq frame was
-//              sent. It posts the pointer to the frame to the event queue.
-//              It is called in NMT_CS_PRE_OPERATIONAL_2,
-//              NMT_CS_READY_TO_OPERATE and NMT_CS_OPERATIONAL.
-//
-// Parameters:  pFrameInfo_p            = pointer to frame info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCbPdoTransmitted(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkPdok;
-	Event.m_EventType = kEplEventTypePdoTx;
-	Event.m_uiSize = sizeof(tEplFrameInfo);
-	Event.m_pArg = pFrameInfo_p;
-	Ret = EplEventkPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCbSoa
-//
-// Description: This function is called by DLL if SoA frame was
-//              received resp. sent. It posts this event to the event queue.
-//
-// Parameters:  pFrameInfo_p            = pointer to frame info structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCbSoa(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplEvent Event;
-
-	Event.m_EventSink = kEplEventSinkPdok;
-	Event.m_EventType = kEplEventTypePdoSoa;
-	Event.m_uiSize = 0;
-	Event.m_pArg = NULL;
-	Ret = EplEventkPost(&Event);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokProcess
-//
-// Description: This function processes all received and transmitted PDOs.
-//              This function must not be interrupted by any other task
-//              except ISRs (like the ethernet driver ISR, which may call
-//              EplPdokCbFrameReceived() or EplPdokCbFrameTransmitted()).
-//
-// Parameters:  pEvent_p                = pointer to event structure
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokProcess(tEplEvent * pEvent_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	u16 wPdoSize;
-	u16 wBitOffset;
-	u16 wBitSize;
-	u16 wVarSize;
-	u64 qwObjectMapping;
-	u8 bMappSubindex;
-	u8 bObdSubindex;
-	u16 wObdMappIndex;
-	u16 wObdCommIndex;
-	u16 wPdoId;
-	u8 bObdData;
-	u8 bObjectCount;
-	u8 bFrameData;
-	BOOL fValid;
-	tEplObdSize ObdSize;
-	tEplFrame *pFrame;
-	tEplFrameInfo *pFrameInfo;
-	unsigned int uiNodeId;
-	tEplMsgType MsgType;
-
-	// 0xFF=invalid, RPDO: 0x00=PReq, localNodeId=PRes, remoteNodeId=PRes
-	//               TPDO: 0x00=PRes, MN: CnNodeId=PReq
-
-	switch (pEvent_p->m_EventType) {
-	case kEplEventTypePdoRx:	// RPDO received
-		pFrame = (tEplFrame *) pEvent_p->m_pArg;
-
-		// check if received RPDO is valid
-		bFrameData =
-		    AmiGetByteFromLe(&pFrame->m_Data.m_Pres.m_le_bFlag1);
-		if ((bFrameData & EPL_FRAME_FLAG1_RD) == 0) {	// RPDO invalid
-			goto Exit;
-		}
-		// retrieve EPL message type
-		MsgType = AmiGetByteFromLe(&pFrame->m_le_bMessageType);
-		if (MsgType == kEplMsgTypePreq) {	// RPDO is PReq frame
-			uiNodeId = EPL_PDO_PREQ_NODE_ID;	// 0x00
-		} else {	// RPDO is PRes frame
-			// retrieve node ID
-			uiNodeId = AmiGetByteFromLe(&pFrame->m_le_bSrcNodeId);
-		}
-
-		// search for appropriate valid RPDO in OD
-		wObdMappIndex = EPL_PDOK_OBD_IDX_RX_MAPP_PARAM;
-		for (wObdCommIndex = EPL_PDOK_OBD_IDX_RX_COMM_PARAM;
-		     wObdCommIndex < (EPL_PDOK_OBD_IDX_RX_COMM_PARAM + 0x00FF);
-		     wObdCommIndex++, wObdMappIndex++) {
-			ObdSize = 1;
-			// read node ID from OD
-			Ret =
-			    EplObdReadEntry(wObdCommIndex, 0x01, &bObdData,
-					    &ObdSize);
-			if ((Ret == kEplObdIndexNotExist)
-			    || (Ret == kEplObdSubindexNotExist)
-			    || (Ret == kEplObdIllegalPart)) {	// PDO does not exist; last PDO reached
-				Ret = kEplSuccessful;
-				goto Exit;
-			} else if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			if (bObdData != uiNodeId) {	// node ID does not equal - wrong PDO, try next PDO in OD
-				continue;
-			}
-			ObdSize = 1;
-			// read number of mapped objects from OD; this indicates if the PDO is valid
-			Ret =
-			    EplObdReadEntry(wObdMappIndex, 0x00, &bObjectCount,
-					    &ObdSize);
-			if ((Ret == kEplObdIndexNotExist)
-			    || (Ret == kEplObdSubindexNotExist)
-			    || (Ret == kEplObdIllegalPart)) {	// PDO does not exist; last PDO reached
-				Ret = kEplSuccessful;
-				goto Exit;
-			} else if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			if (bObjectCount == 0) {	// PDO in OD not valid, try next PDO in OD
-				continue;
-			}
-
-			ObdSize = 1;
-			// check PDO mapping version
-			Ret =
-			    EplObdReadEntry(wObdCommIndex, 0x02, &bObdData,
-					    &ObdSize);
-			if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			// retrieve PDO version from frame
-			bFrameData =
-			    AmiGetByteFromLe(&pFrame->m_Data.m_Pres.
-					     m_le_bPdoVersion);
-			if ((bObdData & EPL_VERSION_MAIN) != (bFrameData & EPL_VERSION_MAIN)) {	// PDO versions do not match
-				// $$$ raise PDO error
-				// termiate processing of this RPDO
-				goto Exit;
-			}
-			// valid RPDO found
-
-			// retrieve PDO size
-			wPdoSize =
-			    AmiGetWordFromLe(&pFrame->m_Data.m_Pres.m_le_wSize);
-
-			// process mapping
-			for (bMappSubindex = 1; bMappSubindex <= bObjectCount;
-			     bMappSubindex++) {
-				ObdSize = 8;	// u64
-				// read object mapping from OD
-				Ret =
-				    EplObdReadEntry(wObdMappIndex,
-						    bMappSubindex,
-						    &qwObjectMapping, &ObdSize);
-				if (Ret != kEplSuccessful) {	// other fatal error occured
-					goto Exit;
-				}
-				// check if object mapping entry is valid, i.e. unequal zero, because "empty" entries are allowed
-				if (qwObjectMapping == 0) {	// invalid entry, continue with next entry
-					continue;
-				}
-				// decode object mapping
-				wObdCommIndex =
-				    (u16) (qwObjectMapping &
-					    0x000000000000FFFFLL);
-				bObdSubindex =
-				    (u8) ((qwObjectMapping &
-					     0x0000000000FF0000LL) >> 16);
-				wBitOffset =
-				    (u16) ((qwObjectMapping &
-					     0x0000FFFF00000000LL) >> 32);
-				wBitSize =
-				    (u16) ((qwObjectMapping &
-					     0xFFFF000000000000LL) >> 48);
-
-				// check if object exceeds PDO size
-				if (((wBitOffset + wBitSize) >> 3) > wPdoSize) {	// wrong object mapping; PDO size is too low
-					// $$$ raise PDO error
-					// terminate processing of this RPDO
-					goto Exit;
-				}
-				// copy object from RPDO to process/OD variable
-				ObdSize = wBitSize >> 3;
-				Ret =
-				    EplObdWriteEntryFromLe(wObdCommIndex,
-							   bObdSubindex,
-							   &pFrame->m_Data.
-							   m_Pres.
-							   m_le_abPayload[(wBitOffset >> 3)], ObdSize);
-				if (Ret != kEplSuccessful) {	// other fatal error occured
-					goto Exit;
-				}
-
-			}
-
-			// processing finished successfully
-			goto Exit;
-		}
-		break;
-
-	case kEplEventTypePdoTx:	// TPDO transmitted
-		pFrameInfo = (tEplFrameInfo *) pEvent_p->m_pArg;
-		pFrame = pFrameInfo->m_pFrame;
-
-		// set TPDO invalid, so that only fully processed TPDOs are sent as valid
-		bFrameData =
-		    AmiGetByteFromLe(&pFrame->m_Data.m_Pres.m_le_bFlag1);
-		AmiSetByteToLe(&pFrame->m_Data.m_Pres.m_le_bFlag1,
-			       (bFrameData & ~EPL_FRAME_FLAG1_RD));
-
-		// retrieve EPL message type
-		MsgType = AmiGetByteFromLe(&pFrame->m_le_bMessageType);
-		if (MsgType == kEplMsgTypePres) {	// TPDO is PRes frame
-			uiNodeId = EPL_PDO_PRES_NODE_ID;	// 0x00
-		} else {	// TPDO is PReq frame
-			// retrieve node ID
-			uiNodeId = AmiGetByteFromLe(&pFrame->m_le_bDstNodeId);
-		}
-
-		// search for appropriate valid TPDO in OD
-		wObdMappIndex = EPL_PDOK_OBD_IDX_TX_MAPP_PARAM;
-		wObdCommIndex = EPL_PDOK_OBD_IDX_TX_COMM_PARAM;
-		for (wPdoId = 0;; wPdoId++, wObdCommIndex++, wObdMappIndex++) {
-			ObdSize = 1;
-			// read node ID from OD
-			Ret =
-			    EplObdReadEntry(wObdCommIndex, 0x01, &bObdData,
-					    &ObdSize);
-			if ((Ret == kEplObdIndexNotExist)
-			    || (Ret == kEplObdSubindexNotExist)
-			    || (Ret == kEplObdIllegalPart)) {	// PDO does not exist; last PDO reached
-				Ret = kEplSuccessful;
-				goto Exit;
-			} else if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			if (bObdData != uiNodeId) {	// node ID does not equal - wrong PDO, try next PDO in OD
-				continue;
-			}
-			ObdSize = 1;
-			// read number of mapped objects from OD; this indicates if the PDO is valid
-			Ret =
-			    EplObdReadEntry(wObdMappIndex, 0x00, &bObjectCount,
-					    &ObdSize);
-			if ((Ret == kEplObdIndexNotExist)
-			    || (Ret == kEplObdSubindexNotExist)
-			    || (Ret == kEplObdIllegalPart)) {	// PDO does not exist; last PDO reached
-				Ret = kEplSuccessful;
-				goto Exit;
-			} else if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			if (bObjectCount == 0) {	// PDO in OD not valid, try next PDO in OD
-				continue;
-			}
-			// valid TPDO found
-
-			ObdSize = 1;
-			// get PDO mapping version from OD
-			Ret =
-			    EplObdReadEntry(wObdCommIndex, 0x02, &bObdData,
-					    &ObdSize);
-			if (Ret != kEplSuccessful) {	// other fatal error occured
-				goto Exit;
-			}
-			// entry read successfully
-			// set PDO version in frame
-			AmiSetByteToLe(&pFrame->m_Data.m_Pres.m_le_bPdoVersion,
-				       bObdData);
-
-			// calculate PDO size
-			wPdoSize = 0;
-
-			// process mapping
-			for (bMappSubindex = 1; bMappSubindex <= bObjectCount;
-			     bMappSubindex++) {
-				ObdSize = 8;	// u64
-				// read object mapping from OD
-				Ret =
-				    EplObdReadEntry(wObdMappIndex,
-						    bMappSubindex,
-						    &qwObjectMapping, &ObdSize);
-				if (Ret != kEplSuccessful) {	// other fatal error occured
-					goto Exit;
-				}
-				// check if object mapping entry is valid, i.e. unequal zero, because "empty" entries are allowed
-				if (qwObjectMapping == 0) {	// invalid entry, continue with next entry
-					continue;
-				}
-				// decode object mapping
-				wObdCommIndex =
-				    (u16) (qwObjectMapping &
-					    0x000000000000FFFFLL);
-				bObdSubindex =
-				    (u8) ((qwObjectMapping &
-					     0x0000000000FF0000LL) >> 16);
-				wBitOffset =
-				    (u16) ((qwObjectMapping &
-					     0x0000FFFF00000000LL) >> 32);
-				wBitSize =
-				    (u16) ((qwObjectMapping &
-					     0xFFFF000000000000LL) >> 48);
-
-				// calculate max PDO size
-				ObdSize = wBitSize >> 3;
-				wVarSize = (wBitOffset >> 3) + (u16) ObdSize;
-				if ((unsigned int)(wVarSize + 24) > pFrameInfo->m_uiFrameSize) {	// TPDO is too short
-					// $$$ raise PDO error, set Ret
-					goto Exit;
-				}
-				if (wVarSize > wPdoSize) {	// memorize new PDO size
-					wPdoSize = wVarSize;
-				}
-				// copy object from process/OD variable to TPDO
-				Ret =
-				    EplObdReadEntryToLe(wObdCommIndex,
-							bObdSubindex,
-							&pFrame->m_Data.m_Pres.
-							m_le_abPayload[(wBitOffset >> 3)], &ObdSize);
-				if (Ret != kEplSuccessful) {	// other fatal error occured
-					goto Exit;
-				}
-
-			}
-
-			// set PDO size in frame
-			AmiSetWordToLe(&pFrame->m_Data.m_Pres.m_le_wSize,
-				       wPdoSize);
-
-			Ret = EplPdokCalAreTpdosValid(&fValid);
-			if (fValid != FALSE) {
-				// set TPDO valid
-				bFrameData =
-				    AmiGetByteFromLe(&pFrame->m_Data.m_Pres.
-						     m_le_bFlag1);
-				AmiSetByteToLe(&pFrame->m_Data.m_Pres.
-					       m_le_bFlag1,
-					       (bFrameData |
-						EPL_FRAME_FLAG1_RD));
-			}
-			// processing finished successfully
-
-			goto Exit;
-		}
-		break;
-
-	case kEplEventTypePdoSoa:	// SoA received
-
-		// invalidate TPDOs
-		Ret = EplPdokCalSetTpdosValid(FALSE);
-		break;
-
-	default:
-		{
-			ASSERTMSG(FALSE,
-				  "EplPdokProcess(): unhandled event type!\n");
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#endif // #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplPdokCal.c b/drivers/staging/epl/EplPdokCal.c
deleted file mode 100644
index f44c475..0000000
--- a/drivers/staging/epl/EplPdokCal.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for kernel PDO Communication Abstraction Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdokCal.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/27 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "kernel/EplPdokCal.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOK)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplPdokCal                                          */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	BOOL m_fTpdosValid;
-
-} tEplPdokCalInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplPdokCalInstance EplPdokCalInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCalAddInstance()
-//
-// Description: add and initialize new instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCalAddInstance(void)
-{
-
-	EPL_MEMSET(&EplPdokCalInstance_g, 0, sizeof(EplPdokCalInstance_g));
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCalDelInstance()
-//
-// Description: deletes an instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCalDelInstance(void)
-{
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCalSetTpdosValid()
-//
-// Description: This function sets the validity flag for TPDOs to the
-//              specified value.
-//
-// Parameters:  fValid_p                = validity flag
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCalSetTpdosValid(BOOL fValid_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	EplPdokCalInstance_g.m_fTpdosValid = fValid_p;
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdokCalAreTpdosValid()
-//
-// Description: This function returns the validity flag for TPDOs.
-//
-// Parameters:  pfValid_p               = OUT: validity flag
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdokCalAreTpdosValid(BOOL * pfValid_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	*pfValid_p = EplPdokCalInstance_g.m_fTpdosValid;
-
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-#endif
-
-// EOF
diff --git a/drivers/staging/epl/EplPdou.c b/drivers/staging/epl/EplPdou.c
deleted file mode 100644
index d6d0624..0000000
--- a/drivers/staging/epl/EplPdou.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for user PDO module
-                Currently, this module just implements a OD callback function
-                to check if the PDO configuration is valid.
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdou.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#include "EplInc.h"
-//#include "user/EplPdouCal.h"
-#include "user/EplObdu.h"
-#include "user/EplPdou.h"
-#include "EplSdoAc.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOU)) != 0)
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) == 0) && (EPL_OBD_USE_KERNEL == FALSE)
-#error "EPL PDOu module needs EPL module OBDU or OBDK!"
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPL_PDOU_OBD_IDX_RX_COMM_PARAM  0x1400
-#define EPL_PDOU_OBD_IDX_RX_MAPP_PARAM  0x1600
-#define EPL_PDOU_OBD_IDX_TX_COMM_PARAM  0x1800
-#define EPL_PDOU_OBD_IDX_TX_MAPP_PARAM  0x1A00
-#define EPL_PDOU_OBD_IDX_MAPP_PARAM     0x0200
-#define EPL_PDOU_OBD_IDX_MASK           0xFF00
-#define EPL_PDOU_PDO_ID_MASK            0x00FF
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  EplPdou                                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplPdouCheckPdoValidity(tEplObdCbParam *pParam_p,
-					  unsigned int uiIndex_p);
-
-static void EplPdouDecodeObjectMapping(u64 qwObjectMapping_p,
-				       unsigned int *puiIndex_p,
-				       unsigned int *puiSubIndex_p,
-				       unsigned int *puiBitOffset_p,
-				       unsigned int *puiBitSize_p);
-
-static tEplKernel EplPdouCheckObjectMapping(u64 qwObjectMapping_p,
-					    tEplObdAccess AccessType_p,
-					    u32 * pdwAbortCode_p,
-					    unsigned int *puiPdoSize_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouAddInstance()
-//
-// Description: add and initialize new instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdouAddInstance(void)
-{
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouDelInstance()
-//
-// Description: deletes an instance of EPL stack
-//
-// Parameters:  none
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdouDelInstance(void)
-{
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouCbObdAccess
-//
-// Description: callback function for OD accesses
-//
-// Parameters:  pParam_p                = OBD parameter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplPdouCbObdAccess(tEplObdCbParam *pParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiPdoId;
-	unsigned int uiIndexType;
-	tEplObdSize ObdSize;
-	u8 bObjectCount;
-	u64 qwObjectMapping;
-	tEplObdAccess AccessType;
-	u8 bMappSubindex;
-	unsigned int uiCurPdoSize;
-	u16 wMaxPdoSize;
-	unsigned int uiSubIndex;
-
-	// fetch PDO ID
-	uiPdoId = pParam_p->m_uiIndex & EPL_PDOU_PDO_ID_MASK;
-
-	// fetch object index type
-	uiIndexType = pParam_p->m_uiIndex & EPL_PDOU_OBD_IDX_MASK;
-
-	if (pParam_p->m_ObdEvent != kEplObdEvPreWrite) {	// read accesses, post write events etc. are OK
-		pParam_p->m_dwAbortCode = 0;
-		goto Exit;
-	}
-	// check index type
-	switch (uiIndexType) {
-	case EPL_PDOU_OBD_IDX_RX_COMM_PARAM:
-		// RPDO communication parameter accessed
-	case EPL_PDOU_OBD_IDX_TX_COMM_PARAM:
-		{		// TPDO communication parameter accessed
-			Ret = EplPdouCheckPdoValidity(pParam_p,
-						      (EPL_PDOU_OBD_IDX_MAPP_PARAM
-						       | pParam_p->m_uiIndex));
-			if (Ret != kEplSuccessful) {	// PDO is valid or does not exist
-				goto Exit;
-			}
-
-			goto Exit;
-		}
-
-	case EPL_PDOU_OBD_IDX_RX_MAPP_PARAM:
-		{		// RPDO mapping parameter accessed
-
-			AccessType = kEplObdAccWrite;
-			break;
-		}
-
-	case EPL_PDOU_OBD_IDX_TX_MAPP_PARAM:
-		{		// TPDO mapping parameter accessed
-
-			AccessType = kEplObdAccRead;
-			break;
-		}
-
-	default:
-		{		// this callback function is only for
-			// PDO mapping and communication parameters
-			pParam_p->m_dwAbortCode = EPL_SDOAC_GENERAL_ERROR;
-			goto Exit;
-		}
-	}
-
-	// RPDO and TPDO mapping parameter accessed
-
-	if (pParam_p->m_uiSubIndex == 0) {	// object mapping count accessed
-
-		// PDO is enabled or disabled
-		bObjectCount = *((u8 *) pParam_p->m_pArg);
-
-		if (bObjectCount == 0) {	// PDO shall be disabled
-
-			// that is always possible
-			goto Exit;
-		}
-		// PDO shall be enabled
-		// it should have been disabled for this operation
-		Ret = EplPdouCheckPdoValidity(pParam_p, pParam_p->m_uiIndex);
-		if (Ret != kEplSuccessful) {	// PDO is valid or does not exist
-			goto Exit;
-		}
-
-		if (AccessType == kEplObdAccWrite) {
-			uiSubIndex = 0x04;	// PReqActPayloadLimit_U16
-		} else {
-			uiSubIndex = 0x05;	// PResActPayloadLimit_U16
-		}
-
-		// fetch maximum PDO size from Object 1F98h: NMT_CycleTiming_REC
-		ObdSize = sizeof(wMaxPdoSize);
-		Ret =
-		    EplObduReadEntry(0x1F98, uiSubIndex, &wMaxPdoSize,
-				     &ObdSize);
-		if (Ret != kEplSuccessful) {	// other fatal error occured
-			pParam_p->m_dwAbortCode = EPL_SDOAC_GENERAL_ERROR;
-			goto Exit;
-		}
-		// check all objectmappings
-		for (bMappSubindex = 1; bMappSubindex <= bObjectCount;
-		     bMappSubindex++) {
-			// read object mapping from OD
-			ObdSize = sizeof(qwObjectMapping);	// u64
-			Ret = EplObduReadEntry(pParam_p->m_uiIndex,
-					       bMappSubindex, &qwObjectMapping,
-					       &ObdSize);
-			if (Ret != kEplSuccessful) {	// other fatal error occured
-				pParam_p->m_dwAbortCode =
-				    EPL_SDOAC_GENERAL_ERROR;
-				goto Exit;
-			}
-			// check object mapping
-			Ret = EplPdouCheckObjectMapping(qwObjectMapping,
-							AccessType,
-							&pParam_p->
-							m_dwAbortCode,
-							&uiCurPdoSize);
-			if (Ret != kEplSuccessful) {	// illegal object mapping
-				goto Exit;
-			}
-
-			if (uiCurPdoSize > wMaxPdoSize) {	// mapping exceeds object size
-				pParam_p->m_dwAbortCode =
-				    EPL_SDOAC_GENERAL_ERROR;
-				Ret = kEplPdoVarNotFound;
-			}
-
-		}
-
-	} else {		// ObjectMapping
-		Ret = EplPdouCheckPdoValidity(pParam_p, pParam_p->m_uiIndex);
-		if (Ret != kEplSuccessful) {	// PDO is valid or does not exist
-			goto Exit;
-		}
-		// check existence of object and validity of object length
-
-		qwObjectMapping = *((u64 *) pParam_p->m_pArg);
-
-		Ret = EplPdouCheckObjectMapping(qwObjectMapping,
-						AccessType,
-						&pParam_p->m_dwAbortCode,
-						&uiCurPdoSize);
-
-	}
-
-      Exit:
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouCheckPdoValidity
-//
-// Description: check if PDO is valid
-//
-// Parameters:  pParam_p                = OBD parameter
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplPdouCheckPdoValidity(tEplObdCbParam *pParam_p,
-					  unsigned int uiIndex_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplObdSize ObdSize;
-	u8 bObjectCount;
-
-	ObdSize = 1;
-	// read number of mapped objects from OD; this indicates if the PDO is valid
-	Ret = EplObduReadEntry(uiIndex_p, 0x00, &bObjectCount, &ObdSize);
-	if (Ret != kEplSuccessful) {	// other fatal error occured
-		pParam_p->m_dwAbortCode =
-		    EPL_SDOAC_GEN_INTERNAL_INCOMPATIBILITY;
-		goto Exit;
-	}
-	// entry read successfully
-	if (bObjectCount != 0) {	// PDO in OD is still valid
-		pParam_p->m_dwAbortCode = EPL_SDOAC_GEN_PARAM_INCOMPATIBILITY;
-		Ret = kEplPdoNotExist;
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouDecodeObjectMapping
-//
-// Description: decodes the given object mapping entry into index, subindex,
-//              bit offset and bit size.
-//
-// Parameters:  qwObjectMapping_p       = object mapping entry
-//              puiIndex_p              = [OUT] pointer to object index
-//              puiSubIndex_p           = [OUT] pointer to subindex
-//              puiBitOffset_p          = [OUT] pointer to bit offset
-//              puiBitSize_p            = [OUT] pointer to bit size
-//
-// Returns:     (void)
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static void EplPdouDecodeObjectMapping(u64 qwObjectMapping_p,
-				       unsigned int *puiIndex_p,
-				       unsigned int *puiSubIndex_p,
-				       unsigned int *puiBitOffset_p,
-				       unsigned int *puiBitSize_p)
-{
-	*puiIndex_p = (unsigned int)
-	    (qwObjectMapping_p & 0x000000000000FFFFLL);
-
-	*puiSubIndex_p = (unsigned int)
-	    ((qwObjectMapping_p & 0x0000000000FF0000LL) >> 16);
-
-	*puiBitOffset_p = (unsigned int)
-	    ((qwObjectMapping_p & 0x0000FFFF00000000LL) >> 32);
-
-	*puiBitSize_p = (unsigned int)
-	    ((qwObjectMapping_p & 0xFFFF000000000000LL) >> 48);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplPdouCheckObjectMapping
-//
-// Description: checks the given object mapping entry.
-//
-// Parameters:  qwObjectMapping_p       = object mapping entry
-//              AccessType_p            = access type to mapped object:
-//                                        write = RPDO and read = TPDO
-//              puiPdoSize_p            = [OUT] pointer to covered PDO size
-//                                        (offset + size) in byte;
-//                                        0 if mapping failed
-//              pdwAbortCode_p          = [OUT] pointer to SDO abort code;
-//                                        0 if mapping is possible
-//
-// Returns:     tEplKernel              = error code
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static tEplKernel EplPdouCheckObjectMapping(u64 qwObjectMapping_p,
-					    tEplObdAccess AccessType_p,
-					    u32 * pdwAbortCode_p,
-					    unsigned int *puiPdoSize_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplObdSize ObdSize;
-	unsigned int uiIndex;
-	unsigned int uiSubIndex;
-	unsigned int uiBitOffset;
-	unsigned int uiBitSize;
-	tEplObdAccess AccessType;
-	BOOL fNumerical;
-
-	if (qwObjectMapping_p == 0) {	// discard zero value
-		*puiPdoSize_p = 0;
-		goto Exit;
-	}
-	// decode object mapping
-	EplPdouDecodeObjectMapping(qwObjectMapping_p,
-				   &uiIndex,
-				   &uiSubIndex, &uiBitOffset, &uiBitSize);
-
-	if ((uiBitOffset & 0x7) != 0x0) {	// bit mapping is not supported
-		*pdwAbortCode_p = EPL_SDOAC_GENERAL_ERROR;
-		Ret = kEplPdoGranularityMismatch;
-		goto Exit;
-	}
-
-	if ((uiBitSize & 0x7) != 0x0) {	// bit mapping is not supported
-		*pdwAbortCode_p = EPL_SDOAC_GENERAL_ERROR;
-		Ret = kEplPdoGranularityMismatch;
-		goto Exit;
-	}
-	// check access type
-	Ret = EplObduGetAccessType(uiIndex, uiSubIndex, &AccessType);
-	if (Ret != kEplSuccessful) {	// entry doesn't exist
-		*pdwAbortCode_p = EPL_SDOAC_OBJECT_NOT_EXIST;
-		goto Exit;
-	}
-
-	if ((AccessType & kEplObdAccPdo) == 0) {	// object is not mappable
-		*pdwAbortCode_p = EPL_SDOAC_OBJECT_NOT_MAPPABLE;
-		Ret = kEplPdoVarNotFound;
-		goto Exit;
-	}
-
-	if ((AccessType & AccessType_p) == 0) {	// object is not writeable (RPDO) or readable (TPDO) respectively
-		*pdwAbortCode_p = EPL_SDOAC_OBJECT_NOT_MAPPABLE;
-		Ret = kEplPdoVarNotFound;
-		goto Exit;
-	}
-
-	ObdSize = EplObduGetDataSize(uiIndex, uiSubIndex);
-	if (ObdSize < (uiBitSize >> 3)) {	// object does not exist or has smaller size
-		*pdwAbortCode_p = EPL_SDOAC_GENERAL_ERROR;
-		Ret = kEplPdoVarNotFound;
-	}
-
-	Ret = EplObduIsNumerical(uiIndex, uiSubIndex, &fNumerical);
-	if (Ret != kEplSuccessful) {	// entry doesn't exist
-		*pdwAbortCode_p = EPL_SDOAC_OBJECT_NOT_EXIST;
-		goto Exit;
-	}
-
-	if ((fNumerical != FALSE)
-	    && ((uiBitSize >> 3) != ObdSize)) {
-		// object is numerical,
-		// therefor size has to fit, but it does not.
-		*pdwAbortCode_p = EPL_SDOAC_GENERAL_ERROR;
-		Ret = kEplPdoVarNotFound;
-		goto Exit;
-	}
-	// calucaled needed PDO size
-	*puiPdoSize_p = (uiBitOffset >> 3) + (uiBitSize >> 3);
-
-      Exit:
-	return Ret;
-}
-
-#endif // #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOU)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplSdo.h b/drivers/staging/epl/EplSdo.h
deleted file mode 100644
index 8002e0c..0000000
--- a/drivers/staging/epl/EplSdo.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for api function of the sdo module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdo.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
- 2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "EplFrame.h"
-#include "EplSdoAc.h"
-
-#ifndef _EPLSDO_H_
-#define _EPLSDO_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-// global defines
-#ifndef EPL_SDO_MAX_PAYLOAD
-#define EPL_SDO_MAX_PAYLOAD     256
-#endif
-
-// handle between Protocol Abstraction Layer and asynchronous SDO Sequence Layer
-#define EPL_SDO_UDP_HANDLE      0x8000
-#define EPL_SDO_ASND_HANDLE     0x4000
-#define EPL_SDO_ASY_HANDLE_MASK 0xC000
-#define EPL_SDO_ASY_INVALID_HDL 0x3FFF
-
-// handle between  SDO Sequence Layer and sdo command layer
-#define EPL_SDO_ASY_HANDLE      0x8000
-#define EPL_SDO_PDO_HANDLE      0x4000
-#define EPL_SDO_SEQ_HANDLE_MASK 0xC000
-#define EPL_SDO_SEQ_INVALID_HDL 0x3FFF
-
-#define EPL_ASND_HEADER_SIZE        4
-//#define EPL_SEQ_HEADER_SIZE         4
-#define EPL_ETHERNET_HEADER_SIZE    14
-
-#define EPL_SEQ_NUM_MASK            0xFC
-
-// size for send buffer and history
-#define EPL_MAX_SDO_FRAME_SIZE      EPL_C_IP_MIN_MTU
-// size for receive frame
-// -> needed because SND-Kit sends up to 1518 Byte
-//    without Sdo-Command: Maximum Segment Size
-#define EPL_MAX_SDO_REC_FRAME_SIZE  EPL_C_IP_MAX_MTU
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-// handle between Protocol Abstraction Layer and asynchronuus SDO Sequence Layer
-typedef unsigned int tEplSdoConHdl;
-
-// callback function pointer for Protocol Abstraction Layer to call
-// asynchronuus SDO Sequence Layer
-typedef tEplKernel(*tEplSequLayerReceiveCb) (tEplSdoConHdl ConHdl_p,
-					     tEplAsySdoSeq *pSdoSeqData_p,
-					     unsigned int uiDataSize_p);
-
-// handle between asynchronuus SDO Sequence Layer and SDO Command layer
-typedef unsigned int tEplSdoSeqConHdl;
-
-// callback function pointer for asynchronuus SDO Sequence Layer to call
-// SDO Command layer for received data
-typedef tEplKernel(* tEplSdoComReceiveCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
-					   tEplAsySdoCom *pAsySdoCom_p,
-					   unsigned int uiDataSize_p);
-
-// status of connection
-typedef enum {
-	kAsySdoConStateConnected = 0x00,
-	kAsySdoConStateInitError = 0x01,
-	kAsySdoConStateConClosed = 0x02,
-	kAsySdoConStateAckReceived = 0x03,
-	kAsySdoConStateFrameSended = 0x04,
-	kAsySdoConStateTimeout = 0x05
-} tEplAsySdoConState;
-
-// callback function pointer for asynchronuus SDO Sequence Layer to call
-// SDO Command layer for connection status
-typedef tEplKernel(* tEplSdoComConCb) (tEplSdoSeqConHdl SdoSeqConHdl_p,
-				       tEplAsySdoConState AsySdoConState_p);
-
-// handle between  SDO Command layer and application
-typedef unsigned int tEplSdoComConHdl;
-
-// status of connection
-typedef enum {
-	kEplSdoComTransferNotActive = 0x00,
-	kEplSdoComTransferRunning = 0x01,
-	kEplSdoComTransferTxAborted = 0x02,
-	kEplSdoComTransferRxAborted = 0x03,
-	kEplSdoComTransferFinished = 0x04,
-	kEplSdoComTransferLowerLayerAbort = 0x05
-} tEplSdoComConState;
-
-// SDO Services and Command-Ids from DS 1.0.0 p.152
-typedef enum {
-	kEplSdoServiceNIL = 0x00,
-	kEplSdoServiceWriteByIndex = 0x01,
-	kEplSdoServiceReadByIndex = 0x02
-	    //--------------------------------
-	    // the following services are optional and
-	    // not supported now
-/*
-    kEplSdoServiceWriteAllByIndex   = 0x03,
-    kEplSdoServiceReadAllByIndex    = 0x04,
-    kEplSdoServiceWriteByName       = 0x05,
-    kEplSdoServiceReadByName        = 0x06,
-
-    kEplSdoServiceFileWrite         = 0x20,
-    kEplSdoServiceFileRead          = 0x21,
-
-    kEplSdoServiceWriteMultiByIndex = 0x31,
-    kEplSdoServiceReadMultiByIndex  = 0x32,
-
-    kEplSdoServiceMaxSegSize        = 0x70
-
-    // 0x80 - 0xFF manufacturer specific
-
- */
-} tEplSdoServiceType;
-
-// describes if read or write access
-typedef enum {
-	kEplSdoAccessTypeRead = 0x00,
-	kEplSdoAccessTypeWrite = 0x01
-} tEplSdoAccessType;
-
-typedef enum {
-	kEplSdoTypeAuto = 0x00,
-	kEplSdoTypeUdp = 0x01,
-	kEplSdoTypeAsnd = 0x02,
-	kEplSdoTypePdo = 0x03
-} tEplSdoType;
-
-typedef enum {
-	kEplSdoTransAuto = 0x00,
-	kEplSdoTransExpedited = 0x01,
-	kEplSdoTransSegmented = 0x02
-} tEplSdoTransType;
-
-// structure to inform application about finish of SDO transfer
-typedef struct {
-	tEplSdoComConHdl m_SdoComConHdl;
-	tEplSdoComConState m_SdoComConState;
-	u32 m_dwAbortCode;
-	tEplSdoAccessType m_SdoAccessType;
-	unsigned int m_uiNodeId;	// NodeId of the target
-	unsigned int m_uiTargetIndex;	// index which was accessed
-	unsigned int m_uiTargetSubIndex;	// subindex which was accessed
-	unsigned int m_uiTransferredByte;	// number of bytes transferred
-	void *m_pUserArg;	// user definable argument pointer
-
-} tEplSdoComFinished;
-
-// callback function pointer to inform application about connection
-typedef tEplKernel(* tEplSdoFinishedCb) (tEplSdoComFinished *pSdoComFinished_p);
-
-// structure to init SDO transfer to Read or Write by Index
-typedef struct {
-	tEplSdoComConHdl m_SdoComConHdl;
-	unsigned int m_uiIndex;
-	unsigned int m_uiSubindex;
-	void *m_pData;
-	unsigned int m_uiDataSize;
-	unsigned int m_uiTimeout;	// not used in this version
-	tEplSdoAccessType m_SdoAccessType;
-	tEplSdoFinishedCb m_pfnSdoFinishedCb;
-	void *m_pUserArg;	// user definable argument pointer
-
-} tEplSdoComTransParamByIndex;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPLSDO_H_
diff --git a/drivers/staging/epl/EplSdoAc.h b/drivers/staging/epl/EplSdoAc.h
deleted file mode 100644
index 400fb38..0000000
--- a/drivers/staging/epl/EplSdoAc.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  definitions for SDO Abort codes
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoAc.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/30 k.t.: first implementation
-
-****************************************************************************/
-
-#ifndef _EPLSDOAC_H_
-#define _EPLSDOAC_H_
-
-// =========================================================================
-// SDO abort codes
-// =========================================================================
-
-#define    EPL_SDOAC_TIME_OUT                            0x05040000L
-#define    EPL_SDOAC_UNKNOWN_COMMAND_SPECIFIER           0x05040001L
-#define    EPL_SDOAC_INVALID_BLOCK_SIZE                  0x05040002L
-#define    EPL_SDOAC_INVALID_SEQUENCE_NUMBER             0x05040003L
-#define    EPL_SDOAC_OUT_OF_MEMORY                       0x05040005L
-#define    EPL_SDOAC_UNSUPPORTED_ACCESS                  0x06010000L
-#define    EPL_SDOAC_READ_TO_WRITE_ONLY_OBJ              0x06010001L
-#define    EPL_SDOAC_WRITE_TO_READ_ONLY_OBJ              0x06010002L
-#define    EPL_SDOAC_OBJECT_NOT_EXIST                    0x06020000L
-#define    EPL_SDOAC_OBJECT_NOT_MAPPABLE                 0x06040041L
-#define    EPL_SDOAC_PDO_LENGTH_EXCEEDED                 0x06040042L
-#define    EPL_SDOAC_GEN_PARAM_INCOMPATIBILITY           0x06040043L
-#define    EPL_SDOAC_INVALID_HEARTBEAT_DEC               0x06040044L
-#define    EPL_SDOAC_GEN_INTERNAL_INCOMPATIBILITY        0x06040047L
-#define    EPL_SDOAC_ACCESS_FAILED_DUE_HW_ERROR          0x06060000L
-#define    EPL_SDOAC_DATA_TYPE_LENGTH_NOT_MATCH          0x06070010L
-#define    EPL_SDOAC_DATA_TYPE_LENGTH_TOO_HIGH           0x06070012L
-#define    EPL_SDOAC_DATA_TYPE_LENGTH_TOO_LOW            0x06070013L
-#define    EPL_SDOAC_SUB_INDEX_NOT_EXIST                 0x06090011L
-#define    EPL_SDOAC_VALUE_RANGE_EXCEEDED                0x06090030L
-#define    EPL_SDOAC_VALUE_RANGE_TOO_HIGH                0x06090031L
-#define    EPL_SDOAC_VALUE_RANGE_TOO_LOW                 0x06090032L
-#define    EPL_SDOAC_MAX_VALUE_LESS_MIN_VALUE            0x06090036L
-#define    EPL_SDOAC_GENERAL_ERROR                       0x08000000L
-#define    EPL_SDOAC_DATA_NOT_TRANSF_OR_STORED           0x08000020L
-#define    EPL_SDOAC_DATA_NOT_TRANSF_DUE_LOCAL_CONTROL   0x08000021L
-#define    EPL_SDOAC_DATA_NOT_TRANSF_DUE_DEVICE_STATE    0x08000022L
-#define    EPL_SDOAC_OBJECT_DICTIONARY_NOT_EXIST         0x08000023L
-#define    EPL_SDOAC_CONFIG_DATA_EMPTY                   0x08000024L
-
-#endif // _EPLSDOAC_H_
-
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
-// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/EplSdoAsndu.c b/drivers/staging/epl/EplSdoAsndu.c
deleted file mode 100644
index aa8bdef..0000000
--- a/drivers/staging/epl/EplSdoAsndu.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for SDO/Asnd-Protocolabstractionlayer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoAsndu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.7 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/07 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplSdoAsndu.h"
-#include "user/EplDlluCal.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_SDO_MAX_CONNECTION_ASND
-#define EPL_SDO_MAX_CONNECTION_ASND 5
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-// instance table
-typedef struct {
-	unsigned int m_auiSdoAsndConnection[EPL_SDO_MAX_CONNECTION_ASND];
-	tEplSequLayerReceiveCb m_fpSdoAsySeqCb;
-
-} tEplSdoAsndInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplSdoAsndInstance SdoAsndInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-tEplKernel EplSdoAsnduCb(tEplFrameInfo *pFrameInfo_p);
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <EPL SDO-Asnd Protocolabstraction layer>            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: EPL SDO-Asnd Protocolabstraction layer
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:  pReceiveCb_p    =   functionpointer to Sdo-Sequence layer
-//                                  callback-function
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduInit(tEplSequLayerReceiveCb fpReceiveCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplSdoAsnduAddInstance(fpReceiveCb_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduAddInstance
-//
-// Description: init additional instance of the module
-//
-//
-//
-// Parameters:  pReceiveCb_p    =   functionpointer to Sdo-Sequence layer
-//                                  callback-function
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduAddInstance(tEplSequLayerReceiveCb fpReceiveCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// init control structure
-	EPL_MEMSET(&SdoAsndInstance_g, 0x00, sizeof(SdoAsndInstance_g));
-
-	// save pointer to callback-function
-	if (fpReceiveCb_p != NULL) {
-		SdoAsndInstance_g.m_fpSdoAsySeqCb = fpReceiveCb_p;
-	} else {
-		Ret = kEplSdoUdpMissCb;
-	}
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalRegAsndService(kEplDllAsndSdo,
-				       EplSdoAsnduCb, kEplDllAsndFilterLocal);
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduDelInstance
-//
-// Description: del instance of the module
-//              del socket and del Listen-Thread
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	// deregister callback function from DLL
-	Ret = EplDlluCalRegAsndService(kEplDllAsndSdo,
-				       NULL, kEplDllAsndFilterNone);
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduInitCon
-//
-// Description: init a new connect
-//
-//
-//
-// Parameters:  pSdoConHandle_p = pointer for the new connection handle
-//              uiTargetNodeId_p = NodeId of the target node
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduInitCon(tEplSdoConHdl *pSdoConHandle_p,
-			      unsigned int uiTargetNodeId_p)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-	unsigned int uiFreeCon;
-	unsigned int *puiConnection;
-
-	Ret = kEplSuccessful;
-
-	if ((uiTargetNodeId_p == EPL_C_ADR_INVALID)
-	    || (uiTargetNodeId_p >= EPL_C_ADR_BROADCAST)) {
-		Ret = kEplSdoAsndInvalidNodeId;
-		goto Exit;
-	}
-	// get free entry in control structure
-	uiCount = 0;
-	uiFreeCon = EPL_SDO_MAX_CONNECTION_ASND;
-	puiConnection = &SdoAsndInstance_g.m_auiSdoAsndConnection[0];
-	while (uiCount < EPL_SDO_MAX_CONNECTION_ASND) {
-		if (*puiConnection == uiTargetNodeId_p) {	// existing connection to target node found
-			// save handle for higher layer
-			*pSdoConHandle_p = (uiCount | EPL_SDO_ASND_HANDLE);
-
-			goto Exit;
-		} else if (*puiConnection == 0) {	// free entry-> save target nodeId
-			uiFreeCon = uiCount;
-		}
-		uiCount++;
-		puiConnection++;
-	}
-
-	if (uiFreeCon == EPL_SDO_MAX_CONNECTION_ASND) {
-		// no free connection
-		Ret = kEplSdoAsndNoFreeHandle;
-	} else {
-		puiConnection =
-		    &SdoAsndInstance_g.m_auiSdoAsndConnection[uiFreeCon];
-		*puiConnection = uiTargetNodeId_p;
-		// save handle for higher layer
-		*pSdoConHandle_p = (uiFreeCon | EPL_SDO_ASND_HANDLE);
-
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduSendData
-//
-// Description: send data using exisiting connection
-//
-//
-//
-// Parameters:  SdoConHandle_p  = connection handle
-//              pSrcData_p      = pointer to data
-//              dwDataSize_p    = number of databyte
-//                                  -> without asnd-header!!!
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduSendData(tEplSdoConHdl SdoConHandle_p,
-			       tEplFrame *pSrcData_p,
-			       u32 dwDataSize_p)
-{
-	tEplKernel Ret;
-	unsigned int uiArray;
-	tEplFrameInfo FrameInfo;
-
-	Ret = kEplSuccessful;
-
-	uiArray = (SdoConHandle_p & ~EPL_SDO_ASY_HANDLE_MASK);
-
-	if (uiArray > EPL_SDO_MAX_CONNECTION_ASND) {
-		Ret = kEplSdoAsndInvalidHandle;
-		goto Exit;
-	}
-	// fillout Asnd header
-	// own node id not needed -> filled by DLL
-
-	// set message type
-	AmiSetByteToLe(&pSrcData_p->m_le_bMessageType, (u8) kEplMsgTypeAsnd);	// ASnd == 0x06
-	// target node id
-	AmiSetByteToLe(&pSrcData_p->m_le_bDstNodeId,
-		       (u8) SdoAsndInstance_g.
-		       m_auiSdoAsndConnection[uiArray]);
-	// set source-nodeid (filled by DLL 0)
-	AmiSetByteToLe(&pSrcData_p->m_le_bSrcNodeId, 0x00);
-
-	// calc size
-	dwDataSize_p += EPL_ASND_HEADER_SIZE;
-
-	// send function of DLL
-	FrameInfo.m_uiFrameSize = dwDataSize_p;
-	FrameInfo.m_pFrame = pSrcData_p;
-	EPL_MEMSET(&FrameInfo.m_NetTime, 0x00, sizeof(tEplNetTime));
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-	Ret = EplDlluCalAsyncSend(&FrameInfo, kEplDllAsyncReqPrioGeneric);
-#endif
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduDelCon
-//
-// Description: delete connection from intern structure
-//
-//
-//
-// Parameters:  SdoConHandle_p  = connection handle
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduDelCon(tEplSdoConHdl SdoConHandle_p)
-{
-	tEplKernel Ret;
-	unsigned int uiArray;
-
-	Ret = kEplSuccessful;
-
-	uiArray = (SdoConHandle_p & ~EPL_SDO_ASY_HANDLE_MASK);
-	// check parameter
-	if (uiArray > EPL_SDO_MAX_CONNECTION_ASND) {
-		Ret = kEplSdoAsndInvalidHandle;
-		goto Exit;
-	}
-	// set target nodeId to 0
-	SdoAsndInstance_g.m_auiSdoAsndConnection[uiArray] = 0;
-
-      Exit:
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsnduCb
-//
-// Description: callback function for SDO ASnd frames
-//
-//
-//
-// Parameters:      pFrameInfo_p = Frame with SDO payload
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsnduCb(tEplFrameInfo *pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiCount;
-	unsigned int *puiConnection;
-	unsigned int uiNodeId;
-	unsigned int uiFreeEntry = 0xFFFF;
-	tEplSdoConHdl SdoConHdl;
-	tEplFrame *pFrame;
-
-	pFrame = pFrameInfo_p->m_pFrame;
-
-	uiNodeId = AmiGetByteFromLe(&pFrame->m_le_bSrcNodeId);
-
-	// search corresponding entry in control structure
-	uiCount = 0;
-	puiConnection = &SdoAsndInstance_g.m_auiSdoAsndConnection[0];
-	while (uiCount < EPL_SDO_MAX_CONNECTION_ASND) {
-		if (uiNodeId == *puiConnection) {
-			break;
-		} else if ((*puiConnection == 0)
-			   && (uiFreeEntry == 0xFFFF)) {	// free entry
-			uiFreeEntry = uiCount;
-		}
-		uiCount++;
-		puiConnection++;
-	}
-
-	if (uiCount == EPL_SDO_MAX_CONNECTION_ASND) {
-		if (uiFreeEntry != 0xFFFF) {
-			puiConnection =
-			    &SdoAsndInstance_g.
-			    m_auiSdoAsndConnection[uiFreeEntry];
-			*puiConnection = uiNodeId;
-			uiCount = uiFreeEntry;
-		} else {
-			EPL_DBGLVL_SDO_TRACE0
-			    ("EplSdoAsnduCb(): no free handle\n");
-			goto Exit;
-		}
-	}
-//    if (uiNodeId == *puiConnection)
-	{			// entry found or created
-		SdoConHdl = (uiCount | EPL_SDO_ASND_HANDLE);
-
-		SdoAsndInstance_g.m_fpSdoAsySeqCb(SdoConHdl,
-						  &pFrame->m_Data.m_Asnd.
-						  m_Payload.m_SdoSequenceFrame,
-						  (pFrameInfo_p->m_uiFrameSize -
-						   18));
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-// EOF
diff --git a/drivers/staging/epl/EplSdoAsySequ.c b/drivers/staging/epl/EplSdoAsySequ.c
deleted file mode 100644
index 256d708..0000000
--- a/drivers/staging/epl/EplSdoAsySequ.c
+++ /dev/null
@@ -1,2522 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for asychronous SDO Sequence Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoAsySequ.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.10 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplSdoAsySequ.h"
-
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) == 0) &&\
-     (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) == 0)   )
-
-#error 'ERROR: At least UDP or Asnd module needed!'
-
-#endif
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define EPL_SDO_HISTORY_SIZE        5
-
-#ifndef EPL_MAX_SDO_SEQ_CON
-#define EPL_MAX_SDO_SEQ_CON         10
-#endif
-
-#define EPL_SEQ_DEFAULT_TIMEOUT     5000	// in [ms] => 5 sec
-
-#define EPL_SEQ_RETRY_COUNT         5	// => max. Timeout 30 sec
-
-#define EPL_SEQ_NUM_THRESHOLD       100	// threshold which distinguishes between old and new sequence numbers
-
-// define frame with size of Asnd-Header-, SDO Sequenze Header size, SDO Command header
-// and Ethernet-Header size
-#define EPL_SEQ_FRAME_SIZE          24
-// size of the header of the asynchronus SDO Sequence layer
-#define EPL_SEQ_HEADER_SIZE         4
-
-// buffersize for one frame in history
-#define EPL_SEQ_HISTROY_FRAME_SIZE  EPL_MAX_SDO_FRAME_SIZE
-
-// mask to get scon and rcon
-#define EPL_ASY_SDO_CON_MASK        0x03
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-// events for processfunction
-typedef enum {
-	kAsySdoSeqEventNoEvent = 0x00,	// no Event
-	kAsySdoSeqEventInitCon = 0x01,	// init connection
-	kAsySdoSeqEventFrameRec = 0x02,	// frame received
-	kAsySdoSeqEventFrameSend = 0x03,	// frame to send
-	kAsySdoSeqEventTimeout = 0x04,	// Timeout for connection
-	kAsySdoSeqEventCloseCon = 0x05	// higher layer close connection
-} tEplAsySdoSeqEvent;
-
-// structure for History-Buffer
-typedef struct {
-	u8 m_bFreeEntries;
-	u8 m_bWrite;		// index of the next free buffer entry
-	u8 m_bAck;		// index of the next message which should become acknowledged
-	u8 m_bRead;		// index between m_bAck and m_bWrite to the next message for retransmission
-	u8 m_aabHistoryFrame[EPL_SDO_HISTORY_SIZE]
-	    [EPL_SEQ_HISTROY_FRAME_SIZE];
-	unsigned int m_auiFrameSize[EPL_SDO_HISTORY_SIZE];
-
-} tEplAsySdoConHistory;
-
-// state of the statemaschine
-typedef enum {
-	kEplAsySdoStateIdle = 0x00,
-	kEplAsySdoStateInit1 = 0x01,
-	kEplAsySdoStateInit2 = 0x02,
-	kEplAsySdoStateInit3 = 0x03,
-	kEplAsySdoStateConnected = 0x04,
-	kEplAsySdoStateWaitAck = 0x05
-} tEplAsySdoState;
-
-// connection control structure
-typedef struct {
-	tEplSdoConHdl m_ConHandle;
-	tEplAsySdoState m_SdoState;
-	u8 m_bRecSeqNum;	// name from view of the communication partner
-	u8 m_bSendSeqNum;	// name from view of the communication partner
-	tEplAsySdoConHistory m_SdoConHistory;
-	tEplTimerHdl m_EplTimerHdl;
-	unsigned int m_uiRetryCount;	// retry counter
-	unsigned int m_uiUseCount;	// one sequence layer connection may be used by
-	// multiple command layer connections
-
-} tEplAsySdoSeqCon;
-
-// instance structure
-typedef struct {
-	tEplAsySdoSeqCon m_AsySdoConnection[EPL_MAX_SDO_SEQ_CON];
-	tEplSdoComReceiveCb m_fpSdoComReceiveCb;
-	tEplSdoComConCb m_fpSdoComConCb;
-
-#if defined(WIN32) || defined(_WIN32)
-	LPCRITICAL_SECTION m_pCriticalSection;
-	CRITICAL_SECTION m_CriticalSection;
-
-	LPCRITICAL_SECTION m_pCriticalSectionReceive;
-	CRITICAL_SECTION m_CriticalSectionReceive;
-#endif
-
-} tEplAsySdoSequInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplAsySdoSequInstance AsySdoSequInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplSdoAsySeqProcess(unsigned int uiHandle_p,
-				      unsigned int uiDataSize_p,
-				      tEplFrame * pData_p,
-				      tEplAsySdoSeq * pRecFrame_p,
-				      tEplAsySdoSeqEvent Event_p);
-
-static tEplKernel EplSdoAsySeqSendIntern(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					 unsigned int uiDataSize_p,
-					 tEplFrame * pData_p,
-					 BOOL fFrameInHistory);
-
-static tEplKernel EplSdoAsySeqSendLowerLayer(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     unsigned int uiDataSize_p,
-					     tEplFrame * pEplFrame_p);
-
-tEplKernel EplSdoAsyReceiveCb(tEplSdoConHdl ConHdl_p,
-			      tEplAsySdoSeq *pSdoSeqData_p,
-			      unsigned int uiDataSize_p);
-
-static tEplKernel EplSdoAsyInitHistory(void);
-
-static tEplKernel EplSdoAsyAddFrameToHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     tEplFrame * pFrame_p,
-					     unsigned int uiSize_p);
-
-static tEplKernel EplSdoAsyAckFrameToHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     u8 bRecSeqNumber_p);
-
-static tEplKernel EplSdoAsyReadFromHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					   tEplFrame ** ppFrame_p,
-					   unsigned int *puiSize_p,
-					   BOOL fInitRead);
-
-static unsigned int EplSdoAsyGetFreeEntriesFromHistory(tEplAsySdoSeqCon *
-						       pAsySdoSeqCon_p);
-
-static tEplKernel EplSdoAsySeqSetTimer(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-				       unsigned long ulTimeout);
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <EPL asychronus SDO Sequence layer>                 */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: this module contains the asynchronus SDO Sequence Layer for
-//              the EPL SDO service
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqInit
-//
-// Description: init first instance
-//
-//
-//
-// Parameters:  fpSdoComCb_p    = callback function to inform Command layer
-//                                about new frames
-//              fpSdoComConCb_p = callback function to inform command layer
-//                                about connection state
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqInit(tEplSdoComReceiveCb fpSdoComCb_p,
-			    tEplSdoComConCb fpSdoComConCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplSdoAsySeqAddInstance(fpSdoComCb_p, fpSdoComConCb_p);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqAddInstance
-//
-// Description: init following instances
-//
-//
-//
-// Parameters:  fpSdoComCb_p    = callback function to inform Command layer
-//                                about new frames
-//              fpSdoComConCb_p = callback function to inform command layer
-//                                about connection state
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqAddInstance(tEplSdoComReceiveCb fpSdoComCb_p,
-				   tEplSdoComConCb fpSdoComConCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// check functionpointer
-	if (fpSdoComCb_p == NULL) {
-		Ret = kEplSdoSeqMissCb;
-		goto Exit;
-	} else {
-		AsySdoSequInstance_g.m_fpSdoComReceiveCb = fpSdoComCb_p;
-	}
-
-	// check functionpointer
-	if (fpSdoComConCb_p == NULL) {
-		Ret = kEplSdoSeqMissCb;
-		goto Exit;
-	} else {
-		AsySdoSequInstance_g.m_fpSdoComConCb = fpSdoComConCb_p;
-	}
-
-	// set controllstructure to 0
-	EPL_MEMSET(&AsySdoSequInstance_g.m_AsySdoConnection[0], 0x00,
-		   sizeof(AsySdoSequInstance_g.m_AsySdoConnection));
-
-	// init History
-	Ret = EplSdoAsyInitHistory();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#if defined(WIN32) || defined(_WIN32)
-	// create critical section for process function
-	AsySdoSequInstance_g.m_pCriticalSection =
-	    &AsySdoSequInstance_g.m_CriticalSection;
-	InitializeCriticalSection(AsySdoSequInstance_g.m_pCriticalSection);
-
-	// init critical section for receive cb function
-	AsySdoSequInstance_g.m_pCriticalSectionReceive =
-	    &AsySdoSequInstance_g.m_CriticalSectionReceive;
-	InitializeCriticalSection(AsySdoSequInstance_g.
-				  m_pCriticalSectionReceive);
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-	// init lower layer
-	Ret = EplSdoUdpuAddInstance(EplSdoAsyReceiveCb);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-	// init lower layer
-	Ret = EplSdoAsnduAddInstance(EplSdoAsyReceiveCb);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqDelInstance
-//
-// Description: delete instances
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqDelInstance(void)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-
-	Ret = kEplSuccessful;
-
-	// delete timer of open connections
-	uiCount = 0;
-	pAsySdoSeqCon = &AsySdoSequInstance_g.m_AsySdoConnection[0];
-	while (uiCount < EPL_MAX_SDO_SEQ_CON) {
-		if (pAsySdoSeqCon->m_ConHandle != 0) {
-			EplTimeruDeleteTimer(&pAsySdoSeqCon->m_EplTimerHdl);
-		}
-		uiCount++;
-		pAsySdoSeqCon++;
-	}
-
-#if defined(WIN32) || defined(_WIN32)
-	// delete critical section for process function
-	DeleteCriticalSection(AsySdoSequInstance_g.m_pCriticalSection);
-#endif
-
-	// set instance-table to 0
-	EPL_MEMSET(&AsySdoSequInstance_g, 0x00, sizeof(AsySdoSequInstance_g));
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-	// delete lower layer
-	Ret = EplSdoUdpuDelInstance();
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-	// delete lower layer
-	Ret = EplSdoAsnduDelInstance();
-#endif
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqInitCon
-//
-// Description: start initialization of a sequence layer connection.
-//              It tries to reuse an existing connection to the same node.
-//
-//
-// Parameters:  pSdoSeqConHdl_p = pointer to the variable for the connection handle
-//              uiNodeId_p      = Node Id of the target
-//              SdoType          = Type of the SDO connection
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqInitCon(tEplSdoSeqConHdl *pSdoSeqConHdl_p,
-			       unsigned int uiNodeId_p,
-			       tEplSdoType SdoType)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-	unsigned int uiFreeCon;
-	tEplSdoConHdl ConHandle;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-	Ret = kEplSuccessful;
-
-	// check SdoType
-	// call init function of the protcol abstraction layer
-	// which tries to find an existing connection to the same node
-	switch (SdoType) {
-		// SDO over UDP
-	case kEplSdoTypeUdp:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-			Ret = EplSdoUdpuInitCon(&ConHandle, uiNodeId_p);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-#else
-			Ret = kEplSdoSeqUnsupportedProt;
-#endif
-			break;
-		}
-
-		// SDO over Asnd
-	case kEplSdoTypeAsnd:
-		{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-			Ret = EplSdoAsnduInitCon(&ConHandle, uiNodeId_p);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-#else
-			Ret = kEplSdoSeqUnsupportedProt;
-#endif
-			break;
-		}
-
-		// unsupported protocols
-		// -> auto should be replaced by command layer
-	case kEplSdoTypeAuto:
-	case kEplSdoTypePdo:
-	default:
-		{
-			Ret = kEplSdoSeqUnsupportedProt;
-			goto Exit;
-		}
-
-	}			// end of switch(SdoType)
-
-	// find existing connection to the same node or find empty entry for connection
-	uiCount = 0;
-	uiFreeCon = EPL_MAX_SDO_SEQ_CON;
-	pAsySdoSeqCon = &AsySdoSequInstance_g.m_AsySdoConnection[0];
-
-	while (uiCount < EPL_MAX_SDO_SEQ_CON) {
-		if (pAsySdoSeqCon->m_ConHandle == ConHandle) {	// existing connection found
-			break;
-		}
-		if (pAsySdoSeqCon->m_ConHandle == 0) {
-			uiFreeCon = uiCount;
-		}
-		uiCount++;
-		pAsySdoSeqCon++;
-	}
-
-	if (uiCount == EPL_MAX_SDO_SEQ_CON) {
-		if (uiFreeCon == EPL_MAX_SDO_SEQ_CON) {	// no free entry found
-			switch (SdoType) {
-				// SDO over UDP
-			case kEplSdoTypeUdp:
-				{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-					Ret = EplSdoUdpuDelCon(ConHandle);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-#endif
-					break;
-				}
-
-				// SDO over Asnd
-			case kEplSdoTypeAsnd:
-				{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-					Ret = EplSdoAsnduDelCon(ConHandle);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-#endif
-					break;
-				}
-
-				// unsupported protocols
-				// -> auto should be replaced by command layer
-			case kEplSdoTypeAuto:
-			case kEplSdoTypePdo:
-			default:
-				{
-					Ret = kEplSdoSeqUnsupportedProt;
-					goto Exit;
-				}
-
-			}	// end of switch(SdoType)
-
-			Ret = kEplSdoSeqNoFreeHandle;
-			goto Exit;
-		} else {	// free entry found
-			pAsySdoSeqCon =
-			    &AsySdoSequInstance_g.m_AsySdoConnection[uiFreeCon];
-			pAsySdoSeqCon->m_ConHandle = ConHandle;
-			uiCount = uiFreeCon;
-		}
-	}
-	// set handle
-	*pSdoSeqConHdl_p = (uiCount | EPL_SDO_ASY_HANDLE);
-
-	// increment use counter
-	pAsySdoSeqCon->m_uiUseCount++;
-
-	// call intern process function
-	Ret = EplSdoAsySeqProcess(uiCount,
-				  0, NULL, NULL, kAsySdoSeqEventInitCon);
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqSendData
-//
-// Description: send sata unsing a established connection
-//
-//
-//
-// Parameters:  pSdoSeqConHdl_p = connection handle
-//              uiDataSize_p    = Size of Frame to send
-//                                  -> wihtout SDO sequence layer header, Asnd header
-//                                     and ethernetnet
-//                                  ==> SDO Sequence layer payload
-//              SdoType          = Type of the SDO connection
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqSendData(tEplSdoSeqConHdl SdoSeqConHdl_p,
-				unsigned int uiDataSize_p,
-				tEplFrame *pabData_p)
-{
-	tEplKernel Ret;
-	unsigned int uiHandle;
-
-	uiHandle = (SdoSeqConHdl_p & ~EPL_SDO_SEQ_HANDLE_MASK);
-
-	// check if connection ready
-	if (AsySdoSequInstance_g.m_AsySdoConnection[uiHandle].m_SdoState ==
-	    kEplAsySdoStateIdle) {
-		// no connection with this handle
-		Ret = kEplSdoSeqInvalidHdl;
-		goto Exit;
-	} else if (AsySdoSequInstance_g.m_AsySdoConnection[uiHandle].
-		   m_SdoState != kEplAsySdoStateConnected) {
-		Ret = kEplSdoSeqConnectionBusy;
-		goto Exit;
-	}
-
-	Ret = EplSdoAsySeqProcess(uiHandle,
-				  uiDataSize_p,
-				  pabData_p, NULL, kAsySdoSeqEventFrameSend);
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqProcessEvent
-//
-// Description: function processes extern events
-//              -> later needed for timeout controll with timer-module
-//
-//
-//
-// Parameters:  pEvent_p = pointer to event
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqProcessEvent(tEplEvent *pEvent_p)
-{
-	tEplKernel Ret;
-	tEplTimerEventArg *pTimerEventArg;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-	tEplTimerHdl EplTimerHdl;
-	unsigned int uiCount;
-
-	Ret = kEplSuccessful;
-	// check parameter
-	if (pEvent_p == NULL) {
-		Ret = kEplSdoSeqInvalidEvent;
-		goto Exit;
-	}
-
-	if (pEvent_p->m_EventType != kEplEventTypeTimer) {
-		Ret = kEplSdoSeqInvalidEvent;
-		goto Exit;
-	}
-	// get timerhdl
-	pTimerEventArg = (tEplTimerEventArg *) pEvent_p->m_pArg;
-	EplTimerHdl = pTimerEventArg->m_TimerHdl;
-
-	// get pointer to intern control structure of connection
-	if (pTimerEventArg->m_ulArg == 0) {
-		goto Exit;
-	}
-	pAsySdoSeqCon = (tEplAsySdoSeqCon *) pTimerEventArg->m_ulArg;
-
-	// check if time is current
-	if (EplTimerHdl != pAsySdoSeqCon->m_EplTimerHdl) {
-		// delete timer
-		EplTimeruDeleteTimer(&EplTimerHdl);
-		goto Exit;
-	}
-	// delete timer
-	EplTimeruDeleteTimer(&pAsySdoSeqCon->m_EplTimerHdl);
-
-	// get indexnumber of control structure
-	uiCount = 0;
-	while ((&AsySdoSequInstance_g.m_AsySdoConnection[uiCount]) !=
-	       pAsySdoSeqCon) {
-		uiCount++;
-		if (uiCount > EPL_MAX_SDO_SEQ_CON) {
-			goto Exit;
-		}
-	}
-
-	// process event and call processfunction if needed
-	Ret = EplSdoAsySeqProcess(uiCount,
-				  0, NULL, NULL, kAsySdoSeqEventTimeout);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqDelCon
-//
-// Description: del and close one connection
-//
-//
-//
-// Parameters:  SdoSeqConHdl_p = handle of connection
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsySeqDelCon(tEplSdoSeqConHdl SdoSeqConHdl_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiHandle;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-
-	uiHandle = (SdoSeqConHdl_p & ~EPL_SDO_SEQ_HANDLE_MASK);
-
-	// check if handle invalid
-	if (uiHandle >= EPL_MAX_SDO_SEQ_CON) {
-		Ret = kEplSdoSeqInvalidHdl;
-		goto Exit;
-	}
-	// get pointer to connection
-	pAsySdoSeqCon = &AsySdoSequInstance_g.m_AsySdoConnection[uiHandle];
-
-	// decrement use counter
-	pAsySdoSeqCon->m_uiUseCount--;
-
-	if (pAsySdoSeqCon->m_uiUseCount == 0) {
-		// process close in processfunction
-		Ret = EplSdoAsySeqProcess(uiHandle,
-					  0,
-					  NULL, NULL, kAsySdoSeqEventCloseCon);
-
-		//check protocol
-		if ((pAsySdoSeqCon->m_ConHandle & EPL_SDO_ASY_HANDLE_MASK) ==
-		    EPL_SDO_UDP_HANDLE) {
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-			// call close function of lower layer
-			EplSdoUdpuDelCon(pAsySdoSeqCon->m_ConHandle);
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-		} else {
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-			// call close function of lower layer
-			EplSdoAsnduDelCon(pAsySdoSeqCon->m_ConHandle);
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-		}
-
-		// delete timer
-		EplTimeruDeleteTimer(&pAsySdoSeqCon->m_EplTimerHdl);
-
-		// clean controllstructure
-		EPL_MEMSET(pAsySdoSeqCon, 0x00, sizeof(tEplAsySdoSeqCon));
-		pAsySdoSeqCon->m_SdoConHistory.m_bFreeEntries =
-		    EPL_SDO_HISTORY_SIZE;
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplEplSdoAsySeqProcess
-//
-// Description: intern function to process the asynchronus SDO Sequence Layer
-//              state maschine
-//
-//
-//
-// Parameters:  uiHandle_p      = index of the control structure of the connection
-//              uiDataSize_p    = size of data frame to process (can be 0)
-//                                  -> without size of sequence header and Asnd header!!!
-//
-//              pData_p         = pointer to frame to send (can be NULL)
-//              pRecFrame_p     = pointer to received frame (can be NULL)
-//              Event_p         = Event to process
-//
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsySeqProcess(unsigned int uiHandle_p,
-				      unsigned int uiDataSize_p,
-				      tEplFrame * pData_p,
-				      tEplAsySdoSeq * pRecFrame_p,
-				      tEplAsySdoSeqEvent Event_p)
-{
-	tEplKernel Ret;
-	unsigned int uiFrameSize;
-	tEplFrame *pEplFrame;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-	tEplSdoSeqConHdl SdoSeqConHdl;
-	unsigned int uiFreeEntries;
-
-#if defined(WIN32) || defined(_WIN32)
-	// enter  critical section for process function
-	EnterCriticalSection(AsySdoSequInstance_g.m_pCriticalSection);
-#endif
-
-	Ret = kEplSuccessful;
-
-	// get handle for hinger layer
-	SdoSeqConHdl = uiHandle_p | EPL_SDO_ASY_HANDLE;
-
-	// check if handle invalid
-	if ((SdoSeqConHdl & ~EPL_SDO_SEQ_HANDLE_MASK) ==
-	    EPL_SDO_SEQ_INVALID_HDL) {
-		Ret = kEplSdoSeqInvalidHdl;
-		goto Exit;
-	}
-	// get pointer to connection
-	pAsySdoSeqCon = &AsySdoSequInstance_g.m_AsySdoConnection[uiHandle_p];
-
-	// check size
-	if ((pData_p == NULL) && (pRecFrame_p == NULL) && (uiDataSize_p != 0)) {
-		Ret = kEplSdoSeqInvalidFrame;
-		goto Exit;
-	}
-	// check state
-	switch (pAsySdoSeqCon->m_SdoState) {
-		// idle state
-	case kEplAsySdoStateIdle:
-		{
-			// check event
-			switch (Event_p) {
-				// new connection
-				// -> send init frame and change to
-				// kEplAsySdoStateInit1
-			case kAsySdoSeqEventInitCon:
-				{
-					// set sending scon to 1
-					pAsySdoSeqCon->m_bRecSeqNum = 0x01;
-					// set set send rcon to 0
-					pAsySdoSeqCon->m_bSendSeqNum = 0x00;
-					Ret =
-					    EplSdoAsySeqSendIntern
-					    (pAsySdoSeqCon, 0, NULL, FALSE);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-					// change state
-					pAsySdoSeqCon->m_SdoState =
-					    kEplAsySdoStateInit1;
-
-					// set timer
-					Ret =
-					    EplSdoAsySeqSetTimer(pAsySdoSeqCon,
-								 EPL_SEQ_DEFAULT_TIMEOUT);
-
-					break;
-				}
-
-				// init con from extern
-				// check rcon and scon
-				// -> send answer
-			case kAsySdoSeqEventFrameRec:
-				{
-/*
-                    PRINTF3("%s scon=%u rcon=%u\n",
-                            __func__,
-                            pRecFrame_p->m_le_bSendSeqNumCon,
-                            pRecFrame_p->m_le_bRecSeqNumCon);
-*/
-					// check if scon == 1 and rcon == 0
-					if (((pRecFrame_p->
-					      m_le_bRecSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x00)
-					    &&
-					    ((pRecFrame_p->
-					      m_le_bSendSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x01)) {
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-						// create answer and send answer
-						// set rcon to 1 (in send direction own scon)
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// change state to kEplAsySdoStateInit2
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateInit2;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-					} else {	// error -> close
-						// delete timer
-						EplTimeruDeleteTimer
-						    (&pAsySdoSeqCon->
-						     m_EplTimerHdl);
-						if (((pRecFrame_p->
-						      m_le_bRecSeqNumCon &
-						      EPL_ASY_SDO_CON_MASK) !=
-						     0x00)
-						    || ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) != 0x00)) {	// d.k. only answer with close message if the message sent was not a close message
-							// save sequence numbers
-							pAsySdoSeqCon->
-							    m_bRecSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bRecSeqNumCon);
-							pAsySdoSeqCon->
-							    m_bSendSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-							// set rcon and scon to 0
-							pAsySdoSeqCon->
-							    m_bSendSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							pAsySdoSeqCon->
-							    m_bRecSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							// send frame
-							EplSdoAsySeqSendIntern
-							    (pAsySdoSeqCon, 0,
-							     NULL, FALSE);
-						}
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateInitError);
-					}
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(Event_p)
-			break;
-		}
-
-		// init connection step 1
-		// wait for frame with scon = 1
-		// and rcon = 1
-	case kEplAsySdoStateInit1:
-		{
-//            PRINTF0("EplSdoAsySequ: StateInit1\n");
-
-			// check event
-			switch (Event_p) {
-				// frame received
-			case kAsySdoSeqEventFrameRec:
-				{
-					// check scon == 1 and rcon == 1
-					if (((pRecFrame_p->
-					      m_le_bRecSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x01)
-					    && ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) == 0x01)) {	// create answer own scon = 2
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// change state to kEplAsySdoStateInit3
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateInit3;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-
-					}
-					// check if scon == 1 and rcon == 0, i.e. other side wants me to be server
-					else if (((pRecFrame_p->
-						   m_le_bRecSeqNumCon &
-						   EPL_ASY_SDO_CON_MASK) ==
-						  0x00)
-						 &&
-						 ((pRecFrame_p->
-						   m_le_bSendSeqNumCon &
-						   EPL_ASY_SDO_CON_MASK) ==
-						  0x01)) {
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-						// create answer and send answer
-						// set rcon to 1 (in send direction own scon)
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// change state to kEplAsySdoStateInit2
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateInit2;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-					} else {	// error -> Close
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateIdle;
-						// delete timer
-						EplTimeruDeleteTimer
-						    (&pAsySdoSeqCon->
-						     m_EplTimerHdl);
-						if (((pRecFrame_p->
-						      m_le_bRecSeqNumCon &
-						      EPL_ASY_SDO_CON_MASK) !=
-						     0x00)
-						    || ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) != 0x00)) {	// d.k. only answer with close message if the message sent was not a close message
-							// save sequence numbers
-							pAsySdoSeqCon->
-							    m_bRecSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bRecSeqNumCon);
-							pAsySdoSeqCon->
-							    m_bSendSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-
-							// set rcon and scon to 0
-							pAsySdoSeqCon->
-							    m_bSendSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							pAsySdoSeqCon->
-							    m_bRecSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							// send frame
-							EplSdoAsySeqSendIntern
-							    (pAsySdoSeqCon, 0,
-							     NULL, FALSE);
-						}
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateInitError);
-					}
-					break;
-				}
-
-				// timeout
-			case kAsySdoSeqEventTimeout:
-				{	// error -> Close
-					pAsySdoSeqCon->m_SdoState =
-					    kEplAsySdoStateIdle;
-
-					// set rcon and scon to 0
-					pAsySdoSeqCon->m_bSendSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					pAsySdoSeqCon->m_bRecSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					// send frame
-					EplSdoAsySeqSendIntern(pAsySdoSeqCon,
-							       0, NULL, FALSE);
-					// call Command Layer Cb
-					AsySdoSequInstance_g.
-					    m_fpSdoComConCb(SdoSeqConHdl,
-							    kAsySdoConStateInitError);
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(Event_p)
-			break;
-		}
-
-		// init connection step 2
-	case kEplAsySdoStateInit2:
-		{
-//            PRINTF0("EplSdoAsySequ: StateInit2\n");
-
-			// check event
-			switch (Event_p) {
-				// frame received
-			case kAsySdoSeqEventFrameRec:
-				{
-					// check scon == 2 and rcon == 1
-					if (((pRecFrame_p->
-					      m_le_bRecSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x01)
-					    && ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) == 0x02)) {	// create answer own rcon = 2
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// change state to kEplAsySdoStateConnected
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateConnected;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateConnected);
-
-					}
-					// check scon == 1 and rcon == 1, i.e. other side wants me to initiate the connection
-					else if (((pRecFrame_p->
-						   m_le_bRecSeqNumCon &
-						   EPL_ASY_SDO_CON_MASK) ==
-						  0x01)
-						 &&
-						 ((pRecFrame_p->
-						   m_le_bSendSeqNumCon &
-						   EPL_ASY_SDO_CON_MASK) ==
-						  0x01)) {
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-						// create answer and send answer
-						// set rcon to 1 (in send direction own scon)
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-						// change state to kEplAsySdoStateInit3
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateInit3;
-
-					} else {	// error -> Close
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateIdle;
-						// delete timer
-						EplTimeruDeleteTimer
-						    (&pAsySdoSeqCon->
-						     m_EplTimerHdl);
-						if (((pRecFrame_p->
-						      m_le_bRecSeqNumCon &
-						      EPL_ASY_SDO_CON_MASK) !=
-						     0x00)
-						    || ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) != 0x00)) {	// d.k. only answer with close message if the message sent was not a close message
-							// save sequence numbers
-							pAsySdoSeqCon->
-							    m_bRecSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bRecSeqNumCon);
-							pAsySdoSeqCon->
-							    m_bSendSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-							// set rcon and scon to 0
-							pAsySdoSeqCon->
-							    m_bSendSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							pAsySdoSeqCon->
-							    m_bRecSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							// send frame
-							EplSdoAsySeqSendIntern
-							    (pAsySdoSeqCon, 0,
-							     NULL, FALSE);
-						}
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateInitError);
-					}
-					break;
-				}
-
-				// timeout
-			case kAsySdoSeqEventTimeout:
-				{	// error -> Close
-					pAsySdoSeqCon->m_SdoState =
-					    kEplAsySdoStateIdle;
-					// set rcon and scon to 0
-					pAsySdoSeqCon->m_bSendSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					pAsySdoSeqCon->m_bRecSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					// send frame
-					EplSdoAsySeqSendIntern(pAsySdoSeqCon,
-							       0, NULL, FALSE);
-
-					// call Command Layer Cb
-					AsySdoSequInstance_g.
-					    m_fpSdoComConCb(SdoSeqConHdl,
-							    kAsySdoConStateInitError);
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(Event_p)
-			break;
-		}
-
-		// init connection step 3
-	case kEplAsySdoStateInit3:
-		{
-			// check event
-			switch (Event_p) {
-				// frame received
-			case kAsySdoSeqEventFrameRec:
-				{
-					// check scon == 2 and rcon == 2
-					if (((pRecFrame_p->
-					      m_le_bRecSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x02)
-					    &&
-					    ((pRecFrame_p->
-					      m_le_bSendSeqNumCon &
-					      EPL_ASY_SDO_CON_MASK) == 0x02)) {
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-						// change state to kEplAsySdoStateConnected
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateConnected;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateConnected);
-
-					}
-					// check scon == 2 and rcon == 1
-					else if (((pRecFrame_p->
-						   m_le_bRecSeqNumCon &
-						   EPL_ASY_SDO_CON_MASK) ==
-						  0x01)
-						 && ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) == 0x02)) {	// create answer own rcon = 2
-						// save sequence numbers
-						pAsySdoSeqCon->m_bRecSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bRecSeqNumCon);
-						pAsySdoSeqCon->m_bSendSeqNum =
-						    AmiGetByteFromLe
-						    (&pRecFrame_p->
-						     m_le_bSendSeqNumCon);
-
-						pAsySdoSeqCon->m_bRecSeqNum++;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// change state to kEplAsySdoStateConnected
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateConnected;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateConnected);
-
-					} else {	// error -> Close
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateIdle;
-						// delete timer
-						EplTimeruDeleteTimer
-						    (&pAsySdoSeqCon->
-						     m_EplTimerHdl);
-						if (((pRecFrame_p->
-						      m_le_bRecSeqNumCon &
-						      EPL_ASY_SDO_CON_MASK) !=
-						     0x00)
-						    || ((pRecFrame_p->m_le_bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) != 0x00)) {	// d.k. only answer with close message if the message sent was not a close message
-							// save sequence numbers
-							pAsySdoSeqCon->
-							    m_bRecSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bRecSeqNumCon);
-							pAsySdoSeqCon->
-							    m_bSendSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-							// set rcon and scon to 0
-							pAsySdoSeqCon->
-							    m_bSendSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							pAsySdoSeqCon->
-							    m_bRecSeqNum &=
-							    EPL_SEQ_NUM_MASK;
-							// send frame
-							EplSdoAsySeqSendIntern
-							    (pAsySdoSeqCon, 0,
-							     NULL, FALSE);
-						}
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateInitError);
-					}
-					break;
-				}
-
-				// timeout
-			case kAsySdoSeqEventTimeout:
-				{	// error -> Close
-					pAsySdoSeqCon->m_SdoState =
-					    kEplAsySdoStateIdle;
-					// set rcon and scon to 0
-					pAsySdoSeqCon->m_bSendSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					pAsySdoSeqCon->m_bRecSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					// send frame
-					EplSdoAsySeqSendIntern(pAsySdoSeqCon,
-							       0, NULL, FALSE);
-
-					// call Command Layer Cb
-					AsySdoSequInstance_g.
-					    m_fpSdoComConCb(SdoSeqConHdl,
-							    kAsySdoConStateInitError);
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(Event_p)
-			break;
-		}
-
-		// connection established
-	case kEplAsySdoStateConnected:
-		{
-			// check event
-			switch (Event_p) {
-
-				// frame to send
-			case kAsySdoSeqEventFrameSend:
-				{
-					// set timer
-					Ret =
-					    EplSdoAsySeqSetTimer(pAsySdoSeqCon,
-								 EPL_SEQ_DEFAULT_TIMEOUT);
-					// check if data frame or ack
-					if (pData_p == NULL) {	// send ack
-						// inc scon
-						//pAsySdoSeqCon->m_bRecSeqNum += 4;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-					} else {	// send dataframe
-						// increment send sequence number
-						pAsySdoSeqCon->m_bRecSeqNum +=
-						    4;
-						Ret =
-						    EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon,
-						     uiDataSize_p, pData_p,
-						     TRUE);
-						if (Ret == kEplSdoSeqRequestAckNeeded) {	// request ack
-							// change state to wait ack
-							pAsySdoSeqCon->
-							    m_SdoState =
-							    kEplAsySdoStateWaitAck;
-							// set Ret to kEplSuccessful, because no error
-							// for higher layer
-							Ret = kEplSuccessful;
-
-						} else if (Ret !=
-							   kEplSuccessful) {
-							goto Exit;
-						} else {
-							// call Command Layer Cb
-							AsySdoSequInstance_g.
-							    m_fpSdoComConCb
-							    (SdoSeqConHdl,
-							     kAsySdoConStateFrameSended);
-						}
-					}
-					break;
-				}	// end of case kAsySdoSeqEventFrameSend
-
-				// frame received
-			case kAsySdoSeqEventFrameRec:
-				{
-					u8 bSendSeqNumCon =
-					    AmiGetByteFromLe(&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-
-					// set timer
-					Ret =
-					    EplSdoAsySeqSetTimer(pAsySdoSeqCon,
-								 EPL_SEQ_DEFAULT_TIMEOUT);
-					// check scon
-					switch (bSendSeqNumCon &
-						EPL_ASY_SDO_CON_MASK) {
-						// close from other node
-					case 0:
-					case 1:
-						{
-							// return to idle
-							pAsySdoSeqCon->
-							    m_SdoState =
-							    kEplAsySdoStateIdle;
-							// delete timer
-							EplTimeruDeleteTimer
-							    (&pAsySdoSeqCon->
-							     m_EplTimerHdl);
-							// call Command Layer Cb
-							AsySdoSequInstance_g.
-							    m_fpSdoComConCb
-							    (SdoSeqConHdl,
-							     kAsySdoConStateConClosed);
-
-							break;
-						}
-
-						// Request Ack or Error Ack
-						// possible contain data
-					case 3:
-						// normal frame
-					case 2:
-						{
-							if ((AmiGetByteFromLe
-							     (&pRecFrame_p->
-							      m_le_bRecSeqNumCon)
-							     &
-							     EPL_ASY_SDO_CON_MASK)
-							    == 3) {
-//                                PRINTF0("EplSdoAsySequ: error response received\n");
-
-								// error response (retransmission request)
-								// resend frames from history
-
-								// read frame from history
-								Ret =
-								    EplSdoAsyReadFromHistory
-								    (pAsySdoSeqCon,
-								     &pEplFrame,
-								     &uiFrameSize,
-								     TRUE);
-								if (Ret !=
-								    kEplSuccessful)
-								{
-									goto Exit;
-								}
-
-								while ((pEplFrame != NULL)
-								       &&
-								       (uiFrameSize
-									!= 0)) {
-									// send frame
-									Ret =
-									    EplSdoAsySeqSendLowerLayer
-									    (pAsySdoSeqCon,
-									     uiFrameSize,
-									     pEplFrame);
-									if (Ret
-									    !=
-									    kEplSuccessful)
-									{
-										goto Exit;
-									}
-									// read next frame from history
-									Ret =
-									    EplSdoAsyReadFromHistory
-									    (pAsySdoSeqCon,
-									     &pEplFrame,
-									     &uiFrameSize,
-									     FALSE);
-									if (Ret
-									    !=
-									    kEplSuccessful)
-									{
-										goto Exit;
-									}
-								}	// end of while((pabFrame != NULL)
-							}	// end of if (error response)
-
-							if (((pAsySdoSeqCon->m_bSendSeqNum + 4) & EPL_SEQ_NUM_MASK) == (bSendSeqNumCon & EPL_SEQ_NUM_MASK)) {	// next frame of sequence received
-								// save send sequence number (without ack request)
-								pAsySdoSeqCon->
-								    m_bSendSeqNum
-								    =
-								    bSendSeqNumCon
-								    & ~0x01;
-
-								// check if ack or data-frame
-								//ignore ack -> already processed
-								if (uiDataSize_p
-								    >
-								    EPL_SEQ_HEADER_SIZE)
-								{
-									AsySdoSequInstance_g.
-									    m_fpSdoComReceiveCb
-									    (SdoSeqConHdl,
-									     ((tEplAsySdoCom *) & pRecFrame_p->m_le_abSdoSeqPayload), (uiDataSize_p - EPL_SEQ_HEADER_SIZE));
-									// call Command Layer Cb
-									AsySdoSequInstance_g.
-									    m_fpSdoComConCb
-									    (SdoSeqConHdl,
-									     kAsySdoConStateFrameSended);
-
-								} else {
-									// call Command Layer Cb
-									AsySdoSequInstance_g.
-									    m_fpSdoComConCb
-									    (SdoSeqConHdl,
-									     kAsySdoConStateAckReceived);
-								}
-							} else if (((bSendSeqNumCon - pAsySdoSeqCon->m_bSendSeqNum - 4) & EPL_SEQ_NUM_MASK) < EPL_SEQ_NUM_THRESHOLD) {	// frame of sequence was lost,
-								// because difference of received and old value
-								// is less then halve of the values range.
-
-								// send error frame with own rcon = 3
-								pAsySdoSeqCon->
-								    m_bSendSeqNum
-								    |= 0x03;
-								Ret =
-								    EplSdoAsySeqSendIntern
-								    (pAsySdoSeqCon,
-								     0, NULL,
-								     FALSE);
-								// restore send sequence number
-								pAsySdoSeqCon->
-								    m_bSendSeqNum
-								    =
-								    (pAsySdoSeqCon->
-								     m_bSendSeqNum
-								     &
-								     EPL_SEQ_NUM_MASK)
-								    | 0x02;
-								if (Ret !=
-								    kEplSuccessful)
-								{
-									goto Exit;
-								}
-								// break here, because a requested acknowledge
-								// was sent implicitly above
-								break;
-							}
-							// else, ignore repeated frame
-
-							if ((bSendSeqNumCon & EPL_ASY_SDO_CON_MASK) == 3) {	// ack request received
-
-								// create ack with own scon = 2
-								Ret =
-								    EplSdoAsySeqSendIntern
-								    (pAsySdoSeqCon,
-								     0, NULL,
-								     FALSE);
-								if (Ret !=
-								    kEplSuccessful)
-								{
-									goto Exit;
-								}
-							}
-
-							break;
-						}
-
-					}	// switch(pAsySdoSeqCon->m_bSendSeqNum & EPL_ASY_SDO_CON_MASK)
-					break;
-				}	// end of case kAsySdoSeqEventFrameRec:
-
-				//close event from higher layer
-			case kAsySdoSeqEventCloseCon:
-				{
-					pAsySdoSeqCon->m_SdoState =
-					    kEplAsySdoStateIdle;
-					// set rcon and scon to 0
-					pAsySdoSeqCon->m_bSendSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					pAsySdoSeqCon->m_bRecSeqNum &=
-					    EPL_SEQ_NUM_MASK;
-					// send frame
-					EplSdoAsySeqSendIntern(pAsySdoSeqCon,
-							       0, NULL, FALSE);
-
-					// delete timer
-					EplTimeruDeleteTimer(&pAsySdoSeqCon->
-							     m_EplTimerHdl);
-					// call Command Layer Cb is not necessary, because the event came from there
-//                    AsySdoSequInstance_g.m_fpSdoComConCb(SdoSeqConHdl,
-//                                                            kAsySdoConStateInitError);
-					break;
-				}
-
-				// timeout
-			case kAsySdoSeqEventTimeout:
-				{
-
-					uiFreeEntries =
-					    EplSdoAsyGetFreeEntriesFromHistory
-					    (pAsySdoSeqCon);
-					if ((uiFreeEntries <
-					     EPL_SDO_HISTORY_SIZE)
-					    && (pAsySdoSeqCon->m_uiRetryCount < EPL_SEQ_RETRY_COUNT)) {	// unacknowlegded frames in history
-						// and retry counter not exceeded
-
-						// resend data with acknowledge request
-
-						// increment retry counter
-						pAsySdoSeqCon->m_uiRetryCount++;
-
-						// set timer
-						Ret =
-						    EplSdoAsySeqSetTimer
-						    (pAsySdoSeqCon,
-						     EPL_SEQ_DEFAULT_TIMEOUT);
-
-						// read first frame from history
-						Ret =
-						    EplSdoAsyReadFromHistory
-						    (pAsySdoSeqCon, &pEplFrame,
-						     &uiFrameSize, TRUE);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-
-						if ((pEplFrame != NULL)
-						    && (uiFrameSize != 0)) {
-
-							// set ack request in scon
-							AmiSetByteToLe
-							    (&pEplFrame->m_Data.
-							     m_Asnd.m_Payload.
-							     m_SdoSequenceFrame.
-							     m_le_bSendSeqNumCon,
-							     AmiGetByteFromLe
-							     (&pEplFrame->
-							      m_Data.m_Asnd.
-							      m_Payload.
-							      m_SdoSequenceFrame.
-							      m_le_bSendSeqNumCon)
-							     | 0x03);
-
-							// send frame
-							Ret =
-							    EplSdoAsySeqSendLowerLayer
-							    (pAsySdoSeqCon,
-							     uiFrameSize,
-							     pEplFrame);
-							if (Ret !=
-							    kEplSuccessful) {
-								goto Exit;
-							}
-
-						}
-					} else {
-						// timeout, because of no traffic -> Close
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateIdle;
-						// set rcon and scon to 0
-						pAsySdoSeqCon->m_bSendSeqNum &=
-						    EPL_SEQ_NUM_MASK;
-						pAsySdoSeqCon->m_bRecSeqNum &=
-						    EPL_SEQ_NUM_MASK;
-						// send frame
-						EplSdoAsySeqSendIntern
-						    (pAsySdoSeqCon, 0, NULL,
-						     FALSE);
-
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateTimeout);
-					}
-
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(Event_p)
-			break;
-		}
-
-		// wait for Acknowledge (history buffer full)
-	case kEplAsySdoStateWaitAck:
-		{
-			PRINTF0("EplSdoAsySequ: StateWaitAck\n");
-
-			// set timer
-			Ret = EplSdoAsySeqSetTimer(pAsySdoSeqCon,
-						   EPL_SEQ_DEFAULT_TIMEOUT);
-
-			//TODO: retry of acknowledge
-			if (Event_p == kAsySdoSeqEventFrameRec) {
-				// check rcon
-				switch (pRecFrame_p->
-					m_le_bRecSeqNumCon &
-					EPL_ASY_SDO_CON_MASK) {
-					// close-frome other node
-				case 0:
-					{
-						// return to idle
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateIdle;
-						// delete timer
-						EplTimeruDeleteTimer
-						    (&pAsySdoSeqCon->
-						     m_EplTimerHdl);
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateConClosed);
-
-						break;
-					}
-
-					// normal frame
-				case 2:
-					{
-						// should be ack
-						// -> change to state kEplAsySdoStateConnected
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateConnected;
-						// call Command Layer Cb
-						AsySdoSequInstance_g.
-						    m_fpSdoComConCb
-						    (SdoSeqConHdl,
-						     kAsySdoConStateAckReceived);
-						// send data to higher layer if needed
-						if (uiDataSize_p >
-						    EPL_SEQ_HEADER_SIZE) {
-							AsySdoSequInstance_g.
-							    m_fpSdoComReceiveCb
-							    (SdoSeqConHdl,
-							     ((tEplAsySdoCom *)
-							      & pRecFrame_p->
-							      m_le_abSdoSeqPayload),
-							     (uiDataSize_p -
-							      EPL_SEQ_HEADER_SIZE));
-						}
-						break;
-					}
-
-					// Request Ack or Error Ack
-				case 3:
-					{
-						// -> change to state kEplAsySdoStateConnected
-						pAsySdoSeqCon->m_SdoState =
-						    kEplAsySdoStateConnected;
-
-						if (pRecFrame_p->m_le_bRecSeqNumCon == pAsySdoSeqCon->m_bRecSeqNum) {	// ack request
-							// -> send ack
-							// save sequence numbers
-							pAsySdoSeqCon->
-							    m_bRecSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bRecSeqNumCon);
-							pAsySdoSeqCon->
-							    m_bSendSeqNum =
-							    AmiGetByteFromLe
-							    (&pRecFrame_p->
-							     m_le_bSendSeqNumCon);
-
-							// create answer own rcon = 2
-							pAsySdoSeqCon->
-							    m_bRecSeqNum--;
-
-							// check if ack or data-frame
-							if (uiDataSize_p >
-							    EPL_SEQ_HEADER_SIZE)
-							{
-								AsySdoSequInstance_g.
-								    m_fpSdoComReceiveCb
-								    (SdoSeqConHdl,
-								     ((tEplAsySdoCom *) & pRecFrame_p->m_le_abSdoSeqPayload), (uiDataSize_p - EPL_SEQ_HEADER_SIZE));
-								// call Command Layer Cb
-								AsySdoSequInstance_g.
-								    m_fpSdoComConCb
-								    (SdoSeqConHdl,
-								     kAsySdoConStateFrameSended);
-
-							} else {
-								Ret =
-								    EplSdoAsySeqSendIntern
-								    (pAsySdoSeqCon,
-								     0, NULL,
-								     FALSE);
-								if (Ret !=
-								    kEplSuccessful)
-								{
-									goto Exit;
-								}
-							}
-
-						} else {
-							// error ack
-							// resend frames from history
-
-							// read frame from history
-							Ret =
-							    EplSdoAsyReadFromHistory
-							    (pAsySdoSeqCon,
-							     &pEplFrame,
-							     &uiFrameSize,
-							     TRUE);
-							while ((pEplFrame !=
-								NULL)
-							       && (uiFrameSize
-								   != 0)) {
-								// send frame
-								Ret =
-								    EplSdoAsySeqSendLowerLayer
-								    (pAsySdoSeqCon,
-								     uiFrameSize,
-								     pEplFrame);
-								if (Ret !=
-								    kEplSuccessful)
-								{
-									goto Exit;
-								}
-								// read next frame
-
-								// read frame from history
-								Ret =
-								    EplSdoAsyReadFromHistory
-								    (pAsySdoSeqCon,
-								     &pEplFrame,
-								     &uiFrameSize,
-								     FALSE);
-							}	// end of while((pabFrame != NULL)
-						}
-						break;
-					}
-				}	// end of switch(pRecFrame_p->m_le_bRecSeqNumCon & EPL_ASY_SDO_CON_MASK)
-
-			} else if (Event_p == kAsySdoSeqEventTimeout) {	// error -> Close
-				pAsySdoSeqCon->m_SdoState = kEplAsySdoStateIdle;
-				// set rcon and scon to 0
-				pAsySdoSeqCon->m_bSendSeqNum &=
-				    EPL_SEQ_NUM_MASK;
-				pAsySdoSeqCon->m_bRecSeqNum &= EPL_SEQ_NUM_MASK;
-				// send frame
-				EplSdoAsySeqSendIntern(pAsySdoSeqCon,
-						       0, NULL, FALSE);
-
-				// call Command Layer Cb
-				AsySdoSequInstance_g.
-				    m_fpSdoComConCb(SdoSeqConHdl,
-						    kAsySdoConStateTimeout);
-			}
-
-			break;
-		}
-
-		// unknown state
-	default:
-		{
-			EPL_DBGLVL_SDO_TRACE0
-			    ("Error: Unknown State in EplSdoAsySeqProcess\n");
-
-		}
-	}			// end of switch(pAsySdoSeqCon->m_SdoState)
-
-      Exit:
-
-#if defined(WIN32) || defined(_WIN32)
-	// leave critical section for process function
-	LeaveCriticalSection(AsySdoSequInstance_g.m_pCriticalSection);
-#endif
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqSendIntern
-//
-// Description: intern function to create and send a frame
-//              -> if uiDataSize_p == 0 create a frame with infos from
-//                 pAsySdoSeqCon_p
-//
-//
-//
-// Parameters:  pAsySdoSeqCon_p = pointer to control structure of the connection
-//              uiDataSize_p    = size of data frame to process (can be 0)
-//                                  -> without size of sequence header and Asnd header!!!
-//              pData_p         = pointer to frame to process (can be NULL)
-//              fFrameInHistory = if TRUE frame is saved to history else not
-//
-//
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsySeqSendIntern(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					 unsigned int uiDataSize_p,
-					 tEplFrame * pData_p,
-					 BOOL fFrameInHistory_p)
-{
-	tEplKernel Ret;
-	u8 abFrame[EPL_SEQ_FRAME_SIZE];
-	tEplFrame *pEplFrame;
-	unsigned int uiFreeEntries;
-
-	if (pData_p == NULL) {	// set pointer to own frame
-		EPL_MEMSET(&abFrame[0], 0x00, sizeof(abFrame));
-		pEplFrame = (tEplFrame *) & abFrame[0];
-	} else {		// set pointer to frame from calling function
-		pEplFrame = pData_p;
-	}
-
-	if (fFrameInHistory_p != FALSE) {
-		// check if only one free entry in history buffer
-		uiFreeEntries =
-		    EplSdoAsyGetFreeEntriesFromHistory(pAsySdoSeqCon_p);
-		if (uiFreeEntries == 1) {	// request an acknowledge in dataframe
-			// own scon = 3
-			pAsySdoSeqCon_p->m_bRecSeqNum |= 0x03;
-		}
-	}
-	// fillin header informations
-	// set service id sdo
-	AmiSetByteToLe(&pEplFrame->m_Data.m_Asnd.m_le_bServiceId, 0x05);
-	AmiSetByteToLe(&pEplFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-		       m_le_abReserved, 0x00);
-	// set receive sequence number and rcon
-	AmiSetByteToLe(&pEplFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-		       m_le_bRecSeqNumCon, pAsySdoSeqCon_p->m_bSendSeqNum);
-	// set send sequence number and scon
-	AmiSetByteToLe(&pEplFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-		       m_le_bSendSeqNumCon, pAsySdoSeqCon_p->m_bRecSeqNum);
-
-	// add size
-	uiDataSize_p += EPL_SEQ_HEADER_SIZE;
-
-	// forward frame to appropriate lower layer
-	Ret = EplSdoAsySeqSendLowerLayer(pAsySdoSeqCon_p, uiDataSize_p, pEplFrame);	// pointer to frame
-
-	// check if all allright
-	if ((Ret == kEplSuccessful)
-	    && (fFrameInHistory_p != FALSE)) {
-		// set own scon to 2 if needed
-		if ((pAsySdoSeqCon_p->m_bRecSeqNum & 0x03) == 0x03) {
-			pAsySdoSeqCon_p->m_bRecSeqNum--;
-		}
-		// save frame to history
-		Ret = EplSdoAsyAddFrameToHistory(pAsySdoSeqCon_p,
-						 pEplFrame, uiDataSize_p);
-		if (Ret == kEplSdoSeqNoFreeHistory) {	// request Ack needed
-			Ret = kEplSdoSeqRequestAckNeeded;
-		}
-
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoAsySeqSendLowerLayer
-//
-// Description: intern function to send a previously created frame to lower layer
-//
-// Parameters:  pAsySdoSeqCon_p = pointer to control structure of the connection
-//              uiDataSize_p    = size of data frame to process (can be 0)
-//                                  -> without size of Asnd header!!!
-//              pData_p         = pointer to frame to process (can be NULL)
-//
-// Returns:     tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsySeqSendLowerLayer(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     unsigned int uiDataSize_p,
-					     tEplFrame * pEplFrame_p)
-{
-	tEplKernel Ret;
-
-	// call send-function
-	// check handle for UDP or Asnd
-	if ((pAsySdoSeqCon_p->m_ConHandle & EPL_SDO_ASY_HANDLE_MASK) == EPL_SDO_UDP_HANDLE) {	// send over UDP
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-		Ret = EplSdoUdpuSendData(pAsySdoSeqCon_p->m_ConHandle, pEplFrame_p,	// pointer to frame
-					 uiDataSize_p);
-#else
-		Ret = kEplSdoSeqUnsupportedProt;
-#endif
-
-	} else if ((pAsySdoSeqCon_p->m_ConHandle & EPL_SDO_ASY_HANDLE_MASK) == EPL_SDO_ASND_HANDLE) {	// ASND
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-		Ret = EplSdoAsnduSendData(pAsySdoSeqCon_p->m_ConHandle, pEplFrame_p,	// pointer to frame
-					  uiDataSize_p);
-#else
-		Ret = kEplSdoSeqUnsupportedProt;
-#endif
-	} else {		// error
-		Ret = kEplSdoSeqInvalidHdl;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyReceiveCb
-//
-// Description:     callback-function for received frames from lower layer
-//
-//
-//
-// Parameters:      ConHdl_p        = handle of the connection
-//                  pSdoSeqData_p   = pointer to frame
-//                  uiDataSize_p    = size of frame
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoAsyReceiveCb(tEplSdoConHdl ConHdl_p,
-			      tEplAsySdoSeq *pSdoSeqData_p,
-			      unsigned int uiDataSize_p)
-{
-	tEplKernel Ret;
-	unsigned int uiCount = 0;
-	unsigned int uiFreeEntry = EPL_MAX_SDO_SEQ_CON;
-	tEplAsySdoSeqCon *pAsySdoSeqCon;
-
-#if defined(WIN32) || defined(_WIN32)
-	// enter  critical section
-	EnterCriticalSection(AsySdoSequInstance_g.m_pCriticalSectionReceive);
-#endif
-
-	EPL_DBGLVL_SDO_TRACE2("Handle: 0x%x , First Databyte 0x%x\n", ConHdl_p,
-			      ((u8 *) pSdoSeqData_p)[0]);
-
-	// search controll structure for this connection
-	pAsySdoSeqCon = &AsySdoSequInstance_g.m_AsySdoConnection[uiCount];
-	while (uiCount < EPL_MAX_SDO_SEQ_CON) {
-		if (pAsySdoSeqCon->m_ConHandle == ConHdl_p) {
-			break;
-		} else if ((pAsySdoSeqCon->m_ConHandle == 0)
-			   && (uiFreeEntry == EPL_MAX_SDO_SEQ_CON)) {
-			// free entry
-			uiFreeEntry = uiCount;
-		}
-		uiCount++;
-		pAsySdoSeqCon++;
-	}
-
-	if (uiCount == EPL_MAX_SDO_SEQ_CON) {	// new connection
-		if (uiFreeEntry == EPL_MAX_SDO_SEQ_CON) {
-			Ret = kEplSdoSeqNoFreeHandle;
-			goto Exit;
-		} else {
-			pAsySdoSeqCon =
-			    &AsySdoSequInstance_g.
-			    m_AsySdoConnection[uiFreeEntry];
-			// save handle from lower layer
-			pAsySdoSeqCon->m_ConHandle = ConHdl_p;
-			// increment use counter
-			pAsySdoSeqCon->m_uiUseCount++;
-			uiCount = uiFreeEntry;
-		}
-	}
-	// call history ack function
-	Ret = EplSdoAsyAckFrameToHistory(pAsySdoSeqCon,
-					 (AmiGetByteFromLe
-					  (&pSdoSeqData_p->
-					   m_le_bRecSeqNumCon) &
-					  EPL_SEQ_NUM_MASK));
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#if defined(WIN32) || defined(_WIN32)
-	// leave critical section
-	LeaveCriticalSection(AsySdoSequInstance_g.m_pCriticalSectionReceive);
-#endif
-
-	// call process function with pointer of frame and event kAsySdoSeqEventFrameRec
-	Ret = EplSdoAsySeqProcess(uiCount,
-				  uiDataSize_p,
-				  NULL, pSdoSeqData_p, kAsySdoSeqEventFrameRec);
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyInitHistory
-//
-// Description:     inti function for history buffer
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsyInitHistory(void)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-
-	Ret = kEplSuccessful;
-	// init m_bFreeEntries in history-buffer
-	for (uiCount = 0; uiCount < EPL_MAX_SDO_SEQ_CON; uiCount++) {
-		AsySdoSequInstance_g.m_AsySdoConnection[uiCount].
-		    m_SdoConHistory.m_bFreeEntries = EPL_SDO_HISTORY_SIZE;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyAddFrameToHistory
-//
-// Description:     function to add a frame to the history buffer
-//
-//
-//
-// Parameters:      pAsySdoSeqCon_p = pointer to control structure of this connection
-//                  pFrame_p        = pointer to frame
-//                  uiSize_p        = size of the frame
-//                                     -> without size of the ethernet header
-//                                        and the asnd header
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsyAddFrameToHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     tEplFrame * pFrame_p,
-					     unsigned int uiSize_p)
-{
-	tEplKernel Ret;
-	tEplAsySdoConHistory *pHistory;
-
-	Ret = kEplSuccessful;
-
-	// add frame to history buffer
-
-	// check size
-	// $$$ d.k. EPL_SEQ_HISTORY_FRAME_SIZE includes the header size, but uiSize_p does not!!!
-	if (uiSize_p > EPL_SEQ_HISTROY_FRAME_SIZE) {
-		Ret = kEplSdoSeqFrameSizeError;
-		goto Exit;
-	}
-	// save pointer to history
-	pHistory = &pAsySdoSeqCon_p->m_SdoConHistory;
-
-	// check if a free entry is available
-	if (pHistory->m_bFreeEntries > 0) {	// write message in free entry
-		EPL_MEMCPY(&
-			   ((tEplFrame *) pHistory->
-			    m_aabHistoryFrame[pHistory->m_bWrite])->
-			   m_le_bMessageType, &pFrame_p->m_le_bMessageType,
-			   uiSize_p + EPL_ASND_HEADER_SIZE);
-		// store size
-		pHistory->m_auiFrameSize[pHistory->m_bWrite] = uiSize_p;
-
-		// decremend number of free bufferentries
-		pHistory->m_bFreeEntries--;
-
-		// increment writeindex
-		pHistory->m_bWrite++;
-
-		// check if write-index run over array-boarder
-		if (pHistory->m_bWrite == EPL_SDO_HISTORY_SIZE) {
-			pHistory->m_bWrite = 0;
-		}
-
-	} else {		// no free entry
-		Ret = kEplSdoSeqNoFreeHistory;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyAckFrameToHistory
-//
-// Description:     function to delete acknowledged frames fron history buffer
-//
-//
-//
-// Parameters:      pAsySdoSeqCon_p = pointer to control structure of this connection
-//                  bRecSeqNumber_p = receive sequence number of the received frame
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsyAckFrameToHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					     u8 bRecSeqNumber_p)
-{
-	tEplKernel Ret;
-	tEplAsySdoConHistory *pHistory;
-	u8 bAckIndex;
-	u8 bCurrentSeqNum;
-
-	Ret = kEplSuccessful;
-
-	// get pointer to history buffer
-	pHistory = &pAsySdoSeqCon_p->m_SdoConHistory;
-
-	// release all acknowledged frames from history buffer
-
-	// check if there are entries in history
-	if (pHistory->m_bFreeEntries < EPL_SDO_HISTORY_SIZE) {
-		bAckIndex = pHistory->m_bAck;
-		do {
-			bCurrentSeqNum =
-			    (((tEplFrame *) pHistory->
-			      m_aabHistoryFrame[bAckIndex])->m_Data.m_Asnd.
-			     m_Payload.m_SdoSequenceFrame.
-			     m_le_bSendSeqNumCon & EPL_SEQ_NUM_MASK);
-			if (((bRecSeqNumber_p -
-			      bCurrentSeqNum) & EPL_SEQ_NUM_MASK)
-			    < EPL_SEQ_NUM_THRESHOLD) {
-				pHistory->m_auiFrameSize[bAckIndex] = 0;
-				bAckIndex++;
-				pHistory->m_bFreeEntries++;
-				if (bAckIndex == EPL_SDO_HISTORY_SIZE) {	// read index run over array-boarder
-					bAckIndex = 0;
-				}
-			} else {	// nothing to do anymore,
-				// because any further frame in history has larger sequence
-				// number than the acknowledge
-				goto Exit;
-			}
-		}
-		while ((((bRecSeqNumber_p - 1 -
-			  bCurrentSeqNum) & EPL_SEQ_NUM_MASK)
-			< EPL_SEQ_NUM_THRESHOLD)
-		       && (pHistory->m_bWrite != bAckIndex));
-
-		// store local read-index to global var
-		pHistory->m_bAck = bAckIndex;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyReadFromHistory
-//
-// Description:     function to one frame from history
-//
-//
-//
-// Parameters:      pAsySdoSeqCon_p = pointer to control structure of this connection
-//                  ppFrame_p       = pointer to pointer to the buffer of the stored frame
-//                  puiSize_p       = OUT: size of the frame
-//                  fInitRead       = bool which indicate a start of retransmission
-//                                      -> return last not acknowledged message if TRUE
-//
-//
-// Returns:         tEplKernel = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsyReadFromHistory(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-					   tEplFrame ** ppFrame_p,
-					   unsigned int *puiSize_p,
-					   BOOL fInitRead_p)
-{
-	tEplKernel Ret;
-	tEplAsySdoConHistory *pHistory;
-
-	Ret = kEplSuccessful;
-
-	// read one message from History
-
-	// get pointer to history buffer
-	pHistory = &pAsySdoSeqCon_p->m_SdoConHistory;
-
-	// check if init
-	if (fInitRead_p != FALSE) {	// initialize read index to the index which shall be acknowledged next
-		pHistory->m_bRead = pHistory->m_bAck;
-	}
-	// check if entries are available for reading
-	if ((pHistory->m_bFreeEntries < EPL_SDO_HISTORY_SIZE)
-	    && (pHistory->m_bWrite != pHistory->m_bRead)) {
-//        PRINTF4("EplSdoAsyReadFromHistory(): init = %d, read = %u, write = %u, ack = %u", (int) fInitRead_p, (u16)pHistory->m_bRead, (u16)pHistory->m_bWrite, (u16)pHistory->m_bAck);
-//        PRINTF2(", free entries = %u, next frame size = %u\n", (u16)pHistory->m_bFreeEntries, pHistory->m_auiFrameSize[pHistory->m_bRead]);
-
-		// return pointer to stored frame
-		*ppFrame_p =
-		    (tEplFrame *) pHistory->m_aabHistoryFrame[pHistory->
-							      m_bRead];
-
-		// save size
-		*puiSize_p = pHistory->m_auiFrameSize[pHistory->m_bRead];
-
-		pHistory->m_bRead++;
-		if (pHistory->m_bRead == EPL_SDO_HISTORY_SIZE) {
-			pHistory->m_bRead = 0;
-		}
-
-	} else {
-//        PRINTF3("EplSdoAsyReadFromHistory(): read = %u, ack = %u, free entries = %u, no frame\n", (u16)pHistory->m_bRead, (u16)pHistory->m_bAck, (u16)pHistory->m_bFreeEntries);
-
-		// no more frames to send
-		// return null pointer
-		*ppFrame_p = NULL;
-
-		*puiSize_p = 0;
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsyGetFreeEntriesFromHistory
-//
-// Description:     function returns the number of free histroy entries
-//
-//
-//
-// Parameters:      pAsySdoSeqCon_p = pointer to control structure of this connection
-//
-//
-// Returns:         unsigned int    = number of free entries
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static unsigned int EplSdoAsyGetFreeEntriesFromHistory(tEplAsySdoSeqCon *
-						       pAsySdoSeqCon_p)
-{
-	unsigned int uiFreeEntries;
-
-	uiFreeEntries =
-	    (unsigned int)pAsySdoSeqCon_p->m_SdoConHistory.m_bFreeEntries;
-
-	return uiFreeEntries;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoAsySeqSetTimer
-//
-// Description:     function sets or modify timer in timermosule
-//
-//
-//
-// Parameters:      pAsySdoSeqCon_p = pointer to control structure of this connection
-//                  ulTimeout       = timeout in ms
-//
-//
-// Returns:         unsigned int    = number of free entries
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoAsySeqSetTimer(tEplAsySdoSeqCon * pAsySdoSeqCon_p,
-				       unsigned long ulTimeout)
-{
-	tEplKernel Ret;
-	tEplTimerArg TimerArg;
-
-	TimerArg.m_EventSink = kEplEventSinkSdoAsySeq;
-	TimerArg.m_ulArg = (unsigned long)pAsySdoSeqCon_p;
-
-	if (pAsySdoSeqCon_p->m_EplTimerHdl == 0) {	// create new timer
-		Ret = EplTimeruSetTimerMs(&pAsySdoSeqCon_p->m_EplTimerHdl,
-					  ulTimeout, TimerArg);
-	} else {		// modify exisiting timer
-		Ret = EplTimeruModifyTimerMs(&pAsySdoSeqCon_p->m_EplTimerHdl,
-					     ulTimeout, TimerArg);
-
-	}
-
-	return Ret;
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplSdoComu.c b/drivers/staging/epl/EplSdoComu.c
deleted file mode 100644
index bf35afa..0000000
--- a/drivers/staging/epl/EplSdoComu.c
+++ /dev/null
@@ -1,3345 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for SDO Command Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoComu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.14 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplSdoComu.h"
-
-#if ((((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) == 0) &&\
-     (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) == 0)   )
-
-#error 'ERROR: At least SDO Server or SDO Client should be activate!'
-
-#endif
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) == 0) && (EPL_OBD_USE_KERNEL == FALSE)
-
-#error 'ERROR: SDO Server needs OBDu module!'
-
-#endif
-
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_MAX_SDO_COM_CON
-#define EPL_MAX_SDO_COM_CON         5
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-// intern events
-typedef enum {
-	kEplSdoComConEventSendFirst = 0x00,	// first frame to send
-	kEplSdoComConEventRec = 0x01,	// frame received
-	kEplSdoComConEventConEstablished = 0x02,	// connection established
-	kEplSdoComConEventConClosed = 0x03,	// connection closed
-	kEplSdoComConEventAckReceived = 0x04,	// acknowledge received by lower layer
-	// -> continue sending
-	kEplSdoComConEventFrameSended = 0x05,	// lower has send a frame
-	kEplSdoComConEventInitError = 0x06,	// error duringinitialisiation
-	// of the connection
-	kEplSdoComConEventTimeout = 0x07	// timeout in lower layer
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-	    ,
-
-	kEplSdoComConEventInitCon = 0x08,	// init connection (only client)
-	kEplSdoComConEventAbort = 0x09	// abort sdo transfer (only client)
-#endif
-} tEplSdoComConEvent;
-
-typedef enum {
-	kEplSdoComSendTypeReq = 0x00,	// send a request
-	kEplSdoComSendTypeAckRes = 0x01,	// send a resonse without data
-	kEplSdoComSendTypeRes = 0x02,	// send response with data
-	kEplSdoComSendTypeAbort = 0x03	// send abort
-} tEplSdoComSendType;
-
-// state of the state maschine
-typedef enum {
-	// General State
-	kEplSdoComStateIdle = 0x00,	// idle state
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-	// Server States
-	kEplSdoComStateServerSegmTrans = 0x01,	// send following frames
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-	// Client States
-	kEplSdoComStateClientWaitInit = 0x10,	// wait for init connection
-	// on lower layer
-	kEplSdoComStateClientConnected = 0x11,	// connection established
-	kEplSdoComStateClientSegmTrans = 0x12	// send following frames
-#endif
-} tEplSdoComState;
-
-// control structure for transaction
-typedef struct {
-	tEplSdoSeqConHdl m_SdoSeqConHdl;	// if != 0 -> entry used
-	tEplSdoComState m_SdoComState;
-	u8 m_bTransactionId;
-	unsigned int m_uiNodeId;	// NodeId of the target
-	// -> needed to reinit connection
-	//    after timeout
-	tEplSdoTransType m_SdoTransType;	// Auto, Expedited, Segmented
-	tEplSdoServiceType m_SdoServiceType;	// WriteByIndex, ReadByIndex
-	tEplSdoType m_SdoProtType;	// protocol layer: Auto, Udp, Asnd, Pdo
-	u8 *m_pData;		// pointer to data
-	unsigned int m_uiTransSize;	// number of bytes
-	// to transfer
-	unsigned int m_uiTransferredByte;	// number of bytes
-	// already transferred
-	tEplSdoFinishedCb m_pfnTransferFinished;	// callback function of the
-	// application
-	// -> called in the end of
-	//    the SDO transfer
-	void *m_pUserArg;	// user definable argument pointer
-
-	u32 m_dwLastAbortCode;	// save the last abort code
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-	// only for client
-	unsigned int m_uiTargetIndex;	// index to access
-	unsigned int m_uiTargetSubIndex;	// subiondex to access
-
-	// for future use
-	unsigned int m_uiTimeout;	// timeout for this connection
-
-#endif
-
-} tEplSdoComCon;
-
-// instance table
-typedef struct {
-	tEplSdoComCon m_SdoComCon[EPL_MAX_SDO_COM_CON];
-
-#if defined(WIN32) || defined(_WIN32)
-	LPCRITICAL_SECTION m_pCriticalSection;
-	CRITICAL_SECTION m_CriticalSection;
-#endif
-
-} tEplSdoComInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-static tEplSdoComInstance SdoComInstance_g;
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComReceiveCb(tEplSdoSeqConHdl SdoSeqConHdl_p,
-			      tEplAsySdoCom *pAsySdoCom_p,
-			      unsigned int uiDataSize_p);
-
-tEplKernel EplSdoComConCb(tEplSdoSeqConHdl SdoSeqConHdl_p,
-			  tEplAsySdoConState AsySdoConState_p);
-
-static tEplKernel EplSdoComSearchConIntern(tEplSdoSeqConHdl SdoSeqConHdl_p,
-					   tEplSdoComConEvent SdoComConEvent_p,
-					   tEplAsySdoCom * pAsySdoCom_p);
-
-static tEplKernel EplSdoComProcessIntern(tEplSdoComConHdl SdoComCon_p,
-					 tEplSdoComConEvent SdoComConEvent_p,
-					 tEplAsySdoCom * pAsySdoCom_p);
-
-static tEplKernel EplSdoComTransferFinished(tEplSdoComConHdl SdoComCon_p,
-					    tEplSdoComCon * pSdoComCon_p,
-					    tEplSdoComConState
-					    SdoComConState_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-static tEplKernel EplSdoComServerInitReadByIndex(tEplSdoComCon * pSdoComCon_p,
-						 tEplAsySdoCom * pAsySdoCom_p);
-
-static tEplKernel EplSdoComServerSendFrameIntern(tEplSdoComCon * pSdoComCon_p,
-						 unsigned int uiIndex_p,
-						 unsigned int uiSubIndex_p,
-						 tEplSdoComSendType SendType_p);
-
-static tEplKernel EplSdoComServerInitWriteByIndex(tEplSdoComCon * pSdoComCon_p,
-						  tEplAsySdoCom * pAsySdoCom_p);
-#endif
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-
-static tEplKernel EplSdoComClientSend(tEplSdoComCon * pSdoComCon_p);
-
-static tEplKernel EplSdoComClientProcessFrame(tEplSdoComConHdl SdoComCon_p,
-					      tEplAsySdoCom * pAsySdoCom_p);
-
-static tEplKernel EplSdoComClientSendAbort(tEplSdoComCon * pSdoComCon_p,
-					   u32 dwAbortCode_p);
-#endif
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <SDO Command Layer>                                 */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: SDO Command layer Modul
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComInit
-//
-// Description: Init first instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplSdoComAddInstance();
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComAddInstance
-//
-// Description: Init additional instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// init controll structure
-	EPL_MEMSET(&SdoComInstance_g, 0x00, sizeof(SdoComInstance_g));
-
-	// init instance of lower layer
-	Ret = EplSdoAsySeqAddInstance(EplSdoComReceiveCb, EplSdoComConCb);
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-#if defined(WIN32) || defined(_WIN32)
-	// create critical section for process function
-	SdoComInstance_g.m_pCriticalSection =
-	    &SdoComInstance_g.m_CriticalSection;
-	InitializeCriticalSection(SdoComInstance_g.m_pCriticalSection);
-#endif
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComDelInstance
-//
-// Description: delete instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-#if defined(WIN32) || defined(_WIN32)
-	// delete critical section for process function
-	DeleteCriticalSection(SdoComInstance_g.m_pCriticalSection);
-#endif
-
-	Ret = EplSdoAsySeqDelInstance();
-	if (Ret != kEplSuccessful) {
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComDefineCon
-//
-// Description: function defines a SDO connection to another node
-//              -> init lower layer and returns a handle for the connection.
-//              Two client connections to the same node via the same protocol
-//              are not allowed. If this function detects such a situation
-//              it will return kEplSdoComHandleExists and the handle of
-//              the existing connection in pSdoComConHdl_p.
-//              Using of existing server connections is possible.
-//
-// Parameters:  pSdoComConHdl_p     = pointer to the buffer of the handle
-//              uiTargetNodeId_p    = NodeId of the targetnode
-//              ProtType_p          = type of protocol to use for connection
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-tEplKernel EplSdoComDefineCon(tEplSdoComConHdl *pSdoComConHdl_p,
-			      unsigned int uiTargetNodeId_p,
-			      tEplSdoType ProtType_p)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-	unsigned int uiFreeHdl;
-	tEplSdoComCon *pSdoComCon;
-
-	// check Parameter
-	ASSERT(pSdoComConHdl_p != NULL);
-
-	// check NodeId
-	if ((uiTargetNodeId_p == EPL_C_ADR_INVALID)
-	    || (uiTargetNodeId_p >= EPL_C_ADR_BROADCAST)) {
-		Ret = kEplInvalidNodeId;
-
-	}
-	// search free control structure
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[0];
-	uiCount = 0;
-	uiFreeHdl = EPL_MAX_SDO_COM_CON;
-	while (uiCount < EPL_MAX_SDO_COM_CON) {
-		if (pSdoComCon->m_SdoSeqConHdl == 0) {	// free entry
-			uiFreeHdl = uiCount;
-		} else if ((pSdoComCon->m_uiNodeId == uiTargetNodeId_p)
-			   && (pSdoComCon->m_SdoProtType == ProtType_p)) {	// existing client connection with same node ID and same protocol type
-			*pSdoComConHdl_p = uiCount;
-			Ret = kEplSdoComHandleExists;
-			goto Exit;
-		}
-		uiCount++;
-		pSdoComCon++;
-	}
-
-	if (uiFreeHdl == EPL_MAX_SDO_COM_CON) {
-		Ret = kEplSdoComNoFreeHandle;
-		goto Exit;
-	}
-
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[uiFreeHdl];
-	// save handle for application
-	*pSdoComConHdl_p = uiFreeHdl;
-	// save parameters
-	pSdoComCon->m_SdoProtType = ProtType_p;
-	pSdoComCon->m_uiNodeId = uiTargetNodeId_p;
-
-	// set Transaction Id
-	pSdoComCon->m_bTransactionId = 0;
-
-	// check protocol
-	switch (ProtType_p) {
-		// udp
-	case kEplSdoTypeUdp:
-		{
-			// call connection int function of lower layer
-			Ret = EplSdoAsySeqInitCon(&pSdoComCon->m_SdoSeqConHdl,
-						  pSdoComCon->m_uiNodeId,
-						  kEplSdoTypeUdp);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-			break;
-		}
-
-		// Asend
-	case kEplSdoTypeAsnd:
-		{
-			// call connection int function of lower layer
-			Ret = EplSdoAsySeqInitCon(&pSdoComCon->m_SdoSeqConHdl,
-						  pSdoComCon->m_uiNodeId,
-						  kEplSdoTypeAsnd);
-			if (Ret != kEplSuccessful) {
-				goto Exit;
-			}
-			break;
-		}
-
-		// Pdo -> not supported
-	case kEplSdoTypePdo:
-	default:
-		{
-			Ret = kEplSdoComUnsupportedProt;
-			goto Exit;
-		}
-	}			// end of switch(m_ProtType_p)
-
-	// call process function
-	Ret = EplSdoComProcessIntern(uiFreeHdl,
-				     kEplSdoComConEventInitCon, NULL);
-
-      Exit:
-	return Ret;
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComInitTransferByIndex
-//
-// Description: function init SDO Transfer for a defined connection
-//
-//
-//
-// Parameters:  SdoComTransParam_p    = Structure with parameters for connection
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-tEplKernel EplSdoComInitTransferByIndex(tEplSdoComTransParamByIndex *pSdoComTransParam_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-
-	// check parameter
-	if ((pSdoComTransParam_p->m_uiSubindex >= 0xFF)
-	    || (pSdoComTransParam_p->m_uiIndex == 0)
-	    || (pSdoComTransParam_p->m_uiIndex > 0xFFFF)
-	    || (pSdoComTransParam_p->m_pData == NULL)
-	    || (pSdoComTransParam_p->m_uiDataSize == 0)) {
-		Ret = kEplSdoComInvalidParam;
-		goto Exit;
-	}
-
-	if (pSdoComTransParam_p->m_SdoComConHdl >= EPL_MAX_SDO_COM_CON) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// get pointer to control structure of connection
-	pSdoComCon =
-	    &SdoComInstance_g.m_SdoComCon[pSdoComTransParam_p->m_SdoComConHdl];
-
-	// check if handle ok
-	if (pSdoComCon->m_SdoSeqConHdl == 0) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// check if command layer is idle
-	if ((pSdoComCon->m_uiTransferredByte + pSdoComCon->m_uiTransSize) > 0) {	// handle is not idle
-		Ret = kEplSdoComHandleBusy;
-		goto Exit;
-	}
-	// save parameter
-	// callback function for end of transfer
-	pSdoComCon->m_pfnTransferFinished =
-	    pSdoComTransParam_p->m_pfnSdoFinishedCb;
-	pSdoComCon->m_pUserArg = pSdoComTransParam_p->m_pUserArg;
-
-	// set type of SDO command
-	if (pSdoComTransParam_p->m_SdoAccessType == kEplSdoAccessTypeRead) {
-		pSdoComCon->m_SdoServiceType = kEplSdoServiceReadByIndex;
-	} else {
-		pSdoComCon->m_SdoServiceType = kEplSdoServiceWriteByIndex;
-
-	}
-	// save pointer to data
-	pSdoComCon->m_pData = pSdoComTransParam_p->m_pData;
-	// maximal bytes to transfer
-	pSdoComCon->m_uiTransSize = pSdoComTransParam_p->m_uiDataSize;
-	// bytes already transfered
-	pSdoComCon->m_uiTransferredByte = 0;
-
-	// reset parts of control structure
-	pSdoComCon->m_dwLastAbortCode = 0;
-	pSdoComCon->m_SdoTransType = kEplSdoTransAuto;
-	// save timeout
-	//pSdoComCon->m_uiTimeout = SdoComTransParam_p.m_uiTimeout;
-
-	// save index and subindex
-	pSdoComCon->m_uiTargetIndex = pSdoComTransParam_p->m_uiIndex;
-	pSdoComCon->m_uiTargetSubIndex = pSdoComTransParam_p->m_uiSubindex;
-
-	// call process function
-	Ret = EplSdoComProcessIntern(pSdoComTransParam_p->m_SdoComConHdl, kEplSdoComConEventSendFirst,	// event to start transfer
-				     NULL);
-
-      Exit:
-	return Ret;
-
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComUndefineCon
-//
-// Description: function undefine a SDO connection
-//
-//
-//
-// Parameters:  SdoComConHdl_p    = handle for the connection
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-tEplKernel EplSdoComUndefineCon(tEplSdoComConHdl SdoComConHdl_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-
-	Ret = kEplSuccessful;
-
-	if (SdoComConHdl_p >= EPL_MAX_SDO_COM_CON) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// get pointer to control structure
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[SdoComConHdl_p];
-
-	// $$$ d.k. abort a running transfer before closing the sequence layer
-
-	if (((pSdoComCon->m_SdoSeqConHdl & ~EPL_SDO_SEQ_HANDLE_MASK) !=
-	     EPL_SDO_SEQ_INVALID_HDL)
-	    && (pSdoComCon->m_SdoSeqConHdl != 0)) {
-		// close connection in lower layer
-		switch (pSdoComCon->m_SdoProtType) {
-		case kEplSdoTypeAsnd:
-		case kEplSdoTypeUdp:
-			{
-				Ret =
-				    EplSdoAsySeqDelCon(pSdoComCon->
-						       m_SdoSeqConHdl);
-				break;
-			}
-
-		case kEplSdoTypePdo:
-		case kEplSdoTypeAuto:
-		default:
-			{
-				Ret = kEplSdoComUnsupportedProt;
-				goto Exit;
-			}
-
-		}		// end of switch(pSdoComCon->m_SdoProtType)
-	}
-
-	// clean controll structure
-	EPL_MEMSET(pSdoComCon, 0x00, sizeof(tEplSdoComCon));
-      Exit:
-	return Ret;
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComGetState
-//
-// Description: function returns the state fo the connection
-//
-//
-//
-// Parameters:  SdoComConHdl_p    = handle for the connection
-//              pSdoComFinished_p = pointer to structur for sdo state
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-tEplKernel EplSdoComGetState(tEplSdoComConHdl SdoComConHdl_p,
-			     tEplSdoComFinished *pSdoComFinished_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-
-	Ret = kEplSuccessful;
-
-	if (SdoComConHdl_p >= EPL_MAX_SDO_COM_CON) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// get pointer to control structure
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[SdoComConHdl_p];
-
-	// check if handle ok
-	if (pSdoComCon->m_SdoSeqConHdl == 0) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-
-	pSdoComFinished_p->m_pUserArg = pSdoComCon->m_pUserArg;
-	pSdoComFinished_p->m_uiNodeId = pSdoComCon->m_uiNodeId;
-	pSdoComFinished_p->m_uiTargetIndex = pSdoComCon->m_uiTargetIndex;
-	pSdoComFinished_p->m_uiTargetSubIndex = pSdoComCon->m_uiTargetSubIndex;
-	pSdoComFinished_p->m_uiTransferredByte =
-	    pSdoComCon->m_uiTransferredByte;
-	pSdoComFinished_p->m_dwAbortCode = pSdoComCon->m_dwLastAbortCode;
-	pSdoComFinished_p->m_SdoComConHdl = SdoComConHdl_p;
-	if (pSdoComCon->m_SdoServiceType == kEplSdoServiceWriteByIndex) {
-		pSdoComFinished_p->m_SdoAccessType = kEplSdoAccessTypeWrite;
-	} else {
-		pSdoComFinished_p->m_SdoAccessType = kEplSdoAccessTypeRead;
-	}
-
-	if (pSdoComCon->m_dwLastAbortCode != 0) {	// sdo abort
-		pSdoComFinished_p->m_SdoComConState =
-		    kEplSdoComTransferRxAborted;
-
-		// delete abort code
-		pSdoComCon->m_dwLastAbortCode = 0;
-
-	} else if ((pSdoComCon->m_SdoSeqConHdl & ~EPL_SDO_SEQ_HANDLE_MASK) == EPL_SDO_SEQ_INVALID_HDL) {	// check state
-		pSdoComFinished_p->m_SdoComConState =
-		    kEplSdoComTransferLowerLayerAbort;
-	} else if (pSdoComCon->m_SdoComState == kEplSdoComStateClientWaitInit) {
-		// finished
-		pSdoComFinished_p->m_SdoComConState =
-		    kEplSdoComTransferNotActive;
-	} else if (pSdoComCon->m_uiTransSize == 0) {	// finished
-		pSdoComFinished_p->m_SdoComConState =
-		    kEplSdoComTransferFinished;
-	}
-
-      Exit:
-	return Ret;
-
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComSdoAbort
-//
-// Description: function abort a sdo transfer
-//
-//
-//
-// Parameters:  SdoComConHdl_p    = handle for the connection
-//              dwAbortCode_p     = abort code
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-tEplKernel EplSdoComSdoAbort(tEplSdoComConHdl SdoComConHdl_p,
-			     u32 dwAbortCode_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-
-	if (SdoComConHdl_p >= EPL_MAX_SDO_COM_CON) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// get pointer to control structure of connection
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[SdoComConHdl_p];
-
-	// check if handle ok
-	if (pSdoComCon->m_SdoSeqConHdl == 0) {
-		Ret = kEplSdoComInvalidHandle;
-		goto Exit;
-	}
-	// save pointer to abort code
-	pSdoComCon->m_pData = (u8 *) & dwAbortCode_p;
-
-	Ret = EplSdoComProcessIntern(SdoComConHdl_p,
-				     kEplSdoComConEventAbort,
-				     (tEplAsySdoCom *) NULL);
-
-      Exit:
-	return Ret;
-}
-#endif
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComReceiveCb
-//
-// Description:     callback function for SDO Sequence Layer
-//                  -> indicates new data
-//
-//
-//
-// Parameters:      SdoSeqConHdl_p = Handle for connection
-//                  pAsySdoCom_p   = pointer to data
-//                  uiDataSize_p   = size of data ($$$ not used yet, but it should)
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComReceiveCb(tEplSdoSeqConHdl SdoSeqConHdl_p,
-			      tEplAsySdoCom *pAsySdoCom_p,
-			      unsigned int uiDataSize_p)
-{
-	tEplKernel Ret;
-
-	// search connection internally
-	Ret = EplSdoComSearchConIntern(SdoSeqConHdl_p,
-				       kEplSdoComConEventRec, pAsySdoCom_p);
-
-	EPL_DBGLVL_SDO_TRACE3
-	    ("EplSdoComReceiveCb SdoSeqConHdl: 0x%X, First Byte of pAsySdoCom_p: 0x%02X, uiDataSize_p: 0x%04X\n",
-	     SdoSeqConHdl_p, (u16) pAsySdoCom_p->m_le_abCommandData[0],
-	     uiDataSize_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComConCb
-//
-// Description:     callback function called by SDO Sequence Layer to inform
-//                  command layer about state change of connection
-//
-//
-//
-// Parameters:      SdoSeqConHdl_p      = Handle of the connection
-//                  AsySdoConState_p    = Event of the connection
-//
-//
-// Returns:         tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoComConCb(tEplSdoSeqConHdl SdoSeqConHdl_p,
-			  tEplAsySdoConState AsySdoConState_p)
-{
-	tEplKernel Ret;
-	tEplSdoComConEvent SdoComConEvent = kEplSdoComConEventSendFirst;
-
-	Ret = kEplSuccessful;
-
-	// check state
-	switch (AsySdoConState_p) {
-	case kAsySdoConStateConnected:
-		{
-			EPL_DBGLVL_SDO_TRACE0("Connection established\n");
-			SdoComConEvent = kEplSdoComConEventConEstablished;
-			// start transmission if needed
-			break;
-		}
-
-	case kAsySdoConStateInitError:
-		{
-			EPL_DBGLVL_SDO_TRACE0("Error during initialisation\n");
-			SdoComConEvent = kEplSdoComConEventInitError;
-			// inform app about error and close sequence layer handle
-			break;
-		}
-
-	case kAsySdoConStateConClosed:
-		{
-			EPL_DBGLVL_SDO_TRACE0("Connection closed\n");
-			SdoComConEvent = kEplSdoComConEventConClosed;
-			// close sequence layer handle
-			break;
-		}
-
-	case kAsySdoConStateAckReceived:
-		{
-			EPL_DBGLVL_SDO_TRACE0("Acknowlage received\n");
-			SdoComConEvent = kEplSdoComConEventAckReceived;
-			// continue transmission
-			break;
-		}
-
-	case kAsySdoConStateFrameSended:
-		{
-			EPL_DBGLVL_SDO_TRACE0("One Frame sent\n");
-			SdoComConEvent = kEplSdoComConEventFrameSended;
-			// to continue transmission
-			break;
-
-		}
-
-	case kAsySdoConStateTimeout:
-		{
-			EPL_DBGLVL_SDO_TRACE0("Timeout\n");
-			SdoComConEvent = kEplSdoComConEventTimeout;
-			// close sequence layer handle
-			break;
-
-		}
-	}			// end of switch(AsySdoConState_p)
-
-	Ret = EplSdoComSearchConIntern(SdoSeqConHdl_p,
-				       SdoComConEvent, (tEplAsySdoCom *) NULL);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComSearchConIntern
-//
-// Description:     search a Sdo Sequence Layer connection handle in the
-//                  control structure of the Command Layer
-//
-// Parameters:      SdoSeqConHdl_p     = Handle to search
-//                  SdoComConEvent_p = event to process
-//                  pAsySdoCom_p     = pointer to received frame
-//
-// Returns:         tEplKernel
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoComSearchConIntern(tEplSdoSeqConHdl SdoSeqConHdl_p,
-					   tEplSdoComConEvent SdoComConEvent_p,
-					   tEplAsySdoCom * pAsySdoCom_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-	tEplSdoComConHdl HdlCount;
-	tEplSdoComConHdl HdlFree;
-
-	Ret = kEplSdoComNotResponsible;
-
-	// get pointer to first element of the array
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[0];
-	HdlCount = 0;
-	HdlFree = 0xFFFF;
-	while (HdlCount < EPL_MAX_SDO_COM_CON) {
-		if (pSdoComCon->m_SdoSeqConHdl == SdoSeqConHdl_p) {	// matching command layer handle found
-			Ret = EplSdoComProcessIntern(HdlCount,
-						     SdoComConEvent_p,
-						     pAsySdoCom_p);
-		} else if ((pSdoComCon->m_SdoSeqConHdl == 0)
-			   && (HdlFree == 0xFFFF)) {
-			HdlFree = HdlCount;
-		}
-
-		pSdoComCon++;
-		HdlCount++;
-	}
-
-	if (Ret == kEplSdoComNotResponsible) {	// no responsible command layer handle found
-		if (HdlFree == 0xFFFF) {	// no free handle
-			// delete connection immediately
-			// 2008/04/14 m.u./d.k. This connection actually does not exist.
-			//                      pSdoComCon is invalid.
-			// Ret = EplSdoAsySeqDelCon(pSdoComCon->m_SdoSeqConHdl);
-			Ret = kEplSdoComNoFreeHandle;
-		} else {	// create new handle
-			HdlCount = HdlFree;
-			pSdoComCon = &SdoComInstance_g.m_SdoComCon[HdlCount];
-			pSdoComCon->m_SdoSeqConHdl = SdoSeqConHdl_p;
-			Ret = EplSdoComProcessIntern(HdlCount,
-						     SdoComConEvent_p,
-						     pAsySdoCom_p);
-		}
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComProcessIntern
-//
-// Description:     search a Sdo Sequence Layer connection handle in the
-//                  control structer of the Command Layer
-//
-//
-//
-// Parameters:      SdoComCon_p     = index of control structure of connection
-//                  SdoComConEvent_p = event to process
-//                  pAsySdoCom_p     = pointer to received frame
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoComProcessIntern(tEplSdoComConHdl SdoComCon_p,
-					 tEplSdoComConEvent SdoComConEvent_p,
-					 tEplAsySdoCom * pAsySdoCom_p)
-{
-	tEplKernel Ret;
-	tEplSdoComCon *pSdoComCon;
-	u8 bFlag;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-	u32 dwAbortCode;
-	unsigned int uiSize;
-#endif
-
-#if defined(WIN32) || defined(_WIN32)
-	// enter  critical section for process function
-	EnterCriticalSection(SdoComInstance_g.m_pCriticalSection);
-	EPL_DBGLVL_SDO_TRACE0
-	    ("\n\tEnterCiticalSection EplSdoComProcessIntern\n\n");
-#endif
-
-	Ret = kEplSuccessful;
-
-	// get pointer to control structure
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[SdoComCon_p];
-
-	// process state maschine
-	switch (pSdoComCon->m_SdoComState) {
-		// idle state
-	case kEplSdoComStateIdle:
-		{
-			// check events
-			switch (SdoComConEvent_p) {
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-				// init con for client
-			case kEplSdoComConEventInitCon:
-				{
-
-					// call of the init function already
-					// processed in EplSdoComDefineCon()
-					// only change state to kEplSdoComStateClientWaitInit
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientWaitInit;
-					break;
-				}
-#endif
-
-				// int con for server
-			case kEplSdoComConEventRec:
-				{
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-					// check if init of an transfer and no SDO abort
-					if ((pAsySdoCom_p->m_le_bFlags & 0x80) == 0) {	// SDO request
-						if ((pAsySdoCom_p->m_le_bFlags & 0x40) == 0) {	// no SDO abort
-							// save tansaction id
-							pSdoComCon->
-							    m_bTransactionId =
-							    AmiGetByteFromLe
-							    (&pAsySdoCom_p->
-							     m_le_bTransactionId);
-							// check command
-							switch (pAsySdoCom_p->
-								m_le_bCommandId)
-							{
-							case kEplSdoServiceNIL:
-								{	// simply acknowlegde NIL command on sequence layer
-
-									Ret =
-									    EplSdoAsySeqSendData
-									    (pSdoComCon->
-									     m_SdoSeqConHdl,
-									     0,
-									     (tEplFrame
-									      *)
-									     NULL);
-
-									break;
-								}
-
-							case kEplSdoServiceReadByIndex:
-								{	// read by index
-
-									// search entry an start transfer
-									EplSdoComServerInitReadByIndex
-									    (pSdoComCon,
-									     pAsySdoCom_p);
-									// check next state
-									if (pSdoComCon->m_uiTransSize == 0) {	// ready -> stay idle
-										pSdoComCon->
-										    m_SdoComState
-										    =
-										    kEplSdoComStateIdle;
-										// reset abort code
-										pSdoComCon->
-										    m_dwLastAbortCode
-										    =
-										    0;
-									} else {	// segmented transfer
-										pSdoComCon->
-										    m_SdoComState
-										    =
-										    kEplSdoComStateServerSegmTrans;
-									}
-
-									break;
-								}
-
-							case kEplSdoServiceWriteByIndex:
-								{
-
-									// search entry an start write
-									EplSdoComServerInitWriteByIndex
-									    (pSdoComCon,
-									     pAsySdoCom_p);
-									// check next state
-									if (pSdoComCon->m_uiTransSize == 0) {	// already -> stay idle
-										pSdoComCon->
-										    m_SdoComState
-										    =
-										    kEplSdoComStateIdle;
-										// reset abort code
-										pSdoComCon->
-										    m_dwLastAbortCode
-										    =
-										    0;
-									} else {	// segmented transfer
-										pSdoComCon->
-										    m_SdoComState
-										    =
-										    kEplSdoComStateServerSegmTrans;
-									}
-
-									break;
-								}
-
-							default:
-								{
-									//  unsupported command
-									//       -> abort senden
-									dwAbortCode
-									    =
-									    EPL_SDOAC_UNKNOWN_COMMAND_SPECIFIER;
-									// send abort
-									pSdoComCon->
-									    m_pData
-									    =
-									    (u8
-									     *)
-									    &
-									    dwAbortCode;
-									Ret =
-									    EplSdoComServerSendFrameIntern
-									    (pSdoComCon,
-									     0,
-									     0,
-									     kEplSdoComSendTypeAbort);
-
-								}
-
-							}	// end of switch(pAsySdoCom_p->m_le_bCommandId)
-						}
-					} else {	// this command layer handle is not responsible
-						// (wrong direction or wrong transaction ID)
-						Ret = kEplSdoComNotResponsible;
-						goto Exit;
-					}
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-
-					break;
-				}
-
-				// connection closed
-			case kEplSdoComConEventInitError:
-			case kEplSdoComConEventTimeout:
-			case kEplSdoComConEventConClosed:
-				{
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					// clean control structure
-					EPL_MEMSET(pSdoComCon, 0x00,
-						   sizeof(tEplSdoComCon));
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-			}	// end of switch(SdoComConEvent_p)
-			break;
-		}
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-		//-------------------------------------------------------------------------
-		// SDO Server part
-		// segmented transfer
-	case kEplSdoComStateServerSegmTrans:
-		{
-			// check events
-			switch (SdoComConEvent_p) {
-				// send next frame
-			case kEplSdoComConEventAckReceived:
-			case kEplSdoComConEventFrameSended:
-				{
-					// check if it is a read
-					if (pSdoComCon->m_SdoServiceType ==
-					    kEplSdoServiceReadByIndex) {
-						// send next frame
-						EplSdoComServerSendFrameIntern
-						    (pSdoComCon, 0, 0,
-						     kEplSdoComSendTypeRes);
-						// if all send -> back to idle
-						if (pSdoComCon->m_uiTransSize == 0) {	// back to idle
-							pSdoComCon->
-							    m_SdoComState =
-							    kEplSdoComStateIdle;
-							// reset abort code
-							pSdoComCon->
-							    m_dwLastAbortCode =
-							    0;
-						}
-
-					}
-					break;
-				}
-
-				// process next frame
-			case kEplSdoComConEventRec:
-				{
-					// check if the frame is a SDO response and has the right transaction ID
-					bFlag =
-					    AmiGetByteFromLe(&pAsySdoCom_p->
-							     m_le_bFlags);
-					if (((bFlag & 0x80) != 0)
-					    &&
-					    (AmiGetByteFromLe
-					     (&pAsySdoCom_p->
-					      m_le_bTransactionId) ==
-					     pSdoComCon->m_bTransactionId)) {
-						// check if it is a abort
-						if ((bFlag & 0x40) != 0) {	// SDO abort
-							// clear control structure
-							pSdoComCon->
-							    m_uiTransSize = 0;
-							pSdoComCon->
-							    m_uiTransferredByte
-							    = 0;
-							// change state
-							pSdoComCon->
-							    m_SdoComState =
-							    kEplSdoComStateIdle;
-							// reset abort code
-							pSdoComCon->
-							    m_dwLastAbortCode =
-							    0;
-							// d.k.: do not execute anything further on this command
-							break;
-						}
-						// check if it is a write
-						if (pSdoComCon->
-						    m_SdoServiceType ==
-						    kEplSdoServiceWriteByIndex)
-						{
-							// write data to OD
-							uiSize =
-							    AmiGetWordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_wSegmentSize);
-							if (pSdoComCon->
-							    m_dwLastAbortCode ==
-							    0) {
-								EPL_MEMCPY
-								    (pSdoComCon->
-								     m_pData,
-								     &pAsySdoCom_p->
-								     m_le_abCommandData
-								     [0],
-								     uiSize);
-							}
-							// update counter
-							pSdoComCon->
-							    m_uiTransferredByte
-							    += uiSize;
-							pSdoComCon->
-							    m_uiTransSize -=
-							    uiSize;
-
-							// update pointer
-							if (pSdoComCon->
-							    m_dwLastAbortCode ==
-							    0) {
-								( /*(u8*) */
-								 pSdoComCon->
-								 m_pData) +=
-						      uiSize;
-							}
-							// check end of transfer
-							if ((pAsySdoCom_p->m_le_bFlags & 0x30) == 0x30) {	// transfer ready
-								pSdoComCon->
-								    m_uiTransSize
-								    = 0;
-
-								if (pSdoComCon->
-								    m_dwLastAbortCode
-								    == 0) {
-									// send response
-									// send next frame
-									EplSdoComServerSendFrameIntern
-									    (pSdoComCon,
-									     0,
-									     0,
-									     kEplSdoComSendTypeRes);
-									// if all send -> back to idle
-									if (pSdoComCon->m_uiTransSize == 0) {	// back to idle
-										pSdoComCon->
-										    m_SdoComState
-										    =
-										    kEplSdoComStateIdle;
-										// reset abort code
-										pSdoComCon->
-										    m_dwLastAbortCode
-										    =
-										    0;
-									}
-								} else {	// send dabort code
-									// send abort
-									pSdoComCon->
-									    m_pData
-									    =
-									    (u8
-									     *)
-									    &
-									    pSdoComCon->
-									    m_dwLastAbortCode;
-									Ret =
-									    EplSdoComServerSendFrameIntern
-									    (pSdoComCon,
-									     0,
-									     0,
-									     kEplSdoComSendTypeAbort);
-
-									// reset abort code
-									pSdoComCon->
-									    m_dwLastAbortCode
-									    = 0;
-
-								}
-							} else {
-								// send acknowledge without any Command layer data
-								Ret =
-								    EplSdoAsySeqSendData
-								    (pSdoComCon->
-								     m_SdoSeqConHdl,
-								     0,
-								     (tEplFrame
-								      *) NULL);
-							}
-						}
-					} else {	// this command layer handle is not responsible
-						// (wrong direction or wrong transaction ID)
-						Ret = kEplSdoComNotResponsible;
-						goto Exit;
-					}
-					break;
-				}
-
-				// connection closed
-			case kEplSdoComConEventInitError:
-			case kEplSdoComConEventTimeout:
-			case kEplSdoComConEventConClosed:
-				{
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					// clean control structure
-					EPL_MEMSET(pSdoComCon, 0x00,
-						   sizeof(tEplSdoComCon));
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-			}	// end of switch(SdoComConEvent_p)
-
-			break;
-		}
-#endif // endif of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-		//-------------------------------------------------------------------------
-		// SDO Client part
-		// wait for finish of establishing connection
-	case kEplSdoComStateClientWaitInit:
-		{
-
-			// if connection handle is invalid reinit connection
-			// d.k.: this will be done only on new events (i.e. InitTransfer)
-			if ((pSdoComCon->
-			     m_SdoSeqConHdl & ~EPL_SDO_SEQ_HANDLE_MASK) ==
-			    EPL_SDO_SEQ_INVALID_HDL) {
-				// check kind of connection to reinit
-				// check protocol
-				switch (pSdoComCon->m_SdoProtType) {
-					// udp
-				case kEplSdoTypeUdp:
-					{
-						// call connection int function of lower layer
-						Ret =
-						    EplSdoAsySeqInitCon
-						    (&pSdoComCon->
-						     m_SdoSeqConHdl,
-						     pSdoComCon->m_uiNodeId,
-						     kEplSdoTypeUdp);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						break;
-					}
-
-					// Asend -> not supported
-				case kEplSdoTypeAsnd:
-					{
-						// call connection int function of lower layer
-						Ret =
-						    EplSdoAsySeqInitCon
-						    (&pSdoComCon->
-						     m_SdoSeqConHdl,
-						     pSdoComCon->m_uiNodeId,
-						     kEplSdoTypeAsnd);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						break;
-					}
-
-					// Pdo -> not supported
-				case kEplSdoTypePdo:
-				default:
-					{
-						Ret = kEplSdoComUnsupportedProt;
-						goto Exit;
-					}
-				}	// end of switch(m_ProtType_p)
-				// d.k.: reset transaction ID, because new sequence layer connection was initialized
-				// $$$ d.k. is this really necessary?
-				//pSdoComCon->m_bTransactionId = 0;
-			}
-			// check events
-			switch (SdoComConEvent_p) {
-				// connection established
-			case kEplSdoComConEventConEstablished:
-				{
-					//send first frame if needed
-					if ((pSdoComCon->m_uiTransSize > 0)
-					    && (pSdoComCon->m_uiTargetIndex != 0)) {	// start SDO transfer
-						Ret =
-						    EplSdoComClientSend
-						    (pSdoComCon);
-						if (Ret != kEplSuccessful) {
-							goto Exit;
-						}
-						// check if segemted transfer
-						if (pSdoComCon->
-						    m_SdoTransType ==
-						    kEplSdoTransSegmented) {
-							pSdoComCon->
-							    m_SdoComState =
-							    kEplSdoComStateClientSegmTrans;
-							goto Exit;
-						}
-					}
-					// goto state kEplSdoComStateClientConnected
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientConnected;
-					goto Exit;
-				}
-
-			case kEplSdoComConEventSendFirst:
-				{
-					// infos for transfer already saved by function EplSdoComInitTransferByIndex
-					break;
-				}
-
-			case kEplSdoComConEventConClosed:
-			case kEplSdoComConEventInitError:
-			case kEplSdoComConEventTimeout:
-				{
-					// close sequence layer handle
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					pSdoComCon->m_SdoSeqConHdl |=
-					    EPL_SDO_SEQ_INVALID_HDL;
-					// call callback function
-					if (SdoComConEvent_p ==
-					    kEplSdoComConEventTimeout) {
-						pSdoComCon->m_dwLastAbortCode =
-						    EPL_SDOAC_TIME_OUT;
-					} else {
-						pSdoComCon->m_dwLastAbortCode =
-						    0;
-					}
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferLowerLayerAbort);
-					// d.k.: do not clean control structure
-					break;
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of  switch(SdoComConEvent_p)
-			break;
-		}
-
-		// connected
-	case kEplSdoComStateClientConnected:
-		{
-			// check events
-			switch (SdoComConEvent_p) {
-				// send a frame
-			case kEplSdoComConEventSendFirst:
-			case kEplSdoComConEventAckReceived:
-			case kEplSdoComConEventFrameSended:
-				{
-					Ret = EplSdoComClientSend(pSdoComCon);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-					// check if read transfer finished
-					if ((pSdoComCon->m_uiTransSize == 0)
-					    && (pSdoComCon->
-						m_uiTransferredByte != 0)
-					    && (pSdoComCon->m_SdoServiceType ==
-						kEplSdoServiceReadByIndex)) {
-						// inc transaction id
-						pSdoComCon->m_bTransactionId++;
-						// call callback of application
-						pSdoComCon->m_dwLastAbortCode =
-						    0;
-						Ret =
-						    EplSdoComTransferFinished
-						    (SdoComCon_p, pSdoComCon,
-						     kEplSdoComTransferFinished);
-
-						goto Exit;
-					}
-					// check if segemted transfer
-					if (pSdoComCon->m_SdoTransType ==
-					    kEplSdoTransSegmented) {
-						pSdoComCon->m_SdoComState =
-						    kEplSdoComStateClientSegmTrans;
-						goto Exit;
-					}
-					break;
-				}
-
-				// frame received
-			case kEplSdoComConEventRec:
-				{
-					// check if the frame is a SDO response and has the right transaction ID
-					bFlag =
-					    AmiGetByteFromLe(&pAsySdoCom_p->
-							     m_le_bFlags);
-					if (((bFlag & 0x80) != 0)
-					    &&
-					    (AmiGetByteFromLe
-					     (&pAsySdoCom_p->
-					      m_le_bTransactionId) ==
-					     pSdoComCon->m_bTransactionId)) {
-						// check if abort or not
-						if ((bFlag & 0x40) != 0) {
-							// send acknowledge without any Command layer data
-							Ret =
-							    EplSdoAsySeqSendData
-							    (pSdoComCon->
-							     m_SdoSeqConHdl, 0,
-							     (tEplFrame *)
-							     NULL);
-							// inc transaction id
-							pSdoComCon->
-							    m_bTransactionId++;
-							// save abort code
-							pSdoComCon->
-							    m_dwLastAbortCode =
-							    AmiGetDwordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_abCommandData
-							     [0]);
-							// call callback of application
-							Ret =
-							    EplSdoComTransferFinished
-							    (SdoComCon_p,
-							     pSdoComCon,
-							     kEplSdoComTransferRxAborted);
-
-							goto Exit;
-						} else {	// normal frame received
-							// check frame
-							Ret =
-							    EplSdoComClientProcessFrame
-							    (SdoComCon_p,
-							     pAsySdoCom_p);
-
-							// check if transfer ready
-							if (pSdoComCon->
-							    m_uiTransSize ==
-							    0) {
-								// send acknowledge without any Command layer data
-								Ret =
-								    EplSdoAsySeqSendData
-								    (pSdoComCon->
-								     m_SdoSeqConHdl,
-								     0,
-								     (tEplFrame
-								      *) NULL);
-								// inc transaction id
-								pSdoComCon->
-								    m_bTransactionId++;
-								// call callback of application
-								pSdoComCon->
-								    m_dwLastAbortCode
-								    = 0;
-								Ret =
-								    EplSdoComTransferFinished
-								    (SdoComCon_p,
-								     pSdoComCon,
-								     kEplSdoComTransferFinished);
-
-								goto Exit;
-							}
-
-						}
-					} else {	// this command layer handle is not responsible
-						// (wrong direction or wrong transaction ID)
-						Ret = kEplSdoComNotResponsible;
-						goto Exit;
-					}
-					break;
-				}
-
-				// connection closed event go back to kEplSdoComStateClientWaitInit
-			case kEplSdoComConEventConClosed:
-				{	// connection closed by communication partner
-					// close sequence layer handle
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					// set handle to invalid and enter kEplSdoComStateClientWaitInit
-					pSdoComCon->m_SdoSeqConHdl |=
-					    EPL_SDO_SEQ_INVALID_HDL;
-					// change state
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientWaitInit;
-
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode = 0;
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferLowerLayerAbort);
-
-					goto Exit;
-
-					break;
-				}
-
-				// abort to send from higher layer
-			case kEplSdoComConEventAbort:
-				{
-					EplSdoComClientSendAbort(pSdoComCon,
-								 *((u32 *)
-								   pSdoComCon->
-								   m_pData));
-
-					// inc transaction id
-					pSdoComCon->m_bTransactionId++;
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode =
-					    *((u32 *) pSdoComCon->m_pData);
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferTxAborted);
-
-					break;
-				}
-
-			case kEplSdoComConEventInitError:
-			case kEplSdoComConEventTimeout:
-				{
-					// close sequence layer handle
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					pSdoComCon->m_SdoSeqConHdl |=
-					    EPL_SDO_SEQ_INVALID_HDL;
-					// change state
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientWaitInit;
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode =
-					    EPL_SDOAC_TIME_OUT;
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferLowerLayerAbort);
-
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(SdoComConEvent_p)
-
-			break;
-		}
-
-		// process segmented transfer
-	case kEplSdoComStateClientSegmTrans:
-		{
-			// check events
-			switch (SdoComConEvent_p) {
-				// sned a frame
-			case kEplSdoComConEventSendFirst:
-			case kEplSdoComConEventAckReceived:
-			case kEplSdoComConEventFrameSended:
-				{
-					Ret = EplSdoComClientSend(pSdoComCon);
-					if (Ret != kEplSuccessful) {
-						goto Exit;
-					}
-					// check if read transfer finished
-					if ((pSdoComCon->m_uiTransSize == 0)
-					    && (pSdoComCon->m_SdoServiceType ==
-						kEplSdoServiceReadByIndex)) {
-						// inc transaction id
-						pSdoComCon->m_bTransactionId++;
-						// change state
-						pSdoComCon->m_SdoComState =
-						    kEplSdoComStateClientConnected;
-						// call callback of application
-						pSdoComCon->m_dwLastAbortCode =
-						    0;
-						Ret =
-						    EplSdoComTransferFinished
-						    (SdoComCon_p, pSdoComCon,
-						     kEplSdoComTransferFinished);
-
-						goto Exit;
-					}
-
-					break;
-				}
-
-				// frame received
-			case kEplSdoComConEventRec:
-				{
-					// check if the frame is a response
-					bFlag =
-					    AmiGetByteFromLe(&pAsySdoCom_p->
-							     m_le_bFlags);
-					if (((bFlag & 0x80) != 0)
-					    &&
-					    (AmiGetByteFromLe
-					     (&pAsySdoCom_p->
-					      m_le_bTransactionId) ==
-					     pSdoComCon->m_bTransactionId)) {
-						// check if abort or not
-						if ((bFlag & 0x40) != 0) {
-							// send acknowledge without any Command layer data
-							Ret =
-							    EplSdoAsySeqSendData
-							    (pSdoComCon->
-							     m_SdoSeqConHdl, 0,
-							     (tEplFrame *)
-							     NULL);
-							// inc transaction id
-							pSdoComCon->
-							    m_bTransactionId++;
-							// change state
-							pSdoComCon->
-							    m_SdoComState =
-							    kEplSdoComStateClientConnected;
-							// save abort code
-							pSdoComCon->
-							    m_dwLastAbortCode =
-							    AmiGetDwordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_abCommandData
-							     [0]);
-							// call callback of application
-							Ret =
-							    EplSdoComTransferFinished
-							    (SdoComCon_p,
-							     pSdoComCon,
-							     kEplSdoComTransferRxAborted);
-
-							goto Exit;
-						} else {	// normal frame received
-							// check frame
-							Ret =
-							    EplSdoComClientProcessFrame
-							    (SdoComCon_p,
-							     pAsySdoCom_p);
-
-							// check if transfer ready
-							if (pSdoComCon->
-							    m_uiTransSize ==
-							    0) {
-								// send acknowledge without any Command layer data
-								Ret =
-								    EplSdoAsySeqSendData
-								    (pSdoComCon->
-								     m_SdoSeqConHdl,
-								     0,
-								     (tEplFrame
-								      *) NULL);
-								// inc transaction id
-								pSdoComCon->
-								    m_bTransactionId++;
-								// change state
-								pSdoComCon->
-								    m_SdoComState
-								    =
-								    kEplSdoComStateClientConnected;
-								// call callback of application
-								pSdoComCon->
-								    m_dwLastAbortCode
-								    = 0;
-								Ret =
-								    EplSdoComTransferFinished
-								    (SdoComCon_p,
-								     pSdoComCon,
-								     kEplSdoComTransferFinished);
-
-							}
-
-						}
-					}
-					break;
-				}
-
-				// connection closed event go back to kEplSdoComStateClientWaitInit
-			case kEplSdoComConEventConClosed:
-				{	// connection closed by communication partner
-					// close sequence layer handle
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					// set handle to invalid and enter kEplSdoComStateClientWaitInit
-					pSdoComCon->m_SdoSeqConHdl |=
-					    EPL_SDO_SEQ_INVALID_HDL;
-					// change state
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientWaitInit;
-					// inc transaction id
-					pSdoComCon->m_bTransactionId++;
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode = 0;
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferFinished);
-
-					break;
-				}
-
-				// abort to send from higher layer
-			case kEplSdoComConEventAbort:
-				{
-					EplSdoComClientSendAbort(pSdoComCon,
-								 *((u32 *)
-								   pSdoComCon->
-								   m_pData));
-
-					// inc transaction id
-					pSdoComCon->m_bTransactionId++;
-					// change state
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientConnected;
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode =
-					    *((u32 *) pSdoComCon->m_pData);
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferTxAborted);
-
-					break;
-				}
-
-			case kEplSdoComConEventInitError:
-			case kEplSdoComConEventTimeout:
-				{
-					// close sequence layer handle
-					Ret =
-					    EplSdoAsySeqDelCon(pSdoComCon->
-							       m_SdoSeqConHdl);
-					pSdoComCon->m_SdoSeqConHdl |=
-					    EPL_SDO_SEQ_INVALID_HDL;
-					// change state
-					pSdoComCon->m_SdoComState =
-					    kEplSdoComStateClientWaitInit;
-					// call callback of application
-					pSdoComCon->m_dwLastAbortCode =
-					    EPL_SDOAC_TIME_OUT;
-					Ret =
-					    EplSdoComTransferFinished
-					    (SdoComCon_p, pSdoComCon,
-					     kEplSdoComTransferLowerLayerAbort);
-
-				}
-
-			default:
-				// d.k. do nothing
-				break;
-
-			}	// end of switch(SdoComConEvent_p)
-
-			break;
-		}
-#endif // endo of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-
-	}			// end of switch(pSdoComCon->m_SdoComState)
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-      Exit:
-#endif
-
-#if defined(WIN32) || defined(_WIN32)
-	// leave critical section for process function
-	EPL_DBGLVL_SDO_TRACE0
-	    ("\n\tLeaveCriticalSection EplSdoComProcessIntern\n\n");
-	LeaveCriticalSection(SdoComInstance_g.m_pCriticalSection);
-
-#endif
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComServerInitReadByIndex
-//
-// Description:    function start the processing of an read by index command
-//
-//
-//
-// Parameters:      pSdoComCon_p     = pointer to control structure of connection
-//                  pAsySdoCom_p     = pointer to received frame
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-static tEplKernel EplSdoComServerInitReadByIndex(tEplSdoComCon * pSdoComCon_p,
-						 tEplAsySdoCom * pAsySdoCom_p)
-{
-	tEplKernel Ret;
-	unsigned int uiIndex;
-	unsigned int uiSubindex;
-	tEplObdSize EntrySize;
-	tEplObdAccess AccessType;
-	u32 dwAbortCode;
-
-	dwAbortCode = 0;
-
-	// a init of a read could not be a segmented transfer
-	// -> no variable part of header
-
-	// get index and subindex
-	uiIndex = AmiGetWordFromLe(&pAsySdoCom_p->m_le_abCommandData[0]);
-	uiSubindex = AmiGetByteFromLe(&pAsySdoCom_p->m_le_abCommandData[2]);
-
-	// check accesstype of entry
-	// existens of entry
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-	Ret = EplObduGetAccessType(uiIndex, uiSubindex, &AccessType);
-/*#else
-    Ret = kEplObdSubindexNotExist;
-    AccessType = 0;
-#endif*/
-	if (Ret == kEplObdSubindexNotExist) {	// subentry doesn't exist
-		dwAbortCode = EPL_SDOAC_SUB_INDEX_NOT_EXIST;
-		// send abort
-		pSdoComCon_p->m_pData = (u8 *) & dwAbortCode;
-		Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-						     uiIndex,
-						     uiSubindex,
-						     kEplSdoComSendTypeAbort);
-		goto Exit;
-	} else if (Ret != kEplSuccessful) {	// entry doesn't exist
-		dwAbortCode = EPL_SDOAC_OBJECT_NOT_EXIST;
-		// send abort
-		pSdoComCon_p->m_pData = (u8 *) & dwAbortCode;
-		Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-						     uiIndex,
-						     uiSubindex,
-						     kEplSdoComSendTypeAbort);
-		goto Exit;
-	}
-	// compare accesstype must be read or const
-	if (((AccessType & kEplObdAccRead) == 0)
-	    && ((AccessType & kEplObdAccConst) == 0)) {
-
-		if ((AccessType & kEplObdAccWrite) != 0) {
-			// entry read a write only object
-			dwAbortCode = EPL_SDOAC_READ_TO_WRITE_ONLY_OBJ;
-		} else {
-			dwAbortCode = EPL_SDOAC_UNSUPPORTED_ACCESS;
-		}
-		// send abort
-		pSdoComCon_p->m_pData = (u8 *) & dwAbortCode;
-		Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-						     uiIndex,
-						     uiSubindex,
-						     kEplSdoComSendTypeAbort);
-		goto Exit;
-	}
-	// save service
-	pSdoComCon_p->m_SdoServiceType = kEplSdoServiceReadByIndex;
-
-	// get size of object to see iof segmented or expedited transfer
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-	EntrySize = EplObduGetDataSize(uiIndex, uiSubindex);
-/*#else
-    EntrySize = 0;
-#endif*/
-	if (EntrySize > EPL_SDO_MAX_PAYLOAD) {	// segmented transfer
-		pSdoComCon_p->m_SdoTransType = kEplSdoTransSegmented;
-		// get pointer to object-entry data
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-		pSdoComCon_p->m_pData =
-		    EplObduGetObjectDataPtr(uiIndex, uiSubindex);
-//#endif
-	} else {		// expedited transfer
-		pSdoComCon_p->m_SdoTransType = kEplSdoTransExpedited;
-	}
-
-	pSdoComCon_p->m_uiTransSize = EntrySize;
-	pSdoComCon_p->m_uiTransferredByte = 0;
-
-	Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-					     uiIndex,
-					     uiSubindex, kEplSdoComSendTypeRes);
-	if (Ret != kEplSuccessful) {
-		// error -> abort
-		dwAbortCode = EPL_SDOAC_GENERAL_ERROR;
-		// send abort
-		pSdoComCon_p->m_pData = (u8 *) & dwAbortCode;
-		Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-						     uiIndex,
-						     uiSubindex,
-						     kEplSdoComSendTypeAbort);
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComServerSendFrameIntern();
-//
-// Description:    function creats and send a frame for server
-//
-//
-//
-// Parameters:      pSdoComCon_p     = pointer to control structure of connection
-//                  uiIndex_p        = index to send if expedited transfer else 0
-//                  uiSubIndex_p     = subindex to send if expedited transfer else 0
-//                  SendType_p       = to of frame to send
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-static tEplKernel EplSdoComServerSendFrameIntern(tEplSdoComCon * pSdoComCon_p,
-						 unsigned int uiIndex_p,
-						 unsigned int uiSubIndex_p,
-						 tEplSdoComSendType SendType_p)
-{
-	tEplKernel Ret;
-	u8 abFrame[EPL_MAX_SDO_FRAME_SIZE];
-	tEplFrame *pFrame;
-	tEplAsySdoCom *pCommandFrame;
-	unsigned int uiSizeOfFrame;
-	u8 bFlag;
-
-	Ret = kEplSuccessful;
-
-	pFrame = (tEplFrame *) & abFrame[0];
-
-	EPL_MEMSET(&abFrame[0], 0x00, sizeof(abFrame));
-
-	// build generic part of frame
-	// get pointer to command layerpart of frame
-	pCommandFrame =
-	    &pFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-	    m_le_abSdoSeqPayload;
-	AmiSetByteToLe(&pCommandFrame->m_le_bCommandId,
-		       pSdoComCon_p->m_SdoServiceType);
-	AmiSetByteToLe(&pCommandFrame->m_le_bTransactionId,
-		       pSdoComCon_p->m_bTransactionId);
-
-	// set size to header size
-	uiSizeOfFrame = 8;
-
-	// check SendType
-	switch (SendType_p) {
-		// requestframe to send
-	case kEplSdoComSendTypeReq:
-		{
-			// nothing to do for server
-			//-> error
-			Ret = kEplSdoComInvalidSendType;
-			break;
-		}
-
-		// response without data to send
-	case kEplSdoComSendTypeAckRes:
-		{
-			// set response flag
-			AmiSetByteToLe(&pCommandFrame->m_le_bFlags, 0x80);
-
-			// send frame
-			Ret = EplSdoAsySeqSendData(pSdoComCon_p->m_SdoSeqConHdl,
-						   uiSizeOfFrame, pFrame);
-
-			break;
-		}
-
-		// responsframe to send
-	case kEplSdoComSendTypeRes:
-		{
-			// set response flag
-			bFlag = AmiGetByteFromLe(&pCommandFrame->m_le_bFlags);
-			bFlag |= 0x80;
-			AmiSetByteToLe(&pCommandFrame->m_le_bFlags, bFlag);
-
-			// check type of resonse
-			if (pSdoComCon_p->m_SdoTransType == kEplSdoTransExpedited) {	// Expedited transfer
-				// copy data in frame
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-				Ret = EplObduReadEntryToLe(uiIndex_p,
-							   uiSubIndex_p,
-							   &pCommandFrame->
-							   m_le_abCommandData
-							   [0],
-							   (tEplObdSize *) &
-							   pSdoComCon_p->
-							   m_uiTransSize);
-				if (Ret != kEplSuccessful) {
-					goto Exit;
-				}
-//#endif
-
-				// set size of frame
-				AmiSetWordToLe(&pCommandFrame->
-					       m_le_wSegmentSize,
-					       (u16) pSdoComCon_p->
-					       m_uiTransSize);
-
-				// correct byte-counter
-				uiSizeOfFrame += pSdoComCon_p->m_uiTransSize;
-				pSdoComCon_p->m_uiTransferredByte +=
-				    pSdoComCon_p->m_uiTransSize;
-				pSdoComCon_p->m_uiTransSize = 0;
-
-				// send frame
-				uiSizeOfFrame += pSdoComCon_p->m_uiTransSize;
-				Ret =
-				    EplSdoAsySeqSendData(pSdoComCon_p->
-							 m_SdoSeqConHdl,
-							 uiSizeOfFrame, pFrame);
-			} else if (pSdoComCon_p->m_SdoTransType == kEplSdoTransSegmented) {	// segmented transfer
-				// distinguish between init, segment and complete
-				if (pSdoComCon_p->m_uiTransferredByte == 0) {	// init
-					// set init flag
-					bFlag =
-					    AmiGetByteFromLe(&pCommandFrame->
-							     m_le_bFlags);
-					bFlag |= 0x10;
-					AmiSetByteToLe(&pCommandFrame->
-						       m_le_bFlags, bFlag);
-					// init variable header
-					AmiSetDwordToLe(&pCommandFrame->
-							m_le_abCommandData[0],
-							pSdoComCon_p->
-							m_uiTransSize);
-					// copy data in frame
-					EPL_MEMCPY(&pCommandFrame->
-						   m_le_abCommandData[4],
-						   pSdoComCon_p->m_pData,
-						   (EPL_SDO_MAX_PAYLOAD - 4));
-
-					// correct byte-counter
-					pSdoComCon_p->m_uiTransSize -=
-					    (EPL_SDO_MAX_PAYLOAD - 4);
-					pSdoComCon_p->m_uiTransferredByte +=
-					    (EPL_SDO_MAX_PAYLOAD - 4);
-					// move data pointer
-					pSdoComCon_p->m_pData +=
-					    (EPL_SDO_MAX_PAYLOAD - 4);
-
-					// set segment size
-					AmiSetWordToLe(&pCommandFrame->
-						       m_le_wSegmentSize,
-						       (EPL_SDO_MAX_PAYLOAD -
-							4));
-
-					// send frame
-					uiSizeOfFrame += EPL_SDO_MAX_PAYLOAD;
-					Ret =
-					    EplSdoAsySeqSendData(pSdoComCon_p->
-								 m_SdoSeqConHdl,
-								 uiSizeOfFrame,
-								 pFrame);
-
-				} else
-				    if ((pSdoComCon_p->m_uiTransferredByte > 0)
-					&& (pSdoComCon_p->m_uiTransSize > EPL_SDO_MAX_PAYLOAD)) {	// segment
-					// set segment flag
-					bFlag =
-					    AmiGetByteFromLe(&pCommandFrame->
-							     m_le_bFlags);
-					bFlag |= 0x20;
-					AmiSetByteToLe(&pCommandFrame->
-						       m_le_bFlags, bFlag);
-
-					// copy data in frame
-					EPL_MEMCPY(&pCommandFrame->
-						   m_le_abCommandData[0],
-						   pSdoComCon_p->m_pData,
-						   EPL_SDO_MAX_PAYLOAD);
-
-					// correct byte-counter
-					pSdoComCon_p->m_uiTransSize -=
-					    EPL_SDO_MAX_PAYLOAD;
-					pSdoComCon_p->m_uiTransferredByte +=
-					    EPL_SDO_MAX_PAYLOAD;
-					// move data pointer
-					pSdoComCon_p->m_pData +=
-					    EPL_SDO_MAX_PAYLOAD;
-
-					// set segment size
-					AmiSetWordToLe(&pCommandFrame->
-						       m_le_wSegmentSize,
-						       EPL_SDO_MAX_PAYLOAD);
-
-					// send frame
-					uiSizeOfFrame += EPL_SDO_MAX_PAYLOAD;
-					Ret =
-					    EplSdoAsySeqSendData(pSdoComCon_p->
-								 m_SdoSeqConHdl,
-								 uiSizeOfFrame,
-								 pFrame);
-				} else {
-					if ((pSdoComCon_p->m_uiTransSize == 0)
-					    && (pSdoComCon_p->
-						m_SdoServiceType !=
-						kEplSdoServiceWriteByIndex)) {
-						goto Exit;
-					}
-					// complete
-					// set segment complete flag
-					bFlag =
-					    AmiGetByteFromLe(&pCommandFrame->
-							     m_le_bFlags);
-					bFlag |= 0x30;
-					AmiSetByteToLe(&pCommandFrame->
-						       m_le_bFlags, bFlag);
-
-					// copy data in frame
-					EPL_MEMCPY(&pCommandFrame->
-						   m_le_abCommandData[0],
-						   pSdoComCon_p->m_pData,
-						   pSdoComCon_p->m_uiTransSize);
-
-					// correct byte-counter
-					pSdoComCon_p->m_uiTransferredByte +=
-					    pSdoComCon_p->m_uiTransSize;
-
-					// move data pointer
-					pSdoComCon_p->m_pData +=
-					    pSdoComCon_p->m_uiTransSize;
-
-					// set segment size
-					AmiSetWordToLe(&pCommandFrame->
-						       m_le_wSegmentSize,
-						       (u16) pSdoComCon_p->
-						       m_uiTransSize);
-
-					// send frame
-					uiSizeOfFrame +=
-					    pSdoComCon_p->m_uiTransSize;
-					pSdoComCon_p->m_uiTransSize = 0;
-					Ret =
-					    EplSdoAsySeqSendData(pSdoComCon_p->
-								 m_SdoSeqConHdl,
-								 uiSizeOfFrame,
-								 pFrame);
-				}
-
-			}
-			break;
-		}
-		// abort to send
-	case kEplSdoComSendTypeAbort:
-		{
-			// set response and abort flag
-			bFlag = AmiGetByteFromLe(&pCommandFrame->m_le_bFlags);
-			bFlag |= 0xC0;
-			AmiSetByteToLe(&pCommandFrame->m_le_bFlags, bFlag);
-
-			// copy abortcode to frame
-			AmiSetDwordToLe(&pCommandFrame->m_le_abCommandData[0],
-					*((u32 *) pSdoComCon_p->m_pData));
-
-			// set size of segment
-			AmiSetWordToLe(&pCommandFrame->m_le_wSegmentSize,
-				       sizeof(u32));
-
-			// update counter
-			pSdoComCon_p->m_uiTransferredByte = sizeof(u32);
-			pSdoComCon_p->m_uiTransSize = 0;
-
-			// calc framesize
-			uiSizeOfFrame += sizeof(u32);
-			Ret = EplSdoAsySeqSendData(pSdoComCon_p->m_SdoSeqConHdl,
-						   uiSizeOfFrame, pFrame);
-			break;
-		}
-	}			// end of switch(SendType_p)
-
-      Exit:
-	return Ret;
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComServerInitWriteByIndex
-//
-// Description:    function start the processing of an write by index command
-//
-//
-//
-// Parameters:      pSdoComCon_p     = pointer to control structure of connection
-//                  pAsySdoCom_p     = pointer to received frame
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOS)) != 0)
-static tEplKernel EplSdoComServerInitWriteByIndex(tEplSdoComCon * pSdoComCon_p,
-						  tEplAsySdoCom * pAsySdoCom_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	unsigned int uiSubindex;
-	unsigned int uiBytesToTransfer;
-	tEplObdSize EntrySize;
-	tEplObdAccess AccessType;
-	u32 dwAbortCode;
-	u8 *pbSrcData;
-
-	dwAbortCode = 0;
-
-	// a init of a write
-	// -> variable part of header possible
-
-	// check if expedited or segmented transfer
-	if ((pAsySdoCom_p->m_le_bFlags & 0x30) == 0x10) {	// initiate segmented transfer
-		pSdoComCon_p->m_SdoTransType = kEplSdoTransSegmented;
-		// get index and subindex
-		uiIndex =
-		    AmiGetWordFromLe(&pAsySdoCom_p->m_le_abCommandData[4]);
-		uiSubindex =
-		    AmiGetByteFromLe(&pAsySdoCom_p->m_le_abCommandData[6]);
-		// get source-pointer for copy
-		pbSrcData = &pAsySdoCom_p->m_le_abCommandData[8];
-		// save size
-		pSdoComCon_p->m_uiTransSize =
-		    AmiGetDwordFromLe(&pAsySdoCom_p->m_le_abCommandData[0]);
-
-	} else if ((pAsySdoCom_p->m_le_bFlags & 0x30) == 0x00) {	// expedited transfer
-		pSdoComCon_p->m_SdoTransType = kEplSdoTransExpedited;
-		// get index and subindex
-		uiIndex =
-		    AmiGetWordFromLe(&pAsySdoCom_p->m_le_abCommandData[0]);
-		uiSubindex =
-		    AmiGetByteFromLe(&pAsySdoCom_p->m_le_abCommandData[2]);
-		// get source-pointer for copy
-		pbSrcData = &pAsySdoCom_p->m_le_abCommandData[4];
-		// save size
-		pSdoComCon_p->m_uiTransSize =
-		    AmiGetWordFromLe(&pAsySdoCom_p->m_le_wSegmentSize);
-		// subtract header
-		pSdoComCon_p->m_uiTransSize -= 4;
-
-	} else {
-		// just ignore any other transfer type
-		goto Exit;
-	}
-
-	// check accesstype of entry
-	// existens of entry
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-	Ret = EplObduGetAccessType(uiIndex, uiSubindex, &AccessType);
-/*#else
-    Ret = kEplObdSubindexNotExist;
-    AccessType = 0;
-#endif*/
-	if (Ret == kEplObdSubindexNotExist) {	// subentry doesn't exist
-		pSdoComCon_p->m_dwLastAbortCode = EPL_SDOAC_SUB_INDEX_NOT_EXIST;
-		// send abort
-		// d.k. This is wrong: k.t. not needed send abort on end of write
-		/*pSdoComCon_p->m_pData = (u8*)pSdoComCon_p->m_dwLastAbortCode;
-		   Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-		   uiIndex,
-		   uiSubindex,
-		   kEplSdoComSendTypeAbort); */
-		goto Abort;
-	} else if (Ret != kEplSuccessful) {	// entry doesn't exist
-		pSdoComCon_p->m_dwLastAbortCode = EPL_SDOAC_OBJECT_NOT_EXIST;
-		// send abort
-		// d.k. This is wrong: k.t. not needed send abort on end of write
-		/*
-		   pSdoComCon_p->m_pData = (u8*)&dwAbortCode;
-		   Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-		   uiIndex,
-		   uiSubindex,
-		   kEplSdoComSendTypeAbort); */
-		goto Abort;
-	}
-	// compare accesstype must be read
-	if ((AccessType & kEplObdAccWrite) == 0) {
-
-		if ((AccessType & kEplObdAccRead) != 0) {
-			// entry write a read only object
-			pSdoComCon_p->m_dwLastAbortCode =
-			    EPL_SDOAC_WRITE_TO_READ_ONLY_OBJ;
-		} else {
-			pSdoComCon_p->m_dwLastAbortCode =
-			    EPL_SDOAC_UNSUPPORTED_ACCESS;
-		}
-		// send abort
-		// d.k. This is wrong: k.t. not needed send abort on end of write
-		/*pSdoComCon_p->m_pData = (u8*)&dwAbortCode;
-		   Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-		   uiIndex,
-		   uiSubindex,
-		   kEplSdoComSendTypeAbort); */
-		goto Abort;
-	}
-	// save service
-	pSdoComCon_p->m_SdoServiceType = kEplSdoServiceWriteByIndex;
-
-	pSdoComCon_p->m_uiTransferredByte = 0;
-
-	// write data to OD
-	if (pSdoComCon_p->m_SdoTransType == kEplSdoTransExpedited) {	// expedited transfer
-		// size checking is done by EplObduWriteEntryFromLe()
-
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-		Ret = EplObduWriteEntryFromLe(uiIndex,
-					      uiSubindex,
-					      pbSrcData,
-					      pSdoComCon_p->m_uiTransSize);
-		switch (Ret) {
-		case kEplSuccessful:
-			{
-				break;
-			}
-
-		case kEplObdAccessViolation:
-			{
-				pSdoComCon_p->m_dwLastAbortCode =
-				    EPL_SDOAC_UNSUPPORTED_ACCESS;
-				// send abort
-				goto Abort;
-			}
-
-		case kEplObdValueLengthError:
-			{
-				pSdoComCon_p->m_dwLastAbortCode =
-				    EPL_SDOAC_DATA_TYPE_LENGTH_NOT_MATCH;
-				// send abort
-				goto Abort;
-			}
-
-		case kEplObdValueTooHigh:
-			{
-				pSdoComCon_p->m_dwLastAbortCode =
-				    EPL_SDOAC_VALUE_RANGE_TOO_HIGH;
-				// send abort
-				goto Abort;
-			}
-
-		case kEplObdValueTooLow:
-			{
-				pSdoComCon_p->m_dwLastAbortCode =
-				    EPL_SDOAC_VALUE_RANGE_TOO_LOW;
-				// send abort
-				goto Abort;
-			}
-
-		default:
-			{
-				pSdoComCon_p->m_dwLastAbortCode =
-				    EPL_SDOAC_GENERAL_ERROR;
-				// send abort
-				goto Abort;
-			}
-		}
-//#endif
-		// send command acknowledge
-		Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-						     0,
-						     0,
-						     kEplSdoComSendTypeAckRes);
-
-		pSdoComCon_p->m_uiTransSize = 0;
-		goto Exit;
-	} else {
-		// get size of the object to check if it fits
-		// because we directly write to the destination memory
-		// d.k. no one calls the user OD callback function
-
-		//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-		EntrySize = EplObduGetDataSize(uiIndex, uiSubindex);
-		/*#else
-		   EntrySize = 0;
-		   #endif */
-		if (EntrySize < pSdoComCon_p->m_uiTransSize) {	// parameter too big
-			pSdoComCon_p->m_dwLastAbortCode =
-			    EPL_SDOAC_DATA_TYPE_LENGTH_TOO_HIGH;
-			// send abort
-			// d.k. This is wrong: k.t. not needed send abort on end of write
-			/*pSdoComCon_p->m_pData = (u8*)&dwAbortCode;
-			   Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-			   uiIndex,
-			   uiSubindex,
-			   kEplSdoComSendTypeAbort); */
-			goto Abort;
-		}
-
-		uiBytesToTransfer =
-		    AmiGetWordFromLe(&pAsySdoCom_p->m_le_wSegmentSize);
-		// eleminate header (Command header (8) + variable part (4) + Command header (4))
-		uiBytesToTransfer -= 16;
-		// get pointer to object entry
-//#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-		pSdoComCon_p->m_pData = EplObduGetObjectDataPtr(uiIndex,
-								uiSubindex);
-//#endif
-		if (pSdoComCon_p->m_pData == NULL) {
-			pSdoComCon_p->m_dwLastAbortCode =
-			    EPL_SDOAC_GENERAL_ERROR;
-			// send abort
-			// d.k. This is wrong: k.t. not needed send abort on end of write
-/*            pSdoComCon_p->m_pData = (u8*)&pSdoComCon_p->m_dwLastAbortCode;
-            Ret = EplSdoComServerSendFrameIntern(pSdoComCon_p,
-                                        uiIndex,
-                                        uiSubindex,
-                                        kEplSdoComSendTypeAbort);*/
-			goto Abort;
-		}
-		// copy data
-		EPL_MEMCPY(pSdoComCon_p->m_pData, pbSrcData, uiBytesToTransfer);
-
-		// update internal counter
-		pSdoComCon_p->m_uiTransferredByte = uiBytesToTransfer;
-		pSdoComCon_p->m_uiTransSize -= uiBytesToTransfer;
-
-		// update target pointer
-		( /*(u8*) */ pSdoComCon_p->m_pData) += uiBytesToTransfer;
-
-		// send acknowledge without any Command layer data
-		Ret = EplSdoAsySeqSendData(pSdoComCon_p->m_SdoSeqConHdl,
-					   0, (tEplFrame *) NULL);
-		goto Exit;
-	}
-
-      Abort:
-	if (pSdoComCon_p->m_dwLastAbortCode != 0) {
-		// send abort
-		pSdoComCon_p->m_pData =
-		    (u8 *) & pSdoComCon_p->m_dwLastAbortCode;
-		Ret =
-		    EplSdoComServerSendFrameIntern(pSdoComCon_p, uiIndex,
-						   uiSubindex,
-						   kEplSdoComSendTypeAbort);
-
-		// reset abort code
-		pSdoComCon_p->m_dwLastAbortCode = 0;
-		pSdoComCon_p->m_uiTransSize = 0;
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComClientSend
-//
-// Description:    function starts an sdo transfer an send all further frames
-//
-//
-//
-// Parameters:      pSdoComCon_p     = pointer to control structure of connection
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-static tEplKernel EplSdoComClientSend(tEplSdoComCon * pSdoComCon_p)
-{
-	tEplKernel Ret;
-	u8 abFrame[EPL_MAX_SDO_FRAME_SIZE];
-	tEplFrame *pFrame;
-	tEplAsySdoCom *pCommandFrame;
-	unsigned int uiSizeOfFrame;
-	u8 bFlags;
-	u8 *pbPayload;
-
-	Ret = kEplSuccessful;
-
-	pFrame = (tEplFrame *) & abFrame[0];
-
-	EPL_MEMSET(&abFrame[0], 0x00, sizeof(abFrame));
-
-	// build generic part of frame
-	// get pointer to command layerpart of frame
-	pCommandFrame =
-	    &pFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-	    m_le_abSdoSeqPayload;
-	AmiSetByteToLe(&pCommandFrame->m_le_bCommandId,
-		       pSdoComCon_p->m_SdoServiceType);
-	AmiSetByteToLe(&pCommandFrame->m_le_bTransactionId,
-		       pSdoComCon_p->m_bTransactionId);
-
-	// set size constant part of header
-	uiSizeOfFrame = 8;
-
-	// check if first frame to send -> command header needed
-	if (pSdoComCon_p->m_uiTransSize > 0) {
-		if (pSdoComCon_p->m_uiTransferredByte == 0) {	// start SDO transfer
-			// check if segmented or expedited transfer
-			// only for write commands
-			switch (pSdoComCon_p->m_SdoServiceType) {
-			case kEplSdoServiceReadByIndex:
-				{	// first frame of read access always expedited
-					pSdoComCon_p->m_SdoTransType =
-					    kEplSdoTransExpedited;
-					pbPayload =
-					    &pCommandFrame->
-					    m_le_abCommandData[0];
-					// fill rest of header
-					AmiSetWordToLe(&pCommandFrame->
-						       m_le_wSegmentSize, 4);
-
-					// create command header
-					AmiSetWordToLe(pbPayload,
-						       (u16) pSdoComCon_p->
-						       m_uiTargetIndex);
-					pbPayload += 2;
-					AmiSetByteToLe(pbPayload,
-						       (u8) pSdoComCon_p->
-						       m_uiTargetSubIndex);
-					// calc size
-					uiSizeOfFrame += 4;
-
-					// set pSdoComCon_p->m_uiTransferredByte to one
-					pSdoComCon_p->m_uiTransferredByte = 1;
-					break;
-				}
-
-			case kEplSdoServiceWriteByIndex:
-				{
-					if (pSdoComCon_p->m_uiTransSize > EPL_SDO_MAX_PAYLOAD) {	// segmented transfer
-						// -> variable part of header needed
-						// save that transfer is segmented
-						pSdoComCon_p->m_SdoTransType =
-						    kEplSdoTransSegmented;
-						// fill variable part of header
-						AmiSetDwordToLe(&pCommandFrame->
-								m_le_abCommandData
-								[0],
-								pSdoComCon_p->
-								m_uiTransSize);
-						// set pointer to real payload
-						pbPayload =
-						    &pCommandFrame->
-						    m_le_abCommandData[4];
-						// fill rest of header
-						AmiSetWordToLe(&pCommandFrame->
-							       m_le_wSegmentSize,
-							       EPL_SDO_MAX_PAYLOAD);
-						bFlags = 0x10;
-						AmiSetByteToLe(&pCommandFrame->
-							       m_le_bFlags,
-							       bFlags);
-						// create command header
-						AmiSetWordToLe(pbPayload,
-							       (u16)
-							       pSdoComCon_p->
-							       m_uiTargetIndex);
-						pbPayload += 2;
-						AmiSetByteToLe(pbPayload,
-							       (u8)
-							       pSdoComCon_p->
-							       m_uiTargetSubIndex);
-						// on byte for reserved
-						pbPayload += 2;
-						// calc size
-						uiSizeOfFrame +=
-						    EPL_SDO_MAX_PAYLOAD;
-
-						// copy payload
-						EPL_MEMCPY(pbPayload,
-							   pSdoComCon_p->
-							   m_pData,
-							   (EPL_SDO_MAX_PAYLOAD
-							    - 8));
-						pSdoComCon_p->m_pData +=
-						    (EPL_SDO_MAX_PAYLOAD - 8);
-						// correct intern counter
-						pSdoComCon_p->m_uiTransSize -=
-						    (EPL_SDO_MAX_PAYLOAD - 8);
-						pSdoComCon_p->
-						    m_uiTransferredByte =
-						    (EPL_SDO_MAX_PAYLOAD - 8);
-
-					} else {	// expedited trandsfer
-						// save that transfer is expedited
-						pSdoComCon_p->m_SdoTransType =
-						    kEplSdoTransExpedited;
-						pbPayload =
-						    &pCommandFrame->
-						    m_le_abCommandData[0];
-
-						// create command header
-						AmiSetWordToLe(pbPayload,
-							       (u16)
-							       pSdoComCon_p->
-							       m_uiTargetIndex);
-						pbPayload += 2;
-						AmiSetByteToLe(pbPayload,
-							       (u8)
-							       pSdoComCon_p->
-							       m_uiTargetSubIndex);
-						// + 2 -> one byte for subindex and one byte reserved
-						pbPayload += 2;
-						// copy data
-						EPL_MEMCPY(pbPayload,
-							   pSdoComCon_p->
-							   m_pData,
-							   pSdoComCon_p->
-							   m_uiTransSize);
-						// calc size
-						uiSizeOfFrame +=
-						    (4 +
-						     pSdoComCon_p->
-						     m_uiTransSize);
-						// fill rest of header
-						AmiSetWordToLe(&pCommandFrame->
-							       m_le_wSegmentSize,
-							       (u16) (4 +
-								       pSdoComCon_p->
-								       m_uiTransSize));
-
-						pSdoComCon_p->
-						    m_uiTransferredByte =
-						    pSdoComCon_p->m_uiTransSize;
-						pSdoComCon_p->m_uiTransSize = 0;
-					}
-					break;
-				}
-
-			case kEplSdoServiceNIL:
-			default:
-				// invalid service requested
-				Ret = kEplSdoComInvalidServiceType;
-				goto Exit;
-			}	// end of switch(pSdoComCon_p->m_SdoServiceType)
-		} else		// (pSdoComCon_p->m_uiTransferredByte > 0)
-		{		// continue SDO transfer
-			switch (pSdoComCon_p->m_SdoServiceType) {
-				// for expedited read is nothing to do
-				// -> server sends data
-
-			case kEplSdoServiceWriteByIndex:
-				{	// send next frame
-					if (pSdoComCon_p->m_SdoTransType ==
-					    kEplSdoTransSegmented) {
-						if (pSdoComCon_p->m_uiTransSize > EPL_SDO_MAX_PAYLOAD) {	// next segment
-							pbPayload =
-							    &pCommandFrame->
-							    m_le_abCommandData
-							    [0];
-							// fill rest of header
-							AmiSetWordToLe
-							    (&pCommandFrame->
-							     m_le_wSegmentSize,
-							     EPL_SDO_MAX_PAYLOAD);
-							bFlags = 0x20;
-							AmiSetByteToLe
-							    (&pCommandFrame->
-							     m_le_bFlags,
-							     bFlags);
-							// copy data
-							EPL_MEMCPY(pbPayload,
-								   pSdoComCon_p->
-								   m_pData,
-								   EPL_SDO_MAX_PAYLOAD);
-							pSdoComCon_p->m_pData +=
-							    EPL_SDO_MAX_PAYLOAD;
-							// correct intern counter
-							pSdoComCon_p->
-							    m_uiTransSize -=
-							    EPL_SDO_MAX_PAYLOAD;
-							pSdoComCon_p->
-							    m_uiTransferredByte
-							    =
-							    EPL_SDO_MAX_PAYLOAD;
-							// calc size
-							uiSizeOfFrame +=
-							    EPL_SDO_MAX_PAYLOAD;
-
-						} else {	// end of transfer
-							pbPayload =
-							    &pCommandFrame->
-							    m_le_abCommandData
-							    [0];
-							// fill rest of header
-							AmiSetWordToLe
-							    (&pCommandFrame->
-							     m_le_wSegmentSize,
-							     (u16)
-							     pSdoComCon_p->
-							     m_uiTransSize);
-							bFlags = 0x30;
-							AmiSetByteToLe
-							    (&pCommandFrame->
-							     m_le_bFlags,
-							     bFlags);
-							// copy data
-							EPL_MEMCPY(pbPayload,
-								   pSdoComCon_p->
-								   m_pData,
-								   pSdoComCon_p->
-								   m_uiTransSize);
-							pSdoComCon_p->m_pData +=
-							    pSdoComCon_p->
-							    m_uiTransSize;
-							// calc size
-							uiSizeOfFrame +=
-							    pSdoComCon_p->
-							    m_uiTransSize;
-							// correct intern counter
-							pSdoComCon_p->
-							    m_uiTransSize = 0;
-							pSdoComCon_p->
-							    m_uiTransferredByte
-							    =
-							    pSdoComCon_p->
-							    m_uiTransSize;
-
-						}
-					} else {
-						goto Exit;
-					}
-					break;
-				}
-			default:
-				{
-					goto Exit;
-				}
-			}	// end of switch(pSdoComCon_p->m_SdoServiceType)
-		}
-	} else {
-		goto Exit;
-	}
-
-	// call send function of lower layer
-	switch (pSdoComCon_p->m_SdoProtType) {
-	case kEplSdoTypeAsnd:
-	case kEplSdoTypeUdp:
-		{
-			Ret = EplSdoAsySeqSendData(pSdoComCon_p->m_SdoSeqConHdl,
-						   uiSizeOfFrame, pFrame);
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplSdoComUnsupportedProt;
-		}
-	}			// end of switch(pSdoComCon_p->m_SdoProtType)
-
-      Exit:
-	return Ret;
-
-}
-#endif
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoComClientProcessFrame
-//
-// Description:    function process a received frame
-//
-//
-//
-// Parameters:      SdoComCon_p      = connection handle
-//                  pAsySdoCom_p     = pointer to frame to process
-//
-// Returns:         tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-static tEplKernel EplSdoComClientProcessFrame(tEplSdoComConHdl SdoComCon_p,
-					      tEplAsySdoCom * pAsySdoCom_p)
-{
-	tEplKernel Ret;
-	u8 bBuffer;
-	unsigned int uiBuffer;
-	unsigned int uiDataSize;
-	unsigned long ulBuffer;
-	tEplSdoComCon *pSdoComCon;
-
-	Ret = kEplSuccessful;
-
-	// get pointer to control structure
-	pSdoComCon = &SdoComInstance_g.m_SdoComCon[SdoComCon_p];
-
-	// check if transaction Id fit
-	bBuffer = AmiGetByteFromLe(&pAsySdoCom_p->m_le_bTransactionId);
-	if (pSdoComCon->m_bTransactionId != bBuffer) {
-		// incorrect transaction id
-
-		// if running transfer
-		if ((pSdoComCon->m_uiTransferredByte != 0)
-		    && (pSdoComCon->m_uiTransSize != 0)) {
-			pSdoComCon->m_dwLastAbortCode = EPL_SDOAC_GENERAL_ERROR;
-			// -> send abort
-			EplSdoComClientSendAbort(pSdoComCon,
-						 pSdoComCon->m_dwLastAbortCode);
-			// call callback of application
-			Ret =
-			    EplSdoComTransferFinished(SdoComCon_p, pSdoComCon,
-						      kEplSdoComTransferTxAborted);
-		}
-
-	} else {		// check if correct command
-		bBuffer = AmiGetByteFromLe(&pAsySdoCom_p->m_le_bCommandId);
-		if (pSdoComCon->m_SdoServiceType != bBuffer) {
-			// incorrect command
-			// if running transfer
-			if ((pSdoComCon->m_uiTransferredByte != 0)
-			    && (pSdoComCon->m_uiTransSize != 0)) {
-				pSdoComCon->m_dwLastAbortCode =
-				    EPL_SDOAC_GENERAL_ERROR;
-				// -> send abort
-				EplSdoComClientSendAbort(pSdoComCon,
-							 pSdoComCon->
-							 m_dwLastAbortCode);
-				// call callback of application
-				Ret =
-				    EplSdoComTransferFinished(SdoComCon_p,
-							      pSdoComCon,
-							      kEplSdoComTransferTxAborted);
-			}
-
-		} else {	// switch on command
-			switch (pSdoComCon->m_SdoServiceType) {
-			case kEplSdoServiceWriteByIndex:
-				{	// check if confirmation from server
-					// nothing more to do
-					break;
-				}
-
-			case kEplSdoServiceReadByIndex:
-				{	// check if it is an segmented or an expedited transfer
-					bBuffer =
-					    AmiGetByteFromLe(&pAsySdoCom_p->
-							     m_le_bFlags);
-					// mask uninteressting bits
-					bBuffer &= 0x30;
-					switch (bBuffer) {
-						// expedited transfer
-					case 0x00:
-						{
-							// check size of buffer
-							uiBuffer =
-							    AmiGetWordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_wSegmentSize);
-							if (uiBuffer > pSdoComCon->m_uiTransSize) {	// buffer provided by the application is to small
-								// copy only a part
-								uiDataSize =
-								    pSdoComCon->
-								    m_uiTransSize;
-							} else {	// buffer fits
-								uiDataSize =
-								    uiBuffer;
-							}
-
-							// copy data
-							EPL_MEMCPY(pSdoComCon->
-								   m_pData,
-								   &pAsySdoCom_p->
-								   m_le_abCommandData
-								   [0],
-								   uiDataSize);
-
-							// correct counter
-							pSdoComCon->
-							    m_uiTransSize = 0;
-							pSdoComCon->
-							    m_uiTransferredByte
-							    = uiDataSize;
-							break;
-						}
-
-						// start of a segmented transfer
-					case 0x10:
-						{	// get total size of transfer
-							ulBuffer =
-							    AmiGetDwordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_abCommandData
-							     [0]);
-							if (ulBuffer <= pSdoComCon->m_uiTransSize) {	// buffer fit
-								pSdoComCon->
-								    m_uiTransSize
-								    =
-								    (unsigned
-								     int)
-								    ulBuffer;
-							} else {	// buffer to small
-								// send abort
-								pSdoComCon->
-								    m_dwLastAbortCode
-								    =
-								    EPL_SDOAC_DATA_TYPE_LENGTH_TOO_HIGH;
-								// -> send abort
-								EplSdoComClientSendAbort
-								    (pSdoComCon,
-								     pSdoComCon->
-								     m_dwLastAbortCode);
-								// call callback of application
-								Ret =
-								    EplSdoComTransferFinished
-								    (SdoComCon_p,
-								     pSdoComCon,
-								     kEplSdoComTransferRxAborted);
-								goto Exit;
-							}
-
-							// get segment size
-							// check size of buffer
-							uiBuffer =
-							    AmiGetWordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_wSegmentSize);
-							// subtract size of vaiable header from datasize
-							uiBuffer -= 4;
-							// copy data
-							EPL_MEMCPY(pSdoComCon->
-								   m_pData,
-								   &pAsySdoCom_p->
-								   m_le_abCommandData
-								   [4],
-								   uiBuffer);
-
-							// correct counter an pointer
-							pSdoComCon->m_pData +=
-							    uiBuffer;
-							pSdoComCon->
-							    m_uiTransferredByte
-							    += uiBuffer;
-							pSdoComCon->
-							    m_uiTransSize -=
-							    uiBuffer;
-
-							break;
-						}
-
-						// segment
-					case 0x20:
-						{
-							// get segment size
-							// check size of buffer
-							uiBuffer =
-							    AmiGetWordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_wSegmentSize);
-							// check if data to copy fit to buffer
-							if (uiBuffer >= pSdoComCon->m_uiTransSize) {	// to much data
-								uiBuffer =
-								    (pSdoComCon->
-								     m_uiTransSize
-								     - 1);
-							}
-							// copy data
-							EPL_MEMCPY(pSdoComCon->
-								   m_pData,
-								   &pAsySdoCom_p->
-								   m_le_abCommandData
-								   [0],
-								   uiBuffer);
-
-							// correct counter an pointer
-							pSdoComCon->m_pData +=
-							    uiBuffer;
-							pSdoComCon->
-							    m_uiTransferredByte
-							    += uiBuffer;
-							pSdoComCon->
-							    m_uiTransSize -=
-							    uiBuffer;
-							break;
-						}
-
-						// last segment
-					case 0x30:
-						{
-							// get segment size
-							// check size of buffer
-							uiBuffer =
-							    AmiGetWordFromLe
-							    (&pAsySdoCom_p->
-							     m_le_wSegmentSize);
-							// check if data to copy fit to buffer
-							if (uiBuffer > pSdoComCon->m_uiTransSize) {	// to much data
-								uiBuffer =
-								    (pSdoComCon->
-								     m_uiTransSize
-								     - 1);
-							}
-							// copy data
-							EPL_MEMCPY(pSdoComCon->
-								   m_pData,
-								   &pAsySdoCom_p->
-								   m_le_abCommandData
-								   [0],
-								   uiBuffer);
-
-							// correct counter an pointer
-							pSdoComCon->m_pData +=
-							    uiBuffer;
-							pSdoComCon->
-							    m_uiTransferredByte
-							    += uiBuffer;
-							pSdoComCon->
-							    m_uiTransSize = 0;
-
-							break;
-						}
-					}	// end of switch(bBuffer & 0x30)
-
-					break;
-				}
-
-			case kEplSdoServiceNIL:
-			default:
-				// invalid service requested
-				// $$$ d.k. What should we do?
-				break;
-			}	// end of switch(pSdoComCon->m_SdoServiceType)
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComClientSendAbort
-//
-// Description: function send a abort message
-//
-//
-//
-// Parameters:  pSdoComCon_p     = pointer to control structure of connection
-//              dwAbortCode_p    = Sdo abort code
-//
-// Returns:     tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-static tEplKernel EplSdoComClientSendAbort(tEplSdoComCon * pSdoComCon_p,
-					   u32 dwAbortCode_p)
-{
-	tEplKernel Ret;
-	u8 abFrame[EPL_MAX_SDO_FRAME_SIZE];
-	tEplFrame *pFrame;
-	tEplAsySdoCom *pCommandFrame;
-	unsigned int uiSizeOfFrame;
-
-	Ret = kEplSuccessful;
-
-	pFrame = (tEplFrame *) & abFrame[0];
-
-	EPL_MEMSET(&abFrame[0], 0x00, sizeof(abFrame));
-
-	// build generic part of frame
-	// get pointer to command layerpart of frame
-	pCommandFrame =
-	    &pFrame->m_Data.m_Asnd.m_Payload.m_SdoSequenceFrame.
-	    m_le_abSdoSeqPayload;
-	AmiSetByteToLe(&pCommandFrame->m_le_bCommandId,
-		       pSdoComCon_p->m_SdoServiceType);
-	AmiSetByteToLe(&pCommandFrame->m_le_bTransactionId,
-		       pSdoComCon_p->m_bTransactionId);
-
-	uiSizeOfFrame = 8;
-
-	// set response and abort flag
-	pCommandFrame->m_le_bFlags |= 0x40;
-
-	// copy abortcode to frame
-	AmiSetDwordToLe(&pCommandFrame->m_le_abCommandData[0], dwAbortCode_p);
-
-	// set size of segment
-	AmiSetWordToLe(&pCommandFrame->m_le_wSegmentSize, sizeof(u32));
-
-	// update counter
-	pSdoComCon_p->m_uiTransferredByte = sizeof(u32);
-	pSdoComCon_p->m_uiTransSize = 0;
-
-	// calc framesize
-	uiSizeOfFrame += sizeof(u32);
-
-	// save abort code
-	pSdoComCon_p->m_dwLastAbortCode = dwAbortCode_p;
-
-	// call send function of lower layer
-	switch (pSdoComCon_p->m_SdoProtType) {
-	case kEplSdoTypeAsnd:
-	case kEplSdoTypeUdp:
-		{
-			Ret = EplSdoAsySeqSendData(pSdoComCon_p->m_SdoSeqConHdl,
-						   uiSizeOfFrame, pFrame);
-			break;
-		}
-
-	default:
-		{
-			Ret = kEplSdoComUnsupportedProt;
-		}
-	}			// end of switch(pSdoComCon_p->m_SdoProtType)
-
-	return Ret;
-}
-#endif
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoComTransferFinished
-//
-// Description: calls callback function of application if available
-//              and clears entry in control structure
-//
-// Parameters:  pSdoComCon_p     = pointer to control structure of connection
-//              SdoComConState_p = state of SDO transfer
-//
-// Returns:     tEplKernel  =  errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplSdoComTransferFinished(tEplSdoComConHdl SdoComCon_p,
-					    tEplSdoComCon * pSdoComCon_p,
-					    tEplSdoComConState SdoComConState_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	if (pSdoComCon_p->m_pfnTransferFinished != NULL) {
-		tEplSdoFinishedCb pfnTransferFinished;
-		tEplSdoComFinished SdoComFinished;
-
-		SdoComFinished.m_pUserArg = pSdoComCon_p->m_pUserArg;
-		SdoComFinished.m_uiNodeId = pSdoComCon_p->m_uiNodeId;
-		SdoComFinished.m_uiTargetIndex = pSdoComCon_p->m_uiTargetIndex;
-		SdoComFinished.m_uiTargetSubIndex =
-		    pSdoComCon_p->m_uiTargetSubIndex;
-		SdoComFinished.m_uiTransferredByte =
-		    pSdoComCon_p->m_uiTransferredByte;
-		SdoComFinished.m_dwAbortCode = pSdoComCon_p->m_dwLastAbortCode;
-		SdoComFinished.m_SdoComConHdl = SdoComCon_p;
-		SdoComFinished.m_SdoComConState = SdoComConState_p;
-		if (pSdoComCon_p->m_SdoServiceType ==
-		    kEplSdoServiceWriteByIndex) {
-			SdoComFinished.m_SdoAccessType = kEplSdoAccessTypeWrite;
-		} else {
-			SdoComFinished.m_SdoAccessType = kEplSdoAccessTypeRead;
-		}
-
-		// reset transfer state so this handle is not busy anymore
-		pSdoComCon_p->m_uiTransferredByte = 0;
-		pSdoComCon_p->m_uiTransSize = 0;
-
-		pfnTransferFinished = pSdoComCon_p->m_pfnTransferFinished;
-		// delete function pointer to inform application only once for each transfer
-		pSdoComCon_p->m_pfnTransferFinished = NULL;
-
-		// call application's callback function
-		pfnTransferFinished(&SdoComFinished);
-
-	}
-
-	return Ret;
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplSdoUdpu.c b/drivers/staging/epl/EplSdoUdpu.c
deleted file mode 100644
index c8e950f..0000000
--- a/drivers/staging/epl/EplSdoUdpu.c
+++ /dev/null
@@ -1,650 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for SDO/UDP-Protocolabstractionlayer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoUdpu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplSdoUdpu.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-
-#include "SocketLinuxKernel.h"
-#include <linux/completion.h>
-#include <linux/sched.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_SDO_MAX_CONNECTION_UDP
-#define EPL_SDO_MAX_CONNECTION_UDP  5
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	unsigned long m_ulIpAddr;	// in network byte order
-	unsigned int m_uiPort;	// in network byte order
-
-} tEplSdoUdpCon;
-
-// instance table
-typedef struct {
-	tEplSdoUdpCon m_aSdoAbsUdpConnection[EPL_SDO_MAX_CONNECTION_UDP];
-	tEplSequLayerReceiveCb m_fpSdoAsySeqCb;
-	SOCKET m_UdpSocket;
-
-	struct completion m_CompletionUdpThread;
-	int m_ThreadHandle;
-	int m_iTerminateThread;
-} tEplSdoUdpInstance;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static tEplSdoUdpInstance SdoUdpInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static int EplSdoUdpThread(void *pArg_p);
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <EPL-SDO-UDP-Layer>                                 */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: Protocolabstraction layer for UDP
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:  pReceiveCb_p    =   functionpointer to Sdo-Sequence layer
-//                                  callback-function
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuInit(tEplSequLayerReceiveCb fpReceiveCb_p)
-{
-	tEplKernel Ret;
-
-	Ret = EplSdoUdpuAddInstance(fpReceiveCb_p);
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuAddInstance
-//
-// Description: init additional instance of the module
-//              înit socket and start Listen-Thread
-//
-//
-//
-// Parameters:  pReceiveCb_p    =   functionpointer to Sdo-Sequence layer
-//                                  callback-function
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuAddInstance(tEplSequLayerReceiveCb fpReceiveCb_p)
-{
-	tEplKernel Ret;
-
-	// set instance variables to 0
-	EPL_MEMSET(&SdoUdpInstance_g, 0x00, sizeof(SdoUdpInstance_g));
-
-	Ret = kEplSuccessful;
-
-	// save pointer to callback-function
-	if (fpReceiveCb_p != NULL) {
-		SdoUdpInstance_g.m_fpSdoAsySeqCb = fpReceiveCb_p;
-	} else {
-		Ret = kEplSdoUdpMissCb;
-		goto Exit;
-	}
-
-	init_completion(&SdoUdpInstance_g.m_CompletionUdpThread);
-	SdoUdpInstance_g.m_iTerminateThread = 0;
-	SdoUdpInstance_g.m_ThreadHandle = 0;
-	SdoUdpInstance_g.m_UdpSocket = INVALID_SOCKET;
-
-	Ret = EplSdoUdpuConfig(INADDR_ANY, 0);
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuDelInstance
-//
-// Description: del instance of the module
-//              del socket and del Listen-Thread
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	if (SdoUdpInstance_g.m_ThreadHandle != 0) {	// listen thread was started
-		// close thread
-		SdoUdpInstance_g.m_iTerminateThread = 1;
-		/* kill_proc(SdoUdpInstance_g.m_ThreadHandle, SIGTERM, 1 ); */
-		send_sig(SIGTERM, SdoUdpInstance_g.m_ThreadHandle, 1);
-		wait_for_completion(&SdoUdpInstance_g.m_CompletionUdpThread);
-		SdoUdpInstance_g.m_ThreadHandle = 0;
-	}
-
-	if (SdoUdpInstance_g.m_UdpSocket != INVALID_SOCKET) {
-		// close socket
-		closesocket(SdoUdpInstance_g.m_UdpSocket);
-		SdoUdpInstance_g.m_UdpSocket = INVALID_SOCKET;
-	}
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuConfig
-//
-// Description: reconfigurate socket with new IP-Address
-//              -> needed for NMT ResetConfiguration
-//
-// Parameters:  ulIpAddr_p      = IpAddress in platform byte order
-//              uiPort_p        = port number in platform byte order
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuConfig(unsigned long ulIpAddr_p, unsigned int uiPort_p)
-{
-	tEplKernel Ret;
-	struct sockaddr_in Addr;
-	int iError;
-
-	Ret = kEplSuccessful;
-
-	if (uiPort_p == 0) {	// set UDP port to default port number
-		uiPort_p = EPL_C_SDO_EPL_PORT;
-	} else if (uiPort_p > 65535) {
-		Ret = kEplSdoUdpSocketError;
-		goto Exit;
-	}
-
-	if (SdoUdpInstance_g.m_ThreadHandle != 0) {	// listen thread was started
-
-		// close old thread
-		SdoUdpInstance_g.m_iTerminateThread = 1;
-		/* kill_proc(SdoUdpInstance_g.m_ThreadHandle, SIGTERM, 1 ); */
-		send_sig(SIGTERM, SdoUdpInstance_g.m_ThreadHandle, 1);
-		wait_for_completion(&SdoUdpInstance_g.m_CompletionUdpThread);
-		SdoUdpInstance_g.m_iTerminateThread = 0;
-		SdoUdpInstance_g.m_ThreadHandle = 0;
-	}
-
-	if (SdoUdpInstance_g.m_UdpSocket != INVALID_SOCKET) {
-		// close socket
-		iError = closesocket(SdoUdpInstance_g.m_UdpSocket);
-		SdoUdpInstance_g.m_UdpSocket = INVALID_SOCKET;
-		if (iError != 0) {
-			Ret = kEplSdoUdpSocketError;
-			goto Exit;
-		}
-	}
-	// create Socket
-	SdoUdpInstance_g.m_UdpSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
-	if (SdoUdpInstance_g.m_UdpSocket == INVALID_SOCKET) {
-		Ret = kEplSdoUdpNoSocket;
-		EPL_DBGLVL_SDO_TRACE0("EplSdoUdpuConfig: socket() failed\n");
-		goto Exit;
-	}
-	// bind socket
-	Addr.sin_family = AF_INET;
-	Addr.sin_port = htons((unsigned short)uiPort_p);
-	Addr.sin_addr.s_addr = htonl(ulIpAddr_p);
-	iError =
-	    bind(SdoUdpInstance_g.m_UdpSocket, (struct sockaddr *)&Addr,
-		 sizeof(Addr));
-	if (iError < 0) {
-		//iError = WSAGetLastError();
-		EPL_DBGLVL_SDO_TRACE1
-		    ("EplSdoUdpuConfig: bind() finished with %i\n", iError);
-		Ret = kEplSdoUdpNoSocket;
-		goto Exit;
-	}
-	// create Listen-Thread
-	SdoUdpInstance_g.m_ThreadHandle =
-		kernel_thread(EplSdoUdpThread, &SdoUdpInstance_g,
-				CLONE_FS | CLONE_FILES);
-	if (SdoUdpInstance_g.m_ThreadHandle == 0) {
-		Ret = kEplSdoUdpThreadError;
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuInitCon
-//
-// Description: init a new connect
-//
-//
-//
-// Parameters:  pSdoConHandle_p = pointer for the new connection handle
-//              uiTargetNodeId_p = NodeId of the target node
-//
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuInitCon(tEplSdoConHdl *pSdoConHandle_p,
-			     unsigned int uiTargetNodeId_p)
-{
-	tEplKernel Ret;
-	unsigned int uiCount;
-	unsigned int uiFreeCon;
-	tEplSdoUdpCon *pSdoUdpCon;
-
-	Ret = kEplSuccessful;
-
-	// get free entry in control structure
-	uiCount = 0;
-	uiFreeCon = EPL_SDO_MAX_CONNECTION_UDP;
-	pSdoUdpCon = &SdoUdpInstance_g.m_aSdoAbsUdpConnection[0];
-	while (uiCount < EPL_SDO_MAX_CONNECTION_UDP) {
-		if ((pSdoUdpCon->m_ulIpAddr & htonl(0xFF)) == htonl(uiTargetNodeId_p)) {	// existing connection to target node found
-			// set handle
-			*pSdoConHandle_p = (uiCount | EPL_SDO_UDP_HANDLE);
-
-			goto Exit;
-		} else if ((pSdoUdpCon->m_ulIpAddr == 0)
-			   && (pSdoUdpCon->m_uiPort == 0)) {
-			uiFreeCon = uiCount;
-		}
-		uiCount++;
-		pSdoUdpCon++;
-	}
-
-	if (uiFreeCon == EPL_SDO_MAX_CONNECTION_UDP) {
-		// error no free handle
-		Ret = kEplSdoUdpNoFreeHandle;
-	} else {
-		pSdoUdpCon =
-		    &SdoUdpInstance_g.m_aSdoAbsUdpConnection[uiFreeCon];
-		// save infos for connection
-		pSdoUdpCon->m_uiPort = htons(EPL_C_SDO_EPL_PORT);
-		pSdoUdpCon->m_ulIpAddr = htonl(0xC0A86400 | uiTargetNodeId_p);	// 192.168.100.uiTargetNodeId_p
-
-		// set handle
-		*pSdoConHandle_p = (uiFreeCon | EPL_SDO_UDP_HANDLE);
-
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuSendData
-//
-// Description: send data using exisiting connection
-//
-//
-//
-// Parameters:  SdoConHandle_p  = connection handle
-//              pSrcData_p      = pointer to data
-//              dwDataSize_p    = number of databyte
-//                                  -> without asend-header!!!
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuSendData(tEplSdoConHdl SdoConHandle_p,
-			      tEplFrame *pSrcData_p, u32 dwDataSize_p)
-{
-	tEplKernel Ret;
-	int iError;
-	unsigned int uiArray;
-	struct sockaddr_in Addr;
-
-	Ret = kEplSuccessful;
-
-	uiArray = (SdoConHandle_p & ~EPL_SDO_ASY_HANDLE_MASK);
-	if (uiArray >= EPL_SDO_MAX_CONNECTION_UDP) {
-		Ret = kEplSdoUdpInvalidHdl;
-		goto Exit;
-	}
-	//set message type
-	AmiSetByteToLe(&pSrcData_p->m_le_bMessageType, 0x06);	// SDO
-	// target node id (for Udp = 0)
-	AmiSetByteToLe(&pSrcData_p->m_le_bDstNodeId, 0x00);
-	// set source-nodeid (for Udp = 0)
-	AmiSetByteToLe(&pSrcData_p->m_le_bSrcNodeId, 0x00);
-
-	// calc size
-	dwDataSize_p += EPL_ASND_HEADER_SIZE;
-
-	// call sendto
-	Addr.sin_family = AF_INET;
-	Addr.sin_port =
-	    (unsigned short)SdoUdpInstance_g.m_aSdoAbsUdpConnection[uiArray].
-	    m_uiPort;
-	Addr.sin_addr.s_addr =
-	    SdoUdpInstance_g.m_aSdoAbsUdpConnection[uiArray].m_ulIpAddr;
-
-	iError = sendto(SdoUdpInstance_g.m_UdpSocket,	// sockethandle
-			(const char *)&pSrcData_p->m_le_bMessageType,	// data to send
-			dwDataSize_p,	// number of bytes to send
-			0,	// flags
-			(struct sockaddr *)&Addr,	// target
-			sizeof(struct sockaddr_in));	// sizeof targetadress
-	if (iError < 0) {
-		EPL_DBGLVL_SDO_TRACE1
-		    ("EplSdoUdpuSendData: sendto() finished with %i\n", iError);
-		Ret = kEplSdoUdpSendError;
-		goto Exit;
-	}
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplSdoUdpuDelCon
-//
-// Description: delete connection from intern structure
-//
-//
-//
-// Parameters:  SdoConHandle_p  = connection handle
-//
-// Returns:     tEplKernel  = Errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-tEplKernel EplSdoUdpuDelCon(tEplSdoConHdl SdoConHandle_p)
-{
-	tEplKernel Ret;
-	unsigned int uiArray;
-
-	uiArray = (SdoConHandle_p & ~EPL_SDO_ASY_HANDLE_MASK);
-
-	if (uiArray >= EPL_SDO_MAX_CONNECTION_UDP) {
-		Ret = kEplSdoUdpInvalidHdl;
-		goto Exit;
-	} else {
-		Ret = kEplSuccessful;
-	}
-
-	// delete connection
-	SdoUdpInstance_g.m_aSdoAbsUdpConnection[uiArray].m_ulIpAddr = 0;
-	SdoUdpInstance_g.m_aSdoAbsUdpConnection[uiArray].m_uiPort = 0;
-
-      Exit:
-	return Ret;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:        EplSdoUdpThread
-//
-// Description:     thread check socket for new data
-//
-//
-//
-// Parameters:      lpParameter = pointer to parameter type tEplSdoUdpThreadPara
-//
-//
-// Returns:         u32   =   errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static int EplSdoUdpThread(void *pArg_p)
-{
-
-	tEplSdoUdpInstance *pInstance;
-	struct sockaddr_in RemoteAddr;
-	int iError;
-	int iCount;
-	int iFreeEntry;
-	u8 abBuffer[EPL_MAX_SDO_REC_FRAME_SIZE];
-	unsigned int uiSize;
-	tEplSdoConHdl SdoConHdl;
-
-	pInstance = (tEplSdoUdpInstance *) pArg_p;
-	daemonize("EplSdoUdpThread");
-	allow_signal(SIGTERM);
-
-	for (; pInstance->m_iTerminateThread == 0;)
-
-	{
-		// wait for data
-		uiSize = sizeof(struct sockaddr);
-		iError = recvfrom(pInstance->m_UdpSocket,	// Socket
-				  (char *)&abBuffer[0],	// buffer for data
-				  sizeof(abBuffer),	// size of the buffer
-				  0,	// flags
-				  (struct sockaddr *)&RemoteAddr,
-				  (int *)&uiSize);
-		if (iError == -ERESTARTSYS) {
-			break;
-		}
-		if (iError > 0) {
-			// get handle for higher layer
-			iCount = 0;
-			iFreeEntry = 0xFFFF;
-			while (iCount < EPL_SDO_MAX_CONNECTION_UDP) {
-				// check if this connection is already known
-				if ((pInstance->m_aSdoAbsUdpConnection[iCount].
-				     m_ulIpAddr == RemoteAddr.sin_addr.s_addr)
-				    && (pInstance->
-					m_aSdoAbsUdpConnection[iCount].
-					m_uiPort == RemoteAddr.sin_port)) {
-					break;
-				}
-
-				if ((pInstance->m_aSdoAbsUdpConnection[iCount].
-				     m_ulIpAddr == 0)
-				    && (pInstance->
-					m_aSdoAbsUdpConnection[iCount].
-					m_uiPort == 0)
-				    && (iFreeEntry == 0xFFFF))
-				{
-					iFreeEntry = iCount;
-				}
-
-				iCount++;
-			}
-
-			if (iCount == EPL_SDO_MAX_CONNECTION_UDP) {
-				// connection unknown
-				// see if there is a free handle
-				if (iFreeEntry != 0xFFFF) {
-					// save adress infos
-					pInstance->
-					    m_aSdoAbsUdpConnection[iFreeEntry].
-					    m_ulIpAddr =
-					    RemoteAddr.sin_addr.s_addr;
-					pInstance->
-					    m_aSdoAbsUdpConnection[iFreeEntry].
-					    m_uiPort = RemoteAddr.sin_port;
-					// call callback
-					SdoConHdl = iFreeEntry;
-					SdoConHdl |= EPL_SDO_UDP_HANDLE;
-					// offset 4 -> start of SDO Sequence header
-					pInstance->m_fpSdoAsySeqCb(SdoConHdl,
-								   (tEplAsySdoSeq
-								    *) &
-								   abBuffer[4],
-								   (iError -
-								    4));
-				} else {
-					EPL_DBGLVL_SDO_TRACE0
-					    ("Error in EplSdoUdpThread() no free handle\n");
-				}
-
-			} else {
-				// known connection
-				// call callback with correct handle
-				SdoConHdl = iCount;
-				SdoConHdl |= EPL_SDO_UDP_HANDLE;
-				// offset 4 -> start of SDO Sequence header
-				pInstance->m_fpSdoAsySeqCb(SdoConHdl,
-							   (tEplAsySdoSeq *) &
-							   abBuffer[4],
-							   (iError - 4));
-			}
-		}		// end of  if(iError!=SOCKET_ERROR)
-	}			// end of for(;;)
-
-	complete_and_exit(&SdoUdpInstance_g.m_CompletionUdpThread, 0);
-	return 0;
-}
-
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-
-// EOF
diff --git a/drivers/staging/epl/EplStatusu.c b/drivers/staging/epl/EplStatusu.c
deleted file mode 100644
index b291399..0000000
--- a/drivers/staging/epl/EplStatusu.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for Statusu-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplStatusu.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/11/15 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplStatusu.h"
-#include "user/EplDlluCal.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <xxxxx>                                             */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description:
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   D E F I N I T I O N S                          //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplStatusuCbResponse m_apfnCbResponse[254];
-
-} tEplStatusuInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplStatusuInstance EplStatusuInstance_g;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static tEplKernel EplStatusuCbStatusResponse(tEplFrameInfo *pFrameInfo_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuInit
-//
-// Description: init first instance of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplStatusuInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplStatusuAddInstance();
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuAddInstance
-//
-// Description: init other instances of the module
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplStatusuAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplStatusuInstance_g, 0, sizeof(EplStatusuInstance_g));
-
-	// register StatusResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndStatusResponse,
-				     EplStatusuCbStatusResponse,
-				     kEplDllAsndFilterAny);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuDelInstance
-//
-// Description: delete instance
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplStatusuDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// deregister StatusResponse callback function
-	Ret =
-	    EplDlluCalRegAsndService(kEplDllAsndStatusResponse, NULL,
-				     kEplDllAsndFilterNone);
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuReset
-//
-// Description: resets this instance
-//
-// Parameters:
-//
-// Returns:     tEplKernel  = errorcode
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplStatusuReset(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// reset instance structure
-	EPL_MEMSET(&EplStatusuInstance_g, 0, sizeof(EplStatusuInstance_g));
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuRequestStatusResponse
-//
-// Description: returns the StatusResponse for the specified node.
-//
-// Parameters:  uiNodeId_p                  = IN: node ID
-//              pfnCbResponse_p             = IN: function pointer to callback function
-//                                            which will be called if StatusResponse is received
-//
-// Return:      tEplKernel                  = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplStatusuRequestStatusResponse(unsigned int uiNodeId_p,
-					   tEplStatusuCbResponse pfnCbResponse_p)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	// decrement node ID, because array is zero based
-	uiNodeId_p--;
-	if (uiNodeId_p < tabentries(EplStatusuInstance_g.m_apfnCbResponse)) {
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-		if (EplStatusuInstance_g.m_apfnCbResponse[uiNodeId_p] != NULL) {	// request already issued (maybe by someone else)
-			Ret = kEplInvalidOperation;
-		} else {
-			EplStatusuInstance_g.m_apfnCbResponse[uiNodeId_p] =
-			    pfnCbResponse_p;
-			Ret =
-			    EplDlluCalIssueRequest(kEplDllReqServiceStatus,
-						   (uiNodeId_p + 1), 0xFF);
-		}
-#else
-		Ret = kEplInvalidOperation;
-#endif
-	} else {		// invalid node ID specified
-		Ret = kEplInvalidNodeId;
-	}
-
-	return Ret;
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplStatusuCbStatusResponse
-//
-// Description: callback funktion for StatusResponse
-//
-//
-//
-// Parameters:  pFrameInfo_p            = Frame with the StatusResponse
-//
-//
-// Returns:     tEplKernel              = error code
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static tEplKernel EplStatusuCbStatusResponse(tEplFrameInfo *pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiNodeId;
-	unsigned int uiIndex;
-	tEplStatusuCbResponse pfnCbResponse;
-
-	uiNodeId = AmiGetByteFromLe(&pFrameInfo_p->m_pFrame->m_le_bSrcNodeId);
-
-	uiIndex = uiNodeId - 1;
-
-	if (uiIndex < tabentries(EplStatusuInstance_g.m_apfnCbResponse)) {
-		// memorize pointer to callback function
-		pfnCbResponse = EplStatusuInstance_g.m_apfnCbResponse[uiIndex];
-		if (pfnCbResponse == NULL) {	// response was not requested
-			goto Exit;
-		}
-		// reset callback function pointer so that caller may issue next request
-		EplStatusuInstance_g.m_apfnCbResponse[uiIndex] = NULL;
-
-		if (pFrameInfo_p->m_uiFrameSize < EPL_C_DLL_MINSIZE_STATUSRES) {	// StatusResponse not received or it has invalid size
-			Ret = pfnCbResponse(uiNodeId, NULL);
-		} else {	// StatusResponse received
-			Ret =
-			    pfnCbResponse(uiNodeId,
-					  &pFrameInfo_p->m_pFrame->m_Data.
-					  m_Asnd.m_Payload.m_StatusResponse);
-		}
-	}
-
-      Exit:
-	return Ret;
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplTarget.h b/drivers/staging/epl/EplTarget.h
deleted file mode 100644
index e76d21f..0000000
--- a/drivers/staging/epl/EplTarget.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for target api function
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTarget.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2005/12/05 -as:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPLTARGET_H_
-#define _EPLTARGET_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-// =========================================================================
-// macros for memory access (depends on target system)
-// =========================================================================
-
-// NOTE:
-// The following macros are used to combine standard library definitions. Some
-// applications needs to use one common library function (e.g. memcpy()). So
-// you can set (or change) it here.
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/major.h>
-
-    //29.11.2004 f.j. sonst ist memcpy und memset unbekannt
-//    #include <string.h>
-
-#define EPL_MEMCPY(dst,src,siz)     memcpy((void*)(dst),(const void*)(src),(size_t)(siz));
-#define EPL_MEMSET(dst,val,siz)     memset((void*)(dst),(int)(val),(size_t)(siz));
-
-#define EPL_MALLOC(siz)             kmalloc((size_t)(siz), GFP_KERNEL)
-#define EPL_FREE(ptr)               kfree((void *)ptr)
-
-#ifndef PRINTF0
-#define PRINTF                      TRACE
-#define PRINTF0(arg)                TRACE0(arg)
-#define PRINTF1(arg,p1)             TRACE1(arg,p1)
-#define PRINTF2(arg,p1,p2)          TRACE2(arg,p1,p2)
-#define PRINTF3(arg,p1,p2,p3)       TRACE3(arg,p1,p2,p3)
-#define PRINTF4(arg,p1,p2,p3,p4)    TRACE4(arg,p1,p2,p3,p4)
-	//#define PRINTF                      printf
-	//#define PRINTF0(arg)                PRINTF(arg)
-	//#define PRINTF1(arg,p1)             PRINTF(arg,p1)
-	//#define PRINTF2(arg,p1,p2)          PRINTF(arg,p1,p2)
-	//#define PRINTF3(arg,p1,p2,p3)       PRINTF(arg,p1,p2,p3)
-	//#define PRINTF4(arg,p1,p2,p3,p4)    PRINTF(arg,p1,p2,p3,p4)
-#endif
-
-#define EPL_TGT_INTMASK_ETH     0x0001	// ethernet interrupt
-#define EPL_TGT_INTMASK_DMA     0x0002	// DMA interrupt
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-// currently no Timer functions are needed by EPL stack
-// so they are not implemented yet
-//void  TgtTimerInit(void);
-//u32 TgtGetTickCount(void);
-//void TgtGetNetTime(tEplNetTime * pNetTime_p);
-
-// functions for ethernet driver
-tEplKernel TgtInitEthIsr(void);
-void TgtFreeEthIsr(void);
-void TgtEnableGlobalInterrupt(u8 fEnable_p);
-void TgtEnableEthInterrupt0(u8 fEnable_p, unsigned int uiInterruptMask_p);
-void TgtEnableEthInterrupt1(u8 fEnable_p, unsigned int uiInterruptMask_p);
-
-#endif // #ifndef _EPLTARGET_H_
diff --git a/drivers/staging/epl/EplTimer.h b/drivers/staging/epl/EplTimer.h
deleted file mode 100644
index d1a73ea..0000000
--- a/drivers/staging/epl/EplTimer.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Epl Timer-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTimer.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/06 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "EplEvent.h"
-
-#ifndef _EPLTIMER_H_
-#define _EPLTIMER_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-// type for timer handle
-typedef unsigned long tEplTimerHdl;
-
-typedef struct {
-	tEplEventSink m_EventSink;
-	unsigned long m_ulArg;	// d.k.: converted to unsigned long because
-	// it is never accessed as a pointer by the
-	// timer module and the data the
-	// pointer points to is not saved in any way.
-	// It is just a value. The user is responsible
-	// to store the data statically and convert
-	// the pointer between address spaces.
-
-} tEplTimerArg;
-
-typedef struct {
-	tEplTimerHdl m_TimerHdl;
-	unsigned long m_ulArg;	// d.k.: converted to unsigned long because
-	// it is never accessed as a pointer by the
-	// timer module and the data the
-	// pointer points to is not saved in any way.
-	// It is just a value.
-
-} tEplTimerEventArg;
-
-typedef tEplKernel(* tEplTimerkCallback) (tEplTimerEventArg *pEventArg_p);
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _EPLTIMER_H_
diff --git a/drivers/staging/epl/EplTimeruLinuxKernel.c b/drivers/staging/epl/EplTimeruLinuxKernel.c
deleted file mode 100644
index ff80fc8..0000000
--- a/drivers/staging/epl/EplTimeruLinuxKernel.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  source file for EPL User Timermodule for Linux kernel module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTimeruLinuxKernel.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/09/12 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#include "user/EplTimeru.h"
-#include <linux/timer.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-typedef struct {
-	struct timer_list m_Timer;
-	tEplTimerArg TimerArgument;
-
-} tEplTimeruData;
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-static void EplTimeruCbMs(unsigned long ulParameter_p);
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          C L A S S  <Epl Userspace-Timermodule for Linux Kernel>              */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-//
-// Description: Epl Userspace-Timermodule for Linux Kernel
-//
-//
-/***************************************************************************/
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruInit
-//
-// Description: function inits first instance
-//
-// Parameters:  void
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplTimeruAddInstance();
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruAddInstance
-//
-// Description: function inits additional instance
-//
-// Parameters:  void
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruAddInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruDelInstance
-//
-// Description: function deletes instance
-//              -> under Linux nothing to do
-//              -> no instance table needed
-//
-// Parameters:  void
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruDelInstance(void)
-{
-	tEplKernel Ret;
-
-	Ret = kEplSuccessful;
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruSetTimerMs
-//
-// Description: function creates a timer and returns the corresponding handle
-//
-// Parameters:  pTimerHdl_p = pointer to a buffer to fill in the handle
-//              ulTime_p    = time for timer in ms
-//              Argument_p  = argument for timer
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruSetTimerMs(tEplTimerHdl *pTimerHdl_p,
-			       unsigned long ulTime_p,
-			       tEplTimerArg Argument_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplTimeruData *pData;
-
-	// check pointer to handle
-	if (pTimerHdl_p == NULL) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-
-	pData = (tEplTimeruData *) EPL_MALLOC(sizeof(tEplTimeruData));
-	if (pData == NULL) {
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	init_timer(&pData->m_Timer);
-	pData->m_Timer.function = EplTimeruCbMs;
-	pData->m_Timer.data = (unsigned long)pData;
-	pData->m_Timer.expires = jiffies + ulTime_p * HZ / 1000;
-
-	EPL_MEMCPY(&pData->TimerArgument, &Argument_p, sizeof(tEplTimerArg));
-
-	add_timer(&pData->m_Timer);
-
-	*pTimerHdl_p = (tEplTimerHdl) pData;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruModifyTimerMs
-//
-// Description: function changes a timer and returns the corresponding handle
-//
-// Parameters:  pTimerHdl_p = pointer to a buffer to fill in the handle
-//              ulTime_p    = time for timer in ms
-//              Argument_p  = argument for timer
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruModifyTimerMs(tEplTimerHdl *pTimerHdl_p,
-				  unsigned long ulTime_p,
-				  tEplTimerArg Argument_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplTimeruData *pData;
-
-	// check pointer to handle
-	if (pTimerHdl_p == NULL) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-	// check handle itself, i.e. was the handle initialized before
-	if (*pTimerHdl_p == 0) {
-		Ret = EplTimeruSetTimerMs(pTimerHdl_p, ulTime_p, Argument_p);
-		goto Exit;
-	}
-	pData = (tEplTimeruData *) * pTimerHdl_p;
-	if ((tEplTimeruData *) pData->m_Timer.data != pData) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-
-	mod_timer(&pData->m_Timer, (jiffies + ulTime_p * HZ / 1000));
-
-	// copy the TimerArg after the timer is restarted,
-	// so that a timer occured immediately before mod_timer
-	// won't use the new TimerArg and
-	// therefore the old timer cannot be distinguished from the new one.
-	// But if the new timer is too fast, it may get lost.
-	EPL_MEMCPY(&pData->TimerArgument, &Argument_p, sizeof(tEplTimerArg));
-
-	// check if timer is really running
-	if (timer_pending(&pData->m_Timer) == 0) {	// timer is not running
-		// retry starting it
-		add_timer(&pData->m_Timer);
-	}
-	// set handle to pointer of tEplTimeruData
-//    *pTimerHdl_p = (tEplTimerHdl) pData;
-
-      Exit:
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruDeleteTimer
-//
-// Description: function deletes a timer
-//
-// Parameters:  pTimerHdl_p = pointer to a buffer to fill in the handle
-//
-// Returns:     tEplKernel  = errorcode
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimeruDeleteTimer(tEplTimerHdl *pTimerHdl_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplTimeruData *pData;
-
-	// check pointer to handle
-	if (pTimerHdl_p == NULL) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-	// check handle itself, i.e. was the handle initialized before
-	if (*pTimerHdl_p == 0) {
-		Ret = kEplSuccessful;
-		goto Exit;
-	}
-	pData = (tEplTimeruData *) * pTimerHdl_p;
-	if ((tEplTimeruData *) pData->m_Timer.data != pData) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-
-/*    if (del_timer(&pData->m_Timer) == 1)
-    {
-        kfree(pData);
-    }
-*/
-	// try to delete the timer
-	del_timer(&pData->m_Timer);
-	// free memory in any case
-	kfree(pData);
-
-	// uninitialize handle
-	*pTimerHdl_p = 0;
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruIsTimerActive
-//
-// Description: checks if the timer referenced by the handle is currently
-//              active.
-//
-// Parameters:  TimerHdl_p  = handle of the timer to check
-//
-// Returns:     BOOL        = TRUE, if active;
-//                            FALSE, otherwise
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-BOOL EplTimeruIsTimerActive(tEplTimerHdl TimerHdl_p)
-{
-	BOOL fActive = FALSE;
-	tEplTimeruData *pData;
-
-	// check handle itself, i.e. was the handle initialized before
-	if (TimerHdl_p == 0) {	// timer was not created yet, so it is not active
-		goto Exit;
-	}
-	pData = (tEplTimeruData *) TimerHdl_p;
-	if ((tEplTimeruData *) pData->m_Timer.data != pData) {	// invalid timer
-		goto Exit;
-	}
-	// check if timer is running
-	if (timer_pending(&pData->m_Timer) == 0) {	// timer is not running
-		goto Exit;
-	}
-
-	fActive = TRUE;
-
-      Exit:
-	return fActive;
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimeruCbMs
-//
-// Description: function to process timer
-//
-//
-//
-// Parameters:  lpParameter = pointer to structur of type tEplTimeruData
-//
-//
-// Returns:     (none)
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-static void EplTimeruCbMs(unsigned long ulParameter_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplTimeruData *pData;
-	tEplEvent EplEvent;
-	tEplTimerEventArg TimerEventArg;
-
-	pData = (tEplTimeruData *) ulParameter_p;
-
-	// call event function
-	TimerEventArg.m_TimerHdl = (tEplTimerHdl) pData;
-	TimerEventArg.m_ulArg = pData->TimerArgument.m_ulArg;
-
-	EplEvent.m_EventSink = pData->TimerArgument.m_EventSink;
-	EplEvent.m_EventType = kEplEventTypeTimer;
-	EPL_MEMSET(&EplEvent.m_NetTime, 0x00, sizeof(tEplNetTime));
-	EplEvent.m_pArg = &TimerEventArg;
-	EplEvent.m_uiSize = sizeof(TimerEventArg);
-
-	Ret = EplEventuPost(&EplEvent);
-
-	// d.k. do not free memory, user has to call EplTimeruDeleteTimer()
-	//kfree(pData);
-
-}
-
-// EOF
diff --git a/drivers/staging/epl/EplVersion.h b/drivers/staging/epl/EplVersion.h
deleted file mode 100644
index 75570d5..0000000
--- a/drivers/staging/epl/EplVersion.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  This file defines the EPL version for the stack, as string
-                and for object 0x1018 within object dictionary.
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplVersion.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    all
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-****************************************************************************/
-
-#ifndef _EPL_VERSION_H_
-#define _EPL_VERSION_H_
-
-// NOTE:
-// All version macros should contain the same version number. But do not use
-// defines instead of the numbers. Because the macro EPL_STRING_VERSION() can not
-// convert a define to a string.
-//
-// Format: maj.min.build
-//         maj            = major version
-//             min        = minor version (will be set to 0 if major version will be incremented)
-//                 build  = current build (will be set to 0 if minor version will be incremented)
-//
-#define DEFINED_STACK_VERSION       EPL_STACK_VERSION   (1, 3, 0)
-#define DEFINED_OBJ1018_VERSION     EPL_OBJ1018_VERSION (1, 3, 0)
-#define DEFINED_STRING_VERSION      EPL_STRING_VERSION  (1, 3, 0)
-
-// -----------------------------------------------------------------------------
-#define EPL_PRODUCT_NAME            "EPL V2"
-#define EPL_PRODUCT_VERSION         DEFINED_STRING_VERSION
-#define EPL_PRODUCT_MANUFACTURER    "SYS TEC electronic GmbH"
-
-#define EPL_PRODUCT_KEY         "SO-1083"
-#define EPL_PRODUCT_DESCRIPTION "openPOWERLINK Protocol Stack Source"
-
-#endif // _EPL_VERSION_H_
-
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
-// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/Kconfig b/drivers/staging/epl/Kconfig
deleted file mode 100644
index 9f939d5..0000000
--- a/drivers/staging/epl/Kconfig
+++ /dev/null
@@ -1,6 +0,0 @@
-config EPL
-	tristate "openPOWERLINK protocol stack"
-	depends on NET && HIGH_RES_TIMERS && X86
-	default N
-	---help---
-	  Enable support for the openPOWERLINK network protocol stack.
diff --git a/drivers/staging/epl/Makefile b/drivers/staging/epl/Makefile
deleted file mode 100644
index a2c8241..0000000
--- a/drivers/staging/epl/Makefile
+++ /dev/null
@@ -1,41 +0,0 @@
-obj-$(CONFIG_EPL)	+= epl.o
-
-epl-objs := 	\
-	EplApiGeneric.o		\
-	EplApiLinuxKernel.o	\
-	EplApiProcessImage.o	\
-	EplDllk.o		\
-	EplDllkCal.o		\
-	EplDlluCal.o		\
-	EplErrorHandlerk.o	\
-	EplEventk.o		\
-	EplEventu.o		\
-	EplIdentu.o		\
-	EplNmtCnu.o		\
-	EplNmtk.o		\
-	EplNmtkCal.o		\
-	EplNmtMnu.o		\
-	EplNmtu.o		\
-	EplNmtuCal.o		\
-	EplObd.o		\
-	EplObdkCal.o		\
-	EplObdu.o		\
-	EplObduCal.o		\
-	EplPdok.o		\
-	EplPdokCal.o		\
-	EplPdou.o		\
-	EplSdoAsndu.o		\
-	EplSdoAsySequ.o		\
-	EplSdoComu.o		\
-	EplSdoUdpu.o		\
-	EplStatusu.o		\
-	EplTimeruLinuxKernel.o	\
-	amix86.o		\
-	SharedBuff.o		\
-	ShbIpc-LinuxKernel.o	\
-	TimerHighReskX86.o	\
-	VirtualEthernetLinux.o	\
-	SocketLinuxKernel.o	\
-	proc_fs.o		\
-	demo_main.o		\
-	Edrv8139.o		\
diff --git a/drivers/staging/epl/SharedBuff.c b/drivers/staging/epl/SharedBuff.c
deleted file mode 100644
index 2b10c37..0000000
--- a/drivers/staging/epl/SharedBuff.c
+++ /dev/null
@@ -1,1762 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      Project independend shared buffer (linear + circular)
-
-  Description:  Implementation of platform independend part for the
-                shared buffer
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-  2006/06/27 -rs:   V 1.00 (initial version)
-
-****************************************************************************/
-
-#if defined(WIN32) || defined(_WIN32)
-
-#ifdef UNDER_RTSS
-	// RTX header
-#include <windows.h>
-#include <process.h>
-#include <rtapi.h>
-
-#elif __BORLANDC__
-	// borland C header
-#include <windows.h>
-#include <process.h>
-
-#elif WINCE
-#include <windows.h>
-
-#else
-	// MSVC needs to include windows.h at first
-	// the following defines ar necessary for function prototypes for waitable timers
-#define _WIN32_WINDOWS 0x0401
-#define _WIN32_WINNT   0x0400
-#include <windows.h>
-#include <process.h>
-#endif
-
-#endif
-
-#include "global.h"
-#include "SharedBuff.h"
-#include "ShbIpc.h"
-
-#include <linux/string.h>
-#include <linux/kernel.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-//  Configuration
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Constant definitions
-//---------------------------------------------------------------------------
-
-#define SBC_MAGIC_ID    0x53424323	// magic ID ("SBC#")
-#define SBL_MAGIC_ID    0x53424C23	// magic ID ("SBL#")
-
-//---------------------------------------------------------------------------
-//  Local types
-//---------------------------------------------------------------------------
-
-// structure to administrate circular shared buffer head
-typedef struct {
-	unsigned long m_ShbCirMagicID;	// magic ID ("SBC#")
-	unsigned long m_ulBufferTotalSize;	// over-all size of complete buffer
-	unsigned long m_ulBufferDataSize;	// size of complete data area
-	unsigned long m_ulWrIndex;	// current write index (set bevore write)
-	unsigned long m_ulRdIndex;	// current read index (set after read)
-	unsigned long m_ulNumOfWriteJobs;	// number of currently (parallel running) write operations
-	unsigned long m_ulDataInUse;	// currently used buffer size (incl. uncompleted write operations)
-	unsigned long m_ulDataApended;	// buffer size of complete new written but not yet readable data (in case of m_ulNumOfWriteJobs>1)
-	unsigned long m_ulBlocksApended;	// number of complete new written but not yet readable data blocks (in case of m_ulNumOfWriteJobs>1)
-	unsigned long m_ulDataReadable;	// buffer size with readable (complete written) data
-	unsigned long m_ulBlocksReadable;	// number of readable (complete written) data blocks
-	tShbCirSigHndlrNewData m_pfnSigHndlrNewData;	// application handler to signal new data
-	unsigned int m_fBufferLocked;	// TRUE if buffer is locked (because of pending reset request)
-	tShbCirSigHndlrReset m_pfnSigHndlrReset;	// application handler to signal buffer reset is done
-	unsigned char m_Data;	// start of data area (the real data size is unknown at this time)
-
-} tShbCirBuff;
-
-// structure to administrate linear shared buffer head
-typedef struct {
-	unsigned int m_ShbLinMagicID;	// magic ID ("SBL#")
-	unsigned long m_ulBufferTotalSize;	// over-all size of complete buffer
-	unsigned long m_ulBufferDataSize;	// size of complete data area
-	unsigned char m_Data;	// start of data area (the real data size is unknown at this time)
-
-} tShbLinBuff;
-
-// type to save size of a single data block inside the circular shared buffer
-typedef struct {
-	unsigned int m_uiFullBlockSize:28;	// a single block must not exceed a length of 256MByte :-)
-	unsigned int m_uiAlignFillBytes:4;
-
-} tShbCirBlockSize;
-
-#define SBC_BLOCK_ALIGNMENT                  4	// alignment must *not* be lower than sizeof(tShbCirBlockSize)!
-#define SBC_MAX_BLOCK_SIZE         ((1<<28)-1)	// = (2^28 - 1) = (256MByte - 1) -> should be enought for real life :-)
-
-#define SBL_BLOCK_ALIGNMENT                  4
-#define SBL_MAX_BLOCK_SIZE         ((1<<28)-1)	// = (2^28 - 1) = (256MByte - 1) -> should be enought for real life :-)
-
-//---------------------------------------------------------------------------
-//  Global variables
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Local variables
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Prototypes of internal functions
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Get pointer to Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbCirBuff *ShbCirGetBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-
-	pShbCirBuff = (tShbCirBuff *) ShbIpcGetShMemPtr(pShbInstance_p);
-	ASSERT(pShbCirBuff->m_ShbCirMagicID == SBC_MAGIC_ID);
-
-	return (pShbCirBuff);
-
-}
-
-//---------------------------------------------------------------------------
-//  Get pointer to Linear Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbLinBuff *ShbLinGetBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbLinBuff *pShbLinBuff;
-
-	pShbLinBuff = (tShbLinBuff *) ShbIpcGetShMemPtr(pShbInstance_p);
-	ASSERT(pShbLinBuff->m_ShbLinMagicID == SBL_MAGIC_ID);
-
-	return (pShbLinBuff);
-
-}
-
-// not inlined internal functions
-int ShbCirSignalHandlerNewData(tShbInstance pShbInstance_p);
-void ShbCirSignalHandlerReset(tShbInstance pShbInstance_p,
-			      unsigned int fTimeOut_p);
-
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-// not inlined external functions
-
-//---------------------------------------------------------------------------
-//  Initialize Shared Buffer Module
-//---------------------------------------------------------------------------
-
-tShbError ShbInit(void)
-{
-
-	tShbError ShbError;
-
-	ShbError = ShbIpcInit();
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Deinitialize Shared Buffer Module
-//---------------------------------------------------------------------------
-
-tShbError ShbExit(void)
-{
-
-	tShbError ShbError;
-
-	ShbError = ShbIpcExit();
-
-	return (ShbError);
-
-}
-
-//-------------------------------------------------------------------------//
-//                                                                         //
-//          C i r c u l a r   S h a r e d   B u f f e r                    //
-//                                                                         //
-//-------------------------------------------------------------------------//
-
-//---------------------------------------------------------------------------
-//  Allocate Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirAllocBuffer(unsigned long ulBufferSize_p,
-			    const char *pszBufferID_p,
-			    tShbInstance * ppShbInstance_p,
-			    unsigned int *pfShbNewCreated_p)
-{
-
-	tShbInstance pShbInstance;
-	tShbCirBuff *pShbCirBuff;
-	unsigned int fShbNewCreated;
-	unsigned long ulBufferDataSize;
-	unsigned long ulBufferTotalSize;
-	tShbError ShbError;
-
-	// check arguments
-	if ((ulBufferSize_p == 0) || (ppShbInstance_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-
-	// calculate length of memory to allocate
-	ulBufferDataSize =
-	    (ulBufferSize_p +
-	     (SBC_BLOCK_ALIGNMENT - 1)) & ~(SBC_BLOCK_ALIGNMENT - 1);
-	ulBufferTotalSize = ulBufferDataSize + sizeof(tShbCirBuff);
-
-	// allocate a new or open an existing shared buffer
-	ShbError = ShbIpcAllocBuffer(ulBufferTotalSize, pszBufferID_p,
-				     &pShbInstance, &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		goto Exit;
-	}
-
-	if (pShbInstance == NULL) {
-		ShbError = kShbOutOfMem;
-		goto Exit;
-	}
-
-	// get pointer to shared buffer
-	pShbCirBuff = (tShbCirBuff *) ShbIpcGetShMemPtr(pShbInstance);
-
-	// if the shared buffer was new created, than this process has
-	// to initialize it, otherwise the buffer is already in use
-	// and *must not* be reseted
-	if (fShbNewCreated) {
-#ifndef NDEBUG
-		{
-			memset(pShbCirBuff, 0xCC, ulBufferTotalSize);
-		}
-#endif
-
-		pShbCirBuff->m_ShbCirMagicID = SBC_MAGIC_ID;
-		pShbCirBuff->m_ulBufferTotalSize = ulBufferTotalSize;
-		pShbCirBuff->m_ulBufferDataSize = ulBufferDataSize;
-		pShbCirBuff->m_ulWrIndex = 0;
-		pShbCirBuff->m_ulRdIndex = 0;
-		pShbCirBuff->m_ulNumOfWriteJobs = 0;
-		pShbCirBuff->m_ulDataInUse = 0;
-		pShbCirBuff->m_ulDataApended = 0;
-		pShbCirBuff->m_ulBlocksApended = 0;
-		pShbCirBuff->m_ulDataReadable = 0;
-		pShbCirBuff->m_ulBlocksReadable = 0;
-		pShbCirBuff->m_pfnSigHndlrNewData = NULL;
-		pShbCirBuff->m_fBufferLocked = FALSE;
-		pShbCirBuff->m_pfnSigHndlrReset = NULL;
-	} else {
-		if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-			ShbError = kShbInvalidBufferType;
-			goto Exit;
-		}
-	}
-
-      Exit:
-
-	*ppShbInstance_p = pShbInstance;
-	*pfShbNewCreated_p = fShbNewCreated;
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Release Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirReleaseBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	ShbError = ShbIpcReleaseBuffer(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Reset Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirResetBuffer(tShbInstance pShbInstance_p,
-			    unsigned long ulTimeOut_p,
-			    tShbCirSigHndlrReset pfnSignalHandlerReset_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	unsigned long ulNumOfWriteJobs = 0;	// d.k. GCC complains about uninitialized variable otherwise
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// start reset job by setting request request in buffer header
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		if (!pShbCirBuff->m_fBufferLocked) {
-			ulNumOfWriteJobs = pShbCirBuff->m_ulNumOfWriteJobs;
-
-			pShbCirBuff->m_fBufferLocked = TRUE;
-			pShbCirBuff->m_pfnSigHndlrReset =
-			    pfnSignalHandlerReset_p;
-		} else {
-			ShbError = kShbAlreadyReseting;
-		}
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	if (ShbError != kShbOk) {
-		goto Exit;
-	}
-
-	// if there is currently no running write operation then reset buffer
-	// immediately, otherwise wait until the last write job is ready by
-	// starting a signal process
-	if (ulNumOfWriteJobs == 0) {
-		// there is currently no running write operation
-		// -> reset buffer immediately
-		ShbCirSignalHandlerReset(pShbInstance_p, FALSE);
-		ShbError = kShbOk;
-	} else {
-		// there is currently at least one running write operation
-		// -> starting signal process to wait until the last write job is ready
-		ShbError =
-		    ShbIpcStartSignalingJobReady(pShbInstance_p, ulTimeOut_p,
-						 ShbCirSignalHandlerReset);
-	}
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Write data block to Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirWriteDataBlock(tShbInstance pShbInstance_p,
-			       const void *pSrcDataBlock_p,
-			       unsigned long ulDataBlockSize_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	tShbCirBlockSize ShbCirBlockSize;
-	unsigned int uiFullBlockSize;
-	unsigned int uiAlignFillBytes;
-	unsigned char *pShbCirDataPtr;
-	unsigned char *pScrDataPtr;
-	unsigned long ulDataSize;
-	unsigned long ulChunkSize;
-	unsigned long ulWrIndex = 0;	// d.k. GCC complains about uninitialized variable otherwise
-	unsigned int fSignalNewData;
-	unsigned int fSignalReset;
-	tShbError ShbError;
-	tShbError ShbError2;
-	int fRes;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if ((pSrcDataBlock_p == NULL) || (ulDataBlockSize_p == 0)) {
-		// nothing to do here
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	if (ulDataBlockSize_p > SBC_MAX_BLOCK_SIZE) {
-		ShbError = kShbExceedDataSizeLimit;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	pScrDataPtr = (unsigned char *)pSrcDataBlock_p;
-	fSignalNewData = FALSE;
-	fSignalReset = FALSE;
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// calculate data block size in circular buffer
-	ulDataSize =
-	    (ulDataBlockSize_p +
-	     (SBC_BLOCK_ALIGNMENT - 1)) & ~(SBC_BLOCK_ALIGNMENT - 1);
-	uiFullBlockSize = ulDataSize + sizeof(tShbCirBlockSize);	// data size + header
-	uiAlignFillBytes = ulDataSize - ulDataBlockSize_p;
-
-	ShbCirBlockSize.m_uiFullBlockSize = uiFullBlockSize;
-	ShbCirBlockSize.m_uiAlignFillBytes = uiAlignFillBytes;
-
-	// reserve the needed memory for the write operation to do now
-	// and make necessary adjustments in the circular buffer header
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		// check if there is sufficient memory available to store
-		// the new data
-		fRes =
-		    uiFullBlockSize <=
-		    (pShbCirBuff->m_ulBufferDataSize -
-		     pShbCirBuff->m_ulDataInUse);
-		if (fRes) {
-			// set write pointer for the write operation to do now
-			// to the current write pointer of the circular buffer
-			ulWrIndex = pShbCirBuff->m_ulWrIndex;
-
-			// reserve the needed memory for the write operation to do now
-			pShbCirBuff->m_ulDataInUse += uiFullBlockSize;
-
-			// set new write pointer behind the reserved memory
-			// for the write operation to do now
-			pShbCirBuff->m_ulWrIndex += uiFullBlockSize;
-			pShbCirBuff->m_ulWrIndex %=
-			    pShbCirBuff->m_ulBufferDataSize;
-
-			// increment number of currently (parallel running)
-			// write operations
-			pShbCirBuff->m_ulNumOfWriteJobs++;
-		}
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	if (!fRes) {
-		ShbError = kShbBufferFull;
-		goto Exit;
-	}
-
-	// copy the data to the circular buffer
-	// (the copy process itself will be done outside of any
-	// critical/locked section)
-	pShbCirDataPtr = &pShbCirBuff->m_Data;	// ptr to start of data area
-
-	// write real size of current block (incl. alignment fill bytes)
-	*(tShbCirBlockSize *) (pShbCirDataPtr + ulWrIndex) = ShbCirBlockSize;
-	ulWrIndex += sizeof(tShbCirBlockSize);
-	ulWrIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-	if (ulWrIndex + ulDataBlockSize_p <= pShbCirBuff->m_ulBufferDataSize) {
-		// linear write operation
-		memcpy(pShbCirDataPtr + ulWrIndex, pScrDataPtr,
-		       ulDataBlockSize_p);
-	} else {
-		// wrap-around write operation
-		ulChunkSize = pShbCirBuff->m_ulBufferDataSize - ulWrIndex;
-		memcpy(pShbCirDataPtr + ulWrIndex, pScrDataPtr, ulChunkSize);
-		memcpy(pShbCirDataPtr, pScrDataPtr + ulChunkSize,
-		       ulDataBlockSize_p - ulChunkSize);
-	}
-
-	// adjust header information for circular buffer with properties
-	// of the wiritten data block
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		pShbCirBuff->m_ulDataApended += uiFullBlockSize;
-		pShbCirBuff->m_ulBlocksApended++;
-
-		// decrement number of currently (parallel running) write operations
-		if (!--pShbCirBuff->m_ulNumOfWriteJobs) {
-			// if there is no other write process running then
-			// set new size of readable (complete written) data and
-			// adjust number of readable blocks
-			pShbCirBuff->m_ulDataReadable +=
-			    pShbCirBuff->m_ulDataApended;
-			pShbCirBuff->m_ulBlocksReadable +=
-			    pShbCirBuff->m_ulBlocksApended;
-
-			pShbCirBuff->m_ulDataApended = 0;
-			pShbCirBuff->m_ulBlocksApended = 0;
-
-			fSignalNewData = TRUE;
-			fSignalReset = pShbCirBuff->m_fBufferLocked;
-		}
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	// signal new data event to a potentially reading application
-	if (fSignalNewData) {
-		ShbError2 = ShbIpcSignalNewData(pShbInstance_p);
-		if (ShbError == kShbOk) {
-			ShbError = ShbError2;
-		}
-	}
-	// signal that the last write job has been finished to allow
-	// a waiting application to reset the buffer now
-	if (fSignalReset) {
-		ShbError2 = ShbIpcSignalJobReady(pShbInstance_p);
-		if (ShbError == kShbOk) {
-			ShbError = ShbError2;
-		}
-	}
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Allocate block within the Circular Shared Buffer for chunk writing
-//---------------------------------------------------------------------------
-
-tShbError ShbCirAllocDataBlock(tShbInstance pShbInstance_p,
-			       tShbCirChunk * pShbCirChunk_p,
-			       unsigned long ulDataBufferSize_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	tShbCirBlockSize ShbCirBlockSize;
-	unsigned int uiFullBlockSize;
-	unsigned int uiAlignFillBytes;
-	unsigned char *pShbCirDataPtr;
-	unsigned long ulDataSize;
-	unsigned long ulWrIndex = 0;	// d.k. GCC complains about uninitialized variable otherwise
-	tShbError ShbError;
-	int fRes;
-
-	// check arguments
-	if ((pShbInstance_p == NULL) || (pShbCirChunk_p == NULL)) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if (ulDataBufferSize_p == 0) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if (ulDataBufferSize_p > SBC_MAX_BLOCK_SIZE) {
-		ShbError = kShbExceedDataSizeLimit;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// calculate data block size in circular buffer
-	ulDataSize =
-	    (ulDataBufferSize_p +
-	     (SBC_BLOCK_ALIGNMENT - 1)) & ~(SBC_BLOCK_ALIGNMENT - 1);
-	uiFullBlockSize = ulDataSize + sizeof(tShbCirBlockSize);	// data size + header
-	uiAlignFillBytes = ulDataSize - ulDataBufferSize_p;
-
-	ShbCirBlockSize.m_uiFullBlockSize = uiFullBlockSize;
-	ShbCirBlockSize.m_uiAlignFillBytes = uiAlignFillBytes;
-
-	// reserve the needed memory for the write operation to do now
-	// and make necessary adjustments in the circular buffer header
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		// check if there is sufficient memory available to store
-		// the new data
-		fRes =
-		    (uiFullBlockSize <=
-		     (pShbCirBuff->m_ulBufferDataSize -
-		      pShbCirBuff->m_ulDataInUse));
-		if (fRes) {
-			// set write pointer for the write operation to do now
-			// to the current write pointer of the circular buffer
-			ulWrIndex = pShbCirBuff->m_ulWrIndex;
-
-			// reserve the needed memory for the write operation to do now
-			pShbCirBuff->m_ulDataInUse += uiFullBlockSize;
-
-			// set new write pointer behind the reserved memory
-			// for the write operation to do now
-			pShbCirBuff->m_ulWrIndex += uiFullBlockSize;
-			pShbCirBuff->m_ulWrIndex %=
-			    pShbCirBuff->m_ulBufferDataSize;
-
-			// increment number of currently (parallel running)
-			// write operations
-			pShbCirBuff->m_ulNumOfWriteJobs++;
-		}
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	if (!fRes) {
-		ShbError = kShbBufferFull;
-		goto Exit;
-	}
-
-	// setup header information for allocated buffer
-	pShbCirDataPtr = &pShbCirBuff->m_Data;	// ptr to start of data area
-
-	// write real size of current block (incl. alignment fill bytes)
-	*(tShbCirBlockSize *) (pShbCirDataPtr + ulWrIndex) = ShbCirBlockSize;
-	ulWrIndex += sizeof(tShbCirBlockSize);
-	ulWrIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-	// setup chunk descriptor
-	pShbCirChunk_p->m_uiFullBlockSize = uiFullBlockSize;
-	pShbCirChunk_p->m_ulAvailableSize = ulDataBufferSize_p;
-	pShbCirChunk_p->m_ulWrIndex = ulWrIndex;
-	pShbCirChunk_p->m_fBufferCompleted = FALSE;
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Write data chunk into an allocated buffer of the Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirWriteDataChunk(tShbInstance pShbInstance_p,
-			       tShbCirChunk *pShbCirChunk_p,
-			       const void *pSrcDataChunk_p,
-			       unsigned long ulDataChunkSize_p,
-			       unsigned int *pfBufferCompleted_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	unsigned char *pShbCirDataPtr;
-	unsigned char *pScrDataPtr;
-	unsigned long ulSubChunkSize;
-	unsigned long ulWrIndex;
-	unsigned int fBufferCompleted;
-	unsigned int fSignalNewData;
-	unsigned int fSignalReset;
-	tShbError ShbError;
-	tShbError ShbError2;
-
-	// check arguments
-	if ((pShbInstance_p == NULL) || (pShbCirChunk_p == NULL)
-	    || (pfBufferCompleted_p == NULL)) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if ((pSrcDataChunk_p == NULL) || (ulDataChunkSize_p == 0)) {
-		// nothing to do here
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	if (pShbCirChunk_p->m_fBufferCompleted) {
-		ShbError = kShbBufferAlreadyCompleted;
-		goto Exit;
-	}
-
-	if (ulDataChunkSize_p > pShbCirChunk_p->m_ulAvailableSize) {
-		ShbError = kShbExceedDataSizeLimit;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	pScrDataPtr = (unsigned char *)pSrcDataChunk_p;
-	fSignalNewData = FALSE;
-	fSignalReset = FALSE;
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	ulWrIndex = pShbCirChunk_p->m_ulWrIndex;
-
-	// copy the data to the circular buffer
-	// (the copy process itself will be done outside of any
-	// critical/locked section)
-	pShbCirDataPtr = &pShbCirBuff->m_Data;	// ptr to start of data area
-
-	if (ulWrIndex + ulDataChunkSize_p <= pShbCirBuff->m_ulBufferDataSize) {
-		// linear write operation
-		memcpy(pShbCirDataPtr + ulWrIndex, pScrDataPtr,
-		       ulDataChunkSize_p);
-	} else {
-		// wrap-around write operation
-		ulSubChunkSize = pShbCirBuff->m_ulBufferDataSize - ulWrIndex;
-		memcpy(pShbCirDataPtr + ulWrIndex, pScrDataPtr, ulSubChunkSize);
-		memcpy(pShbCirDataPtr, pScrDataPtr + ulSubChunkSize,
-		       ulDataChunkSize_p - ulSubChunkSize);
-	}
-
-	// adjust chunk descriptor
-	ulWrIndex += ulDataChunkSize_p;
-	ulWrIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-	pShbCirChunk_p->m_ulAvailableSize -= ulDataChunkSize_p;
-	pShbCirChunk_p->m_ulWrIndex = ulWrIndex;
-
-	fBufferCompleted = (pShbCirChunk_p->m_ulAvailableSize == 0);
-	pShbCirChunk_p->m_fBufferCompleted = fBufferCompleted;
-
-	// if the complete allocated buffer is filled with data then
-	// adjust header information for circular buffer with properties
-	// of the wiritten data block
-	if (fBufferCompleted) {
-		ShbIpcEnterAtomicSection(pShbInstance_p);
-		{
-			pShbCirBuff->m_ulDataApended +=
-			    pShbCirChunk_p->m_uiFullBlockSize;
-			pShbCirBuff->m_ulBlocksApended++;
-
-			// decrement number of currently (parallel running) write operations
-			if (!--pShbCirBuff->m_ulNumOfWriteJobs) {
-				// if there is no other write process running then
-				// set new size of readable (complete written) data and
-				// adjust number of readable blocks
-				pShbCirBuff->m_ulDataReadable +=
-				    pShbCirBuff->m_ulDataApended;
-				pShbCirBuff->m_ulBlocksReadable +=
-				    pShbCirBuff->m_ulBlocksApended;
-
-				pShbCirBuff->m_ulDataApended = 0;
-				pShbCirBuff->m_ulBlocksApended = 0;
-
-				fSignalNewData = TRUE;
-				fSignalReset = pShbCirBuff->m_fBufferLocked;
-			}
-		}
-		ShbIpcLeaveAtomicSection(pShbInstance_p);
-	}
-
-	// signal new data event to a potentially reading application
-	if (fSignalNewData) {
-		ShbError2 = ShbIpcSignalNewData(pShbInstance_p);
-		if (ShbError == kShbOk) {
-			ShbError = ShbError2;
-		}
-	}
-	// signal that the last write job has been finished to allow
-	// a waiting application to reset the buffer now
-	if (fSignalReset) {
-		ShbError2 = ShbIpcSignalJobReady(pShbInstance_p);
-		if (ShbError == kShbOk) {
-			ShbError = ShbError2;
-		}
-	}
-
-	*pfBufferCompleted_p = fBufferCompleted;
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Read data block from Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirReadDataBlock(tShbInstance pShbInstance_p,
-			      void *pDstDataBlock_p,
-			      unsigned long ulRdBuffSize_p,
-			      unsigned long *pulDataBlockSize_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	tShbCirBlockSize ShbCirBlockSize;
-	unsigned long ulDataReadable;
-	unsigned char *pShbCirDataPtr;
-	unsigned char *pDstDataPtr;
-	unsigned long ulDataSize = 0;	// d.k. GCC complains about uninitialized variable otherwise
-	unsigned long ulChunkSize;
-	unsigned long ulRdIndex;
-	tShbError ShbError;
-
-	// check arguments
-	if ((pShbInstance_p == NULL) || (pulDataBlockSize_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-
-	if ((pDstDataBlock_p == NULL) || (ulRdBuffSize_p == 0)) {
-		// nothing to do here
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	ShbError = kShbOk;
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	pDstDataPtr = (unsigned char *)pDstDataBlock_p;
-	ulDataSize = 0;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// get total number of readable bytes for the whole circular buffer
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		ulDataReadable = pShbCirBuff->m_ulDataReadable;
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	// if there are readable data available, then there must be at least
-	// one complete readable data block
-	if (ulDataReadable > 0) {
-		// get pointer to start of data area and current read index
-		pShbCirDataPtr = &pShbCirBuff->m_Data;	// ptr to start of data area
-		ulRdIndex = pShbCirBuff->m_ulRdIndex;
-
-		// get real size of current block (incl. alignment fill bytes)
-		ShbCirBlockSize =
-		    *(tShbCirBlockSize *) (pShbCirDataPtr + ulRdIndex);
-		ulRdIndex += sizeof(tShbCirBlockSize);
-		ulRdIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-		// get size of user data inside the current block
-		ulDataSize =
-		    ShbCirBlockSize.m_uiFullBlockSize -
-		    ShbCirBlockSize.m_uiAlignFillBytes;
-		ulDataSize -= sizeof(tShbCirBlockSize);
-	}
-
-	// ulDataSize = MIN(ulDataSize, ulRdBuffSize_p);
-	if (ulDataSize > ulRdBuffSize_p) {
-		ulDataSize = ulRdBuffSize_p;
-		ShbError = kShbDataTruncated;
-	}
-
-	if (ulDataSize == 0) {
-		// nothing to do here
-		ShbError = kShbNoReadableData;
-		goto Exit;
-	}
-
-	// copy the data from the circular buffer
-	// (the copy process itself will be done outside of any
-	// critical/locked section)
-	if (ulRdIndex + ulDataSize <= pShbCirBuff->m_ulBufferDataSize) {
-		// linear read operation
-		memcpy(pDstDataPtr, pShbCirDataPtr + ulRdIndex, ulDataSize);
-	} else {
-		// wrap-around read operation
-		ulChunkSize = pShbCirBuff->m_ulBufferDataSize - ulRdIndex;
-		memcpy(pDstDataPtr, pShbCirDataPtr + ulRdIndex, ulChunkSize);
-		memcpy(pDstDataPtr + ulChunkSize, pShbCirDataPtr,
-		       ulDataSize - ulChunkSize);
-	}
-
-#ifndef NDEBUG
-	{
-		tShbCirBlockSize ClrShbCirBlockSize;
-
-		if (ulRdIndex + ulDataSize <= pShbCirBuff->m_ulBufferDataSize) {
-			// linear buffer
-			memset(pShbCirDataPtr + ulRdIndex, 0xDD, ulDataSize);
-		} else {
-			// wrap-around read operation
-			ulChunkSize =
-			    pShbCirBuff->m_ulBufferDataSize - ulRdIndex;
-			memset(pShbCirDataPtr + ulRdIndex, 0xDD, ulChunkSize);
-			memset(pShbCirDataPtr, 0xDD, ulDataSize - ulChunkSize);
-		}
-
-		ClrShbCirBlockSize.m_uiFullBlockSize = /*(unsigned int) */ -1;	// -1 = xFFFFFFF
-		ClrShbCirBlockSize.m_uiAlignFillBytes = /*(unsigned int) */ -1;	// -1 = Fxxxxxxx
-		*(tShbCirBlockSize *) (pShbCirDataPtr +
-				       pShbCirBuff->m_ulRdIndex) =
-		    ClrShbCirBlockSize;
-	}
-#endif // #ifndef NDEBUG
-
-	// set new size of readable data, data in use, new read index
-	// and adjust number of readable blocks
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		pShbCirBuff->m_ulDataInUse -= ShbCirBlockSize.m_uiFullBlockSize;
-		pShbCirBuff->m_ulDataReadable -=
-		    ShbCirBlockSize.m_uiFullBlockSize;
-		pShbCirBuff->m_ulBlocksReadable--;
-
-		//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
-		if ((pShbCirBuff->m_ulDataInUse == 0)
-		    && (pShbCirBuff->m_ulDataReadable == 0)) {
-			ASSERT(pShbCirBuff->m_ulBlocksReadable == 0);
-
-			pShbCirBuff->m_ulWrIndex = 0;
-			pShbCirBuff->m_ulRdIndex = 0;
-		} else
-			//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
-		{
-			pShbCirBuff->m_ulRdIndex +=
-			    ShbCirBlockSize.m_uiFullBlockSize;
-			pShbCirBuff->m_ulRdIndex %=
-			    pShbCirBuff->m_ulBufferDataSize;
-		}
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-      Exit:
-
-	*pulDataBlockSize_p = ulDataSize;
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Get data size of next readable block from Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirGetReadDataSize(tShbInstance pShbInstance_p,
-				unsigned long *pulDataBlockSize_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	unsigned long ulDataReadable;
-	unsigned char *pShbCirDataPtr;
-	tShbCirBlockSize ShbCirBlockSize;
-	unsigned long ulDataSize;
-	tShbError ShbError;
-
-	// check arguments
-	if ((pShbInstance_p == NULL) || (pulDataBlockSize_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ulDataSize = 0;
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// get total number of readable bytes for the whole circular buffer
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		ulDataReadable = pShbCirBuff->m_ulDataReadable;
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	// if there are readable data available, then there must be at least
-	// one complete readable data block
-	if (ulDataReadable > 0) {
-		pShbCirDataPtr =
-		    &pShbCirBuff->m_Data + pShbCirBuff->m_ulRdIndex;
-
-		// get real size of current block (incl. alignment fill bytes)
-		ShbCirBlockSize = *(tShbCirBlockSize *) pShbCirDataPtr;
-
-		// get size of user data inside the current block
-		ulDataSize =
-		    ShbCirBlockSize.m_uiFullBlockSize -
-		    ShbCirBlockSize.m_uiAlignFillBytes;
-		ulDataSize -= sizeof(tShbCirBlockSize);
-	}
-
-      Exit:
-
-	*pulDataBlockSize_p = ulDataSize;
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Get number of readable blocks from Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbCirGetReadBlockCount(tShbInstance pShbInstance_p,
-				  unsigned long *pulDataBlockCount_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	unsigned long ulBlockCount;
-	tShbError ShbError;
-
-	// check arguments
-	if ((pShbInstance_p == NULL) || (pulDataBlockCount_p == NULL)) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ulBlockCount = 0;
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		ulBlockCount = pShbCirBuff->m_ulBlocksReadable;
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	*pulDataBlockCount_p = ulBlockCount;
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Set application handler to signal new data for Circular Shared Buffer
-//  d.k.: new parameter priority as enum
-//---------------------------------------------------------------------------
-
-tShbError ShbCirSetSignalHandlerNewData(tShbInstance pShbInstance_p,
-					tShbCirSigHndlrNewData pfnSignalHandlerNewData_p,
-					tShbPriority ShbPriority_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	if (pfnSignalHandlerNewData_p != NULL) {
-		// set a new signal handler
-		if (pShbCirBuff->m_pfnSigHndlrNewData != NULL) {
-			ShbError = kShbAlreadySignaling;
-			goto Exit;
-		}
-
-		pShbCirBuff->m_pfnSigHndlrNewData = pfnSignalHandlerNewData_p;
-		ShbError =
-		    ShbIpcStartSignalingNewData(pShbInstance_p,
-						ShbCirSignalHandlerNewData,
-						ShbPriority_p);
-	} else {
-		// remove existing signal handler
-		ShbError = ShbIpcStopSignalingNewData(pShbInstance_p);
-		if (pShbCirBuff->m_pfnSigHndlrNewData != NULL) {
-			pShbCirBuff->m_pfnSigHndlrNewData(pShbInstance_p, 0);
-		}
-		pShbCirBuff->m_pfnSigHndlrNewData = NULL;
-	}
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  DEBUG: Trace Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-#ifndef NDEBUG
-tShbError ShbCirTraceBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	char szMagigID[sizeof(SBC_MAGIC_ID) + 1];
-	tShbCirBlockSize ShbCirBlockSize;
-	unsigned long ulDataReadable;
-	unsigned char *pShbCirDataPtr;
-	unsigned long ulBlockIndex;
-	unsigned int nBlockCount;
-	unsigned long ulDataSize;
-	unsigned long ulChunkSize;
-	unsigned long ulRdIndex;
-	tShbError ShbError;
-
-	TRACE0("\n\n##### Circular Shared Buffer #####\n");
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		TRACE1("\nERROR: invalid buffer address (0x%08lX)\n",
-		       (unsigned long)pShbInstance_p);
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	*(unsigned long *)&szMagigID[0] = pShbCirBuff->m_ShbCirMagicID;
-	szMagigID[sizeof(SBC_MAGIC_ID)] = '\0';
-
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		TRACE1("\nBuffer Address:   0x%08lX\n",
-		       (unsigned long)pShbCirBuff);
-
-		TRACE0("\nHeader Info:");
-		TRACE2("\nMagigID:          '%s' (%08lX)", szMagigID,
-		       pShbCirBuff->m_ShbCirMagicID);
-		TRACE1("\nBufferTotalSize:  %4lu [Bytes]",
-		       pShbCirBuff->m_ulBufferTotalSize);
-		TRACE1("\nBufferDataSize:   %4lu [Bytes]",
-		       pShbCirBuff->m_ulBufferDataSize);
-		TRACE1("\nWrIndex:          %4lu", pShbCirBuff->m_ulWrIndex);
-		TRACE1("\nRdIndex:          %4lu", pShbCirBuff->m_ulRdIndex);
-		TRACE1("\nNumOfWriteJobs:   %4lu",
-		       pShbCirBuff->m_ulNumOfWriteJobs);
-		TRACE1("\nDataInUse:        %4lu [Bytes]",
-		       pShbCirBuff->m_ulDataInUse);
-		TRACE1("\nDataApended:      %4lu [Bytes]",
-		       pShbCirBuff->m_ulDataApended);
-		TRACE1("\nBlocksApended:    %4lu",
-		       pShbCirBuff->m_ulBlocksApended);
-		TRACE1("\nDataReadable:     %4lu [Bytes]",
-		       pShbCirBuff->m_ulDataReadable);
-		TRACE1("\nBlocksReadable:   %4lu",
-		       pShbCirBuff->m_ulBlocksReadable);
-		TRACE1("\nSigHndlrNewData:  %08lX",
-		       (unsigned long)pShbCirBuff->m_pfnSigHndlrNewData);
-		TRACE1("\nBufferLocked:     %d", pShbCirBuff->m_fBufferLocked);
-		TRACE1("\nSigHndlrReset:    %08lX",
-		       (unsigned long)pShbCirBuff->m_pfnSigHndlrReset);
-
-		ShbTraceDump(&pShbCirBuff->m_Data,
-			     pShbCirBuff->m_ulBufferDataSize, 0x00000000L,
-			     "\nData Area:");
-
-		ulDataReadable = pShbCirBuff->m_ulDataReadable;
-		nBlockCount = 1;
-		ulBlockIndex = pShbCirBuff->m_ulRdIndex;
-
-		while (ulDataReadable > 0) {
-			TRACE1("\n\n--- Block #%u ---", nBlockCount);
-
-			// get pointer to start of data area and current read index
-			pShbCirDataPtr = &pShbCirBuff->m_Data;	// ptr to start of data area
-			ulRdIndex = ulBlockIndex;
-
-			// get real size of current block (incl. alignment fill bytes)
-			ShbCirBlockSize =
-			    *(tShbCirBlockSize *) (pShbCirDataPtr + ulRdIndex);
-			ulRdIndex += sizeof(tShbCirBlockSize);
-			ulRdIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-			// get size of user data inside the current block
-			ulDataSize =
-			    ShbCirBlockSize.m_uiFullBlockSize -
-			    ShbCirBlockSize.m_uiAlignFillBytes;
-			ulDataSize -= sizeof(tShbCirBlockSize);
-
-			TRACE1
-			    ("\nFull Data Size:       %4u [Bytes] (incl. header and alignment fill bytes)",
-			     ShbCirBlockSize.m_uiFullBlockSize);
-			TRACE1("\nUser Data Size:       %4lu [Bytes]",
-			       ulDataSize);
-			TRACE1("\nAlignment Fill Bytes: %4u [Bytes]",
-			       ShbCirBlockSize.m_uiAlignFillBytes);
-
-			if (ulRdIndex + ulDataSize <=
-			    pShbCirBuff->m_ulBufferDataSize) {
-				// linear data buffer
-				ShbTraceDump(pShbCirDataPtr + ulRdIndex,
-					     ulDataSize, 0x00000000L, NULL);
-			} else {
-				// wrap-around data buffer
-				ulChunkSize =
-				    pShbCirBuff->m_ulBufferDataSize - ulRdIndex;
-				ShbTraceDump(pShbCirDataPtr + ulRdIndex,
-					     ulChunkSize, 0x00000000L, NULL);
-				ShbTraceDump(pShbCirDataPtr,
-					     ulDataSize - ulChunkSize,
-					     ulChunkSize, NULL);
-			}
-
-			nBlockCount++;
-
-			ulBlockIndex += ShbCirBlockSize.m_uiFullBlockSize;
-			ulBlockIndex %= pShbCirBuff->m_ulBufferDataSize;
-
-			ulDataReadable -= ShbCirBlockSize.m_uiFullBlockSize;
-		}
-
-		ASSERT(pShbCirBuff->m_ulBlocksReadable == nBlockCount - 1);
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-#endif
-
-//-------------------------------------------------------------------------//
-//                                                                         //
-//          L i n e a r   S h a r e d   B u f f e r                        //
-//                                                                         //
-//-------------------------------------------------------------------------//
-
-//---------------------------------------------------------------------------
-//  Allocate Linear Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbLinAllocBuffer(unsigned long ulBufferSize_p,
-			    const char *pszBufferID_p,
-			    tShbInstance * ppShbInstance_p,
-			    unsigned int *pfShbNewCreated_p)
-{
-
-	tShbInstance pShbInstance;
-	tShbLinBuff *pShbLinBuff;
-	unsigned int fShbNewCreated;
-	unsigned long ulBufferDataSize;
-	unsigned long ulBufferTotalSize;
-	tShbError ShbError;
-
-	// check arguments
-	if ((ulBufferSize_p == 0) || (ppShbInstance_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-
-	// calculate length of memory to allocate
-	ulBufferDataSize =
-	    (ulBufferSize_p +
-	     (SBL_BLOCK_ALIGNMENT - 1)) & ~(SBL_BLOCK_ALIGNMENT - 1);
-	ulBufferTotalSize = ulBufferDataSize + sizeof(tShbLinBuff);
-
-	// allocate a new or open an existing shared buffer
-	ShbError = ShbIpcAllocBuffer(ulBufferTotalSize, pszBufferID_p,
-				     &pShbInstance, &fShbNewCreated);
-	if (ShbError != kShbOk) {
-		goto Exit;
-	}
-
-	if (pShbInstance == NULL) {
-		ShbError = kShbOutOfMem;
-		goto Exit;
-	}
-
-	// get pointer to shared buffer
-	pShbLinBuff = (tShbLinBuff *) ShbIpcGetShMemPtr(pShbInstance);
-
-	// if the shared buffer was new created, than this process has
-	// to initialize it, otherwise the buffer is already in use
-	// and *must not* be reseted
-	if (fShbNewCreated) {
-#ifndef NDEBUG
-		{
-			memset(pShbLinBuff, 0xCC, ulBufferTotalSize);
-		}
-#endif
-
-		pShbLinBuff->m_ShbLinMagicID = SBL_MAGIC_ID;
-		pShbLinBuff->m_ulBufferTotalSize = ulBufferTotalSize;
-		pShbLinBuff->m_ulBufferDataSize = ulBufferDataSize;
-	} else {
-		if (pShbLinBuff->m_ShbLinMagicID != SBL_MAGIC_ID) {
-			ShbError = kShbInvalidBufferType;
-			goto Exit;
-		}
-	}
-
-      Exit:
-
-	*ppShbInstance_p = pShbInstance;
-	*pfShbNewCreated_p = fShbNewCreated;
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Release Linear Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbLinReleaseBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	ShbError = ShbIpcReleaseBuffer(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Write data block to Linear Shared Buffer
-//---------------------------------------------------------------------------
-tShbError ShbLinWriteDataBlock(tShbInstance pShbInstance_p,
-			       unsigned long ulDstBufferOffs_p,
-			       const void *pSrcDataBlock_p,
-			       unsigned long ulDataBlockSize_p)
-{
-
-	tShbLinBuff *pShbLinBuff;
-	unsigned char *pShbLinDataPtr;
-	unsigned char *pScrDataPtr;
-	unsigned long ulBufferDataSize;
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if ((pSrcDataBlock_p == NULL) || (ulDataBlockSize_p == 0)) {
-		// nothing to do here
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	if (ulDataBlockSize_p > SBL_MAX_BLOCK_SIZE) {
-		ShbError = kShbExceedDataSizeLimit;
-		goto Exit;
-	}
-
-	pShbLinBuff = ShbLinGetBuffer(pShbInstance_p);
-	pScrDataPtr = (unsigned char *)pSrcDataBlock_p;
-	ShbError = kShbOk;
-
-	if (pShbLinBuff->m_ShbLinMagicID != SBL_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// check if offeset and size for the write operation matches with
-	// the size of the shared buffer
-	ulBufferDataSize = pShbLinBuff->m_ulBufferDataSize;
-	if ((ulDstBufferOffs_p > ulBufferDataSize) ||
-	    (ulDataBlockSize_p > ulBufferDataSize) ||
-	    ((ulDstBufferOffs_p + ulDataBlockSize_p) > ulBufferDataSize)) {
-		ShbError = kShbDataOutsideBufferArea;
-		goto Exit;
-	}
-
-	// copy the data to the linear buffer
-	// (the copy process will be done inside of any critical/locked section)
-	pShbLinDataPtr = &pShbLinBuff->m_Data;	// ptr to start of data area
-	pShbLinDataPtr += ulDstBufferOffs_p;
-
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		memcpy(pShbLinDataPtr, pScrDataPtr, ulDataBlockSize_p);
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Read data block from Linear Shared Buffer
-//---------------------------------------------------------------------------
-tShbError ShbLinReadDataBlock(tShbInstance pShbInstance_p,
-			      void *pDstDataBlock_p,
-			      unsigned long ulSrcBufferOffs_p,
-			      unsigned long ulDataBlockSize_p)
-{
-
-	tShbLinBuff *pShbLinBuff;
-	unsigned char *pShbLinDataPtr;
-	unsigned char *pDstDataPtr;
-	unsigned long ulBufferDataSize;
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	if ((pDstDataBlock_p == NULL) || (ulDataBlockSize_p == 0)) {
-		// nothing to do here
-		ShbError = kShbOk;
-		goto Exit;
-	}
-
-	if (ulDataBlockSize_p > SBL_MAX_BLOCK_SIZE) {
-		ShbError = kShbExceedDataSizeLimit;
-		goto Exit;
-	}
-
-	pShbLinBuff = ShbLinGetBuffer(pShbInstance_p);
-	pDstDataPtr = (unsigned char *)pDstDataBlock_p;
-	ShbError = kShbOk;
-
-	if (pShbLinBuff->m_ShbLinMagicID != SBL_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	// check if offeset and size for the read operation matches with
-	// the size of the shared buffer
-	ulBufferDataSize = pShbLinBuff->m_ulBufferDataSize;
-	if ((ulSrcBufferOffs_p > ulBufferDataSize) ||
-	    (ulDataBlockSize_p > ulBufferDataSize) ||
-	    ((ulSrcBufferOffs_p + ulDataBlockSize_p) > ulBufferDataSize)) {
-		ShbError = kShbDataOutsideBufferArea;
-		goto Exit;
-	}
-
-	// copy the data to the linear buffer
-	// (the copy process will be done inside of any critical/locked section)
-	pShbLinDataPtr = &pShbLinBuff->m_Data;	// ptr to start of data area
-	pShbLinDataPtr += ulSrcBufferOffs_p;
-
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		memcpy(pDstDataPtr, pShbLinDataPtr, ulDataBlockSize_p);
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  DEBUG: Trace Linear Shared Buffer
-//---------------------------------------------------------------------------
-
-#ifndef NDEBUG
-tShbError ShbLinTraceBuffer(tShbInstance pShbInstance_p)
-{
-
-	tShbLinBuff *pShbLinBuff;
-	char szMagigID[sizeof(SBL_MAGIC_ID) + 1];
-	tShbError ShbError;
-
-	TRACE0("\n\n##### Linear Shared Buffer #####\n");
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		TRACE1("\nERROR: invalid buffer address (0x%08lX)\n",
-		       (unsigned long)pShbInstance_p);
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-
-	pShbLinBuff = ShbLinGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbLinBuff->m_ShbLinMagicID != SBL_MAGIC_ID) {
-		ShbError = kShbInvalidBufferType;
-		goto Exit;
-	}
-
-	*(unsigned int *)&szMagigID[0] = pShbLinBuff->m_ShbLinMagicID;
-	szMagigID[sizeof(SBL_MAGIC_ID)] = '\0';
-
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		TRACE1("\nBuffer Address:   0x%08lX\n",
-		       (unsigned long)pShbLinBuff);
-
-		TRACE0("\nHeader Info:");
-		TRACE2("\nMagigID:          '%s' (%08X)", szMagigID,
-		       pShbLinBuff->m_ShbLinMagicID);
-		TRACE1("\nBufferTotalSize:  %4lu [Bytes]",
-		       pShbLinBuff->m_ulBufferTotalSize);
-		TRACE1("\nBufferDataSize:   %4lu [Bytes]",
-		       pShbLinBuff->m_ulBufferDataSize);
-
-		ShbTraceDump(&pShbLinBuff->m_Data,
-			     pShbLinBuff->m_ulBufferDataSize, 0x00000000L,
-			     "\nData Area:");
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-      Exit:
-
-	return (ShbError);
-
-}
-#endif
-
-//---------------------------------------------------------------------------
-//  Dump buffer contents
-//---------------------------------------------------------------------------
-
-#ifndef NDEBUG
-tShbError ShbTraceDump(const unsigned char *pabStartAddr_p,
-		       unsigned long ulDataSize_p,
-		       unsigned long ulAddrOffset_p, const char *pszInfoText_p)
-{
-
-	const unsigned char *pabBuffData;
-	unsigned long ulBuffSize;
-	unsigned char bData;
-	int nRow;
-	int nCol;
-
-	// get pointer to buffer and length of buffer
-	pabBuffData = pabStartAddr_p;
-	ulBuffSize = ulDataSize_p;
-
-	if (pszInfoText_p != NULL) {
-		TRACE1("%s", pszInfoText_p);
-	}
-	// dump buffer contents
-	for (nRow = 0;; nRow++) {
-		TRACE1("\n%08lX:   ",
-		       (unsigned long)(nRow * 0x10) + ulAddrOffset_p);
-
-		for (nCol = 0; nCol < 16; nCol++) {
-			if ((unsigned long)nCol < ulBuffSize) {
-				TRACE1("%02X ",
-				       (unsigned int)*(pabBuffData + nCol));
-			} else {
-				TRACE0("   ");
-			}
-		}
-
-		TRACE0(" ");
-
-		for (nCol = 0; nCol < 16; nCol++) {
-			bData = *pabBuffData++;
-			if ((unsigned long)nCol < ulBuffSize) {
-				if ((bData >= 0x20) && (bData < 0x7F)) {
-					TRACE1("%c", bData);
-				} else {
-					TRACE0(".");
-				}
-			} else {
-				TRACE0(" ");
-			}
-		}
-
-		if (ulBuffSize > 16) {
-			ulBuffSize -= 16;
-		} else {
-			break;
-		}
-	}
-
-	return (kShbOk);
-
-}
-#endif // #ifndef NDEBUG
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//  Handler to signal new data event for Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-int ShbCirSignalHandlerNewData(tShbInstance pShbInstance_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-	unsigned long ulDataSize;
-	unsigned long ulBlockCount;
-	tShbError ShbError;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		return FALSE;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	ShbError = kShbOk;
-
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		return FALSE;
-	}
-
-	// call application handler
-	if (pShbCirBuff->m_pfnSigHndlrNewData != NULL) {
-/*        do
-        {*/
-		ShbError = ShbCirGetReadDataSize(pShbInstance_p, &ulDataSize);
-		if ((ulDataSize > 0) && (ShbError == kShbOk)) {
-			pShbCirBuff->m_pfnSigHndlrNewData(pShbInstance_p,
-							  ulDataSize);
-		}
-
-		ShbError =
-		    ShbCirGetReadBlockCount(pShbInstance_p, &ulBlockCount);
-/*        }
-        while ((ulBlockCount > 0) && (ShbError == kShbOk));*/
-	}
-	// Return TRUE if there are pending blocks.
-	// In that case ShbIpc tries to call this function again immediately if there
-	// is no other filled shared buffer with higher priority.
-	return ((ulBlockCount > 0) && (ShbError == kShbOk));
-
-}
-
-//---------------------------------------------------------------------------
-//  Handler to reset Circular Shared Buffer
-//---------------------------------------------------------------------------
-
-void ShbCirSignalHandlerReset(tShbInstance pShbInstance_p,
-			      unsigned int fTimeOut_p)
-{
-
-	tShbCirBuff *pShbCirBuff;
-
-	// check arguments
-	if (pShbInstance_p == NULL) {
-		return;
-	}
-
-	pShbCirBuff = ShbCirGetBuffer(pShbInstance_p);
-	if (pShbCirBuff->m_ShbCirMagicID != SBC_MAGIC_ID) {
-		return;
-	}
-
-	// reset buffer header
-	if (!fTimeOut_p) {
-		ShbIpcEnterAtomicSection(pShbInstance_p);
-		{
-			pShbCirBuff->m_ulWrIndex = 0;
-			pShbCirBuff->m_ulRdIndex = 0;
-			pShbCirBuff->m_ulNumOfWriteJobs = 0;
-			pShbCirBuff->m_ulDataInUse = 0;
-			pShbCirBuff->m_ulDataApended = 0;
-			pShbCirBuff->m_ulBlocksApended = 0;
-			pShbCirBuff->m_ulDataReadable = 0;
-			pShbCirBuff->m_ulBlocksReadable = 0;
-		}
-		ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-#ifndef NDEBUG
-		{
-			memset(&pShbCirBuff->m_Data, 0xCC,
-			       pShbCirBuff->m_ulBufferDataSize);
-		}
-#endif
-	}
-
-	// call application handler
-	if (pShbCirBuff->m_pfnSigHndlrReset != NULL) {
-		pShbCirBuff->m_pfnSigHndlrReset(pShbInstance_p, fTimeOut_p);
-	}
-
-	// unlock buffer
-	ShbIpcEnterAtomicSection(pShbInstance_p);
-	{
-		pShbCirBuff->m_fBufferLocked = FALSE;
-		pShbCirBuff->m_pfnSigHndlrReset = NULL;
-	}
-	ShbIpcLeaveAtomicSection(pShbInstance_p);
-
-	return;
-
-}
-
-// EOF
diff --git a/drivers/staging/epl/SharedBuff.h b/drivers/staging/epl/SharedBuff.h
deleted file mode 100644
index 4edbd0b..0000000
--- a/drivers/staging/epl/SharedBuff.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      Project independend shared buffer (linear + circular)
-
-  Description:  Declaration of platform independend part for the
-                shared buffer
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-  2006/06/27 -rs:   V 1.00 (initial version)
-
-****************************************************************************/
-
-#ifndef _SHAREDBUFF_H_
-#define _SHAREDBUFF_H_
-
-//---------------------------------------------------------------------------
-//  Type definitions
-//---------------------------------------------------------------------------
-
-typedef enum {
-	kShbOk = 0,
-	kShbNoReadableData = 1,
-	kShbDataTruncated = 2,
-	kShbBufferFull = 3,
-	kShbDataOutsideBufferArea = 4,
-	kShbBufferAlreadyCompleted = 5,
-	kShbMemUsedByOtherProcs = 6,
-	kShbOpenMismatch = 7,
-	kShbInvalidBufferType = 8,
-	kShbInvalidArg = 9,
-	kShbBufferInvalid = 10,
-	kShbOutOfMem = 11,
-	kShbAlreadyReseting = 12,
-	kShbAlreadySignaling = 13,
-	kShbExceedDataSizeLimit = 14,
-
-} tShbError;
-
-// 2006/08/24 d.k.: Priority for threads (new data, job signaling)
-typedef enum {
-	kShbPriorityLow = 0,
-	kShbPriorityNormal = 1,
-	kshbPriorityHigh = 2
-} tShbPriority;
-
-typedef struct {
-	unsigned int m_uiFullBlockSize;	// real size of allocated block (incl. alignment fill bytes)
-	unsigned long m_ulAvailableSize;	// still available size for data
-	unsigned long m_ulWrIndex;	// current write index
-	unsigned int m_fBufferCompleted;	// TRUE if allocated block is complete filled with data
-
-} tShbCirChunk;
-
-typedef void *tShbInstance;
-
-typedef void (*tShbCirSigHndlrNewData) (tShbInstance pShbInstance_p,
-					unsigned long ulDataBlockSize_p);
-typedef void (*tShbCirSigHndlrReset) (tShbInstance pShbInstance_p,
-				      unsigned int fTimeOut_p);
-
-//---------------------------------------------------------------------------
-//  Prototypes
-//---------------------------------------------------------------------------
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-	tShbError ShbInit(void);
-	tShbError ShbExit(void);
-
-// Circular Shared Buffer
-	tShbError ShbCirAllocBuffer(unsigned long ulBufferSize_p,
-				    const char *pszBufferID_p,
-				    tShbInstance * ppShbInstance_p,
-				    unsigned int *pfShbNewCreated_p);
-	tShbError ShbCirReleaseBuffer(tShbInstance pShbInstance_p);
-
-
-	tShbError ShbCirResetBuffer(tShbInstance pShbInstance_p,
-				    unsigned long ulTimeOut_p,
-				    tShbCirSigHndlrReset
-				    pfnSignalHandlerReset_p);
-	tShbError ShbCirWriteDataBlock(tShbInstance pShbInstance_p,
-				       const void *pSrcDataBlock_p,
-				       unsigned long ulDataBlockSize_p);
-	tShbError ShbCirAllocDataBlock(tShbInstance pShbInstance_p,
-				       tShbCirChunk * pShbCirChunk_p,
-				       unsigned long ulDataBufferSize_p);
-	tShbError ShbCirWriteDataChunk(tShbInstance pShbInstance_p,
-				       tShbCirChunk * pShbCirChunk_p,
-				       const void *pSrcDataChunk_p,
-				       unsigned long ulDataChunkSize_p,
-				       unsigned int *pfBufferCompleted_p);
-	tShbError ShbCirReadDataBlock(tShbInstance pShbInstance_p,
-				      void *pDstDataBlock_p,
-				      unsigned long ulRdBuffSize_p,
-				      unsigned long *pulDataBlockSize_p);
-	tShbError ShbCirGetReadDataSize(tShbInstance pShbInstance_p,
-					unsigned long *pulDataBlockSize_p);
-	tShbError ShbCirGetReadBlockCount(tShbInstance pShbInstance_p,
-					  unsigned long *pulDataBlockCount_p);
-	tShbError ShbCirSetSignalHandlerNewData(tShbInstance pShbInstance_p,
-						tShbCirSigHndlrNewData
-						pfnShbSignalHandlerNewData_p,
-						tShbPriority ShbPriority_p);
-
-
-// Linear Shared Buffer
-	tShbError ShbLinAllocBuffer(unsigned long ulBufferSize_p,
-				    const char *pszBufferID_p,
-				    tShbInstance * ppShbInstance_p,
-				    unsigned int *pfShbNewCreated_p);
-	tShbError ShbLinReleaseBuffer(tShbInstance pShbInstance_p);
-
-
-	tShbError ShbLinWriteDataBlock(tShbInstance pShbInstance_p,
-				       unsigned long ulDstBufferOffs_p,
-				       const void *pSrcDataBlock_p,
-				       unsigned long ulDataBlockSize_p);
-	tShbError ShbLinReadDataBlock(tShbInstance pShbInstance_p,
-				      void *pDstDataBlock_p,
-				      unsigned long ulSrcBufferOffs_p,
-				      unsigned long ulDataBlockSize_p);
-
-
-#ifndef NDEBUG
-	tShbError ShbCirTraceBuffer(tShbInstance pShbInstance_p);
-	tShbError ShbLinTraceBuffer(tShbInstance pShbInstance_p);
-	tShbError ShbTraceDump(const unsigned char *pabStartAddr_p,
-			       unsigned long ulDataSize_p,
-			       unsigned long ulAddrOffset_p,
-			       const char *pszInfoText_p);
-#else
-#define ShbCirTraceBuffer(p0)
-#define ShbLinTraceBuffer(p0)
-#define ShbTraceDump(p0, p1, p2, p3)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif				// #ifndef _SHAREDBUFF_H_
diff --git a/drivers/staging/epl/ShbIpc-LinuxKernel.c b/drivers/staging/epl/ShbIpc-LinuxKernel.c
deleted file mode 100644
index 12d1ecc..0000000
--- a/drivers/staging/epl/ShbIpc-LinuxKernel.c
+++ /dev/null
@@ -1,944 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      Project independend shared buffer (linear + circular)
-
-  Description:  Implementation of platform specific part for the
-                shared buffer
-                (Implementation for Linux KernelSpace)
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-  2006/06/28 -rs:   V 1.00 (initial version)
-
-****************************************************************************/
-
-#include "global.h"
-#include "SharedBuff.h"
-#include "ShbIpc.h"
-#include "ShbLinuxKernel.h"
-#include "Debug.h"
-
-#include <linux/string.h>
-#include <linux/module.h>
-#include <asm/processor.h>
-//#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/param.h>
-#include <linux/spinlock.h>
-#include <linux/wait.h>
-#include <linux/completion.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-//  Configuration
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Constant definitions
-//---------------------------------------------------------------------------
-
-#define MAX_LEN_BUFFER_ID       256
-
-#define TIMEOUT_ENTER_ATOMIC    1000	// (ms) for debgging: INFINITE
-#define TIMEOUT_TERM_THREAD     1000
-#define INFINITE                3600
-
-#define SBI_MAGIC_ID            0x5342492B	// magic ID ("SBI+")
-#define SBH_MAGIC_ID            0x5342482A	// magic ID ("SBH*")
-
-#define INVALID_ID              -1
-
-#define TABLE_SIZE              10
-
-//---------------------------------------------------------------------------
-//  Local types
-//---------------------------------------------------------------------------
-
-// This structure is the common header for the shared memory region used
-// by all processes attached this shared memory. It includes common
-// information to administrate/manage the shared buffer from a couple of
-// separated processes (e.g. the refernce counter). This structure is
-// located at the start of the shared memory region itself and exists
-// consequently only one times per shared memory instance.
-typedef struct {
-
-	unsigned long m_ulShMemSize;
-	unsigned long m_ulRefCount;
-	int m_iBufferId;
-//    int                 m_iUserSpaceMem;           //0 for userspace mem   !=0 kernelspace mem
-	spinlock_t m_SpinlockBuffAccess;
-	BOOL m_fNewData;
-	BOOL m_fJobReady;
-	wait_queue_head_t m_WaitQueueNewData;
-	wait_queue_head_t m_WaitQueueJobReady;
-
-#ifndef NDEBUG
-	unsigned long m_ulOwnerProcID;
-#endif
-
-} tShbMemHeader;
-
-// This structure is the "external entry point" from a separate process
-// to get access to a shared buffer. This structure includes all platform
-// resp. target specific information to administrate/manage the shared
-// buffer from a separate process. Every process attached to the shared
-// buffer has its own runtime instance of this structure with its individual
-// runtime data (e.g. the scope of an event handle is limitted to the
-// owner process only). The structure member <m_pShbMemHeader> points
-// to the (process specific) start address of the shared memory region
-// itself.
-typedef struct {
-	unsigned long m_SbiMagicID;	// magic ID ("SBI+")
-//    void*               m_pSharedMem;
-	int m_tThreadNewDataId;
-	long m_lThreadNewDataNice;	// nice value of the new data thread
-	int m_tThreadJobReadyId;
-	unsigned long m_ulFlagsBuffAccess;	// d.k. moved from tShbMemHeader, because each
-	// process needs to store the interrupt flags separately
-	tSigHndlrNewData m_pfnSigHndlrNewData;
-	unsigned long m_ulTimeOutJobReady;
-	tSigHndlrJobReady m_pfnSigHndlrJobReady;
-	tShbMemHeader *m_pShbMemHeader;
-	int m_iThreadTermFlag;
-	struct completion m_CompletionNewData;
-/*
-    struct semaphore    *m_pSemBuffAccess;
-    struct semaphore    *m_pSemNewData;
-    struct semaphore    *m_pSemStopSignalingNewData;
-    struct semaphore    *m_pSemJobReady;
-*/
-#ifndef NDEBUG
-	unsigned long m_ulThreadIDNewData;
-	unsigned long m_ulThreadIDJobReady;
-#endif
-} tShbMemInst;
-
-//---------------------------------------------------------------------------
-//  Prototypes of internal functions
-//---------------------------------------------------------------------------
-
-//tShbMemInst*            ShbIpcGetShbMemInst         (tShbInstance pShbInstance_p);
-//tShbMemHeader*          ShbIpcGetShbMemHeader       (tShbMemInst* pShbMemInst_p);
-
-//---------------------------------------------------------------------------
-//  Get pointer to process local information structure
-//---------------------------------------------------------------------------
-
-static inline tShbMemInst *ShbIpcGetShbMemInst(tShbInstance pShbInstance_p)
-{
-
-	tShbMemInst *pShbMemInst;
-
-	pShbMemInst = (tShbMemInst *) pShbInstance_p;
-
-	return (pShbMemInst);
-
-}
-
-//---------------------------------------------------------------------------
-//  Get pointer to shared memory header
-//---------------------------------------------------------------------------
-
-static inline tShbMemHeader *ShbIpcGetShbMemHeader(tShbMemInst * pShbMemInst_p)
-{
-
-	tShbMemHeader *pShbMemHeader;
-
-	pShbMemHeader = pShbMemInst_p->m_pShbMemHeader;
-
-	return (pShbMemHeader);
-
-}
-
-//  Get pointer to process local information structure
-//#define ShbIpcGetShbMemInst(pShbInstance_p) ((tShbMemInst*)pShbInstance_p)
-
-//  Get pointer to shared memory header
-//#define ShbIpcGetShbMemHeader(pShbMemInst_p) (pShbMemInst_p->m_pShbMemHeader)
-
-// not inlined internal functions
-int ShbIpcThreadSignalNewData(void *pvThreadParam_p);
-int ShbIpcThreadSignalJobReady(void *pvThreadParam_p);
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-struct sShbMemTable *psMemTableElementFirst_g;
-
-static void *ShbIpcAllocPrivateMem(unsigned long ulMemSize_p);
-static int ShbIpcFindListElement(int iBufferId,
-				 struct sShbMemTable
-				 **ppsReturnMemTableElement);
-static void ShbIpcAppendListElement(struct sShbMemTable *sNewMemTableElement);
-static void ShbIpcDeleteListElement(int iBufferId);
-static void ShbIpcCrc32GenTable(unsigned long aulCrcTable[256]);
-static unsigned long ShbIpcCrc32GetCrc(const char *pcString,
-				       unsigned long aulCrcTable[256]);
-
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-// not inlined external functions
-
-//---------------------------------------------------------------------------
-//  Initialize IPC for Shared Buffer Module
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcInit(void)
-{
-	psMemTableElementFirst_g = NULL;
-	return (kShbOk);
-
-}
-
-//---------------------------------------------------------------------------
-//  Deinitialize IPC for Shared Buffer Module
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcExit(void)
-{
-
-	return (kShbOk);
-
-}
-
-//---------------------------------------------------------------------------
-//  Allocate Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcAllocBuffer(unsigned long ulBufferSize_p,
-			    const char *pszBufferID_p,
-			    tShbInstance * ppShbInstance_p,
-			    unsigned int *pfShbNewCreated_p)
-{
-	tShbError ShbError;
-	int iBufferId = 0;
-	unsigned long ulCrc32 = 0;
-	unsigned int uiFirstProcess = 0;
-	unsigned long ulShMemSize;
-	tShbMemHeader *pShbMemHeader;
-	tShbMemInst *pShbMemInst = NULL;
-	tShbInstance pShbInstance;
-	unsigned int fShMemNewCreated = FALSE;
-	void *pSharedMem = NULL;
-	unsigned long aulCrcTable[256];
-	struct sShbMemTable *psMemTableElement;
-
-	DEBUG_LVL_29_TRACE0("ShbIpcAllocBuffer \n");
-	ulShMemSize = ulBufferSize_p + sizeof(tShbMemHeader);
-
-	//create Buffer ID
-	ShbIpcCrc32GenTable(aulCrcTable);
-	ulCrc32 = ShbIpcCrc32GetCrc(pszBufferID_p, aulCrcTable);
-	iBufferId = ulCrc32;
-	DEBUG_LVL_29_TRACE2
-	    ("ShbIpcAllocBuffer BufferSize:%d sizeof(tShb..):%d\n",
-	     ulBufferSize_p, sizeof(tShbMemHeader));
-	DEBUG_LVL_29_TRACE2("ShbIpcAllocBuffer BufferId:%d MemSize:%d\n",
-			    iBufferId, ulShMemSize);
-	//---------------------------------------------------------------
-	// (1) open an existing or create a new shared memory
-	//---------------------------------------------------------------
-	//test if buffer already exists
-	if (ShbIpcFindListElement(iBufferId, &psMemTableElement) == 0) {
-		//Buffer already exists
-		fShMemNewCreated = FALSE;
-		pSharedMem = psMemTableElement->m_pBuffer;
-		DEBUG_LVL_29_TRACE1
-		    ("ShbIpcAllocBuffer attach Buffer at:%p Id:%d\n",
-		     pSharedMem);
-		uiFirstProcess = 1;
-	} else {
-		//create new Buffer
-		fShMemNewCreated = TRUE;
-		uiFirstProcess = 0;
-		pSharedMem = kmalloc(ulShMemSize, GFP_KERNEL);
-		DEBUG_LVL_29_TRACE2
-		    ("ShbIpcAllocBuffer Create New Buffer at:%p Id:%d\n",
-		     pSharedMem, iBufferId);
-		if (pSharedMem == NULL) {
-			//unable to create mem
-			ShbError = kShbOutOfMem;
-			goto Exit;
-		}
-		DEBUG_LVL_29_TRACE0("ShbIpcAllocBuffer create semas\n");
-		// append Element to Mem Table
-		psMemTableElement =
-		    kmalloc(sizeof(struct sShbMemTable), GFP_KERNEL);
-		psMemTableElement->m_iBufferId = iBufferId;
-		psMemTableElement->m_pBuffer = pSharedMem;
-		psMemTableElement->m_psNextMemTableElement = NULL;
-		ShbIpcAppendListElement(psMemTableElement);
-	}
-
-	DEBUG_LVL_29_TRACE0("ShbIpcAllocBuffer update header\n");
-	//update header
-	pShbMemHeader = (tShbMemHeader *) pSharedMem;
-	DEBUG_LVL_29_TRACE1
-	    ("ShbIpcAllocBuffer 0 pShbMemHeader->m_ulShMemSize: %d\n",
-	     pShbMemHeader->m_ulShMemSize);
-	// allocate a memory block from process specific mempool to save
-	// process local information to administrate/manage the shared buffer
-	DEBUG_LVL_29_TRACE0("ShbIpcAllocBuffer alloc private mem\n");
-	pShbMemInst =
-	    (tShbMemInst *) ShbIpcAllocPrivateMem(sizeof(tShbMemInst));
-	if (pShbMemInst == NULL) {
-		ShbError = kShbOutOfMem;
-		goto Exit;
-	}
-	// reset complete header to default values
-	//pShbMemInst->m_SbiMagicID                             = SBI_MAGIC_ID;
-//    pShbMemInst->m_pSharedMem                               = pSharedMem;
-	pShbMemInst->m_tThreadNewDataId = INVALID_ID;
-	pShbMemInst->m_tThreadJobReadyId = INVALID_ID;
-	pShbMemInst->m_pfnSigHndlrNewData = NULL;
-	pShbMemInst->m_ulTimeOutJobReady = 0;
-	pShbMemInst->m_pfnSigHndlrJobReady = NULL;
-	pShbMemInst->m_pShbMemHeader = pShbMemHeader;
-	pShbMemInst->m_iThreadTermFlag = 0;
-
-	// initialize completion etc.
-	init_completion(&pShbMemInst->m_CompletionNewData);
-
-	ShbError = kShbOk;
-	if (fShMemNewCreated) {
-		// this process was the first who wanted to use the shared memory,
-		// so a new shared memory was created
-		// -> setup new header information inside the shared memory region
-		//    itself
-		pShbMemHeader->m_ulShMemSize = ulShMemSize;
-		pShbMemHeader->m_ulRefCount = 1;
-		pShbMemHeader->m_iBufferId = iBufferId;
-		// initialize spinlock
-		spin_lock_init(&pShbMemHeader->m_SpinlockBuffAccess);
-		// initialize wait queues
-		init_waitqueue_head(&pShbMemHeader->m_WaitQueueNewData);
-		init_waitqueue_head(&pShbMemHeader->m_WaitQueueJobReady);
-	} else {
-		// any other process has created the shared memory and this
-		// process only has to attach to it
-		// -> check and update existing header information inside the
-		//    shared memory region itself
-		if (pShbMemHeader->m_ulShMemSize != ulShMemSize) {
-			ShbError = kShbOpenMismatch;
-			goto Exit;
-		}
-		pShbMemHeader->m_ulRefCount++;
-	}
-
-      Exit:
-	pShbInstance = (tShbInstance *) pShbMemInst;
-	*pfShbNewCreated_p = fShMemNewCreated;
-	*ppShbInstance_p = pShbInstance;
-	return (ShbError);
-
-}
-
-//---------------------------------------------------------------------------
-//  Release Shared Buffer
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcReleaseBuffer(tShbInstance pShbInstance_p)
-{
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError;
-	tShbError ShbError2;
-
-	DEBUG_LVL_26_TRACE1("ShbIpcReleaseBuffer(%p)\n", pShbInstance_p);
-	if (pShbInstance_p == NULL) {
-		return (kShbOk);
-	}
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	// stop threads in any case, because they are bound to that specific instance
-	ShbError2 = ShbIpcStopSignalingNewData(pShbInstance_p);
-	// d.k.: Whats up with JobReady thread?
-	//       Just wake it up, but without setting the semaphore variable
-	wake_up_interruptible(&pShbMemHeader->m_WaitQueueJobReady);
-
-	if (!--pShbMemHeader->m_ulRefCount) {
-		ShbError = kShbOk;
-		// delete mem table element
-		ShbIpcDeleteListElement(pShbMemHeader->m_iBufferId);
-		// delete shared mem
-		kfree(pShbMemInst->m_pShbMemHeader);
-	} else {
-		ShbError = kShbMemUsedByOtherProcs;
-	}
-	//delete privat mem
-	kfree(pShbMemInst);
-	return (ShbError);
-}
-
-//---------------------------------------------------------------------------
-//  Enter atomic section for Shared Buffer access
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcEnterAtomicSection(tShbInstance pShbInstance_p)
-{
-
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError = kShbOk;
-
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-	DEBUG_LVL_29_TRACE0("enter atomic\n");
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	// lock interrupts
-	spin_lock_irqsave(&pShbMemHeader->m_SpinlockBuffAccess,
-			  pShbMemInst->m_ulFlagsBuffAccess);
-
-      Exit:
-	return ShbError;
-
-}
-
-//---------------------------------------------------------------------------
-//  Leave atomic section for Shared Buffer access
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcLeaveAtomicSection(tShbInstance pShbInstance_p)
-{
-
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError = kShbOk;
-
-	if (pShbInstance_p == NULL) {
-		ShbError = kShbInvalidArg;
-		goto Exit;
-	}
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-	// unlock interrupts
-	spin_unlock_irqrestore(&pShbMemHeader->m_SpinlockBuffAccess,
-			       pShbMemInst->m_ulFlagsBuffAccess);
-
-      Exit:
-	DEBUG_LVL_29_TRACE0("Leave Atomic \n");
-	return ShbError;
-
-}
-
-//---------------------------------------------------------------------------
-//  Start signaling of new data (called from reading process)
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcStartSignalingNewData(tShbInstance pShbInstance_p,
-				      tSigHndlrNewData pfnSignalHandlerNewData_p,
-				      tShbPriority ShbPriority_p)
-{
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError;
-
-	DEBUG_LVL_29_TRACE0("------->ShbIpcStartSignalingNewData\n");
-	if ((pShbInstance_p == NULL) || (pfnSignalHandlerNewData_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-	ShbError = kShbOk;
-
-	if ((pShbMemInst->m_tThreadNewDataId != INVALID_ID)
-	    || (pShbMemInst->m_pfnSigHndlrNewData != NULL)) {
-		ShbError = kShbAlreadySignaling;
-		goto Exit;
-	}
-	DEBUG_LVL_26_TRACE2
-	    ("ShbIpcStartSignalingNewData(%p) m_pfnSigHndlrNewData = %p\n",
-	     pShbInstance_p, pfnSignalHandlerNewData_p);
-	pShbMemInst->m_pfnSigHndlrNewData = pfnSignalHandlerNewData_p;
-	pShbMemHeader->m_fNewData = FALSE;
-	pShbMemInst->m_iThreadTermFlag = 0;
-
-	switch (ShbPriority_p) {
-	case kShbPriorityLow:
-		pShbMemInst->m_lThreadNewDataNice = -2;
-		break;
-
-	case kShbPriorityNormal:
-		pShbMemInst->m_lThreadNewDataNice = -9;
-		break;
-
-	case kshbPriorityHigh:
-		pShbMemInst->m_lThreadNewDataNice = -20;
-		break;
-
-	}
-
-	//create thread for signalling new data
-	pShbMemInst->m_tThreadNewDataId =
-		kernel_thread(ShbIpcThreadSignalNewData, pShbInstance_p,
-				CLONE_FS | CLONE_FILES);
-
-      Exit:
-	return ShbError;
-
-}
-
-//---------------------------------------------------------------------------
-//  Stop signaling of new data (called from reading process)
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcStopSignalingNewData(tShbInstance pShbInstance_p)
-{
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError;
-
-	DEBUG_LVL_29_TRACE0("------->ShbIpcStopSignalingNewData\n");
-	if (pShbInstance_p == NULL) {
-		return (kShbInvalidArg);
-	}
-	ShbError = kShbOk;
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	DEBUG_LVL_26_TRACE2
-	    ("ShbIpcStopSignalingNewData(%p) pfnSignHndlrNewData=%p\n",
-	     pShbInstance_p, pShbMemInst->m_pfnSigHndlrNewData);
-	if (pShbMemInst->m_pfnSigHndlrNewData != NULL) {	// signal handler was set before
-		int iErr;
-		//set termination flag in mem header
-		pShbMemInst->m_iThreadTermFlag = 1;
-
-		// check if thread is still running at all by sending the null-signal to this thread
-		/* iErr = kill_proc(pShbMemInst->m_tThreadNewDataId, 0, 1); */
-		iErr = send_sig(0, pShbMemInst->m_tThreadNewDataId, 1);
-		if (iErr == 0) {
-			// wake up thread, because it is still running
-			wake_up_interruptible(&pShbMemHeader->
-					      m_WaitQueueNewData);
-
-			//wait for termination of thread
-			wait_for_completion(&pShbMemInst->m_CompletionNewData);
-		}
-
-		pShbMemInst->m_pfnSigHndlrNewData = NULL;
-		pShbMemInst->m_tThreadNewDataId = INVALID_ID;
-	}
-
-	return ShbError;
-
-}
-
-//---------------------------------------------------------------------------
-//  Signal new data (called from writing process)
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcSignalNewData(tShbInstance pShbInstance_p)
-{
-	tShbMemHeader *pShbMemHeader;
-
-	if (pShbInstance_p == NULL) {
-		return (kShbInvalidArg);
-	}
-	pShbMemHeader =
-	    ShbIpcGetShbMemHeader(ShbIpcGetShbMemInst(pShbInstance_p));
-	//set semaphore
-	pShbMemHeader->m_fNewData = TRUE;
-	DEBUG_LVL_29_TRACE0("ShbIpcSignalNewData set Sem -> New Data\n");
-
-	wake_up_interruptible(&pShbMemHeader->m_WaitQueueNewData);
-	return (kShbOk);
-}
-
-//---------------------------------------------------------------------------
-//  Start signaling for job ready (called from waiting process)
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcStartSignalingJobReady(tShbInstance pShbInstance_p,
-				       unsigned long ulTimeOut_p,
-				       tSigHndlrJobReady pfnSignalHandlerJobReady_p)
-{
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	tShbError ShbError;
-
-	if ((pShbInstance_p == NULL) || (pfnSignalHandlerJobReady_p == NULL)) {
-		return (kShbInvalidArg);
-	}
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance_p);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	ShbError = kShbOk;
-	if ((pShbMemInst->m_tThreadJobReadyId != INVALID_ID)
-	    || (pShbMemInst->m_pfnSigHndlrJobReady != NULL)) {
-		ShbError = kShbAlreadySignaling;
-		goto Exit;
-	}
-	pShbMemInst->m_ulTimeOutJobReady = ulTimeOut_p;
-	pShbMemInst->m_pfnSigHndlrJobReady = pfnSignalHandlerJobReady_p;
-	pShbMemHeader->m_fJobReady = FALSE;
-	//create thread for signalling new data
-	pShbMemInst->m_tThreadJobReadyId =
-		kernel_thread(ShbIpcThreadSignalJobReady, pShbInstance_p,
-				CLONE_FS | CLONE_FILES);
-      Exit:
-	return ShbError;
-}
-
-//---------------------------------------------------------------------------
-//  Signal job ready (called from executing process)
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcSignalJobReady(tShbInstance pShbInstance_p)
-{
-	tShbMemHeader *pShbMemHeader;
-
-	DEBUG_LVL_29_TRACE0("ShbIpcSignalJobReady\n");
-	if (pShbInstance_p == NULL) {
-		return (kShbInvalidArg);
-	}
-	pShbMemHeader =
-	    ShbIpcGetShbMemHeader(ShbIpcGetShbMemInst(pShbInstance_p));
-	//set semaphore
-	pShbMemHeader->m_fJobReady = TRUE;
-	DEBUG_LVL_29_TRACE0("ShbIpcSignalJobReady set Sem -> Job Ready \n");
-
-	wake_up_interruptible(&pShbMemHeader->m_WaitQueueJobReady);
-	return (kShbOk);
-}
-
-//---------------------------------------------------------------------------
-//  Get pointer to common used share memory area
-//---------------------------------------------------------------------------
-
-void *ShbIpcGetShMemPtr(tShbInstance pShbInstance_p)
-{
-
-	tShbMemHeader *pShbMemHeader;
-	void *pShbShMemPtr;
-
-	pShbMemHeader =
-	    ShbIpcGetShbMemHeader(ShbIpcGetShbMemInst(pShbInstance_p));
-	if (pShbMemHeader != NULL) {
-		pShbShMemPtr = (u8 *) pShbMemHeader + sizeof(tShbMemHeader);
-	} else {
-		pShbShMemPtr = NULL;
-	}
-
-	return (pShbShMemPtr);
-
-}
-
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//  Get pointer to process local information structure
-//---------------------------------------------------------------------------
-
-/*tShbMemInst*  ShbIpcGetShbMemInst (
-    tShbInstance pShbInstance_p)
-{
-
-tShbMemInst*  pShbMemInst;
-
-    pShbMemInst = (tShbMemInst*)pShbInstance_p;
-
-    return (pShbMemInst);
-
-}
-*/
-
-//---------------------------------------------------------------------------
-//  Get pointer to shared memory header
-//---------------------------------------------------------------------------
-
-/*tShbMemHeader*  ShbIpcGetShbMemHeader (
-    tShbMemInst* pShbMemInst_p)
-{
-
-tShbMemHeader*  pShbMemHeader;
-
-    pShbMemHeader = pShbMemInst_p->m_pShbMemHeader;
-
-    return (pShbMemHeader);
-
-}
-*/
-
-//---------------------------------------------------------------------------
-//  Allocate a memory block from process specific mempool
-//---------------------------------------------------------------------------
-
-static void *ShbIpcAllocPrivateMem(unsigned long ulMemSize_p)
-{
-	tShbError ShbError;
-	void *pMem;
-
-	DEBUG_LVL_29_TRACE0("ShbIpcAllocPrivateMem \n");
-	//get private mem
-	pMem = kmalloc(ulMemSize_p, GFP_KERNEL);
-	if (pMem == NULL) {
-		//unable to create mem
-		ShbError = kShbOutOfMem;
-		goto Exit;
-	}
-      Exit:
-	return (pMem);
-
-}
-
-//---------------------------------------------------------------------------
-//  Thread for new data signaling
-//---------------------------------------------------------------------------
-
-int ShbIpcThreadSignalNewData(void *pvThreadParam_p)
-{
-	tShbInstance pShbInstance;
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	int iRetVal = -1;
-	int fCallAgain;
-
-	daemonize("ShbND%p", pvThreadParam_p);
-	allow_signal(SIGTERM);
-	pShbInstance = (tShbMemInst *) pvThreadParam_p;
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	DEBUG_LVL_26_TRACE1("ShbIpcThreadSignalNewData(%p)\n", pvThreadParam_p);
-
-	set_user_nice(current, pShbMemInst->m_lThreadNewDataNice);
-
-//            DEBUG_LVL_29_TRACE1("ShbIpcThreadSignalNewData wait for New Data Sem %p\n",pShbMemInst->m_pSemNewData);
-	do {
-		iRetVal =
-		    wait_event_interruptible(pShbMemHeader->m_WaitQueueNewData,
-					     (pShbMemInst->m_iThreadTermFlag !=
-					      0)
-					     || (pShbMemHeader->m_fNewData !=
-						 FALSE));
-
-		if (iRetVal != 0) {	// signal pending
-			break;
-		}
-
-		if (pShbMemHeader->m_fNewData != FALSE) {
-			pShbMemHeader->m_fNewData = FALSE;
-			do {
-				fCallAgain =
-				    pShbMemInst->
-				    m_pfnSigHndlrNewData(pShbInstance);
-				// call scheduler, which will execute any task with higher priority
-				schedule();
-			} while (fCallAgain != FALSE);
-		}
-	} while (pShbMemInst->m_iThreadTermFlag == 0);
-	DEBUG_LVL_29_TRACE0("ShbIpcThreadSignalNewData terminated \n");
-	//set thread completed
-	complete_and_exit(&pShbMemInst->m_CompletionNewData, 0);
-	return 0;
-}
-
-//---------------------------------------------------------------------------
-//  Thread for new data Job Ready signaling
-//---------------------------------------------------------------------------
-
-int ShbIpcThreadSignalJobReady(void *pvThreadParam_p)
-{
-	tShbInstance pShbInstance;
-	tShbMemInst *pShbMemInst;
-	tShbMemHeader *pShbMemHeader;
-	long lTimeOut;
-	int iRetVal = -1;
-
-	daemonize("ShbJR%p", pvThreadParam_p);
-	allow_signal(SIGTERM);
-	pShbInstance = (tShbMemInst *) pvThreadParam_p;
-	pShbMemInst = ShbIpcGetShbMemInst(pShbInstance);
-	pShbMemHeader = ShbIpcGetShbMemHeader(pShbMemInst);
-
-	DEBUG_LVL_29_TRACE0
-	    ("ShbIpcThreadSignalJobReady wait for job ready Sem\n");
-	if (pShbMemInst->m_ulTimeOutJobReady != 0) {
-		lTimeOut = (long)pShbMemInst->m_ulTimeOutJobReady;
-		//wait for job ready semaphore
-		iRetVal =
-		    wait_event_interruptible_timeout(pShbMemHeader->
-						     m_WaitQueueJobReady,
-						     (pShbMemHeader->
-						      m_fJobReady != FALSE),
-						     lTimeOut);
-	} else {
-		//wait for job ready semaphore
-		iRetVal =
-		    wait_event_interruptible(pShbMemHeader->m_WaitQueueJobReady,
-					     (pShbMemHeader->m_fJobReady !=
-					      FALSE));
-	}
-
-	if (pShbMemInst->m_pfnSigHndlrJobReady != NULL) {
-		//call Handler
-		pShbMemInst->m_pfnSigHndlrJobReady(pShbInstance,
-						   !pShbMemHeader->m_fJobReady);
-	}
-
-	pShbMemInst->m_pfnSigHndlrJobReady = NULL;
-	return 0;
-}
-
-//Build the crc table
-static void ShbIpcCrc32GenTable(unsigned long aulCrcTable[256])
-{
-	unsigned long ulCrc, ulPoly;
-	int iIndexI, iIndexJ;
-
-	ulPoly = 0xEDB88320L;
-	for (iIndexI = 0; iIndexI < 256; iIndexI++) {
-		ulCrc = iIndexI;
-		for (iIndexJ = 8; iIndexJ > 0; iIndexJ--) {
-			if (ulCrc & 1) {
-				ulCrc = (ulCrc >> 1) ^ ulPoly;
-			} else {
-				ulCrc >>= 1;
-			}
-		}
-		aulCrcTable[iIndexI] = ulCrc;
-	}
-}
-
-//Calculate the crc value
-static unsigned long ShbIpcCrc32GetCrc(const char *pcString,
-				       unsigned long aulCrcTable[256])
-{
-	unsigned long ulCrc;
-	int iIndex;
-
-	ulCrc = 0xFFFFFFFF;
-	for (iIndex = 0; iIndex < strlen(pcString); iIndex++) {
-		ulCrc =
-		    ((ulCrc >> 8) & 0x00FFFFFF) ^
-		    aulCrcTable[(ulCrc ^ pcString[iIndex]) & 0xFF];
-	}
-	return (ulCrc ^ 0xFFFFFFFF);
-
-}
-
-static void ShbIpcAppendListElement(struct sShbMemTable *psNewMemTableElement)
-{
-	struct sShbMemTable *psMemTableElement = psMemTableElementFirst_g;
-	psNewMemTableElement->m_psNextMemTableElement = NULL;
-
-	if (psMemTableElementFirst_g != NULL) {	/* sind Elemente vorhanden */
-		while (psMemTableElement->m_psNextMemTableElement != NULL) {	/* suche das letzte Element */
-			psMemTableElement =
-			    psMemTableElement->m_psNextMemTableElement;
-		}
-		psMemTableElement->m_psNextMemTableElement = psNewMemTableElement;	/*  Haenge das Element hinten an */
-	} else {		/* wenn die liste leer ist, bin ich das erste Element */
-		psMemTableElementFirst_g = psNewMemTableElement;
-	}
-}
-
-static int ShbIpcFindListElement(int iBufferId,
-				 struct sShbMemTable **ppsReturnMemTableElement)
-{
-	struct sShbMemTable *psMemTableElement = psMemTableElementFirst_g;
-	while (psMemTableElement != NULL) {
-		if (psMemTableElement->m_iBufferId == iBufferId) {
-//printk("ShbIpcFindListElement Buffer at:%p Id:%d\n",psMemTableElement->m_pBuffer,psMemTableElement->m_iBufferId);
-			*ppsReturnMemTableElement = psMemTableElement;
-//printk("ShbIpcFindListElement Buffer at:%p Id:%d\n",(*ppsReturnMemTableElement)->m_pBuffer,(*ppsReturnMemTableElement)->m_iBufferId);
-			return 0;
-		}
-		psMemTableElement = psMemTableElement->m_psNextMemTableElement;
-	}
-	return -1;
-}
-
-static void ShbIpcDeleteListElement(int iBufferId)
-{
-	struct sShbMemTable *psMemTableElement = psMemTableElementFirst_g;
-	struct sShbMemTable *psMemTableElementOld = psMemTableElementFirst_g;
-	if (psMemTableElement != NULL) {
-		while ((psMemTableElement != NULL)
-		       && (psMemTableElement->m_iBufferId != iBufferId)) {
-			psMemTableElementOld = psMemTableElement;
-			psMemTableElement =
-			    psMemTableElement->m_psNextMemTableElement;
-		}
-		if (psMemTableElement != NULL) {
-			if (psMemTableElement != psMemTableElementFirst_g) {
-				psMemTableElementOld->m_psNextMemTableElement =
-				    psMemTableElement->m_psNextMemTableElement;
-				kfree(psMemTableElement);
-			} else {
-				kfree(psMemTableElement);
-				psMemTableElementFirst_g = NULL;
-			}
-
-		}
-	}
-
-}
-
diff --git a/drivers/staging/epl/ShbIpc.h b/drivers/staging/epl/ShbIpc.h
deleted file mode 100644
index 285f096..0000000
--- a/drivers/staging/epl/ShbIpc.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      Project independend shared buffer (linear + circular)
-
-  Description:  Declaration of platform specific part for the
-                shared buffer
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-  2006/06/27 -rs:   V 1.00 (initial version)
-
-****************************************************************************/
-
-#ifndef _SHBIPC_H_
-#define _SHBIPC_H_
-
-//---------------------------------------------------------------------------
-//  Type definitions
-//---------------------------------------------------------------------------
-
-typedef int (*tSigHndlrNewData) (tShbInstance pShbInstance_p);
-typedef void (*tSigHndlrJobReady) (tShbInstance pShbInstance_p,
-				   unsigned int fTimeOut_p);
-
-//---------------------------------------------------------------------------
-//  Prototypes
-//---------------------------------------------------------------------------
-
-tShbError ShbIpcInit(void);
-tShbError ShbIpcExit(void);
-
-tShbError ShbIpcAllocBuffer(unsigned long ulBufferSize_p,
-			    const char *pszBufferID_p,
-			    tShbInstance * ppShbInstance_p,
-			    unsigned int *pfShbNewCreated_p);
-tShbError ShbIpcReleaseBuffer(tShbInstance pShbInstance_p);
-
-tShbError ShbIpcEnterAtomicSection(tShbInstance pShbInstance_p);
-tShbError ShbIpcLeaveAtomicSection(tShbInstance pShbInstance_p);
-
-tShbError ShbIpcStartSignalingNewData(tShbInstance pShbInstance_p,
-				      tSigHndlrNewData
-				      pfnSignalHandlerNewData_p,
-				      tShbPriority ShbPriority_p);
-tShbError ShbIpcStopSignalingNewData(tShbInstance pShbInstance_p);
-tShbError ShbIpcSignalNewData(tShbInstance pShbInstance_p);
-
-tShbError ShbIpcStartSignalingJobReady(tShbInstance pShbInstance_p,
-				       unsigned long ulTimeOut_p,
-				       tSigHndlrJobReady
-				       pfnSignalHandlerJobReady_p);
-tShbError ShbIpcSignalJobReady(tShbInstance pShbInstance_p);
-
-void *ShbIpcGetShMemPtr(tShbInstance pShbInstance_p);
-
-#endif // #ifndef _SHBIPC_H_
diff --git a/drivers/staging/epl/ShbLinuxKernel.h b/drivers/staging/epl/ShbLinuxKernel.h
deleted file mode 100644
index 812702a..0000000
--- a/drivers/staging/epl/ShbLinuxKernel.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      Project independend shared buffer (linear + circular)
-
-  Description:  Declaration of platform specific part for the
-                shared buffer
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-  2006/07/20 -rs:   V 1.00 (initial version)
-
-****************************************************************************/
-
-#ifndef _SHBLINUXKERNEL_H_
-#define _SHBLINUXKERNEL_H_
-
-struct sShbMemTable {
-	int m_iBufferId;
-	void *m_pBuffer;
-	struct sShbMemTable *m_psNextMemTableElement;
-};
-
-extern struct sShbMemTable *psMemTableElementFirst_g;
-
-#endif // _SHBLINUXKERNEL_H_
diff --git a/drivers/staging/epl/SocketLinuxKernel.c b/drivers/staging/epl/SocketLinuxKernel.c
deleted file mode 100644
index 562bc4a..0000000
--- a/drivers/staging/epl/SocketLinuxKernel.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Wrapper for BSD socket API for Linux kernel
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: SocketLinuxKernel.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Dev C++ and GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/08/25 d.k.:   start of implementation
-
-****************************************************************************/
-
-#include <linux/net.h>
-#include <linux/in.h>
-#include "SocketLinuxKernel.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-//  Kernel Module specific Data Structures
-//---------------------------------------------------------------------------
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-SOCKET socket(int af, int type, int protocol)
-{
-	int rc;
-	SOCKET socket;
-
-	rc = sock_create_kern(af, type, protocol, &socket);
-	if (rc < 0) {
-		socket = NULL;
-		goto Exit;
-	}
-
-      Exit:
-	return socket;
-}
-
-int bind(SOCKET socket_p, const struct sockaddr *addr, int addrlen)
-{
-	int rc;
-
-	rc = socket_p->ops->bind(socket_p, (struct sockaddr *)addr, addrlen);
-
-	return rc;
-}
-
-int closesocket(SOCKET socket_p)
-{
-	sock_release(socket_p);
-
-	return 0;
-}
-
-int recvfrom(SOCKET socket_p, char *buf, int len, int flags,
-	     struct sockaddr *from, int *fromlen)
-{
-	int rc;
-	struct msghdr msg;
-	struct kvec iov;
-
-	msg.msg_control = NULL;
-	msg.msg_controllen = 0;
-	msg.msg_name = from;	// will be struct sock_addr
-	msg.msg_namelen = *fromlen;
-	iov.iov_len = len;
-	iov.iov_base = buf;
-
-	rc = kernel_recvmsg(socket_p, &msg, &iov, 1, iov.iov_len, 0);
-
-	return rc;
-}
-
-int sendto(SOCKET socket_p, const char *buf, int len, int flags,
-	   const struct sockaddr *to, int tolen)
-{
-	int rc;
-	struct msghdr msg;
-	struct kvec iov;
-
-	msg.msg_control = NULL;
-	msg.msg_controllen = 0;
-	msg.msg_name = (struct sockaddr *)to;	// will be struct sock_addr
-	msg.msg_namelen = tolen;
-	msg.msg_flags = 0;
-	iov.iov_len = len;
-	iov.iov_base = (char *)buf;
-
-	rc = kernel_sendmsg(socket_p, &msg, &iov, 1, len);
-
-	return rc;
-}
-
-// EOF
diff --git a/drivers/staging/epl/SocketLinuxKernel.h b/drivers/staging/epl/SocketLinuxKernel.h
deleted file mode 100644
index 6e1d619..0000000
--- a/drivers/staging/epl/SocketLinuxKernel.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for BSD socket API for Linux kernel
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: SocketLinuxKernel.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/08/25 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _SOCKETLINUXKERNEL_H_
-#define _SOCKETLINUXKERNEL_H_
-
-#include <linux/net.h>
-#include <linux/in.h>
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define INVALID_SOCKET  0
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct socket *SOCKET;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-int bind(SOCKET s, const struct sockaddr *addr, int addrlen);
-
-int closesocket(SOCKET s);
-
-int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from,
-	     int *fromlen);
-
-int sendto(SOCKET s, const char *buf, int len, int flags,
-	   const struct sockaddr *to, int tolen);
-
-SOCKET socket(int af, int type, int protocol);
-
-#endif // #ifndef _SOCKETLINUXKERNEL_H_
diff --git a/drivers/staging/epl/TimerHighReskX86.c b/drivers/staging/epl/TimerHighReskX86.c
deleted file mode 100644
index d6897de..0000000
--- a/drivers/staging/epl/TimerHighReskX86.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  target specific implementation of
-                high resolution timer module for X86 under Linux
-                The Linux kernel has to be compiled with high resolution
-                timers enabled. This is done by configuring the kernel
-                with CONFIG_HIGH_RES_TIMERS enabled.
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: TimerHighReskX86.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:38:01 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GNU
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-****************************************************************************/
-
-#include "EplInc.h"
-#include "kernel/EplTimerHighResk.h"
-#include "Benchmark.h"
-
-//#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/hrtimer.h>
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#define TIMER_COUNT           2	/* max 15 timers selectable */
-#define TIMER_MIN_VAL_SINGLE  5000	/* min 5us */
-#define TIMER_MIN_VAL_CYCLE   100000	/* min 100us */
-
-#define PROVE_OVERRUN
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)     TgtDbgPostTraceValue(v)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#define TGT_DBG_POST_TRACE_VALUE(v)
-#endif
-#define HRT_DBG_POST_TRACE_VALUE(Event_p, uiNodeId_p, wErrorCode_p) \
-    TGT_DBG_POST_TRACE_VALUE((0xE << 28) | (Event_p << 24) \
-                             | (uiNodeId_p << 16) | wErrorCode_p)
-
-#define TIMERHDL_MASK         0x0FFFFFFF
-#define TIMERHDL_SHIFT        28
-#define HDL_TO_IDX(Hdl)       ((Hdl >> TIMERHDL_SHIFT) - 1)
-#define HDL_INIT(Idx)         ((Idx + 1) << TIMERHDL_SHIFT)
-#define HDL_INC(Hdl)          (((Hdl + 1) & TIMERHDL_MASK) \
-                               | (Hdl & ~TIMERHDL_MASK))
-
-//---------------------------------------------------------------------------
-// modul global types
-//---------------------------------------------------------------------------
-
-typedef struct {
-	tEplTimerEventArg m_EventArg;
-	tEplTimerkCallback m_pfnCallback;
-	struct hrtimer m_Timer;
-	BOOL m_fContinuously;
-	unsigned long long m_ullPeriod;
-
-} tEplTimerHighReskTimerInfo;
-
-typedef struct {
-	tEplTimerHighReskTimerInfo m_aTimerInfo[TIMER_COUNT];
-
-} tEplTimerHighReskInstance;
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-static tEplTimerHighReskInstance EplTimerHighReskInstance_l;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-enum hrtimer_restart EplTimerHighReskCallback(struct hrtimer *pTimer_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskInit()
-//
-// Description: initializes the high resolution timer module.
-//
-// Parameters:  void
-//
-// Return:      tEplKernel      = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimerHighReskInit(void)
-{
-	tEplKernel Ret;
-
-	Ret = EplTimerHighReskAddInstance();
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskAddInstance()
-//
-// Description: initializes the high resolution timer module.
-//
-// Parameters:  void
-//
-// Return:      tEplKernel      = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimerHighReskAddInstance(void)
-{
-	tEplKernel Ret;
-	unsigned int uiIndex;
-
-	Ret = kEplSuccessful;
-
-	EPL_MEMSET(&EplTimerHighReskInstance_l, 0,
-		   sizeof(EplTimerHighReskInstance_l));
-
-	/*
-	 * Initialize hrtimer structures for all usable timers.
-	 */
-	for (uiIndex = 0; uiIndex < TIMER_COUNT; uiIndex++) {
-		tEplTimerHighReskTimerInfo *pTimerInfo;
-		struct hrtimer *pTimer;
-
-		pTimerInfo = &EplTimerHighReskInstance_l.m_aTimerInfo[uiIndex];
-		pTimer = &pTimerInfo->m_Timer;
-		hrtimer_init(pTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
-
-		pTimer->function = EplTimerHighReskCallback;
-	}
-
-	return Ret;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskDelInstance()
-//
-// Description: shuts down the high resolution timer module.
-//
-// Parameters:  void
-//
-// Return:      tEplKernel      = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimerHighReskDelInstance(void)
-{
-	tEplTimerHighReskTimerInfo *pTimerInfo;
-	tEplKernel Ret;
-	unsigned int uiIndex;
-
-	Ret = kEplSuccessful;
-
-	for (uiIndex = 0; uiIndex < TIMER_COUNT; uiIndex++) {
-		pTimerInfo = &EplTimerHighReskInstance_l.m_aTimerInfo[0];
-		pTimerInfo->m_pfnCallback = NULL;
-		pTimerInfo->m_EventArg.m_TimerHdl = 0;
-		/*
-		 * In this case we can not just try to cancel the timer.
-		 * We actually have to wait until its callback function
-		 * has returned.
-		 */
-		hrtimer_cancel(&pTimerInfo->m_Timer);
-	}
-
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskModifyTimerNs()
-//
-// Description: modifies the timeout of the timer with the specified handle.
-//              If the handle the pointer points to is zero, the timer must
-//              be created first.
-//              If it is not possible to stop the old timer,
-//              this function always assures that the old timer does not
-//              trigger the callback function with the same handle as the new
-//              timer. That means the callback function must check the passed
-//              handle with the one returned by this function. If these are
-//              unequal, the call can be discarded.
-//
-// Parameters:  pTimerHdl_p     = pointer to timer handle
-//              ullTimeNs_p     = relative timeout in [ns]
-//              pfnCallback_p   = callback function, which is called mutual
-//                                exclusive with the Edrv callback functions
-//                                (Rx and Tx).
-//              ulArgument_p    = user-specific argument
-//              fContinuously_p = if TRUE, callback function will be called
-//                                continuously;
-//                                otherwise, it is a oneshot timer.
-//
-// Return:      tEplKernel      = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimerHighReskModifyTimerNs(tEplTimerHdl *pTimerHdl_p,
-					 unsigned long long ullTimeNs_p,
-					 tEplTimerkCallback pfnCallback_p,
-					 unsigned long ulArgument_p,
-					 BOOL fContinuously_p)
-{
-	tEplKernel Ret;
-	unsigned int uiIndex;
-	tEplTimerHighReskTimerInfo *pTimerInfo;
-	ktime_t RelTime;
-
-	Ret = kEplSuccessful;
-
-	// check pointer to handle
-	if (pTimerHdl_p == NULL) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-
-	if (*pTimerHdl_p == 0) {	// no timer created yet
-
-		// search free timer info structure
-		pTimerInfo = &EplTimerHighReskInstance_l.m_aTimerInfo[0];
-		for (uiIndex = 0; uiIndex < TIMER_COUNT;
-		     uiIndex++, pTimerInfo++) {
-			if (pTimerInfo->m_EventArg.m_TimerHdl == 0) {	// free structure found
-				break;
-			}
-		}
-		if (uiIndex >= TIMER_COUNT) {	// no free structure found
-			Ret = kEplTimerNoTimerCreated;
-			goto Exit;
-		}
-
-		pTimerInfo->m_EventArg.m_TimerHdl = HDL_INIT(uiIndex);
-	} else {
-		uiIndex = HDL_TO_IDX(*pTimerHdl_p);
-		if (uiIndex >= TIMER_COUNT) {	// invalid handle
-			Ret = kEplTimerInvalidHandle;
-			goto Exit;
-		}
-
-		pTimerInfo = &EplTimerHighReskInstance_l.m_aTimerInfo[uiIndex];
-	}
-
-	/*
-	 * increment timer handle
-	 * (if timer expires right after this statement, the user
-	 * would detect an unknown timer handle and discard it)
-	 */
-	pTimerInfo->m_EventArg.m_TimerHdl =
-	    HDL_INC(pTimerInfo->m_EventArg.m_TimerHdl);
-	*pTimerHdl_p = pTimerInfo->m_EventArg.m_TimerHdl;
-
-	// reject too small time values
-	if ((fContinuously_p && (ullTimeNs_p < TIMER_MIN_VAL_CYCLE))
-	    || (!fContinuously_p && (ullTimeNs_p < TIMER_MIN_VAL_SINGLE))) {
-		Ret = kEplTimerNoTimerCreated;
-		goto Exit;
-	}
-
-	pTimerInfo->m_EventArg.m_ulArg = ulArgument_p;
-	pTimerInfo->m_pfnCallback = pfnCallback_p;
-	pTimerInfo->m_fContinuously = fContinuously_p;
-	pTimerInfo->m_ullPeriod = ullTimeNs_p;
-
-	/*
-	 * HRTIMER_MODE_REL does not influence general handling of this timer.
-	 * It only sets relative mode for this start operation.
-	 * -> Expire time is calculated by: Now + RelTime
-	 * hrtimer_start also skips pending timer events.
-	 * The state HRTIMER_STATE_CALLBACK is ignored.
-	 * We have to cope with that in our callback function.
-	 */
-	RelTime = ktime_add_ns(ktime_set(0, 0), ullTimeNs_p);
-	hrtimer_start(&pTimerInfo->m_Timer, RelTime, HRTIMER_MODE_REL);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskDeleteTimer()
-//
-// Description: deletes the timer with the specified handle. Afterward the
-//              handle is set to zero.
-//
-// Parameters:  pTimerHdl_p     = pointer to timer handle
-//
-// Return:      tEplKernel      = error code
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-tEplKernel EplTimerHighReskDeleteTimer(tEplTimerHdl *pTimerHdl_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	unsigned int uiIndex;
-	tEplTimerHighReskTimerInfo *pTimerInfo;
-
-	// check pointer to handle
-	if (pTimerHdl_p == NULL) {
-		Ret = kEplTimerInvalidHandle;
-		goto Exit;
-	}
-
-	if (*pTimerHdl_p == 0) {	// no timer created yet
-		goto Exit;
-	} else {
-		uiIndex = HDL_TO_IDX(*pTimerHdl_p);
-		if (uiIndex >= TIMER_COUNT) {	// invalid handle
-			Ret = kEplTimerInvalidHandle;
-			goto Exit;
-		}
-		pTimerInfo = &EplTimerHighReskInstance_l.m_aTimerInfo[uiIndex];
-		if (pTimerInfo->m_EventArg.m_TimerHdl != *pTimerHdl_p) {	// invalid handle
-			goto Exit;
-		}
-	}
-
-	*pTimerHdl_p = 0;
-	pTimerInfo->m_EventArg.m_TimerHdl = 0;
-	pTimerInfo->m_pfnCallback = NULL;
-
-	/*
-	 * Three return cases of hrtimer_try_to_cancel have to be tracked:
-	 *  1 - timer has been removed
-	 *  0 - timer was not active
-	 *      We need not do anything. hrtimer timers just consist of
-	 *      a hrtimer struct, which we might enqueue in the hrtimers
-	 *      event list by calling hrtimer_start().
-	 *      If a timer is not enqueued, it is not present in hrtimers.
-	 * -1 - callback function is running
-	 *      In this case we have to ensure that the timer is not
-	 *      continuously restarted. This has been done by clearing
-	 *      its handle.
-	 */
-	hrtimer_try_to_cancel(&pTimerInfo->m_Timer);
-
-      Exit:
-	return Ret;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    EplTimerHighReskCallback()
-//
-// Description: Callback function commonly used for all timers.
-//
-// Parameters:  pTimer_p = pointer to hrtimer
-//
-// Return:
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-enum hrtimer_restart EplTimerHighReskCallback(struct hrtimer *pTimer_p)
-{
-	unsigned int uiIndex;
-	tEplTimerHighReskTimerInfo *pTimerInfo;
-	tEplTimerHdl OrgTimerHdl;
-	enum hrtimer_restart Ret;
-
-	BENCHMARK_MOD_24_SET(4);
-
-	Ret = HRTIMER_NORESTART;
-	pTimerInfo =
-	    container_of(pTimer_p, tEplTimerHighReskTimerInfo, m_Timer);
-	uiIndex = HDL_TO_IDX(pTimerInfo->m_EventArg.m_TimerHdl);
-	if (uiIndex >= TIMER_COUNT) {	// invalid handle
-		goto Exit;
-	}
-
-	/*
-	 * We store the timer handle before calling the callback function
-	 * as the timer can be modified inside it.
-	 */
-	OrgTimerHdl = pTimerInfo->m_EventArg.m_TimerHdl;
-
-	if (pTimerInfo->m_pfnCallback != NULL) {
-		pTimerInfo->m_pfnCallback(&pTimerInfo->m_EventArg);
-	}
-
-	if (pTimerInfo->m_fContinuously) {
-		ktime_t Interval;
-#ifdef PROVE_OVERRUN
-		ktime_t Now;
-		unsigned long Overruns;
-#endif
-
-		if (OrgTimerHdl != pTimerInfo->m_EventArg.m_TimerHdl) {
-			/* modified timer has already been restarted */
-			goto Exit;
-		}
-#ifdef PROVE_OVERRUN
-		Now = ktime_get();
-		Interval =
-		    ktime_add_ns(ktime_set(0, 0), pTimerInfo->m_ullPeriod);
-		Overruns = hrtimer_forward(pTimer_p, Now, Interval);
-		if (Overruns > 1) {
-			printk
-			    ("EplTimerHighResk: Continuous timer (handle 0x%lX) had to skip %lu interval(s)!\n",
-			     pTimerInfo->m_EventArg.m_TimerHdl, Overruns - 1);
-		}
-#else
-		pTimer_p->expires = ktime_add_ns(pTimer_p->expires,
-						 pTimerInfo->m_ullPeriod);
-#endif
-
-		Ret = HRTIMER_RESTART;
-	}
-
-      Exit:
-	BENCHMARK_MOD_24_RESET(4);
-	return Ret;
-}
diff --git a/drivers/staging/epl/VirtualEthernetLinux.c b/drivers/staging/epl/VirtualEthernetLinux.c
deleted file mode 100644
index 7b7cce1..0000000
--- a/drivers/staging/epl/VirtualEthernetLinux.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Virtual Ethernet Driver for Linux
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: VirtualEthernetLinux.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/11/20 17:06:51 $
-
-                $State: Exp $
-
-                Build Environment:
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/12 -ar:   start of the implementation, version 1.00
-
-  2006/09/18 d.k.:  integration into EPL DLLk module
-
-  ToDo:
-
-  void netif_carrier_off(struct net_device *dev);
-  void netif_carrier_on(struct net_device *dev);
-
-****************************************************************************/
-
-#include <linux/module.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/if_arp.h>
-#include <net/arp.h>
-
-#include <net/protocol.h>
-#include <net/pkt_sched.h>
-#include <linux/if_ether.h>
-#include <linux/in.h>
-#include <linux/ip.h>
-#include <linux/udp.h>
-#include <linux/mm.h>
-#include <linux/types.h>
-#include <linux/skbuff.h>	/* for struct sk_buff */
-
-#include "kernel/VirtualEthernet.h"
-#include "kernel/EplDllkCal.h"
-#include "kernel/EplDllk.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_VETH_TX_TIMEOUT
-//#define EPL_VETH_TX_TIMEOUT (2*HZ)
-#define EPL_VETH_TX_TIMEOUT 0	// d.k.: we use no timeout
-#endif
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static struct net_device *pVEthNetDevice_g = NULL;
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static int VEthOpen(struct net_device *pNetDevice_p);
-static int VEthClose(struct net_device *pNetDevice_p);
-static int VEthXmit(struct sk_buff *pSkb_p, struct net_device *pNetDevice_p);
-static struct net_device_stats *VEthGetStats(struct net_device *pNetDevice_p);
-static void VEthTimeout(struct net_device *pNetDevice_p);
-static tEplKernel VEthRecvFrame(tEplFrameInfo * pFrameInfo_p);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-static int VEthOpen(struct net_device *pNetDevice_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	//open the device
-//	struct net_device_stats* pStats = netdev_priv(pNetDevice_p);
-
-	//start the interface queue for the network subsystem
-	netif_start_queue(pNetDevice_p);
-
-	// register callback function in DLL
-	Ret = EplDllkRegAsyncHandler(VEthRecvFrame);
-
-	EPL_DBGLVL_VETH_TRACE1
-	    ("VEthOpen: EplDllkRegAsyncHandler returned 0x%02X\n", Ret);
-
-	return 0;
-}
-
-static int VEthClose(struct net_device *pNetDevice_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	EPL_DBGLVL_VETH_TRACE0("VEthClose\n");
-
-	Ret = EplDllkDeregAsyncHandler(VEthRecvFrame);
-
-	//stop the interface queue for the network subsystem
-	netif_stop_queue(pNetDevice_p);
-	return 0;
-}
-
-static int VEthXmit(struct sk_buff *pSkb_p, struct net_device *pNetDevice_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	tEplFrameInfo FrameInfo;
-
-	//transmit function
-	struct net_device_stats *pStats = netdev_priv(pNetDevice_p);
-
-	//save timestemp
-	pNetDevice_p->trans_start = jiffies;
-
-	FrameInfo.m_pFrame = (tEplFrame *) pSkb_p->data;
-	FrameInfo.m_uiFrameSize = pSkb_p->len;
-
-	//call send fkt on DLL
-	Ret = EplDllkCalAsyncSend(&FrameInfo, kEplDllAsyncReqPrioGeneric);
-	if (Ret != kEplSuccessful) {
-		EPL_DBGLVL_VETH_TRACE1
-		    ("VEthXmit: EplDllkCalAsyncSend returned 0x%02X\n", Ret);
-		netif_stop_queue(pNetDevice_p);
-		goto Exit;
-	} else {
-		EPL_DBGLVL_VETH_TRACE0("VEthXmit: frame passed to DLL\n");
-		dev_kfree_skb(pSkb_p);
-
-		//set stats for the device
-		pStats->tx_packets++;
-		pStats->tx_bytes += FrameInfo.m_uiFrameSize;
-	}
-
-      Exit:
-	return NETDEV_TX_OK;
-
-}
-
-static struct net_device_stats *VEthGetStats(struct net_device *pNetDevice_p)
-{
-	EPL_DBGLVL_VETH_TRACE0("VEthGetStats\n");
-
-	return netdev_priv(pNetDevice_p);
-}
-
-static void VEthTimeout(struct net_device *pNetDevice_p)
-{
-	EPL_DBGLVL_VETH_TRACE0("VEthTimeout(\n");
-
-	// $$$ d.k.: move to extra function, which is called by DLL when new space is available in TxFifo
-	if (netif_queue_stopped(pNetDevice_p)) {
-		netif_wake_queue(pNetDevice_p);
-	}
-}
-
-static tEplKernel VEthRecvFrame(tEplFrameInfo * pFrameInfo_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-	struct net_device *pNetDevice = pVEthNetDevice_g;
-	struct net_device_stats *pStats = netdev_priv(pNetDevice);
-	struct sk_buff *pSkb;
-
-	EPL_DBGLVL_VETH_TRACE1("VEthRecvFrame: FrameSize=%u\n",
-			       pFrameInfo_p->m_uiFrameSize);
-
-	pSkb = dev_alloc_skb(pFrameInfo_p->m_uiFrameSize + 2);
-	if (pSkb == NULL) {
-		pStats->rx_dropped++;
-		goto Exit;
-	}
-	pSkb->dev = pNetDevice;
-
-	skb_reserve(pSkb, 2);
-
-	memcpy((void *)skb_put(pSkb, pFrameInfo_p->m_uiFrameSize),
-	       pFrameInfo_p->m_pFrame, pFrameInfo_p->m_uiFrameSize);
-
-	pSkb->protocol = eth_type_trans(pSkb, pNetDevice);
-	pSkb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	// call netif_rx with skb
-	netif_rx(pSkb);
-
-	EPL_DBGLVL_VETH_TRACE1("VEthRecvFrame: SrcMAC=0x%llx\n",
-			       AmiGetQword48FromBe(pFrameInfo_p->m_pFrame->
-						   m_be_abSrcMac));
-
-	// update receive statistics
-	pStats->rx_packets++;
-	pStats->rx_bytes += pFrameInfo_p->m_uiFrameSize;
-
-      Exit:
-	return Ret;
-}
-
-static const struct net_device_ops epl_netdev_ops = {
-	.ndo_open		= VEthOpen,
-	.ndo_stop		= VEthClose,
-	.ndo_get_stats		= VEthGetStats,
-	.ndo_start_xmit		= VEthXmit,
-	.ndo_tx_timeout		= VEthTimeout,
-	.ndo_change_mtu		= eth_change_mtu,
-	.ndo_set_mac_address	= eth_mac_addr,
-	.ndo_validate_addr	= eth_validate_addr,
-};
-
-tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	// allocate net device structure with priv pointing to stats structure
-	pVEthNetDevice_g =
-	    alloc_netdev(sizeof(struct net_device_stats), EPL_VETH_NAME,
-			 ether_setup);
-//    pVEthNetDevice_g = alloc_etherdev(sizeof (struct net_device_stats));
-
-	if (pVEthNetDevice_g == NULL) {
-		Ret = kEplNoResource;
-		goto Exit;
-	}
-
-	pVEthNetDevice_g->netdev_ops = &epl_netdev_ops;
-	pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT;
-	pVEthNetDevice_g->destructor = free_netdev;
-
-	// copy own MAC address to net device structure
-	memcpy(pVEthNetDevice_g->dev_addr, pInitParam_p->m_be_abSrcMac, 6);
-
-	//register VEth to the network subsystem
-	if (register_netdev(pVEthNetDevice_g)) {
-		EPL_DBGLVL_VETH_TRACE0
-		    ("VEthAddInstance: Could not register VEth...\n");
-	} else {
-		EPL_DBGLVL_VETH_TRACE0
-		    ("VEthAddInstance: Register VEth successfull...\n");
-	}
-
-      Exit:
-	return Ret;
-}
-
-tEplKernel VEthDelInstance(void)
-{
-	tEplKernel Ret = kEplSuccessful;
-
-	if (pVEthNetDevice_g != NULL) {
-		//unregister VEth from the network subsystem
-		unregister_netdev(pVEthNetDevice_g);
-		// destructor was set to free_netdev,
-		// so we do not need to call free_netdev here
-		pVEthNetDevice_g = NULL;
-	}
-
-	return Ret;
-}
-
-#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
diff --git a/drivers/staging/epl/amix86.c b/drivers/staging/epl/amix86.c
deleted file mode 100644
index d40ad91..0000000
--- a/drivers/staging/epl/amix86.c
+++ /dev/null
@@ -1,861 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  Abstract Memory Interface for x86 compatible
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: amix86.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    ...
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  r.s.: first implemetation
-
-  2006-06-13  d.k.: duplicate functions for little endian and big endian
-
-****************************************************************************/
-
-//#include "global.h"
-//#include "EplAmi.h"
-#include "EplInc.h"
-
-//---------------------------------------------------------------------------
-// typedef
-//---------------------------------------------------------------------------
-
-typedef struct {
-	u16 m_wWord;
-
-} twStruct;
-
-typedef struct {
-	u32 m_dwDword;
-
-} tdwStruct;
-
-typedef struct {
-	u64 m_qwQword;
-
-} tqwStruct;
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetXXXToBe()
-//
-// Description: writes the specified value to the absolute address in
-//              big endian
-//
-// Parameters:  pAddr_p                 = absolute address
-//              xXXXVal_p               = value
-//
-// Returns:     (none)
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//------------< write u8 in big endian >--------------------------
-/*
-void AmiSetByteToBe (void *pAddr_p, u8 bByteVal_p)
-{
-
-	*(u8 *)pAddr_p = bByteVal_p;
-
-}
-*/
-
-//------------< write u16 in big endian >--------------------------
-
-void AmiSetWordToBe(void * pAddr_p, u16 wWordVal_p)
-{
-	twStruct *pwStruct;
-	twStruct wValue;
-
-	wValue.m_wWord = (u16) ((wWordVal_p & 0x00FF) << 8);	//LSB to MSB
-	wValue.m_wWord |= (u16) ((wWordVal_p & 0xFF00) >> 8);	//MSB to LSB
-
-	pwStruct = (twStruct *) pAddr_p;
-	pwStruct->m_wWord = wValue.m_wWord;
-
-}
-
-//------------< write u32 in big endian >-------------------------
-
-void AmiSetDwordToBe(void *pAddr_p, u32 dwDwordVal_p)
-{
-	tdwStruct *pdwStruct;
-	tdwStruct dwValue;
-
-	dwValue.m_dwDword = ((dwDwordVal_p & 0x000000FF) << 24);	//LSB to MSB
-	dwValue.m_dwDword |= ((dwDwordVal_p & 0x0000FF00) << 8);
-	dwValue.m_dwDword |= ((dwDwordVal_p & 0x00FF0000) >> 8);
-	dwValue.m_dwDword |= ((dwDwordVal_p & 0xFF000000) >> 24);	//MSB to LSB
-
-	pdwStruct = (tdwStruct *) pAddr_p;
-	pdwStruct->m_dwDword = dwValue.m_dwDword;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetXXXToLe()
-//
-// Description: writes the specified value to the absolute address in
-//              little endian
-//
-// Parameters:  pAddr_p                 = absolute address
-//              xXXXVal_p               = value
-//
-// Returns:     (none)
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//------------< write u8 in little endian >--------------------------
-/*
-void AmiSetByteToLe (void *pAddr_p, u8 bByteVal_p)
-{
-
-	*(u8 *)pAddr_p = bByteVal_p;
-
-}
-*/
-
-//------------< write u16 in little endian >--------------------------
-
-void AmiSetWordToLe(void *pAddr_p, u16 wWordVal_p)
-{
-	twStruct *pwStruct;
-
-	pwStruct = (twStruct *) pAddr_p;
-	pwStruct->m_wWord = wWordVal_p;
-
-}
-
-//------------< write u32 in little endian >-------------------------
-
-void AmiSetDwordToLe(void *pAddr_p, u32 dwDwordVal_p)
-{
-	tdwStruct *pdwStruct;
-
-	pdwStruct = (tdwStruct *) pAddr_p;
-	pdwStruct->m_dwDword = dwDwordVal_p;
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetXXXFromBe()
-//
-// Description: reads the specified value from the absolute address in
-//              big endian
-//
-// Parameters:  pAddr_p                 = absolute address
-//
-// Returns:     XXX                     = value
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//------------< read u8 in big endian >---------------------------
-/*
-u8 AmiGetByteFromBe (void *pAddr_p)
-{
-
-	return ( *(u8 *)pAddr_p );
-
-}
-*/
-
-//------------< read u16 in big endian >---------------------------
-
-u16 AmiGetWordFromBe(void *pAddr_p)
-{
-	twStruct *pwStruct;
-	twStruct wValue;
-
-	pwStruct = (twStruct *) pAddr_p;
-
-	wValue.m_wWord = (u16) ((pwStruct->m_wWord & 0x00FF) << 8);	//LSB to MSB
-	wValue.m_wWord |= (u16) ((pwStruct->m_wWord & 0xFF00) >> 8);	//MSB to LSB
-
-	return (wValue.m_wWord);
-
-}
-
-//------------< read u32 in big endian >--------------------------
-
-u32 AmiGetDwordFromBe(void *pAddr_p)
-{
-	tdwStruct *pdwStruct;
-	tdwStruct dwValue;
-
-	pdwStruct = (tdwStruct *) pAddr_p;
-
-	dwValue.m_dwDword = ((pdwStruct->m_dwDword & 0x000000FF) << 24);	//LSB to MSB
-	dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0x0000FF00) << 8);
-	dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0x00FF0000) >> 8);
-	dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0xFF000000) >> 24);	//MSB to LSB
-
-	return (dwValue.m_dwDword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetXXXFromLe()
-//
-// Description: reads the specified value from the absolute address in
-//              little endian
-//
-// Parameters:  pAddr_p                 = absolute address
-//
-// Returns:     XXX                     = value
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-//------------< read u8 in little endian >---------------------------
-/*
-u8 AmiGetByteFromLe (void *pAddr_p)
-{
-
-	return ( *(u8 *)pAddr_p );
-
-}
-*/
-
-//------------< read u16 in little endian >---------------------------
-
-u16 AmiGetWordFromLe(void *pAddr_p)
-{
-	twStruct *pwStruct;
-
-	pwStruct = (twStruct *) pAddr_p;
-	return (pwStruct->m_wWord);
-}
-
-//------------< read u32 in little endian >--------------------------
-
-u32 AmiGetDwordFromLe(void *pAddr_p)
-{
-	tdwStruct *pdwStruct;
-
-	pdwStruct = (tdwStruct *) pAddr_p;
-	return (pdwStruct->m_dwDword);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetDword24ToBe()
-//
-// Description: sets a 24 bit value to a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              dwDwordVal_p    = value to set
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetDword24ToBe(void *pAddr_p, u32 dwDwordVal_p)
-{
-	((u8 *) pAddr_p)[0] = ((u8 *) & dwDwordVal_p)[2];
-	((u8 *) pAddr_p)[1] = ((u8 *) & dwDwordVal_p)[1];
-	((u8 *) pAddr_p)[2] = ((u8 *) & dwDwordVal_p)[0];
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetDword24ToLe()
-//
-// Description: sets a 24 bit value to a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              dwDwordVal_p    = value to set
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetDword24ToLe(void *pAddr_p, u32 dwDwordVal_p)
-{
-	((u8 *) pAddr_p)[0] = ((u8 *) & dwDwordVal_p)[0];
-	((u8 *) pAddr_p)[1] = ((u8 *) & dwDwordVal_p)[1];
-	((u8 *) pAddr_p)[2] = ((u8 *) & dwDwordVal_p)[2];
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetDword24FromBe()
-//
-// Description: reads a 24 bit value from a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u32           = read value
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-u32 AmiGetDword24FromBe(void *pAddr_p)
-{
-	tdwStruct dwStruct;
-
-	dwStruct.m_dwDword = AmiGetDwordFromBe(pAddr_p);
-	dwStruct.m_dwDword >>= 8;
-
-	return (dwStruct.m_dwDword);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetDword24FromLe()
-//
-// Description: reads a 24 bit value from a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u32           = read value
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-u32 AmiGetDword24FromLe(void *pAddr_p)
-{
-	tdwStruct dwStruct;
-
-	dwStruct.m_dwDword = AmiGetDwordFromLe(pAddr_p);
-	dwStruct.m_dwDword &= 0x00FFFFFF;
-
-	return (dwStruct.m_dwDword);
-}
-
-//#ifdef USE_VAR64
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword64ToBe()
-//
-// Description: sets a 64 bit value to a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-void AmiSetQword64ToBe(void *pAddr_p, u64 qwQwordVal_p)
-{
-	((u8 *) pAddr_p)[0] = ((u8 *) & qwQwordVal_p)[7];
-	((u8 *) pAddr_p)[1] = ((u8 *) & qwQwordVal_p)[6];
-	((u8 *) pAddr_p)[2] = ((u8 *) & qwQwordVal_p)[5];
-	((u8 *) pAddr_p)[3] = ((u8 *) & qwQwordVal_p)[4];
-	((u8 *) pAddr_p)[4] = ((u8 *) & qwQwordVal_p)[3];
-	((u8 *) pAddr_p)[5] = ((u8 *) & qwQwordVal_p)[2];
-	((u8 *) pAddr_p)[6] = ((u8 *) & qwQwordVal_p)[1];
-	((u8 *) pAddr_p)[7] = ((u8 *) & qwQwordVal_p)[0];
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword64ToLe()
-//
-// Description: sets a 64 bit value to a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-void AmiSetQword64ToLe(void *pAddr_p, u64 qwQwordVal_p)
-{
-	u64 *pqwDst;
-
-	pqwDst = (u64 *) pAddr_p;
-	*pqwDst = qwQwordVal_p;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword64FromBe()
-//
-// Description: reads a 64 bit value from a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-u64 AmiGetQword64FromBe(void *pAddr_p)
-{
-	tqwStruct qwStruct;
-
-	((u8 *) & qwStruct.m_qwQword)[0] = ((u8 *) pAddr_p)[7];
-	((u8 *) & qwStruct.m_qwQword)[1] = ((u8 *) pAddr_p)[6];
-	((u8 *) & qwStruct.m_qwQword)[2] = ((u8 *) pAddr_p)[5];
-	((u8 *) & qwStruct.m_qwQword)[3] = ((u8 *) pAddr_p)[4];
-	((u8 *) & qwStruct.m_qwQword)[4] = ((u8 *) pAddr_p)[3];
-	((u8 *) & qwStruct.m_qwQword)[5] = ((u8 *) pAddr_p)[2];
-	((u8 *) & qwStruct.m_qwQword)[6] = ((u8 *) pAddr_p)[1];
-	((u8 *) & qwStruct.m_qwQword)[7] = ((u8 *) pAddr_p)[0];
-
-	return (qwStruct.m_qwQword);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword64FromLe()
-//
-// Description: reads a 64 bit value from a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-u64 AmiGetQword64FromLe(void *pAddr_p)
-{
-	tqwStruct *pqwStruct;
-	tqwStruct qwStruct;
-
-	pqwStruct = (tqwStruct *) pAddr_p;
-	qwStruct.m_qwQword = pqwStruct->m_qwQword;
-
-	return (qwStruct.m_qwQword);
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword40ToBe()
-//
-// Description: sets a 40 bit value to a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword40ToBe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u8 *) pAddr_p)[0] = ((u8 *) & qwQwordVal_p)[4];
-	((u8 *) pAddr_p)[1] = ((u8 *) & qwQwordVal_p)[3];
-	((u8 *) pAddr_p)[2] = ((u8 *) & qwQwordVal_p)[2];
-	((u8 *) pAddr_p)[3] = ((u8 *) & qwQwordVal_p)[1];
-	((u8 *) pAddr_p)[4] = ((u8 *) & qwQwordVal_p)[0];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword40ToLe()
-//
-// Description: sets a 40 bit value to a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword40ToLe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u32 *) pAddr_p)[0] = ((u32 *) & qwQwordVal_p)[0];
-	((u8 *) pAddr_p)[4] = ((u8 *) & qwQwordVal_p)[4];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword40FromBe()
-//
-// Description: reads a 40 bit value from a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword40FromBe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
-	qwStruct.m_qwQword >>= 24;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword40FromLe()
-//
-// Description: reads a 40 bit value from a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword40FromLe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
-	qwStruct.m_qwQword &= 0x000000FFFFFFFFFFLL;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword48ToBe()
-//
-// Description: sets a 48 bit value to a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword48ToBe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u8 *) pAddr_p)[0] = ((u8 *) & qwQwordVal_p)[5];
-	((u8 *) pAddr_p)[1] = ((u8 *) & qwQwordVal_p)[4];
-	((u8 *) pAddr_p)[2] = ((u8 *) & qwQwordVal_p)[3];
-	((u8 *) pAddr_p)[3] = ((u8 *) & qwQwordVal_p)[2];
-	((u8 *) pAddr_p)[4] = ((u8 *) & qwQwordVal_p)[1];
-	((u8 *) pAddr_p)[5] = ((u8 *) & qwQwordVal_p)[0];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword48ToLe()
-//
-// Description: sets a 48 bit value to a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword48ToLe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u32 *) pAddr_p)[0] = ((u32 *) & qwQwordVal_p)[0];
-	((u16 *) pAddr_p)[2] = ((u16 *) & qwQwordVal_p)[2];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword48FromBe()
-//
-// Description: reads a 48 bit value from a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword48FromBe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
-	qwStruct.m_qwQword >>= 16;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword48FromLe()
-//
-// Description: reads a 48 bit value from a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword48FromLe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
-	qwStruct.m_qwQword &= 0x0000FFFFFFFFFFFFLL;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword56ToBe()
-//
-// Description: sets a 56 bit value to a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword56ToBe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u8 *) pAddr_p)[0] = ((u8 *) & qwQwordVal_p)[6];
-	((u8 *) pAddr_p)[1] = ((u8 *) & qwQwordVal_p)[5];
-	((u8 *) pAddr_p)[2] = ((u8 *) & qwQwordVal_p)[4];
-	((u8 *) pAddr_p)[3] = ((u8 *) & qwQwordVal_p)[3];
-	((u8 *) pAddr_p)[4] = ((u8 *) & qwQwordVal_p)[2];
-	((u8 *) pAddr_p)[5] = ((u8 *) & qwQwordVal_p)[1];
-	((u8 *) pAddr_p)[6] = ((u8 *) & qwQwordVal_p)[0];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetQword56ToLe()
-//
-// Description: sets a 56 bit value to a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              qwQwordVal_p    = quadruple word value
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetQword56ToLe(void *pAddr_p, u64 qwQwordVal_p)
-{
-
-	((u32 *) pAddr_p)[0] = ((u32 *) & qwQwordVal_p)[0];
-	((u16 *) pAddr_p)[2] = ((u16 *) & qwQwordVal_p)[2];
-	((u8 *) pAddr_p)[6] = ((u8 *) & qwQwordVal_p)[6];
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword56FromBe()
-//
-// Description: reads a 56 bit value from a buffer in big endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword56FromBe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
-	qwStruct.m_qwQword >>= 8;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetQword56FromLe()
-//
-// Description: reads a 56 bit value from a buffer in little endian
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//
-// Return:      u64
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-u64 AmiGetQword56FromLe(void *pAddr_p)
-{
-
-	tqwStruct qwStruct;
-
-	qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
-	qwStruct.m_qwQword &= 0x00FFFFFFFFFFFFFFLL;
-
-	return (qwStruct.m_qwQword);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiSetTimeOfDay()
-//
-// Description: sets a TIME_OF_DAY (CANopen) value to a buffer
-//
-// Parameters:  pAddr_p         = pointer to destination buffer
-//              pTimeOfDay_p    = pointer to struct TIME_OF_DAY
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiSetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p)
-{
-
-	AmiSetDwordToLe(((u8 *) pAddr_p), pTimeOfDay_p->m_dwMs & 0x0FFFFFFF);
-	AmiSetWordToLe(((u8 *) pAddr_p) + 4, pTimeOfDay_p->m_wDays);
-
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AmiGetTimeOfDay()
-//
-// Description: reads a TIME_OF_DAY (CANopen) value from a buffer
-//
-// Parameters:  pAddr_p         = pointer to source buffer
-//              pTimeOfDay_p    = pointer to struct TIME_OF_DAY
-//
-// Return:      void
-//
-// State:       not tested
-//
-//---------------------------------------------------------------------------
-
-void AmiGetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p)
-{
-
-	pTimeOfDay_p->m_dwMs = AmiGetDwordFromLe(((u8 *) pAddr_p)) & 0x0FFFFFFF;
-	pTimeOfDay_p->m_wDays = AmiGetWordFromLe(((u8 *) pAddr_p) + 4);
-
-}
-
-// EOF
-
-// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
-// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).
diff --git a/drivers/staging/epl/demo_main.c b/drivers/staging/epl/demo_main.c
deleted file mode 100644
index 7ad10fc..0000000
--- a/drivers/staging/epl/demo_main.c
+++ /dev/null
@@ -1,947 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  demoapplication for EPL MN (with SDO over UDP)
-                under Linux on X86 with RTL8139 Ethernet controller
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: demo_main.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.10 $  $Date: 2008/11/19 18:11:43 $
-
-                $State: Exp $
-
-                Build Environment:
-                GCC
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/09/01 d.k.:   start of implementation
-
-****************************************************************************/
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/major.h>
-#include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/atomic.h>
-#include <linux/sched.h>
-#include <linux/kmod.h>
-#include <linux/slab.h>
-#include <linux/pci.h>
-#include <linux/proc_fs.h>
-
-#include "Epl.h"
-#include "proc_fs.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-// Metainformation
-MODULE_LICENSE("Dual BSD/GPL");
-#ifdef MODULE_AUTHOR
-MODULE_AUTHOR("Daniel.Krueger@xxxxxxxxxxxxxxxxxxxxx");
-MODULE_DESCRIPTION("EPL MN demo");
-#endif
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-// TracePoint support for realtime-debugging
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)   TgtDbgSignalTracePoint(p)
-#else
-#define TGT_DBG_SIGNAL_TRACE_POINT(p)
-#endif
-
-#define NODEID      0xF0	//=> MN
-#define CYCLE_LEN   5000	// [us]
-#define IP_ADDR     0xc0a86401	// 192.168.100.1
-#define SUBNET_MASK 0xFFFFFF00	// 255.255.255.0
-#define HOSTNAME    "SYS TEC electronic EPL Stack    "
-#define IF_ETH      EPL_VETH_NAME
-
-// LIGHT EFFECT
-#define DEFAULT_MAX_CYCLE_COUNT 20	// 6 is very fast
-#define APP_DEFAULT_MODE        0x01
-#define APP_LED_COUNT           5	// number of LEDs in one row
-#define APP_LED_MASK            ((1 << APP_LED_COUNT) - 1)
-#define APP_DOUBLE_LED_MASK     ((1 << (APP_LED_COUNT * 2)) - 1)
-#define APP_MODE_COUNT          5
-#define APP_MODE_MASK           ((1 << APP_MODE_COUNT) - 1)
-
-//---------------------------------------------------------------------------
-// local types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// modul globale vars
-//---------------------------------------------------------------------------
-
-static const u8 abMacAddr[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-static u8 bVarIn1_l;
-static u8 bVarOut1_l;
-static u8 bVarOut1Old_l;
-static u8 bModeSelect_l;		// state of the pushbuttons to select the mode
-static u8 bSpeedSelect_l;		// state of the pushbuttons to increase/decrease the speed
-static u8 bSpeedSelectOld_l;		// old state of the pushbuttons
-static u32 dwLeds_l;			// current state of all LEDs
-static u8 bLedsRow1_l;		// current state of the LEDs in row 1
-static u8 bLedsRow2_l;		// current state of the LEDs in row 2
-static u8 abSelect_l[3];		// pushbuttons from CNs
-
-static u32 dwMode_l;			// current mode
-static int iCurCycleCount_l;		// current cycle count
-static int iMaxCycleCount_l;		// maximum cycle count (i.e. number of cycles until next light movement step)
-static int iToggle;			// indicates the light movement direction
-
-//static u8 abDomain_l[3000];
-
-static wait_queue_head_t WaitQueueShutdown_g;	// wait queue for tEplNmtEventSwitchOff
-static atomic_t AtomicShutdown_g = ATOMIC_INIT(FALSE);
-
-static u32 dw_le_CycleLen_g;
-
-static uint uiNodeId_g = EPL_C_ADR_INVALID;
-module_param_named(nodeid, uiNodeId_g, uint, 0);
-
-static uint uiCycleLen_g = CYCLE_LEN;
-module_param_named(cyclelen, uiCycleLen_g, uint, 0);
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-// This function is the entry point for your object dictionary. It is defined
-// in OBJDICT.C by define EPL_OBD_INIT_RAM_NAME. Use this function name to define
-// this function prototype here. If you want to use more than one Epl
-// instances then the function name of each object dictionary has to differ.
-
-tEplKernel EplObdInitRam(tEplObdInitParam *pInitParam_p);
-
-tEplKernel AppCbEvent(tEplApiEventType EventType_p,	// IN: event type (enum)
-		      tEplApiEventArg *pEventArg_p,	// IN: event argument (union)
-		      void *pUserArg_p);
-
-tEplKernel AppCbSync(void);
-
-
-//---------------------------------------------------------------------------
-//  Kernel Module specific Data Structures
-//---------------------------------------------------------------------------
-
-//module_init(EplLinInit);
-//module_exit(EplLinExit);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:
-//
-// Description:
-//
-//
-//
-// Parameters:
-//
-//
-// Returns:
-//
-//
-// State:
-//
-//---------------------------------------------------------------------------
-#if 0
-static int __init EplLinInit(void)
-{
-	tEplKernel EplRet;
-	int iRet;
-	static tEplApiInitParam EplApiInitParam = { 0 };
-	char *sHostname = HOSTNAME;
-	char *argv[4], *envp[3];
-	char sBuffer[16];
-	unsigned int uiVarEntries;
-	tEplObdSize ObdSize;
-
-	atomic_set(&AtomicShutdown_g, TRUE);
-
-	// get node ID from insmod command line
-	EplApiInitParam.m_uiNodeId = uiNodeId_g;
-
-	if (EplApiInitParam.m_uiNodeId == EPL_C_ADR_INVALID) {	// invalid node ID set
-		// set default node ID
-		EplApiInitParam.m_uiNodeId = NODEID;
-	}
-
-	uiNodeId_g = EplApiInitParam.m_uiNodeId;
-
-	// calculate IP address
-	EplApiInitParam.m_dwIpAddress =
-	    (0xFFFFFF00 & IP_ADDR) | EplApiInitParam.m_uiNodeId;
-
-	EplApiInitParam.m_fAsyncOnly = FALSE;
-
-	EplApiInitParam.m_uiSizeOfStruct = sizeof(EplApiInitParam);
-	EPL_MEMCPY(EplApiInitParam.m_abMacAddress, abMacAddr,
-		   sizeof(EplApiInitParam.m_abMacAddress));
-//	EplApiInitParam.m_abMacAddress[5] = (u8) EplApiInitParam.m_uiNodeId;
-	EplApiInitParam.m_dwFeatureFlags = -1;
-	EplApiInitParam.m_dwCycleLen = uiCycleLen_g;	// required for error detection
-	EplApiInitParam.m_uiIsochrTxMaxPayload = 100;	// const
-	EplApiInitParam.m_uiIsochrRxMaxPayload = 100;	// const
-	EplApiInitParam.m_dwPresMaxLatency = 50000;	// const; only required for IdentRes
-	EplApiInitParam.m_uiPreqActPayloadLimit = 36;	// required for initialisation (+28 bytes)
-	EplApiInitParam.m_uiPresActPayloadLimit = 36;	// required for initialisation of Pres frame (+28 bytes)
-	EplApiInitParam.m_dwAsndMaxLatency = 150000;	// const; only required for IdentRes
-	EplApiInitParam.m_uiMultiplCycleCnt = 0;	// required for error detection
-	EplApiInitParam.m_uiAsyncMtu = 1500;	// required to set up max frame size
-	EplApiInitParam.m_uiPrescaler = 2;	// required for sync
-	EplApiInitParam.m_dwLossOfFrameTolerance = 500000;
-	EplApiInitParam.m_dwAsyncSlotTimeout = 3000000;
-	EplApiInitParam.m_dwWaitSocPreq = 150000;
-	EplApiInitParam.m_dwDeviceType = -1;	// NMT_DeviceType_U32
-	EplApiInitParam.m_dwVendorId = -1;	// NMT_IdentityObject_REC.VendorId_U32
-	EplApiInitParam.m_dwProductCode = -1;	// NMT_IdentityObject_REC.ProductCode_U32
-	EplApiInitParam.m_dwRevisionNumber = -1;	// NMT_IdentityObject_REC.RevisionNo_U32
-	EplApiInitParam.m_dwSerialNumber = -1;	// NMT_IdentityObject_REC.SerialNo_U32
-	EplApiInitParam.m_dwSubnetMask = SUBNET_MASK;
-	EplApiInitParam.m_dwDefaultGateway = 0;
-	EPL_MEMCPY(EplApiInitParam.m_sHostname, sHostname,
-		   sizeof(EplApiInitParam.m_sHostname));
-
-	// currently unset parameters left at default value 0
-	//EplApiInitParam.m_qwVendorSpecificExt1;
-	//EplApiInitParam.m_dwVerifyConfigurationDate; // CFM_VerifyConfiguration_REC.ConfDate_U32
-	//EplApiInitParam.m_dwVerifyConfigurationTime; // CFM_VerifyConfiguration_REC.ConfTime_U32
-	//EplApiInitParam.m_dwApplicationSwDate;       // PDL_LocVerApplSw_REC.ApplSwDate_U32 on programmable device or date portion of NMT_ManufactSwVers_VS on non-programmable device
-	//EplApiInitParam.m_dwApplicationSwTime;       // PDL_LocVerApplSw_REC.ApplSwTime_U32 on programmable device or time portion of NMT_ManufactSwVers_VS on non-programmable device
-	//EplApiInitParam.m_abVendorSpecificExt2[48];
-
-	// set callback functions
-	EplApiInitParam.m_pfnCbEvent = AppCbEvent;
-	EplApiInitParam.m_pfnCbSync = AppCbSync;
-
-	printk
-	    ("\n\n Hello, I'm a simple POWERLINK node running as %s!\n  (build: %s / %s)\n\n",
-	     (uiNodeId_g ==
-	      EPL_C_ADR_MN_DEF_NODE_ID ? "Managing Node" : "Controlled Node"),
-	     __DATE__, __TIME__);
-
-	// initialize the Linux a wait queue for shutdown of this module
-	init_waitqueue_head(&WaitQueueShutdown_g);
-
-	// initialize the procfs device
-	EplRet = EplLinProcInit();
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-	// initialize POWERLINK stack
-	EplRet = EplApiInitialize(&EplApiInitParam);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-	// link process variables used by CN to object dictionary
-	ObdSize = sizeof(bVarIn1_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x6000, &bVarIn1_l, &uiVarEntries, &ObdSize, 0x01);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-	ObdSize = sizeof(bVarOut1_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x6200, &bVarOut1_l, &uiVarEntries, &ObdSize,
-			     0x01);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-	// link process variables used by MN to object dictionary
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	ObdSize = sizeof(bLedsRow1_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x2000, &bLedsRow1_l, &uiVarEntries, &ObdSize,
-			     0x01);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-	ObdSize = sizeof(bLedsRow2_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x2000, &bLedsRow2_l, &uiVarEntries, &ObdSize,
-			     0x02);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-	ObdSize = sizeof(bSpeedSelect_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x2000, &bSpeedSelect_l, &uiVarEntries, &ObdSize,
-			     0x03);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-	ObdSize = sizeof(bSpeedSelectOld_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x2000, &bSpeedSelectOld_l, &uiVarEntries,
-			     &ObdSize, 0x04);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-
-	ObdSize = sizeof(abSelect_l[0]);
-	uiVarEntries = sizeof(abSelect_l);
-	EplRet =
-	    EplApiLinkObject(0x2200, &abSelect_l[0], &uiVarEntries, &ObdSize,
-			     0x01);
-	if (EplRet != kEplSuccessful) {
-		goto Exit;
-	}
-#endif
-
-	// link a DOMAIN to object 0x6100, but do not exit, if it is missing
-	ObdSize = sizeof(abDomain_l);
-	uiVarEntries = 1;
-	EplRet =
-	    EplApiLinkObject(0x6100, &abDomain_l, &uiVarEntries, &ObdSize,
-			     0x00);
-	if (EplRet != kEplSuccessful) {
-		printk("EplApiLinkObject(0x6100): returns 0x%X\n", EplRet);
-	}
-	// reset old process variables
-	bVarOut1Old_l = 0;
-	bSpeedSelectOld_l = 0;
-	dwMode_l = APP_DEFAULT_MODE;
-	iMaxCycleCount_l = DEFAULT_MAX_CYCLE_COUNT;
-
-	// configure IP address of virtual network interface
-	// for TCP/IP communication over the POWERLINK network
-	sprintf(sBuffer, "%u.%u.%u.%u",
-		(EplApiInitParam.m_dwIpAddress >> 24),
-		((EplApiInitParam.m_dwIpAddress >> 16) & 0xFF),
-		((EplApiInitParam.m_dwIpAddress >> 8) & 0xFF),
-		(EplApiInitParam.m_dwIpAddress & 0xFF));
-	/* set up a minimal environment */
-	iRet = 0;
-	envp[iRet++] = "HOME=/";
-	envp[iRet++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
-	envp[iRet] = NULL;
-
-	/* set up the argument list */
-	iRet = 0;
-	argv[iRet++] = "/sbin/ifconfig";
-	argv[iRet++] = IF_ETH;
-	argv[iRet++] = sBuffer;
-	argv[iRet] = NULL;
-
-	/* call ifconfig to configure the virtual network interface */
-	iRet = call_usermodehelper(argv[0], argv, envp, 1);
-	printk("ifconfig %s %s returned %d\n", argv[1], argv[2], iRet);
-
-	// start the NMT state machine
-	EplRet = EplApiExecNmtCommand(kEplNmtEventSwReset);
-	atomic_set(&AtomicShutdown_g, FALSE);
-
-      Exit:
-	printk("EplLinInit(): returns 0x%X\n", EplRet);
-	return EplRet;
-}
-
-static void __exit EplLinExit(void)
-{
-	tEplKernel EplRet;
-
-	// halt the NMT state machine
-	// so the processing of POWERLINK frames stops
-	EplRet = EplApiExecNmtCommand(kEplNmtEventSwitchOff);
-
-	// wait until NMT state machine is shut down
-	wait_event_interruptible(WaitQueueShutdown_g,
-				 (atomic_read(&AtomicShutdown_g) == TRUE));
-/*    if ((iErr != 0) || (atomic_read(&AtomicShutdown_g) == EVENT_STATE_IOCTL))
-    {   // waiting was interrupted by signal or application called wrong function
-        EplRet = kEplShutdown;
-    }*/
-	// delete instance for all modules
-	EplRet = EplApiShutdown();
-	printk("EplApiShutdown():  0x%X\n", EplRet);
-
-	// deinitialize proc fs
-	EplRet = EplLinProcFree();
-	printk("EplLinProcFree():        0x%X\n", EplRet);
-
-}
-#endif
-//=========================================================================//
-//                                                                         //
-//          P R I V A T E   F U N C T I O N S                              //
-//                                                                         //
-//=========================================================================//
-
-//---------------------------------------------------------------------------
-//
-// Function:    AppCbEvent
-//
-// Description: event callback function called by EPL API layer within
-//              user part (low priority).
-//
-// Parameters:  EventType_p     = event type
-//              pEventArg_p     = pointer to union, which describes
-//                                the event in detail
-//              pUserArg_p      = user specific argument
-//
-// Returns:     tEplKernel      = error code,
-//                                kEplSuccessful = no error
-//                                kEplReject = reject further processing
-//                                otherwise = post error event to API layer
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel AppCbEvent(tEplApiEventType EventType_p,	// IN: event type (enum)
-		      tEplApiEventArg *pEventArg_p,	// IN: event argument (union)
-		      void *pUserArg_p)
-{
-	tEplKernel EplRet = kEplSuccessful;
-
-	// check if NMT_GS_OFF is reached
-	switch (EventType_p) {
-	case kEplApiEventNmtStateChange:
-		{
-			switch (pEventArg_p->m_NmtStateChange.m_NewNmtState) {
-			case kEplNmtGsOff:
-				{	// NMT state machine was shut down,
-					// because of user signal (CTRL-C) or critical EPL stack error
-					// -> also shut down EplApiProcess() and main()
-					EplRet = kEplShutdown;
-
-					printk
-					    ("AppCbEvent(kEplNmtGsOff) originating event = 0x%X\n",
-					     pEventArg_p->m_NmtStateChange.
-					     m_NmtEvent);
-
-					// wake up EplLinExit()
-					atomic_set(&AtomicShutdown_g, TRUE);
-					wake_up_interruptible
-					    (&WaitQueueShutdown_g);
-					break;
-				}
-
-			case kEplNmtGsResetCommunication:
-				{
-					u32 dwBuffer;
-
-					// configure OD for MN in state ResetComm after reseting the OD
-					// TODO: setup your own network configuration here
-					dwBuffer = (EPL_NODEASSIGN_NODE_IS_CN | EPL_NODEASSIGN_NODE_EXISTS);	// 0x00000003L
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x01,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x02,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x03,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x04,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x05,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x06,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x07,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x08,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x20,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0xFE,
-								   &dwBuffer,
-								   4);
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0x6E,
-								   &dwBuffer,
-								   4);
-
-//                    dwBuffer |= EPL_NODEASSIGN_MANDATORY_CN;    // 0x0000000BL
-//                    EplRet = EplApiWriteLocalObject(0x1F81, 0x6E, &dwBuffer, 4);
-					dwBuffer = (EPL_NODEASSIGN_MN_PRES | EPL_NODEASSIGN_NODE_EXISTS);	// 0x00010001L
-					EplRet =
-					    EplApiWriteLocalObject(0x1F81, 0xF0,
-								   &dwBuffer,
-								   4);
-
-					// continue
-				}
-
-			case kEplNmtGsResetConfiguration:
-				{
-					unsigned int uiSize;
-
-					// fetch object 0x1006 NMT_CycleLen_U32 from local OD (in little endian byte order)
-					// for configuration of remote CN
-					uiSize = 4;
-					EplRet =
-					    EplApiReadObject(NULL, 0, 0x1006,
-							     0x00,
-							     &dw_le_CycleLen_g,
-							     &uiSize,
-							     kEplSdoTypeAsnd,
-							     NULL);
-					if (EplRet != kEplSuccessful) {	// local OD access failed
-						break;
-					}
-					// continue
-				}
-
-			case kEplNmtMsPreOperational1:
-				{
-					printk
-					    ("AppCbEvent(0x%X) originating event = 0x%X\n",
-					     pEventArg_p->m_NmtStateChange.
-					     m_NewNmtState,
-					     pEventArg_p->m_NmtStateChange.
-					     m_NmtEvent);
-
-					// continue
-				}
-
-			case kEplNmtGsInitialising:
-			case kEplNmtGsResetApplication:
-			case kEplNmtMsNotActive:
-			case kEplNmtCsNotActive:
-			case kEplNmtCsPreOperational1:
-				{
-					break;
-				}
-
-			case kEplNmtCsOperational:
-			case kEplNmtMsOperational:
-				{
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-
-/*
-            switch (pEventArg_p->m_NmtStateChange.m_NmtEvent)
-            {
-                case kEplNmtEventSwReset:
-                case kEplNmtEventResetNode:
-                case kEplNmtEventResetCom:
-                case kEplNmtEventResetConfig:
-                case kEplNmtEventInternComError:
-                case kEplNmtEventNmtCycleError:
-                {
-                    printk("AppCbEvent(0x%X) originating event = 0x%X\n",
-                           pEventArg_p->m_NmtStateChange.m_NewNmtState,
-                           pEventArg_p->m_NmtStateChange.m_NmtEvent);
-                    break;
-                }
-
-                default:
-                {
-                    break;
-                }
-            }
-*/
-			break;
-		}
-
-	case kEplApiEventCriticalError:
-	case kEplApiEventWarning:
-		{		// error or warning occured within the stack or the application
-			// on error the API layer stops the NMT state machine
-
-			printk
-			    ("AppCbEvent(Err/Warn): Source=%02X EplError=0x%03X",
-			     pEventArg_p->m_InternalError.m_EventSource,
-			     pEventArg_p->m_InternalError.m_EplError);
-			// check additional argument
-			switch (pEventArg_p->m_InternalError.m_EventSource) {
-			case kEplEventSourceEventk:
-			case kEplEventSourceEventu:
-				{	// error occured within event processing
-					// either in kernel or in user part
-					printk(" OrgSource=%02X\n",
-					       pEventArg_p->m_InternalError.
-					       m_Arg.m_EventSource);
-					break;
-				}
-
-			case kEplEventSourceDllk:
-				{	// error occured within the data link layer (e.g. interrupt processing)
-					// the u32 argument contains the DLL state and the NMT event
-					printk(" val=%X\n",
-					       pEventArg_p->m_InternalError.
-					       m_Arg.m_dwArg);
-					break;
-				}
-
-			default:
-				{
-					printk("\n");
-					break;
-				}
-			}
-			break;
-		}
-
-	case kEplApiEventNode:
-		{
-//            printk("AppCbEvent(Node): Source=%02X EplError=0x%03X", pEventArg_p->m_InternalError.m_EventSource, pEventArg_p->m_InternalError.m_EplError);
-			// check additional argument
-			switch (pEventArg_p->m_Node.m_NodeEvent) {
-			case kEplNmtNodeEventCheckConf:
-				{
-					tEplSdoComConHdl SdoComConHdl;
-					// update object 0x1006 on CN
-					EplRet =
-					    EplApiWriteObject(&SdoComConHdl,
-							      pEventArg_p->
-							      m_Node.m_uiNodeId,
-							      0x1006, 0x00,
-							      &dw_le_CycleLen_g,
-							      4,
-							      kEplSdoTypeAsnd,
-							      NULL);
-					if (EplRet == kEplApiTaskDeferred) {	// SDO transfer started
-						EplRet = kEplReject;
-					} else if (EplRet == kEplSuccessful) {	// local OD access (should not occur)
-						printk
-						    ("AppCbEvent(Node) write to local OD\n");
-					} else {	// error occured
-						TGT_DBG_SIGNAL_TRACE_POINT(1);
-
-						EplRet =
-						    EplApiFreeSdoChannel
-						    (SdoComConHdl);
-						SdoComConHdl = 0;
-
-						EplRet =
-						    EplApiWriteObject
-						    (&SdoComConHdl,
-						     pEventArg_p->m_Node.
-						     m_uiNodeId, 0x1006, 0x00,
-						     &dw_le_CycleLen_g, 4,
-						     kEplSdoTypeAsnd, NULL);
-						if (EplRet == kEplApiTaskDeferred) {	// SDO transfer started
-							EplRet = kEplReject;
-						} else {
-							printk
-							    ("AppCbEvent(Node): EplApiWriteObject() returned 0x%02X\n",
-							     EplRet);
-						}
-					}
-
-					break;
-				}
-
-			default:
-				{
-					break;
-				}
-			}
-			break;
-		}
-
-	case kEplApiEventSdo:
-		{		// SDO transfer finished
-			EplRet =
-			    EplApiFreeSdoChannel(pEventArg_p->m_Sdo.
-						 m_SdoComConHdl);
-			if (EplRet != kEplSuccessful) {
-				break;
-			}
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-			if (pEventArg_p->m_Sdo.m_SdoComConState == kEplSdoComTransferFinished) {	// continue boot-up of CN with NMT command Reset Configuration
-				EplRet =
-				    EplApiMnTriggerStateChange(pEventArg_p->
-							       m_Sdo.m_uiNodeId,
-							       kEplNmtNodeCommandConfReset);
-			} else {	// indicate configuration error CN
-				EplRet =
-				    EplApiMnTriggerStateChange(pEventArg_p->
-							       m_Sdo.m_uiNodeId,
-							       kEplNmtNodeCommandConfErr);
-			}
-#endif
-
-			break;
-		}
-
-	default:
-		break;
-	}
-
-	return EplRet;
-}
-
-//---------------------------------------------------------------------------
-//
-// Function:    AppCbSync
-//
-// Description: sync event callback function called by event module within
-//              kernel part (high priority).
-//              This function sets the outputs, reads the inputs and runs
-//              the control loop.
-//
-// Parameters:  void
-//
-// Returns:     tEplKernel      = error code,
-//                                kEplSuccessful = no error
-//                                otherwise = post error event to API layer
-//
-// State:
-//
-//---------------------------------------------------------------------------
-
-tEplKernel AppCbSync(void)
-{
-	tEplKernel EplRet = kEplSuccessful;
-
-	if (bVarOut1Old_l != bVarOut1_l) {	// output variable has changed
-		bVarOut1Old_l = bVarOut1_l;
-		// set LEDs
-
-//        printk("bVarIn = 0x%02X bVarOut = 0x%02X\n", (u16) bVarIn_l, (u16) bVarOut_l);
-	}
-	if (uiNodeId_g != EPL_C_ADR_MN_DEF_NODE_ID) {
-		bVarIn1_l++;
-	}
-
-	if (uiNodeId_g == EPL_C_ADR_MN_DEF_NODE_ID) {	// we are the master and must run the control loop
-
-		// collect inputs from CNs and own input
-		bSpeedSelect_l = (bVarIn1_l | abSelect_l[0]) & 0x07;
-
-		bModeSelect_l = abSelect_l[1] | abSelect_l[2];
-
-		if ((bModeSelect_l & APP_MODE_MASK) != 0) {
-			dwMode_l = bModeSelect_l & APP_MODE_MASK;
-		}
-
-		iCurCycleCount_l--;
-
-		if (iCurCycleCount_l <= 0) {
-			if ((dwMode_l & 0x01) != 0) {	// fill-up
-				if (iToggle) {
-					if ((dwLeds_l & APP_DOUBLE_LED_MASK) ==
-					    0x00) {
-						dwLeds_l = 0x01;
-					} else {
-						dwLeds_l <<= 1;
-						dwLeds_l++;
-						if (dwLeds_l >=
-						    APP_DOUBLE_LED_MASK) {
-							iToggle = 0;
-						}
-					}
-				} else {
-					dwLeds_l <<= 1;
-					if ((dwLeds_l & APP_DOUBLE_LED_MASK) ==
-					    0x00) {
-						iToggle = 1;
-					}
-				}
-				bLedsRow1_l =
-				    (unsigned char)(dwLeds_l & APP_LED_MASK);
-				bLedsRow2_l =
-				    (unsigned char)((dwLeds_l >> APP_LED_COUNT)
-						    & APP_LED_MASK);
-			}
-
-			else if ((dwMode_l & 0x02) != 0) {	// running light forward
-				dwLeds_l <<= 1;
-				if ((dwLeds_l > APP_DOUBLE_LED_MASK)
-				    || (dwLeds_l == 0x00000000L)) {
-					dwLeds_l = 0x01;
-				}
-				bLedsRow1_l =
-				    (unsigned char)(dwLeds_l & APP_LED_MASK);
-				bLedsRow2_l =
-				    (unsigned char)((dwLeds_l >> APP_LED_COUNT)
-						    & APP_LED_MASK);
-			}
-
-			else if ((dwMode_l & 0x04) != 0) {	// running light backward
-				dwLeds_l >>= 1;
-				if ((dwLeds_l > APP_DOUBLE_LED_MASK)
-				    || (dwLeds_l == 0x00000000L)) {
-					dwLeds_l = 1 << (APP_LED_COUNT * 2);
-				}
-				bLedsRow1_l =
-				    (unsigned char)(dwLeds_l & APP_LED_MASK);
-				bLedsRow2_l =
-				    (unsigned char)((dwLeds_l >> APP_LED_COUNT)
-						    & APP_LED_MASK);
-			}
-
-			else if ((dwMode_l & 0x08) != 0) {	// Knightrider
-				if (bLedsRow1_l == 0x00) {
-					bLedsRow1_l = 0x01;
-					iToggle = 1;
-				} else if (iToggle) {
-					bLedsRow1_l <<= 1;
-					if (bLedsRow1_l >=
-					    (1 << (APP_LED_COUNT - 1))) {
-						iToggle = 0;
-					}
-				} else {
-					bLedsRow1_l >>= 1;
-					if (bLedsRow1_l <= 0x01) {
-						iToggle = 1;
-					}
-				}
-				bLedsRow2_l = bLedsRow1_l;
-			}
-
-			else if ((dwMode_l & 0x10) != 0) {	// Knightrider
-				if ((bLedsRow1_l == 0x00)
-				    || (bLedsRow2_l == 0x00)
-				    || ((bLedsRow2_l & ~APP_LED_MASK) != 0)) {
-					bLedsRow1_l = 0x01;
-					bLedsRow2_l =
-					    (1 << (APP_LED_COUNT - 1));
-					iToggle = 1;
-				} else if (iToggle) {
-					bLedsRow1_l <<= 1;
-					bLedsRow2_l >>= 1;
-					if (bLedsRow1_l >=
-					    (1 << (APP_LED_COUNT - 1))) {
-						iToggle = 0;
-					}
-				} else {
-					bLedsRow1_l >>= 1;
-					bLedsRow2_l <<= 1;
-					if (bLedsRow1_l <= 0x01) {
-						iToggle = 1;
-					}
-				}
-			}
-			// set own output
-			bVarOut1_l = bLedsRow1_l;
-//            bVarOut1_l = (bLedsRow1_l & 0x03) | (bLedsRow2_l << 2);
-
-			// restart cycle counter
-			iCurCycleCount_l = iMaxCycleCount_l;
-		}
-
-		if (bSpeedSelectOld_l == 0) {
-			if ((bSpeedSelect_l & 0x01) != 0) {
-				if (iMaxCycleCount_l < 200) {
-					iMaxCycleCount_l++;
-				}
-				bSpeedSelectOld_l = bSpeedSelect_l;
-			} else if ((bSpeedSelect_l & 0x02) != 0) {
-				if (iMaxCycleCount_l > 1) {
-					iMaxCycleCount_l--;
-				}
-				bSpeedSelectOld_l = bSpeedSelect_l;
-			} else if ((bSpeedSelect_l & 0x04) != 0) {
-				iMaxCycleCount_l = DEFAULT_MAX_CYCLE_COUNT;
-				bSpeedSelectOld_l = bSpeedSelect_l;
-			}
-		} else if (bSpeedSelect_l == 0) {
-			bSpeedSelectOld_l = 0;
-		}
-	}
-
-	TGT_DBG_SIGNAL_TRACE_POINT(1);
-
-	return EplRet;
-}
-
-// EOF
diff --git a/drivers/staging/epl/edrv.h b/drivers/staging/epl/edrv.h
deleted file mode 100644
index 62b4e77..0000000
--- a/drivers/staging/epl/edrv.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  interface for ethernetdriver
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: edrv.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                Dev C++ and GNU-Compiler for m68k
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2005/08/01 m.b.:   start of implementation
-
-****************************************************************************/
-
-#ifndef _EDRV_H_
-#define _EDRV_H_
-
-#include "EplInc.h"
-#include "EplFrame.h"
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-// --------------------------------------------------------------------------
-#define MAX_ETH_DATA_SIZE       1500
-#define MIN_ETH_DATA_SIZE         46
-
-#define ETH_HDR_OFFSET 	 0	// Ethernet header at the top of the frame
-#define ETH_HDR_SIZE	14	// size of Ethernet header
-#define MIN_ETH_SIZE     (MIN_ETH_DATA_SIZE + ETH_HDR_SIZE)	// without CRC
-
-#define ETH_CRC_SIZE	 4	// size of Ethernet CRC, i.e. FCS
-
-//---------------------------------------------------------------------------
-// types
-//---------------------------------------------------------------------------
-
-// position of a buffer in an ethernet-frame
-typedef enum {
-	kEdrvBufferFirstInFrame = 0x01,	// first data buffer in an ethernet frame
-	kEdrvBufferMiddleInFrame = 0x02,	// a middle data buffer in an ethernet frame
-	kEdrvBufferLastInFrame = 0x04	// last data buffer in an ethernet frame
-} tEdrvBufferInFrame;
-
-// format of a tx-buffer
-typedef struct _tEdrvTxBuffer {
-	tEplMsgType m_EplMsgType;	// IN: type of EPL message, set by calling function
-	unsigned int m_uiTxMsgLen;	// IN: length of message to be send (set for each transmit call)
-	// ----------------------
-	unsigned int m_uiBufferNumber;	// OUT: number of the buffer, set by ethernetdriver
-	u8 *m_pbBuffer;	// OUT: pointer to the buffer, set by ethernetdriver
-	tEplNetTime m_NetTime;	// OUT: Timestamp of end of transmission, set by ethernetdriver
-	// ----------------------
-	unsigned int m_uiMaxBufferLen;	// IN/OUT: maximum length of the buffer
-} tEdrvTxBuffer;
-
-// format of a rx-buffer
-typedef struct _tEdrvRxBuffer {
-	tEdrvBufferInFrame m_BufferInFrame;	// OUT position of received buffer in an ethernet-frame
-	unsigned int m_uiRxMsgLen;	// OUT: length of received buffer (without CRC)
-	u8 *m_pbBuffer;	// OUT: pointer to the buffer, set by ethernetdriver
-	tEplNetTime m_NetTime;	// OUT: Timestamp of end of receiption
-
-} tEdrvRxBuffer;
-
-//typedef void (*tEdrvRxHandler) (u8 bBufferInFrame_p, tBufferDescr * pbBuffer_p);
-//typedef void (*tEdrvRxHandler) (u8 bBufferInFrame_p, u8 * pbEthernetData_p, u16 wDataLen_p);
-typedef void (*tEdrvRxHandler) (tEdrvRxBuffer * pRxBuffer_p);
-typedef void (*tEdrvTxHandler) (tEdrvTxBuffer * pTxBuffer_p);
-
-// format of init structure
-typedef struct {
-	u8 m_abMyMacAddr[6];	// the own MAC address
-
-//    u8            m_bNoOfRxBuffDescr;     // number of entries in rx bufferdescriptor table
-//    tBufferDescr *  m_pRxBuffDescrTable;    // rx bufferdescriptor table
-//    u16            m_wRxBufferSize;        // size of the whole rx buffer
-
-	tEdrvRxHandler m_pfnRxHandler;
-	tEdrvTxHandler m_pfnTxHandler;
-
-} tEdrvInitParam;
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-tEplKernel EdrvInit(tEdrvInitParam * pEdrvInitParam_p);
-
-tEplKernel EdrvShutdown(void);
-
-tEplKernel EdrvDefineRxMacAddrEntry(u8 * pbMacAddr_p);
-tEplKernel EdrvUndefineRxMacAddrEntry(u8 * pbMacAddr_p);
-
-//tEplKernel EdrvDefineUnicastEntry     (u8 * pbUCEntry_p);
-//tEplKernel EdrvUndfineUnicastEntry    (u8 * pbUCEntry_p);
-
-tEplKernel EdrvAllocTxMsgBuffer(tEdrvTxBuffer * pBuffer_p);
-tEplKernel EdrvReleaseTxMsgBuffer(tEdrvTxBuffer * pBuffer_p);
-
-//tEplKernel EdrvWriteMsg               (tBufferDescr * pbBuffer_p);
-tEplKernel EdrvSendTxMsg(tEdrvTxBuffer * pBuffer_p);
-tEplKernel EdrvTxMsgReady(tEdrvTxBuffer * pBuffer_p);
-tEplKernel EdrvTxMsgStart(tEdrvTxBuffer * pBuffer_p);
-
-//tEplKernel EdrvReadMsg                (void);
-
-// interrupt handler called by target specific interrupt handler
-void EdrvInterruptHandler(void);
-
-#endif // #ifndef _EDRV_H_
diff --git a/drivers/staging/epl/global.h b/drivers/staging/epl/global.h
deleted file mode 100644
index 8c52d97..0000000
--- a/drivers/staging/epl/global.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-
-    global project definition file
-
-    12.06.1998   -rs
-    11.02.2002   r.d. Erweiterungen, Ergaenzungen
-    20.08.2002   SYS TEC electronic -as
-                 Definition Schluesselwort 'GENERIC'
-                 fuer das Erzeugen von Generic Pointer
-    28.08.2002   r.d. erweiterter SYS TEC Debug Code
-    16.09.2002   r.d. komplette Uebersetzung in Englisch
-    11.04.2003   f.j. Ergaenzung fuer Mitsubishi NC30 Compiler
-    17.06.2003   -rs  Definition von Basistypen in <#ifndef _WINDEF_> gesetzt
-    16.04.2004   r.d. Ergaenzung fuer Borland C++ Builder
-    30.08.2004   -rs  TRACE5 eingefügt
-    23.12.2005   d.k. Definitions for IAR compiler
-
-    $Id: global.h,v 1.6 2008/11/07 13:55:56 D.Krueger Exp $
-
-****************************************************************************/
-
-#ifndef _GLOBAL_H_
-#define _GLOBAL_H_
-
-
-#define TRACE  printk
-
-// --- logic types ---
-#ifndef BOOL
-#define BOOL unsigned char
-#endif
-
-// --- alias types ---
-#ifndef TRUE
-#define TRUE  0xFF
-#endif
-#ifndef FALSE
-#define FALSE 0x00
-#endif
-#ifndef _TIME_OF_DAY_DEFINED_
-typedef struct {
-	unsigned long int m_dwMs;
-	unsigned short int m_wDays;
-
-} tTimeOfDay;
-
-#define _TIME_OF_DAY_DEFINED_
-
-#endif
-
-//---------------------------------------------------------------------------
-//  Definition von TRACE
-//---------------------------------------------------------------------------
-
-#ifndef NDEBUG
-
-#ifndef TRACE0
-#define TRACE0(p0)                      TRACE(p0)
-#endif
-
-#ifndef TRACE1
-#define TRACE1(p0, p1)                  TRACE(p0, p1)
-#endif
-
-#ifndef TRACE2
-#define TRACE2(p0, p1, p2)              TRACE(p0, p1, p2)
-#endif
-
-#ifndef TRACE3
-#define TRACE3(p0, p1, p2, p3)          TRACE(p0, p1, p2, p3)
-#endif
-
-#ifndef TRACE4
-#define TRACE4(p0, p1, p2, p3, p4)      TRACE(p0, p1, p2, p3, p4)
-#endif
-
-#ifndef TRACE5
-#define TRACE5(p0, p1, p2, p3, p4, p5)  TRACE(p0, p1, p2, p3, p4, p5)
-#endif
-
-#ifndef TRACE6
-#define TRACE6(p0, p1, p2, p3, p4, p5, p6)  TRACE(p0, p1, p2, p3, p4, p5, p6)
-#endif
-
-#else
-
-#ifndef TRACE0
-#define TRACE0(p0)
-#endif
-
-#ifndef TRACE1
-#define TRACE1(p0, p1)
-#endif
-
-#ifndef TRACE2
-#define TRACE2(p0, p1, p2)
-#endif
-
-#ifndef TRACE3
-#define TRACE3(p0, p1, p2, p3)
-#endif
-
-#ifndef TRACE4
-#define TRACE4(p0, p1, p2, p3, p4)
-#endif
-
-#ifndef TRACE5
-#define TRACE5(p0, p1, p2, p3, p4, p5)
-#endif
-
-#ifndef TRACE6
-#define TRACE6(p0, p1, p2, p3, p4, p5, p6)
-#endif
-
-#endif
-
-//---------------------------------------------------------------------------
-//  definition of ASSERT
-//---------------------------------------------------------------------------
-
-#ifndef ASSERT
-#define ASSERT(p)
-#endif
-
-//---------------------------------------------------------------------------
-//  SYS TEC extensions
-//---------------------------------------------------------------------------
-
-// This macro doesn't print out C-file and line number of the failed assertion
-// but a string, which exactly names the mistake.
-#ifndef NDEBUG
-
-#define ASSERTMSG(expr,string)  if (!(expr)) {\
-                                        PRINTF0 ("Assertion failed: " string );\
-                                        while (1);}
-#else
-#define ASSERTMSG(expr,string)
-#endif
-
-//---------------------------------------------------------------------------
-
-#endif // #ifndef _GLOBAL_H_
-
-// Please keep an empty line at the end of this file.
diff --git a/drivers/staging/epl/kernel/EplDllk.h b/drivers/staging/epl/kernel/EplDllk.h
deleted file mode 100644
index a97920a..0000000
--- a/drivers/staging/epl/kernel/EplDllk.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernelspace DLL module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/08 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLLK_H_
-#define _EPL_DLLK_H_
-
-#include "../EplDll.h"
-#include "../EplEvent.h"
-
-typedef tEplKernel(*tEplDllkCbAsync) (tEplFrameInfo * pFrameInfo_p);
-
-typedef struct {
-	u8 m_be_abSrcMac[6];
-
-} tEplDllkInitParam;
-
-// forward declaration
-struct _tEdrvTxBuffer;
-
-struct _tEplDllkNodeInfo {
-	struct _tEplDllkNodeInfo *m_pNextNodeInfo;
-	struct _tEdrvTxBuffer *m_pPreqTxBuffer;
-	unsigned int m_uiNodeId;
-	u32 m_dwPresTimeout;
-	unsigned long m_ulDllErrorEvents;
-	tEplNmtState m_NmtState;
-	u16 m_wPresPayloadLimit;
-	u8 m_be_abMacAddr[6];
-	u8 m_bSoaFlag1;
-	BOOL m_fSoftDelete;	// delete node after error and ignore error
-
-};
-
-typedef struct _tEplDllkNodeInfo tEplDllkNodeInfo;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-tEplKernel EplDllkAddInstance(tEplDllkInitParam * pInitParam_p);
-
-tEplKernel EplDllkDelInstance(void);
-
-// called before NMT_GS_COMMUNICATING will be entered to configure fixed parameters
-tEplKernel EplDllkConfig(tEplDllConfigParam * pDllConfigParam_p);
-
-// set identity of local node (may be at any time, e.g. in case of hostname change)
-tEplKernel EplDllkSetIdentity(tEplDllIdentParam * pDllIdentParam_p);
-
-// process internal events and do work that cannot be done in interrupt-context
-tEplKernel EplDllkProcess(tEplEvent * pEvent_p);
-
-// registers handler for non-EPL frames
-tEplKernel EplDllkRegAsyncHandler(tEplDllkCbAsync pfnDllkCbAsync_p);
-
-// deregisters handler for non-EPL frames
-tEplKernel EplDllkDeregAsyncHandler(tEplDllkCbAsync pfnDllkCbAsync_p);
-
-// register C_DLL_MULTICAST_ASND in ethernet driver if any AsndServiceId is registered
-tEplKernel EplDllkSetAsndServiceIdFilter(tEplDllAsndServiceId ServiceId_p,
-					 tEplDllAsndFilter Filter_p);
-
-// creates the buffer for a Tx frame and registers it to the ethernet driver
-tEplKernel EplDllkCreateTxFrame(unsigned int *puiHandle_p,
-				tEplFrame ** ppFrame_p,
-				unsigned int *puiFrameSize_p,
-				tEplMsgType MsgType_p,
-				tEplDllAsndServiceId ServiceId_p);
-
-tEplKernel EplDllkDeleteTxFrame(unsigned int uiHandle_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-tEplKernel EplDllkAddNode(tEplDllNodeInfo * pNodeInfo_p);
-
-tEplKernel EplDllkDeleteNode(unsigned int uiNodeId_p);
-
-tEplKernel EplDllkSoftDeleteNode(unsigned int uiNodeId_p);
-
-tEplKernel EplDllkSetFlag1OfNode(unsigned int uiNodeId_p, u8 bSoaFlag1_p);
-
-tEplKernel EplDllkGetFirstNodeInfo(tEplDllkNodeInfo ** ppNodeInfo_p);
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-#endif // #ifndef _EPL_DLLK_H_
diff --git a/drivers/staging/epl/kernel/EplDllkCal.h b/drivers/staging/epl/kernel/EplDllkCal.h
deleted file mode 100644
index ddec1d5..0000000
--- a/drivers/staging/epl/kernel/EplDllkCal.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernelspace DLL Communication Abstraction Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllkCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/11/13 17:13:09 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/13 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLLKCAL_H_
-#define _EPL_DLLKCAL_H_
-
-#include "../EplDll.h"
-#include "../EplEvent.h"
-
-typedef struct {
-	unsigned long m_ulCurTxFrameCountGen;
-	unsigned long m_ulCurTxFrameCountNmt;
-	unsigned long m_ulCurRxFrameCount;
-	unsigned long m_ulMaxTxFrameCountGen;
-	unsigned long m_ulMaxTxFrameCountNmt;
-	unsigned long m_ulMaxRxFrameCount;
-
-} tEplDllkCalStatistics;
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-tEplKernel EplDllkCalAddInstance(void);
-
-tEplKernel EplDllkCalDelInstance(void);
-
-tEplKernel EplDllkCalAsyncGetTxCount(tEplDllAsyncReqPriority * pPriority_p,
-				     unsigned int *puiCount_p);
-tEplKernel EplDllkCalAsyncGetTxFrame(void *pFrame_p,
-				     unsigned int *puiFrameSize_p,
-				     tEplDllAsyncReqPriority Priority_p);
-// only frames with registered AsndServiceIds are passed to CAL
-tEplKernel EplDllkCalAsyncFrameReceived(tEplFrameInfo * pFrameInfo_p);
-
-tEplKernel EplDllkCalAsyncSend(tEplFrameInfo * pFrameInfo_p,
-			       tEplDllAsyncReqPriority Priority_p);
-
-tEplKernel EplDllkCalAsyncClearBuffer(void);
-
-tEplKernel EplDllkCalGetStatistics(tEplDllkCalStatistics ** ppStatistics);
-
-tEplKernel EplDllkCalProcess(tEplEvent * pEvent_p);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-tEplKernel EplDllkCalAsyncClearQueues(void);
-
-tEplKernel EplDllkCalIssueRequest(tEplDllReqServiceId Service_p,
-				  unsigned int uiNodeId_p, u8 bSoaFlag1_p);
-
-tEplKernel EplDllkCalAsyncGetSoaRequest(tEplDllReqServiceId * pReqServiceId_p,
-					unsigned int *puiNodeId_p);
-
-tEplKernel EplDllkCalAsyncSetPendingRequests(unsigned int uiNodeId_p,
-					     tEplDllAsyncReqPriority
-					     AsyncReqPrio_p,
-					     unsigned int uiCount_p);
-
-#endif //(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
-
-#endif // #ifndef _EPL_DLLKCAL_H_
diff --git a/drivers/staging/epl/kernel/EplErrorHandlerk.h b/drivers/staging/epl/kernel/EplErrorHandlerk.h
deleted file mode 100644
index 185b597..0000000
--- a/drivers/staging/epl/kernel/EplErrorHandlerk.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernel error handler module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplErrorHandlerk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/10/02 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_ERRORHANDLERK_H_
-#define _EPL_ERRORHANDLERK_H_
-
-#include "../EplEvent.h"
-
-// init function
-tEplKernel EplErrorHandlerkInit(void);
-
-// add instance
-tEplKernel EplErrorHandlerkAddInstance(void);
-
-// delete instance
-tEplKernel EplErrorHandlerkDelInstance(void);
-
-// processes error events
-tEplKernel EplErrorHandlerkProcess(tEplEvent *pEvent_p);
-
-#endif // #ifndef _EPL_ERRORHANDLERK_H_
diff --git a/drivers/staging/epl/kernel/EplEventk.h b/drivers/staging/epl/kernel/EplEventk.h
deleted file mode 100644
index 0c2a60f..0000000
--- a/drivers/staging/epl/kernel/EplEventk.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernel event module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplEventk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/12 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_EVENTK_H_
-#define _EPL_EVENTK_H_
-
-#include "../EplEvent.h"
-
-// init function
-tEplKernel EplEventkInit(tEplSyncCb fpSyncCb);
-
-// add instance
-tEplKernel EplEventkAddInstance(tEplSyncCb fpSyncCb);
-
-// delete instance
-tEplKernel EplEventkDelInstance(void);
-
-// Kernelthread that dispatches events in kernelspace
-tEplKernel EplEventkProcess(tEplEvent *pEvent_p);
-
-// post events from kernelspace
-tEplKernel EplEventkPost(tEplEvent *pEvent_p);
-
-// post errorevents from kernelspace
-tEplKernel EplEventkPostError(tEplEventSource EventSource_p,
-			      tEplKernel EplError_p,
-			      unsigned int uiArgSize_p, void *pArg_p);
-
-#endif // #ifndef _EPL_EVENTK_H_
diff --git a/drivers/staging/epl/kernel/EplNmtk.h b/drivers/staging/epl/kernel/EplNmtk.h
deleted file mode 100644
index 5dc8a37..0000000
--- a/drivers/staging/epl/kernel/EplNmtk.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for NMT-Kernelspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMTK_H_
-#define _EPLNMTK_H_
-
-#include "../EplNmt.h"
-#include "EplEventk.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-tEplKernel EplNmtkInit(EPL_MCO_DECL_PTR_INSTANCE_PTR);
-
-tEplKernel EplNmtkAddInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR);
-
-tEplKernel EplNmtkDelInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR);
-
-tEplKernel EplNmtkProcess(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplEvent *pEvent_p);
-
-tEplNmtState EplNmtkGetNmtState(EPL_MCO_DECL_PTR_INSTANCE_PTR);
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTK)) != 0)
-
-#endif // #ifndef _EPLNMTK_H_
diff --git a/drivers/staging/epl/kernel/EplObdk.h b/drivers/staging/epl/kernel/EplObdk.h
deleted file mode 100644
index 78c4d96..0000000
--- a/drivers/staging/epl/kernel/EplObdk.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Epl-Obd-Kernel-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObdk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.8 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLOBDK_H_
-#define _EPLOBDK_H_
-
-#include "../EplObd.h"
-
-extern u8 abEplObdTrashObject_g[8];
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-// ---------------------------------------------------------------------
-tEplKernel EplObdInit(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdAddInstance(EPL_MCO_DECL_PTR_INSTANCE_PTR_ tEplObdInitParam *pInitParam_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdDeleteInstance(EPL_MCO_DECL_INSTANCE_PTR);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdWriteEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			    unsigned int uiSubIndex_p,
-			    void *pSrcData_p, tEplObdSize Size_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdReadEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			   unsigned int uiSubIndex_p,
-			   void *pDstData_p, tEplObdSize *pSize_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdSetStoreLoadObjCallback(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdStoreLoadObjCallback fpCallback_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdAccessOdPart(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdPart ObdPart_p,
-			      tEplObdDir Direction_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdDefineVar(EPL_MCO_DECL_INSTANCE_PTR_ tEplVarParam *pVarParam_p);
-
-// ---------------------------------------------------------------------
-void *EplObdGetObjectDataPtr(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			     unsigned int uiSubIndex_p);
-// ---------------------------------------------------------------------
-tEplKernel EplObdRegisterUserOd(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdEntryPtr pUserOd_p);
-
-// ---------------------------------------------------------------------
-void EplObdInitVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ tEplObdVarEntry *pVarEntry_p,
-			tEplObdType Type_p, tEplObdSize ObdSize_p);
-
-// ---------------------------------------------------------------------
-tEplObdSize EplObdGetDataSize(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			      unsigned int uiSubIndex_p);
-
-// ---------------------------------------------------------------------
-unsigned int EplObdGetNodeId(EPL_MCO_DECL_INSTANCE_PTR);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdSetNodeId(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiNodeId_p,
-			   tEplObdNodeIdType NodeIdType_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdIsNumerical(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			     unsigned int uiSubIndex_p, BOOL *pfEntryNumerical);
-// ---------------------------------------------------------------------
-tEplKernel EplObdWriteEntryFromLe(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				  unsigned int uiSubIndex_p,
-				  void *pSrcData_p,
-				  tEplObdSize Size_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdReadEntryToLe(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       void *pDstData_p,
-			       tEplObdSize *pSize_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdGetAccessType(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       tEplObdAccess *pAccessTyp_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObdSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				unsigned int uiSubindex_p,
-				tEplObdVarEntry **ppVarEntry_p);
-
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDK)) != 0)
-
-#endif // #ifndef _EPLOBDK_H_
diff --git a/drivers/staging/epl/kernel/EplPdok.h b/drivers/staging/epl/kernel/EplPdok.h
deleted file mode 100644
index 24bfc3f..0000000
--- a/drivers/staging/epl/kernel/EplPdok.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernel PDO module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdok.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/06/23 14:56:33 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_PDOK_H_
-#define _EPL_PDOK_H_
-
-#include "../EplPdo.h"
-#include "../EplEvent.h"
-#include "../EplDll.h"
-
-// process events from queue (PDOs/frames and SoA for synchronization)
-tEplKernel EplPdokProcess(tEplEvent * pEvent_p);
-
-// copies RPDO to event queue for processing
-// is called by DLL in NMT_CS_READY_TO_OPERATE and NMT_CS_OPERATIONAL
-// PDO needs not to be valid
-tEplKernel EplPdokCbPdoReceived(tEplFrameInfo * pFrameInfo_p);
-
-// posts pointer and size of TPDO to event queue
-// is called by DLL in NMT_CS_PRE_OPERATIONAL_2,
-//     NMT_CS_READY_TO_OPERATE and NMT_CS_OPERATIONAL
-tEplKernel EplPdokCbPdoTransmitted(tEplFrameInfo * pFrameInfo_p);
-
-// posts SoA event to queue
-tEplKernel EplPdokCbSoa(tEplFrameInfo * pFrameInfo_p);
-
-tEplKernel EplPdokAddInstance(void);
-
-tEplKernel EplPdokDelInstance(void);
-
-#endif // #ifndef _EPL_PDOK_H_
diff --git a/drivers/staging/epl/kernel/EplPdokCal.h b/drivers/staging/epl/kernel/EplPdokCal.h
deleted file mode 100644
index 8a31edf..0000000
--- a/drivers/staging/epl/kernel/EplPdokCal.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernel PDO Communication Abstraction Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdokCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_PDOKCAL_H_
-#define _EPL_PDOKCAL_H_
-
-#include "../EplInc.h"
-
-tEplKernel EplPdokCalAddInstance(void);
-
-tEplKernel EplPdokCalDelInstance(void);
-
-// sets flag for validity of TPDOs in shared memory
-tEplKernel EplPdokCalSetTpdosValid(BOOL fValid_p);
-
-// gets flag for validity of TPDOs from shared memory
-tEplKernel EplPdokCalAreTpdosValid(BOOL * pfValid_p);
-
-#endif // #ifndef _EPL_PDOKCAL_H_
diff --git a/drivers/staging/epl/kernel/EplTimerHighResk.h b/drivers/staging/epl/kernel/EplTimerHighResk.h
deleted file mode 100644
index a2124ee..0000000
--- a/drivers/staging/epl/kernel/EplTimerHighResk.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL high resolution Timermodule
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTimerHighResk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/09/29 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLTIMERHIGHRESK_H_
-#define _EPLTIMERHIGHRESK_H_
-
-#include "../EplTimer.h"
-
-tEplKernel EplTimerHighReskInit(void);
-
-tEplKernel EplTimerHighReskAddInstance(void);
-
-tEplKernel EplTimerHighReskDelInstance(void);
-
-tEplKernel EplTimerHighReskSetTimerNs(tEplTimerHdl *pTimerHdl_p,
-				      unsigned long long ullTimeNs_p,
-				      tEplTimerkCallback pfnCallback_p,
-				      unsigned long ulArgument_p,
-				      BOOL fContinuously_p);
-
-tEplKernel EplTimerHighReskModifyTimerNs(tEplTimerHdl *pTimerHdl_p,
-					 unsigned long long ullTimeNs_p,
-					 tEplTimerkCallback pfnCallback_p,
-					 unsigned long ulArgument_p,
-					 BOOL fContinuously_p);
-
-tEplKernel EplTimerHighReskDeleteTimer(tEplTimerHdl *pTimerHdl_p);
-
-#endif // #ifndef _EPLTIMERHIGHRESK_H_
diff --git a/drivers/staging/epl/kernel/EplTimerk.h b/drivers/staging/epl/kernel/EplTimerk.h
deleted file mode 100644
index 47c5f47..0000000
--- a/drivers/staging/epl/kernel/EplTimerk.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for EPL Kernel-Timermodule
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTimerk.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/06 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLTIMERK_H_
-#define _EPLTIMERK_H_
-
-#include "../EplTimer.h"
-#include "../user/EplEventu.h"
-
-#if EPL_TIMER_USE_USER != FALSE
-#include "../user/EplTimeru.h"
-#endif
-
-
-#if EPL_TIMER_USE_USER != FALSE
-#define EplTimerkInit           EplTimeruInit
-#define EplTimerkAddInstance    EplTimeruAddInstance
-#define EplTimerkDelInstance    EplTimeruDelInstance
-#define EplTimerkSetTimerMs     EplTimeruSetTimerMs
-#define EplTimerkModifyTimerMs  EplTimeruModifyTimerMs
-#define EplTimerkDeleteTimer    EplTimeruDeleteTimer
-#endif
-
-#if EPL_TIMER_USE_USER == FALSE
-tEplKernel EplTimerkInit(void);
-
-tEplKernel EplTimerkAddInstance(void);
-
-tEplKernel EplTimerkDelInstance(void);
-
-tEplKernel EplTimerkSetTimerMs(tEplTimerHdl *pTimerHdl_p,
-			       unsigned long ulTime_p,
-			       tEplTimerArg Argument_p);
-
-tEplKernel EplTimerkModifyTimerMs(tEplTimerHdl *pTimerHdl_p,
-				  unsigned long ulTime_p,
-				  tEplTimerArg Argument_p);
-
-tEplKernel EplTimerkDeleteTimer(tEplTimerHdl *pTimerHdl_p);
-#endif
-#endif // #ifndef _EPLTIMERK_H_
diff --git a/drivers/staging/epl/kernel/VirtualEthernet.h b/drivers/staging/epl/kernel/VirtualEthernet.h
deleted file mode 100644
index 4a42cce..0000000
--- a/drivers/staging/epl/kernel/VirtualEthernet.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for virtual ethernet driver module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: VirtualEthernet.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                KEIL uVision 2
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/09/19 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_VETH_H_
-#define _EPL_VETH_H_
-
-#include "EplDllk.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-
-tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p);
-
-tEplKernel VEthDelInstance(void);
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_VETH)) != 0)
-
-#endif // #ifndef _EPL_VETH_H_
diff --git a/drivers/staging/epl/proc_fs.c b/drivers/staging/epl/proc_fs.c
deleted file mode 100644
index e48949d..0000000
--- a/drivers/staging/epl/proc_fs.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  proc fs entry with diagnostic information under Linux
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: proc_fs.c,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.13 $  $Date: 2008/11/07 13:55:56 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GNU
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/31 d.k.:   start of implementation
-
-****************************************************************************/
-
-#include "kernel/EplNmtk.h"
-#include "user/EplNmtu.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-#include "user/EplNmtMnu.h"
-#endif
-
-#include "kernel/EplDllkCal.h"
-
-//#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/major.h>
-#include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/atomic.h>
-#include <linux/proc_fs.h>
-#include <linux/spinlock.h>
-
-#ifdef CONFIG_COLDFIRE
-#include <asm/coldfire.h>
-#include "fec.h"
-#endif
-
-#include "proc_fs.h"
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/*          G L O B A L   D E F I N I T I O N S                            */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-#ifndef EPL_PROC_DEV_NAME
-#define EPL_PROC_DEV_NAME    "epl"
-#endif
-
-#ifndef DBG_TRACE_POINTS
-#define DBG_TRACE_POINTS    23	// # of supported debug trace points
-#endif
-
-#ifndef DBG_TRACE_VALUES
-#define DBG_TRACE_VALUES    24	// # of supported debug trace values (size of circular buffer)
-#endif
-
-//---------------------------------------------------------------------------
-// modul global types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// local vars
-//---------------------------------------------------------------------------
-
-#ifdef _DBG_TRACE_POINTS_
-atomic_t aatmDbgTracePoint_l[DBG_TRACE_POINTS];
-u32 adwDbgTraceValue_l[DBG_TRACE_VALUES];
-u32 dwDbgTraceValueOld_l;
-unsigned int uiDbgTraceValuePos_l;
-spinlock_t spinlockDbgTraceValue_l;
-unsigned long ulDbTraceValueFlags_l;
-#endif
-
-//---------------------------------------------------------------------------
-// local function prototypes
-//---------------------------------------------------------------------------
-
-static int EplLinProcRead(char *pcBuffer_p, char **ppcStart_p, off_t Offset_p,
-			  int nBufferSize_p, int *pEof_p, void *pData_p);
-static int EplLinProcWrite(struct file *file, const char __user * buffer,
-			   unsigned long count, void *data);
-
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p);
-void TgtDbgPostTraceValue(u32 dwTraceValue_p);
-
-extern u32 EplIdentuGetRunningRequests(void);
-
-//=========================================================================//
-//                                                                         //
-//          P U B L I C   F U N C T I O N S                                //
-//                                                                         //
-//=========================================================================//
-
-tEplKernel EplLinProcInit(void)
-{
-	struct proc_dir_entry *pProcDirEntry;
-	pProcDirEntry = create_proc_entry(EPL_PROC_DEV_NAME, S_IRUGO, NULL);
-	if (pProcDirEntry != NULL) {
-		pProcDirEntry->read_proc = EplLinProcRead;
-		pProcDirEntry->write_proc = EplLinProcWrite;
-		pProcDirEntry->data = NULL;	// device number or something else
-
-	} else {
-		return kEplNoResource;
-	}
-
-#ifdef _DBG_TRACE_POINTS_
-	// initialize spinlock and circular buffer position
-	spin_lock_init(&spinlockDbgTraceValue_l);
-	uiDbgTraceValuePos_l = 0;
-	dwDbgTraceValueOld_l = 0;
-#endif
-
-	return kEplSuccessful;
-}
-
-tEplKernel EplLinProcFree(void)
-{
-	remove_proc_entry(EPL_PROC_DEV_NAME, NULL);
-
-	return kEplSuccessful;
-}
-
-//---------------------------------------------------------------------------
-//  Target specific event signaling (FEC Tx-/Rx-Interrupt, used by Edrv)
-//---------------------------------------------------------------------------
-
-#ifdef _DBG_TRACE_POINTS_
-void TgtDbgSignalTracePoint(u8 bTracePointNumber_p)
-{
-
-	if (bTracePointNumber_p >=
-	    ARRAY_SIZE(aatmDbgTracePoint_l)) {
-		goto Exit;
-	}
-
-	atomic_inc(&aatmDbgTracePoint_l[bTracePointNumber_p]);
-
-      Exit:
-
-	return;
-
-}
-
-void TgtDbgPostTraceValue(u32 dwTraceValue_p)
-{
-
-	spin_lock_irqsave(&spinlockDbgTraceValue_l, ulDbTraceValueFlags_l);
-	if (dwDbgTraceValueOld_l != dwTraceValue_p) {
-		adwDbgTraceValue_l[uiDbgTraceValuePos_l] = dwTraceValue_p;
-		uiDbgTraceValuePos_l =
-		    (uiDbgTraceValuePos_l + 1) % DBG_TRACE_VALUES;
-		dwDbgTraceValueOld_l = dwTraceValue_p;
-	}
-	spin_unlock_irqrestore(&spinlockDbgTraceValue_l, ulDbTraceValueFlags_l);
-
-	return;
-
-}
-#endif
-
-//---------------------------------------------------------------------------
-//  Read function for PROC-FS read access
-//---------------------------------------------------------------------------
-
-static int EplLinProcRead(char *pcBuffer_p,
-			  char **ppcStart_p,
-			  off_t Offset_p,
-			  int nBufferSize_p, int *pEof_p, void *pData_p)
-{
-
-	int nSize;
-	int Eof;
-	tEplDllkCalStatistics *pDllkCalStats;
-
-	nSize = 0;
-	Eof = 0;
-
-	// count calls of this function
-#ifdef _DBG_TRACE_POINTS_
-	TgtDbgSignalTracePoint(0);
-#endif
-
-	//---------------------------------------------------------------
-	// generate static information
-	//---------------------------------------------------------------
-
-	// ---- Driver information ----
-	nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-			  "%s    %s    (c) 2006 %s\n",
-			  EPL_PRODUCT_NAME, EPL_PRODUCT_VERSION,
-			  EPL_PRODUCT_MANUFACTURER);
-
-	//---------------------------------------------------------------
-	// generate process information
-	//---------------------------------------------------------------
-
-	// ---- EPL state ----
-	nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-			  "NMT state:                  0x%04X\n",
-			  (u16) EplNmtkGetNmtState());
-
-	EplDllkCalGetStatistics(&pDllkCalStats);
-
-	nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-			  "CurAsyncTxGen=%lu CurAsyncTxNmt=%lu CurAsyncRx=%lu\nMaxAsyncTxGen=%lu MaxAsyncTxNmt=%lu MaxAsyncRx=%lu\n",
-			  pDllkCalStats->m_ulCurTxFrameCountGen,
-			  pDllkCalStats->m_ulCurTxFrameCountNmt,
-			  pDllkCalStats->m_ulCurRxFrameCount,
-			  pDllkCalStats->m_ulMaxTxFrameCountGen,
-			  pDllkCalStats->m_ulMaxTxFrameCountNmt,
-			  pDllkCalStats->m_ulMaxRxFrameCount);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-	// fetch running IdentRequests
-	nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-			  "running IdentRequests:      0x%08X\n",
-			  EplIdentuGetRunningRequests());
-
-	// fetch state of NmtMnu module
-	{
-		unsigned int uiMandatorySlaveCount;
-		unsigned int uiSignalSlaveCount;
-		u16 wFlags;
-
-		EplNmtMnuGetDiagnosticInfo(&uiMandatorySlaveCount,
-					   &uiSignalSlaveCount, &wFlags);
-
-		nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				  "MN  MandSlaveCount: %u  SigSlaveCount: %u  Flags: 0x%X\n",
-				  uiMandatorySlaveCount, uiSignalSlaveCount,
-				  wFlags);
-
-	}
-#endif
-
-	// ---- FEC state ----
-#ifdef CONFIG_COLDFIRE
-	{
-		// Receive the base address
-		unsigned long base_addr;
-#if (EDRV_USED_ETH_CTRL == 0)
-		// Set the base address of FEC0
-		base_addr = FEC_BASE_ADDR_FEC0;
-#else
-		// Set the base address of FEC1
-		base_addr = FEC_BASE_ADDR_FEC1;
-#endif
-
-		nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				  "FEC_ECR = 0x%08X FEC_EIR = 0x%08X FEC_EIMR = 0x%08X\nFEC_TCR = 0x%08X FECTFSR = 0x%08X FECRFSR = 0x%08X\n",
-				  FEC_ECR(base_addr), FEC_EIR(base_addr),
-				  FEC_EIMR(base_addr), FEC_TCR(base_addr),
-				  FEC_FECTFSR(base_addr),
-				  FEC_FECRFSR(base_addr));
-	}
-#endif
-
-	// ---- DBG: TracePoints ----
-#ifdef _DBG_TRACE_POINTS_
-	{
-		int nNum;
-
-		nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				  "DbgTracePoints:\n");
-		for (nNum = 0;
-		     nNum < ARRAY_SIZE(aatmDbgTracePoint_l);
-		     nNum++) {
-			nSize +=
-			    snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				     " TracePoint[%2d]: %d\n", (int)nNum,
-				     atomic_read(&aatmDbgTracePoint_l[nNum]));
-		}
-
-		nSize += snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				  "DbgTraceValues:\n");
-		for (nNum = 0; nNum < DBG_TRACE_VALUES; nNum++) {
-			if (nNum == uiDbgTraceValuePos_l) {	// next value will be stored at that position
-				nSize +=
-				    snprintf(pcBuffer_p + nSize,
-					     nBufferSize_p - nSize, "*%08lX",
-					     adwDbgTraceValue_l[nNum]);
-			} else {
-				nSize +=
-				    snprintf(pcBuffer_p + nSize,
-					     nBufferSize_p - nSize, " %08lX",
-					     adwDbgTraceValue_l[nNum]);
-			}
-			if ((nNum & 0x00000007) == 0x00000007) {	// 8 values printed -> end of line reached
-				nSize +=
-				    snprintf(pcBuffer_p + nSize,
-					     nBufferSize_p - nSize, "\n");
-			}
-		}
-		if ((nNum & 0x00000007) != 0x00000007) {	// number of values printed is not a multiple of 8 -> print new line
-			nSize +=
-			    snprintf(pcBuffer_p + nSize, nBufferSize_p - nSize,
-				     "\n");
-		}
-	}
-#endif
-
-	Eof = 1;
-	goto Exit;
-
-      Exit:
-
-	*pEof_p = Eof;
-
-	return (nSize);
-
-}
-
-//---------------------------------------------------------------------------
-//  Write function for PROC-FS write access
-//---------------------------------------------------------------------------
-
-static int EplLinProcWrite(struct file *file, const char __user * buffer,
-			   unsigned long count, void *data)
-{
-	char abBuffer[count + 1];
-	int iErr;
-	int iVal = 0;
-	tEplNmtEvent NmtEvent;
-
-	if (count > 0) {
-		iErr = copy_from_user(abBuffer, buffer, count);
-		if (iErr != 0) {
-			return count;
-		}
-		abBuffer[count] = '\0';
-
-		iErr = sscanf(abBuffer, "%i", &iVal);
-	}
-	if ((iVal <= 0) || (iVal > 0x2F)) {
-		NmtEvent = kEplNmtEventSwReset;
-	} else {
-		NmtEvent = (tEplNmtEvent) iVal;
-	}
-	// execute specified NMT command on write access of /proc/epl
-	EplNmtuNmtEvent(NmtEvent);
-
-	return count;
-}
diff --git a/drivers/staging/epl/proc_fs.h b/drivers/staging/epl/proc_fs.h
deleted file mode 100644
index 0586f49..0000000
--- a/drivers/staging/epl/proc_fs.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  interface for proc fs entry under Linux
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: proc_fs.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:33 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GNU
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/31 d.k.:   start of implementation
-
-****************************************************************************/
-
-#ifndef _EPLPROCFS_H_
-#define _EPLPROCFS_H_
-
-//---------------------------------------------------------------------------
-// const defines
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// types
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// function prototypes
-//---------------------------------------------------------------------------
-
-tEplKernel EplLinProcInit(void);
-tEplKernel EplLinProcFree(void);
-
-#endif // #ifndef _EPLPROCFS_H_
diff --git a/drivers/staging/epl/user/EplCfgMau.h b/drivers/staging/epl/user/EplCfgMau.h
deleted file mode 100644
index 4ac770f..0000000
--- a/drivers/staging/epl/user/EplCfgMau.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Epl Configuration Manager Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplCfgMau.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                VC7
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/14 k.t.:   start of the implementation
-                     -> based on CANopen CfgMa-Modul (CANopen version 5.34)
-
-****************************************************************************/
-
-#ifndef _EPLCFGMA_H_
-#define _EPLCFGMA_H_
-
-#include "../EplInc.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_CFGMA)) != 0)
-
-#include "EplObdu.h"
-#include "EplSdoComu.h"
-
-//define max number of timeouts for configuration of 1 device
-#define EPL_CFGMA_MAX_TIMEOUT   3
-
-//callbackfunction, called if configuration is finished
-typedef void (* tfpEplCfgMaCb)(unsigned int uiNodeId_p,
-			       tEplKernel Errorstate_p);
-
-//State for configuartion manager Statemachine
-typedef enum {
-	// general states
-	kEplCfgMaIdle = 0x0000,	// Configurationsprocess
-	// is idle
-	kEplCfgMaWaitForSdocEvent = 0x0001,	// wait until the last
-	// SDOC is finisched
-	kEplCfgMaSkipMappingSub0 = 0x0002,	// write Sub0 of mapping
-	// parameter with 0
-
-	kEplCfgMaFinished = 0x0004	// configuartion is finished
-} tEplCfgState;
-
-typedef enum {
-	kEplCfgMaDcfTypSystecSeg = 0x00,
-	kEplCfgMaDcfTypConDcf = 0x01,
-	kEplCfgMaDcfTypDcf = 0x02,	// not supported
-	kEplCfgMaDcfTypXdc = 0x03	// not supported
-} tEplCfgMaDcfTyp;
-
-typedef enum {
-	kEplCfgMaCommon = 0,	// all other index
-	kEplCfgMaPdoComm = 1,	// communication index
-	kEplCfgMaPdoMapp = 2,	// mapping index
-	kEplCfgMaPdoCommAfterMapp = 3,	// write PDO Cob-Id after mapping subindex 0(set PDO valid)
-
-} tEplCfgMaIndexType;
-
-//bitcoded answer about the last sdo transfer saved in m_SdocState
-// also used to singal start of the State Maschine
-typedef enum {
-	kEplCfgMaSdocBusy = 0x00,	// SDOC activ
-	kEplCfgMaSdocReady = 0x01,	// SDOC finished
-	kEplCfgMaSdocTimeout = 0x02,	// SDOC Timeout
-	kEplCfgMaSdocAbortReceived = 0x04,	// SDOC Abort, see Abortcode
-	kEplCfgMaSdocStart = 0x08	// start State Mschine
-} tEplSdocState;
-
-//internal structure (instancetable for modul configuration manager)
-typedef struct {
-	tEplCfgState m_CfgState;	// state of the configuration state maschine
-	tEplSdoComConHdl m_SdoComConHdl;	// handle for sdo connection
-	u32 m_dwLastAbortCode;
-	unsigned int m_uiLastIndex;	// last index of configuration, to compair with actual index
-	u8 *m_pbConcise;	// Ptr to concise DCF
-	u8 *m_pbActualIndex;	// Ptr to actual index in the DCF segment
-	tfpEplCfgMaCb m_pfnCfgMaCb;	// Ptr to CfgMa Callback, is call if configuration finished
-	tEplKernel m_EplKernelError;	// errorcode
-	u32 m_dwNumValueCopy;	// numeric values are copied in this variable
-	unsigned int m_uiPdoNodeId;	// buffer for PDO node id
-	u8 m_bNrOfMappedObject;	// number of mapped objects
-	unsigned int m_uiNodeId;	// Epl node addresse
-	tEplSdocState m_SdocState;	// bitcoded state of the SDO transfer
-	unsigned int m_uiLastSubIndex;	// last subindex of configuration
-	BOOL m_fOneTranferOk;	// atleased one transfer was successful
-	u8 m_bEventFlag;	// for Eventsignaling to the State Maschine
-	u32 m_dwCntObjectInDcf;	// number of Objects in DCF
-	tEplCfgMaIndexType m_SkipCfg;	// TRUE if a adsitional Configurationprocess
-	// have to insert e.g. PDO-mapping
-	u16 m_wTimeOutCnt;	// Timeout Counter, break configuration is
-	// m_wTimeOutCnt == CFGMA_MAX_TIMEOUT
-
-} tEplCfgMaNode;
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaInit()
-//
-// Description: Function creates first instance of Configuration Manager
-//
-// Parameters:
-//
-// Returns:     tEplKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaInit(void);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaAddInstance()
-//
-// Description: Function creates additional instance of Configuration Manager
-//
-// Parameters:
-//
-// Returns:     tEplKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaAddInstance(void);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaDelInstance()
-//
-// Description: Function delete instance of Configuration Manager
-//
-// Parameters:
-//
-// Returns:     tEplKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel plCfgMaDelInstance(void);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaStartConfig()
-//
-// Description: Function starts the configuration process
-//              initialization the statemachine for CfgMa- process
-//
-// Parameters:  uiNodeId_p              = NodeId of the node to configure
-//              pbConcise_p             = pointer to DCF
-//              fpCfgMaCb_p             = pointer to callback function (should not be NULL)
-//              SizeOfConcise_p         = size of DCF in u8 -> for future use
-//              DcfType_p               = type of the DCF
-//
-// Returns:     tCopKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaStartConfig(unsigned int uiNodeId_p,
-			       u8 * pbConcise_p,
-			       tfpEplCfgMaCb fpCfgMaCb_p,
-			       tEplObdSize SizeOfConcise_p,
-			       tEplCfgMaDcfTyp DcfType_p);
-
-//---------------------------------------------------------------------------
-// Function:    CfgMaStartConfigurationNode()
-//
-// Description: Function started the configuration process
-//              with the DCF from according OD-entry Subindex == bNodeId_p
-//
-// Parameters:  uiNodeId_p              = NodeId of the node to configure
-//              fpCfgMaCb_p             = pointer to callback function (should not be NULL)
-//              DcfType_p               = type of the DCF
-//
-// Returns:     tCopKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaStartConfigNode(unsigned int uiNodeId_p,
-				   tfpEplCfgMaCb fpCfgMaCb_p,
-				   tEplCfgMaDcfTyp DcfType_p);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaStartConfigNodeDcf()
-//
-// Description: Function starts the configuration process
-//              and links the configuration data to the OD
-//
-// Parameters:  uiNodeId_p              = NodeId of the node to configure
-//              pbConcise_p             = pointer to DCF
-//              fpCfgMaCb_p             = pointer to callback function (should not be NULL)
-//              SizeOfConcise_p         = size of DCF in u8 -> for future use
-//              DcfType_p               = type of the DCF
-//
-// Returns:     tCopKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaStartConfigNodeDcf(unsigned int uiNodeId_p,
-				      u8 * pbConcise_p,
-				      tfpEplCfgMaCb fpCfgMaCb_p,
-				      tEplObdSize SizeOfConcise_p,
-				      tEplCfgMaDcfTyp DcfType_p);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaLinkDcf()
-//
-// Description: Function links the configuration data to the OD
-//
-// Parameters:  uiNodeId_p              = NodeId of the node to configure
-//              pbConcise_p             = pointer to DCF
-//              SizeOfConcise_p        = size of DCF in u8 -> for future use
-//              DcfType_p               = type of the DCF
-//
-// Returns:     tCopKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaLinkDcf(unsigned int uiNodeId_p,
-			   u8 * pbConcise_p,
-			   tEplObdSize SizeOfConcise_p,
-			   tEplCfgMaDcfTyp DcfType_p);
-
-//---------------------------------------------------------------------------
-// Function:    EplCfgMaCheckDcf()
-//
-// Description: Function check if there is allready a configuration file linked
-//              to the OD (type is given by DcfType_p)
-//
-// Parameters:  uiNodeId_p              = NodeId
-//              DcfType_p               = type of the DCF
-//
-// Returns:     tCopKernel              = error code
-//---------------------------------------------------------------------------
-tEplKernel EplCfgMaCheckDcf(unsigned int uiNodeId_p, tEplCfgMaDcfTyp DcfType_p);
-
-#endif // #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_CFGMA)) != 0)
-
-#endif // _EPLCFGMA_H_
-
-// EOF
diff --git a/drivers/staging/epl/user/EplDllu.h b/drivers/staging/epl/user/EplDllu.h
deleted file mode 100644
index 890f837..0000000
--- a/drivers/staging/epl/user/EplDllu.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for userspace DLL module for asynchronous communication
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDllu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLLU_H_
-#define _EPL_DLLU_H_
-
-#include "../EplDll.h"
-
-typedef tEplKernel(* tEplDlluCbAsnd) (tEplFrameInfo * pFrameInfo_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-
-tEplKernel EplDlluAddInstance(void);
-
-tEplKernel EplDlluDelInstance(void);
-
-tEplKernel EplDlluRegAsndService(tEplDllAsndServiceId ServiceId_p,
-				 tEplDlluCbAsnd pfnDlluCbAsnd_p,
-				 tEplDllAsndFilter Filter_p);
-
-tEplKernel EplDlluAsyncSend(tEplFrameInfo * pFrameInfo_p,
-			    tEplDllAsyncReqPriority Priority_p);
-
-// processes asynch frames
-tEplKernel EplDlluProcess(tEplFrameInfo * pFrameInfo_p);
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
-
-#endif // #ifndef _EPL_DLLU_H_
diff --git a/drivers/staging/epl/user/EplDlluCal.h b/drivers/staging/epl/user/EplDlluCal.h
deleted file mode 100644
index bc9126b..0000000
--- a/drivers/staging/epl/user/EplDlluCal.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for DLL Communication Abstraction Layer module in EPL user part
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplDlluCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/20 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_DLLUCAL_H_
-#define _EPL_DLLUCAL_H_
-
-#include "../EplDll.h"
-#include "../EplEvent.h"
-
-
-typedef tEplKernel(* tEplDlluCbAsnd) (tEplFrameInfo * pFrameInfo_p);
-
-tEplKernel EplDlluCalAddInstance(void);
-
-tEplKernel EplDlluCalDelInstance(void);
-
-tEplKernel EplDlluCalRegAsndService(tEplDllAsndServiceId ServiceId_p,
-				    tEplDlluCbAsnd pfnDlluCbAsnd_p,
-				    tEplDllAsndFilter Filter_p);
-
-tEplKernel EplDlluCalAsyncSend(tEplFrameInfo * pFrameInfo,
-			       tEplDllAsyncReqPriority Priority_p);
-
-tEplKernel EplDlluCalProcess(tEplEvent * pEvent_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-tEplKernel EplDlluCalAddNode(tEplDllNodeInfo * pNodeInfo_p);
-
-tEplKernel EplDlluCalDeleteNode(unsigned int uiNodeId_p);
-
-tEplKernel EplDlluCalSoftDeleteNode(unsigned int uiNodeId_p);
-
-tEplKernel EplDlluCalIssueRequest(tEplDllReqServiceId Service_p,
-				  unsigned int uiNodeId_p, u8 bSoaFlag1_p);
-
-#endif
-
-#endif // #ifndef _EPL_DLLUCAL_H_
diff --git a/drivers/staging/epl/user/EplEventu.h b/drivers/staging/epl/user/EplEventu.h
deleted file mode 100644
index ab85205..0000000
--- a/drivers/staging/epl/user/EplEventu.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for kernel event module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplEventu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/12 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_EVENTU_H_
-#define _EPL_EVENTU_H_
-
-#include "../EplEvent.h"
-
-// init function
-tEplKernel EplEventuInit(tEplProcessEventCb pfnApiProcessEventCb_p);
-
-// add instance
-tEplKernel EplEventuAddInstance(tEplProcessEventCb pfnApiProcessEventCb_p);
-
-// delete instance
-tEplKernel EplEventuDelInstance(void);
-
-// Task that dispatches events in userspace
-tEplKernel EplEventuProcess(tEplEvent * pEvent_p);
-
-// post events from userspace
-tEplKernel EplEventuPost(tEplEvent * pEvent_p);
-
-// post errorevents from userspace
-tEplKernel EplEventuPostError(tEplEventSource EventSource_p,
-			      tEplKernel EplError_p,
-			      unsigned int uiArgSize_p, void *pArg_p);
-
-#endif // #ifndef _EPL_EVENTU_H_
diff --git a/drivers/staging/epl/user/EplIdentu.h b/drivers/staging/epl/user/EplIdentu.h
deleted file mode 100644
index 057c902..0000000
--- a/drivers/staging/epl/user/EplIdentu.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Identu-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplIdentu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/11/15 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLIDENTU_H_
-#define _EPLIDENTU_H_
-
-#include "../EplDll.h"
-
-typedef tEplKernel(* tEplIdentuCbResponse) (unsigned int uiNodeId_p,
-						   tEplIdentResponse *
-						   pIdentResponse_p);
-
-tEplKernel EplIdentuInit(void);
-
-tEplKernel EplIdentuAddInstance(void);
-
-tEplKernel EplIdentuDelInstance(void);
-
-tEplKernel EplIdentuReset(void);
-
-tEplKernel EplIdentuGetIdentResponse(unsigned int uiNodeId_p,
-				     tEplIdentResponse **ppIdentResponse_p);
-
-tEplKernel EplIdentuRequestIdentResponse(unsigned int uiNodeId_p,
-					 tEplIdentuCbResponse pfnCbResponse_p);
-
-#endif // #ifndef _EPLIDENTU_H_
diff --git a/drivers/staging/epl/user/EplLedu.h b/drivers/staging/epl/user/EplLedu.h
deleted file mode 100644
index ca9eb43..0000000
--- a/drivers/staging/epl/user/EplLedu.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for status and error LED user part module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplLedu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.1 $  $Date: 2008/11/17 16:40:39 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2008/11/17 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLLEDU_H_
-#define _EPLLEDU_H_
-
-#include "../EplLed.h"
-#include "../EplNmt.h"
-#include "EplEventu.h"
-
-typedef tEplKernel(* tEplLeduStateChangeCallback) (tEplLedType LedType_p,
-							  BOOL fOn_p);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-
-tEplKernel EplLeduInit(tEplLeduStateChangeCallback pfnCbStateChange_p);
-
-tEplKernel EplLeduAddInstance(tEplLeduStateChangeCallback pfnCbStateChange_p);
-
-tEplKernel EplLeduDelInstance(void);
-
-tEplKernel EplLeduCbNmtStateChange(tEplEventNmtStateChange NmtStateChange_p);
-
-tEplKernel EplLeduProcessEvent(tEplEvent * pEplEvent_p);
-
-#endif // #if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_LEDU)) != 0)
-
-#endif // #ifndef _EPLLEDU_H_
diff --git a/drivers/staging/epl/user/EplNmtCnu.h b/drivers/staging/epl/user/EplNmtCnu.h
deleted file mode 100644
index 7d23029..0000000
--- a/drivers/staging/epl/user/EplNmtCnu.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for NMT-CN-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtCnu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMTCNU_H_
-#define _EPLNMTCNU_H_
-
-#include "EplNmtu.h"
-#include "../EplDll.h"
-#include "../EplFrame.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-
-tEplKernel EplNmtCnuInit(unsigned int uiNodeId_p);
-
-tEplKernel EplNmtCnuAddInstance(unsigned int uiNodeId_p);
-
-tEplKernel EplNmtCnuDelInstance(void);
-
-tEplKernel EplNmtCnuSendNmtRequest(unsigned int uiNodeId_p, tEplNmtCommand NmtCommand_p);
-
-tEplKernel EplNmtCnuRegisterCheckEventCb(tEplNmtuCheckEventCallback pfnEplNmtCheckEventCb_p);
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_CN)) != 0)
-
-#endif // #ifndef _EPLNMTCNU_H_
diff --git a/drivers/staging/epl/user/EplNmtMnu.h b/drivers/staging/epl/user/EplNmtMnu.h
deleted file mode 100644
index 5e5e0cd..0000000
--- a/drivers/staging/epl/user/EplNmtMnu.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for NMT-MN-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtMnu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMTMNU_H_
-#define _EPLNMTMNU_H_
-
-#include "EplNmtu.h"
-
-typedef tEplKernel(* tEplNmtMnuCbNodeEvent) (unsigned int uiNodeId_p,
-					     tEplNmtNodeEvent NodeEvent_p,
-					     tEplNmtState NmtState_p,
-					     u16 wErrorCode_p,
-					     BOOL fMandatory_p);
-
-typedef tEplKernel(* tEplNmtMnuCbBootEvent) (tEplNmtBootEvent BootEvent_p,
-					     tEplNmtState NmtState_p,
-					     u16 wErrorCode_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
-
-tEplKernel EplNmtMnuInit(tEplNmtMnuCbNodeEvent pfnCbNodeEvent_p,
-			 tEplNmtMnuCbBootEvent pfnCbBootEvent_p);
-
-tEplKernel EplNmtMnuAddInstance(tEplNmtMnuCbNodeEvent pfnCbNodeEvent_p,
-				tEplNmtMnuCbBootEvent pfnCbBootEvent_p);
-
-tEplKernel EplNmtMnuDelInstance(void);
-
-tEplKernel EplNmtMnuProcessEvent(tEplEvent *pEvent_p);
-
-tEplKernel EplNmtMnuSendNmtCommand(unsigned int uiNodeId_p,
-				   tEplNmtCommand NmtCommand_p);
-
-tEplKernel EplNmtMnuTriggerStateChange(unsigned int uiNodeId_p,
-				       tEplNmtNodeCommand NodeCommand_p);
-
-tEplKernel EplNmtMnuCbNmtStateChange(tEplEventNmtStateChange
-					    NmtStateChange_p);
-
-tEplKernel EplNmtMnuCbCheckEvent(tEplNmtEvent NmtEvent_p);
-
-tEplKernel EplNmtMnuGetDiagnosticInfo(unsigned int
-					     *puiMandatorySlaveCount_p,
-					     unsigned int
-					     *puiSignalSlaveCount_p,
-					     u16 * pwFlags_p);
-
-#endif
-
-#endif // #ifndef _EPLNMTMNU_H_
diff --git a/drivers/staging/epl/user/EplNmtu.h b/drivers/staging/epl/user/EplNmtu.h
deleted file mode 100644
index c1fca80..0000000
--- a/drivers/staging/epl/user/EplNmtu.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for NMT-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/09 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMTU_H_
-#define _EPLNMTU_H_
-
-#include "../EplNmt.h"
-#include "EplEventu.h"
-
-// nmt commands
-typedef enum {
-	// requestable ASnd ServiceIds    0x01..0x1F
-	kEplNmtCmdIdentResponse = 0x01,
-	kEplNmtCmdStatusResponse = 0x02,
-	// plain NMT state commands       0x20..0x3F
-	kEplNmtCmdStartNode = 0x21,
-	kEplNmtCmdStopNode = 0x22,
-	kEplNmtCmdEnterPreOperational2 = 0x23,
-	kEplNmtCmdEnableReadyToOperate = 0x24,
-	kEplNmtCmdResetNode = 0x28,
-	kEplNmtCmdResetCommunication = 0x29,
-	kEplNmtCmdResetConfiguration = 0x2A,
-	kEplNmtCmdSwReset = 0x2B,
-	// extended NMT state commands    0x40..0x5F
-	kEplNmtCmdStartNodeEx = 0x41,
-	kEplNmtCmdStopNodeEx = 0x42,
-	kEplNmtCmdEnterPreOperational2Ex = 0x43,
-	kEplNmtCmdEnableReadyToOperateEx = 0x44,
-	kEplNmtCmdResetNodeEx = 0x48,
-	kEplNmtCmdResetCommunicationEx = 0x49,
-	kEplNmtCmdResetConfigurationEx = 0x4A,
-	kEplNmtCmdSwResetEx = 0x4B,
-	// NMT managing commands          0x60..0x7F
-	kEplNmtCmdNetHostNameSet = 0x62,
-	kEplNmtCmdFlushArpEntry = 0x63,
-	// NMT info services              0x80..0xBF
-	kEplNmtCmdPublishConfiguredCN = 0x80,
-	kEplNmtCmdPublishActiveCN = 0x90,
-	kEplNmtCmdPublishPreOperational1 = 0x91,
-	kEplNmtCmdPublishPreOperational2 = 0x92,
-	kEplNmtCmdPublishReadyToOperate = 0x93,
-	kEplNmtCmdPublishOperational = 0x94,
-	kEplNmtCmdPublishStopped = 0x95,
-	kEplNmtCmdPublishEmergencyNew = 0xA0,
-	kEplNmtCmdPublishTime = 0xB0,
-
-	kEplNmtCmdInvalidService = 0xFF
-} tEplNmtCommand;
-
-typedef tEplKernel(* tEplNmtuStateChangeCallback) (tEplEventNmtStateChange NmtStateChange_p);
-
-typedef tEplKernel(* tEplNmtuCheckEventCallback) (tEplNmtEvent NmtEvent_p);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-
-tEplKernel EplNmtuInit(void);
-
-tEplKernel EplNmtuAddInstance(void);
-
-tEplKernel EplNmtuDelInstance(void);
-
-tEplKernel EplNmtuNmtEvent(tEplNmtEvent NmtEvent_p);
-
-tEplNmtState EplNmtuGetNmtState(void);
-
-tEplKernel EplNmtuProcessEvent(tEplEvent *pEplEvent_p);
-
-tEplKernel EplNmtuRegisterStateChangeCb(tEplNmtuStateChangeCallback pfnEplNmtStateChangeCb_p);
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMTU)) != 0)
-
-#endif // #ifndef _EPLNMTU_H_
diff --git a/drivers/staging/epl/user/EplNmtuCal.h b/drivers/staging/epl/user/EplNmtuCal.h
deleted file mode 100644
index b985037..0000000
--- a/drivers/staging/epl/user/EplNmtuCal.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for communication abstraction layer of the
-                NMT-Userspace-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplNmtuCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/16 -k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLNMTUCAL_H_
-#define _EPLNMTUCAL_H_
-
-#include "EplNmtu.h"
-#include "../kernel/EplNmtk.h"
-
-tEplNmtState EplNmtkCalGetNmtState(void);
-
-#endif // #ifndef _EPLNMTUCAL_H_
diff --git a/drivers/staging/epl/user/EplObdu.h b/drivers/staging/epl/user/EplObdu.h
deleted file mode 100644
index 0863712..0000000
--- a/drivers/staging/epl/user/EplObdu.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Epl-Obd-Userspace-module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObdu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLOBDU_H_
-#define _EPLOBDU_H_
-
-#include "../EplObd.h"
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-
-#if EPL_OBD_USE_KERNEL != FALSE
-#error "EPL OBDu module enabled, but OBD_USE_KERNEL == TRUE"
-#endif
-
-tEplKernel EplObduWriteEntry(unsigned int uiIndex_p, unsigned int uiSubIndex_p,
-			     void *pSrcData_p, tEplObdSize Size_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduReadEntry(unsigned int uiIndex_p, unsigned int uiSubIndex_p,
-			    void *pDstData_p, tEplObdSize *pSize_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduAccessOdPart(tEplObdPart ObdPart_p, tEplObdDir Direction_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduDefineVar(tEplVarParam *pVarParam_p);
-
-// ---------------------------------------------------------------------
-void *EplObduGetObjectDataPtr(unsigned int uiIndex_p, unsigned int uiSubIndex_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduRegisterUserOd(tEplObdEntryPtr pUserOd_p);
-
-// ---------------------------------------------------------------------
-void EplObduInitVarEntry(tEplObdVarEntry *pVarEntry_p, u8 bType_p,
-			 tEplObdSize ObdSize_p);
-
-// ---------------------------------------------------------------------
-tEplObdSize EplObduGetDataSize(unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p);
-
-// ---------------------------------------------------------------------
-unsigned int EplObduGetNodeId(void);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduSetNodeId(unsigned int uiNodeId_p,
-			    tEplObdNodeIdType NodeIdType_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduGetAccessType(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				tEplObdAccess *pAccessTyp_p);
-// ---------------------------------------------------------------------
-tEplKernel EplObduReadEntryToLe(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				void *pDstData_p, tEplObdSize *pSize_p);
-// ---------------------------------------------------------------------
-tEplKernel EplObduWriteEntryFromLe(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   void *pSrcData_p, tEplObdSize Size_p);
-
-// ---------------------------------------------------------------------
-tEplKernel EplObduSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				 unsigned int uiSubindex_p,
-				 tEplObdVarEntry **ppVarEntry_p);
-
-#elif EPL_OBD_USE_KERNEL != FALSE
-#include "../kernel/EplObdk.h"
-
-#define EplObduWriteEntry       EplObdWriteEntry
-
-#define EplObduReadEntry        EplObdReadEntry
-
-#define EplObduAccessOdPart     EplObdAccessOdPart
-
-#define EplObduDefineVar        EplObdDefineVar
-
-#define EplObduGetObjectDataPtr EplObdGetObjectDataPtr
-
-#define EplObduRegisterUserOd   EplObdRegisterUserOd
-
-#define EplObduInitVarEntry     EplObdInitVarEntry
-
-#define EplObduGetDataSize      EplObdGetDataSize
-
-#define EplObduGetNodeId        EplObdGetNodeId
-
-#define EplObduSetNodeId        EplObdSetNodeId
-
-#define EplObduGetAccessType    EplObdGetAccessType
-
-#define EplObduReadEntryToLe    EplObdReadEntryToLe
-
-#define EplObduWriteEntryFromLe EplObdWriteEntryFromLe
-
-#define EplObduSearchVarEntry   EplObdSearchVarEntry
-
-#define EplObduIsNumerical      EplObdIsNumerical
-
-#endif // #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_OBDU)) != 0)
-
-#endif // #ifndef _EPLOBDU_H_
diff --git a/drivers/staging/epl/user/EplObduCal.h b/drivers/staging/epl/user/EplObduCal.h
deleted file mode 100644
index 0727777..0000000
--- a/drivers/staging/epl/user/EplObduCal.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for communication abstraction layer
-                for the Epl-Obd-Userspace-Modul
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplObduCal.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/19 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLOBDUCAL_H_
-#define _EPLOBDUCAL_H_
-
-#include "../EplObd.h"
-
-tEplKernel EplObduCalWriteEntry(unsigned int uiIndex_p,
-				unsigned int uiSubIndex_p,
-				void *pSrcData_p,
-				tEplObdSize Size_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalReadEntry(unsigned int uiIndex_p,
-			       unsigned int uiSubIndex_p,
-			       void *pDstData_p,
-			       tEplObdSize *pSize_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalAccessOdPart(tEplObdPart ObdPart_p,
-				  tEplObdDir Direction_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalDefineVar(tEplVarParam *pVarParam_p);
-//---------------------------------------------------------------------------
-void *EplObduCalGetObjectDataPtr(unsigned int uiIndex_p,
-				 unsigned int uiSubIndex_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalRegisterUserOd(tEplObdEntryPtr pUserOd_p);
-//---------------------------------------------------------------------------
-void EplObduCalInitVarEntry(tEplObdVarEntry *pVarEntry_p,
-			    u8 bType_p, tEplObdSize ObdSize_p);
-//---------------------------------------------------------------------------
-tEplObdSize EplObduCalGetDataSize(unsigned int uiIndex_p,
-				  unsigned int uiSubIndex_p);
-//---------------------------------------------------------------------------
-unsigned int EplObduCalGetNodeId(void);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalSetNodeId(unsigned int uiNodeId_p,
-			       tEplObdNodeIdType NodeIdType_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalGetAccessType(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   tEplObdAccess *pAccessTyp_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalReadEntryToLe(unsigned int uiIndex_p,
-				   unsigned int uiSubIndex_p,
-				   void *pDstData_p,
-				   tEplObdSize *pSize_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalWriteEntryFromLe(unsigned int uiIndex_p,
-				      unsigned int uiSubIndex_p,
-				      void *pSrcData_p,
-				      tEplObdSize Size_p);
-//---------------------------------------------------------------------------
-tEplKernel EplObduCalSearchVarEntry(EPL_MCO_DECL_INSTANCE_PTR_ unsigned int uiIndex_p,
-				    unsigned int uiSubindex_p,
-				    tEplObdVarEntry **ppVarEntry_p);
-
-#endif // #ifndef _EPLOBDUCAL_H_
diff --git a/drivers/staging/epl/user/EplPdou.h b/drivers/staging/epl/user/EplPdou.h
deleted file mode 100644
index b8c832b..0000000
--- a/drivers/staging/epl/user/EplPdou.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for userspace PDO module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplPdou.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/11/19 17:14:38 $
-
-                $State: Exp $
-
-                Build Environment:
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/05/22 d.k.:   start of the implementation, version 1.00
-
-****************************************************************************/
-
-#ifndef _EPL_PDOU_H_
-#define _EPL_PDOU_H_
-
-#include "../EplPdo.h"
-
-tEplKernel EplPdouAddInstance(void);
-
-tEplKernel EplPdouDelInstance(void);
-
-#if (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_PDOU)) != 0)
-tEplKernel EplPdouCbObdAccess(tEplObdCbParam *pParam_p);
-#else
-#define EplPdouCbObdAccess		NULL
-#endif
-
-// returns error if bPdoId_p is already valid
-/*
-tEplKernel EplPdouSetMapping(
-    u8 bPdoId_p, BOOL fTxRx_p, u8 bNodeId, u8 bMappingVersion,
-    tEplPdoMapping * pMapping_p, u8 bMaxEntries_p);
-
-tEplKernel EplPdouGetMapping(
-    u8 bPdoId_p, BOOL fTxRx_p, u8 * pbNodeId, u8 * pbMappingVersion,
-    tEplPdoMapping * pMapping_p, u8 * pbMaxEntries_p);
-*/
-
-#endif // #ifndef _EPL_PDOU_H_
diff --git a/drivers/staging/epl/user/EplSdoAsndu.h b/drivers/staging/epl/user/EplSdoAsndu.h
deleted file mode 100644
index a62d4c9..0000000
--- a/drivers/staging/epl/user/EplSdoAsndu.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for SDO/Asnd-Protocolabstractionlayer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoAsndu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.6 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/07 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLSDOASNDU_H_
-#define _EPLSDOASNDU_H_
-
-#include "../EplSdo.h"
-#include "../EplDll.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-
-tEplKernel EplSdoAsnduInit(tEplSequLayerReceiveCb fpReceiveCb_p);
-
-tEplKernel EplSdoAsnduAddInstance(tEplSequLayerReceiveCb fpReceiveCb_p);
-
-tEplKernel EplSdoAsnduDelInstance(void);
-
-tEplKernel EplSdoAsnduInitCon(tEplSdoConHdl *pSdoConHandle_p,
-			      unsigned int uiTargetNodeId_p);
-
-tEplKernel EplSdoAsnduSendData(tEplSdoConHdl SdoConHandle_p,
-			       tEplFrame *pSrcData_p,
-			       u32 dwDataSize_p);
-
-tEplKernel EplSdoAsnduDelCon(tEplSdoConHdl SdoConHandle_p);
-
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_ASND)) != 0)
-
-#endif // #ifndef _EPLSDOASNDU_H_
diff --git a/drivers/staging/epl/user/EplSdoAsySequ.h b/drivers/staging/epl/user/EplSdoAsySequ.h
deleted file mode 100644
index cc862de..0000000
--- a/drivers/staging/epl/user/EplSdoAsySequ.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for asychrionus SDO Sequence Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoAsySequ.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.4 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLSDOASYSEQU_H_
-#define _EPLSDOASYSEQU_H_
-
-#include "../EplSdo.h"
-#include "EplSdoUdpu.h"
-#include "EplSdoAsndu.h"
-#include "../EplEvent.h"
-#include "EplTimeru.h"
-
-tEplKernel EplSdoAsySeqInit(tEplSdoComReceiveCb fpSdoComCb_p,
-			    tEplSdoComConCb fpSdoComConCb_p);
-
-tEplKernel EplSdoAsySeqAddInstance(tEplSdoComReceiveCb fpSdoComCb_p,
-				   tEplSdoComConCb fpSdoComConCb_p);
-
-tEplKernel EplSdoAsySeqDelInstance(void);
-
-tEplKernel EplSdoAsySeqInitCon(tEplSdoSeqConHdl *pSdoSeqConHdl_p,
-			       unsigned int uiNodeId_p,
-			       tEplSdoType SdoType);
-
-tEplKernel EplSdoAsySeqSendData(tEplSdoSeqConHdl SdoSeqConHdl_p,
-				unsigned int uiDataSize_p,
-				tEplFrame *pData_p);
-
-tEplKernel EplSdoAsySeqProcessEvent(tEplEvent *pEvent_p);
-
-tEplKernel EplSdoAsySeqDelCon(tEplSdoSeqConHdl SdoSeqConHdl_p);
-
-#endif // #ifndef _EPLSDOASYSEQU_H_
diff --git a/drivers/staging/epl/user/EplSdoComu.h b/drivers/staging/epl/user/EplSdoComu.h
deleted file mode 100644
index 4eee6fa..0000000
--- a/drivers/staging/epl/user/EplSdoComu.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for SDO Command Layer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoComu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLSDOCOMU_H_
-#define _EPLSDOCOMU_H_
-
-#include "../EplSdo.h"
-#include "../EplObd.h"
-#include "../EplSdoAc.h"
-#include "EplObdu.h"
-#include "EplSdoAsySequ.h"
-
-tEplKernel EplSdoComInit(void);
-
-tEplKernel EplSdoComAddInstance(void);
-
-tEplKernel EplSdoComDelInstance(void);
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDOC)) != 0)
-
-tEplKernel EplSdoComDefineCon(tEplSdoComConHdl *pSdoComConHdl_p,
-			      unsigned int uiTargetNodeId_p,
-			      tEplSdoType ProtType_p);
-
-tEplKernel EplSdoComInitTransferByIndex(tEplSdoComTransParamByIndex *pSdoComTransParam_p);
-
-tEplKernel EplSdoComUndefineCon(tEplSdoComConHdl SdoComConHdl_p);
-
-tEplKernel EplSdoComGetState(tEplSdoComConHdl SdoComConHdl_p,
-			     tEplSdoComFinished *pSdoComFinished_p);
-
-tEplKernel EplSdoComSdoAbort(tEplSdoComConHdl SdoComConHdl_p,
-			     u32 dwAbortCode_p);
-
-#endif
-
-// for future extention
-/*
-tEplKernel EplSdoComInitTransferAllByIndex(tEplSdoComTransParamAllByIndex* pSdoComTransParam_p);
-
-tEplKernel EplSdoComInitTransferByName(tEplSdoComTransParamByName* pSdoComTransParam_p);
-
-tEplKernel EplSdoComInitTransferFile(tEplSdoComTransParamFile* pSdoComTransParam_p);
-
-*/
-
-#endif // #ifndef _EPLSDOCOMU_H_
diff --git a/drivers/staging/epl/user/EplSdoUdpu.h b/drivers/staging/epl/user/EplSdoUdpu.h
deleted file mode 100644
index 13e2a27..0000000
--- a/drivers/staging/epl/user/EplSdoUdpu.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for SDO/UDP-Protocollabstractionlayer module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplSdoUdpu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/10/17 15:32:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/06/26 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLSDOUDPU_H_
-#define _EPLSDOUDPU_H_
-
-#include "../EplSdo.h"
-
-#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-
-tEplKernel EplSdoUdpuInit(tEplSequLayerReceiveCb fpReceiveCb_p);
-
-tEplKernel EplSdoUdpuAddInstance(tEplSequLayerReceiveCb fpReceiveCb_p);
-
-tEplKernel EplSdoUdpuDelInstance(void);
-
-tEplKernel EplSdoUdpuConfig(unsigned long ulIpAddr_p,
-			    unsigned int uiPort_p);
-
-tEplKernel EplSdoUdpuInitCon(tEplSdoConHdl *pSdoConHandle_p,
-			     unsigned int uiTargetNodeId_p);
-
-tEplKernel EplSdoUdpuSendData(tEplSdoConHdl SdoConHandle_p,
-			      tEplFrame *pSrcData_p, u32 dwDataSize_p);
-
-tEplKernel EplSdoUdpuDelCon(tEplSdoConHdl SdoConHandle_p);
-
-#endif // end of #if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_SDO_UDP)) != 0)
-
-#endif // #ifndef _EPLSDOUDPU_H_
diff --git a/drivers/staging/epl/user/EplStatusu.h b/drivers/staging/epl/user/EplStatusu.h
deleted file mode 100644
index 0fd3ebb..0000000
--- a/drivers/staging/epl/user/EplStatusu.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Statusu-Module
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplStatusu.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.3 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/11/15 d.k.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLSTATUSU_H_
-#define _EPLSTATUSU_H_
-
-#include "../EplDll.h"
-
-typedef tEplKernel(* tEplStatusuCbResponse) (unsigned int uiNodeId_p,
-					     tEplStatusResponse *pStatusResponse_p);
-
-tEplKernel EplStatusuInit(void);
-
-tEplKernel EplStatusuAddInstance(void);
-
-tEplKernel EplStatusuDelInstance(void);
-
-tEplKernel EplStatusuReset(void);
-
-tEplKernel EplStatusuRequestStatusResponse(unsigned int uiNodeId_p,
-					   tEplStatusuCbResponse pfnCbResponse_p);
-
-#endif // #ifndef _EPLSTATUSU_H_
diff --git a/drivers/staging/epl/user/EplTimeru.h b/drivers/staging/epl/user/EplTimeru.h
deleted file mode 100644
index 5c44748..0000000
--- a/drivers/staging/epl/user/EplTimeru.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-
-  (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
-      www.systec-electronic.com
-
-  Project:      openPOWERLINK
-
-  Description:  include file for Epl Userspace-Timermodule
-
-  License:
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of SYSTEC electronic GmbH nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without prior written permission. For written
-       permission, please contact info@xxxxxxxxxxxxxxxxxxxxxx
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-    FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-    COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-    POSSIBILITY OF SUCH DAMAGE.
-
-    Severability Clause:
-
-        If a provision of this License is or becomes illegal, invalid or
-        unenforceable in any jurisdiction, that shall not affect:
-        1. the validity or enforceability in that jurisdiction of any other
-           provision of this License; or
-        2. the validity or enforceability in other jurisdictions of that or
-           any other provision of this License.
-
-  -------------------------------------------------------------------------
-
-                $RCSfile: EplTimeru.h,v $
-
-                $Author: D.Krueger $
-
-                $Revision: 1.5 $  $Date: 2008/04/17 21:36:32 $
-
-                $State: Exp $
-
-                Build Environment:
-                    GCC V3.4
-
-  -------------------------------------------------------------------------
-
-  Revision History:
-
-  2006/07/06 k.t.:   start of the implementation
-
-****************************************************************************/
-
-#ifndef _EPLTIMERU_H_
-#define _EPLTIMERU_H_
-
-#include "../EplTimer.h"
-#include "EplEventu.h"
-
-tEplKernel EplTimeruInit(void);
-
-tEplKernel EplTimeruAddInstance(void);
-
-tEplKernel EplTimeruDelInstance(void);
-
-tEplKernel EplTimeruSetTimerMs(tEplTimerHdl *pTimerHdl_p,
-			       unsigned long ulTime_p,
-			       tEplTimerArg Argument_p);
-
-tEplKernel EplTimeruModifyTimerMs(tEplTimerHdl *pTimerHdl_p,
-				  unsigned long ulTime_p,
-				  tEplTimerArg Argument_p);
-
-tEplKernel EplTimeruDeleteTimer(tEplTimerHdl *pTimerHdl_p);
-
-BOOL EplTimeruIsTimerActive(tEplTimerHdl TimerHdl_p);
-
-#endif // #ifndef _EPLTIMERU_H_
-- 
1.6.4.2

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux