Utils: Remove the v1 firmware generator code
[gstreamer-omap:sysbios-rpmsg.git] / src / utils.mmap / elfload / include / dload4430.h
1 /*
2  *  Syslink-IPC for TI OMAP Processors
3  *
4  *  Copyright (c) 2008-2010, Texas Instruments Incorporated
5  *  All rights reserved.
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *  *  Redistributions of source code must retain the above copyright
12  *     notice, this list of conditions and the following disclaimer.
13  *
14  *  *  Redistributions in binary form must reproduce the above copyright
15  *     notice, this list of conditions and the following disclaimer in the
16  *     documentation and/or other materials provided with the distribution.
17  *
18  *  *  Neither the name of Texas Instruments Incorporated nor the names of
19  *     its contributors may be used to endorse or promote products derived
20  *     from this software without specific prior written permission.
21  *
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
26  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
29  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
31  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34 /*****************************************************************************/
35 /* dload4430.h                                                               */
36 /*                                                                           */
37 /* Define internal data structures used by core dynamic loader.              */
38 /*****************************************************************************/
39 #ifndef DLOAD4430_H
40 #define DLOAD4430_H
41
42 #include "ArrayList.h"
43 #include "Queue.h"
44 #include "Stack.h"
45 #include "elf32.h"
46 #include "dload_api.h"
47 #include "dlw_debug.h"
48 #include "dlw_trgmem.h"
49 #include "util.h"
50 #include "Std.h"
51
52 /*!
53  *  @def    DLOAD_MODULEID
54  *  @brief  Module ID for DLoad.
55  */
56 #define DLOAD_MODULEID           (UInt16) 0xfade
57
58 /* =============================================================================
59  *  All success and failure codes for the module
60  * =============================================================================
61  */
62
63 /*!
64  *  @def    DLOAD_STATUSCODEBASE
65  *  @brief  Error code base for DLoad.
66  */
67 #define DLOAD_STATUSCODEBASE     (DLOAD_MODULEID << 12u)
68
69 /*!
70  *  @def    DLOAD_MAKE_FAILURE
71  *  @brief  Macro to make failure code.
72  */
73 #define DLOAD_MAKE_FAILURE(x)    ((Int)(  0x80000000                          \
74                                       | (DLOAD_STATUSCODEBASE + (x))))
75
76 /*!
77  *  @def    DLOAD_MAKE_SUCCESS
78  *  @brief  Macro to make success code.
79  */
80 #define DLOAD_MAKE_SUCCESS(x)    (DLOAD_STATUSCODEBASE + (x))
81
82 /*!
83  *  @def    DLOAD_E_INVALIDARG
84  *  @brief  Argument passed to a function is invalid.
85  */
86 #define DLOAD_E_INVALIDARG       DLOAD_MAKE_FAILURE(1)
87
88 /*!
89  *  @def    DLOAD_E_MEMORY
90  *  @brief  Memory allocation failed.
91  */
92 #define DLOAD_E_MEMORY           DLOAD_MAKE_FAILURE(2)
93
94 /*!
95  *  @def    DLOAD_E_FAIL
96  *  @brief  Generic failure.
97  */
98 #define DLOAD_E_FAIL             DLOAD_MAKE_FAILURE(3)
99
100 /*!
101  *  @def    DLOAD_E_INVALIDSTATE
102  *  @brief  Module is in invalid state.
103  */
104 #define DLOAD_E_INVALIDSTATE     DLOAD_MAKE_FAILURE(4)
105
106 /*!
107  *  @def    DLOAD_E_HANDLE
108  *  @brief  Invalid object handle specified
109  */
110 #define DLOAD_E_HANDLE           DLOAD_MAKE_FAILURE(5)
111
112 /*!
113  *  @def    DLOAD_E_OSFAILURE
114  *  @brief  Failure in an OS-specific operation.
115  */
116 #define DLOAD_E_OSFAILURE        DLOAD_MAKE_FAILURE(6)
117
118 /*!
119  *  @def    DLOAD_E_ACCESSDENIED
120  *  @brief  The operation is not permitted in this process.
121  */
122 #define DLOAD_E_ACCESSDENIED     DLOAD_MAKE_FAILURE(7)
123
124 /*!
125  *  @def    DLOAD_E_TRANSLATE
126  *  @brief  An address translation error occurred.
127  */
128 #define DLOAD_E_TRANSLATE        DLOAD_MAKE_FAILURE(8)
129
130 /*!
131  *  @def    DLOAD_SUCCESS
132  *  @brief  Operation successful.
133  */
134 #define DLOAD_SUCCESS            DLOAD_MAKE_SUCCESS(0)
135
136 /*!
137  *  @def    DLOAD_S_ALREADYSETUP
138  *  @brief  The DLoad module has already been setup in this process.
139  */
140 #define DLOAD_S_ALREADYSETUP     DLOAD_MAKE_SUCCESS(1)
141
142 /*!
143  *  @def    DLOAD_S_OPENHANDLE
144  *  @brief  Other DLoad clients have still setup the DLoad module.
145  */
146 #define DLOAD_S_SETUP            DLOAD_MAKE_SUCCESS(2)
147
148 /*!
149  *  @def    DLOAD_S_OPENHANDLE
150  *  @brief  Other DLoad handles are still open in this process.
151  */
152 #define DLOAD_S_OPENHANDLE       DLOAD_MAKE_SUCCESS(3)
153
154 /*!
155  *  @def    DLOAD_S_ALREADYEXISTS
156  *  @brief  The DLoad instance has already been created/opened in this process
157  */
158 #define DLOAD_S_ALREADYEXISTS    DLOAD_MAKE_SUCCESS(4)
159
160 /*!
161  *  @brief  DLoad instance object
162  */
163 typedef struct DLoad4430_Object_tag {
164     UInt32                 openRefCount;
165     /*!< Reference count for number of times open/close were called in this
166          process. */
167     Bool                   created;
168     /*!< Indicates whether the object was created in this process. */
169     UInt16                 procId;
170     /*!< Processor ID */
171
172     UInt32                 fileId;
173     /*!< Baseimage fileId */
174
175     void *                 dynLoadMem;
176     UInt32                 dynLoadMemSize;
177     /*!< Baseimage DynLoad Mem Section */
178     TRG_PACKET            *trg_mem_head;
179     BOOL                   trg_minit;
180
181     BOOL                   DLL_debug;
182     /*!< Flag to indicate if DLL_debug is supported. */
183     TARGET_ADDRESS         DLModules_loc;
184     /*!< Address on the target of the DLModules. */
185     mirror_debug_ptr_Queue mirror_debug_list;
186     dl_debug_Stack         dl_debug_stk;
187
188     DLOAD_HANDLE     loaderHandle;
189     /*!< Handle to loader-instance specific info used by dyn loader lib. */
190 } DLoad4430_Object;
191
192
193 /*!
194  *  @brief  Defines DLoad object handle
195  */
196 typedef struct DLoad4430_Object * DLoad4430_Handle;
197
198 /*!
199  *  @brief  Module configuration structure.
200  */
201 typedef struct DLoad_Config {
202     UInt32 reserved;
203     /*!< Reserved value. */
204 } DLoad_Config;
205
206
207 typedef enum {
208     DLOAD_MPU = 0,
209     DLOAD_TESLA = 1,
210     DLOAD_SYSM3 = 2,
211     DLOAD_APPM3 = 3,
212     DLOAD_END = 4
213 } DLoad_ProcId;
214
215 #define DLOAD_INVALIDFILEID = 0xFFFFFFFF;
216
217 /*!
218  *  @brief  Configuration parameters specific to the slave ProcMgr instance.
219  */
220 typedef struct DLoad_Params_tag {
221     UInt32 reserved;
222     /*!< Reserved value. */
223 } DLoad_Params ;
224
225
226 /* =============================================================================
227  *  APIs
228  * =============================================================================
229  */
230
231 /* Function to get the default configuration for the DLoad module. */
232 Void DLoad4430_getConfig (DLoad_Config * cfg);
233
234 /* Function to setup the DLoad module. */
235 Int DLoad4430_setup (DLoad_Config * cfg);
236
237 /* Function to destroy the DLoad module. */
238 Int DLoad4430_destroy (Void);
239
240 /* Function to create the DLoad instance. */
241 DLoad4430_Handle DLoad4430_create (UInt16 procId, const DLoad_Params * params);
242
243 /* Function to delete the DLoad instance. */
244 Int DLoad4430_delete (DLoad4430_Handle * handlePtr);
245
246 /* Function to load a file to the specified instance. */
247 Int
248 DLoad4430_load (DLoad4430_Handle handle,
249                 String           imagePath,
250                 UInt32           argc,
251                 String *         argv,
252                 UInt32 *         entry_point,
253                 UInt32 *         fileId);
254
255 /* Function to unload a file from the specified instance. */
256 Int
257 DLoad4430_unload (DLoad4430_Handle handle, UInt32 fileId);
258
259 /* Function to get the information needed to call getEntryNames. */
260 Int
261 DLoad4430_getEntryNamesInfo (DLoad4430_Handle handle,
262                              UInt32           fileId,
263                              Int32 *          entry_pt_cnt,
264                              Int32 *          entry_pt_max_name_len);
265
266 /* Function to get the entry names for a specified instance and file. */
267 Int
268 DLoad4430_getEntryNames (DLoad4430_Handle handle,
269                          UInt32           fileId,
270                          Int32 *          entry_pt_cnt,
271                          Char ***         entry_pt_names);
272
273 /* Function to get the symbol address of a specified symbol. */
274 Int
275 DLoad4430_getSymbolAddress (DLoad4430_Handle handle,
276                             UInt32           fileId,
277                             String           symbolName,
278                             UInt32 *         symValue);
279
280
281 #endif