xref: /netbsd-src/sys/arch/hpc/stand/hpcboot/arm/arm_mmu.h (revision ce099b40997c43048fb78bd578195f81d2456523)
1*ce099b40Smartin /* -*-C++-*-	$NetBSD: arm_mmu.h,v 1.4 2008/04/28 20:23:20 martin Exp $	*/
29173eae7Such 
39173eae7Such /*-
49173eae7Such  * Copyright (c) 2001 The NetBSD Foundation, Inc.
59173eae7Such  * All rights reserved.
69173eae7Such  *
79173eae7Such  * This code is derived from software contributed to The NetBSD Foundation
89173eae7Such  * by UCHIYAMA Yasushi.
99173eae7Such  *
109173eae7Such  * Redistribution and use in source and binary forms, with or without
119173eae7Such  * modification, are permitted provided that the following conditions
129173eae7Such  * are met:
139173eae7Such  * 1. Redistributions of source code must retain the above copyright
149173eae7Such  *    notice, this list of conditions and the following disclaimer.
159173eae7Such  * 2. Redistributions in binary form must reproduce the above copyright
169173eae7Such  *    notice, this list of conditions and the following disclaimer in the
179173eae7Such  *    documentation and/or other materials provided with the distribution.
189173eae7Such  *
199173eae7Such  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
209173eae7Such  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
219173eae7Such  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
229173eae7Such  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
239173eae7Such  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
249173eae7Such  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
259173eae7Such  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
269173eae7Such  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
279173eae7Such  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
289173eae7Such  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
299173eae7Such  * POSSIBILITY OF SUCH DAMAGE.
309173eae7Such  */
319173eae7Such 
329173eae7Such #ifndef _HPCBOOT_ARM_MMU_H_
339173eae7Such #define	_HPCBOOT_ARM_MMU_H_
349173eae7Such 
359173eae7Such #include <arm/arm_arch.h>
369173eae7Such #include <memory.h>
379173eae7Such 
389173eae7Such #define	ARM_MMU_TABLEBASE_MASK				0xffffc000
399173eae7Such #define	ARM_MMU_TABLEINDEX_MASK				0x00003ffc
409173eae7Such #define	ARM_MMU_VADDR_TABLE_INDEX_MASK			0xfff00000
419173eae7Such #define	ARM_MMU_TABLEINDEX_SHIFT			18
429173eae7Such #define	ARM_MMU_TABLEINDEX(x)						\
439173eae7Such 	((((x) & ARM_MMU_VADDR_TABLE_INDEX_MASK) >>			\
449173eae7Such 	 ARM_MMU_TABLEINDEX_SHIFT) & ARM_MMU_TABLEINDEX_MASK)
459173eae7Such 
469173eae7Such /*
479173eae7Such  * 1st level descriptor
489173eae7Such  */
499173eae7Such #define	ARM_MMU_LEVEL1DESC_TRANSLATE_TYPE_MASK		0x3
509173eae7Such #define	ARM_MMU_LEVEL1DESC_TRANSLATE_TYPE(x)				\
519173eae7Such 	((x) & ARM_MMU_LEVEL1DESC_TRANSLATE_TYPE_MASK)
529173eae7Such #define	ARM_MMU_LEVEL1DESC_TRANSLATE_SECTION		0x2
539173eae7Such #define	ARM_MMU_LEVEL1DESC_TRANSLATE_PAGE		0x1
549173eae7Such 
559173eae7Such /*
569173eae7Such  * Section translation
579173eae7Such  */
589173eae7Such #define	ARM_MMU_SECTION_BASE_MASK			0xfff00000
599173eae7Such #define	ARM_MMU_SECTION_BASE(x)						\
609173eae7Such 	((x) & ARM_MMU_SECTION_BASE_MASK)
619173eae7Such #define	ARM_MMU_VADDR_SECTION_INDEX_MASK		0x000fffff
629173eae7Such #define	ARM_MMU_VADDR_SECTION_INDEX(x)					\
639173eae7Such 	((x) & ARM_MMU_VADDR_SECTION_INDEX_MASK)
649173eae7Such /*
659173eae7Such  * Page translation
669173eae7Such  */
679173eae7Such #define	ARM_MMU_PTE_BASE_MASK				0xfffffc00
689173eae7Such #define	ARM_MMU_PTE_BASE(x)	((x) & ARM_MMU_PTE_BASE_MASK)
699173eae7Such #define	ARM_MMU_VADDR_PTE_INDEX_MASK			0x000003fc
709173eae7Such #define	ARM_MMU_VADDR_PTE_INDEX_SHIFT			10
719173eae7Such #define	ARM_MMU_VADDR_PTE_INDEX(x)					\
729173eae7Such 	(((x) >> ARM_MMU_VADDR_PTE_INDEX_SHIFT) &			\
739173eae7Such 	ARM_MMU_VADDR_PTE_INDEX_MASK)
749173eae7Such 
759173eae7Such class MemoryManager_ArmMMU : public MemoryManager {
769173eae7Such private:
779173eae7Such 	BOOL _kmode;
789173eae7Such 	paddr_t _table_base;
799173eae7Such 
809173eae7Such public:
819173eae7Such 	MemoryManager_ArmMMU(Console *&, size_t);
829173eae7Such 	virtual ~MemoryManager_ArmMMU();
839173eae7Such 	BOOL init(void);
849173eae7Such 	paddr_t searchPage(vaddr_t vaddr);
859173eae7Such };
869173eae7Such 
879173eae7Such #endif // _HPCBOOT_ARM_MMU_H_
88