Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef _I386_PGTABLE_2LEVEL_H
  2 #define _I386_PGTABLE_2LEVEL_H
  3 
  4 #define pte_ERROR(e) \
  5         printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
  6 #define pgd_ERROR(e) \
  7         printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
  8 
  9 /*
 10  * Certain architectures need to do special things when PTEs
 11  * within a page table are directly modified.  Thus, the following
 12  * hook is made available.
 13  */
 14 static inline void native_set_pte(pte_t *ptep , pte_t pte)
 15 {
 16         *ptep = pte;
 17 }
 18 
 19 static inline void native_set_pmd(pmd_t *pmdp, pmd_t pmd)
 20 {
 21         *pmdp = pmd;
 22 }
 23 
 24 static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte)
 25 {
 26         native_set_pte(ptep, pte);
 27 }
 28 
 29 static inline void native_set_pte_present(struct mm_struct *mm, unsigned long addr,
 30                                           pte_t *ptep, pte_t pte)
 31 {
 32         native_set_pte(ptep, pte);
 33 }
 34 
 35 static inline void native_pmd_clear(pmd_t *pmdp)
 36 {
 37         native_set_pmd(pmdp, __pmd(0));
 38 }
 39 
 40 static inline void native_pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *xp)
 41 {
 42         *xp = native_make_pte(0);
 43 }
 44 
 45 #ifdef CONFIG_SMP
 46 static inline pte_t native_ptep_get_and_clear(pte_t *xp)
 47 {
 48         return __pte(xchg(&xp->pte_low, 0));
 49 }
 50 #else
 51 #define native_ptep_get_and_clear(xp) native_local_ptep_get_and_clear(xp)
 52 #endif
 53 
 54 #define pte_page(x)             pfn_to_page(pte_pfn(x))
 55 #define pte_none(x)             (!(x).pte_low)
 56 #define pte_pfn(x)              (pte_val(x) >> PAGE_SHIFT)
 57 
 58 /*
 59  * Bits 0, 6 and 7 are taken, split up the 29 bits of offset
 60  * into this range:
 61  */
 62 #define PTE_FILE_MAX_BITS       29
 63 
 64 #define pte_to_pgoff(pte) \
 65         ((((pte).pte_low >> 1) & 0x1f ) + (((pte).pte_low >> 8) << 5 ))
 66 
 67 #define pgoff_to_pte(off) \
 68         ((pte_t) { .pte_low = (((off) & 0x1f) << 1) + (((off) >> 5) << 8) + _PAGE_FILE })
 69 
 70 /* Encode and de-code a swap entry */
 71 #define __swp_type(x)                   (((x).val >> 1) & 0x1f)
 72 #define __swp_offset(x)                 ((x).val >> 8)
 73 #define __swp_entry(type, offset)       ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
 74 #define __pte_to_swp_entry(pte)         ((swp_entry_t) { (pte).pte_low })
 75 #define __swp_entry_to_pte(x)           ((pte_t) { .pte = (x).val })
 76 
 77 #endif /* _I386_PGTABLE_2LEVEL_H */
 78 
  This page was automatically generated by the LXR engine.