summaryrefslogtreecommitdiff
path: root/utils/imxtools/dbparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'utils/imxtools/dbparser.h')
-rw-r--r--utils/imxtools/dbparser.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/utils/imxtools/dbparser.h b/utils/imxtools/dbparser.h
new file mode 100644
index 0000000000..4a36861583
--- /dev/null
+++ b/utils/imxtools/dbparser.h
@@ -0,0 +1,118 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2011 Amaury Pouly
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef __DBPARSER__
+#define __DBPARSER__
+
+/**
+ * Command file parsing
+ */
+#include "sb.h"
+#include "elf.h"
+
+enum cmd_source_type_t
+{
+ CMD_SRC_UNK,
+ CMD_SRC_ELF,
+ CMD_SRC_BIN
+};
+
+struct bin_param_t
+{
+ uint32_t size;
+ void *data;
+};
+
+struct cmd_source_t
+{
+ char *identifier;
+ bool is_extern;
+ // <union>
+ int extern_nr;
+ char *filename;
+ // </union>
+ struct cmd_source_t *next;
+ /* for later use */
+ enum cmd_source_type_t type;
+ bool loaded;
+ struct elf_params_t elf;
+ struct bin_param_t bin;
+};
+
+enum cmd_inst_type_t
+{
+ CMD_LOAD, /* load image */
+ CMD_JUMP, /* jump at image */
+ CMD_CALL, /* call image */
+ CMD_LOAD_AT, /* load binary at */
+ CMD_CALL_AT, /* call at address */
+ CMD_JUMP_AT, /* jump at address */
+ CMD_MODE, /* change boot mode */
+};
+
+struct cmd_inst_t
+{
+ enum cmd_inst_type_t type;
+ char *identifier;
+ uint32_t argument; // for jump, call, mode
+ uint32_t addr; // for 'at'
+ struct cmd_inst_t *next;
+};
+
+struct cmd_option_t
+{
+ char *name;
+ bool is_string;
+ /* <union> */
+ uint32_t val;
+ char *str;
+ /* </union> */
+ struct cmd_option_t *next;
+};
+
+struct cmd_section_t
+{
+ uint32_t identifier;
+ bool is_data;
+ // <union>
+ struct cmd_inst_t *inst_list;
+ char *source_id;
+ // </union>
+ struct cmd_section_t *next;
+ struct cmd_option_t *opt_list;
+};
+
+struct cmd_file_t
+{
+ struct cmd_option_t *opt_list;
+ struct cmd_option_t *constant_list; /* constant are always integers */
+ struct cmd_source_t *source_list;
+ struct cmd_section_t *section_list;
+};
+
+struct cmd_source_t *db_find_source_by_id(struct cmd_file_t *cmd_file, const char *id);
+struct cmd_option_t *db_find_option_by_id(struct cmd_option_t *opt, const char *name);
+bool db_parse_sb_version(struct sb_version_t *ver, char *str);
+void db_generate_default_sb_version(struct sb_version_t *ver);
+struct cmd_file_t *db_parse_file(const char *file);
+void db_free_option_list(struct cmd_option_t *opt_list);
+void db_free(struct cmd_file_t *file);
+
+#endif /* __DBPARSER__ */