![]() |
|
|||
File indexing completed on 2025-05-11 08:24:10
0001 /* SPDX-License-Identifier: BSD-2-Clause */ 0002 0003 /* 0004 * Copyright (c) 2018 Amaan Cheval <amaan.cheval@gmail.com> 0005 * 0006 * Redistribution and use in source and binary forms, with or without 0007 * modification, are permitted provided that the following conditions 0008 * are met: 0009 * 1. Redistributions of source code must retain the above copyright 0010 * notice, this list of conditions and the following disclaimer. 0011 * 2. Redistributions in binary form must reproduce the above copyright 0012 * notice, this list of conditions and the following disclaimer in the 0013 * documentation and/or other materials provided with the distribution. 0014 * 0015 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 0016 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0017 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0018 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 0019 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 0020 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 0021 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 0022 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 0023 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 0024 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 0025 * SUCH DAMAGE. 0026 */ 0027 0028 #ifndef _LIBCPU_AMD64_PAGE_H 0029 #define _LIBCPU_AMD64_PAGE_H 0030 0031 #ifndef ASM 0032 0033 #define NUM_PAGE_TABLE_ENTRIES 512 0034 0035 extern uint64_t amd64_pml4[NUM_PAGE_TABLE_ENTRIES]; 0036 extern uint64_t amd64_pdpt[NUM_PAGE_TABLE_ENTRIES]; 0037 0038 bool paging_1gib_pages_supported(void); 0039 uint8_t get_maxphysaddr(void); 0040 uint64_t get_mask_for_bits(uint8_t start, uint8_t end); 0041 uint64_t create_cr3_entry( 0042 uint64_t phys_addr, uint8_t maxphysaddr, uint64_t flags 0043 ); 0044 uint64_t create_pml4_entry( 0045 uint64_t phys_addr, uint8_t maxphysaddr, uint64_t flags 0046 ); 0047 uint64_t create_pdpt_entry( 0048 uint64_t phys_addr, uint8_t maxphysaddr, uint64_t flags 0049 ); 0050 0051 void paging_init(void); 0052 0053 #define PAGE_FLAGS_PRESENT (1 << 0) 0054 #define PAGE_FLAGS_WRITABLE (1 << 1) 0055 #define PAGE_FLAGS_USER_ACCESSIBLE (1 << 2) 0056 #define PAGE_FLAGS_WRITE_THROUGH (1 << 3) 0057 #define PAGE_FLAGS_NO_CACHE (1 << 4) 0058 #define PAGE_FLAGS_ACCESSED (1 << 5) 0059 #define PAGE_FLAGS_DIRTY (1 << 6) 0060 #define PAGE_FLAGS_HUGE_PAGE (1 << 7) 0061 #define PAGE_FLAGS_GLOBAL (1 << 8) 0062 #define PAGE_FLAGS_NO_EXECUTE (1 << 63) 0063 0064 #define PAGE_FLAGS_DEFAULTS \ 0065 (PAGE_FLAGS_PRESENT | PAGE_FLAGS_WRITABLE | PAGE_FLAGS_NO_CACHE) 0066 0067 #endif /* !ASM */ 0068 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |