1#ifndef __MMU_H 2#define __MMU_H 3 4#ifdef CONFIG_METAG_USER_TCM 5#include <linux/list.h> 6#endif 7 8#ifdef CONFIG_HUGETLB_PAGE 9#include <asm/page.h> 10#endif 11 12typedef struct { 13 /* Software pgd base pointer used for Meta 1.x MMU. */ 14 unsigned long pgd_base; 15#ifdef CONFIG_METAG_USER_TCM 16 struct list_head tcm; 17#endif 18#ifdef CONFIG_HUGETLB_PAGE 19#if HPAGE_SHIFT < HUGEPT_SHIFT 20 /* last partially filled huge page table address */ 21 unsigned long part_huge; 22#endif 23#endif 24} mm_context_t; 25 26/* Given a virtual address, return the pte for the top level 4meg entry 27 * that maps that address. 28 * Returns 0 (an empty pte) if that range is not mapped. 29 */ 30unsigned long mmu_read_first_level_page(unsigned long vaddr); 31 32/* Given a linear (virtual) address, return the second level 4k pte 33 * that maps that address. Returns 0 if the address is not mapped. 34 */ 35unsigned long mmu_read_second_level_page(unsigned long vaddr); 36 37/* Get the virtual base address of the MMU */ 38unsigned long mmu_get_base(void); 39 40/* Initialize the MMU. */ 41void mmu_init(unsigned long mem_end); 42 43#ifdef CONFIG_METAG_META21_MMU 44/* 45 * For cpu "cpu" calculate and return the address of the 46 * MMCU_TnLOCAL_TABLE_PHYS0 if running in local-space or 47 * MMCU_TnGLOBAL_TABLE_PHYS0 if running in global-space. 48 */ 49static inline unsigned long mmu_phys0_addr(unsigned int cpu) 50{ 51 unsigned long phys0; 52 53 phys0 = (MMCU_T0LOCAL_TABLE_PHYS0 + 54 (MMCU_TnX_TABLE_PHYSX_STRIDE * cpu)) + 55 (MMCU_TXG_TABLE_PHYSX_OFFSET * is_global_space(PAGE_OFFSET)); 56 57 return phys0; 58} 59 60/* 61 * For cpu "cpu" calculate and return the address of the 62 * MMCU_TnLOCAL_TABLE_PHYS1 if running in local-space or 63 * MMCU_TnGLOBAL_TABLE_PHYS1 if running in global-space. 64 */ 65static inline unsigned long mmu_phys1_addr(unsigned int cpu) 66{ 67 unsigned long phys1; 68 69 phys1 = (MMCU_T0LOCAL_TABLE_PHYS1 + 70 (MMCU_TnX_TABLE_PHYSX_STRIDE * cpu)) + 71 (MMCU_TXG_TABLE_PHYSX_OFFSET * is_global_space(PAGE_OFFSET)); 72 73 return phys1; 74} 75#endif /* CONFIG_METAG_META21_MMU */ 76 77#endif 78