linux/arch/score/include/asm/tlbflush.h
<<
>>
Prefs
   1#ifndef _ASM_SCORE_TLBFLUSH_H
   2#define _ASM_SCORE_TLBFLUSH_H
   3
   4#include <linux/mm.h>
   5
   6/*
   7 * TLB flushing:
   8 *
   9 * - flush_tlb_all() flushes all processes TLB entries
  10 * - flush_tlb_mm(mm) flushes the specified mm context TLB entries
  11 * - flush_tlb_page(vma, vmaddr) flushes one page
  12 * - flush_tlb_range(vma, start, end) flushes a range of pages
  13 * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
  14 */
  15extern void local_flush_tlb_all(void);
  16extern void local_flush_tlb_mm(struct mm_struct *mm);
  17extern void local_flush_tlb_range(struct vm_area_struct *vma,
  18        unsigned long start, unsigned long end);
  19extern void local_flush_tlb_kernel_range(unsigned long start,
  20        unsigned long end);
  21extern void local_flush_tlb_page(struct vm_area_struct *vma,
  22        unsigned long page);
  23extern void local_flush_tlb_one(unsigned long vaddr);
  24
  25#define flush_tlb_all()                 local_flush_tlb_all()
  26#define flush_tlb_mm(mm)                local_flush_tlb_mm(mm)
  27#define flush_tlb_range(vma, vmaddr, end) \
  28        local_flush_tlb_range(vma, vmaddr, end)
  29#define flush_tlb_kernel_range(vmaddr, end) \
  30        local_flush_tlb_kernel_range(vmaddr, end)
  31#define flush_tlb_page(vma, page)       local_flush_tlb_page(vma, page)
  32#define flush_tlb_one(vaddr)            local_flush_tlb_one(vaddr)
  33
  34#ifndef __ASSEMBLY__
  35
  36static inline unsigned long pevn_get(void)
  37{
  38        unsigned long val;
  39
  40        __asm__ __volatile__(
  41                "mfcr %0, cr11\n"
  42                "nop\nnop\n"
  43                : "=r" (val));
  44
  45        return val;
  46}
  47
  48static inline void pevn_set(unsigned long val)
  49{
  50        __asm__ __volatile__(
  51                "mtcr %0, cr11\n"
  52                "nop\nnop\nnop\nnop\nnop\n"
  53        : : "r" (val));
  54}
  55
  56static inline void pectx_set(unsigned long val)
  57{
  58        __asm__ __volatile__(
  59                "mtcr %0, cr12\n"
  60                "nop\nnop\nnop\nnop\nnop\n"
  61        : : "r" (val));
  62}
  63
  64static inline unsigned long pectx_get(void)
  65{
  66        unsigned long val;
  67        __asm__ __volatile__(
  68                "mfcr %0, cr12\n"
  69                "nop\nnop\n"
  70        : "=r" (val));
  71        return val;
  72}
  73static inline unsigned long tlblock_get(void)
  74{
  75        unsigned long val;
  76
  77        __asm__ __volatile__(
  78                "mfcr %0, cr7\n"
  79                "nop\nnop\n"
  80        : "=r" (val));
  81        return val;
  82}
  83static inline void tlblock_set(unsigned long val)
  84{
  85        __asm__ __volatile__(
  86                "mtcr %0, cr7\n"
  87                "nop\nnop\nnop\nnop\nnop\n"
  88        : : "r" (val));
  89}
  90
  91static inline void tlbpt_set(unsigned long val)
  92{
  93        __asm__ __volatile__(
  94                "mtcr %0, cr8\n"
  95                "nop\nnop\nnop\nnop\nnop\n"
  96                : : "r" (val));
  97}
  98
  99static inline long tlbpt_get(void)
 100{
 101        long val;
 102
 103        __asm__ __volatile__(
 104                "mfcr %0, cr8\n"
 105                "nop\nnop\n"
 106                : "=r" (val));
 107
 108        return val;
 109}
 110
 111static inline void peaddr_set(unsigned long val)
 112{
 113        __asm__ __volatile__(
 114                "mtcr %0, cr9\n"
 115                "nop\nnop\nnop\nnop\nnop\n"
 116                : : "r" (val));
 117}
 118
 119/* TLB operations. */
 120static inline void tlb_probe(void)
 121{
 122        __asm__ __volatile__("stlb;nop;nop;nop;nop;nop");
 123}
 124
 125static inline void tlb_read(void)
 126{
 127        __asm__ __volatile__("mftlb;nop;nop;nop;nop;nop");
 128}
 129
 130static inline void tlb_write_indexed(void)
 131{
 132        __asm__ __volatile__("mtptlb;nop;nop;nop;nop;nop");
 133}
 134
 135static inline void tlb_write_random(void)
 136{
 137        __asm__ __volatile__("mtrtlb;nop;nop;nop;nop;nop");
 138}
 139
 140#endif /* Not __ASSEMBLY__ */
 141
 142#endif /* _ASM_SCORE_TLBFLUSH_H */
 143