17f911abeSJohn Baldwin /*- 27f911abeSJohn Baldwin * Copyright (c) 2015 John H. Baldwin <jhb@FreeBSD.org> 37f911abeSJohn Baldwin * All rights reserved. 47f911abeSJohn Baldwin * 57f911abeSJohn Baldwin * Redistribution and use in source and binary forms, with or without 67f911abeSJohn Baldwin * modification, are permitted provided that the following conditions 77f911abeSJohn Baldwin * are met: 87f911abeSJohn Baldwin * 1. Redistributions of source code must retain the above copyright 97f911abeSJohn Baldwin * notice, this list of conditions and the following disclaimer. 107f911abeSJohn Baldwin * 2. Redistributions in binary form must reproduce the above copyright 117f911abeSJohn Baldwin * notice, this list of conditions and the following disclaimer in the 127f911abeSJohn Baldwin * documentation and/or other materials provided with the distribution. 137f911abeSJohn Baldwin * 147f911abeSJohn Baldwin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 157f911abeSJohn Baldwin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 167f911abeSJohn Baldwin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 177f911abeSJohn Baldwin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 187f911abeSJohn Baldwin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 197f911abeSJohn Baldwin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 207f911abeSJohn Baldwin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 217f911abeSJohn Baldwin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 227f911abeSJohn Baldwin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 237f911abeSJohn Baldwin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 247f911abeSJohn Baldwin * SUCH DAMAGE. 257f911abeSJohn Baldwin * 267f911abeSJohn Baldwin * $FreeBSD$ 277f911abeSJohn Baldwin */ 287f911abeSJohn Baldwin 297f911abeSJohn Baldwin #ifndef __KVM_I386_H__ 307f911abeSJohn Baldwin #define __KVM_I386_H__ 317f911abeSJohn Baldwin 327f911abeSJohn Baldwin #ifdef __i386__ 337f911abeSJohn Baldwin #include <vm/vm.h> 347f911abeSJohn Baldwin #include <vm/pmap.h> 357f911abeSJohn Baldwin #endif 367f911abeSJohn Baldwin 377f911abeSJohn Baldwin typedef uint32_t i386_physaddr_t; 387f911abeSJohn Baldwin typedef uint32_t i386_pte_t; 397f911abeSJohn Baldwin typedef uint32_t i386_pde_t; 407f911abeSJohn Baldwin typedef uint64_t i386_physaddr_pae_t; 417f911abeSJohn Baldwin typedef uint64_t i386_pte_pae_t; 427f911abeSJohn Baldwin typedef uint64_t i386_pde_pae_t; 437f911abeSJohn Baldwin 447f911abeSJohn Baldwin #define I386_PAGE_SHIFT 12 457f911abeSJohn Baldwin #define I386_PAGE_SIZE (1 << I386_PAGE_SHIFT) 467f911abeSJohn Baldwin #define I386_PAGE_MASK (I386_PAGE_SIZE - 1) 477f911abeSJohn Baldwin #define I386_NPTEPG (I386_PAGE_SIZE / sizeof(i386_pte_t)) 487f911abeSJohn Baldwin #define I386_PDRSHIFT 22 497f911abeSJohn Baldwin #define I386_NBPDR (1 << I386_PDRSHIFT) 507f911abeSJohn Baldwin #define I386_PAGE_PS_MASK (I386_NBPDR - 1) 517f911abeSJohn Baldwin #define I386_NPTEPG_PAE (I386_PAGE_SIZE / sizeof(i386_pte_pae_t)) 527f911abeSJohn Baldwin #define I386_PDRSHIFT_PAE 21 537f911abeSJohn Baldwin #define I386_NBPDR_PAE (1 << I386_PDRSHIFT_PAE) 547f911abeSJohn Baldwin #define I386_PAGE_PS_MASK_PAE (I386_NBPDR_PAE - 1) 557f911abeSJohn Baldwin 56*c9057838SWill Andrews /* Source: i386/include/pmap.h */ 577f911abeSJohn Baldwin #define I386_PG_V 0x001 58*c9057838SWill Andrews #define I386_PG_RW 0x002 597f911abeSJohn Baldwin #define I386_PG_PS 0x080 60*c9057838SWill Andrews #define I386_PG_NX (1ULL << 63) 617f911abeSJohn Baldwin #define I386_PG_FRAME_PAE (0x000ffffffffff000ull) 627f911abeSJohn Baldwin #define I386_PG_PS_FRAME_PAE (0x000fffffffe00000ull) 637f911abeSJohn Baldwin #define I386_PG_FRAME (0xfffff000) 647f911abeSJohn Baldwin #define I386_PG_PS_FRAME (0xffc00000) 657f911abeSJohn Baldwin 667f911abeSJohn Baldwin #ifdef __i386__ 677f911abeSJohn Baldwin _Static_assert(PAGE_SHIFT == I386_PAGE_SHIFT, "PAGE_SHIFT mismatch"); 687f911abeSJohn Baldwin _Static_assert(PAGE_SIZE == I386_PAGE_SIZE, "PAGE_SIZE mismatch"); 697f911abeSJohn Baldwin _Static_assert(PAGE_MASK == I386_PAGE_MASK, "PAGE_MASK mismatch"); 707f911abeSJohn Baldwin _Static_assert(NPTEPG == I386_NPTEPG, "NPTEPG mismatch"); 717f911abeSJohn Baldwin _Static_assert(PDRSHIFT == I386_PDRSHIFT, "PDRSHIFT mismatch"); 727f911abeSJohn Baldwin _Static_assert(NBPDR == I386_NBPDR, "NBPDR mismatch"); 737f911abeSJohn Baldwin 747f911abeSJohn Baldwin _Static_assert(PG_V == I386_PG_V, "PG_V mismatch"); 757f911abeSJohn Baldwin _Static_assert(PG_PS == I386_PG_PS, "PG_PS mismatch"); 762f9e5791SJohn Baldwin _Static_assert((u_int)PG_FRAME == I386_PG_FRAME, "PG_FRAME mismatch"); 777f911abeSJohn Baldwin _Static_assert(PG_PS_FRAME == I386_PG_PS_FRAME, "PG_PS_FRAME mismatch"); 787f911abeSJohn Baldwin #endif 797f911abeSJohn Baldwin 807f911abeSJohn Baldwin int _i386_native(kvm_t *); 817f911abeSJohn Baldwin 827f911abeSJohn Baldwin #endif /* !__KVM_I386_H__ */ 83