Diff for /qemu/hw/alpha_palcode.c between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2018/04/24 17:23:44 version 1.1.1.4, 2018/04/24 18:28:27
Line 21 Line 21
 #include <stdlib.h>  #include <stdlib.h>
 #include <stdio.h>  #include <stdio.h>
   
 #include "qemu.h"  
 #include "cpu.h"  #include "cpu.h"
 #include "exec-all.h"  #include "exec-all.h"
   
 #if !defined (CONFIG_USER_ONLY)  
 /* Shared handlers */  /* Shared handlers */
 static void pal_reset (CPUState *env);  static void pal_reset (CPUState *env);
 /* Console handlers */  /* Console handlers */
Line 81  static void pal_reset (CPUState *env) Line 79  static void pal_reset (CPUState *env)
 static void do_swappal (CPUState *env, uint64_t palid)  static void do_swappal (CPUState *env, uint64_t palid)
 {  {
     pal_handler_t *pal_handler;      pal_handler_t *pal_handler;
     int status;  
   
     status = 0;  
     switch (palid) {      switch (palid) {
     case 0 ... 2:      case 0 ... 2:
         pal_handler = &pal_handlers[palid];          pal_handler = &pal_handlers[palid];
Line 997  int cpu_ppc_handle_mmu_fault (CPUState * Line 993  int cpu_ppc_handle_mmu_fault (CPUState *
     uint64_t physical, page_size, end;      uint64_t physical, page_size, end;
     int prot, zbits, ret;      int prot, zbits, ret;
   
 #if defined(CONFIG_USER_ONLY)      ret = virtual_to_physical(env, &physical, &zbits, &prot,
         ret = 2;                                address, mmu_idx, rw);
 #else  
         ret = virtual_to_physical(env, &physical, &zbits, &prot,  
                                   address, mmu_idx, rw);  
 #endif  
     switch (ret) {      switch (ret) {
     case 0:      case 0:
         /* No fault */          /* No fault */
         page_size = 1ULL << zbits;          page_size = 1ULL << zbits;
         address &= ~(page_size - 1);          address &= ~(page_size - 1);
           /* FIXME: page_size should probably be passed to tlb_set_page,
              and this loop removed.   */
         for (end = physical + page_size; physical < end; physical += 0x1000) {          for (end = physical + page_size; physical < end; physical += 0x1000) {
             ret = tlb_set_page(env, address, physical, prot,              tlb_set_page(env, address, physical, prot, mmu_idx,
                                mmu_idx, is_softmmu);                           TARGET_PAGE_SIZE);
             address += 0x1000;              address += 0x1000;
         }          }
           ret = 0;
         break;          break;
 #if 0  #if 0
     case 1:      case 1:
Line 1050  int cpu_ppc_handle_mmu_fault (CPUState * Line 1046  int cpu_ppc_handle_mmu_fault (CPUState *
     return ret;      return ret;
 }  }
 #endif  #endif
   
 #else /* !defined (CONFIG_USER_ONLY) */  
 void pal_init (CPUState *env)  
 {  
 }  
   
 void call_pal (CPUState *env, int palcode)  
 {  
     target_long ret;  
   
     qemu_log("%s: palcode %02x\n", __func__, palcode);  
     switch (palcode) {  
     case 0x83:  
         /* CALLSYS */  
         qemu_log("CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);  
         ret = do_syscall(env, env->ir[IR_V0], env->ir[IR_A0], env->ir[IR_A1],  
                          env->ir[IR_A2], env->ir[IR_A3], env->ir[IR_A4],  
                          env->ir[IR_A5]);  
         if (ret >= 0) {  
             env->ir[IR_A3] = 0;  
             env->ir[IR_V0] = ret;  
         } else {  
             env->ir[IR_A3] = 1;  
             env->ir[IR_V0] = -ret;  
         }  
         break;  
     case 0x9E:  
         /* RDUNIQUE */  
         env->ir[IR_V0] = env->unique;  
         qemu_log("RDUNIQUE: " TARGET_FMT_lx "\n", env->unique);  
         break;  
     case 0x9F:  
         /* WRUNIQUE */  
         env->unique = env->ir[IR_A0];  
         qemu_log("WRUNIQUE: " TARGET_FMT_lx "\n", env->unique);  
         break;  
     default:  
         qemu_log("%s: unhandled palcode %02x\n",  
                     __func__, palcode);  
         exit(1);  
     }  
 }  
 #endif  

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


unix.superglobalmegacorp.com