1 /* Generic MTRR (Memory Type Range Register) ioctls. 2 3 Copyright (C) 1997-1999 Richard Gooch 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 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 of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 19 Richard Gooch may be reached by email at rgooch (at) atnf.csiro.au 20 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_H 24 #define _ASM_X86_MTRR_H 25 26 #include <linux/ioctl.h> 27 #include <linux/errno.h> 28 29 #define MTRR_IOCTL_BASE 'M' 30 31 struct mtrr_sentry 32 { 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 i386 39 on x86-64. The 32bit emulation code takes care of that. 40 But you need to use this for 64bit, otherwise your X server 41 will break. */ 42 43 #ifdef __i386__ 44 struct mtrr_gentry 45 { 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_gentry 55 { 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 0 77 #define MTRR_TYPE_WRCOMB 1 78 /*#define MTRR_TYPE_ 2*/ 79 /*#define MTRR_TYPE_ 3*/ 80 #define MTRR_TYPE_WRTHROUGH 4 81 #define MTRR_TYPE_WRPROT 5 82 #define MTRR_TYPE_WRBACK 6 83 #define MTRR_NUM_TYPES 7 84 85 86 #endif /* _ASM_X86_MTRR_H */ 87