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