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