Select Git revision
mm_struct.h
-
Georg Wassen authoredGeorg Wassen authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
mm_struct.h 10.72 KiB
/*
* =====================================================================================
*
* Filename: mm64_struct.h
*
* Description:
*
* Version: 1.0
* Created: 10.11.2011 10:31:04
* Revision: none
* Compiler: gcc
*
* Author: Georg Wassen (gw) (wassen@lfbs.rwth-aachen.de),
* Company: Lehrstuhl für Betriebssysteme (Chair for Operating Systems)
* RWTH Aachen University
*
* Copyright (c) 2011, Georg Wassen, RWTH Aachen University
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* =====================================================================================
*/
#ifndef MM_STRUCT_H
#define MM_STRUCT_H
#if __x86_64__
typedef union {
uint64_t u64;
/* structure for a reference to pd2/pdpe (bit 7, ps: must be 0), Intel 3A, Table 4-14 */
struct {
uint64_t p : 1; /* bit 0 - Present - must be 1 to reference a pd2/pdpe */
uint64_t rw : 1; /* bit 1 - Read/Write - 0: read-only (depends on CPL and CR0l.WP) */
uint64_t us : 1; /* bit 2 - User/Supervisor - 0: no access for CPL=3 for 512 GB region */
uint64_t pwt : 1; /* bit 3 - Page lvl Write-through */
uint64_t pcd : 1; /* bit 4 - Page lvl Cache Disable */
uint64_t a : 1; /* bit 5 - Accessed - indicates if this entry has been used */
uint64_t ign : 1; /* bit 6 - ignored */
uint64_t ps : 1; /* bit 7 - Page Size - must be 0 (i.e. reference to pd2/pdpe) */
uint64_t ign2 : 1; /* bit 8 - ignored */
uint64_t avl1 : 3; /* 9,10,11 - ignored - AMD: available */
uint64_t frame : 40; /* bit 12..51 - Phys adr - reference to 4kB aligned pd2/pdpe */
uint64_t avl2 : 11; /* bit 52..62 - ign. - ignored/available */
uint64_t nx : 1; /* bit 63 - eXecute Disable - if IA32_EFER.NXE=1 : 1: no execute from 512 GB region */
} dir;
} pd1_entry_t; /* pd1 (page directory 1st level): pml4 */
typedef union {