2005-11-04 16:58:59 +11:00
# ifndef _ASM_POWERPC_TLBFLUSH_H
# define _ASM_POWERPC_TLBFLUSH_H
2007-10-30 09:46:06 +11:00
2005-11-04 16:58:59 +11:00
/*
* TLB flushing :
*
* - flush_tlb_mm ( mm ) flushes the specified mm context TLB ' s
* - flush_tlb_page ( vma , vmaddr ) flushes one page
2009-07-23 23:15:24 +00:00
* - local_flush_tlb_mm ( mm , full ) flushes the specified mm context on
2008-12-18 19:13:38 +00:00
* the local processor
* - local_flush_tlb_page ( vma , vmaddr ) flushes one page on the local processor
2005-11-04 16:58:59 +11:00
* - flush_tlb_page_nohash ( vma , vmaddr ) flushes one page if SW loaded TLB
* - flush_tlb_range ( vma , start , end ) flushes a range of pages
* - flush_tlb_kernel_range ( start , end ) flushes a range of kernel pages
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# ifdef __KERNEL__
2008-12-18 19:13:38 +00:00
# ifdef CONFIG_PPC_MMU_NOHASH
2007-04-24 13:09:12 +10:00
/*
* TLB flushing for software loaded TLB chips
*
* TODO : ( CONFIG_FSL_BOOKE ) determine if flush_tlb_range &
* flush_tlb_kernel_range are best implemented as tlbia vs
* specific tlbie ' s
*/
2009-07-23 23:15:24 +00:00
struct vm_area_struct ;
struct mm_struct ;
2007-10-30 09:46:06 +11:00
2008-12-18 19:13:29 +00:00
# define MMU_NO_CONTEXT ((unsigned int)-1)
2008-12-18 19:13:38 +00:00
extern void flush_tlb_range ( struct vm_area_struct * vma , unsigned long start ,
unsigned long end ) ;
extern void flush_tlb_kernel_range ( unsigned long start , unsigned long end ) ;
2007-04-24 13:09:12 +10:00
2008-12-18 19:13:38 +00:00
extern void local_flush_tlb_mm ( struct mm_struct * mm ) ;
extern void local_flush_tlb_page ( struct vm_area_struct * vma , unsigned long vmaddr ) ;
2007-04-24 13:09:12 +10:00
2009-07-23 23:15:24 +00:00
extern void __local_flush_tlb_page ( struct mm_struct * mm , unsigned long vmaddr ,
int tsize , int ind ) ;
2008-12-18 19:13:38 +00:00
# ifdef CONFIG_SMP
extern void flush_tlb_mm ( struct mm_struct * mm ) ;
extern void flush_tlb_page ( struct vm_area_struct * vma , unsigned long vmaddr ) ;
2009-07-23 23:15:24 +00:00
extern void __flush_tlb_page ( struct mm_struct * mm , unsigned long vmaddr ,
int tsize , int ind ) ;
2008-12-18 19:13:38 +00:00
# else
# define flush_tlb_mm(mm) local_flush_tlb_mm(mm)
# define flush_tlb_page(vma,addr) local_flush_tlb_page(vma,addr)
2009-07-23 23:15:24 +00:00
# define __flush_tlb_page(mm,addr,p,i) __local_flush_tlb_page(mm,addr,p,i)
2008-12-18 19:13:38 +00:00
# endif
# define flush_tlb_page_nohash(vma,addr) flush_tlb_page(vma,addr)
2007-04-24 13:09:12 +10:00
2008-12-18 19:13:38 +00:00
# elif defined(CONFIG_PPC_STD_MMU_32)
2007-04-24 13:09:12 +10:00
2016-04-29 23:26:05 +10:00
# define MMU_NO_CONTEXT (0)
2007-04-24 13:09:12 +10:00
/*
2008-12-18 19:13:38 +00:00
* TLB flushing for " classic " hash - MMU 32 - bit CPUs , 6 xx , 7 xx , 7 xxx
2007-04-24 13:09:12 +10:00
*/
extern void flush_tlb_mm ( struct mm_struct * mm ) ;
extern void flush_tlb_page ( struct vm_area_struct * vma , unsigned long vmaddr ) ;
extern void flush_tlb_page_nohash ( struct vm_area_struct * vma , unsigned long addr ) ;
extern void flush_tlb_range ( struct vm_area_struct * vma , unsigned long start ,
unsigned long end ) ;
extern void flush_tlb_kernel_range ( unsigned long start , unsigned long end ) ;
2008-12-18 19:13:38 +00:00
static inline void local_flush_tlb_page ( struct vm_area_struct * vma ,
unsigned long vmaddr )
2008-11-19 05:53:24 +00:00
{
2008-12-18 19:13:38 +00:00
flush_tlb_page ( vma , vmaddr ) ;
}
static inline void local_flush_tlb_mm ( struct mm_struct * mm )
{
flush_tlb_mm ( mm ) ;
2008-11-19 05:53:24 +00:00
}
2007-04-24 13:09:12 +10:00
2008-12-18 19:13:38 +00:00
# elif defined(CONFIG_PPC_STD_MMU_64)
2016-04-29 23:26:04 +10:00
# include <asm/book3s/64/tlbflush.h>
2008-12-18 19:13:38 +00:00
# else
# error Unsupported MMU type
2005-11-04 16:58:59 +11:00
# endif
# endif /*__KERNEL__ */
# endif /* _ASM_POWERPC_TLBFLUSH_H */