From: Simon Glass <sjg@chromium.org>
Provide a simple function to set up the library, to avoid having to
worry about the details. This requires the caller to know about
global_data
Signed-off-by: Simon Glass <sjg@chromium.org>
---
arch/sandbox/cpu/start.c | 30 +++++++++++++++++++----
arch/sandbox/include/asm/u-boot-sandbox.h | 9 +++++++
test/ulib/ulib_test.c | 12 +++------
3 files changed, 37 insertions(+), 14 deletions(-)
@@ -693,13 +693,14 @@ int sandbox_init(int argc, char *argv[], struct global_data *data)
return 0;
}
-int sandbox_main(int argc, char *argv[])
+static int sandbox_flow(int argc, char *argv[], struct global_data *data,
+ uint flags)
{
- gd_t data;
int ret;
- memset(&data, '\0', sizeof(data));
- ret = sandbox_init(argc, argv, &data);
+ memset(data, '\0', sizeof(struct global_data));
+ data->flags = flags;
+ ret = sandbox_init(argc, argv, data);
if (ret)
goto err;
@@ -708,10 +709,29 @@ int sandbox_main(int argc, char *argv[])
board_init_r(gd->new_gd, 0);
- /* NOTREACHED - board_init_r() does not return */
return 0;
err:
printf("Error %d\n", ret);
return 1;
}
+
+int sandbox_main(int argc, char *argv[])
+{
+ gd_t data;
+
+ sandbox_flow(argc, argv, &data, 0);
+
+ /* NOTREACHED - board_init_r() does not return */
+ return 1;
+}
+
+int ulib_init_with_data(char *progname, struct global_data *data)
+{
+ char *argv[] = {progname, NULL};
+ int ret;
+
+ ret = sandbox_flow(1, argv, data, GD_FLG_ULIB);
+
+ return ret;
+}
@@ -75,4 +75,13 @@ int sandbox_init(int argc, char *argv[], struct global_data *data);
*/
int sandbox_main(int argc, char *argv[]);
+/**
+ * ulib_init_with_data() - set up the U-Boot library
+ *
+ * @progname: Program name to use, typically argv[0]
+ * @data: Global data (must remain valid until the program exits)
+ * Return: 0 if OK, -ve error code on error
+ */
+int ulib_init_with_data(char *progname, struct global_data *data);
+
#endif /* _U_BOOT_SANDBOX_H_ */
@@ -23,15 +23,9 @@ int main(int argc, char *argv[])
printf("Calling U-Boot initialization via shared library...\n");
- /* init global data */
- memset(&data, '\0', sizeof(data));
- data.flags = GD_FLG_ULIB;
-
- ret = sandbox_init(argc, argv, &data);
-
- /* Do pre- and post-relocation init */
- board_init_f(gd->flags);
- board_init_r(data.new_gd, 0);
+ ret = ulib_init_with_data(argv[0], &data);
+ if (ret)
+ return 1;
return ret;
}