| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | #ifndef LOADER_H
 | 
					
						
							|  |  |  | #define LOADER_H
 | 
					
						
							| 
									
										
										
										
											2013-01-14 14:06:25 +08:00
										 |  |  | #include "qapi/qmp/qdict.h"
 | 
					
						
							| 
									
										
										
										
											2013-04-16 02:24:08 +02:00
										 |  |  | #include "hw/nvram/fw_cfg.h"
 | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* loader.c */ | 
					
						
							| 
									
										
										
										
											2014-02-05 21:57:55 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * get_image_size: retrieve size of an image file | 
					
						
							|  |  |  |  * @filename: Path to the image file | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns the size of the image file on success, -1 otherwise. | 
					
						
							|  |  |  |  * On error, errno is also set as appropriate. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | int get_image_size(const char *filename); | 
					
						
							|  |  |  | int load_image(const char *filename, uint8_t *addr); /* deprecated */ | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  | int load_image_targphys(const char *filename, hwaddr, | 
					
						
							| 
									
										
										
										
											2012-03-12 11:33:25 -05:00
										 |  |  |                         uint64_t max_sz); | 
					
						
							| 
									
										
										
										
											2014-02-04 15:04:18 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define ELF_LOAD_FAILED       -1
 | 
					
						
							|  |  |  | #define ELF_LOAD_NOT_ELF      -2
 | 
					
						
							|  |  |  | #define ELF_LOAD_WRONG_ARCH   -3
 | 
					
						
							|  |  |  | #define ELF_LOAD_WRONG_ENDIAN -4
 | 
					
						
							|  |  |  | const char *load_elf_strerror(int error); | 
					
						
							| 
									
										
										
										
											2010-03-14 21:20:59 +01:00
										 |  |  | int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t), | 
					
						
							|  |  |  |              void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr, | 
					
						
							|  |  |  |              uint64_t *highaddr, int big_endian, int elf_machine, | 
					
						
							|  |  |  |              int clear_lsb); | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  | int load_aout(const char *filename, hwaddr addr, int max_sz, | 
					
						
							|  |  |  |               int bswap_needed, hwaddr target_page_size); | 
					
						
							|  |  |  | int load_uimage(const char *filename, hwaddr *ep, | 
					
						
							|  |  |  |                 hwaddr *loadaddr, int *is_linux); | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 15:40:01 -07:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * load_ramdisk: | 
					
						
							|  |  |  |  * @filename: Path to the ramdisk image | 
					
						
							|  |  |  |  * @addr: Memory address to load the ramdisk to | 
					
						
							|  |  |  |  * @max_sz: Maximum allowed ramdisk size (for non-u-boot ramdisks) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Load a ramdisk image with U-Boot header to the specified memory | 
					
						
							|  |  |  |  * address. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns the size of the loaded image on success, -1 otherwise. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int load_ramdisk(const char *filename, hwaddr addr, uint64_t max_sz); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-16 19:41:56 +01:00
										 |  |  | ssize_t read_targphys(const char *name, | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  |                       int fd, hwaddr dst_addr, size_t nbytes); | 
					
						
							| 
									
										
										
										
											2009-10-07 13:37:06 +02:00
										 |  |  | void pstrcpy_targphys(const char *name, | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  |                       hwaddr dest, int buf_size, | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  |                       const char *source); | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 17:26:55 +03:00
										 |  |  | extern bool rom_file_in_ram; | 
					
						
							| 
									
										
										
										
											2010-01-08 15:25:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | int rom_add_file(const char *file, const char *fw_dir, | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  |                  hwaddr addr, int32_t bootindex); | 
					
						
							| 
									
										
										
										
											2013-08-18 17:02:33 +03:00
										 |  |  | void *rom_add_blob(const char *name, const void *blob, size_t len, | 
					
						
							|  |  |  |                    hwaddr addr, const char *fw_file_name, | 
					
						
							|  |  |  |                    FWCfgReadCallback fw_callback, void *callback_opaque); | 
					
						
							| 
									
										
										
										
											2013-02-19 04:41:11 +00:00
										 |  |  | int rom_add_elf_program(const char *name, void *data, size_t datasize, | 
					
						
							|  |  |  |                         size_t romsize, hwaddr addr); | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | int rom_load_all(void); | 
					
						
							| 
									
										
										
										
											2013-07-24 18:56:08 +03:00
										 |  |  | void rom_load_done(void); | 
					
						
							| 
									
										
										
										
											2013-04-16 02:24:08 +02:00
										 |  |  | void rom_set_fw(FWCfgState *f); | 
					
						
							| 
									
										
										
										
											2012-10-23 12:30:10 +02:00
										 |  |  | int rom_copy(uint8_t *dest, hwaddr addr, size_t size); | 
					
						
							|  |  |  | void *rom_ptr(hwaddr addr); | 
					
						
							| 
									
										
										
										
											2013-01-14 14:06:25 +08:00
										 |  |  | void do_info_roms(Monitor *mon, const QDict *qdict); | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-08 13:35:07 +02:00
										 |  |  | #define rom_add_file_fixed(_f, _a, _i)          \
 | 
					
						
							|  |  |  |     rom_add_file(_f, NULL, _a, _i) | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | #define rom_add_blob_fixed(_f, _b, _l, _a)      \
 | 
					
						
							| 
									
										
										
										
											2013-11-10 11:53:30 +02:00
										 |  |  |     rom_add_blob(_f, _b, _l, _a, NULL, NULL, NULL) | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define PC_ROM_MIN_VGA     0xc0000
 | 
					
						
							|  |  |  | #define PC_ROM_MIN_OPTION  0xc8000
 | 
					
						
							|  |  |  | #define PC_ROM_MAX         0xe0000
 | 
					
						
							|  |  |  | #define PC_ROM_ALIGN       0x800
 | 
					
						
							|  |  |  | #define PC_ROM_SIZE        (PC_ROM_MAX - PC_ROM_MIN_VGA)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-26 12:18:25 +01:00
										 |  |  | int rom_add_vga(const char *file); | 
					
						
							| 
									
										
										
										
											2010-12-08 13:35:07 +02:00
										 |  |  | int rom_add_option(const char *file, int32_t bootindex); | 
					
						
							| 
									
										
										
										
											2009-10-01 16:42:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | #endif
 |