]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ipc/ipcdev.git/blob - packages/ti/grcm/RcmTypes.h
Shared memory cache management
[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 /*
119  * Warning: This packet cannot be placed on RCMServer job queues, so can't use
120  * that capability for now.
121  */
122 typedef struct {
123     Bits32             reserved0; /* reserved for List.elem->next */
124     Bits32             reserved1; /* reserved for List.elem->prev */
125     struct rpmsg_omx_hdr hdr;
126     UInt16             desc;      /* protocol, descriptor, status */
127     UInt16             msgId;     /* message id */
128     RcmClient_Message  message;   /* client message body (5 words + payload) */
129 } RcmClient_Packet;
131 /*
132  * Defined to equal packed structure size received on the host.
133  * Strips off the first two ListElem fields and the .data[1] field in .message
134  */
135 #define PACKET_HDR_SIZE  (sizeof(RcmClient_Packet) - 3 * sizeof(UInt32))
136 #define PACKET_DATA_SIZE (PACKET_HDR_SIZE - sizeof(struct rpmsg_omx_hdr))
138 /* To test on BIOS side only, uncomment and rebuild anything that
139  * calls RPMessage()
140  */
141 /* #define  BIOS_ONLY_TEST */
143 #else
144 typedef struct {
145     MessageQ_MsgHeader msgqHeader;  /* MessageQ header (8 words)*/
146     UInt16 desc;                    /* protocol, descriptor, status*/
147     UInt16 msgId;                   /* message id*/
148     RcmClient_Message message;      /* client message body (5 words + payload)*/
149 } RcmClient_Packet;
151 #endif
153 /* string functions */
154 Void *_memset(Void *s, Int c, Int n);
155 Int _strcmp(Char *s, Char *t);
156 Void _strcpy(Char *s, Char *t);
157 Int _strlen(const Char *s);
159 #endif /* ti_grcm_RcmTypes_h */