1*7f911abeSJohn Baldwin /*- 2*7f911abeSJohn Baldwin * Copyright (c) 2015 John H. Baldwin <jhb@FreeBSD.org> 3*7f911abeSJohn Baldwin * All rights reserved. 4*7f911abeSJohn Baldwin * 5*7f911abeSJohn Baldwin * Redistribution and use in source and binary forms, with or without 6*7f911abeSJohn Baldwin * modification, are permitted provided that the following conditions 7*7f911abeSJohn Baldwin * are met: 8*7f911abeSJohn Baldwin * 1. Redistributions of source code must retain the above copyright 9*7f911abeSJohn Baldwin * notice, this list of conditions and the following disclaimer. 10*7f911abeSJohn Baldwin * 2. Redistributions in binary form must reproduce the above copyright 11*7f911abeSJohn Baldwin * notice, this list of conditions and the following disclaimer in the 12*7f911abeSJohn Baldwin * documentation and/or other materials provided with the distribution. 13*7f911abeSJohn Baldwin * 14*7f911abeSJohn Baldwin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*7f911abeSJohn Baldwin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*7f911abeSJohn Baldwin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*7f911abeSJohn Baldwin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*7f911abeSJohn Baldwin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*7f911abeSJohn Baldwin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*7f911abeSJohn Baldwin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*7f911abeSJohn Baldwin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*7f911abeSJohn Baldwin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*7f911abeSJohn Baldwin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*7f911abeSJohn Baldwin * SUCH DAMAGE. 25*7f911abeSJohn Baldwin * 26*7f911abeSJohn Baldwin * $FreeBSD$ 27*7f911abeSJohn Baldwin */ 28*7f911abeSJohn Baldwin 29*7f911abeSJohn Baldwin #ifndef __KVM_I386_H__ 30*7f911abeSJohn Baldwin #define __KVM_I386_H__ 31*7f911abeSJohn Baldwin 32*7f911abeSJohn Baldwin #ifdef __i386__ 33*7f911abeSJohn Baldwin #include <vm/vm.h> 34*7f911abeSJohn Baldwin #include <vm/pmap.h> 35*7f911abeSJohn Baldwin #endif 36*7f911abeSJohn Baldwin 37*7f911abeSJohn Baldwin typedef uint32_t i386_physaddr_t; 38*7f911abeSJohn Baldwin typedef uint32_t i386_pte_t; 39*7f911abeSJohn Baldwin typedef uint32_t i386_pde_t; 40*7f911abeSJohn Baldwin typedef uint64_t i386_physaddr_pae_t; 41*7f911abeSJohn Baldwin typedef uint64_t i386_pte_pae_t; 42*7f911abeSJohn Baldwin typedef uint64_t i386_pde_pae_t; 43*7f911abeSJohn Baldwin 44*7f911abeSJohn Baldwin #define I386_PAGE_SHIFT 12 45*7f911abeSJohn Baldwin #define I386_PAGE_SIZE (1 << I386_PAGE_SHIFT) 46*7f911abeSJohn Baldwin #define I386_PAGE_MASK (I386_PAGE_SIZE - 1) 47*7f911abeSJohn Baldwin #define I386_NPTEPG (I386_PAGE_SIZE / sizeof(i386_pte_t)) 48*7f911abeSJohn Baldwin #define I386_PDRSHIFT 22 49*7f911abeSJohn Baldwin #define I386_NBPDR (1 << I386_PDRSHIFT) 50*7f911abeSJohn Baldwin #define I386_PAGE_PS_MASK (I386_NBPDR - 1) 51*7f911abeSJohn Baldwin #define I386_NPTEPG_PAE (I386_PAGE_SIZE / sizeof(i386_pte_pae_t)) 52*7f911abeSJohn Baldwin #define I386_PDRSHIFT_PAE 21 53*7f911abeSJohn Baldwin #define I386_NBPDR_PAE (1 << I386_PDRSHIFT_PAE) 54*7f911abeSJohn Baldwin #define I386_PAGE_PS_MASK_PAE (I386_NBPDR_PAE - 1) 55*7f911abeSJohn Baldwin 56*7f911abeSJohn Baldwin #define I386_PG_V 0x001 57*7f911abeSJohn Baldwin #define I386_PG_PS 0x080 58*7f911abeSJohn Baldwin #define I386_PG_FRAME_PAE (0x000ffffffffff000ull) 59*7f911abeSJohn Baldwin #define I386_PG_PS_FRAME_PAE (0x000fffffffe00000ull) 60*7f911abeSJohn Baldwin #define I386_PG_FRAME (0xfffff000) 61*7f911abeSJohn Baldwin #define I386_PG_PS_FRAME (0xffc00000) 62*7f911abeSJohn Baldwin 63*7f911abeSJohn Baldwin #ifdef __i386__ 64*7f911abeSJohn Baldwin _Static_assert(PAGE_SHIFT == I386_PAGE_SHIFT, "PAGE_SHIFT mismatch"); 65*7f911abeSJohn Baldwin _Static_assert(PAGE_SIZE == I386_PAGE_SIZE, "PAGE_SIZE mismatch"); 66*7f911abeSJohn Baldwin _Static_assert(PAGE_MASK == I386_PAGE_MASK, "PAGE_MASK mismatch"); 67*7f911abeSJohn Baldwin _Static_assert(NPTEPG == I386_NPTEPG, "NPTEPG mismatch"); 68*7f911abeSJohn Baldwin _Static_assert(PDRSHIFT == I386_PDRSHIFT, "PDRSHIFT mismatch"); 69*7f911abeSJohn Baldwin _Static_assert(NBPDR == I386_NBPDR, "NBPDR mismatch"); 70*7f911abeSJohn Baldwin 71*7f911abeSJohn Baldwin _Static_assert(PG_V == I386_PG_V, "PG_V mismatch"); 72*7f911abeSJohn Baldwin _Static_assert(PG_PS == I386_PG_PS, "PG_PS mismatch"); 73*7f911abeSJohn Baldwin _Static_assert(PG_FRAME == I386_PG_FRAME, "PG_FRAME mismatch"); 74*7f911abeSJohn Baldwin _Static_assert(PG_PS_FRAME == I386_PG_PS_FRAME, "PG_PS_FRAME mismatch"); 75*7f911abeSJohn Baldwin #endif 76*7f911abeSJohn Baldwin 77*7f911abeSJohn Baldwin int _i386_native(kvm_t *); 78*7f911abeSJohn Baldwin 79*7f911abeSJohn Baldwin #endif /* !__KVM_I386_H__ */ 80