1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#ifndef _LINUX_MTRR_H
24#define _LINUX_MTRR_H
25
26#include <linux/config.h>
27#include <linux/ioctl.h>
28
29#define MTRR_IOCTL_BASE 'M'
30
31struct mtrr_sentry
32{
33 unsigned long base;
34 unsigned int size;
35 unsigned int type;
36};
37
38struct mtrr_gentry
39{
40 unsigned long base;
41 unsigned int size;
42 unsigned int regnum;
43 unsigned int type;
44};
45
46
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
59#define MTRR_TYPE_UNCACHABLE 0
60#define MTRR_TYPE_WRCOMB 1
61
62
63#define MTRR_TYPE_WRTHROUGH 4
64#define MTRR_TYPE_WRPROT 5
65#define MTRR_TYPE_WRBACK 6
66#define MTRR_NUM_TYPES 7
67
68#ifdef MTRR_NEED_STRINGS
69static char *mtrr_strings[MTRR_NUM_TYPES] =
70{
71 "uncachable",
72 "write-combining",
73 "?",
74 "?",
75 "write-through",
76 "write-protect",
77 "write-back",
78};
79#endif
80
81#ifdef __KERNEL__
82#include <linux/types.h>
83
84
85#ifdef CONFIG_MTRR
86extern int mtrr_add (__u64 base, __u32 size, unsigned int type, char increment);
87extern int mtrr_add_page (__u64 base, __u32 size, unsigned int type, char increment);
88extern int mtrr_del (int reg, __u64 base, __u32 size);
89extern int mtrr_del_page (int reg, __u64 base, __u32 size);
90#else
91static __inline__ int mtrr_add (__u64 base, __u32 size,
92 unsigned int type, char increment)
93{
94 return -ENODEV;
95}
96static __inline__ int mtrr_add_page (__u64 base, __u32 size,
97 unsigned int type, char increment)
98{
99 return -ENODEV;
100}
101static __inline__ int mtrr_del (int reg, __u64 base, __u32 size)
102{
103 return -ENODEV;
104}
105static __inline__ int mtrr_del_page (int reg, __u64 base, __u32 size)
106{
107 return -ENODEV;
108}
109#endif
110
111
112extern int mtrr_init (void);
113#if defined(CONFIG_SMP) && defined(CONFIG_MTRR)
114extern void mtrr_init_boot_cpu (void);
115extern void mtrr_init_secondary_cpu (void);
116#endif
117
118#endif
119
120#endif
121