/[qemu]/qemu/target-sparc/helper.c
ViewVC logotype

Diff of /qemu/target-sparc/helper.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by bellard, Mon Jan 3 23:43:32 2005 UTC revision 1.7 by bellard, Fri Jan 28 22:40:22 2005 UTC
# Line 129  int get_physical_address (CPUState *env, Line 129  int get_physical_address (CPUState *env,
129      /* SPARC reference MMU table walk: Context table->L1->L2->PTE */      /* SPARC reference MMU table walk: Context table->L1->L2->PTE */
130      /* Context base + context number */      /* Context base + context number */
131      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
132      cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);      pde = ldl_phys(pde_ptr);
     bswap32s(&pde);  
133    
134      /* Ctx pde */      /* Ctx pde */
135      switch (pde & PTE_ENTRYTYPE_MASK) {      switch (pde & PTE_ENTRYTYPE_MASK) {
# Line 142  int get_physical_address (CPUState *env, Line 141  int get_physical_address (CPUState *env,
141          return 4;          return 4;
142      case 1: /* L0 PDE */      case 1: /* L0 PDE */
143          pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);          pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);
144          cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);          pde = ldl_phys(pde_ptr);
         bswap32s(&pde);  
145    
146          switch (pde & PTE_ENTRYTYPE_MASK) {          switch (pde & PTE_ENTRYTYPE_MASK) {
147          default:          default:
# Line 153  int get_physical_address (CPUState *env, Line 151  int get_physical_address (CPUState *env,
151              return 4;              return 4;
152          case 1: /* L1 PDE */          case 1: /* L1 PDE */
153              pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);              pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);
154              cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);              pde = ldl_phys(pde_ptr);
             bswap32s(&pde);  
155    
156              switch (pde & PTE_ENTRYTYPE_MASK) {              switch (pde & PTE_ENTRYTYPE_MASK) {
157              default:              default:
# Line 164  int get_physical_address (CPUState *env, Line 161  int get_physical_address (CPUState *env,
161                  return 4;                  return 4;
162              case 1: /* L2 PDE */              case 1: /* L2 PDE */
163                  pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);                  pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);
164                  cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);                  pde = ldl_phys(pde_ptr);
                 bswap32s(&pde);  
165    
166                  switch (pde & PTE_ENTRYTYPE_MASK) {                  switch (pde & PTE_ENTRYTYPE_MASK) {
167                  default:                  default:
# Line 193  int get_physical_address (CPUState *env, Line 189  int get_physical_address (CPUState *env,
189      /* update page modified and dirty bits */      /* update page modified and dirty bits */
190      is_dirty = (rw & 1) && !(pde & PG_MODIFIED_MASK);      is_dirty = (rw & 1) && !(pde & PG_MODIFIED_MASK);
191      if (!(pde & PG_ACCESSED_MASK) || is_dirty) {      if (!(pde & PG_ACCESSED_MASK) || is_dirty) {
         uint32_t tmppde;  
192          pde |= PG_ACCESSED_MASK;          pde |= PG_ACCESSED_MASK;
193          if (is_dirty)          if (is_dirty)
194              pde |= PG_MODIFIED_MASK;              pde |= PG_MODIFIED_MASK;
195          tmppde = bswap32(pde);          stl_phys_notdirty(pde_ptr, pde);
         cpu_physical_memory_write(pde_ptr, (uint8_t *)&tmppde, 4);  
196      }      }
197      /* check access */      /* check access */
198      *access_index = ((rw & 1) << 2) | (rw & 2) | (is_user? 0 : 1);      *access_index = ((rw & 1) << 2) | (rw & 2) | (is_user? 0 : 1);
# Line 356  uint32_t mmu_probe(uint32_t address, int Line 350  uint32_t mmu_probe(uint32_t address, int
350    
351      /* Context base + context number */      /* Context base + context number */
352      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
353      cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);      pde = ldl_phys(pde_ptr);
354      bswap32s(&pde);  
355      switch (pde & PTE_ENTRYTYPE_MASK) {      switch (pde & PTE_ENTRYTYPE_MASK) {
356      default:      default:
357      case 0: /* Invalid */      case 0: /* Invalid */
# Line 368  uint32_t mmu_probe(uint32_t address, int Line 362  uint32_t mmu_probe(uint32_t address, int
362          if (mmulev == 3)          if (mmulev == 3)
363              return pde;              return pde;
364          pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);          pde_ptr = ((address >> 22) & ~3) + ((pde & ~3) << 4);
365          cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);          pde = ldl_phys(pde_ptr);
         bswap32s(&pde);  
366    
367          switch (pde & PTE_ENTRYTYPE_MASK) {          switch (pde & PTE_ENTRYTYPE_MASK) {
368          default:          default:
# Line 382  uint32_t mmu_probe(uint32_t address, int Line 375  uint32_t mmu_probe(uint32_t address, int
375              if (mmulev == 2)              if (mmulev == 2)
376                  return pde;                  return pde;
377              pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);              pde_ptr = ((address & 0xfc0000) >> 16) + ((pde & ~3) << 4);
378              cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);              pde = ldl_phys(pde_ptr);
             bswap32s(&pde);  
379    
380              switch (pde & PTE_ENTRYTYPE_MASK) {              switch (pde & PTE_ENTRYTYPE_MASK) {
381              default:              default:
# Line 396  uint32_t mmu_probe(uint32_t address, int Line 388  uint32_t mmu_probe(uint32_t address, int
388                  if (mmulev == 1)                  if (mmulev == 1)
389                      return pde;                      return pde;
390                  pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);                  pde_ptr = ((address & 0x3f000) >> 10) + ((pde & ~3) << 4);
391                  cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);                  pde = ldl_phys(pde_ptr);
                 bswap32s(&pde);  
392    
393                  switch (pde & PTE_ENTRYTYPE_MASK) {                  switch (pde & PTE_ENTRYTYPE_MASK) {
394                  default:                  default:
# Line 424  void dump_mmu(void) Line 415  void dump_mmu(void)
415    
416      printf("MMU dump:\n");      printf("MMU dump:\n");
417      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);      pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 4);
418      cpu_physical_memory_read(pde_ptr, (uint8_t *)&pde, 4);      pde = ldl_phys(pde_ptr);
     bswap32s(&pde);  
419      printf("Root ptr: 0x%08x, ctx: %d\n", env->mmuregs[1] << 4, env->mmuregs[2]);      printf("Root ptr: 0x%08x, ctx: %d\n", env->mmuregs[1] << 4, env->mmuregs[2]);
420      for (n = 0, va = 0; n < 256; n++, va += 16 * 1024 * 1024) {      for (n = 0, va = 0; n < 256; n++, va += 16 * 1024 * 1024) {
421          pde_ptr = mmu_probe(va, 2);          pde_ptr = mmu_probe(va, 2);

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26