30 #ifndef SPE_EMULATED_LOADER_FILE
31 #define SPE_EMULATED_LOADER_FILE "/usr/lib/spe/emulated-loader.bin"
47 DEBUG_PRINTF(
"%s called, but no program loaded\n", __func__);
55 len = sprintf(buf,
"%p", program->
elf_image);
56 write(objfd, buf, len + 1);
73 static inline int __write_isolated_load_params(
struct spe_context *spe,
74 uint32_t addr_h, uint32_t addr_l, uint32_t size)
83 if ((write(fd, &addr_h,
sizeof(uint32_t)) !=
sizeof(uint32_t)) ||
84 (write(fd, &addr_l,
sizeof(uint32_t)) !=
sizeof(uint32_t)) ||
85 (write(fd, &size,
sizeof(uint32_t)) !=
sizeof(uint32_t))) {
86 DEBUG_PRINTF(
"%s: error writing to wbox\n", __FUNCTION__);
102 static int spe_start_isolated_app(
struct spe_context *spe,
106 uint32_t size, addr_h, addr_l;
109 DEBUG_PRINTF(
"%s: invalid isolated image\n", __FUNCTION__);
115 DEBUG_PRINTF(
"%s: isolated image is incorrectly aligned\n",
121 addr_l = (uint32_t)(addr & 0xffffffff);
122 addr_h = (uint32_t)(addr >> 32);
124 DEBUG_PRINTF(
"%s: Sending isolated app params: 0x%08x 0x%08x 0x%08x\n",
125 __FUNCTION__, addr_h, addr_l, size);
127 if (__write_isolated_load_params(spe, addr_h, addr_l, size)) {
181 static int spe_start_emulated_isolated_app(
struct spe_context *spe,
189 loader = emulated_loader_program();
196 DEBUG_PRINTF(
"%s: No loader available\n", __FUNCTION__);
200 return spe_start_isolated_app(spe, handle);
211 rc = spe_start_isolated_app(spe, program);
214 rc = spe_start_emulated_isolated_app(spe, program, &ld_info);
#define DEBUG_PRINTF(fmt, args...)
int _base_spe_emulated_loader_present(void)
#define SPE_EMULATED_LOADER_FILE
spe_program_handle_t * loaded_program
int _base_spe_open_if_closed(struct spe_context *spe, enum fd_name fdesc, int locked)
int _base_spe_load_spe_elf(spe_program_handle_t *handle, void *ld_buffer, struct spe_ld_info *ld_info)
int _base_spe_verify_spe_elf_image(spe_program_handle_t *handle)
int _base_spe_parse_isolated_elf(spe_program_handle_t *handle, uint64_t *addr, uint32_t *size)
spe_program_handle_t * _base_spe_image_open(const char *filename)
void __spe_context_update_event(void)
struct spe_context_base_priv * base_private
int _base_spe_program_load(spe_context_ptr_t spe, spe_program_handle_t *program)
#define SPE_ISOLATE_EMULATE
void _base_spe_program_load_complete(spe_context_ptr_t spectx)