1 /*
2 * Copyright (c) 2013-2015, Texas Instruments Incorporated
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 * ======== NameServer.c ========
34 */
35 #include <ti/ipc/Std.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <sys/stat.h>
42 #include <sys/types.h>
43 #include <unistd.h>
44 #include <time.h>
46 #include <ti/ipc/NameServer.h>
47 #include <ti/ipc/MultiProc.h>
49 #include <_IpcLog.h>
50 #include <ti/syslink/inc/_MultiProc.h>
51 #include <ti/syslink/inc/IoctlDefs.h>
52 #include <ti/syslink/inc/usr/Qnx/NameServerDrv.h>
53 #include <ti/syslink/inc/NameServerDrvDefs.h>
55 /* traces in this file are controlled via _NameServer_verbose */
56 Bool _NameServer_verbose = FALSE;
57 #define verbose _NameServer_verbose
59 /*
60 * The NameServer_*() APIs are reproduced here. These versions are just
61 * front-ends for communicating with the actual NameServer module (currently
62 * implemented in the IPC driver process acting as a daemon).
63 */
65 Int NameServer_setup(Void)
66 {
67 Int status;
68 NameServerDrv_CmdArgs cmdArgs;
70 status = NameServerDrv_ioctl (CMD_NAMESERVER_SETUP, &cmdArgs);
71 if (status < 0) {
72 PRINTVERBOSE1("NameServer_setup: API (through IOCTL) failed, \
73 status=%d\n", status)
74 }
76 return status;
77 }
79 Int NameServer_destroy(Void)
80 {
81 Int status;
83 NameServerDrv_CmdArgs cmdArgs;
85 PRINTVERBOSE0("NameServer_destroy: entered\n")
87 status = NameServerDrv_ioctl (CMD_NAMESERVER_DESTROY, &cmdArgs);
89 if (status < 0) {
90 PRINTVERBOSE1("NameServer_destroy: API (through IOCTL) failed, \
91 status=%d\n", status)
92 }
94 return status;
95 }
97 Void NameServer_Params_init(NameServer_Params *params)
98 {
99 Int status;
100 NameServerDrv_CmdArgs cmdArgs;
102 cmdArgs.args.ParamsInit.params = params;
103 status = NameServerDrv_ioctl (CMD_NAMESERVER_PARAMS_INIT, &cmdArgs);
105 if (status < 0) {
106 PRINTVERBOSE1("NameServer_Params_init: API (through IOCTL) failed, \
107 status=%d\n", status)
108 return;
109 }
111 return;
112 }
114 NameServer_Handle NameServer_create(String name,
115 const NameServer_Params *params)
116 {
117 Int status;
118 NameServerDrv_CmdArgs cmdArgs;
120 cmdArgs.args.create.name = name;
121 cmdArgs.args.create.nameLen = strlen (name) + 1;
122 cmdArgs.args.create.params = (NameServer_Params *) params;
124 status = NameServerDrv_ioctl (CMD_NAMESERVER_CREATE, &cmdArgs);
126 if (status < 0) {
127 PRINTVERBOSE1("NameServer_create: API (through IOCTL) failed, \
128 status=%d\n", status)
129 return NULL;
130 }
132 return cmdArgs.args.create.handle;
133 }
135 Ptr NameServer_add(NameServer_Handle nsHandle, String name, Ptr buf,
136 UInt32 len)
137 {
138 Int status;
139 NameServerDrv_CmdArgs cmdArgs;
141 cmdArgs.args.add.handle = nsHandle;
142 cmdArgs.args.add.name = name;
143 cmdArgs.args.add.nameLen = strlen(name) + 1;
144 cmdArgs.args.add.buf = buf;
145 cmdArgs.args.add.len = len;
147 status = NameServerDrv_ioctl(CMD_NAMESERVER_ADD, &cmdArgs);
149 if (status < 0) {
150 PRINTVERBOSE1("NameServer_add: API (through IOCTL) failed, \
151 status=%d\n", status)
152 return NULL;
153 }
155 return cmdArgs.args.add.entry;
156 }
158 Int NameServer_get(NameServer_Handle handle, String name, Ptr buf,
159 UInt32 * len, UInt16 procId[])
160 {
161 Int status;
162 UInt32 procLen = 0;
163 NameServerDrv_CmdArgs cmdArgs;
165 cmdArgs.args.get.name = name;
166 cmdArgs.args.get.handle = handle;
167 cmdArgs.args.get.procId = procId;
168 if (procId != NULL) {
169 while (procId[procLen] != MultiProc_INVALIDID) {
170 procLen++;
171 }
172 }
173 cmdArgs.args.get.procLen = procLen;
174 cmdArgs.args.get.buf = buf;
175 cmdArgs.args.get.len = *len;
176 cmdArgs.args.get.nameLen = strlen(name) + 1;
178 status = NameServerDrv_ioctl (CMD_NAMESERVER_GET, &cmdArgs);
180 if (status < 0) {
181 PRINTVERBOSE1("NameServer_get: API (through IOCTL) failed, \
182 status=%d\n", status)
183 return status;
184 }
186 *len = cmdArgs.args.get.len;
188 return status;
189 }
192 Ptr NameServer_addUInt32(NameServer_Handle nsHandle, String name, UInt32 value)
193 {
194 Int status;
195 NameServerDrv_CmdArgs cmdArgs;
197 cmdArgs.args.addUInt32.handle = nsHandle;
198 cmdArgs.args.addUInt32.name = name;
199 cmdArgs.args.addUInt32.nameLen = strlen(name) + 1;
200 cmdArgs.args.addUInt32.value = value;
201 status = NameServerDrv_ioctl(CMD_NAMESERVER_ADDUINT32, &cmdArgs);
203 if (status < 0) {
204 PRINTVERBOSE1("NameServer_addUInt32: API (through IOCTL) failed, \
205 status=%d\n", status)
206 return NULL;
207 }
209 return cmdArgs.args.addUInt32.entry;
210 }
212 Int NameServer_getUInt32(NameServer_Handle nsHandle, String name, Ptr buf,
213 UInt16 procId[])
214 {
215 Int status;
216 UInt32 *val;
217 NameServerDrv_CmdArgs cmdArgs;
219 cmdArgs.args.getUInt32.name = name;
220 cmdArgs.args.getUInt32.handle = nsHandle;
221 if (procId != NULL) {
222 memcpy(cmdArgs.args.getUInt32.procId, procId,
223 sizeof(UInt16) * MultiProc_MAXPROCESSORS);
224 }
225 else {
226 cmdArgs.args.getUInt32.procId[0] = (UInt16)-1;
227 }
228 status = NameServerDrv_ioctl (CMD_NAMESERVER_GETUINT32, &cmdArgs);
230 if (status < 0) {
231 PRINTVERBOSE1("NameServer_getUInt32: API (through IOCTL) failed, \
232 status=%d\n", status)
233 return status;
234 }
236 val = (UInt32 *)buf;
237 *val = cmdArgs.args.getUInt32.value;
239 return status;
240 }
242 Int NameServer_remove(NameServer_Handle nsHandle, String name)
243 {
244 Int status;
245 NameServerDrv_CmdArgs cmdArgs;
247 cmdArgs.args.remove.handle = nsHandle;
248 cmdArgs.args.remove.name = name;
249 cmdArgs.args.remove.nameLen = strlen(name) + 1;
250 status = NameServerDrv_ioctl(CMD_NAMESERVER_REMOVE, &cmdArgs);
252 if (status < 0) {
253 PRINTVERBOSE1("NameServer_remove: API (through IOCTL) failed, \
254 status=%d\n", status)
255 }
257 return status;
258 }
260 Int NameServer_removeEntry(NameServer_Handle nsHandle, Ptr entry)
261 {
262 Int status;
263 NameServerDrv_CmdArgs cmdArgs;
265 cmdArgs.args.removeEntry.handle = nsHandle;
266 cmdArgs.args.removeEntry.entry = entry;
267 status = NameServerDrv_ioctl (CMD_NAMESERVER_REMOVEENTRY, &cmdArgs);
269 if (status < 0) {
270 PRINTVERBOSE1("NameServer_removeEntry: API (through IOCTL) failed, \
271 status=%d\n", status)
272 }
274 return status;
275 }
277 Int NameServer_delete(NameServer_Handle *nsHandle)
278 {
279 Int status;
280 NameServerDrv_CmdArgs cmdArgs;
282 cmdArgs.args.delete.handle = *nsHandle;
283 status = NameServerDrv_ioctl (CMD_NAMESERVER_DELETE, &cmdArgs);
285 if (status < 0) {
286 PRINTVERBOSE1("NameServer_delete: API (through IOCTL) failed, \
287 status=%d\n", status)
288 return status;
289 }
291 *nsHandle = cmdArgs.args.delete.handle;
293 return status;
294 }