1#ifndef __PAT_INTERNAL_H_ 2#define __PAT_INTERNAL_H_ 3 4extern int pat_debug_enable; 5 6#define dprintk(fmt, arg...) \ 7 do { if (pat_debug_enable) printk(KERN_INFO fmt, ##arg); } while (0) 8 9struct memtype { 10 u64 start; 11 u64 end; 12 u64 subtree_max_end; 13 enum page_cache_mode type; 14 struct rb_node rb; 15}; 16 17static inline char *cattr_name(enum page_cache_mode pcm) 18{ 19 switch (pcm) { 20 case _PAGE_CACHE_MODE_UC: return "uncached"; 21 case _PAGE_CACHE_MODE_UC_MINUS: return "uncached-minus"; 22 case _PAGE_CACHE_MODE_WB: return "write-back"; 23 case _PAGE_CACHE_MODE_WC: return "write-combining"; 24 case _PAGE_CACHE_MODE_WT: return "write-through"; 25 case _PAGE_CACHE_MODE_WP: return "write-protected"; 26 default: return "broken"; 27 } 28} 29 30#ifdef CONFIG_X86_PAT 31extern int rbt_memtype_check_insert(struct memtype *new, 32 enum page_cache_mode *new_type); 33extern struct memtype *rbt_memtype_erase(u64 start, u64 end); 34extern struct memtype *rbt_memtype_lookup(u64 addr); 35extern int rbt_memtype_copy_nth_element(struct memtype *out, loff_t pos); 36#else 37static inline int rbt_memtype_check_insert(struct memtype *new, 38 enum page_cache_mode *new_type) 39{ return 0; } 40static inline struct memtype *rbt_memtype_erase(u64 start, u64 end) 41{ return NULL; } 42static inline struct memtype *rbt_memtype_lookup(u64 addr) 43{ return NULL; } 44static inline int rbt_memtype_copy_nth_element(struct memtype *out, loff_t pos) 45{ return 0; } 46#endif 47 48#endif /* __PAT_INTERNAL_H_ */ 49