pa11.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: pa11.c,v 1.1 1999/03/17 01:05:41 pjlahaie Exp $
  2.  *
  3.  * pa11.c: PA 1.1 specific mmu/cache code.
  4.  *
  5.  */
  6. #include <linux/init.h>
  7. #include <linux/kernel.h>
  8. #include <linux/sched.h>
  9. #include <linux/mm.h>
  10. #include <asm/page.h>
  11. #include <asm/pgtable.h>
  12. #include <asm/system.h>
  13. #include <asm/sgialib.h>
  14. #include <asm/mmu_context.h>
  15. extern unsigned long mips_tlb_entries;
  16. /* page functions */
  17. void pa11_clear_page(unsigned long page)
  18. {
  19. }
  20. static void pa11_copy_page(unsigned long to, unsigned long from)
  21. {
  22. }
  23. /* Cache operations. */
  24. static inline void pa11_flush_cache_all(void) { }
  25. static void pa11_flush_cache_mm(struct mm_struct *mm) { }
  26. static void pa11_flush_cache_range(struct mm_struct *mm,
  27.     unsigned long start,
  28.     unsigned long end)
  29. {
  30. }
  31. static void pa11_flush_cache_page(struct vm_area_struct *vma,
  32.    unsigned long page)
  33. {
  34. }
  35. static void pa11_flush_page_to_ram(unsigned long page)
  36. {
  37. }
  38. static void pa11_flush_cache_sigtramp(unsigned long page)
  39. {
  40. }
  41. /* TLB operations. */
  42. static inline void pa11_flush_tlb_all(void)
  43. {
  44. unsigned long flags;
  45. int entry;
  46. save_and_cli(flags);
  47. /* Here we will need to flush all the TLBs */
  48. restore_flags(flags);
  49. }
  50. static void pa11_flush_tlb_mm(struct mm_struct *mm)
  51. {
  52. /* This is what the MIPS does..  Is it the right thing for PA-RISC? */
  53. if(mm == current->mm)
  54. pa11_flush_tlb_all();
  55. }
  56. static void pa11_flush_tlb_range(struct mm_struct *mm, unsigned long start,
  57.   unsigned long end)
  58. {
  59. if(mm == current->mm)
  60. pa11_flush_tlb_all();
  61. }
  62. static void pa11_flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
  63. {
  64. if(vma->vm_mm == current->mm)
  65. pa11_flush_tlb_all();
  66. }
  67. static void pa11_load_pgd(unsigned long pg_dir)
  68. {
  69. unsigned long flags;
  70.     /* We need to do the right thing here */
  71. }
  72. /*
  73.  * Initialize new page directory with pointers to invalid ptes
  74.  */
  75. static void pa11_pgd_init(unsigned long page)
  76. {
  77. unsigned long dummy1, dummy2;
  78. }
  79. static void pa11_update_mmu_cache(struct vm_area_struct * vma,
  80.    unsigned long address, pte_t pte)
  81. {
  82. pa11_flush_tlb_page(vma, address);
  83. }
  84. static void pa11_show_regs(struct pt_regs * regs)
  85. {
  86. /*
  87.  * Saved main processor registers
  88.  */
  89. printk("$0 : %08x %08lx %08lx %08lx %08lx %08lx %08lx %08lxn",
  90.        0, (unsigned long) regs->regs[1], (unsigned long) regs->regs[2],
  91.        (unsigned long) regs->regs[3], (unsigned long) regs->regs[4],
  92.        (unsigned long) regs->regs[5], (unsigned long) regs->regs[6],
  93.        (unsigned long) regs->regs[7]);
  94. printk("$8 : %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lxn",
  95.        (unsigned long) regs->regs[8], (unsigned long) regs->regs[9],
  96.        (unsigned long) regs->regs[10], (unsigned long) regs->regs[11],
  97.                (unsigned long) regs->regs[12], (unsigned long) regs->regs[13],
  98.        (unsigned long) regs->regs[14], (unsigned long) regs->regs[15]);
  99. printk("$16: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lxn",
  100.        (unsigned long) regs->regs[16], (unsigned long) regs->regs[17],
  101.        (unsigned long) regs->regs[18], (unsigned long) regs->regs[19],
  102.                (unsigned long) regs->regs[20], (unsigned long) regs->regs[21],
  103.        (unsigned long) regs->regs[22], (unsigned long) regs->regs[23]);
  104. printk("$24: %08lx %08lx                   %08lx %08lx %08lx %08lxn",
  105.        (unsigned long) regs->regs[24], (unsigned long) regs->regs[25],
  106.        (unsigned long) regs->regs[28], (unsigned long) regs->regs[29],
  107.                (unsigned long) regs->regs[30], (unsigned long) regs->regs[31]);
  108. /*
  109.  * Saved cp0 registers
  110.  */
  111. printk("epc  : %08lx    %snStatus: %08xnCause : %08xn",
  112.        (unsigned long) regs->cp0_epc, print_tainted(),
  113.        (unsigned int) regs->cp0_status,
  114.        (unsigned int) regs->cp0_cause);
  115. }
  116. static int pa11_user_mode(struct pt_regs *regs)
  117. {
  118.        /* Return user mode stuff?? */
  119. }
  120. __initfunc(void ld_mmu_pa11(void))
  121. {
  122.     /* Taken directly from the MIPS arch..  Lots of bad things here */
  123. clear_page = pa11_clear_page;
  124. copy_page = pa11_copy_page;
  125. flush_cache_all = pa11_flush_cache_all;
  126. flush_cache_mm = pa11_flush_cache_mm;
  127. flush_cache_range = pa11_flush_cache_range;
  128. flush_cache_page = pa11_flush_cache_page;
  129. flush_cache_sigtramp = pa11_flush_cache_sigtramp;
  130. flush_page_to_ram = pa11_flush_page_to_ram;
  131. flush_tlb_all = pa11_flush_tlb_all;
  132. flush_tlb_mm = pa11_flush_tlb_mm;
  133. flush_tlb_range = pa11_flush_tlb_range;
  134. flush_tlb_page = pa11_flush_tlb_page;
  135. pa11_asid_setup();
  136. load_pgd = pa11_load_pgd;
  137. pgd_init = pa11_pgd_init;
  138. update_mmu_cache = pa11_update_mmu_cache;
  139. show_regs = pa11_show_regs;
  140.     
  141.         add_wired_entry = pa11_add_wired_entry;
  142. user_mode = pa11_user_mode;
  143. flush_tlb_all();
  144. }