Linux Audio

Check our new training course

Loading...
v4.10.11
  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@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 <uapi/asm/mtrr.h>
 27#include <asm/pat.h>
 28
 29
 30/*
 31 * The following functions are for use by other drivers that cannot use
 32 * arch_phys_wc_add and arch_phys_wc_del.
 33 */
 34# ifdef CONFIG_MTRR
 
 35extern u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform);
 36extern void mtrr_save_fixed_ranges(void *);
 37extern void mtrr_save_state(void);
 38extern int mtrr_add(unsigned long base, unsigned long size,
 39		    unsigned int type, bool increment);
 40extern int mtrr_add_page(unsigned long base, unsigned long size,
 41			 unsigned int type, bool increment);
 42extern int mtrr_del(int reg, unsigned long base, unsigned long size);
 43extern int mtrr_del_page(int reg, unsigned long base, unsigned long size);
 44extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);
 45extern void mtrr_ap_init(void);
 46extern void mtrr_bp_init(void);
 47extern void set_mtrr_aps_delayed_init(void);
 48extern void mtrr_aps_init(void);
 49extern void mtrr_bp_restore(void);
 50extern int mtrr_trim_uncached_memory(unsigned long end_pfn);
 51extern int amd_special_default_mtrr(void);
 
 
 
 52#  else
 53static inline u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform)
 54{
 55	/*
 56	 * Return no-MTRRs:
 57	 */
 58	return MTRR_TYPE_INVALID;
 59}
 60#define mtrr_save_fixed_ranges(arg) do {} while (0)
 61#define mtrr_save_state() do {} while (0)
 62static inline int mtrr_add(unsigned long base, unsigned long size,
 63			   unsigned int type, bool increment)
 64{
 65    return -ENODEV;
 66}
 67static inline int mtrr_add_page(unsigned long base, unsigned long size,
 68				unsigned int type, bool increment)
 69{
 70    return -ENODEV;
 71}
 72static inline int mtrr_del(int reg, unsigned long base, unsigned long size)
 73{
 74    return -ENODEV;
 75}
 76static inline int mtrr_del_page(int reg, unsigned long base, unsigned long size)
 77{
 78    return -ENODEV;
 79}
 80static inline int mtrr_trim_uncached_memory(unsigned long end_pfn)
 81{
 82	return 0;
 83}
 84static inline void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi)
 85{
 86}
 87static inline void mtrr_bp_init(void)
 88{
 89	pat_disable("MTRRs disabled, skipping PAT initialization too.");
 90}
 91
 92#define mtrr_ap_init() do {} while (0)
 93#define set_mtrr_aps_delayed_init() do {} while (0)
 94#define mtrr_aps_init() do {} while (0)
 95#define mtrr_bp_restore() do {} while (0)
 
 
 
 96#  endif
 97
 98#ifdef CONFIG_COMPAT
 99#include <linux/compat.h>
100
101struct mtrr_sentry32 {
102    compat_ulong_t base;    /*  Base address     */
103    compat_uint_t size;    /*  Size of region   */
104    compat_uint_t type;     /*  Type of region   */
105};
106
107struct mtrr_gentry32 {
108    compat_ulong_t regnum;   /*  Register number  */
109    compat_uint_t base;    /*  Base address     */
110    compat_uint_t size;    /*  Size of region   */
111    compat_uint_t type;     /*  Type of region   */
112};
113
114#define MTRR_IOCTL_BASE 'M'
115
116#define MTRRIOC32_ADD_ENTRY      _IOW(MTRR_IOCTL_BASE,  0, struct mtrr_sentry32)
117#define MTRRIOC32_SET_ENTRY      _IOW(MTRR_IOCTL_BASE,  1, struct mtrr_sentry32)
118#define MTRRIOC32_DEL_ENTRY      _IOW(MTRR_IOCTL_BASE,  2, struct mtrr_sentry32)
119#define MTRRIOC32_GET_ENTRY      _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry32)
120#define MTRRIOC32_KILL_ENTRY     _IOW(MTRR_IOCTL_BASE,  4, struct mtrr_sentry32)
121#define MTRRIOC32_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  5, struct mtrr_sentry32)
122#define MTRRIOC32_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  6, struct mtrr_sentry32)
123#define MTRRIOC32_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  7, struct mtrr_sentry32)
124#define MTRRIOC32_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry32)
125#define MTRRIOC32_KILL_PAGE_ENTRY		\
126				 _IOW(MTRR_IOCTL_BASE,  9, struct mtrr_sentry32)
127#endif /* CONFIG_COMPAT */
128
129/* Bit fields for enabled in struct mtrr_state_type */
130#define MTRR_STATE_MTRR_FIXED_ENABLED	0x01
131#define MTRR_STATE_MTRR_ENABLED		0x02
132
133#endif /* _ASM_X86_MTRR_H */
v6.2
  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@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 <uapi/asm/mtrr.h>
 
 
 27
 28/*
 29 * The following functions are for use by other drivers that cannot use
 30 * arch_phys_wc_add and arch_phys_wc_del.
 31 */
 32# ifdef CONFIG_MTRR
 33void mtrr_bp_init(void);
 34extern u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform);
 35extern void mtrr_save_fixed_ranges(void *);
 36extern void mtrr_save_state(void);
 37extern int mtrr_add(unsigned long base, unsigned long size,
 38		    unsigned int type, bool increment);
 39extern int mtrr_add_page(unsigned long base, unsigned long size,
 40			 unsigned int type, bool increment);
 41extern int mtrr_del(int reg, unsigned long base, unsigned long size);
 42extern int mtrr_del_page(int reg, unsigned long base, unsigned long size);
 43extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi);
 
 
 
 
 44extern void mtrr_bp_restore(void);
 45extern int mtrr_trim_uncached_memory(unsigned long end_pfn);
 46extern int amd_special_default_mtrr(void);
 47void mtrr_disable(void);
 48void mtrr_enable(void);
 49void mtrr_generic_set_state(void);
 50#  else
 51static inline u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform)
 52{
 53	/*
 54	 * Return no-MTRRs:
 55	 */
 56	return MTRR_TYPE_INVALID;
 57}
 58#define mtrr_save_fixed_ranges(arg) do {} while (0)
 59#define mtrr_save_state() do {} while (0)
 60static inline int mtrr_add(unsigned long base, unsigned long size,
 61			   unsigned int type, bool increment)
 62{
 63    return -ENODEV;
 64}
 65static inline int mtrr_add_page(unsigned long base, unsigned long size,
 66				unsigned int type, bool increment)
 67{
 68    return -ENODEV;
 69}
 70static inline int mtrr_del(int reg, unsigned long base, unsigned long size)
 71{
 72    return -ENODEV;
 73}
 74static inline int mtrr_del_page(int reg, unsigned long base, unsigned long size)
 75{
 76    return -ENODEV;
 77}
 78static inline int mtrr_trim_uncached_memory(unsigned long end_pfn)
 79{
 80	return 0;
 81}
 82static inline void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi)
 83{
 84}
 85#define mtrr_bp_init() do {} while (0)
 
 
 
 
 
 
 
 86#define mtrr_bp_restore() do {} while (0)
 87#define mtrr_disable() do {} while (0)
 88#define mtrr_enable() do {} while (0)
 89#define mtrr_generic_set_state() do {} while (0)
 90#  endif
 91
 92#ifdef CONFIG_COMPAT
 93#include <linux/compat.h>
 94
 95struct mtrr_sentry32 {
 96    compat_ulong_t base;    /*  Base address     */
 97    compat_uint_t size;    /*  Size of region   */
 98    compat_uint_t type;     /*  Type of region   */
 99};
100
101struct mtrr_gentry32 {
102    compat_ulong_t regnum;   /*  Register number  */
103    compat_uint_t base;    /*  Base address     */
104    compat_uint_t size;    /*  Size of region   */
105    compat_uint_t type;     /*  Type of region   */
106};
107
108#define MTRR_IOCTL_BASE 'M'
109
110#define MTRRIOC32_ADD_ENTRY      _IOW(MTRR_IOCTL_BASE,  0, struct mtrr_sentry32)
111#define MTRRIOC32_SET_ENTRY      _IOW(MTRR_IOCTL_BASE,  1, struct mtrr_sentry32)
112#define MTRRIOC32_DEL_ENTRY      _IOW(MTRR_IOCTL_BASE,  2, struct mtrr_sentry32)
113#define MTRRIOC32_GET_ENTRY      _IOWR(MTRR_IOCTL_BASE, 3, struct mtrr_gentry32)
114#define MTRRIOC32_KILL_ENTRY     _IOW(MTRR_IOCTL_BASE,  4, struct mtrr_sentry32)
115#define MTRRIOC32_ADD_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  5, struct mtrr_sentry32)
116#define MTRRIOC32_SET_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  6, struct mtrr_sentry32)
117#define MTRRIOC32_DEL_PAGE_ENTRY _IOW(MTRR_IOCTL_BASE,  7, struct mtrr_sentry32)
118#define MTRRIOC32_GET_PAGE_ENTRY _IOWR(MTRR_IOCTL_BASE, 8, struct mtrr_gentry32)
119#define MTRRIOC32_KILL_PAGE_ENTRY		\
120				 _IOW(MTRR_IOCTL_BASE,  9, struct mtrr_sentry32)
121#endif /* CONFIG_COMPAT */
122
123/* Bit fields for enabled in struct mtrr_state_type */
124#define MTRR_STATE_MTRR_FIXED_ENABLED	0x01
125#define MTRR_STATE_MTRR_ENABLED		0x02
126
127#endif /* _ASM_X86_MTRR_H */