600e746ed2d6f33eb6e702c7174351d0c5d8cde6
1 /*
2 * Copyright (c) 2011-2013, 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 */
33 #include <string.h>
35 #include <xdc/std.h>
36 #include <xdc/runtime/System.h>
38 #include <ti/ipc/MultiProc.h>
39 #include <ti/ipc/rpmsg/MessageQCopy.h>
41 #define RPMSG_NAME_SIZE 32
43 typedef unsigned int u32;
45 struct rpmsg_ns_msg {
46 char name[RPMSG_NAME_SIZE]; /* name of service including terminal '\0' */
47 u32 addr; /* address of the service */
48 u32 flags; /* see below */
49 } __packed;
51 enum rpmsg_ns_flags {
52 RPMSG_NS_CREATE = 0,
53 RPMSG_NS_DESTROY = 1
54 };
56 static void sendMessage(Char * name, UInt32 port, enum rpmsg_ns_flags flags)
57 {
58 struct rpmsg_ns_msg nsMsg;
59 Int s;
61 strncpy(nsMsg.name, name, (RPMSG_NAME_SIZE - 1));
62 nsMsg.name[RPMSG_NAME_SIZE-1] = '\0';
63 nsMsg.addr = port;
64 nsMsg.flags = flags;
66 s = MessageQCopy_send(MultiProc_getId("HOST"), 53, port, &nsMsg,
67 sizeof(nsMsg));
68 if (s < 0) {
69 System_abort("Fatal ERROR in NameMap sendMessage: MessageQCopy_send()"
70 " failed! Aborting...\n");
71 }
72 }
74 void NameMap_register(Char * name, UInt32 port)
75 {
76 System_printf("registering %s service on %d with HOST\n", name, port);
77 sendMessage(name, port, RPMSG_NS_CREATE);
78 }
80 void NameMap_unregister(Char * name, UInt32 port)
81 {
82 System_printf("un-registering %s service on %d with HOST\n", name, port);
83 sendMessage(name, port, RPMSG_NS_DESTROY);
84 }