1 | /* |
---|
2 | * local mtrr defines. |
---|
3 | */ |
---|
4 | |
---|
5 | #ifndef TRUE |
---|
6 | #define TRUE 1 |
---|
7 | #define FALSE 0 |
---|
8 | #endif |
---|
9 | |
---|
10 | #define MTRRcap_MSR 0x0fe |
---|
11 | #define MTRRdefType_MSR 0x2ff |
---|
12 | |
---|
13 | #define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg)) |
---|
14 | #define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1) |
---|
15 | |
---|
16 | #define NUM_FIXED_RANGES 88 |
---|
17 | #define MTRRfix64K_00000_MSR 0x250 |
---|
18 | #define MTRRfix16K_80000_MSR 0x258 |
---|
19 | #define MTRRfix16K_A0000_MSR 0x259 |
---|
20 | #define MTRRfix4K_C0000_MSR 0x268 |
---|
21 | #define MTRRfix4K_C8000_MSR 0x269 |
---|
22 | #define MTRRfix4K_D0000_MSR 0x26a |
---|
23 | #define MTRRfix4K_D8000_MSR 0x26b |
---|
24 | #define MTRRfix4K_E0000_MSR 0x26c |
---|
25 | #define MTRRfix4K_E8000_MSR 0x26d |
---|
26 | #define MTRRfix4K_F0000_MSR 0x26e |
---|
27 | #define MTRRfix4K_F8000_MSR 0x26f |
---|
28 | |
---|
29 | #define MTRR_CHANGE_MASK_FIXED 0x01 |
---|
30 | #define MTRR_CHANGE_MASK_VARIABLE 0x02 |
---|
31 | #define MTRR_CHANGE_MASK_DEFTYPE 0x04 |
---|
32 | |
---|
33 | /* In the Intel processor's MTRR interface, the MTRR type is always held in |
---|
34 | an 8 bit field: */ |
---|
35 | typedef u8 mtrr_type; |
---|
36 | |
---|
37 | struct mtrr_ops { |
---|
38 | u32 vendor; |
---|
39 | u32 use_intel_if; |
---|
40 | // void (*init)(void); |
---|
41 | void (*set)(unsigned int reg, unsigned long base, |
---|
42 | unsigned long size, mtrr_type type); |
---|
43 | void (*set_all)(void); |
---|
44 | |
---|
45 | void (*get)(unsigned int reg, unsigned long *base, |
---|
46 | unsigned int *size, mtrr_type * type); |
---|
47 | int (*get_free_region) (unsigned long base, unsigned long size); |
---|
48 | |
---|
49 | int (*validate_add_page)(unsigned long base, unsigned long size, |
---|
50 | unsigned int type); |
---|
51 | int (*have_wrcomb)(void); |
---|
52 | }; |
---|
53 | |
---|
54 | extern int generic_get_free_region(unsigned long base, unsigned long size); |
---|
55 | extern int generic_validate_add_page(unsigned long base, unsigned long size, |
---|
56 | unsigned int type); |
---|
57 | |
---|
58 | extern struct mtrr_ops generic_mtrr_ops; |
---|
59 | |
---|
60 | extern int positive_have_wrcomb(void); |
---|
61 | |
---|
62 | /* library functions for processor-specific routines */ |
---|
63 | struct set_mtrr_context { |
---|
64 | unsigned long flags; |
---|
65 | unsigned long deftype_lo; |
---|
66 | unsigned long deftype_hi; |
---|
67 | unsigned long cr4val; |
---|
68 | unsigned long ccr3; |
---|
69 | }; |
---|
70 | |
---|
71 | struct mtrr_var_range { |
---|
72 | unsigned long base_lo; |
---|
73 | unsigned long base_hi; |
---|
74 | unsigned long mask_lo; |
---|
75 | unsigned long mask_hi; |
---|
76 | }; |
---|
77 | |
---|
78 | void set_mtrr_done(struct set_mtrr_context *ctxt); |
---|
79 | void set_mtrr_cache_disable(struct set_mtrr_context *ctxt); |
---|
80 | void set_mtrr_prepare_save(struct set_mtrr_context *ctxt); |
---|
81 | |
---|
82 | void get_mtrr_state(void); |
---|
83 | |
---|
84 | extern void set_mtrr_ops(struct mtrr_ops * ops); |
---|
85 | |
---|
86 | extern u32 size_or_mask, size_and_mask; |
---|
87 | extern struct mtrr_ops * mtrr_if; |
---|
88 | |
---|
89 | #define is_cpu(vnd) (mtrr_if && mtrr_if->vendor == X86_VENDOR_##vnd) |
---|
90 | #define use_intel() (mtrr_if && mtrr_if->use_intel_if == 1) |
---|
91 | |
---|
92 | extern unsigned int num_var_ranges; |
---|
93 | |
---|
94 | void mtrr_state_warn(void); |
---|
95 | char *mtrr_attrib_to_str(int x); |
---|
96 | void mtrr_wrmsr(unsigned, unsigned, unsigned); |
---|
97 | |
---|