d4bf3fee13c3e2e75efbe68d2d0f66510574e1cf
[ipc/ipcdev.git] / linux / include / _lad.h
1 /*
2  * Copyright (c) 2012-2015 Texas Instruments Incorporated - http://www.ti.com
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*
33  *  ======== _lad.h ========
34  */
36 #ifndef _lad_
37 #define _lad_
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
43 #include <ti/ipc/MessageQ.h>
44 #include <_MessageQ.h>
45 #include <ti/ipc/NameServer.h>
46 #include <ti/ipc/MultiProc.h>
47 #include <_MultiProc.h>
48 #include <stdio.h>
49 #include <ti/ipc/GateMP.h>
50 #include <_GateMP.h>
51 #include <_Ipc.h>
52 #include <GateHWSpinlock.h>
53 #include <sys/time.h>
54 #include <ti/ipc/namesrv/_NameServerRemoteRpmsg.h>
56 extern Bool logFile;
57 extern FILE *logPtr;
58 extern struct timeval start_tv;
60 /*
61  * Macros for writing to log file.
62  *
63  * For the timestamp prefix, subtract the start time (which is established
64  * when the logFile is opened) so that the massive "since the epoch" value
65  * is not displayed.  For this, subtract only the timeval.tv_sec (seconds)
66  * value so we don't have to worry about the "borrow" that results when
67  * start_tv.tv_usec > tv.tv_usec.
68  */
69 #define LOG0(a)  \
70     if (logFile == TRUE) { \
71         struct timeval tv; \
72         gettimeofday(&tv, NULL); \
73         fprintf(logPtr, "[%d.%06d] " a, \
74                 (unsigned int)(tv.tv_sec - start_tv.tv_sec), \
75                 (unsigned int)tv.tv_usec); \
76         fflush(logPtr); \
77     }
79 #define LOG1(a, b)  \
80     if (logFile == TRUE) { \
81         struct timeval tv; \
82         gettimeofday(&tv, NULL); \
83         fprintf(logPtr, "[%d.%06d] " a, \
84                 (unsigned int)(tv.tv_sec - start_tv.tv_sec), \
85                 (unsigned int)tv.tv_usec, b); \
86         fflush(logPtr); \
87     }
89 #define LOG2(a, b, c)  \
90     if (logFile == TRUE) { \
91         struct timeval tv; \
92         gettimeofday(&tv, NULL); \
93         fprintf(logPtr, "[%d.%06d] " a, \
94                 (unsigned int)(tv.tv_sec - start_tv.tv_sec), \
95                 (unsigned int)tv.tv_usec, b, c); \
96         fflush(logPtr); \
97     }
99 #define LOG3(a, b, c, d)  \
100     if (logFile == TRUE) { \
101         struct timeval tv; \
102         gettimeofday(&tv, NULL); \
103         fprintf(logPtr, "[%d.%06d] " a, \
104                 (unsigned int)(tv.tv_sec - start_tv.tv_sec), \
105                 (unsigned int)tv.tv_usec, b, c, d); \
106         fflush(logPtr); \
107     }
109 #define LOG4(a, b, c, d, e)  \
110     if (logFile == TRUE) { \
111         struct timeval tv; \
112         gettimeofday(&tv, NULL); \
113         fprintf(logPtr, "[%d.%06d] " a, \
114                 (unsigned int)(tv.tv_sec - start_tv.tv_sec), \
115                 (unsigned int)tv.tv_usec, b, c, d, e); \
116         fflush(logPtr); \
117     }
119 /* macros for generating verbose output: */
120 #define PRINTVERBOSE0(a)  \
121     if (verbose == TRUE) {  printf(a); }
123 #define PRINTVERBOSE1(a, b)  \
124     if (verbose == TRUE) {  printf(a, b); }
126 #define PRINTVERBOSE2(a, b, c)  \
127     if (verbose == TRUE) {  printf(a, b, c); }
129 #define PRINTVERBOSE3(a, b, c, d)  \
130     if (verbose == TRUE) {  printf(a, b, c, d); }
133 /* LAD commmand FIFO strings: */
134 #if defined (IPC_BUILDOS_ANDROID)
135 #define LAD_COMMANDFIFO         "/data/lad/LAD/LADCMDS"
136 #define LAD_ROOTDIR             "/data/lad/"
137 #define LAD_WORKINGDIR          "/data/lad/LAD/"
138 #else
139 #define LAD_COMMANDFIFO         "/tmp/LAD/LADCMDS"
140 #define LAD_ROOTDIR             "/tmp/"
141 #define LAD_WORKINGDIR          "/tmp/LAD/"
142 #endif
144 #define LAD_RESPONSEFIFOPATH    LAD_WORKINGDIR
145 #define LAD_PROTOCOLVERSION     "03000000"    /*  MMSSRRRR */
147 #define LAD_MAXNUMCLIENTS  32      /* max simultaneous clients */
148 #define LAD_CONNECTTIMEOUT 5.0  /* LAD connect response timeout (sec) */
149 #define LAD_DISCONNECTTIMEOUT   5.0  /* LAD disconnect timeout (sec) */
150 #define LAD_MAXLENGTHFIFONAME   128  /* max length client FIFO name */
151 #define LAD_MAXLENGTHCOMMAND    512  /* size limit for LAD command string */
152 #define LAD_MAXLENGTHRESPONSE   512  /* size limit for LAD response string */
153 #define LAD_MAXLENGTHPROTOVERS  16   /* size limit for protocol version */
154 #define LAD_MAXLOGFILEPATH 256  /* size limit for LAD log file path */
155 #define LAD_COMMANDLENGTH       sizeof(struct LAD_CommandObj)
156 #define LAD_RESPONSELENGTH      sizeof(union LAD_ResponseObj)
158 #define LAD_MESSAGEQCREATEMAXNAMELEN 32
160 #define LAD_MAXENTRYNAMELEN  MAXNAMEINCHAR /* max for LAD NameServer name */
161 #define LAD_MAXENTRYVALUELEN 32  /* size limit for LAD NameServer value */
163 typedef enum {
164     LAD_CONNECT = 0,
165     LAD_DISCONNECT,
166     LAD_IPC_GETCONFIG,
167     LAD_NAMESERVER_SETUP,
168     LAD_NAMESERVER_DESTROY,
169     LAD_NAMESERVER_PARAMS_INIT,
170     LAD_NAMESERVER_CREATE,
171     LAD_NAMESERVER_DELETE,
172     LAD_NAMESERVER_ADD,
173     LAD_NAMESERVER_GET,
174     LAD_NAMESERVER_ADDUINT32,
175     LAD_NAMESERVER_GETUINT32,
176     LAD_NAMESERVER_GETLOCAL,
177     LAD_NAMESERVER_GETLOCALUINT32,
178     LAD_NAMESERVER_REMOVE,
179     LAD_NAMESERVER_REMOVEENTRY,
180     LAD_NAMESERVER_ATTACH,
181     LAD_NAMESERVER_DETACH,
182     LAD_MESSAGEQ_GETCONFIG,
183     LAD_MESSAGEQ_SETUP,
184     LAD_MESSAGEQ_DESTROY,
185     LAD_MESSAGEQ_CREATE,
186     LAD_MESSAGEQ_DELETE,
187     LAD_MESSAGEQ_MSGINIT,
188     LAD_MULTIPROC_GETCONFIG,
189     LAD_GATEMP_ATTACH,
190     LAD_GATEMP_DETACH,
191     LAD_GATEMP_START,
192     LAD_GATEMP_GETNUMRESOURCES,
193     LAD_GATEMP_GETFREERESOURCE,
194     LAD_GATEMP_RELEASERESOURCE,
195     LAD_GATEMP_ISSETUP,
196     LAD_GATEHWSPINLOCK_GETCONFIG,
197     LAD_EXIT
198 } _LAD_Command;
200 struct LAD_CommandObj {
201     Int cmd;
202     Int clientId;
203     union {
204         struct {
205             Int pid;
206             Char name[LAD_MAXLENGTHFIFONAME];
207             Char protocol[LAD_MAXLENGTHPROTOVERS];
208         } connect;
209         struct {
210             Int procId;
211             Int rprocId;
212         } rprocSetId;
213         struct {
214             Char name[LAD_MAXENTRYNAMELEN];
215             NameServer_Params params;
216         } create;
217         struct {
218             NameServer_Handle handle;
219         } nsdelete;
220         struct {
221             NameServer_Handle handle;
222             Char name[LAD_MAXENTRYNAMELEN];
223             UInt8 buf[LAD_MAXENTRYVALUELEN];
224             UInt32 len;
225         } add;
226         struct {
227             NameServer_Handle handle;
228             Char name[LAD_MAXENTRYNAMELEN];
229             UInt32 len;
230             UInt16 procId[MultiProc_MAXPROCESSORS];
231         } get;
232         struct {
233             NameServer_Handle handle;
234             Char name[LAD_MAXENTRYNAMELEN];
235             UInt32 val;
236         } addUInt32;
237         struct {
238             NameServer_Handle handle;
239             Char name[LAD_MAXENTRYNAMELEN];
240             UInt16 procId[MultiProc_MAXPROCESSORS];
241         } getUInt32;
242         struct {
243             NameServer_Handle handle;
244             Char name[LAD_MAXENTRYNAMELEN];
245             UInt32 len;
246         } getLocal;
247         struct {
248             NameServer_Handle handle;
249             Char name[LAD_MAXENTRYNAMELEN];
250         } getLocalUInt32;
251         struct {
252             NameServer_Handle handle;
253             Char name[LAD_MAXENTRYNAMELEN];
254         } remove;
255         struct {
256             NameServer_Handle handle;
257             Ptr entryPtr;
258         } removeEntry;
259         struct {
260             UInt16 procId;
261         } attach;
262         struct {
263             UInt16 procId;
264         } detach;
265         struct {
266             MessageQ_Config cfg;
267         } messageQSetup;
268         struct {
269             Char name[LAD_MESSAGEQCREATEMAXNAMELEN];
270             MessageQ_Params params;
271         } messageQCreate;
272         struct {
273             Void *serverHandle;
274         } messageQDelete;
275         struct {
276             GateMP_RemoteProtect type;
277         } gateMPGetNumResources;
278         struct {
279             GateMP_RemoteProtect type;
280         } gateMPGetFreeResource;
281         struct {
282             GateMP_RemoteProtect type;
283             Int32 id;
284         } gateMPReleaseResource;
285         struct {
286             Bool result;
287         } gateMPIsSetup;
288     } args;
289 };
291 union LAD_ResponseObj {
292     struct {
293        Int status;
294        UInt32 len;
295        UInt8 buf[LAD_MAXENTRYVALUELEN];
296     } get;
297     struct {
298        Int status;
299        UInt32 val;
300     } getUInt32;
301     struct {
302        Int status;
303        Int assignedId;
304     } connect;
305     struct {
306        Int status;
307        NameServer_Handle handle;
308     } nsdelete;
309     struct {
310        Int status;
311        NameServer_Handle nameServerHandle;
312     } setup;
313     struct {
314        Int status;
315        Int queueId;
316        Void *serverHandle;
317     } messageQCreate;
318     struct {
319        Int status;
320     } messageQDelete;
321     struct {
322        Int status;
323        MessageQ_MsgHeader msg;
324     } msgInit;
325     struct {
326        Int status;
327        MessageQ_Config cfg;
328     } messageQGetConfig;
329     struct {
330        Int status;
331        MultiProc_Config cfg;
332     } multiprocGetConfig;
333     struct {
334        Int status;
335        NameServer_Handle nameServerHandle;
336     } gateMPStart;
337     struct {
338        Int status;
339        Int32 value;
340     } gateMPGetNumResources;
341     struct {
342        Int status;
343        Int32 id;
344     } gateMPGetFreeResource;
345     struct {
346        Int status;
347     } gateMPReleaseResource;
348     struct {
349        Int status;
350        Bool result;
351     } gateMPIsSetup;
352     struct {
353        Int status;
354        GateHWSpinlock_Config cfgParams;
355     } gateHWSpinlockGetConfig;
356     Ipc_Config ipcConfig;
357     NameServer_Params params;
358     NameServer_Handle handle;
359     Ptr entryPtr;
360     Int status;
361 };
364 #ifdef __cplusplus
366 #endif
368 #endif