diff options
| -rw-r--r-- | arch/x86/include/asm/uv/bios.h | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/bios_uv.c | 8 |
2 files changed, 17 insertions, 1 deletions
diff --git a/arch/x86/include/asm/uv/bios.h b/arch/x86/include/asm/uv/bios.h index 58105c5b0b4e..a301a56d4157 100644 --- a/arch/x86/include/asm/uv/bios.h +++ b/arch/x86/include/asm/uv/bios.h | |||
| @@ -34,7 +34,8 @@ enum uv_bios_cmd { | |||
| 34 | UV_BIOS_GET_SN_INFO, | 34 | UV_BIOS_GET_SN_INFO, |
| 35 | UV_BIOS_FREQ_BASE, | 35 | UV_BIOS_FREQ_BASE, |
| 36 | UV_BIOS_WATCHLIST_ALLOC, | 36 | UV_BIOS_WATCHLIST_ALLOC, |
| 37 | UV_BIOS_WATCHLIST_FREE | 37 | UV_BIOS_WATCHLIST_FREE, |
| 38 | UV_BIOS_MEMPROTECT | ||
| 38 | }; | 39 | }; |
| 39 | 40 | ||
| 40 | /* | 41 | /* |
| @@ -82,6 +83,12 @@ union uv_watchlist_u { | |||
| 82 | }; | 83 | }; |
| 83 | }; | 84 | }; |
| 84 | 85 | ||
| 86 | enum uv_memprotect { | ||
| 87 | UV_MEMPROT_RESTRICT_ACCESS, | ||
| 88 | UV_MEMPROT_ALLOW_AMO, | ||
| 89 | UV_MEMPROT_ALLOW_RW | ||
| 90 | }; | ||
| 91 | |||
| 85 | /* | 92 | /* |
| 86 | * bios calls have 6 parameters | 93 | * bios calls have 6 parameters |
| 87 | */ | 94 | */ |
| @@ -94,6 +101,7 @@ extern s64 uv_bios_freq_base(u64, u64 *); | |||
| 94 | extern int uv_bios_mq_watchlist_alloc(int, void *, unsigned int, | 101 | extern int uv_bios_mq_watchlist_alloc(int, void *, unsigned int, |
| 95 | unsigned long *); | 102 | unsigned long *); |
| 96 | extern int uv_bios_mq_watchlist_free(int, int); | 103 | extern int uv_bios_mq_watchlist_free(int, int); |
| 104 | extern s64 uv_bios_change_memprotect(u64, u64, enum uv_memprotect); | ||
| 97 | 105 | ||
| 98 | extern void uv_bios_init(void); | 106 | extern void uv_bios_init(void); |
| 99 | 107 | ||
diff --git a/arch/x86/kernel/bios_uv.c b/arch/x86/kernel/bios_uv.c index 4c02b2799216..7cf6fc3d1c10 100644 --- a/arch/x86/kernel/bios_uv.c +++ b/arch/x86/kernel/bios_uv.c | |||
| @@ -134,6 +134,14 @@ uv_bios_mq_watchlist_free(int blade, int watchlist_num) | |||
| 134 | } | 134 | } |
| 135 | EXPORT_SYMBOL_GPL(uv_bios_mq_watchlist_free); | 135 | EXPORT_SYMBOL_GPL(uv_bios_mq_watchlist_free); |
| 136 | 136 | ||
| 137 | s64 | ||
| 138 | uv_bios_change_memprotect(u64 paddr, u64 len, enum uv_memprotect perms) | ||
| 139 | { | ||
| 140 | return uv_bios_call_irqsave(UV_BIOS_MEMPROTECT, paddr, len, | ||
| 141 | perms, 0, 0); | ||
| 142 | } | ||
| 143 | EXPORT_SYMBOL_GPL(uv_bios_change_memprotect); | ||
| 144 | |||
| 137 | s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second) | 145 | s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second) |
| 138 | { | 146 | { |
| 139 | return uv_bios_call(UV_BIOS_FREQ_BASE, clock_type, | 147 | return uv_bios_call(UV_BIOS_FREQ_BASE, clock_type, |
