home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-i386 / pgtable-2level.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.1 KB  |  70 lines

  1. #ifndef _I386_PGTABLE_2LEVEL_H
  2. #define _I386_PGTABLE_2LEVEL_H
  3.  
  4. #include <asm-generic/pgtable-nopmd.h>
  5.  
  6. #define pte_ERROR(e) \
  7.     printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
  8. #define pgd_ERROR(e) \
  9.     printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
  10.  
  11. /*
  12.  * Certain architectures need to do special things when PTEs
  13.  * within a page table are directly modified.  Thus, the following
  14.  * hook is made available.
  15.  */
  16. #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
  17. #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
  18. #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
  19. #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
  20.  
  21. #define pte_clear(mm,addr,xp)    do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
  22. #define pmd_clear(xp)    do { set_pmd(xp, __pmd(0)); } while (0)
  23.  
  24. #define ptep_get_and_clear(mm,addr,xp)    __pte(xchg(&(xp)->pte_low, 0))
  25. #define pte_same(a, b)        ((a).pte_low == (b).pte_low)
  26. #define pte_page(x)        pfn_to_page(pte_pfn(x))
  27. #define pte_none(x)        (!(x).pte_low)
  28. #define pte_pfn(x)        ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
  29. #define pfn_pte(pfn, prot)    __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
  30. #define pfn_pmd(pfn, prot)    __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
  31.  
  32. /*
  33.  * All present user pages are user-executable:
  34.  */
  35. static inline int pte_exec(pte_t pte)
  36. {
  37.     return pte_user(pte);
  38. }
  39.  
  40. /*
  41.  * All present pages are kernel-executable:
  42.  */
  43. static inline int pte_exec_kernel(pte_t pte)
  44. {
  45.     return 1;
  46. }
  47.  
  48. /*
  49.  * Bits 0, 6 and 7 are taken, split up the 29 bits of offset
  50.  * into this range:
  51.  */
  52. #define PTE_FILE_MAX_BITS    29
  53.  
  54. #define pte_to_pgoff(pte) \
  55.     ((((pte).pte_low >> 1) & 0x1f ) + (((pte).pte_low >> 8) << 5 ))
  56.  
  57. #define pgoff_to_pte(off) \
  58.     ((pte_t) { (((off) & 0x1f) << 1) + (((off) >> 5) << 8) + _PAGE_FILE })
  59.  
  60. /* Encode and de-code a swap entry */
  61. #define __swp_type(x)            (((x).val >> 1) & 0x1f)
  62. #define __swp_offset(x)            ((x).val >> 8)
  63. #define __swp_entry(type, offset)    ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
  64. #define __pte_to_swp_entry(pte)        ((swp_entry_t) { (pte).pte_low })
  65. #define __swp_entry_to_pte(x)        ((pte_t) { (x).val })
  66.  
  67. void vmalloc_sync_all(void);
  68.  
  69. #endif /* _I386_PGTABLE_2LEVEL_H */
  70.