1199767f8SToomas Soome /*- 2199767f8SToomas Soome * Copyright (c) 2002 David E. O'Brien. All rights reserved. 3199767f8SToomas Soome * Copyright (c) 1992, 1993 4199767f8SToomas Soome * The Regents of the University of California. All rights reserved. 5199767f8SToomas Soome * 6199767f8SToomas Soome * This code is derived from software contributed to Berkeley by 7199767f8SToomas Soome * the Systems Programming Group of the University of Utah Computer 8199767f8SToomas Soome * Science Department and Ralph Campbell. 9199767f8SToomas Soome * 10199767f8SToomas Soome * Redistribution and use in source and binary forms, with or without 11199767f8SToomas Soome * modification, are permitted provided that the following conditions 12199767f8SToomas Soome * are met: 13199767f8SToomas Soome * 1. Redistributions of source code must retain the above copyright 14199767f8SToomas Soome * notice, this list of conditions and the following disclaimer. 15199767f8SToomas Soome * 2. Redistributions in binary form must reproduce the above copyright 16199767f8SToomas Soome * notice, this list of conditions and the following disclaimer in the 17199767f8SToomas Soome * documentation and/or other materials provided with the distribution. 18199767f8SToomas Soome * 3. All advertising materials mentioning features or use of this software 19199767f8SToomas Soome * must display the following acknowledgement: 20199767f8SToomas Soome * This product includes software developed by the University of 21199767f8SToomas Soome * California, Berkeley and its contributors. 22199767f8SToomas Soome * 4. Neither the name of the University nor the names of its contributors 23199767f8SToomas Soome * may be used to endorse or promote products derived from this software 24199767f8SToomas Soome * without specific prior written permission. 25199767f8SToomas Soome * 26199767f8SToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27199767f8SToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28199767f8SToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29199767f8SToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30199767f8SToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31199767f8SToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32199767f8SToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33199767f8SToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34199767f8SToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35199767f8SToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36199767f8SToomas Soome * SUCH DAMAGE. 37199767f8SToomas Soome * 38199767f8SToomas Soome * @(#)param.h 8.1 (Berkeley) 6/10/93 39199767f8SToomas Soome * $FreeBSD$ 40199767f8SToomas Soome */ 41199767f8SToomas Soome 42199767f8SToomas Soome 43199767f8SToomas Soome #ifndef _AMD64_INCLUDE_PARAM_H_ 44199767f8SToomas Soome #define _AMD64_INCLUDE_PARAM_H_ 45199767f8SToomas Soome 46199767f8SToomas Soome #include <machine/_align.h> 47199767f8SToomas Soome 48199767f8SToomas Soome /* 49199767f8SToomas Soome * Machine dependent constants for AMD64. 50199767f8SToomas Soome */ 51199767f8SToomas Soome 52199767f8SToomas Soome 53199767f8SToomas Soome #define __HAVE_ACPI 54199767f8SToomas Soome #define __PCI_REROUTE_INTERRUPT 55199767f8SToomas Soome 56199767f8SToomas Soome #ifndef MACHINE 57199767f8SToomas Soome #define MACHINE "amd64" 58199767f8SToomas Soome #endif 59199767f8SToomas Soome #ifndef MACHINE_ARCH 60199767f8SToomas Soome #define MACHINE_ARCH "amd64" 61199767f8SToomas Soome #endif 62199767f8SToomas Soome #ifndef MACHINE_ARCH32 63199767f8SToomas Soome #define MACHINE_ARCH32 "i386" 64199767f8SToomas Soome #endif 65199767f8SToomas Soome 66199767f8SToomas Soome #if defined(SMP) || defined(KLD_MODULE) 67199767f8SToomas Soome #ifndef MAXCPU 68199767f8SToomas Soome #define MAXCPU 256 69199767f8SToomas Soome #endif 70199767f8SToomas Soome #else 71199767f8SToomas Soome #define MAXCPU 1 72199767f8SToomas Soome #endif 73199767f8SToomas Soome 74199767f8SToomas Soome #ifndef MAXMEMDOM 75199767f8SToomas Soome #define MAXMEMDOM 1 76199767f8SToomas Soome #endif 77199767f8SToomas Soome 78199767f8SToomas Soome #define ALIGNBYTES _ALIGNBYTES 79199767f8SToomas Soome #define ALIGN(p) _ALIGN(p) 80199767f8SToomas Soome /* 81199767f8SToomas Soome * ALIGNED_POINTER is a boolean macro that checks whether an address 82199767f8SToomas Soome * is valid to fetch data elements of type t from on this architecture. 83199767f8SToomas Soome * This does not reflect the optimal alignment, just the possibility 84*55fea89dSDan Cross * (within reasonable limits). 85199767f8SToomas Soome */ 86199767f8SToomas Soome #define ALIGNED_POINTER(p, t) 1 87199767f8SToomas Soome 88199767f8SToomas Soome /* 89199767f8SToomas Soome * CACHE_LINE_SIZE is the compile-time maximum cache line size for an 90199767f8SToomas Soome * architecture. It should be used with appropriate caution. 91199767f8SToomas Soome */ 92199767f8SToomas Soome #define CACHE_LINE_SHIFT 7 93199767f8SToomas Soome #define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT) 94199767f8SToomas Soome 95199767f8SToomas Soome /* Size of the level 1 page table units */ 96199767f8SToomas Soome #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) 97199767f8SToomas Soome #define NPTEPGSHIFT 9 /* LOG2(NPTEPG) */ 98199767f8SToomas Soome #define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */ 99199767f8SToomas Soome #define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */ 100199767f8SToomas Soome #define PAGE_MASK (PAGE_SIZE-1) 101199767f8SToomas Soome /* Size of the level 2 page directory units */ 102199767f8SToomas Soome #define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t))) 103199767f8SToomas Soome #define NPDEPGSHIFT 9 /* LOG2(NPDEPG) */ 104199767f8SToomas Soome #define PDRSHIFT 21 /* LOG2(NBPDR) */ 105199767f8SToomas Soome #define NBPDR (1<<PDRSHIFT) /* bytes/page dir */ 106199767f8SToomas Soome #define PDRMASK (NBPDR-1) 107199767f8SToomas Soome /* Size of the level 3 page directory pointer table units */ 108199767f8SToomas Soome #define NPDPEPG (PAGE_SIZE/(sizeof (pdp_entry_t))) 109199767f8SToomas Soome #define NPDPEPGSHIFT 9 /* LOG2(NPDPEPG) */ 110199767f8SToomas Soome #define PDPSHIFT 30 /* LOG2(NBPDP) */ 111199767f8SToomas Soome #define NBPDP (1<<PDPSHIFT) /* bytes/page dir ptr table */ 112199767f8SToomas Soome #define PDPMASK (NBPDP-1) 113199767f8SToomas Soome /* Size of the level 4 page-map level-4 table units */ 114199767f8SToomas Soome #define NPML4EPG (PAGE_SIZE/(sizeof (pml4_entry_t))) 115199767f8SToomas Soome #define NPML4EPGSHIFT 9 /* LOG2(NPML4EPG) */ 116199767f8SToomas Soome #define PML4SHIFT 39 /* LOG2(NBPML4) */ 117199767f8SToomas Soome #define NBPML4 (1UL<<PML4SHIFT)/* bytes/page map lev4 table */ 118199767f8SToomas Soome #define PML4MASK (NBPML4-1) 119199767f8SToomas Soome 120199767f8SToomas Soome #define MAXPAGESIZES 3 /* maximum number of supported page sizes */ 121199767f8SToomas Soome 122199767f8SToomas Soome #define IOPAGES 2 /* pages of i/o permission bitmap */ 123199767f8SToomas Soome /* 124199767f8SToomas Soome * I/O permission bitmap has a bit for each I/O port plus an additional 125199767f8SToomas Soome * byte at the end with all bits set. See section "I/O Permission Bit Map" 126199767f8SToomas Soome * in the Intel SDM for more details. 127199767f8SToomas Soome */ 128199767f8SToomas Soome #define IOPERM_BITMAP_SIZE (IOPAGES * PAGE_SIZE + 1) 129199767f8SToomas Soome 130199767f8SToomas Soome #ifndef KSTACK_PAGES 131199767f8SToomas Soome #define KSTACK_PAGES 4 /* pages of kstack (with pcb) */ 132199767f8SToomas Soome #endif 133199767f8SToomas Soome #define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ 134199767f8SToomas Soome 135199767f8SToomas Soome /* 136199767f8SToomas Soome * Mach derived conversion macros 137199767f8SToomas Soome */ 138199767f8SToomas Soome #define round_page(x) ((((unsigned long)(x)) + PAGE_MASK) & ~(PAGE_MASK)) 139199767f8SToomas Soome #define trunc_page(x) ((unsigned long)(x) & ~(PAGE_MASK)) 140199767f8SToomas Soome #define trunc_2mpage(x) ((unsigned long)(x) & ~PDRMASK) 141199767f8SToomas Soome #define round_2mpage(x) ((((unsigned long)(x)) + PDRMASK) & ~PDRMASK) 142199767f8SToomas Soome #define trunc_1gpage(x) ((unsigned long)(x) & ~PDPMASK) 143199767f8SToomas Soome 144199767f8SToomas Soome #define atop(x) ((unsigned long)(x) >> PAGE_SHIFT) 145199767f8SToomas Soome #define ptoa(x) ((unsigned long)(x) << PAGE_SHIFT) 146199767f8SToomas Soome 147199767f8SToomas Soome #define amd64_btop(x) ((unsigned long)(x) >> PAGE_SHIFT) 148199767f8SToomas Soome #define amd64_ptob(x) ((unsigned long)(x) << PAGE_SHIFT) 149199767f8SToomas Soome 150*55fea89dSDan Cross #define pgtok(x) ((unsigned long)(x) * (PAGE_SIZE / 1024)) 151199767f8SToomas Soome 152199767f8SToomas Soome #define INKERNEL(va) (((va) >= DMAP_MIN_ADDRESS && (va) < DMAP_MAX_ADDRESS) \ 153199767f8SToomas Soome || ((va) >= VM_MIN_KERNEL_ADDRESS && (va) < VM_MAX_KERNEL_ADDRESS)) 154199767f8SToomas Soome 155199767f8SToomas Soome #endif /* !_AMD64_INCLUDE_PARAM_H_ */ 156