Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


updated to use pa_to_va address conversion
[palacios.git] / palacios / src / palacios / vmm_ctrl_regs.c
index 216bc49..31d0000 100644 (file)
@@ -41,8 +41,8 @@
 
 // First Attempt = 494 lines
 // current = 106 lines
-int handle_cr0_write(struct guest_info * info) {
-  char instr[15];
+int v3_handle_cr0_write(struct guest_info * info) {
+  uchar_t instr[15];
   int ret;
   struct x86_instr dec_instr;
 
@@ -66,7 +66,7 @@ int handle_cr0_write(struct guest_info * info) {
   }
 
 
-  if (opcode_cmp(V3_OPCODE_LMSW, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  if (v3_opcode_cmp(V3_OPCODE_LMSW, (const uchar_t *)(dec_instr.opcode)) == 0) {
     struct cr0_real *real_cr0  = (struct cr0_real*)&(info->ctrl_regs.cr0);
     struct cr0_real *new_cr0 = (struct cr0_real *)(dec_instr.src_operand.operand);     
     uchar_t new_cr0_val;
@@ -91,7 +91,7 @@ int handle_cr0_write(struct guest_info * info) {
       *(uchar_t*)shadow_cr0 |= new_cr0_val;
       PrintDebug("New Shadow CR0=%x\n", *shadow_cr0);  
     }
-  } else if (opcode_cmp(V3_OPCODE_MOV2CR, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  } else if (v3_opcode_cmp(V3_OPCODE_MOV2CR, (const uchar_t *)(dec_instr.opcode)) == 0) {
     PrintDebug("MOV2CR0\n");
 
     if (info->cpu_mode == LONG) {
@@ -118,7 +118,7 @@ int handle_cr0_write(struct guest_info * info) {
          *shadow_cr0 = *new_cr0;
          shadow_cr0->et = 1;
          
-         if (get_mem_mode(info) == VIRTUAL_MEM) {
+         if (v3_get_mem_mode(info) == VIRTUAL_MEM) {
            struct cr3_32 * shadow_cr3 = (struct cr3_32 *)&(info->shdw_pg_state.shadow_cr3);
            
            info->ctrl_regs.cr3 = *(addr_t*)shadow_cr3;
@@ -132,7 +132,7 @@ int handle_cr0_write(struct guest_info * info) {
        PrintDebug("New CR0=%x\n", *real_cr0);
     }
 
-  } else if (opcode_cmp(V3_OPCODE_CLTS, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  } else if (v3_opcode_cmp(V3_OPCODE_CLTS, (const uchar_t *)(dec_instr.opcode)) == 0) {
     // CLTS
     struct cr0_32 *real_cr0 = (struct cr0_32*)&(info->ctrl_regs.cr0);
        
@@ -155,8 +155,8 @@ int handle_cr0_write(struct guest_info * info) {
 
 // First attempt = 253 lines
 // current = 51 lines
-int handle_cr0_read(struct guest_info * info) {
-  char instr[15];
+int v3_handle_cr0_read(struct guest_info * info) {
+  uchar_t instr[15];
   int ret;
   struct x86_instr dec_instr;
 
@@ -179,7 +179,7 @@ int handle_cr0_read(struct guest_info * info) {
     return -1;
   }
   
-  if (opcode_cmp(V3_OPCODE_MOVCR2, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  if (v3_opcode_cmp(V3_OPCODE_MOVCR2, (const uchar_t *)(dec_instr.opcode)) == 0) {
     struct cr0_32 * virt_cr0 = (struct cr0_32 *)(dec_instr.dst_operand.operand);
     struct cr0_32 * real_cr0 = (struct cr0_32 *)&(info->ctrl_regs.cr0);
     
@@ -194,7 +194,7 @@ int handle_cr0_read(struct guest_info * info) {
     
     PrintDebug("real CR0: %x\n", *(uint_t*)real_cr0);
     PrintDebug("returned CR0: %x\n", *(uint_t*)virt_cr0);
-  } else if (opcode_cmp(V3_OPCODE_SMSW, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  } else if (v3_opcode_cmp(V3_OPCODE_SMSW, (const uchar_t *)(dec_instr.opcode)) == 0) {
     struct cr0_real *real_cr0= (struct cr0_real*)&(info->ctrl_regs.cr0);
     struct cr0_real *virt_cr0 = (struct cr0_real *)(dec_instr.dst_operand.operand);
     char cr0_val = *(char*)real_cr0 & 0x0f;
@@ -220,9 +220,9 @@ int handle_cr0_read(struct guest_info * info) {
 
 // First Attempt = 256 lines
 // current = 65 lines
-int handle_cr3_write(struct guest_info * info) {
+int v3_handle_cr3_write(struct guest_info * info) {
   int ret;
-  char instr[15];
+  uchar_t instr[15];
   struct x86_instr dec_instr;
 
   if (info->mem_mode == PHYSICAL_MEM) { 
@@ -244,7 +244,7 @@ int handle_cr3_write(struct guest_info * info) {
     return -1;
   }
 
-  if (opcode_cmp(V3_OPCODE_MOV2CR, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  if (v3_opcode_cmp(V3_OPCODE_MOV2CR, (const uchar_t *)(dec_instr.opcode)) == 0) {
 
     PrintDebug("MOV2CR3\n");
 
@@ -261,7 +261,7 @@ int handle_cr3_write(struct guest_info * info) {
                 *(uint_t*)shadow_cr3, *(uint_t*)guest_cr3);
       
 
-      cached = cache_page_tables32(info, CR3_TO_PDE32(*(addr_t *)new_cr3));
+      cached = v3_cache_page_tables32(info, (addr_t)CR3_TO_PDE32((void *)*(addr_t *)new_cr3));
 
       if (cached == -1) {
        PrintError("CR3 Cache failed\n");
@@ -273,9 +273,9 @@ int handle_cr3_write(struct guest_info * info) {
        
        delete_page_tables_pde32((pde32_t *)CR3_TO_PDE32(*(uint_t*)shadow_cr3));
        
-       shadow_pt =  create_new_shadow_pt32();
+       shadow_pt =  v3_create_new_shadow_pt32();
        
-       shadow_cr3->pdt_base_addr = PD32_BASE_ADDR(shadow_pt);    
+       shadow_cr3->pdt_base_addr = (addr_t)V3_PAddr((void *)(addr_t)PD32_BASE_ADDR(shadow_pt));
       } else {
        PrintDebug("Reusing cached shadow Page table\n");
       }
@@ -308,8 +308,8 @@ int handle_cr3_write(struct guest_info * info) {
 
 // first attempt = 156 lines
 // current = 36 lines
-int handle_cr3_read(struct guest_info * info) {
-  char instr[15];
+int v3_handle_cr3_read(struct guest_info * info) {
+  uchar_t instr[15];
   int ret;
   struct x86_instr dec_instr;
 
@@ -332,7 +332,7 @@ int handle_cr3_read(struct guest_info * info) {
     return -1;
   }
 
-  if (opcode_cmp(V3_OPCODE_MOVCR2, (const uchar_t *)(dec_instr.opcode)) == 0) {
+  if (v3_opcode_cmp(V3_OPCODE_MOVCR2, (const uchar_t *)(dec_instr.opcode)) == 0) {
     PrintDebug("MOVCR32\n");
     struct cr3_32 * virt_cr3 = (struct cr3_32 *)(dec_instr.dst_operand.operand);