[BACK]Return to pmap.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / powerpc / oea

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/powerpc/oea/pmap.c between version 1.43 and 1.43.4.2

version 1.43, 2006/10/30 17:52:12 version 1.43.4.2, 2007/03/12 05:50:07
Line 550  mfrtcltbl(void)
Line 550  mfrtcltbl(void)
 void  void
 tlbia(void)  tlbia(void)
 {  {
         caddr_t i;          char *i;
   
         SYNC();          SYNC();
 #if defined(PPC_OEA)  #if defined(PPC_OEA)
Line 560  tlbia(void)
Line 560  tlbia(void)
          * This needs to be a per-CPU callback to do the appropriate thing           * This needs to be a per-CPU callback to do the appropriate thing
          * for the CPU. XXX           * for the CPU. XXX
          */           */
         for (i = 0; i < (caddr_t)0x00040000; i += 0x00001000) {          for (i = 0; i < (char *)0x00040000; i += 0x00001000) {
                 TLBIE(i);                  TLBIE(i);
                 EIEIO();                  EIEIO();
                 SYNC();                  SYNC();
Line 568  tlbia(void)
Line 568  tlbia(void)
 #elif defined (PPC_OEA64) || defined (PPC_OEA64_BRIDGE)  #elif defined (PPC_OEA64) || defined (PPC_OEA64_BRIDGE)
         printf("Invalidating ALL TLB entries......\n");          printf("Invalidating ALL TLB entries......\n");
         /* This is specifically for the 970, 970UM v1.6 pp. 140. */          /* This is specifically for the 970, 970UM v1.6 pp. 140. */
         for (i = 0; i <= (caddr_t)0xFF000; i += 0x00001000) {          for (i = 0; i <= (void *)0xFF000; i += 0x00001000) {
                 TLBIEL(i);                  TLBIEL(i);
                 EIEIO();                  EIEIO();
                 SYNC();                  SYNC();
Line 932  pmap_pte_insert(int ptegidx, struct pte 
Line 932  pmap_pte_insert(int ptegidx, struct pte 
  */   */
   
 int  int
 pmap_pte_spill(struct pmap *pm, vaddr_t addr, boolean_t exec)  pmap_pte_spill(struct pmap *pm, vaddr_t addr, bool exec)
 {  {
         struct pvo_entry *source_pvo, *victim_pvo, *next_pvo;          struct pvo_entry *source_pvo, *victim_pvo, *next_pvo;
         struct pvo_entry *pvo;          struct pvo_entry *pvo;
Line 1197  pmap_create(void)
Line 1197  pmap_create(void)
         pmap_t pm;          pmap_t pm;
   
         pm = pool_get(&pmap_pool, PR_WAITOK);          pm = pool_get(&pmap_pool, PR_WAITOK);
         memset((caddr_t)pm, 0, sizeof *pm);          memset((void *)pm, 0, sizeof *pm);
         pmap_pinit(pm);          pmap_pinit(pm);
   
         DPRINTFN(CREATE,("pmap_create: pm %p:\n"          DPRINTFN(CREATE,("pmap_create: pm %p:\n"
Line 1745  pmap_pvo_enter(pmap_t pm, struct pool *p
Line 1745  pmap_pvo_enter(pmap_t pm, struct pool *p
                  * If this is a kernel page, make sure it's active.                   * If this is a kernel page, make sure it's active.
                  */                   */
                 if (pm == pmap_kernel()) {                  if (pm == pmap_kernel()) {
                         i = pmap_pte_spill(pm, va, FALSE);                          i = pmap_pte_spill(pm, va, false);
                         KASSERT(i);                          KASSERT(i);
                 }                  }
         }          }
Line 2122  pmap_remove(pmap_t pm, vaddr_t va, vaddr
Line 2122  pmap_remove(pmap_t pm, vaddr_t va, vaddr
 /*  /*
  * Get the physical page address for the given pmap/virtual address.   * Get the physical page address for the given pmap/virtual address.
  */   */
 boolean_t  bool
 pmap_extract(pmap_t pm, vaddr_t va, paddr_t *pap)  pmap_extract(pmap_t pm, vaddr_t va, paddr_t *pap)
 {  {
         struct pvo_entry *pvo;          struct pvo_entry *pvo;
Line 2149  pmap_extract(pmap_t pm, vaddr_t va, padd
Line 2149  pmap_extract(pmap_t pm, vaddr_t va, padd
                                     (~(batu & BAT_BL) << 15) & ~0x1ffffL;                                      (~(batu & BAT_BL) << 15) & ~0x1ffffL;
                                 if (pap)                                  if (pap)
                                         *pap = (batl & mask) | (va & ~mask);                                          *pap = (batl & mask) | (va & ~mask);
                                 return TRUE;                                  return true;
                         }                          }
                 } else {                  } else {
                         register_t batu = battable[va >> 23].batu;                          register_t batu = battable[va >> 23].batu;
Line 2161  pmap_extract(pmap_t pm, vaddr_t va, padd
Line 2161  pmap_extract(pmap_t pm, vaddr_t va, padd
                                     (~(batl & BAT601_BSM) << 17) & ~0x1ffffL;                                      (~(batl & BAT601_BSM) << 17) & ~0x1ffffL;
                                 if (pap)                                  if (pap)
                                         *pap = (batl & mask) | (va & ~mask);                                          *pap = (batl & mask) | (va & ~mask);
                                 return TRUE;                                  return true;
                         } else if (SR601_VALID_P(sr) &&                          } else if (SR601_VALID_P(sr) &&
                                    SR601_PA_MATCH_P(sr, va)) {                                     SR601_PA_MATCH_P(sr, va)) {
                                 if (pap)                                  if (pap)
                                         *pap = va;                                          *pap = va;
                                 return TRUE;                                  return true;
                         }                          }
                 }                  }
                 return FALSE;                  return false;
 #elif defined (PPC_OEA64_BRIDGE)  #elif defined (PPC_OEA64_BRIDGE)
         panic("%s: pm: %s, va: 0x%08lx\n", __FUNCTION__,          panic("%s: pm: %s, va: 0x%08lx\n", __FUNCTION__,
                 (pm == pmap_kernel() ? "kernel" : "user"), va);                  (pm == pmap_kernel() ? "kernel" : "user"), va);
Line 2394  pmap_deactivate(struct lwp *l)
Line 2394  pmap_deactivate(struct lwp *l)
 {  {
 }  }
   
 boolean_t  bool
 pmap_query_bit(struct vm_page *pg, int ptebit)  pmap_query_bit(struct vm_page *pg, int ptebit)
 {  {
         struct pvo_entry *pvo;          struct pvo_entry *pvo;
Line 2402  pmap_query_bit(struct vm_page *pg, int p
Line 2402  pmap_query_bit(struct vm_page *pg, int p
         register_t msr;          register_t msr;
   
         if (pmap_attr_fetch(pg) & ptebit)          if (pmap_attr_fetch(pg) & ptebit)
                 return TRUE;                  return true;
   
         msr = pmap_interrupts_off();          msr = pmap_interrupts_off();
         LIST_FOREACH(pvo, vm_page_to_pvoh(pg), pvo_vlink) {          LIST_FOREACH(pvo, vm_page_to_pvoh(pg), pvo_vlink) {
Line 2415  pmap_query_bit(struct vm_page *pg, int p
Line 2415  pmap_query_bit(struct vm_page *pg, int p
                         pmap_attr_save(pg, ptebit);                          pmap_attr_save(pg, ptebit);
                         PMAP_PVO_CHECK(pvo);            /* sanity check */                          PMAP_PVO_CHECK(pvo);            /* sanity check */
                         pmap_interrupts_restore(msr);                          pmap_interrupts_restore(msr);
                         return TRUE;                          return true;
                 }                  }
         }          }
         /*          /*
Line 2438  pmap_query_bit(struct vm_page *pg, int p
Line 2438  pmap_query_bit(struct vm_page *pg, int p
                                 pmap_attr_save(pg, ptebit);                                  pmap_attr_save(pg, ptebit);
                                 PMAP_PVO_CHECK(pvo);            /* sanity check */                                  PMAP_PVO_CHECK(pvo);            /* sanity check */
                                 pmap_interrupts_restore(msr);                                  pmap_interrupts_restore(msr);
                                 return TRUE;                                  return true;
                         }                          }
                 }                  }
         }          }
         pmap_interrupts_restore(msr);          pmap_interrupts_restore(msr);
         return FALSE;          return false;
 }  }
   
 boolean_t  bool
 pmap_clear_bit(struct vm_page *pg, int ptebit)  pmap_clear_bit(struct vm_page *pg, int ptebit)
 {  {
         struct pvo_head *pvoh = vm_page_to_pvoh(pg);          struct pvo_head *pvoh = vm_page_to_pvoh(pg);
Line 2828  pmap_pool_ualloc(struct pool *pp, int fl
Line 2828  pmap_pool_ualloc(struct pool *pp, int fl
                 SIMPLEQ_REMOVE_HEAD(&pmap_upvop_head, pvop_link);                  SIMPLEQ_REMOVE_HEAD(&pmap_upvop_head, pvop_link);
                 return pvop;                  return pvop;
         }          }
         if (uvm.page_init_done != TRUE) {          if (uvm.page_init_done != true) {
                 return (void *) uvm_pageboot_alloc(PAGE_SIZE);                  return (void *) uvm_pageboot_alloc(PAGE_SIZE);
         }          }
         return pmap_pool_malloc(pp, flags);          return pmap_pool_malloc(pp, flags);
Line 2906  pmap_steal_memory(vsize_t vsize, vaddr_t
Line 2906  pmap_steal_memory(vsize_t vsize, vaddr_t
         int npgs, bank;          int npgs, bank;
         struct vm_physseg *ps;          struct vm_physseg *ps;
   
         if (uvm.page_init_done == TRUE)          if (uvm.page_init_done == true)
                 panic("pmap_steal_memory: called _after_ bootstrap");                  panic("pmap_steal_memory: called _after_ bootstrap");
   
         *vstartp = VM_MIN_KERNEL_ADDRESS;          *vstartp = VM_MIN_KERNEL_ADDRESS;
Line 2951  pmap_steal_memory(vsize_t vsize, vaddr_t
Line 2951  pmap_steal_memory(vsize_t vsize, vaddr_t
         }          }
   
         va = (vaddr_t) pa;          va = (vaddr_t) pa;
         memset((caddr_t) va, 0, size);          memset((void *) va, 0, size);
         pmap_pages_stolen += npgs;          pmap_pages_stolen += npgs;
 #ifdef DEBUG  #ifdef DEBUG
         if (pmapdebug && npgs > 1) {          if (pmapdebug && npgs > 1) {

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.43.4.2

CVSweb <webmaster@jp.NetBSD.org>