Since some people disapprove of white space cleanups mixed in regular commits
[coreboot.git] / util / mkelfImage / include / mkelfImage.h
1 #ifndef MKELFIMAGE_H
2 #define MKELFIMAGE_H
3
4 #include <sys/types.h>
5 #include <stdint.h>
6 #include <byteswap.h>
7 #define USE_BSD
8 #include <endian.h>
9 #define _GNU_SOURCE
10
11 struct memelfheader;
12 struct memelfphdr;
13 struct memelfnote;
14
15 extern void die(char *fmt, ...);
16 extern void usage(void);
17 extern void error(char *fmt, ...);
18 extern uint16_t ipchksum(const void *data, unsigned long length);
19 extern uint16_t add_ipchksums(unsigned long offset, uint16_t sum, uint16_t new);
20 extern void *xmalloc(size_t size, const char *name);
21 extern void *xrealloc(void *ptr, size_t size, const char *name);
22 extern char *slurp_file(const char *filename, off_t *r_size);
23 extern char *slurp_decompress_file(const char *filename, off_t *r_size);
24 extern struct memelfphdr *add_program_headers(struct memelfheader *ehdr, int count);
25 extern struct memelfnote *add_notes(struct memelfheader *ehdr, int count);
26
27 typedef char *(probe_t)(char *kernel_buf, off_t kernel_size);
28 typedef int (mkelf_t)(int argc, char **argv,
29         struct memelfheader *hdr, char *kernel_buf, off_t kernel_size);
30 typedef void (usage_t)(void);
31 struct file_type {
32         const char *name;
33         probe_t *probe;
34         mkelf_t *mkelf;
35         usage_t *usage;
36 };
37
38 #if BYTE_ORDER == LITTLE_ENDIAN
39 #define cpu_to_le16(val) (val)
40 #define cpu_to_le32(val) (val)
41 #define cpu_to_le64(val) (val)
42 #define cpu_to_be16(val) bswap_16(val)
43 #define cpu_to_be32(val) bswap_32(val)
44 #define cpu_to_be64(val) bswap_64(val)
45 #define le16_to_cpu(val) (val)
46 #define le32_to_cpu(val) (val)
47 #define le64_to_cpu(val) (val)
48 #define be16_to_cpu(val) bswap_16(val)
49 #define be32_to_cpu(val) bswap_32(val)
50 #define be64_to_cpu(val) bswap_64(val)
51 #endif
52 #if BYTE_ORDER == BIG_ENDIAN
53 #define cpu_to_le16(val) bswap_16(val)
54 #define cpu_to_le32(val) bswap_32(val)
55 #define cpu_to_le64(val) bswap_64(val)
56 #define cpu_to_be16(val) (val)
57 #define cpu_to_be32(val) (val)
58 #define cpu_to_be64(val) (val)
59 #define le16_to_cpu(val) bswap_16(val)
60 #define le32_to_cpu(val) bswap_32(val)
61 #define le64_to_cpu(val) bswap_64(val)
62 #define be16_to_cpu(val) (val)
63 #define be32_to_cpu(val) (val)
64 #define be64_to_cpu(val) (val)
65 #endif
66
67 #define roundup(x, y)  ((((x)+((y)-1))/(y))*(y))
68
69 struct memelfheader {
70         unsigned ei_class;
71         unsigned ei_data;
72         unsigned e_type;
73         unsigned e_machine;
74         unsigned e_flags;
75         unsigned e_phnum;
76         unsigned e_notenum;
77         unsigned long e_entry;
78         struct memelfphdr *e_phdr;
79         struct memelfnote *e_notes;
80 };
81
82 struct memelfphdr {
83         uint64_t p_vaddr;
84         uint64_t p_paddr;
85         uint64_t p_filesz;
86         uint64_t p_memsz;
87         void *p_data;
88         unsigned p_type;
89         unsigned p_flags;
90 };
91
92 struct memelfnote {
93         unsigned n_type;
94         char *n_name;
95         void *n_desc;
96         unsigned n_descsz;
97 };
98
99 #define OPT_HELP                'h'
100 #define OPT_VERSION             'v'
101 #define OPT_TYPE                't'
102 #define OPT_KERNEL              256
103 #define OPT_OUTPUT              257
104 #define OPT_MAX                 258
105
106 #define MKELF_OPTIONS \
107         { "help",               0, 0, OPT_HELP }, \
108         { "version",            0, 0, OPT_VERSION }, \
109         { "kernel",             1, 0, OPT_KERNEL }, \
110         { "output",             1, 0, OPT_OUTPUT }, \
111         { "type",               1, 0, OPT_TYPE },
112
113 #define MKELF_OPT_STR "hvt:"
114
115 extern probe_t vmlinux_i386_probe;
116 extern probe_t bzImage_i386_probe;
117 extern probe_t linux_i386_probe;
118 extern mkelf_t linux_i386_mkelf;
119 extern usage_t linux_i386_usage;
120
121 extern probe_t linux_ia64_probe;
122 extern mkelf_t linux_ia64_mkelf;
123 extern usage_t linux_ia64_usage;
124
125 #endif /* MKELFIMAGE_H */