aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/epl/EplEventk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/epl/EplEventk.c')
-rw-r--r--drivers/staging/epl/EplEventk.c853
1 files changed, 0 insertions, 853 deletions
diff --git a/drivers/staging/epl/EplEventk.c b/drivers/staging/epl/EplEventk.c
deleted file mode 100644
index ef36815c7984..000000000000
--- 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@systec-electronic.com.
-
- 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