while others dislike them being extra commits, let's clean them up once and for all for the existing code. If it's ugly, let it only be ugly once :-) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5507 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef MKELFIMAGE_H
 | |
| #define MKELFIMAGE_H
 | |
| 
 | |
| #include <sys/types.h>
 | |
| #include <stdint.h>
 | |
| #include <byteswap.h>
 | |
| #define USE_BSD
 | |
| #include <endian.h>
 | |
| #define _GNU_SOURCE
 | |
| 
 | |
| struct memelfheader;
 | |
| struct memelfphdr;
 | |
| struct memelfnote;
 | |
| 
 | |
| extern void die(char *fmt, ...);
 | |
| extern void usage(void);
 | |
| extern void error(char *fmt, ...);
 | |
| extern uint16_t ipchksum(const void *data, unsigned long length);
 | |
| extern uint16_t add_ipchksums(unsigned long offset, uint16_t sum, uint16_t new);
 | |
| extern void *xmalloc(size_t size, const char *name);
 | |
| extern void *xrealloc(void *ptr, size_t size, const char *name);
 | |
| extern char *slurp_file(const char *filename, off_t *r_size);
 | |
| extern char *slurp_decompress_file(const char *filename, off_t *r_size);
 | |
| extern struct memelfphdr *add_program_headers(struct memelfheader *ehdr, int count);
 | |
| extern struct memelfnote *add_notes(struct memelfheader *ehdr, int count);
 | |
| 
 | |
| typedef char *(probe_t)(char *kernel_buf, off_t kernel_size);
 | |
| typedef int (mkelf_t)(int argc, char **argv,
 | |
| 	struct memelfheader *hdr, char *kernel_buf, off_t kernel_size);
 | |
| typedef void (usage_t)(void);
 | |
| struct file_type {
 | |
| 	const char *name;
 | |
| 	probe_t *probe;
 | |
| 	mkelf_t *mkelf;
 | |
| 	usage_t *usage;
 | |
| };
 | |
| 
 | |
| #if BYTE_ORDER == LITTLE_ENDIAN
 | |
| #define cpu_to_le16(val) (val)
 | |
| #define cpu_to_le32(val) (val)
 | |
| #define cpu_to_le64(val) (val)
 | |
| #define cpu_to_be16(val) bswap_16(val)
 | |
| #define cpu_to_be32(val) bswap_32(val)
 | |
| #define cpu_to_be64(val) bswap_64(val)
 | |
| #define le16_to_cpu(val) (val)
 | |
| #define le32_to_cpu(val) (val)
 | |
| #define le64_to_cpu(val) (val)
 | |
| #define be16_to_cpu(val) bswap_16(val)
 | |
| #define be32_to_cpu(val) bswap_32(val)
 | |
| #define be64_to_cpu(val) bswap_64(val)
 | |
| #endif
 | |
| #if BYTE_ORDER == BIG_ENDIAN
 | |
| #define cpu_to_le16(val) bswap_16(val)
 | |
| #define cpu_to_le32(val) bswap_32(val)
 | |
| #define cpu_to_le64(val) bswap_64(val)
 | |
| #define cpu_to_be16(val) (val)
 | |
| #define cpu_to_be32(val) (val)
 | |
| #define cpu_to_be64(val) (val)
 | |
| #define le16_to_cpu(val) bswap_16(val)
 | |
| #define le32_to_cpu(val) bswap_32(val)
 | |
| #define le64_to_cpu(val) bswap_64(val)
 | |
| #define be16_to_cpu(val) (val)
 | |
| #define be32_to_cpu(val) (val)
 | |
| #define be64_to_cpu(val) (val)
 | |
| #endif
 | |
| 
 | |
| #define roundup(x, y)  ((((x)+((y)-1))/(y))*(y))
 | |
| 
 | |
| struct memelfheader {
 | |
| 	unsigned ei_class;
 | |
| 	unsigned ei_data;
 | |
| 	unsigned e_type;
 | |
| 	unsigned e_machine;
 | |
| 	unsigned e_flags;
 | |
| 	unsigned e_phnum;
 | |
| 	unsigned e_notenum;
 | |
| 	unsigned long e_entry;
 | |
| 	struct memelfphdr *e_phdr;
 | |
| 	struct memelfnote *e_notes;
 | |
| };
 | |
| 
 | |
| struct memelfphdr {
 | |
| 	uint64_t p_vaddr;
 | |
| 	uint64_t p_paddr;
 | |
| 	uint64_t p_filesz;
 | |
| 	uint64_t p_memsz;
 | |
| 	void *p_data;
 | |
| 	unsigned p_type;
 | |
| 	unsigned p_flags;
 | |
| };
 | |
| 
 | |
| struct memelfnote {
 | |
| 	unsigned n_type;
 | |
| 	char *n_name;
 | |
| 	void *n_desc;
 | |
| 	unsigned n_descsz;
 | |
| };
 | |
| 
 | |
| #define OPT_HELP		'h'
 | |
| #define OPT_VERSION		'v'
 | |
| #define OPT_TYPE		't'
 | |
| #define OPT_KERNEL		256
 | |
| #define OPT_OUTPUT		257
 | |
| #define OPT_MAX			258
 | |
| 
 | |
| #define MKELF_OPTIONS \
 | |
| 	{ "help",		0, 0, OPT_HELP }, \
 | |
| 	{ "version", 		0, 0, OPT_VERSION }, \
 | |
| 	{ "kernel",		1, 0, OPT_KERNEL }, \
 | |
| 	{ "output",		1, 0, OPT_OUTPUT }, \
 | |
| 	{ "type",		1, 0, OPT_TYPE },
 | |
| 
 | |
| #define MKELF_OPT_STR "hvt:"
 | |
| 
 | |
| extern probe_t vmlinux_i386_probe;
 | |
| extern probe_t bzImage_i386_probe;
 | |
| extern probe_t linux_i386_probe;
 | |
| extern mkelf_t linux_i386_mkelf;
 | |
| extern usage_t linux_i386_usage;
 | |
| 
 | |
| extern probe_t linux_ia64_probe;
 | |
| extern mkelf_t linux_ia64_mkelf;
 | |
| extern usage_t linux_ia64_usage;
 | |
| 
 | |
| #endif /* MKELFIMAGE_H */
 |