master
  1/*	$NetBSD: vmparam.h,v 1.56 2020/10/08 12:49:06 he Exp $	*/
  2
  3/*
  4 * Copyright (c) 2001, 2002 Wasabi Systems, Inc.
  5 * All rights reserved.
  6 *
  7 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
  8 *
  9 * Redistribution and use in source and binary forms, with or without
 10 * modification, are permitted provided that the following conditions
 11 * are met:
 12 * 1. Redistributions of source code must retain the above copyright
 13 *    notice, this list of conditions and the following disclaimer.
 14 * 2. Redistributions in binary form must reproduce the above copyright
 15 *    notice, this list of conditions and the following disclaimer in the
 16 *    documentation and/or other materials provided with the distribution.
 17 * 3. All advertising materials mentioning features or use of this software
 18 *    must display the following acknowledgement:
 19 *	This product includes software developed for the NetBSD Project by
 20 *	Wasabi Systems, Inc.
 21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
 22 *    or promote products derived from this software without specific prior
 23 *    written permission.
 24 *
 25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 28 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 35 * POSSIBILITY OF SUCH DAMAGE.
 36 */
 37
 38#ifndef _ARM_ARM32_VMPARAM_H_
 39#define	_ARM_ARM32_VMPARAM_H_
 40
 41#if defined(_KERNEL_OPT)
 42#include "opt_kasan.h"
 43#endif
 44
 45/*
 46 * Virtual Memory parameters common to all arm32 platforms.
 47 */
 48
 49#include <sys/cdefs.h>
 50#include <arm/cpuconf.h>
 51#include <arm/arm32/param.h>
 52
 53#define	__USE_TOPDOWN_VM
 54#define	USRSTACK	VM_MAXUSER_ADDRESS
 55
 56/*
 57 * ARMv4 systems are normaly configured for 256MB KVA only, so restrict
 58 * the size of the pager map to 4MB.
 59 */
 60#ifndef _ARM_ARCH_5
 61#define PAGER_MAP_DEFAULT_SIZE          (4 * 1024 * 1024)
 62#endif
 63
 64/*
 65 * Note that MAXTSIZ can't be larger than 32M, otherwise the compiler
 66 * would have to be changed to not generate "bl" instructions.
 67 */
 68#define	MAXTSIZ		(128*1024*1024)		/* max text size */
 69#ifndef	DFLDSIZ
 70#define	DFLDSIZ		(384*1024*1024)		/* initial data size limit */
 71#endif
 72#ifndef	MAXDSIZ
 73#define	MAXDSIZ		(1856*1024*1024)	/* max data size */
 74#endif
 75#ifndef	DFLSSIZ
 76#define	DFLSSIZ		(4*1024*1024)		/* initial stack size limit */
 77#endif
 78#ifndef	MAXSSIZ
 79#define	MAXSSIZ		(64*1024*1024)		/* max stack size */
 80#endif
 81
 82/*
 83 * While the ARM architecture defines Section mappings, large pages,
 84 * and small pages, the standard MMU page size is (and will always be) 4K.
 85 */
 86#define	PAGE_SHIFT	PGSHIFT
 87#define	PAGE_SIZE	(1 << PAGE_SHIFT)
 88#define	PAGE_MASK	(PAGE_SIZE - 1)
 89
 90/*
 91 * Mach derived constants
 92 */
 93#define	VM_MIN_ADDRESS		((vaddr_t) PAGE_SIZE)
 94
 95#define	VM_MAXUSER_ADDRESS	((vaddr_t) KERNEL_BASE - PAGE_SIZE)
 96#define	VM_MAX_ADDRESS		VM_MAXUSER_ADDRESS
 97
 98#define	VM_MIN_KERNEL_ADDRESS	((vaddr_t) KERNEL_BASE)
 99#define	VM_MAX_KERNEL_ADDRESS	((vaddr_t) -(PAGE_SIZE+1))
100
101#if defined(_KERNEL)
102// AddressSanitizer dedicates 1/8 of kernel memory to its shadow memory (e.g.
103// 128MB to cover 1GB for ARM) and uses a special KVA range for the shadow
104// address corresponding to a kernel memory address.
105
106/*
107 * kernel virtual space layout without direct map (common case)
108 *
109 *   0x8000_0000 -  256MB kernel text/data/bss
110 *   0x9000_0000 - 1536MB Kernel VM Space
111 *   0xf000_0000 -  256MB IO
112 *
113 * kernel virtual space layout with KASAN
114 *
115 *   0x8000_0000 -  256MB kernel text/data/bss
116 *   0x9000_0000 -  768MB Kernel VM Space
117 *   0xc000_0000 -  128MB (KASAN SHADOW MAP)
118 *   0xc800_0000 -  640MB (spare)
119 *   0xf000_0000 -  256MB IO
120 *
121 * kernel virtual space layout with direct map (1GB limited)
122 *   0x8000_0000 - 1024MB kernel text/data/bss and direct map start
123 *   0xc000_0000 -  768MB Kernel VM Space
124 *   0xf000_0000 -  256MB IO
125 *
126 */
127
128#ifdef KASAN
129#define VM_KERNEL_KASAN_BASE	0xc0000000
130#define VM_KERNEL_KASAN_SIZE	(VM_KERNEL_ADDR_SIZE >> KASAN_SHADOW_SCALE_SHIFT)
131#define VM_KERNEL_KASAN_END	(VM_KERNEL_KASAN_BASE + VM_KERNEL_KASAN_SIZE)
132#define VM_KERNEL_VM_END	VM_KERNEL_KASAN_BASE
133#else
134#define VM_KERNEL_VM_END	VM_KERNEL_IO_ADDRESS
135#endif
136
137#ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
138#ifdef KASAN
139#error KASAN and __HAVE_MM_MD_DIRECT_MAPPED_PHYS is unsupported
140#endif
141#define VM_KERNEL_VM_BASE	0xc0000000
142#else
143#define VM_KERNEL_VM_BASE	0x90000000
144#endif
145
146#define VM_KERNEL_ADDR_SIZE	(VM_KERNEL_VM_END - KERNEL_BASE)
147#define VM_KERNEL_VM_SIZE	(VM_KERNEL_VM_END - VM_KERNEL_VM_BASE)
148
149#define VM_KERNEL_IO_ADDRESS	0xf0000000
150#define VM_KERNEL_IO_SIZE	(VM_MAX_KERNEL_ADDRESS - VM_KERNEL_IO_ADDRESS)
151#endif
152
153#endif /* _ARM_ARM32_VMPARAM_H_ */