aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/bios_uv.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/bios_uv.c')
-rw-r--r--arch/x86/kernel/bios_uv.c60
1 files changed, 56 insertions, 4 deletions
diff --git a/arch/x86/kernel/bios_uv.c b/arch/x86/kernel/bios_uv.c
index f0dfe6f17e7e..d22d0f1bbea0 100644
--- a/arch/x86/kernel/bios_uv.c
+++ b/arch/x86/kernel/bios_uv.c
@@ -69,10 +69,10 @@ s64 uv_bios_call_reentrant(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
69 69
70long sn_partition_id; 70long sn_partition_id;
71EXPORT_SYMBOL_GPL(sn_partition_id); 71EXPORT_SYMBOL_GPL(sn_partition_id);
72long uv_coherency_id; 72long sn_coherency_id;
73EXPORT_SYMBOL_GPL(uv_coherency_id); 73EXPORT_SYMBOL_GPL(sn_coherency_id);
74long uv_region_size; 74long sn_region_size;
75EXPORT_SYMBOL_GPL(uv_region_size); 75EXPORT_SYMBOL_GPL(sn_region_size);
76int uv_type; 76int uv_type;
77 77
78 78
@@ -100,6 +100,58 @@ s64 uv_bios_get_sn_info(int fc, int *uvtype, long *partid, long *coher,
100 return ret; 100 return ret;
101} 101}
102 102
103int
104uv_bios_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size,
105 unsigned long *intr_mmr_offset)
106{
107 union uv_watchlist_u size_blade;
108 unsigned long addr;
109 u64 watchlist;
110 s64 ret;
111
112 addr = (unsigned long)mq;
113 size_blade.size = mq_size;
114 size_blade.blade = blade;
115
116 /*
117 * bios returns watchlist number or negative error number.
118 */
119 ret = (int)uv_bios_call_irqsave(UV_BIOS_WATCHLIST_ALLOC, addr,
120 size_blade.val, (u64)intr_mmr_offset,
121 (u64)&watchlist, 0);
122 if (ret < BIOS_STATUS_SUCCESS)
123 return ret;
124
125 return watchlist;
126}
127EXPORT_SYMBOL_GPL(uv_bios_mq_watchlist_alloc);
128
129int
130uv_bios_mq_watchlist_free(int blade, int watchlist_num)
131{
132 return (int)uv_bios_call_irqsave(UV_BIOS_WATCHLIST_FREE,
133 blade, watchlist_num, 0, 0, 0);
134}
135EXPORT_SYMBOL_GPL(uv_bios_mq_watchlist_free);
136
137s64
138uv_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}
143EXPORT_SYMBOL_GPL(uv_bios_change_memprotect);
144
145s64
146uv_bios_reserved_page_pa(u64 buf, u64 *cookie, u64 *addr, u64 *len)
147{
148 s64 ret;
149
150 ret = uv_bios_call_irqsave(UV_BIOS_GET_PARTITION_ADDR, (u64)cookie,
151 (u64)addr, buf, (u64)len, 0);
152 return ret;
153}
154EXPORT_SYMBOL_GPL(uv_bios_reserved_page_pa);
103 155
104s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second) 156s64 uv_bios_freq_base(u64 clock_type, u64 *ticks_per_second)
105{ 157{