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-mips / cacheflush.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.3 KB  |  97 lines

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03 by Ralf Baechle
  7.  * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
  8.  */
  9. #ifndef _ASM_CACHEFLUSH_H
  10. #define _ASM_CACHEFLUSH_H
  11.  
  12. /* Keep includes the same across arches.  */
  13. #include <linux/mm.h>
  14. #include <asm/cpu-features.h>
  15.  
  16. /* Cache flushing:
  17.  *
  18.  *  - flush_cache_all() flushes entire cache
  19.  *  - flush_cache_mm(mm) flushes the specified mm context's cache lines
  20.  *  - flush_cache_page(mm, vmaddr, pfn) flushes a single page
  21.  *  - flush_cache_range(vma, start, end) flushes a range of pages
  22.  *  - flush_icache_range(start, end) flush a range of instructions
  23.  *  - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache
  24.  *  - flush_icache_page(vma, pg) flushes(invalidates) a page for icache
  25.  *
  26.  * MIPS specific flush operations:
  27.  *
  28.  *  - flush_cache_sigtramp() flush signal trampoline
  29.  *  - flush_icache_all() flush the entire instruction cache
  30.  *  - flush_data_cache_page() flushes a page from the data cache
  31.  */
  32. extern void (*flush_cache_all)(void);
  33. extern void (*__flush_cache_all)(void);
  34. extern void (*flush_cache_mm)(struct mm_struct *mm);
  35. extern void (*flush_cache_range)(struct vm_area_struct *vma,
  36.     unsigned long start, unsigned long end);
  37. extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn);
  38. extern void __flush_dcache_page(struct page *page);
  39.  
  40. static inline void flush_dcache_page(struct page *page)
  41. {
  42.     if (cpu_has_dc_aliases)
  43.         __flush_dcache_page(page);
  44.  
  45. }
  46.  
  47. #define flush_dcache_mmap_lock(mapping)        do { } while (0)
  48. #define flush_dcache_mmap_unlock(mapping)    do { } while (0)
  49.  
  50. extern void (*flush_icache_page)(struct vm_area_struct *vma,
  51.     struct page *page);
  52. extern void (*flush_icache_range)(unsigned long start, unsigned long end);
  53. #define flush_cache_vmap(start, end)        flush_cache_all()
  54. #define flush_cache_vunmap(start, end)        flush_cache_all()
  55.  
  56. static inline void copy_to_user_page(struct vm_area_struct *vma,
  57.     struct page *page, unsigned long vaddr, void *dst, const void *src,
  58.     unsigned long len)
  59. {
  60.     if (cpu_has_dc_aliases)
  61.         flush_cache_page(vma, vaddr, page_to_pfn(page));
  62.     memcpy(dst, src, len);
  63.     flush_icache_page(vma, page);
  64. }
  65.  
  66. static inline void copy_from_user_page(struct vm_area_struct *vma,
  67.     struct page *page, unsigned long vaddr, void *dst, const void *src,
  68.     unsigned long len)
  69. {
  70.     if (cpu_has_dc_aliases)
  71.         flush_cache_page(vma, vaddr, page_to_pfn(page));
  72.     memcpy(dst, src, len);
  73. }
  74.  
  75. extern void (*flush_cache_sigtramp)(unsigned long addr);
  76. extern void (*flush_icache_all)(void);
  77. extern void (*local_flush_data_cache_page)(void * addr);
  78. extern void (*flush_data_cache_page)(unsigned long addr);
  79.  
  80. /*
  81.  * This flag is used to indicate that the page pointed to by a pte
  82.  * is dirty and requires cleaning before returning it to the user.
  83.  */
  84. #define PG_dcache_dirty            PG_arch_1
  85.  
  86. #define Page_dcache_dirty(page)        \
  87.     test_bit(PG_dcache_dirty, &(page)->flags)
  88. #define SetPageDcacheDirty(page)    \
  89.     set_bit(PG_dcache_dirty, &(page)->flags)
  90. #define ClearPageDcacheDirty(page)    \
  91.     clear_bit(PG_dcache_dirty, &(page)->flags)
  92.  
  93. /* Run kernel code uncached, useful for cache probing functions. */
  94. unsigned long __init run_uncached(void *func);
  95.  
  96. #endif /* _ASM_CACHEFLUSH_H */
  97.