mtrr.h
来自「linux 内核源代码」· C头文件 代码 · 共 165 行
H
165 行
/* 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 rgooch@atnf.csiro.au The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia.*/#ifndef _ASM_X86_MTRR_H#define _ASM_X86_MTRR_H#include <linux/ioctl.h>#include <linux/errno.h>#define MTRR_IOCTL_BASE 'M'struct mtrr_sentry{ unsigned long base; /* Base address */ unsigned int size; /* Size of region */ unsigned int type; /* Type of region */};/* 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_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_gentry{ unsigned long base; /* Base address */ unsigned int size; /* Size of region */ unsigned int regnum; /* Register number */ unsigned int type; /* Type of region */};#endif /* !__i386__ *//* These are the various ioctls */#define MTRRIOC_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry)#define MTRRIOC_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry)#define MTRRIOC_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry)#define MTRRIOC_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry)#define MTRRIOC_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry)#define MTRRIOC_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry)#define MTRRIOC_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry)#define MTRRIOC_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry)#define MTRRIOC_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry)#define MTRRIOC_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry)/* These are the region types */#define MTRR_TYPE_UNCACHABLE 0#define MTRR_TYPE_WRCOMB 1/*#define MTRR_TYPE_ 2*//*#define MTRR_TYPE_ 3*/#define MTRR_TYPE_WRTHROUGH 4#define MTRR_TYPE_WRPROT 5#define MTRR_TYPE_WRBACK 6#define MTRR_NUM_TYPES 7#ifdef __KERNEL__/* The following functions are for use by other drivers */# ifdef CONFIG_MTRRextern void mtrr_save_fixed_ranges(void *);extern void mtrr_save_state(void);extern int mtrr_add (unsigned long base, unsigned long size, unsigned int type, char increment);extern int mtrr_add_page (unsigned long base, unsigned long size, unsigned int type, char increment);extern int mtrr_del (int reg, unsigned long base, unsigned long size);extern int mtrr_del_page (int reg, unsigned long base, unsigned long size);extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);extern void mtrr_ap_init(void);extern void mtrr_bp_init(void);# else#define mtrr_save_fixed_ranges(arg) do {} while (0)#define mtrr_save_state() do {} while (0)static __inline__ int mtrr_add (unsigned long base, unsigned long size, unsigned int type, char increment){ return -ENODEV;}static __inline__ int mtrr_add_page (unsigned long base, unsigned long size, unsigned int type, char increment){ return -ENODEV;}static __inline__ int mtrr_del (int reg, unsigned long base, unsigned long size){ return -ENODEV;}static __inline__ int mtrr_del_page (int reg, unsigned long base, unsigned long size){ return -ENODEV;}static __inline__ void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) {;}#define mtrr_ap_init() do {} while (0)#define mtrr_bp_init() do {} while (0)# endif#ifdef CONFIG_COMPAT#include <linux/compat.h>struct mtrr_sentry32{ compat_ulong_t base; /* Base address */ compat_uint_t size; /* Size of region */ compat_uint_t type; /* Type of region */};struct mtrr_gentry32{ compat_ulong_t regnum; /* Register number */ compat_uint_t base; /* Base address */ compat_uint_t size; /* Size of region */ compat_uint_t type; /* Type of region */};#define MTRR_IOCTL_BASE 'M'#define MTRRIOC32_ADD_ENTRY _IOW(MTRR_IOCTL_BASE, 0, struct mtrr_sentry32)#define MTRRIOC32_SET_ENTRY _IOW(MTRR_IOCTL_BASE, 1, struct mtrr_sentry32)#define MTRRIOC32_DEL_ENTRY _IOW(MTRR_IOCTL_BASE, 2, struct mtrr_sentry32)#define MTRRIOC32_GET_ENTRY _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry32)#define MTRRIOC32_KILL_ENTRY _IOW(MTRR_IOCTL_BASE, 4, struct mtrr_sentry32)#define MTRRIOC32_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 5, struct mtrr_sentry32)#define MTRRIOC32_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 6, struct mtrr_sentry32)#define MTRRIOC32_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 7, struct mtrr_sentry32)#define MTRRIOC32_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry32)#define MTRRIOC32_KILL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE, 9, struct mtrr_sentry32)#endif /* CONFIG_COMPAT */#endif /* __KERNEL__ */#endif /* _ASM_X86_MTRR_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?