blob: 4a36861583c62f2c3705f35392d6e190b7e1dd9f [file] [log] [blame]
Amaury Pouly9d7df9a2011-09-15 16:10:31 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2011 Amaury Pouly
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef __DBPARSER__
22#define __DBPARSER__
23
24/**
25 * Command file parsing
26 */
27#include "sb.h"
28#include "elf.h"
29
30enum cmd_source_type_t
31{
32 CMD_SRC_UNK,
33 CMD_SRC_ELF,
34 CMD_SRC_BIN
35};
36
37struct bin_param_t
38{
39 uint32_t size;
40 void *data;
41};
42
43struct cmd_source_t
44{
45 char *identifier;
Amaury Pouly66dce4b2011-09-16 22:27:16 +000046 bool is_extern;
47 // <union>
48 int extern_nr;
Amaury Pouly9d7df9a2011-09-15 16:10:31 +000049 char *filename;
Amaury Pouly66dce4b2011-09-16 22:27:16 +000050 // </union>
Amaury Pouly9d7df9a2011-09-15 16:10:31 +000051 struct cmd_source_t *next;
52 /* for later use */
53 enum cmd_source_type_t type;
54 bool loaded;
55 struct elf_params_t elf;
56 struct bin_param_t bin;
57};
58
59enum cmd_inst_type_t
60{
61 CMD_LOAD, /* load image */
62 CMD_JUMP, /* jump at image */
63 CMD_CALL, /* call image */
64 CMD_LOAD_AT, /* load binary at */
65 CMD_CALL_AT, /* call at address */
66 CMD_JUMP_AT, /* jump at address */
67 CMD_MODE, /* change boot mode */
68};
69
70struct cmd_inst_t
71{
72 enum cmd_inst_type_t type;
73 char *identifier;
74 uint32_t argument; // for jump, call, mode
75 uint32_t addr; // for 'at'
76 struct cmd_inst_t *next;
77};
78
Amaury Pouly66dce4b2011-09-16 22:27:16 +000079struct cmd_option_t
80{
81 char *name;
82 bool is_string;
83 /* <union> */
84 uint32_t val;
85 char *str;
86 /* </union> */
87 struct cmd_option_t *next;
88};
89
Amaury Pouly9d7df9a2011-09-15 16:10:31 +000090struct cmd_section_t
91{
92 uint32_t identifier;
Amaury Pouly66dce4b2011-09-16 22:27:16 +000093 bool is_data;
94 // <union>
95 struct cmd_inst_t *inst_list;
96 char *source_id;
97 // </union>
Amaury Pouly9d7df9a2011-09-15 16:10:31 +000098 struct cmd_section_t *next;
Amaury Pouly66dce4b2011-09-16 22:27:16 +000099 struct cmd_option_t *opt_list;
Amaury Pouly9d7df9a2011-09-15 16:10:31 +0000100};
101
102struct cmd_file_t
103{
Amaury Pouly66dce4b2011-09-16 22:27:16 +0000104 struct cmd_option_t *opt_list;
Amaury Pouly58279372011-11-06 01:49:13 +0000105 struct cmd_option_t *constant_list; /* constant are always integers */
Amaury Pouly9d7df9a2011-09-15 16:10:31 +0000106 struct cmd_source_t *source_list;
107 struct cmd_section_t *section_list;
108};
109
110struct cmd_source_t *db_find_source_by_id(struct cmd_file_t *cmd_file, const char *id);
Amaury Pouly66dce4b2011-09-16 22:27:16 +0000111struct cmd_option_t *db_find_option_by_id(struct cmd_option_t *opt, const char *name);
Amaury Pouly9d7df9a2011-09-15 16:10:31 +0000112bool db_parse_sb_version(struct sb_version_t *ver, char *str);
Amaury Pouly66dce4b2011-09-16 22:27:16 +0000113void db_generate_default_sb_version(struct sb_version_t *ver);
Amaury Pouly9d7df9a2011-09-15 16:10:31 +0000114struct cmd_file_t *db_parse_file(const char *file);
Amaury Pouly58279372011-11-06 01:49:13 +0000115void db_free_option_list(struct cmd_option_t *opt_list);
116void db_free(struct cmd_file_t *file);
Amaury Pouly9d7df9a2011-09-15 16:10:31 +0000117
118#endif /* __DBPARSER__ */