Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _ASM_X86_PGTABLE_32_H
  2. #define _ASM_X86_PGTABLE_32_H
  3.  
  4. #include <asm/pgtable_32_types.h>
  5.  
  6. /*
  7.  * The Linux memory management assumes a three-level page table setup. On
  8.  * the i386, we use that, but "fold" the mid level into the top-level page
  9.  * table, so that we physically have the same two-level page table as the
  10.  * i386 mmu expects.
  11.  *
  12.  * This file contains the functions and defines necessary to modify and use
  13.  * the i386 page table tree.
  14.  */
  15. #ifndef __ASSEMBLY__
  16. #include <asm/processor.h>
  17. #include <linux/threads.h>
  18.  
  19. #include <linux/bitops.h>
  20. #include <linux/list.h>
  21. #include <linux/spinlock.h>
  22.  
  23. struct mm_struct;
  24. struct vm_area_struct;
  25.  
  26. extern pgd_t swapper_pg_dir[1024];
  27. extern pgd_t initial_page_table[1024];
  28.  
  29. static inline void pgtable_cache_init(void) { }
  30. static inline void check_pgt_cache(void) { }
  31. void paging_init(void);
  32.  
  33. /*
  34.  * Define this if things work differently on an i386 and an i486:
  35.  * it will (on an i486) warn about kernel memory accesses that are
  36.  * done without a 'access_ok(VERIFY_WRITE,..)'
  37.  */
  38. #undef TEST_ACCESS_OK
  39.  
  40. #ifdef CONFIG_X86_PAE
  41. # include <asm/pgtable-3level.h>
  42. #else
  43. # include <asm/pgtable-2level.h>
  44. #endif
  45.  
  46. #if defined(CONFIG_HIGHPTE)
  47. #define pte_offset_map(dir, address)                                    \
  48.         ((pte_t *)kmap_atomic(pmd_page(*(dir))) +               \
  49.          pte_index((address)))
  50. #define pte_unmap(pte) kunmap_atomic((pte))
  51. #else
  52. #define pte_offset_map(dir, address)                                    \
  53.         ((pte_t *)page_address(pmd_page(*(dir))) + pte_index((address)))
  54. #define pte_unmap(pte) do { } while (0)
  55. #endif
  56.  
  57. /* Clear a kernel PTE and flush it from the TLB */
  58. #define kpte_clear_flush(ptep, vaddr)           \
  59. do {                                            \
  60.         pte_clear(&init_mm, (vaddr), (ptep));   \
  61.         __flush_tlb_one((vaddr));               \
  62. } while (0)
  63.  
  64. #endif /* !__ASSEMBLY__ */
  65.  
  66. /*
  67.  * kern_addr_valid() is (1) for FLATMEM and (0) for
  68.  * SPARSEMEM and DISCONTIGMEM
  69.  */
  70. #ifdef CONFIG_FLATMEM
  71. #define kern_addr_valid(addr)   (1)
  72. #else
  73. #define kern_addr_valid(kaddr)  (0)
  74. #endif
  75.  
  76. #endif /* _ASM_X86_PGTABLE_32_H */
  77.