10 #include <linux/kernel.h>
12 #include <linux/module.h>
14 #include <linux/string.h>
16 #include <asm/delay.h>
27 #define SAL_MAJOR(x) ((x) >> 8)
28 #define SAL_MINOR(x) ((x) & 0xff)
36 default_handler (
void)
49 case 0: str =
"Call completed without error";
break;
50 case 1: str =
"Effect a warm boot of the system to complete "
52 case -1: str =
"Not implemented";
break;
53 case -2: str =
"Invalid argument";
break;
54 case -3: str =
"Call completed with error";
break;
55 case -4: str =
"Virtual address not registered";
break;
56 case -5: str =
"No information available";
break;
57 case -6: str =
"Insufficient space to add the entry";
break;
58 case -7: str =
"Invalid entry_addr value";
break;
59 case -8: str =
"Invalid interrupt vector";
break;
60 case -9: str =
"Requested memory not available";
break;
61 case -10: str =
"Unable to write to the NVM device";
break;
62 case -11: str =
"Invalid partition type specified";
break;
63 case -12: str =
"Invalid NVM_Object id specified";
break;
64 case -13: str =
"NVM_Object already has the maximum number "
65 "of partitions";
break;
66 case -14: str =
"Insufficient space in partition for the "
67 "requested write sub-function";
break;
68 case -15: str =
"Insufficient data buffer space for the "
69 "requested read record sub-function";
break;
70 case -16: str =
"Scratch buffer required for the write/delete "
71 "sub-function";
break;
72 case -17: str =
"Insufficient space in the NVM_Object for the "
73 "requested create sub-function";
break;
74 case -18: str =
"Invalid value specified in the partition_rec "
76 case -19: str =
"Record oriented I/O not supported for this "
78 case -20: str =
"Bad format of record to be written or "
79 "required keyword variable not "
81 default: str =
"Unknown SAL status code";
break;
122 sal_desc_entry_point (
void *
p)
133 #ifndef CONFIG_HOTPLUG_CPU
152 #define set_smp_redirect(flag) do { } while (0)
156 sal_desc_platform_feature (
void *p)
170 printk(
" IRQ_Redirection");
174 printk(
" IPI_Redirection");
184 sal_desc_ap_wakeup (
void *p)
201 chk_nointroute_opt(
void)
206 if (
memcmp(cp,
"nointroute", 10) == 0) {
208 printk (
"no_int_routing on\n");
211 while (*cp !=
' ' && *cp)
220 static void __init sal_desc_ap_wakeup(
void *p) { }
230 static int sal_cache_flush_drops_interrupts;
233 force_pal_cache_flush(
char *
str)
235 sal_cache_flush_drops_interrupts = 1;
238 early_param(
"force_pal_cache_flush", force_pal_cache_flush);
248 if (sal_cache_flush_drops_interrupts)
269 vector = ia64_get_ivr();
273 sal_cache_flush_drops_interrupts = 1;
275 "PAL_CACHE_FLUSH will be used instead\n");
288 if (sal_cache_flush_drops_interrupts) {
295 rc = ia64_pal_cache_flush(cache_type,
320 check_versions(systab);
322 chk_nointroute_opt();
332 p = (
char *) (systab + 1);
340 sal_desc_entry_point(p);
343 sal_desc_platform_feature(p);
349 sal_desc_ap_wakeup(p);
363 SAL_CALL(*isrvp, oemfunc, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
396 unsigned long *drift_info)
401 *ticks_per_second = isrv.
v0;
402 *drift_info = isrv.
v1;