5d16cc0d499988cd30516743e4cc93649f6a0087
[ipc/ipcdev.git] / packages / ti / grcm / RcmTypes.h
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  */
34 /*
35  *  ======== RcmTypes.h ========
36  *
37  */
38 /*!
39  *  @file ti/grcm/RcmTypes.h
40  *
41  *  @brief Remote Command Message Types.
42  */
44 #ifndef ti_grcm_RcmTypes_h
45 #define ti_grcm_RcmTypes_h
47 /*
48  * Force use of the RPMessage instead of MessageQ API for SysLink 3 IPC.
49  * This is temporary to get a protoype working.
50  * Ideally, RPMessage should not be needed.
51  */
52 #define USE_RPMESSAGE   1
54 #if USE_RPMESSAGE
55 #include <ti/ipc/rpmsg/RPMessage.h>
56 #else
57 #include <ti/ipc/MessageQ.h>
58 #endif
60 #include <ti/grcm/RcmClient.h>
63 /*
64  *  ======== RcmClient_Packet ========
65  *
66  *  RcmClient_Packet.desc: the package descriptor field. Note that the
67  *  format is different for out-bound and in-bound messages.
68  *
69  *  out-bound message descriptor
70  *
71  *  Bits    Description
72  *  --------------------------------------------------------------------
73  *  [15:12] reserved
74  *  [11:8]  message type
75  *  [7:0]   client protocol version
76  *
77  *
78  *  in-bound message descriptor
79  *
80  *  Bits    Description
81  *  --------------------------------------------------------------------
82  *  [15:12] reserved
83  *  [11:8]  server status code
84  *  [7:0]   server protocol version
85  */
87 /* message type values */
88 #define RcmClient_Desc_RCM_MSG    0x1       // client exec message
89 #define RcmClient_Desc_DPC        0x2       // deferred procedure call
90 #define RcmClient_Desc_SYM_ADD    0x3       // symbol add message
91 #define RcmClient_Desc_SYM_IDX    0x4       // query symbox index
92 #define RcmClient_Desc_CMD        0x5       // cmd message (one-way)
93 #define RcmClient_Desc_JOB_ACQ    0x6       // acquire a job id
94 #define RcmClient_Desc_JOB_REL    0x7       // release a job id
95 #define RcmClient_Desc_TYPE_MASK  0x0F00    // field mask
96 #define RcmClient_Desc_TYPE_SHIFT 8         // field shift width
98 /* server status codes must be 0 - 15, it has to fit in a 4-bit field */
99 #define RcmServer_Status_SUCCESS          ((UInt16)0) // success
100 #define RcmServer_Status_INVALID_FXN      ((UInt16)1) // invalid fxn index
101 #define RcmServer_Status_SYMBOL_NOT_FOUND ((UInt16)2) // symbol not found
102 #define RcmServer_Status_INVALID_MSG_TYPE ((UInt16)3) // invalid msg type
103 #define RcmServer_Status_MSG_FXN_ERR      ((UInt16)4) // msg function error
104 #define RcmServer_Status_Error            ((UInt16)5) // general failure
105 #define RcmServer_Status_Unprocessed      ((UInt16)6) // unprocessed message
106 #define RcmServer_Status_JobNotFound      ((UInt16)7) // job id not found
107 #define RcmServer_Status_PoolNotFound     ((UInt16)8) // pool id not found
109 /* the packet structure (actual message send to server) */
111 #if USE_RPMESSAGE
112 /* Need to deal with this structure, as Linux side rpmsg_omx driver needs it: */
113 struct rpmsg_omx_hdr {
114     UInt32 type;
115     UInt32 len;
116 };
118 // Warning: This packet cannot be placed on RCMServer job queues, so can't use
119 // that capability for now.
120 typedef struct {
121     Bits32             reserved0; // reserved for List.elem->next
122     Bits32             reserved1; // reserved for List.elem->prev
123     struct rpmsg_omx_hdr hdr;
124     UInt16             desc;      // protocol, descriptor, status
125     UInt16             msgId;     // message id
126     RcmClient_Message  message;   // client message body (5 words + payload)
127 } RcmClient_Packet;
129 /*
130  * Defined to equal packed structure size received on the host.
131  * Strips off the first two ListElem fields and the .data[1] field in .message
132  */
133 #define PACKET_HDR_SIZE  (sizeof(RcmClient_Packet) - 3 * sizeof(UInt32))
134 #define PACKET_DATA_SIZE (PACKET_HDR_SIZE - sizeof(struct rpmsg_omx_hdr))
136 /* To test on BIOS side only, uncomment and rebuild anything that
137  * calls RPMessage()
138  */
139 //#define  BIOS_ONLY_TEST
141 #else
142 typedef struct {
143     MessageQ_MsgHeader msgqHeader;  // MessageQ header (8 words)
144     UInt16 desc;                    // protocol, descriptor, status
145     UInt16 msgId;                   // message id
146     RcmClient_Message message;      // client message body (5 words + payload)
147 } RcmClient_Packet;
149 #endif
151 /* string functions */
152 Void *_memset(Void *s, Int c, Int n);
153 Int _strcmp(Char *s, Char *t);
154 Void _strcpy(Char *s, Char *t);
155 Int _strlen(const Char *s);
157 #endif /* ti_grcm_RcmTypes_h */