linux/arch/i386/kernel/cpu/mtrr/mtrr.h
<<
>>
Prefs
   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: */
  35typedef u8 mtrr_type;
  36
  37struct 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
  54extern int generic_get_free_region(unsigned long base, unsigned long size);
  55extern int generic_validate_add_page(unsigned long base, unsigned long size,
  56                                     unsigned int type);
  57
  58extern struct mtrr_ops generic_mtrr_ops;
  59
  60extern int generic_have_wrcomb(void);
  61extern int positive_have_wrcomb(void);
  62
  63/* library functions for processor-specific routines */
  64struct set_mtrr_context {
  65        unsigned long flags;
  66        unsigned long deftype_lo;
  67        unsigned long deftype_hi;
  68        unsigned long cr4val;
  69        unsigned long ccr3;
  70};
  71
  72struct mtrr_var_range {
  73        unsigned long base_lo;
  74        unsigned long base_hi;
  75        unsigned long mask_lo;
  76        unsigned long mask_hi;
  77};
  78
  79void set_mtrr_done(struct set_mtrr_context *ctxt);
  80void set_mtrr_cache_disable(struct set_mtrr_context *ctxt);
  81void set_mtrr_prepare_save(struct set_mtrr_context *ctxt);
  82
  83void get_mtrr_state(void);
  84
  85extern void set_mtrr_ops(struct mtrr_ops * ops);
  86
  87extern u32 size_or_mask, size_and_mask;
  88extern struct mtrr_ops * mtrr_if;
  89
  90#define is_cpu(vnd)     (mtrr_if && mtrr_if->vendor == X86_VENDOR_##vnd)
  91#define use_intel()     (mtrr_if && mtrr_if->use_intel_if == 1)
  92
  93extern unsigned int num_var_ranges;
  94
  95void finalize_mtrr_state(void);
  96void mtrr_state_warn(void);
  97char *mtrr_attrib_to_str(int x);
  98
  99extern char * mtrr_if_name[];
 100
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.