/* SPDX-License-Identifier: LGPL-2.0+ WITH Linux-syscall-note */ /* Generic MTRR (Memory Type Range Register) ioctls. Copyright (C) 1997-1999 Richard Gooch This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Richard Gooch may be reached by email at [email protected] The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. */ #ifndef _UAPI_ASM_X86_MTRR_H #define _UAPI_ASM_X86_MTRR_H #include <linux/types.h> #include <linux/ioctl.h> #include <linux/errno.h> #define MTRR_IOCTL_BASE … /* Warning: this structure has a different order from i386 on x86-64. The 32bit emulation code takes care of that. But you need to use this for 64bit, otherwise your X server will break. */ #ifdef __i386__ struct mtrr_sentry { unsigned long base; /* Base address */ unsigned int size; /* Size of region */ unsigned int type; /* Type of region */ }; struct mtrr_gentry { unsigned int regnum; /* Register number */ unsigned long base; /* Base address */ unsigned int size; /* Size of region */ unsigned int type; /* Type of region */ }; #else /* __i386__ */ struct mtrr_sentry { … }; struct mtrr_gentry { … }; #endif /* !__i386__ */ struct mtrr_var_range { … }; /* In the Intel processor's MTRR interface, the MTRR type is always held in an 8 bit field: */ mtrr_type; #define MTRR_NUM_FIXED_RANGES … #define MTRR_MAX_VAR_RANGES … #define MTRRphysBase_MSR(reg) … #define MTRRphysMask_MSR(reg) … /* These are the various ioctls */ #define MTRRIOC_ADD_ENTRY … #define MTRRIOC_SET_ENTRY … #define MTRRIOC_DEL_ENTRY … #define MTRRIOC_GET_ENTRY … #define MTRRIOC_KILL_ENTRY … #define MTRRIOC_ADD_PAGE_ENTRY … #define MTRRIOC_SET_PAGE_ENTRY … #define MTRRIOC_DEL_PAGE_ENTRY … #define MTRRIOC_GET_PAGE_ENTRY … #define MTRRIOC_KILL_PAGE_ENTRY … /* MTRR memory types, which are defined in SDM */ #define MTRR_TYPE_UNCACHABLE … #define MTRR_TYPE_WRCOMB … /*#define MTRR_TYPE_ 2*/ /*#define MTRR_TYPE_ 3*/ #define MTRR_TYPE_WRTHROUGH … #define MTRR_TYPE_WRPROT … #define MTRR_TYPE_WRBACK … #define MTRR_NUM_TYPES … /* * Invalid MTRR memory type. No longer used outside of MTRR code. * Note, this value is allocated from the reserved values (0x7-0xff) of * the MTRR memory types. */ #define MTRR_TYPE_INVALID … #endif /* _UAPI_ASM_X86_MTRR_H */