X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_symmod.h;h=4d28fff6f36c7d775660291fc44b558e330eac86;hb=e3cd4f1c180c7a59177c7108c495a2e27af9db10;hp=b6d3745e14d13ac80be3546ca67620213c854a98;hpb=63fc27a4eedc44a349cf8fde14e4c1b2401b4100;p=palacios.git diff --git a/palacios/include/palacios/vmm_symmod.h b/palacios/include/palacios/vmm_symmod.h index b6d3745..4d28fff 100644 --- a/palacios/include/palacios/vmm_symmod.h +++ b/palacios/include/palacios/vmm_symmod.h @@ -25,9 +25,44 @@ #include #include + + + + + +struct v3_sym_capsule { + char * name; + void * start_addr; + uint32_t size; + uint32_t guest_size; + + union { + uint32_t flags; + struct { +#define V3_SYMMOD_INV (0x00) +#define V3_SYMMOD_LNX (0x01) +#define V3_SYMMOD_MOD (0x02) +#define V3_SYMMOD_SEC (0x03) + uint8_t type; + +#define V3_SYMMOD_ARCH_INV (0x00) +#define V3_SYMMOD_ARCH_i386 (0x01) +#define V3_SYMMOD_ARCH_x86_64 (0x02) + uint8_t arch; + uint16_t rsvd; + } __attribute__((packed)); + } __attribute__((packed)); + + void * capsule_data; + + struct list_head node; +}; + + + struct v3_symmod_loader_ops { - int (*load_module)(struct v3_vm_info * vm, char * name, int len, void * priv_data); + int (*load_capsule)(struct v3_vm_info * vm, struct v3_sym_capsule * mod, void * priv_data); }; @@ -36,49 +71,27 @@ struct v3_symmod_state { struct v3_symmod_loader_ops * loader_ops; void * loader_data; - struct hashtable * module_table; -}; - -#define V3_SYMMOD_INV (0x00000000) -#define V3_SYMMOD_LNX (0x00000001) -#define V3_SYMMOD_MOD (0x00000002) -#define V3_SYMMOD_SEC (0x00000003) -union v3_symmod_flags { - uint32_t flags; - struct { - uint8_t type; - } __attribute__((packed)); -} __attribute__((packed)); + uint32_t num_avail_capsules; + uint32_t num_loaded_capsules; + struct hashtable * capsule_table; -struct v3_sym_module { - char * name; - void * start_addr; - void * end_addr; - uint32_t flags; // see 'struct v3_symmod_flags' -} __attribute__((packed)); - + /* List containing V3 symbols */ + /* (defined in vmm_symmod.c) */ + struct list_head v3_sym_list; +}; int v3_set_symmod_loader(struct v3_vm_info * vm, struct v3_symmod_loader_ops * ops, void * priv_data); -int v3_load_sym_module(struct v3_vm_info * vm, char * mod_name); +int v3_load_sym_capsule(struct v3_vm_info * vm, char * mod_name); int v3_init_symmod_vm(struct v3_vm_info * vm, v3_cfg_tree_t * cfg); +int v3_deinit_symmod_vm(struct v3_vm_info * vm); -struct v3_sym_module * v3_get_sym_module(struct v3_vm_info * vm, char * name); - - - +struct v3_sym_capsule * v3_get_sym_capsule(struct v3_vm_info * vm, char * name); -#define register_module(name, start, end, flags) \ - static char v3_module_name[] = name; \ - static struct v3_sym_module _v3_module \ - __attribute__((__used__)) \ - __attribute__((unused, __section__ ("_v3_modules"), \ - aligned(sizeof(addr_t)))) \ - = {v3_module_name, start, end, flags}; int V3_init_symmod();