···0000000000000000000000000000000000000000000000000000000000000000000000000000000000001#ifdef __KERNEL__2-# ifdef CONFIG_X86_323-# include "mtrr_32.h"4-# else5-# include "mtrr_64.h"6-# endif7-#else8-# ifdef __i386__9-# include "mtrr_32.h"10-# else11-# include "mtrr_64.h"12-# endif13-#endif0000000000000000000000000000000000000000000000000000000000000000000
···1+/* Generic MTRR (Memory Type Range Register) ioctls.2+3+ Copyright (C) 1997-1999 Richard Gooch4+5+ This library is free software; you can redistribute it and/or6+ modify it under the terms of the GNU Library General Public7+ License as published by the Free Software Foundation; either8+ version 2 of the License, or (at your option) any later version.9+10+ This library is distributed in the hope that it will be useful,11+ but WITHOUT ANY WARRANTY; without even the implied warranty of12+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU13+ Library General Public License for more details.14+15+ You should have received a copy of the GNU Library General Public16+ License along with this library; if not, write to the Free17+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.18+19+ Richard Gooch may be reached by email at rgooch@atnf.csiro.au20+ The postal address is:21+ Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.22+*/23+#ifndef _ASM_X86_MTRR_H24+#define _ASM_X86_MTRR_H25+26+#include <linux/ioctl.h>27+#include <linux/errno.h>28+29+#define MTRR_IOCTL_BASE 'M'30+31+struct mtrr_sentry32+{33+ unsigned long base; /* Base address */34+ unsigned int size; /* Size of region */35+ unsigned int type; /* Type of region */36+};37+38+/* Warning: this structure has a different order from i38639+ on x86-64. The 32bit emulation code takes care of that.40+ But you need to use this for 64bit, otherwise your X server41+ will break. */42+43+#ifdef __i386__44+struct mtrr_gentry45+{46+ unsigned int regnum; /* Register number */47+ unsigned long base; /* Base address */48+ unsigned int size; /* Size of region */49+ unsigned int type; /* Type of region */50+};51+52+#else /* __i386__ */53+54+struct mtrr_gentry55+{56+ unsigned long base; /* Base address */57+ unsigned int size; /* Size of region */58+ unsigned int regnum; /* Register number */59+ unsigned int type; /* Type of region */60+};61+#endif /* !__i386__ */62+63+/* These are the various ioctls */64+#define MTRRIOC_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry)65+#define MTRRIOC_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry)66+#define MTRRIOC_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry)67+#define MTRRIOC_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)68+#define MTRRIOC_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry)69+#define MTRRIOC_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry)70+#define MTRRIOC_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry)71+#define MTRRIOC_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry)72+#define MTRRIOC_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)73+#define MTRRIOC_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry)74+75+/* These are the region types */76+#define MTRR_TYPE_UNCACHABLE 077+#define MTRR_TYPE_WRCOMB 178+/*#define MTRR_TYPE_ 2*/79+/*#define MTRR_TYPE_ 3*/80+#define MTRR_TYPE_WRTHROUGH 481+#define MTRR_TYPE_WRPROT 582+#define MTRR_TYPE_WRBACK 683+#define MTRR_NUM_TYPES 784+85#ifdef __KERNEL__86+87+/* The following functions are for use by other drivers */88+# ifdef CONFIG_MTRR89+extern void mtrr_save_fixed_ranges(void *);90+extern void mtrr_save_state(void);91+extern int mtrr_add (unsigned long base, unsigned long size,92+ unsigned int type, char increment);93+extern int mtrr_add_page (unsigned long base, unsigned long size,94+ unsigned int type, char increment);95+extern int mtrr_del (int reg, unsigned long base, unsigned long size);96+extern int mtrr_del_page (int reg, unsigned long base, unsigned long size);97+extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);98+extern void mtrr_ap_init(void);99+extern void mtrr_bp_init(void);100+# else101+#define mtrr_save_fixed_ranges(arg) do {} while (0)102+#define mtrr_save_state() do {} while (0)103+static __inline__ int mtrr_add (unsigned long base, unsigned long size,104+ unsigned int type, char increment)105+{106+ return -ENODEV;107+}108+static __inline__ int mtrr_add_page (unsigned long base, unsigned long size,109+ unsigned int type, char increment)110+{111+ return -ENODEV;112+}113+static __inline__ int mtrr_del (int reg, unsigned long base,114+ unsigned long size)115+{116+ return -ENODEV;117+}118+static __inline__ int mtrr_del_page (int reg, unsigned long base,119+ unsigned long size)120+{121+ return -ENODEV;122+}123+124+static __inline__ void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) {;}125+126+#define mtrr_ap_init() do {} while (0)127+#define mtrr_bp_init() do {} while (0)128+# endif129+130+#ifdef CONFIG_COMPAT131+#include <linux/compat.h>132+133+struct mtrr_sentry32134+{135+ compat_ulong_t base; /* Base address */136+ compat_uint_t size; /* Size of region */137+ compat_uint_t type; /* Type of region */138+};139+140+struct mtrr_gentry32141+{142+ compat_ulong_t regnum; /* Register number */143+ compat_uint_t base; /* Base address */144+ compat_uint_t size; /* Size of region */145+ compat_uint_t type; /* Type of region */146+};147+148+#define MTRR_IOCTL_BASE 'M'149+150+#define MTRRIOC32_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry32)151+#define MTRRIOC32_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry32)152+#define MTRRIOC32_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry32)153+#define MTRRIOC32_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry32)154+#define MTRRIOC32_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry32)155+#define MTRRIOC32_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry32)156+#define MTRRIOC32_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry32)157+#define MTRRIOC32_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry32)158+#define MTRRIOC32_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry32)159+#define MTRRIOC32_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry32)160+#endif /* CONFIG_COMPAT */161+162+#endif /* __KERNEL__ */163+164+#endif /* _ASM_X86_MTRR_H */
-115
include/asm-x86/mtrr_32.h
···1-/* Generic MTRR (Memory Type Range Register) ioctls.2-3- Copyright (C) 1997-1999 Richard Gooch4-5- This library is free software; you can redistribute it and/or6- modify it under the terms of the GNU Library General Public7- License as published by the Free Software Foundation; either8- version 2 of the License, or (at your option) any later version.9-10- This library is distributed in the hope that it will be useful,11- but WITHOUT ANY WARRANTY; without even the implied warranty of12- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU13- Library General Public License for more details.14-15- You should have received a copy of the GNU Library General Public16- License along with this library; if not, write to the Free17- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.18-19- Richard Gooch may be reached by email at rgooch@atnf.csiro.au20- The postal address is:21- Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.22-*/23-#ifndef _LINUX_MTRR_H24-#define _LINUX_MTRR_H25-26-#include <linux/ioctl.h>27-#include <linux/errno.h>28-29-#define MTRR_IOCTL_BASE 'M'30-31-struct mtrr_sentry32-{33- unsigned long base; /* Base address */34- unsigned int size; /* Size of region */35- unsigned int type; /* Type of region */36-};37-38-struct mtrr_gentry39-{40- unsigned int regnum; /* Register number */41- unsigned long base; /* Base address */42- unsigned int size; /* Size of region */43- unsigned int type; /* Type of region */44-};45-46-/* These are the various ioctls */47-#define MTRRIOC_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry)48-#define MTRRIOC_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry)49-#define MTRRIOC_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry)50-#define MTRRIOC_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)51-#define MTRRIOC_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry)52-#define MTRRIOC_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry)53-#define MTRRIOC_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry)54-#define MTRRIOC_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry)55-#define MTRRIOC_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)56-#define MTRRIOC_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry)57-58-/* These are the region types */59-#define MTRR_TYPE_UNCACHABLE 060-#define MTRR_TYPE_WRCOMB 161-/*#define MTRR_TYPE_ 2*/62-/*#define MTRR_TYPE_ 3*/63-#define MTRR_TYPE_WRTHROUGH 464-#define MTRR_TYPE_WRPROT 565-#define MTRR_TYPE_WRBACK 666-#define MTRR_NUM_TYPES 767-68-#ifdef __KERNEL__69-70-/* The following functions are for use by other drivers */71-# ifdef CONFIG_MTRR72-extern void mtrr_save_fixed_ranges(void *);73-extern void mtrr_save_state(void);74-extern int mtrr_add (unsigned long base, unsigned long size,75- unsigned int type, char increment);76-extern int mtrr_add_page (unsigned long base, unsigned long size,77- unsigned int type, char increment);78-extern int mtrr_del (int reg, unsigned long base, unsigned long size);79-extern int mtrr_del_page (int reg, unsigned long base, unsigned long size);80-extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);81-extern void mtrr_ap_init(void);82-extern void mtrr_bp_init(void);83-# else84-#define mtrr_save_fixed_ranges(arg) do {} while (0)85-#define mtrr_save_state() do {} while (0)86-static __inline__ int mtrr_add (unsigned long base, unsigned long size,87- unsigned int type, char increment)88-{89- return -ENODEV;90-}91-static __inline__ int mtrr_add_page (unsigned long base, unsigned long size,92- unsigned int type, char increment)93-{94- return -ENODEV;95-}96-static __inline__ int mtrr_del (int reg, unsigned long base,97- unsigned long size)98-{99- return -ENODEV;100-}101-static __inline__ int mtrr_del_page (int reg, unsigned long base,102- unsigned long size)103-{104- return -ENODEV;105-}106-107-static __inline__ void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) {;}108-109-#define mtrr_ap_init() do {} while (0)110-#define mtrr_bp_init() do {} while (0)111-# endif112-113-#endif114-115-#endif /* _LINUX_MTRR_H */
···1-/* Generic MTRR (Memory Type Range Register) ioctls.2-3- Copyright (C) 1997-1999 Richard Gooch4-5- This library is free software; you can redistribute it and/or6- modify it under the terms of the GNU Library General Public7- License as published by the Free Software Foundation; either8- version 2 of the License, or (at your option) any later version.9-10- This library is distributed in the hope that it will be useful,11- but WITHOUT ANY WARRANTY; without even the implied warranty of12- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU13- Library General Public License for more details.14-15- You should have received a copy of the GNU Library General Public16- License along with this library; if not, write to the Free17- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.18-19- Richard Gooch may be reached by email at rgooch@atnf.csiro.au20- The postal address is:21- Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.22-*/23-#ifndef _LINUX_MTRR_H24-#define _LINUX_MTRR_H25-26-#include <linux/ioctl.h>27-28-#define MTRR_IOCTL_BASE 'M'29-30-struct mtrr_sentry31-{32- unsigned long base; /* Base address */33- unsigned int size; /* Size of region */34- unsigned int type; /* Type of region */35-};36-37-/* Warning: this structure has a different order from i38638- on x86-64. The 32bit emulation code takes care of that.39- But you need to use this for 64bit, otherwise your X server40- will break. */41-struct mtrr_gentry42-{43- unsigned long base; /* Base address */44- unsigned int size; /* Size of region */45- unsigned int regnum; /* Register number */46- unsigned int type; /* Type of region */47-};48-49-/* These are the various ioctls */50-#define MTRRIOC_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry)51-#define MTRRIOC_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry)52-#define MTRRIOC_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry)53-#define MTRRIOC_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)54-#define MTRRIOC_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry)55-#define MTRRIOC_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry)56-#define MTRRIOC_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry)57-#define MTRRIOC_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry)58-#define MTRRIOC_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)59-#define MTRRIOC_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry)60-61-/* These are the region types */62-#define MTRR_TYPE_UNCACHABLE 063-#define MTRR_TYPE_WRCOMB 164-/*#define MTRR_TYPE_ 2*/65-/*#define MTRR_TYPE_ 3*/66-#define MTRR_TYPE_WRTHROUGH 467-#define MTRR_TYPE_WRPROT 568-#define MTRR_TYPE_WRBACK 669-#define MTRR_NUM_TYPES 770-71-#ifdef __KERNEL__72-73-/* The following functions are for use by other drivers */74-# ifdef CONFIG_MTRR75-extern int mtrr_add (unsigned long base, unsigned long size,76- unsigned int type, char increment);77-extern int mtrr_add_page (unsigned long base, unsigned long size,78- unsigned int type, char increment);79-extern int mtrr_del (int reg, unsigned long base, unsigned long size);80-extern int mtrr_del_page (int reg, unsigned long base, unsigned long size);81-# else82-static __inline__ int mtrr_add (unsigned long base, unsigned long size,83- unsigned int type, char increment)84-{85- return -ENODEV;86-}87-static __inline__ int mtrr_add_page (unsigned long base, unsigned long size,88- unsigned int type, char increment)89-{90- return -ENODEV;91-}92-static __inline__ int mtrr_del (int reg, unsigned long base,93- unsigned long size)94-{95- return -ENODEV;96-}97-static __inline__ int mtrr_del_page (int reg, unsigned long base,98- unsigned long size)99-{100- return -ENODEV;101-}102-103-#endif /* CONFIG_MTRR */104-105-#ifdef CONFIG_COMPAT106-#include <linux/compat.h>107-108-struct mtrr_sentry32109-{110- compat_ulong_t base; /* Base address */111- compat_uint_t size; /* Size of region */112- compat_uint_t type; /* Type of region */113-};114-115-struct mtrr_gentry32116-{117- compat_ulong_t regnum; /* Register number */118- compat_uint_t base; /* Base address */119- compat_uint_t size; /* Size of region */120- compat_uint_t type; /* Type of region */121-};122-123-#define MTRR_IOCTL_BASE 'M'124-125-#define MTRRIOC32_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry32)126-#define MTRRIOC32_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry32)127-#define MTRRIOC32_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry32)128-#define MTRRIOC32_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry32)129-#define MTRRIOC32_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry32)130-#define MTRRIOC32_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry32)131-#define MTRRIOC32_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry32)132-#define MTRRIOC32_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry32)133-#define MTRRIOC32_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry32)134-#define MTRRIOC32_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry32)135-136-#endif /* CONFIG_COMPAT */137-138-#ifdef CONFIG_MTRR139-extern void mtrr_ap_init(void);140-extern void mtrr_bp_init(void);141-extern void mtrr_save_fixed_ranges(void *);142-extern void mtrr_save_state(void);143-#else144-#define mtrr_ap_init() do {} while (0)145-#define mtrr_bp_init() do {} while (0)146-#define mtrr_save_fixed_ranges(arg) do {} while (0)147-#define mtrr_save_state() do {} while (0)148-#endif149-150-#endif /* __KERNEL__ */151-152-#endif /* _LINUX_MTRR_H */