1445c6d20SDavid E. O'Brien /*- 2df57947fSPedro F. Giffuni * SPDX-License-Identifier: BSD-4-Clause 3df57947fSPedro F. Giffuni * 4445c6d20SDavid E. O'Brien * Copyright (c) 2001 David E. O'Brien 5445c6d20SDavid E. O'Brien * Copyright (c) 1990 The Regents of the University of California. 6445c6d20SDavid E. O'Brien * All rights reserved. 7445c6d20SDavid E. O'Brien * 8445c6d20SDavid E. O'Brien * This code is derived from software contributed to Berkeley by 9445c6d20SDavid E. O'Brien * William Jolitz. 10445c6d20SDavid E. O'Brien * 11445c6d20SDavid E. O'Brien * Redistribution and use in source and binary forms, with or without 12445c6d20SDavid E. O'Brien * modification, are permitted provided that the following conditions 13445c6d20SDavid E. O'Brien * are met: 14445c6d20SDavid E. O'Brien * 1. Redistributions of source code must retain the above copyright 15445c6d20SDavid E. O'Brien * notice, this list of conditions and the following disclaimer. 16445c6d20SDavid E. O'Brien * 2. Redistributions in binary form must reproduce the above copyright 17445c6d20SDavid E. O'Brien * notice, this list of conditions and the following disclaimer in the 18445c6d20SDavid E. O'Brien * documentation and/or other materials provided with the distribution. 19445c6d20SDavid E. O'Brien * 3. All advertising materials mentioning features or use of this software 20445c6d20SDavid E. O'Brien * must display the following acknowledgement: 21445c6d20SDavid E. O'Brien * This product includes software developed by the University of 22445c6d20SDavid E. O'Brien * California, Berkeley and its contributors. 23445c6d20SDavid E. O'Brien * 4. Neither the name of the University nor the names of its contributors 24445c6d20SDavid E. O'Brien * may be used to endorse or promote products derived from this software 25445c6d20SDavid E. O'Brien * without specific prior written permission. 26445c6d20SDavid E. O'Brien * 27445c6d20SDavid E. O'Brien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28445c6d20SDavid E. O'Brien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29445c6d20SDavid E. O'Brien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30445c6d20SDavid E. O'Brien * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31445c6d20SDavid E. O'Brien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32445c6d20SDavid E. O'Brien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33445c6d20SDavid E. O'Brien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34445c6d20SDavid E. O'Brien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35445c6d20SDavid E. O'Brien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36445c6d20SDavid E. O'Brien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37445c6d20SDavid E. O'Brien * SUCH DAMAGE. 38445c6d20SDavid E. O'Brien */ 39445c6d20SDavid E. O'Brien 40a254d1f1SPoul-Henning Kamp #ifndef _POWERPC_INCLUDE_PARAM_H_ 41a254d1f1SPoul-Henning Kamp #define _POWERPC_INCLUDE_PARAM_H_ 42a254d1f1SPoul-Henning Kamp 43445c6d20SDavid E. O'Brien /* 44c3e289e1SNathan Whitehorn * Machine dependent constants for PowerPC 45445c6d20SDavid E. O'Brien */ 46445c6d20SDavid E. O'Brien 47a254d1f1SPoul-Henning Kamp #include <machine/_align.h> 48445c6d20SDavid E. O'Brien 4994b4a038SNathan Whitehorn /* Needed to display interrupts on OFW PCI */ 5094b4a038SNathan Whitehorn #define __PCI_REROUTE_INTERRUPT 5194b4a038SNathan Whitehorn 52445c6d20SDavid E. O'Brien #ifndef MACHINE 53445c6d20SDavid E. O'Brien #define MACHINE "powerpc" 54445c6d20SDavid E. O'Brien #endif 55445c6d20SDavid E. O'Brien #ifndef MACHINE_ARCH 56c3e289e1SNathan Whitehorn #ifdef __powerpc64__ 57b75abea4SBrandon Bergren #if defined(__LITTLE_ENDIAN__) 58b75abea4SBrandon Bergren #define MACHINE_ARCH "powerpc64le" 59b75abea4SBrandon Bergren #else 60c3e289e1SNathan Whitehorn #define MACHINE_ARCH "powerpc64" 61b75abea4SBrandon Bergren #endif 62c3e289e1SNathan Whitehorn #else 63dc9b124dSJustin Hibbits #ifdef __SPE__ 64dc9b124dSJustin Hibbits #define MACHINE_ARCH "powerpcspe" 65dc9b124dSJustin Hibbits #else 66445c6d20SDavid E. O'Brien #define MACHINE_ARCH "powerpc" 67445c6d20SDavid E. O'Brien #endif 68c3e289e1SNathan Whitehorn #endif 69dc9b124dSJustin Hibbits #endif 70445c6d20SDavid E. O'Brien #define MID_MACHINE MID_POWERPC 7187d45a03SKonstantin Belousov #ifdef __powerpc64__ 7287d45a03SKonstantin Belousov #ifndef MACHINE_ARCH32 7387d45a03SKonstantin Belousov #define MACHINE_ARCH32 "powerpc" 7487d45a03SKonstantin Belousov #endif 7587d45a03SKonstantin Belousov #endif 76445c6d20SDavid E. O'Brien 77c3d326fdSMark Johnston #ifdef SMP 7868b739cdSAttilio Rao #ifndef MAXCPU 793bdf3d85SNathan Whitehorn #define MAXCPU 256 8068b739cdSAttilio Rao #endif 81445c6d20SDavid E. O'Brien #else 82445c6d20SDavid E. O'Brien #define MAXCPU 1 83c3d326fdSMark Johnston #endif 84445c6d20SDavid E. O'Brien 85941646f5SAttilio Rao #ifndef MAXMEMDOM 8649d9a597SJustin Hibbits #define MAXMEMDOM 8 87941646f5SAttilio Rao #endif 88941646f5SAttilio Rao 89445c6d20SDavid E. O'Brien #define ALIGNBYTES _ALIGNBYTES 90445c6d20SDavid E. O'Brien #define ALIGN(p) _ALIGN(p) 918c393fd1SSam Leffler /* 928c393fd1SSam Leffler * ALIGNED_POINTER is a boolean macro that checks whether an address 938c393fd1SSam Leffler * is valid to fetch data elements of type t from on this architecture. 948c393fd1SSam Leffler * This does not reflect the optimal alignment, just the possibility 958c393fd1SSam Leffler * (within reasonable limits). 968c393fd1SSam Leffler */ 97c3e289e1SNathan Whitehorn #define ALIGNED_POINTER(p, t) ((((uintptr_t)(p)) & (sizeof (t) - 1)) == 0) 98445c6d20SDavid E. O'Brien 9922037b2dSRobert Watson /* 10022037b2dSRobert Watson * CACHE_LINE_SIZE is the compile-time maximum cache line size for an 10122037b2dSRobert Watson * architecture. It should be used with appropriate caution. 10222037b2dSRobert Watson */ 103a93fa8f2SRobert Watson #define CACHE_LINE_SHIFT 7 104a93fa8f2SRobert Watson #define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT) 105a93fa8f2SRobert Watson 106445c6d20SDavid E. O'Brien #define PAGE_SHIFT 12 1076793e5b2SJustin Hibbits #define PAGE_SIZE (1 << PAGE_SHIFT) /* Page size */ 108b3936ebeSJustin Hibbits #define PAGE_MASK (PAGE_SIZE - 1) 109445c6d20SDavid E. O'Brien #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) 11065bbba25SJustin Hibbits #define NPDEPG (PAGE_SIZE/(sizeof (pt_entry_t))) 111445c6d20SDavid E. O'Brien 11265bbba25SJustin Hibbits #define L1_PAGE_SIZE_SHIFT 39 11365bbba25SJustin Hibbits #define L1_PAGE_SIZE (1UL<<L1_PAGE_SIZE_SHIFT) 11465bbba25SJustin Hibbits #define L1_PAGE_MASK (L1_PAGE_SIZE-1) 11565bbba25SJustin Hibbits 11665bbba25SJustin Hibbits #define L2_PAGE_SIZE_SHIFT 30 11765bbba25SJustin Hibbits #define L2_PAGE_SIZE (1UL<<L2_PAGE_SIZE_SHIFT) 11865bbba25SJustin Hibbits #define L2_PAGE_MASK (L2_PAGE_SIZE-1) 11965bbba25SJustin Hibbits 12065bbba25SJustin Hibbits #define L3_PAGE_SIZE_SHIFT 21 12165bbba25SJustin Hibbits #define L3_PAGE_SIZE (1UL<<L3_PAGE_SIZE_SHIFT) 12265bbba25SJustin Hibbits #define L3_PAGE_MASK (L3_PAGE_SIZE-1) 12365bbba25SJustin Hibbits 12465bbba25SJustin Hibbits #define MAXPAGESIZES 3 /* maximum number of supported page sizes */ 125fe105d45SAlan Cox 1269411e24dSBrandon Bergren #define RELOCATABLE_KERNEL 1 /* kernel may relocate during startup */ 1279411e24dSBrandon Bergren 128ad7a226fSPeter Wemm #ifndef KSTACK_PAGES 12999003fc6SJustin Hibbits #ifdef __powerpc64__ 13065bbba25SJustin Hibbits #define KSTACK_PAGES 12 /* includes pcb */ 13199003fc6SJustin Hibbits #else 1321bea62adSJustin Hibbits #define KSTACK_PAGES 4 /* includes pcb */ 13399003fc6SJustin Hibbits #endif 1345fd2c51eSMark Peek #endif 135ad7a226fSPeter Wemm #define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ 136edc82223SKonstantin Belousov #define USPACE (kstack_pages * PAGE_SIZE) /* total size of pcb */ 137445c6d20SDavid E. O'Brien 138d3111144SJustin Hibbits #define COPYFAULT 0x1 139d3111144SJustin Hibbits #define FUSUFAULT 0x2 140d3111144SJustin Hibbits 141445c6d20SDavid E. O'Brien /* 142445c6d20SDavid E. O'Brien * Mach derived conversion macros 143445c6d20SDavid E. O'Brien */ 144b3936ebeSJustin Hibbits #define trunc_page(x) ((x) & ~(PAGE_MASK)) 145445c6d20SDavid E. O'Brien #define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK) 14665bbba25SJustin Hibbits #define trunc_2mpage(x) ((unsigned long)(x) & ~L3_PAGE_MASK) 14765bbba25SJustin Hibbits #define round_2mpage(x) ((((unsigned long)(x)) + L3_PAGE_MASK) & ~L3_PAGE_MASK) 14865bbba25SJustin Hibbits #define trunc_1gpage(x) ((unsigned long)(x) & ~L2_PAGE_MASK) 149445c6d20SDavid E. O'Brien 150b3936ebeSJustin Hibbits #define atop(x) ((x) >> PAGE_SHIFT) 151b3936ebeSJustin Hibbits #define ptoa(x) ((x) << PAGE_SHIFT) 152445c6d20SDavid E. O'Brien 153b3936ebeSJustin Hibbits #define powerpc_btop(x) ((x) >> PAGE_SHIFT) 154b3936ebeSJustin Hibbits #define powerpc_ptob(x) ((x) << PAGE_SHIFT) 155445c6d20SDavid E. O'Brien 156c3e289e1SNathan Whitehorn #define pgtok(x) ((x) * (PAGE_SIZE / 1024UL)) 157445c6d20SDavid E. O'Brien 158b3936ebeSJustin Hibbits #define btoc(x) ((vm_offset_t)(((x)+PAGE_MASK)>>PAGE_SHIFT)) 159b3936ebeSJustin Hibbits 160a254d1f1SPoul-Henning Kamp #endif /* !_POWERPC_INCLUDE_PARAM_H_ */ 161