diff options
author | Russ Anderson <rja@sgi.com> | 2008-11-03 16:29:41 -0500 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2008-11-04 14:30:23 -0500 |
commit | 7576f684494e927b901eee25a44ce52c82f9f60e (patch) | |
tree | aa86894fabf77c6332a61d2a3e355f14fe121288 | |
parent | 9ac8d3fb22b593d39d161dcd716af0f1f7546837 (diff) |
[IA64] Add UV watchlist support.
This is used by SGI xp drivers (drivers/misc/sgi-xp).
Signed-off-by: Russ Anderson <rja@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
-rw-r--r-- | arch/ia64/include/asm/sn/sn_sal.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/sn/sn_sal.h b/arch/ia64/include/asm/sn/sn_sal.h index 57e649d388b8..e310fc0135dc 100644 --- a/arch/ia64/include/asm/sn/sn_sal.h +++ b/arch/ia64/include/asm/sn/sn_sal.h | |||
@@ -90,6 +90,8 @@ | |||
90 | #define SN_SAL_SET_CPU_NUMBER 0x02000068 | 90 | #define SN_SAL_SET_CPU_NUMBER 0x02000068 |
91 | 91 | ||
92 | #define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069 | 92 | #define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069 |
93 | #define SN_SAL_WATCHLIST_ALLOC 0x02000070 | ||
94 | #define SN_SAL_WATCHLIST_FREE 0x02000071 | ||
93 | 95 | ||
94 | /* | 96 | /* |
95 | * Service-specific constants | 97 | * Service-specific constants |
@@ -1185,4 +1187,47 @@ ia64_sn_kernel_launch_event(void) | |||
1185 | SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0); | 1187 | SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0); |
1186 | return rv.status; | 1188 | return rv.status; |
1187 | } | 1189 | } |
1190 | |||
1191 | union sn_watchlist_u { | ||
1192 | u64 val; | ||
1193 | struct { | ||
1194 | u64 blade : 16, | ||
1195 | size : 32, | ||
1196 | filler : 16; | ||
1197 | }; | ||
1198 | }; | ||
1199 | |||
1200 | static inline int | ||
1201 | sn_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size, | ||
1202 | unsigned long *intr_mmr_offset) | ||
1203 | { | ||
1204 | struct ia64_sal_retval rv; | ||
1205 | unsigned long addr; | ||
1206 | union sn_watchlist_u size_blade; | ||
1207 | int watchlist; | ||
1208 | |||
1209 | addr = (unsigned long)mq; | ||
1210 | size_blade.size = mq_size; | ||
1211 | size_blade.blade = blade; | ||
1212 | |||
1213 | /* | ||
1214 | * bios returns watchlist number or negative error number. | ||
1215 | */ | ||
1216 | ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_ALLOC, addr, | ||
1217 | size_blade.val, (u64)intr_mmr_offset, | ||
1218 | (u64)&watchlist, 0, 0, 0); | ||
1219 | if (rv.status < 0) | ||
1220 | return rv.status; | ||
1221 | |||
1222 | return watchlist; | ||
1223 | } | ||
1224 | |||
1225 | static inline int | ||
1226 | sn_mq_watchlist_free(int blade, int watchlist_num) | ||
1227 | { | ||
1228 | struct ia64_sal_retval rv; | ||
1229 | ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_FREE, blade, | ||
1230 | watchlist_num, 0, 0, 0, 0, 0); | ||
1231 | return rv.status; | ||
1232 | } | ||
1188 | #endif /* _ASM_IA64_SN_SN_SAL_H */ | 1233 | #endif /* _ASM_IA64_SN_SN_SAL_H */ |