blob: f96fe84c49724bd1fe1c796ead29ab456c0429ec [file] [log] [blame]
Daniel Krueger9d7164c2008-12-19 11:41:57 -08001/****************************************************************************
2
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
5
6 Project: openPOWERLINK
7
8 Description: source file for DLL Communication Abstraction Layer module in EPL user part
9
10 License:
11
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions
14 are met:
15
16 1. Redistributions of source code must retain the above copyright
17 notice, this list of conditions and the following disclaimer.
18
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
22
23 3. Neither the name of SYSTEC electronic GmbH nor the names of its
24 contributors may be used to endorse or promote products derived
25 from this software without prior written permission. For written
26 permission, please contact info@systec-electronic.com.
27
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 POSSIBILITY OF SUCH DAMAGE.
40
41 Severability Clause:
42
43 If a provision of this License is or becomes illegal, invalid or
44 unenforceable in any jurisdiction, that shall not affect:
45 1. the validity or enforceability in that jurisdiction of any other
46 provision of this License; or
47 2. the validity or enforceability in other jurisdictions of that or
48 any other provision of this License.
49
50 -------------------------------------------------------------------------
51
52 $RCSfile: EplDlluCal.c,v $
53
54 $Author: D.Krueger $
55
56 $Revision: 1.7 $ $Date: 2008/10/17 15:32:32 $
57
58 $State: Exp $
59
60 Build Environment:
61 GCC V3.4
62
63 -------------------------------------------------------------------------
64
65 Revision History:
66
67 2006/06/20 d.k.: start of the implementation, version 1.00
68
69****************************************************************************/
70
71#include "user/EplDlluCal.h"
72#include "user/EplEventu.h"
73
74#include "EplDllCal.h"
75
76// include only if direct call between user- and kernelspace is enabled
77#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
78#include "kernel/EplDllkCal.h"
79#endif
80
Daniel Krueger9d7164c2008-12-19 11:41:57 -080081#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
82
83/***************************************************************************/
84/* */
85/* */
86/* G L O B A L D E F I N I T I O N S */
87/* */
88/* */
89/***************************************************************************/
90
91//---------------------------------------------------------------------------
92// const defines
93//---------------------------------------------------------------------------
94
95//---------------------------------------------------------------------------
96// local types
97//---------------------------------------------------------------------------
98
99//---------------------------------------------------------------------------
100// modul globale vars
101//---------------------------------------------------------------------------
102
103//---------------------------------------------------------------------------
104// local function prototypes
105//---------------------------------------------------------------------------
106
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800107/***************************************************************************/
108/* */
109/* */
110/* C L A S S EplDlluCal */
111/* */
112/* */
113/***************************************************************************/
114//
115// Description:
116//
117//
118/***************************************************************************/
119
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800120//=========================================================================//
121// //
122// P R I V A T E D E F I N I T I O N S //
123// //
124//=========================================================================//
125
126//---------------------------------------------------------------------------
127// const defines
128//---------------------------------------------------------------------------
129
130//---------------------------------------------------------------------------
131// local types
132//---------------------------------------------------------------------------
133
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800134typedef struct {
135 tEplDlluCbAsnd m_apfnDlluCbAsnd[EPL_DLL_MAX_ASND_SERVICE_ID];
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800136
137} tEplDlluCalInstance;
138
139//---------------------------------------------------------------------------
140// local vars
141//---------------------------------------------------------------------------
142
143// if no dynamic memory allocation shall be used
144// define structures statically
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800145static tEplDlluCalInstance EplDlluCalInstance_g;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800146
147//---------------------------------------------------------------------------
148// local function prototypes
149//---------------------------------------------------------------------------
150
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800151static tEplKernel EplDlluCalSetAsndServiceIdFilter(tEplDllAsndServiceId
152 ServiceId_p,
153 tEplDllAsndFilter Filter_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800154
155//=========================================================================//
156// //
157// P U B L I C F U N C T I O N S //
158// //
159//=========================================================================//
160
161//---------------------------------------------------------------------------
162//
163// Function: EplDlluCalAddInstance()
164//
165// Description: add and initialize new instance of DLL CAL module
166//
167// Parameters: none
168//
169// Returns: tEplKernel = error code
170//
171//
172// State:
173//
174//---------------------------------------------------------------------------
175
Greg Kroah-Hartman85df0b82009-03-23 13:01:08 -0700176tEplKernel EplDlluCalAddInstance(void)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800177{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800178 tEplKernel Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800179
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800180 // reset instance structure
181 EPL_MEMSET(&EplDlluCalInstance_g, 0, sizeof(EplDlluCalInstance_g));
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800182
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800183 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800184}
185
186//---------------------------------------------------------------------------
187//
188// Function: EplDlluCalDelInstance()
189//
190// Description: deletes an instance of DLL CAL module
191//
192// Parameters: none
193//
194// Returns: tEplKernel = error code
195//
196//
197// State:
198//
199//---------------------------------------------------------------------------
200
Greg Kroah-Hartman85df0b82009-03-23 13:01:08 -0700201tEplKernel EplDlluCalDelInstance(void)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800202{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800203 tEplKernel Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800204
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800205 // reset instance structure
206 EPL_MEMSET(&EplDlluCalInstance_g, 0, sizeof(EplDlluCalInstance_g));
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800207
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800208 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800209}
210
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800211//---------------------------------------------------------------------------
212//
213// Function: EplDlluCalProcess
214//
215// Description: process the passed asynch frame
216//
217// Parameters: pEvent_p = event containing frame to be processed
218//
219// Returns: tEplKernel = error code
220//
221//
222// State:
223//
224//---------------------------------------------------------------------------
225
226tEplKernel EplDlluCalProcess(tEplEvent * pEvent_p)
227{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800228 tEplKernel Ret = kEplSuccessful;
229 tEplMsgType MsgType;
230 unsigned int uiAsndServiceId;
231 tEplFrameInfo FrameInfo;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800232
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800233 if (pEvent_p->m_EventType == kEplEventTypeAsndRx) {
234 FrameInfo.m_pFrame = (tEplFrame *) pEvent_p->m_pArg;
235 FrameInfo.m_uiFrameSize = pEvent_p->m_uiSize;
236 // extract NetTime
237 FrameInfo.m_NetTime = pEvent_p->m_NetTime;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800238
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800239 MsgType =
240 (tEplMsgType) AmiGetByteFromLe(&FrameInfo.m_pFrame->
241 m_le_bMessageType);
242 if (MsgType != kEplMsgTypeAsnd) {
243 Ret = kEplInvalidOperation;
244 goto Exit;
245 }
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800246
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800247 uiAsndServiceId =
248 (unsigned int)AmiGetByteFromLe(&FrameInfo.m_pFrame->m_Data.
249 m_Asnd.m_le_bServiceId);
250 if (uiAsndServiceId < EPL_DLL_MAX_ASND_SERVICE_ID) { // ASnd service ID is valid
251 if (EplDlluCalInstance_g.m_apfnDlluCbAsnd[uiAsndServiceId] != NULL) { // handler was registered
252 Ret =
253 EplDlluCalInstance_g.
254 m_apfnDlluCbAsnd[uiAsndServiceId]
255 (&FrameInfo);
256 }
257 }
258 }
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800259
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800260 Exit:
261 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800262}
263
264//---------------------------------------------------------------------------
265//
266// Function: EplDlluCalRegAsndService()
267//
268// Description: registers the specified handler for the specified
269// AsndServiceId with the specified node ID filter.
270//
271// Parameters: ServiceId_p = ASnd Service ID
272// pfnDlluCbAsnd_p = callback function
273// Filter_p = node ID filter
274//
275// Returns: tEplKernel = error code
276//
277//
278// State:
279//
280//---------------------------------------------------------------------------
281
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800282tEplKernel EplDlluCalRegAsndService(tEplDllAsndServiceId ServiceId_p,
283 tEplDlluCbAsnd pfnDlluCbAsnd_p,
284 tEplDllAsndFilter Filter_p)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800285{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800286 tEplKernel Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800287
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800288 if (ServiceId_p < tabentries(EplDlluCalInstance_g.m_apfnDlluCbAsnd)) {
289 // memorize function pointer
290 EplDlluCalInstance_g.m_apfnDlluCbAsnd[ServiceId_p] =
291 pfnDlluCbAsnd_p;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800292
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800293 if (pfnDlluCbAsnd_p == NULL) { // close filter
294 Filter_p = kEplDllAsndFilterNone;
295 }
296 // set filter in DLL module in kernel part
297 Ret = EplDlluCalSetAsndServiceIdFilter(ServiceId_p, Filter_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800298
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800299 }
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800300
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800301 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800302}
303
304//---------------------------------------------------------------------------
305//
306// Function: EplDlluCalAsyncSend()
307//
308// Description: sends the frame with the specified priority.
309//
310// Parameters: pFrameInfo_p = frame
311// m_uiFrameSize does not include the
312// ethernet header (14 bytes)
313// Priority_p = priority
314//
315// Returns: tEplKernel = error code
316//
317//
318// State:
319//
320//---------------------------------------------------------------------------
321
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800322tEplKernel EplDlluCalAsyncSend(tEplFrameInfo * pFrameInfo_p,
323 tEplDllAsyncReqPriority Priority_p)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800324{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800325 tEplKernel Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800326
327#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLK)) != 0)
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800328 pFrameInfo_p->m_uiFrameSize += 14; // add size of ethernet header
329 Ret = EplDllkCalAsyncSend(pFrameInfo_p, Priority_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800330#else
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800331 Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800332#endif
333
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800334 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800335}
336
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800337#if(((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
338
339//---------------------------------------------------------------------------
340//
341// Function: EplDlluCalIssueRequest()
342//
343// Description: issues a StatusRequest or a IdentRequest to the specified node.
344//
345// Parameters: Service_p = request service ID
346// uiNodeId_p = node ID
347// bSoaFlag1_p = flag1 for this node (transmit in SoA and PReq)
348// If 0xFF this flag is ignored.
349//
350// Returns: tEplKernel = error code
351//
352//
353// State:
354//
355//---------------------------------------------------------------------------
356
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800357tEplKernel EplDlluCalIssueRequest(tEplDllReqServiceId Service_p,
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -0700358 unsigned int uiNodeId_p, u8 bSoaFlag1_p)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800359{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800360 tEplKernel Ret = kEplSuccessful;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800361
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800362 // add node to appropriate request queue
363 switch (Service_p) {
364 case kEplDllReqServiceIdent:
365 case kEplDllReqServiceStatus:
366 {
367 tEplEvent Event;
368 tEplDllCalIssueRequest IssueReq;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800369
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800370 Event.m_EventSink = kEplEventSinkDllkCal;
371 Event.m_EventType = kEplEventTypeDllkIssueReq;
372 IssueReq.m_Service = Service_p;
373 IssueReq.m_uiNodeId = uiNodeId_p;
374 IssueReq.m_bSoaFlag1 = bSoaFlag1_p;
375 Event.m_pArg = &IssueReq;
376 Event.m_uiSize = sizeof(IssueReq);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800377
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800378 Ret = EplEventuPost(&Event);
379 break;
380 }
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800381
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800382 default:
383 {
384 Ret = kEplDllInvalidParam;
385 goto Exit;
386 }
387 }
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800388
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800389 Exit:
390 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800391}
392
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800393//---------------------------------------------------------------------------
394//
395// Function: EplDlluCalAddNode()
396//
397// Description: adds the specified node to the isochronous phase.
398//
399// Parameters: pNodeInfo_p = pointer of node info structure
400//
401// Returns: tEplKernel = error code
402//
403//
404// State:
405//
406//---------------------------------------------------------------------------
407
408tEplKernel EplDlluCalAddNode(tEplDllNodeInfo * pNodeInfo_p)
409{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800410 tEplKernel Ret = kEplSuccessful;
411 tEplEvent Event;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800412
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800413 Event.m_EventSink = kEplEventSinkDllkCal;
414 Event.m_EventType = kEplEventTypeDllkAddNode;
415 Event.m_pArg = pNodeInfo_p;
416 Event.m_uiSize = sizeof(tEplDllNodeInfo);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800417
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800418 Ret = EplEventuPost(&Event);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800419
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800420 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800421}
422
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800423//---------------------------------------------------------------------------
424//
425// Function: EplDlluCalDeleteNode()
426//
427// Description: removes the specified node from the isochronous phase.
428//
429// Parameters: uiNodeId_p = node ID
430//
431// Returns: tEplKernel = error code
432//
433//
434// State:
435//
436//---------------------------------------------------------------------------
437
438tEplKernel EplDlluCalDeleteNode(unsigned int uiNodeId_p)
439{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800440 tEplKernel Ret = kEplSuccessful;
441 tEplEvent Event;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800442
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800443 Event.m_EventSink = kEplEventSinkDllkCal;
444 Event.m_EventType = kEplEventTypeDllkDelNode;
445 Event.m_pArg = &uiNodeId_p;
446 Event.m_uiSize = sizeof(uiNodeId_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800447
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800448 Ret = EplEventuPost(&Event);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800449
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800450 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800451}
452
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800453//---------------------------------------------------------------------------
454//
455// Function: EplDlluCalSoftDeleteNode()
456//
457// Description: removes the specified node softly from the isochronous phase.
458//
459// Parameters: uiNodeId_p = node ID
460//
461// Returns: tEplKernel = error code
462//
463//
464// State:
465//
466//---------------------------------------------------------------------------
467
468tEplKernel EplDlluCalSoftDeleteNode(unsigned int uiNodeId_p)
469{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800470 tEplKernel Ret = kEplSuccessful;
471 tEplEvent Event;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800472
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800473 Event.m_EventSink = kEplEventSinkDllkCal;
474 Event.m_EventType = kEplEventTypeDllkSoftDelNode;
475 Event.m_pArg = &uiNodeId_p;
476 Event.m_uiSize = sizeof(uiNodeId_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800477
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800478 Ret = EplEventuPost(&Event);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800479
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800480 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800481}
482
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800483#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_NMT_MN)) != 0)
484
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800485//=========================================================================//
486// //
487// P R I V A T E F U N C T I O N S //
488// //
489//=========================================================================//
490
491//---------------------------------------------------------------------------
492//
493// Function: EplDlluCalSetAsndServiceIdFilter()
494//
495// Description: forwards call to EplDllkSetAsndServiceIdFilter() in kernel part
496//
497// Parameters: ServiceId_p = ASnd Service ID
498// Filter_p = node ID filter
499//
500// Returns: tEplKernel = error code
501//
502//
503// State:
504//
505//---------------------------------------------------------------------------
506
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800507static tEplKernel EplDlluCalSetAsndServiceIdFilter(tEplDllAsndServiceId
508 ServiceId_p,
509 tEplDllAsndFilter Filter_p)
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800510{
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800511 tEplKernel Ret = kEplSuccessful;
512 tEplEvent Event;
513 tEplDllCalAsndServiceIdFilter ServFilter;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800514
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800515 Event.m_EventSink = kEplEventSinkDllkCal;
516 Event.m_EventType = kEplEventTypeDllkServFilter;
517 ServFilter.m_ServiceId = ServiceId_p;
518 ServFilter.m_Filter = Filter_p;
519 Event.m_pArg = &ServFilter;
520 Event.m_uiSize = sizeof(ServFilter);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800521
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800522 Ret = EplEventuPost(&Event);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800523
Greg Kroah-Hartman833dfbe2008-12-19 17:11:52 -0800524 return Ret;
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800525}
526
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800527#endif // (((EPL_MODULE_INTEGRATION) & (EPL_MODULE_DLLU)) != 0)
528
529// EOF