X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_hypercall.h;h=e3c7c6f08791abe3866678ef204b8d865ef7d9c1;hb=ec9f38e306b02bb98029fb950bcb4d0bd0c3aed2;hp=333c812f10dc5f2a190d5aad87e2d025187a1faf;hpb=f0e3b9e0d33d90a41cb2c3bb800ab38929c744b5;p=palacios.git diff --git a/palacios/include/palacios/vmm_hypercall.h b/palacios/include/palacios/vmm_hypercall.h index 333c812..e3c7c6f 100644 --- a/palacios/include/palacios/vmm_hypercall.h +++ b/palacios/include/palacios/vmm_hypercall.h @@ -30,25 +30,46 @@ typedef struct rb_root v3_hypercall_map_t; struct guest_info; struct v3_vm_info; -void v3_init_hypercall_map(struct v3_vm_info * vm); -int v3_register_hypercall(struct v3_vm_info * vm, uint_t hypercall_id, - int (*hypercall)(struct guest_info * info , uint_t hcall_id, void * priv_data), - void * priv_data); +typedef enum { + TEST_HCALL = 0x0001, + SYMCALL_RET_HCALL = 0x0535, // args in GPRs + SYMCALL_ERR_HCALL = 0x0536, // RBX: error code + + /* -- Symmod symbol table hypercall -- + * RBX: SymTable start + * RCX: SymTable size + * RDX: SymStrs start + * RSI: SymStrs size + */ + SYMMOD_SYMS_HCALL = 0x0600, + + MEM_OFFSET_HCALL = 0x1000, // RBX: base addr(out) + GUEST_INFO_HCALL = 0x3000, // no args + TELEMETRY_HCALL = 0x3001, // no args + BALLOON_START_HCALL = 0xba00, // RAX: size + BALLOON_QUERY_HCALL = 0xba01, // RCX: req_pgs(out), RDX: alloc_pgs(out) + OS_DEBUG_HCALL = 0xc0c0, // RBX: msg_gpa, RCX: msg_len, RDX: buf_is_va (flag) + TIME_CPUFREQ_HCALL = 0xd000, //RBX: cpu freq (out) + TIME_RDHTSC_HCALL = 0xd001, //RBX: cpu freq (out) + + VNET_HEADER_QUERY_HCALL = 0xe000, // Get the current header for a src/dest pair +} hcall_id_t; -int v3_handle_hypercall(struct guest_info * info); +void v3_init_hypercall_map(struct v3_vm_info * vm); +int v3_deinit_hypercall_map(struct v3_vm_info * vm); +int v3_register_hypercall(struct v3_vm_info * vm, hcall_id_t hypercall_id, + int (*hypercall)(struct guest_info * info , hcall_id_t hcall_id, void * priv_data), + void * priv_data); +int v3_remove_hypercall(struct v3_vm_info * vm, hcall_id_t hypercall_id); + +int v3_handle_hypercall(struct guest_info * info); -typedef enum { - MEM_OFFSET_HCALL = 0x1000, - GUEST_INFO_HCALL = 0x3000, - TELEMETRY_HCALL = 0x3001, - OS_DEBUG_HCALL = 0xc0c0 -} hcall_id_t;