#ifndef KERNEL_BSP_H_ #define KERNEL_BSP_H_ #include #include #include #include #include #define BSP_MAGIC 0xcafebabe struct task; struct bsp_trailer { /* these fields are stored in big endian in the package itself */ uint32_t bsp_magic; uint64_t bsp_fs_offset; uint32_t bsp_fs_len; uint64_t bsp_exec_offset; uint32_t bsp_exec_len; uint64_t bsp_text_faddr, bsp_text_vaddr, bsp_text_size; uint64_t bsp_data_faddr, bsp_data_vaddr, bsp_data_size; uint64_t bsp_exec_entry; } __packed; struct bsp { /* the values in this struct are stored in host byte order */ struct bsp_trailer bsp_trailer; struct vm_object *bsp_vmo; }; extern void bsp_set_location(const struct boot_module *mod); extern void bsp_get_location(struct boot_module *out); extern kern_status_t bsp_load(struct bsp *bsp, const struct boot_module *mod); extern kern_status_t bsp_launch_async(struct bsp *bsp, struct task *task); #endif