X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fgeekos%2Fvmm_emulate.h;h=dcead406a43b41d4f4651bcb25b67fc69e6d17f4;hb=a31286a91d6a84a60b34ee088517ee5d0d2176b0;hp=5157214db539c6fa7cedfb245288d06f6d6059b1;hpb=4c17fb67c38120c141fa36bca9d7faa418b3c8e5;p=palacios.git diff --git a/palacios/include/geekos/vmm_emulate.h b/palacios/include/geekos/vmm_emulate.h index 5157214..dcead40 100644 --- a/palacios/include/geekos/vmm_emulate.h +++ b/palacios/include/geekos/vmm_emulate.h @@ -150,6 +150,21 @@ static inline int is_prefix_byte(char byte) { +static inline addr_t get_addr_linear(struct guest_info * info, addr_t addr, addr_t seg_base) { + switch (info->cpu_mode) { + case REAL: + return addr + (seg_base << 4); + break; + case PROTECTED: + case PROTECTED_PG: + return addr + seg_base; + break; + default: + return 0; + } +} + + typedef enum {INVALID_ADDR_TYPE, REG, DISP0, DISP8, DISP16, DISP32} modrm_mode_t; typedef enum {INVALID_REG_SIZE, REG64, REG32, REG16, REG8} reg_size_t; typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND} operand_type_t;