diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-02 15:48:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-02 15:48:36 -0400 |
commit | f900e5824a44ab65437b4f7e7c610b72f94820c5 (patch) | |
tree | 770015a763e4c87e807e00a467a4ca602f242363 | |
parent | 23344cb341902f4e3431d8137dca93d6e186d054 (diff) | |
parent | 856d08ec46c5ecf3df13827c492fb6998fdc8322 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc
* master.kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc:
[PATCH] powerpc: iSeries needs slb_initialize to be called
powerpc: hook up the splice syscall
[PATCH] powerpc/cell: compile fixes
[PATCH] powerpc: trivial spelling fixes in fault.c
[PATCH] powerpc/pseries: EEH Cleanup
[PATCH] powerpc/pseries: misc lparcfg fixes
[PATCH] powerpc/pseries: fix device name printing, again.
[PATCH] powerpc: Extends HCALL interface for InfiniBand usage
[PATCH] powerpc/pseries: Change H_StudlyCaps to H_SHOUTING_CAPS
[PATCH] powerpc/pseries: print message if EEH recovery fails
[PATCH] powerpc/pseries: mutex lock to serialize EEH event processing
powerpc: converted embedded platforms to use new define_machine support
powerpc: merge machine_check_exception between ppc32 & ppc64
25 files changed, 440 insertions, 247 deletions
diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c index 1b73508ecb2b..2cbde865d4f5 100644 --- a/arch/powerpc/kernel/lparcfg.c +++ b/arch/powerpc/kernel/lparcfg.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <asm/prom.h> | 37 | #include <asm/prom.h> |
38 | #include <asm/vdso_datapage.h> | 38 | #include <asm/vdso_datapage.h> |
39 | 39 | ||
40 | #define MODULE_VERS "1.6" | 40 | #define MODULE_VERS "1.7" |
41 | #define MODULE_NAME "lparcfg" | 41 | #define MODULE_NAME "lparcfg" |
42 | 42 | ||
43 | /* #define LPARCFG_DEBUG */ | 43 | /* #define LPARCFG_DEBUG */ |
@@ -149,17 +149,17 @@ static void log_plpar_hcall_return(unsigned long rc, char *tag) | |||
149 | if (rc == 0) /* success, return */ | 149 | if (rc == 0) /* success, return */ |
150 | return; | 150 | return; |
151 | /* check for null tag ? */ | 151 | /* check for null tag ? */ |
152 | if (rc == H_Hardware) | 152 | if (rc == H_HARDWARE) |
153 | printk(KERN_INFO | 153 | printk(KERN_INFO |
154 | "plpar-hcall (%s) failed with hardware fault\n", tag); | 154 | "plpar-hcall (%s) failed with hardware fault\n", tag); |
155 | else if (rc == H_Function) | 155 | else if (rc == H_FUNCTION) |
156 | printk(KERN_INFO | 156 | printk(KERN_INFO |
157 | "plpar-hcall (%s) failed; function not allowed\n", tag); | 157 | "plpar-hcall (%s) failed; function not allowed\n", tag); |
158 | else if (rc == H_Authority) | 158 | else if (rc == H_AUTHORITY) |
159 | printk(KERN_INFO | 159 | printk(KERN_INFO |
160 | "plpar-hcall (%s) failed; not authorized to this function\n", | 160 | "plpar-hcall (%s) failed; not authorized to this" |
161 | tag); | 161 | " function\n", tag); |
162 | else if (rc == H_Parameter) | 162 | else if (rc == H_PARAMETER) |
163 | printk(KERN_INFO "plpar-hcall (%s) failed; Bad parameter(s)\n", | 163 | printk(KERN_INFO "plpar-hcall (%s) failed; Bad parameter(s)\n", |
164 | tag); | 164 | tag); |
165 | else | 165 | else |
@@ -209,7 +209,7 @@ static void h_pic(unsigned long *pool_idle_time, unsigned long *num_procs) | |||
209 | unsigned long dummy; | 209 | unsigned long dummy; |
210 | rc = plpar_hcall(H_PIC, 0, 0, 0, 0, pool_idle_time, num_procs, &dummy); | 210 | rc = plpar_hcall(H_PIC, 0, 0, 0, 0, pool_idle_time, num_procs, &dummy); |
211 | 211 | ||
212 | if (rc != H_Authority) | 212 | if (rc != H_AUTHORITY) |
213 | log_plpar_hcall_return(rc, "H_PIC"); | 213 | log_plpar_hcall_return(rc, "H_PIC"); |
214 | } | 214 | } |
215 | 215 | ||
@@ -242,7 +242,7 @@ static void parse_system_parameter_string(struct seq_file *m) | |||
242 | { | 242 | { |
243 | int call_status; | 243 | int call_status; |
244 | 244 | ||
245 | char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL); | 245 | unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL); |
246 | if (!local_buffer) { | 246 | if (!local_buffer) { |
247 | printk(KERN_ERR "%s %s kmalloc failure at line %d \n", | 247 | printk(KERN_ERR "%s %s kmalloc failure at line %d \n", |
248 | __FILE__, __FUNCTION__, __LINE__); | 248 | __FILE__, __FUNCTION__, __LINE__); |
@@ -254,7 +254,8 @@ static void parse_system_parameter_string(struct seq_file *m) | |||
254 | call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1, | 254 | call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1, |
255 | NULL, | 255 | NULL, |
256 | SPLPAR_CHARACTERISTICS_TOKEN, | 256 | SPLPAR_CHARACTERISTICS_TOKEN, |
257 | __pa(rtas_data_buf)); | 257 | __pa(rtas_data_buf), |
258 | RTAS_DATA_BUF_SIZE); | ||
258 | memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH); | 259 | memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH); |
259 | spin_unlock(&rtas_data_buf_lock); | 260 | spin_unlock(&rtas_data_buf_lock); |
260 | 261 | ||
@@ -275,7 +276,7 @@ static void parse_system_parameter_string(struct seq_file *m) | |||
275 | #ifdef LPARCFG_DEBUG | 276 | #ifdef LPARCFG_DEBUG |
276 | printk(KERN_INFO "success calling get-system-parameter \n"); | 277 | printk(KERN_INFO "success calling get-system-parameter \n"); |
277 | #endif | 278 | #endif |
278 | splpar_strlen = local_buffer[0] * 16 + local_buffer[1]; | 279 | splpar_strlen = local_buffer[0] * 256 + local_buffer[1]; |
279 | local_buffer += 2; /* step over strlen value */ | 280 | local_buffer += 2; /* step over strlen value */ |
280 | 281 | ||
281 | memset(workbuffer, 0, SPLPAR_MAXLENGTH); | 282 | memset(workbuffer, 0, SPLPAR_MAXLENGTH); |
@@ -529,13 +530,13 @@ static ssize_t lparcfg_write(struct file *file, const char __user * buf, | |||
529 | retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr, | 530 | retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr, |
530 | *new_weight_ptr); | 531 | *new_weight_ptr); |
531 | 532 | ||
532 | if (retval == H_Success || retval == H_Constrained) { | 533 | if (retval == H_SUCCESS || retval == H_CONSTRAINED) { |
533 | retval = count; | 534 | retval = count; |
534 | } else if (retval == H_Busy) { | 535 | } else if (retval == H_BUSY) { |
535 | retval = -EBUSY; | 536 | retval = -EBUSY; |
536 | } else if (retval == H_Hardware) { | 537 | } else if (retval == H_HARDWARE) { |
537 | retval = -EIO; | 538 | retval = -EIO; |
538 | } else if (retval == H_Parameter) { | 539 | } else if (retval == H_PARAMETER) { |
539 | retval = -EINVAL; | 540 | retval = -EINVAL; |
540 | } else { | 541 | } else { |
541 | printk(KERN_WARNING "%s: received unknown hv return code %ld", | 542 | printk(KERN_WARNING "%s: received unknown hv return code %ld", |
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 06636c927a7e..0112318213ab 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c | |||
@@ -578,18 +578,18 @@ static void rtas_percpu_suspend_me(void *info) | |||
578 | * We use "waiting" to indicate our state. As long | 578 | * We use "waiting" to indicate our state. As long |
579 | * as it is >0, we are still trying to all join up. | 579 | * as it is >0, we are still trying to all join up. |
580 | * If it goes to 0, we have successfully joined up and | 580 | * If it goes to 0, we have successfully joined up and |
581 | * one thread got H_Continue. If any error happens, | 581 | * one thread got H_CONTINUE. If any error happens, |
582 | * we set it to <0. | 582 | * we set it to <0. |
583 | */ | 583 | */ |
584 | local_irq_save(flags); | 584 | local_irq_save(flags); |
585 | do { | 585 | do { |
586 | rc = plpar_hcall_norets(H_JOIN); | 586 | rc = plpar_hcall_norets(H_JOIN); |
587 | smp_rmb(); | 587 | smp_rmb(); |
588 | } while (rc == H_Success && data->waiting > 0); | 588 | } while (rc == H_SUCCESS && data->waiting > 0); |
589 | if (rc == H_Success) | 589 | if (rc == H_SUCCESS) |
590 | goto out; | 590 | goto out; |
591 | 591 | ||
592 | if (rc == H_Continue) { | 592 | if (rc == H_CONTINUE) { |
593 | data->waiting = 0; | 593 | data->waiting = 0; |
594 | data->args->args[data->args->nargs] = | 594 | data->args->args[data->args->nargs] = |
595 | rtas_call(ibm_suspend_me_token, 0, 1, NULL); | 595 | rtas_call(ibm_suspend_me_token, 0, 1, NULL); |
@@ -597,7 +597,7 @@ static void rtas_percpu_suspend_me(void *info) | |||
597 | plpar_hcall_norets(H_PROD,i); | 597 | plpar_hcall_norets(H_PROD,i); |
598 | } else { | 598 | } else { |
599 | data->waiting = -EBUSY; | 599 | data->waiting = -EBUSY; |
600 | printk(KERN_ERR "Error on H_Join hypervisor call\n"); | 600 | printk(KERN_ERR "Error on H_JOIN hypervisor call\n"); |
601 | } | 601 | } |
602 | 602 | ||
603 | out: | 603 | out: |
@@ -624,7 +624,7 @@ static int rtas_ibm_suspend_me(struct rtas_args *args) | |||
624 | printk(KERN_ERR "Error doing global join\n"); | 624 | printk(KERN_ERR "Error doing global join\n"); |
625 | 625 | ||
626 | /* Prod each CPU. This won't hurt, and will wake | 626 | /* Prod each CPU. This won't hurt, and will wake |
627 | * anyone we successfully put to sleep with H_Join | 627 | * anyone we successfully put to sleep with H_JOIN. |
628 | */ | 628 | */ |
629 | for_each_possible_cpu(i) | 629 | for_each_possible_cpu(i) |
630 | plpar_hcall_norets(H_PROD, i); | 630 | plpar_hcall_norets(H_PROD, i); |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index a72bf5dceeee..69ac25701344 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -50,7 +50,6 @@ | |||
50 | #include <asm/kgdb.h> | 50 | #include <asm/kgdb.h> |
51 | #endif | 51 | #endif |
52 | 52 | ||
53 | extern void platform_init(void); | ||
54 | extern void bootx_init(unsigned long r4, unsigned long phys); | 53 | extern void bootx_init(unsigned long r4, unsigned long phys); |
55 | 54 | ||
56 | boot_infos_t *boot_infos; | 55 | boot_infos_t *boot_infos; |
@@ -138,12 +137,7 @@ void __init machine_init(unsigned long dt_ptr, unsigned long phys) | |||
138 | strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line)); | 137 | strlcpy(cmd_line, CONFIG_CMDLINE, sizeof(cmd_line)); |
139 | #endif /* CONFIG_CMDLINE */ | 138 | #endif /* CONFIG_CMDLINE */ |
140 | 139 | ||
141 | #ifdef CONFIG_PPC_MULTIPLATFORM | ||
142 | probe_machine(); | 140 | probe_machine(); |
143 | #else | ||
144 | /* Base init based on machine type. Obsoloete, please kill ! */ | ||
145 | platform_init(); | ||
146 | #endif | ||
147 | 141 | ||
148 | #ifdef CONFIG_6xx | 142 | #ifdef CONFIG_6xx |
149 | if (cpu_has_feature(CPU_FTR_CAN_DOZE) || | 143 | if (cpu_has_feature(CPU_FTR_CAN_DOZE) || |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 59aa92cd6fa4..13e91c4d70a8 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -215,12 +215,10 @@ void __init early_setup(unsigned long dt_ptr) | |||
215 | /* | 215 | /* |
216 | * Initialize stab / SLB management except on iSeries | 216 | * Initialize stab / SLB management except on iSeries |
217 | */ | 217 | */ |
218 | if (!firmware_has_feature(FW_FEATURE_ISERIES)) { | 218 | if (cpu_has_feature(CPU_FTR_SLB)) |
219 | if (cpu_has_feature(CPU_FTR_SLB)) | 219 | slb_initialize(); |
220 | slb_initialize(); | 220 | else if (!firmware_has_feature(FW_FEATURE_ISERIES)) |
221 | else | 221 | stab_initialize(get_paca()->stab_real); |
222 | stab_initialize(get_paca()->stab_real); | ||
223 | } | ||
224 | 222 | ||
225 | DBG(" <- early_setup()\n"); | 223 | DBG(" <- early_setup()\n"); |
226 | } | 224 | } |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 4cbde211eb69..064a52564692 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -228,7 +228,7 @@ void system_reset_exception(struct pt_regs *regs) | |||
228 | */ | 228 | */ |
229 | static inline int check_io_access(struct pt_regs *regs) | 229 | static inline int check_io_access(struct pt_regs *regs) |
230 | { | 230 | { |
231 | #ifdef CONFIG_PPC_PMAC | 231 | #if defined(CONFIG_PPC_PMAC) && defined(CONFIG_PPC32) |
232 | unsigned long msr = regs->msr; | 232 | unsigned long msr = regs->msr; |
233 | const struct exception_table_entry *entry; | 233 | const struct exception_table_entry *entry; |
234 | unsigned int *nip = (unsigned int *)regs->nip; | 234 | unsigned int *nip = (unsigned int *)regs->nip; |
@@ -261,7 +261,7 @@ static inline int check_io_access(struct pt_regs *regs) | |||
261 | return 1; | 261 | return 1; |
262 | } | 262 | } |
263 | } | 263 | } |
264 | #endif /* CONFIG_PPC_PMAC */ | 264 | #endif /* CONFIG_PPC_PMAC && CONFIG_PPC32 */ |
265 | return 0; | 265 | return 0; |
266 | } | 266 | } |
267 | 267 | ||
@@ -308,8 +308,8 @@ platform_machine_check(struct pt_regs *regs) | |||
308 | 308 | ||
309 | void machine_check_exception(struct pt_regs *regs) | 309 | void machine_check_exception(struct pt_regs *regs) |
310 | { | 310 | { |
311 | #ifdef CONFIG_PPC64 | ||
312 | int recover = 0; | 311 | int recover = 0; |
312 | unsigned long reason = get_mc_reason(regs); | ||
313 | 313 | ||
314 | /* See if any machine dependent calls */ | 314 | /* See if any machine dependent calls */ |
315 | if (ppc_md.machine_check_exception) | 315 | if (ppc_md.machine_check_exception) |
@@ -317,8 +317,6 @@ void machine_check_exception(struct pt_regs *regs) | |||
317 | 317 | ||
318 | if (recover) | 318 | if (recover) |
319 | return; | 319 | return; |
320 | #else | ||
321 | unsigned long reason = get_mc_reason(regs); | ||
322 | 320 | ||
323 | if (user_mode(regs)) { | 321 | if (user_mode(regs)) { |
324 | regs->msr |= MSR_RI; | 322 | regs->msr |= MSR_RI; |
@@ -462,7 +460,6 @@ void machine_check_exception(struct pt_regs *regs) | |||
462 | * additional info, e.g. bus error registers. | 460 | * additional info, e.g. bus error registers. |
463 | */ | 461 | */ |
464 | platform_machine_check(regs); | 462 | platform_machine_check(regs); |
465 | #endif /* CONFIG_PPC64 */ | ||
466 | 463 | ||
467 | if (debugger_fault_handler(regs)) | 464 | if (debugger_fault_handler(regs)) |
468 | return; | 465 | return; |
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 5aea0909a5ec..fdbba4206d59 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -177,15 +177,15 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, | |||
177 | 177 | ||
178 | /* When running in the kernel we expect faults to occur only to | 178 | /* When running in the kernel we expect faults to occur only to |
179 | * addresses in user space. All other faults represent errors in the | 179 | * addresses in user space. All other faults represent errors in the |
180 | * kernel and should generate an OOPS. Unfortunatly, in the case of an | 180 | * kernel and should generate an OOPS. Unfortunately, in the case of an |
181 | * erroneous fault occuring in a code path which already holds mmap_sem | 181 | * erroneous fault occurring in a code path which already holds mmap_sem |
182 | * we will deadlock attempting to validate the fault against the | 182 | * we will deadlock attempting to validate the fault against the |
183 | * address space. Luckily the kernel only validly references user | 183 | * address space. Luckily the kernel only validly references user |
184 | * space from well defined areas of code, which are listed in the | 184 | * space from well defined areas of code, which are listed in the |
185 | * exceptions table. | 185 | * exceptions table. |
186 | * | 186 | * |
187 | * As the vast majority of faults will be valid we will only perform | 187 | * As the vast majority of faults will be valid we will only perform |
188 | * the source reference check when there is a possibilty of a deadlock. | 188 | * the source reference check when there is a possibility of a deadlock. |
189 | * Attempt to lock the address space, if we cannot we then validate the | 189 | * Attempt to lock the address space, if we cannot we then validate the |
190 | * source. If this is invalid we can skip the address space check, | 190 | * source. If this is invalid we can skip the address space check, |
191 | * thus avoiding the deadlock. | 191 | * thus avoiding the deadlock. |
diff --git a/arch/powerpc/platforms/83xx/mpc834x_sys.c b/arch/powerpc/platforms/83xx/mpc834x_sys.c index 7c18b4cd5db4..7e789d2420ba 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_sys.c +++ b/arch/powerpc/platforms/83xx/mpc834x_sys.c | |||
@@ -158,25 +158,25 @@ static int __init mpc834x_rtc_hookup(void) | |||
158 | late_initcall(mpc834x_rtc_hookup); | 158 | late_initcall(mpc834x_rtc_hookup); |
159 | #endif | 159 | #endif |
160 | 160 | ||
161 | void __init platform_init(void) | 161 | /* |
162 | * Called very early, MMU is off, device-tree isn't unflattened | ||
163 | */ | ||
164 | static int __init mpc834x_sys_probe(void) | ||
162 | { | 165 | { |
163 | /* setup the PowerPC module struct */ | 166 | /* We always match for now, eventually we should look at the flat |
164 | ppc_md.setup_arch = mpc834x_sys_setup_arch; | 167 | dev tree to ensure this is the board we are suppose to run on |
165 | 168 | */ | |
166 | ppc_md.init_IRQ = mpc834x_sys_init_IRQ; | 169 | return 1; |
167 | ppc_md.get_irq = ipic_get_irq; | ||
168 | |||
169 | ppc_md.restart = mpc83xx_restart; | ||
170 | |||
171 | ppc_md.time_init = mpc83xx_time_init; | ||
172 | ppc_md.set_rtc_time = NULL; | ||
173 | ppc_md.get_rtc_time = NULL; | ||
174 | ppc_md.calibrate_decr = generic_calibrate_decr; | ||
175 | |||
176 | ppc_md.progress = udbg_progress; | ||
177 | |||
178 | if (ppc_md.progress) | ||
179 | ppc_md.progress("mpc834x_sys_init(): exit", 0); | ||
180 | |||
181 | return; | ||
182 | } | 170 | } |
171 | |||
172 | define_machine(mpc834x_sys) { | ||
173 | .name = "MPC834x SYS", | ||
174 | .probe = mpc834x_sys_probe, | ||
175 | .setup_arch = mpc834x_sys_setup_arch, | ||
176 | .init_IRQ = mpc834x_sys_init_IRQ, | ||
177 | .get_irq = ipic_get_irq, | ||
178 | .restart = mpc83xx_restart, | ||
179 | .time_init = mpc83xx_time_init, | ||
180 | .calibrate_decr = generic_calibrate_decr, | ||
181 | .progress = udbg_progress, | ||
182 | }; | ||
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c index b7821dbae00d..5eeff370f5fc 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c | |||
@@ -220,25 +220,25 @@ void mpc85xx_ads_show_cpuinfo(struct seq_file *m) | |||
220 | seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); | 220 | seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024)); |
221 | } | 221 | } |
222 | 222 | ||
223 | void __init platform_init(void) | 223 | /* |
224 | * Called very early, device-tree isn't unflattened | ||
225 | */ | ||
226 | static int __init mpc85xx_ads_probe(void) | ||
224 | { | 227 | { |
225 | ppc_md.setup_arch = mpc85xx_ads_setup_arch; | 228 | /* We always match for now, eventually we should look at the flat |
226 | ppc_md.show_cpuinfo = mpc85xx_ads_show_cpuinfo; | 229 | dev tree to ensure this is the board we are suppose to run on |
227 | 230 | */ | |
228 | ppc_md.init_IRQ = mpc85xx_ads_pic_init; | 231 | return 1; |
229 | ppc_md.get_irq = mpic_get_irq; | ||
230 | |||
231 | ppc_md.restart = mpc85xx_restart; | ||
232 | ppc_md.power_off = NULL; | ||
233 | ppc_md.halt = NULL; | ||
234 | |||
235 | ppc_md.time_init = NULL; | ||
236 | ppc_md.set_rtc_time = NULL; | ||
237 | ppc_md.get_rtc_time = NULL; | ||
238 | ppc_md.calibrate_decr = generic_calibrate_decr; | ||
239 | |||
240 | ppc_md.progress = udbg_progress; | ||
241 | |||
242 | if (ppc_md.progress) | ||
243 | ppc_md.progress("mpc85xx_ads platform_init(): exit", 0); | ||
244 | } | 232 | } |
233 | |||
234 | define_machine(mpc85xx_ads) { | ||
235 | .name = "MPC85xx ADS", | ||
236 | .probe = mpc85xx_ads_probe, | ||
237 | .setup_arch = mpc85xx_ads_setup_arch, | ||
238 | .init_IRQ = mpc85xx_ads_pic_init, | ||
239 | .show_cpuinfo = mpc85xx_ads_show_cpuinfo, | ||
240 | .get_irq = mpic_get_irq, | ||
241 | .restart = mpc85xx_restart, | ||
242 | .calibrate_decr = generic_calibrate_decr, | ||
243 | .progress = udbg_progress, | ||
244 | }; | ||
diff --git a/arch/powerpc/platforms/cell/spu_callbacks.c b/arch/powerpc/platforms/cell/spu_callbacks.c index 3a4245c926ad..6594bec73882 100644 --- a/arch/powerpc/platforms/cell/spu_callbacks.c +++ b/arch/powerpc/platforms/cell/spu_callbacks.c | |||
@@ -316,6 +316,7 @@ void *spu_syscall_table[] = { | |||
316 | [__NR_pselect6] sys_ni_syscall, /* sys_pselect */ | 316 | [__NR_pselect6] sys_ni_syscall, /* sys_pselect */ |
317 | [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */ | 317 | [__NR_ppoll] sys_ni_syscall, /* sys_ppoll */ |
318 | [__NR_unshare] sys_unshare, | 318 | [__NR_unshare] sys_unshare, |
319 | [__NR_splice] sys_splice, | ||
319 | }; | 320 | }; |
320 | 321 | ||
321 | long spu_sys_callback(struct spu_syscall_block *s) | 322 | long spu_sys_callback(struct spu_syscall_block *s) |
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c index c04e078c0fe5..483c8b76232c 100644 --- a/arch/powerpc/platforms/cell/spufs/run.c +++ b/arch/powerpc/platforms/cell/spufs/run.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #include <linux/ptrace.h> | 2 | #include <linux/ptrace.h> |
3 | 3 | ||
4 | #include <asm/spu.h> | 4 | #include <asm/spu.h> |
5 | #include <asm/unistd.h> | ||
5 | 6 | ||
6 | #include "spufs.h" | 7 | #include "spufs.h" |
7 | 8 | ||
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 9b2b1cb117b3..780fb27a0099 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -865,7 +865,7 @@ void __init eeh_init(void) | |||
865 | * on the CEC architecture, type of the device, on earlier boot | 865 | * on the CEC architecture, type of the device, on earlier boot |
866 | * command-line arguments & etc. | 866 | * command-line arguments & etc. |
867 | */ | 867 | */ |
868 | void eeh_add_device_early(struct device_node *dn) | 868 | static void eeh_add_device_early(struct device_node *dn) |
869 | { | 869 | { |
870 | struct pci_controller *phb; | 870 | struct pci_controller *phb; |
871 | struct eeh_early_enable_info info; | 871 | struct eeh_early_enable_info info; |
@@ -882,7 +882,6 @@ void eeh_add_device_early(struct device_node *dn) | |||
882 | info.buid_lo = BUID_LO(phb->buid); | 882 | info.buid_lo = BUID_LO(phb->buid); |
883 | early_enable_eeh(dn, &info); | 883 | early_enable_eeh(dn, &info); |
884 | } | 884 | } |
885 | EXPORT_SYMBOL_GPL(eeh_add_device_early); | ||
886 | 885 | ||
887 | void eeh_add_device_tree_early(struct device_node *dn) | 886 | void eeh_add_device_tree_early(struct device_node *dn) |
888 | { | 887 | { |
@@ -893,20 +892,6 @@ void eeh_add_device_tree_early(struct device_node *dn) | |||
893 | } | 892 | } |
894 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); | 893 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_early); |
895 | 894 | ||
896 | void eeh_add_device_tree_late(struct pci_bus *bus) | ||
897 | { | ||
898 | struct pci_dev *dev; | ||
899 | |||
900 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
901 | eeh_add_device_late(dev); | ||
902 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { | ||
903 | struct pci_bus *subbus = dev->subordinate; | ||
904 | if (subbus) | ||
905 | eeh_add_device_tree_late(subbus); | ||
906 | } | ||
907 | } | ||
908 | } | ||
909 | |||
910 | /** | 895 | /** |
911 | * eeh_add_device_late - perform EEH initialization for the indicated pci device | 896 | * eeh_add_device_late - perform EEH initialization for the indicated pci device |
912 | * @dev: pci device for which to set up EEH | 897 | * @dev: pci device for which to set up EEH |
@@ -914,7 +899,7 @@ void eeh_add_device_tree_late(struct pci_bus *bus) | |||
914 | * This routine must be used to complete EEH initialization for PCI | 899 | * This routine must be used to complete EEH initialization for PCI |
915 | * devices that were added after system boot (e.g. hotplug, dlpar). | 900 | * devices that were added after system boot (e.g. hotplug, dlpar). |
916 | */ | 901 | */ |
917 | void eeh_add_device_late(struct pci_dev *dev) | 902 | static void eeh_add_device_late(struct pci_dev *dev) |
918 | { | 903 | { |
919 | struct device_node *dn; | 904 | struct device_node *dn; |
920 | struct pci_dn *pdn; | 905 | struct pci_dn *pdn; |
@@ -933,16 +918,33 @@ void eeh_add_device_late(struct pci_dev *dev) | |||
933 | 918 | ||
934 | pci_addr_cache_insert_device (dev); | 919 | pci_addr_cache_insert_device (dev); |
935 | } | 920 | } |
936 | EXPORT_SYMBOL_GPL(eeh_add_device_late); | 921 | |
922 | void eeh_add_device_tree_late(struct pci_bus *bus) | ||
923 | { | ||
924 | struct pci_dev *dev; | ||
925 | |||
926 | list_for_each_entry(dev, &bus->devices, bus_list) { | ||
927 | eeh_add_device_late(dev); | ||
928 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { | ||
929 | struct pci_bus *subbus = dev->subordinate; | ||
930 | if (subbus) | ||
931 | eeh_add_device_tree_late(subbus); | ||
932 | } | ||
933 | } | ||
934 | } | ||
935 | EXPORT_SYMBOL_GPL(eeh_add_device_tree_late); | ||
937 | 936 | ||
938 | /** | 937 | /** |
939 | * eeh_remove_device - undo EEH setup for the indicated pci device | 938 | * eeh_remove_device - undo EEH setup for the indicated pci device |
940 | * @dev: pci device to be removed | 939 | * @dev: pci device to be removed |
941 | * | 940 | * |
942 | * This routine should be when a device is removed from a running | 941 | * This routine should be called when a device is removed from |
943 | * system (e.g. by hotplug or dlpar). | 942 | * a running system (e.g. by hotplug or dlpar). It unregisters |
943 | * the PCI device from the EEH subsystem. I/O errors affecting | ||
944 | * this device will no longer be detected after this call; thus, | ||
945 | * i/o errors affecting this slot may leave this device unusable. | ||
944 | */ | 946 | */ |
945 | void eeh_remove_device(struct pci_dev *dev) | 947 | static void eeh_remove_device(struct pci_dev *dev) |
946 | { | 948 | { |
947 | struct device_node *dn; | 949 | struct device_node *dn; |
948 | if (!dev || !eeh_subsystem_enabled) | 950 | if (!dev || !eeh_subsystem_enabled) |
@@ -958,21 +960,17 @@ void eeh_remove_device(struct pci_dev *dev) | |||
958 | PCI_DN(dn)->pcidev = NULL; | 960 | PCI_DN(dn)->pcidev = NULL; |
959 | pci_dev_put (dev); | 961 | pci_dev_put (dev); |
960 | } | 962 | } |
961 | EXPORT_SYMBOL_GPL(eeh_remove_device); | ||
962 | 963 | ||
963 | void eeh_remove_bus_device(struct pci_dev *dev) | 964 | void eeh_remove_bus_device(struct pci_dev *dev) |
964 | { | 965 | { |
966 | struct pci_bus *bus = dev->subordinate; | ||
967 | struct pci_dev *child, *tmp; | ||
968 | |||
965 | eeh_remove_device(dev); | 969 | eeh_remove_device(dev); |
966 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { | 970 | |
967 | struct pci_bus *bus = dev->subordinate; | 971 | if (bus && dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) { |
968 | struct list_head *ln; | 972 | list_for_each_entry_safe(child, tmp, &bus->devices, bus_list) |
969 | if (!bus) | 973 | eeh_remove_bus_device(child); |
970 | return; | ||
971 | for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { | ||
972 | struct pci_dev *pdev = pci_dev_b(ln); | ||
973 | if (pdev) | ||
974 | eeh_remove_bus_device(pdev); | ||
975 | } | ||
976 | } | 974 | } |
977 | } | 975 | } |
978 | EXPORT_SYMBOL_GPL(eeh_remove_bus_device); | 976 | EXPORT_SYMBOL_GPL(eeh_remove_bus_device); |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index cc2495a0cdd5..1fba695e32e8 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -293,15 +293,16 @@ void handle_eeh_events (struct eeh_event *event) | |||
293 | frozen_pdn = PCI_DN(frozen_dn); | 293 | frozen_pdn = PCI_DN(frozen_dn); |
294 | frozen_pdn->eeh_freeze_count++; | 294 | frozen_pdn->eeh_freeze_count++; |
295 | 295 | ||
296 | pci_str = pci_name (frozen_pdn->pcidev); | 296 | if (frozen_pdn->pcidev) { |
297 | drv_str = pcid_name (frozen_pdn->pcidev); | 297 | pci_str = pci_name (frozen_pdn->pcidev); |
298 | if (!pci_str) { | 298 | drv_str = pcid_name (frozen_pdn->pcidev); |
299 | } else { | ||
299 | pci_str = pci_name (event->dev); | 300 | pci_str = pci_name (event->dev); |
300 | drv_str = pcid_name (event->dev); | 301 | drv_str = pcid_name (event->dev); |
301 | } | 302 | } |
302 | 303 | ||
303 | if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) | 304 | if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) |
304 | goto hard_fail; | 305 | goto excess_failures; |
305 | 306 | ||
306 | /* If the reset state is a '5' and the time to reset is 0 (infinity) | 307 | /* If the reset state is a '5' and the time to reset is 0 (infinity) |
307 | * or is more then 15 seconds, then mark this as a permanent failure. | 308 | * or is more then 15 seconds, then mark this as a permanent failure. |
@@ -356,7 +357,7 @@ void handle_eeh_events (struct eeh_event *event) | |||
356 | 357 | ||
357 | return; | 358 | return; |
358 | 359 | ||
359 | hard_fail: | 360 | excess_failures: |
360 | /* | 361 | /* |
361 | * About 90% of all real-life EEH failures in the field | 362 | * About 90% of all real-life EEH failures in the field |
362 | * are due to poorly seated PCI cards. Only 10% or so are | 363 | * are due to poorly seated PCI cards. Only 10% or so are |
@@ -367,7 +368,15 @@ hard_fail: | |||
367 | "and has been permanently disabled. Please try reseating\n" | 368 | "and has been permanently disabled. Please try reseating\n" |
368 | "this device or replacing it.\n", | 369 | "this device or replacing it.\n", |
369 | drv_str, pci_str, frozen_pdn->eeh_freeze_count); | 370 | drv_str, pci_str, frozen_pdn->eeh_freeze_count); |
371 | goto perm_error; | ||
372 | |||
373 | hard_fail: | ||
374 | printk(KERN_ERR | ||
375 | "EEH: Unable to recover from failure of PCI device %s - %s\n" | ||
376 | "Please try reseating this device or replacing it.\n", | ||
377 | drv_str, pci_str); | ||
370 | 378 | ||
379 | perm_error: | ||
371 | eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); | 380 | eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); |
372 | 381 | ||
373 | /* Notify all devices that they're about to go down. */ | 382 | /* Notify all devices that they're about to go down. */ |
diff --git a/arch/powerpc/platforms/pseries/eeh_event.c b/arch/powerpc/platforms/pseries/eeh_event.c index 9a9961f27480..a1bda6f96fd1 100644 --- a/arch/powerpc/platforms/pseries/eeh_event.c +++ b/arch/powerpc/platforms/pseries/eeh_event.c | |||
@@ -19,7 +19,9 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/list.h> | 21 | #include <linux/list.h> |
22 | #include <linux/mutex.h> | ||
22 | #include <linux/pci.h> | 23 | #include <linux/pci.h> |
24 | #include <linux/workqueue.h> | ||
23 | #include <asm/eeh_event.h> | 25 | #include <asm/eeh_event.h> |
24 | #include <asm/ppc-pci.h> | 26 | #include <asm/ppc-pci.h> |
25 | 27 | ||
@@ -37,14 +39,18 @@ LIST_HEAD(eeh_eventlist); | |||
37 | static void eeh_thread_launcher(void *); | 39 | static void eeh_thread_launcher(void *); |
38 | DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL); | 40 | DECLARE_WORK(eeh_event_wq, eeh_thread_launcher, NULL); |
39 | 41 | ||
42 | /* Serialize reset sequences for a given pci device */ | ||
43 | DEFINE_MUTEX(eeh_event_mutex); | ||
44 | |||
40 | /** | 45 | /** |
41 | * eeh_event_handler - dispatch EEH events. The detection of a frozen | 46 | * eeh_event_handler - dispatch EEH events. |
42 | * slot can occur inside an interrupt, where it can be hard to do | ||
43 | * anything about it. The goal of this routine is to pull these | ||
44 | * detection events out of the context of the interrupt handler, and | ||
45 | * re-dispatch them for processing at a later time in a normal context. | ||
46 | * | ||
47 | * @dummy - unused | 47 | * @dummy - unused |
48 | * | ||
49 | * The detection of a frozen slot can occur inside an interrupt, | ||
50 | * where it can be hard to do anything about it. The goal of this | ||
51 | * routine is to pull these detection events out of the context | ||
52 | * of the interrupt handler, and re-dispatch them for processing | ||
53 | * at a later time in a normal context. | ||
48 | */ | 54 | */ |
49 | static int eeh_event_handler(void * dummy) | 55 | static int eeh_event_handler(void * dummy) |
50 | { | 56 | { |
@@ -64,23 +70,24 @@ static int eeh_event_handler(void * dummy) | |||
64 | event = list_entry(eeh_eventlist.next, struct eeh_event, list); | 70 | event = list_entry(eeh_eventlist.next, struct eeh_event, list); |
65 | list_del(&event->list); | 71 | list_del(&event->list); |
66 | } | 72 | } |
67 | |||
68 | if (event) | ||
69 | eeh_mark_slot(event->dn, EEH_MODE_RECOVERING); | ||
70 | |||
71 | spin_unlock_irqrestore(&eeh_eventlist_lock, flags); | 73 | spin_unlock_irqrestore(&eeh_eventlist_lock, flags); |
74 | |||
72 | if (event == NULL) | 75 | if (event == NULL) |
73 | break; | 76 | break; |
74 | 77 | ||
78 | /* Serialize processing of EEH events */ | ||
79 | mutex_lock(&eeh_event_mutex); | ||
80 | eeh_mark_slot(event->dn, EEH_MODE_RECOVERING); | ||
81 | |||
75 | printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n", | 82 | printk(KERN_INFO "EEH: Detected PCI bus error on device %s\n", |
76 | pci_name(event->dev)); | 83 | pci_name(event->dev)); |
77 | 84 | ||
78 | handle_eeh_events(event); | 85 | handle_eeh_events(event); |
79 | 86 | ||
80 | eeh_clear_slot(event->dn, EEH_MODE_RECOVERING); | 87 | eeh_clear_slot(event->dn, EEH_MODE_RECOVERING); |
81 | |||
82 | pci_dev_put(event->dev); | 88 | pci_dev_put(event->dev); |
83 | kfree(event); | 89 | kfree(event); |
90 | mutex_unlock(&eeh_event_mutex); | ||
84 | } | 91 | } |
85 | 92 | ||
86 | return 0; | 93 | return 0; |
@@ -88,7 +95,6 @@ static int eeh_event_handler(void * dummy) | |||
88 | 95 | ||
89 | /** | 96 | /** |
90 | * eeh_thread_launcher | 97 | * eeh_thread_launcher |
91 | * | ||
92 | * @dummy - unused | 98 | * @dummy - unused |
93 | */ | 99 | */ |
94 | static void eeh_thread_launcher(void *dummy) | 100 | static void eeh_thread_launcher(void *dummy) |
diff --git a/arch/powerpc/platforms/pseries/hvCall.S b/arch/powerpc/platforms/pseries/hvCall.S index db7c19fe9297..c9ff547f9d25 100644 --- a/arch/powerpc/platforms/pseries/hvCall.S +++ b/arch/powerpc/platforms/pseries/hvCall.S | |||
@@ -127,3 +127,103 @@ _GLOBAL(plpar_hcall_4out) | |||
127 | 127 | ||
128 | mtcrf 0xff,r0 | 128 | mtcrf 0xff,r0 |
129 | blr /* return r3 = status */ | 129 | blr /* return r3 = status */ |
130 | |||
131 | /* plpar_hcall_7arg_7ret(unsigned long opcode, R3 | ||
132 | unsigned long arg1, R4 | ||
133 | unsigned long arg2, R5 | ||
134 | unsigned long arg3, R6 | ||
135 | unsigned long arg4, R7 | ||
136 | unsigned long arg5, R8 | ||
137 | unsigned long arg6, R9 | ||
138 | unsigned long arg7, R10 | ||
139 | unsigned long *out1, 112(R1) | ||
140 | unsigned long *out2, 110(R1) | ||
141 | unsigned long *out3, 108(R1) | ||
142 | unsigned long *out4, 106(R1) | ||
143 | unsigned long *out5, 104(R1) | ||
144 | unsigned long *out6, 102(R1) | ||
145 | unsigned long *out7); 100(R1) | ||
146 | */ | ||
147 | _GLOBAL(plpar_hcall_7arg_7ret) | ||
148 | HMT_MEDIUM | ||
149 | |||
150 | mfcr r0 | ||
151 | stw r0,8(r1) | ||
152 | |||
153 | HVSC /* invoke the hypervisor */ | ||
154 | |||
155 | lwz r0,8(r1) | ||
156 | |||
157 | ld r11,STK_PARM(r11)(r1) /* Fetch r4 ret arg */ | ||
158 | std r4,0(r11) | ||
159 | ld r11,STK_PARM(r12)(r1) /* Fetch r5 ret arg */ | ||
160 | std r5,0(r11) | ||
161 | ld r11,STK_PARM(r13)(r1) /* Fetch r6 ret arg */ | ||
162 | std r6,0(r11) | ||
163 | ld r11,STK_PARM(r14)(r1) /* Fetch r7 ret arg */ | ||
164 | std r7,0(r11) | ||
165 | ld r11,STK_PARM(r15)(r1) /* Fetch r8 ret arg */ | ||
166 | std r8,0(r11) | ||
167 | ld r11,STK_PARM(r16)(r1) /* Fetch r9 ret arg */ | ||
168 | std r9,0(r11) | ||
169 | ld r11,STK_PARM(r17)(r1) /* Fetch r10 ret arg */ | ||
170 | std r10,0(r11) | ||
171 | |||
172 | mtcrf 0xff,r0 | ||
173 | |||
174 | blr /* return r3 = status */ | ||
175 | |||
176 | /* plpar_hcall_9arg_9ret(unsigned long opcode, R3 | ||
177 | unsigned long arg1, R4 | ||
178 | unsigned long arg2, R5 | ||
179 | unsigned long arg3, R6 | ||
180 | unsigned long arg4, R7 | ||
181 | unsigned long arg5, R8 | ||
182 | unsigned long arg6, R9 | ||
183 | unsigned long arg7, R10 | ||
184 | unsigned long arg8, 112(R1) | ||
185 | unsigned long arg9, 110(R1) | ||
186 | unsigned long *out1, 108(R1) | ||
187 | unsigned long *out2, 106(R1) | ||
188 | unsigned long *out3, 104(R1) | ||
189 | unsigned long *out4, 102(R1) | ||
190 | unsigned long *out5, 100(R1) | ||
191 | unsigned long *out6, 98(R1) | ||
192 | unsigned long *out7); 96(R1) | ||
193 | unsigned long *out8, 94(R1) | ||
194 | unsigned long *out9, 92(R1) | ||
195 | */ | ||
196 | _GLOBAL(plpar_hcall_9arg_9ret) | ||
197 | HMT_MEDIUM | ||
198 | |||
199 | mfcr r0 | ||
200 | stw r0,8(r1) | ||
201 | |||
202 | ld r11,STK_PARM(r11)(r1) /* put arg8 in R11 */ | ||
203 | ld r12,STK_PARM(r12)(r1) /* put arg9 in R12 */ | ||
204 | |||
205 | HVSC /* invoke the hypervisor */ | ||
206 | |||
207 | ld r0,STK_PARM(r13)(r1) /* Fetch r4 ret arg */ | ||
208 | stdx r4,r0,r0 | ||
209 | ld r0,STK_PARM(r14)(r1) /* Fetch r5 ret arg */ | ||
210 | stdx r5,r0,r0 | ||
211 | ld r0,STK_PARM(r15)(r1) /* Fetch r6 ret arg */ | ||
212 | stdx r6,r0,r0 | ||
213 | ld r0,STK_PARM(r16)(r1) /* Fetch r7 ret arg */ | ||
214 | stdx r7,r0,r0 | ||
215 | ld r0,STK_PARM(r17)(r1) /* Fetch r8 ret arg */ | ||
216 | stdx r8,r0,r0 | ||
217 | ld r0,STK_PARM(r18)(r1) /* Fetch r9 ret arg */ | ||
218 | stdx r9,r0,r0 | ||
219 | ld r0,STK_PARM(r19)(r1) /* Fetch r10 ret arg */ | ||
220 | stdx r10,r0,r0 | ||
221 | ld r0,STK_PARM(r20)(r1) /* Fetch r11 ret arg */ | ||
222 | stdx r11,r0,r0 | ||
223 | ld r0,STK_PARM(r21)(r1) /* Fetch r12 ret arg */ | ||
224 | stdx r12,r0,r0 | ||
225 | |||
226 | lwz r0,8(r1) | ||
227 | mtcrf 0xff,r0 | ||
228 | |||
229 | blr /* return r3 = status */ | ||
diff --git a/arch/powerpc/platforms/pseries/hvconsole.c b/arch/powerpc/platforms/pseries/hvconsole.c index ba6befd96636..a72a987f1d4d 100644 --- a/arch/powerpc/platforms/pseries/hvconsole.c +++ b/arch/powerpc/platforms/pseries/hvconsole.c | |||
@@ -41,7 +41,7 @@ int hvc_get_chars(uint32_t vtermno, char *buf, int count) | |||
41 | unsigned long got; | 41 | unsigned long got; |
42 | 42 | ||
43 | if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got, | 43 | if (plpar_hcall(H_GET_TERM_CHAR, vtermno, 0, 0, 0, &got, |
44 | (unsigned long *)buf, (unsigned long *)buf+1) == H_Success) | 44 | (unsigned long *)buf, (unsigned long *)buf+1) == H_SUCCESS) |
45 | return got; | 45 | return got; |
46 | return 0; | 46 | return 0; |
47 | } | 47 | } |
@@ -69,9 +69,9 @@ int hvc_put_chars(uint32_t vtermno, const char *buf, int count) | |||
69 | 69 | ||
70 | ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0], | 70 | ret = plpar_hcall_norets(H_PUT_TERM_CHAR, vtermno, count, lbuf[0], |
71 | lbuf[1]); | 71 | lbuf[1]); |
72 | if (ret == H_Success) | 72 | if (ret == H_SUCCESS) |
73 | return count; | 73 | return count; |
74 | if (ret == H_Busy) | 74 | if (ret == H_BUSY) |
75 | return 0; | 75 | return 0; |
76 | return -EIO; | 76 | return -EIO; |
77 | } | 77 | } |
diff --git a/arch/powerpc/platforms/pseries/hvcserver.c b/arch/powerpc/platforms/pseries/hvcserver.c index 22bfb5c89db9..fcf4b4cbeaf3 100644 --- a/arch/powerpc/platforms/pseries/hvcserver.c +++ b/arch/powerpc/platforms/pseries/hvcserver.c | |||
@@ -43,21 +43,21 @@ MODULE_VERSION(HVCS_ARCH_VERSION); | |||
43 | static int hvcs_convert(long to_convert) | 43 | static int hvcs_convert(long to_convert) |
44 | { | 44 | { |
45 | switch (to_convert) { | 45 | switch (to_convert) { |
46 | case H_Success: | 46 | case H_SUCCESS: |
47 | return 0; | 47 | return 0; |
48 | case H_Parameter: | 48 | case H_PARAMETER: |
49 | return -EINVAL; | 49 | return -EINVAL; |
50 | case H_Hardware: | 50 | case H_HARDWARE: |
51 | return -EIO; | 51 | return -EIO; |
52 | case H_Busy: | 52 | case H_BUSY: |
53 | case H_LongBusyOrder1msec: | 53 | case H_LONG_BUSY_ORDER_1_MSEC: |
54 | case H_LongBusyOrder10msec: | 54 | case H_LONG_BUSY_ORDER_10_MSEC: |
55 | case H_LongBusyOrder100msec: | 55 | case H_LONG_BUSY_ORDER_100_MSEC: |
56 | case H_LongBusyOrder1sec: | 56 | case H_LONG_BUSY_ORDER_1_SEC: |
57 | case H_LongBusyOrder10sec: | 57 | case H_LONG_BUSY_ORDER_10_SEC: |
58 | case H_LongBusyOrder100sec: | 58 | case H_LONG_BUSY_ORDER_100_SEC: |
59 | return -EBUSY; | 59 | return -EBUSY; |
60 | case H_Function: /* fall through */ | 60 | case H_FUNCTION: /* fall through */ |
61 | default: | 61 | default: |
62 | return -EPERM; | 62 | return -EPERM; |
63 | } | 63 | } |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 8952528d31ac..634b7d06d3cc 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
@@ -54,7 +54,8 @@ EXPORT_SYMBOL(plpar_hcall); | |||
54 | EXPORT_SYMBOL(plpar_hcall_4out); | 54 | EXPORT_SYMBOL(plpar_hcall_4out); |
55 | EXPORT_SYMBOL(plpar_hcall_norets); | 55 | EXPORT_SYMBOL(plpar_hcall_norets); |
56 | EXPORT_SYMBOL(plpar_hcall_8arg_2ret); | 56 | EXPORT_SYMBOL(plpar_hcall_8arg_2ret); |
57 | 57 | EXPORT_SYMBOL(plpar_hcall_7arg_7ret); | |
58 | EXPORT_SYMBOL(plpar_hcall_9arg_9ret); | ||
58 | extern void pSeries_find_serial_port(void); | 59 | extern void pSeries_find_serial_port(void); |
59 | 60 | ||
60 | 61 | ||
@@ -72,7 +73,7 @@ static void udbg_hvsi_putc(char c) | |||
72 | 73 | ||
73 | do { | 74 | do { |
74 | rc = plpar_put_term_char(vtermno, sizeof(packet), packet); | 75 | rc = plpar_put_term_char(vtermno, sizeof(packet), packet); |
75 | } while (rc == H_Busy); | 76 | } while (rc == H_BUSY); |
76 | } | 77 | } |
77 | 78 | ||
78 | static long hvsi_udbg_buf_len; | 79 | static long hvsi_udbg_buf_len; |
@@ -85,7 +86,7 @@ static int udbg_hvsi_getc_poll(void) | |||
85 | 86 | ||
86 | if (hvsi_udbg_buf_len == 0) { | 87 | if (hvsi_udbg_buf_len == 0) { |
87 | rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf); | 88 | rc = plpar_get_term_char(vtermno, &hvsi_udbg_buf_len, hvsi_udbg_buf); |
88 | if (rc != H_Success || hvsi_udbg_buf[0] != 0xff) { | 89 | if (rc != H_SUCCESS || hvsi_udbg_buf[0] != 0xff) { |
89 | /* bad read or non-data packet */ | 90 | /* bad read or non-data packet */ |
90 | hvsi_udbg_buf_len = 0; | 91 | hvsi_udbg_buf_len = 0; |
91 | } else { | 92 | } else { |
@@ -139,7 +140,7 @@ static void udbg_putcLP(char c) | |||
139 | buf[0] = c; | 140 | buf[0] = c; |
140 | do { | 141 | do { |
141 | rc = plpar_put_term_char(vtermno, 1, buf); | 142 | rc = plpar_put_term_char(vtermno, 1, buf); |
142 | } while(rc == H_Busy); | 143 | } while(rc == H_BUSY); |
143 | } | 144 | } |
144 | 145 | ||
145 | /* Buffered chars getc */ | 146 | /* Buffered chars getc */ |
@@ -158,7 +159,7 @@ static int udbg_getc_pollLP(void) | |||
158 | /* get some more chars. */ | 159 | /* get some more chars. */ |
159 | inbuflen = 0; | 160 | inbuflen = 0; |
160 | rc = plpar_get_term_char(vtermno, &inbuflen, buf); | 161 | rc = plpar_get_term_char(vtermno, &inbuflen, buf); |
161 | if (rc != H_Success) | 162 | if (rc != H_SUCCESS) |
162 | inbuflen = 0; /* otherwise inbuflen is garbage */ | 163 | inbuflen = 0; /* otherwise inbuflen is garbage */ |
163 | } | 164 | } |
164 | if (inbuflen <= 0 || inbuflen > 16) { | 165 | if (inbuflen <= 0 || inbuflen > 16) { |
@@ -304,7 +305,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
304 | 305 | ||
305 | lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v, | 306 | lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v, |
306 | hpte_r, &slot, &dummy0, &dummy1); | 307 | hpte_r, &slot, &dummy0, &dummy1); |
307 | if (unlikely(lpar_rc == H_PTEG_Full)) { | 308 | if (unlikely(lpar_rc == H_PTEG_FULL)) { |
308 | if (!(vflags & HPTE_V_BOLTED)) | 309 | if (!(vflags & HPTE_V_BOLTED)) |
309 | DBG_LOW(" full\n"); | 310 | DBG_LOW(" full\n"); |
310 | return -1; | 311 | return -1; |
@@ -315,7 +316,7 @@ long pSeries_lpar_hpte_insert(unsigned long hpte_group, | |||
315 | * will fail. However we must catch the failure in hash_page | 316 | * will fail. However we must catch the failure in hash_page |
316 | * or we will loop forever, so return -2 in this case. | 317 | * or we will loop forever, so return -2 in this case. |
317 | */ | 318 | */ |
318 | if (unlikely(lpar_rc != H_Success)) { | 319 | if (unlikely(lpar_rc != H_SUCCESS)) { |
319 | if (!(vflags & HPTE_V_BOLTED)) | 320 | if (!(vflags & HPTE_V_BOLTED)) |
320 | DBG_LOW(" lpar err %d\n", lpar_rc); | 321 | DBG_LOW(" lpar err %d\n", lpar_rc); |
321 | return -2; | 322 | return -2; |
@@ -346,9 +347,9 @@ static long pSeries_lpar_hpte_remove(unsigned long hpte_group) | |||
346 | /* don't remove a bolted entry */ | 347 | /* don't remove a bolted entry */ |
347 | lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset, | 348 | lpar_rc = plpar_pte_remove(H_ANDCOND, hpte_group + slot_offset, |
348 | (0x1UL << 4), &dummy1, &dummy2); | 349 | (0x1UL << 4), &dummy1, &dummy2); |
349 | if (lpar_rc == H_Success) | 350 | if (lpar_rc == H_SUCCESS) |
350 | return i; | 351 | return i; |
351 | BUG_ON(lpar_rc != H_Not_Found); | 352 | BUG_ON(lpar_rc != H_NOT_FOUND); |
352 | 353 | ||
353 | slot_offset++; | 354 | slot_offset++; |
354 | slot_offset &= 0x7; | 355 | slot_offset &= 0x7; |
@@ -391,14 +392,14 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot, | |||
391 | 392 | ||
392 | lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN); | 393 | lpar_rc = plpar_pte_protect(flags, slot, want_v & HPTE_V_AVPN); |
393 | 394 | ||
394 | if (lpar_rc == H_Not_Found) { | 395 | if (lpar_rc == H_NOT_FOUND) { |
395 | DBG_LOW("not found !\n"); | 396 | DBG_LOW("not found !\n"); |
396 | return -1; | 397 | return -1; |
397 | } | 398 | } |
398 | 399 | ||
399 | DBG_LOW("ok\n"); | 400 | DBG_LOW("ok\n"); |
400 | 401 | ||
401 | BUG_ON(lpar_rc != H_Success); | 402 | BUG_ON(lpar_rc != H_SUCCESS); |
402 | 403 | ||
403 | return 0; | 404 | return 0; |
404 | } | 405 | } |
@@ -417,7 +418,7 @@ static unsigned long pSeries_lpar_hpte_getword0(unsigned long slot) | |||
417 | 418 | ||
418 | lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1); | 419 | lpar_rc = plpar_pte_read(flags, slot, &dword0, &dummy_word1); |
419 | 420 | ||
420 | BUG_ON(lpar_rc != H_Success); | 421 | BUG_ON(lpar_rc != H_SUCCESS); |
421 | 422 | ||
422 | return dword0; | 423 | return dword0; |
423 | } | 424 | } |
@@ -468,7 +469,7 @@ static void pSeries_lpar_hpte_updateboltedpp(unsigned long newpp, | |||
468 | flags = newpp & 7; | 469 | flags = newpp & 7; |
469 | lpar_rc = plpar_pte_protect(flags, slot, 0); | 470 | lpar_rc = plpar_pte_protect(flags, slot, 0); |
470 | 471 | ||
471 | BUG_ON(lpar_rc != H_Success); | 472 | BUG_ON(lpar_rc != H_SUCCESS); |
472 | } | 473 | } |
473 | 474 | ||
474 | static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | 475 | static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, |
@@ -484,10 +485,10 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va, | |||
484 | want_v = hpte_encode_v(va, psize); | 485 | want_v = hpte_encode_v(va, psize); |
485 | lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN, | 486 | lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v & HPTE_V_AVPN, |
486 | &dummy1, &dummy2); | 487 | &dummy1, &dummy2); |
487 | if (lpar_rc == H_Not_Found) | 488 | if (lpar_rc == H_NOT_FOUND) |
488 | return; | 489 | return; |
489 | 490 | ||
490 | BUG_ON(lpar_rc != H_Success); | 491 | BUG_ON(lpar_rc != H_SUCCESS); |
491 | } | 492 | } |
492 | 493 | ||
493 | /* | 494 | /* |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index b2fbf8ba8fbb..5eb55ef1c91c 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -463,7 +463,7 @@ static void pseries_dedicated_idle_sleep(void) | |||
463 | * very low priority. The cede enables interrupts, which | 463 | * very low priority. The cede enables interrupts, which |
464 | * doesn't matter here. | 464 | * doesn't matter here. |
465 | */ | 465 | */ |
466 | if (!lppaca[cpu ^ 1].idle || poll_pending() == H_Pending) | 466 | if (!lppaca[cpu ^ 1].idle || poll_pending() == H_PENDING) |
467 | cede_processor(); | 467 | cede_processor(); |
468 | 468 | ||
469 | out: | 469 | out: |
diff --git a/arch/powerpc/platforms/pseries/vio.c b/arch/powerpc/platforms/pseries/vio.c index 866379b80c09..8e53e04ada8b 100644 --- a/arch/powerpc/platforms/pseries/vio.c +++ b/arch/powerpc/platforms/pseries/vio.c | |||
@@ -258,7 +258,7 @@ EXPORT_SYMBOL(vio_find_node); | |||
258 | int vio_enable_interrupts(struct vio_dev *dev) | 258 | int vio_enable_interrupts(struct vio_dev *dev) |
259 | { | 259 | { |
260 | int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE); | 260 | int rc = h_vio_signal(dev->unit_address, VIO_IRQ_ENABLE); |
261 | if (rc != H_Success) | 261 | if (rc != H_SUCCESS) |
262 | printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc); | 262 | printk(KERN_ERR "vio: Error 0x%x enabling interrupts\n", rc); |
263 | return rc; | 263 | return rc; |
264 | } | 264 | } |
@@ -267,7 +267,7 @@ EXPORT_SYMBOL(vio_enable_interrupts); | |||
267 | int vio_disable_interrupts(struct vio_dev *dev) | 267 | int vio_disable_interrupts(struct vio_dev *dev) |
268 | { | 268 | { |
269 | int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE); | 269 | int rc = h_vio_signal(dev->unit_address, VIO_IRQ_DISABLE); |
270 | if (rc != H_Success) | 270 | if (rc != H_SUCCESS) |
271 | printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc); | 271 | printk(KERN_ERR "vio: Error 0x%x disabling interrupts\n", rc); |
272 | return rc; | 272 | return rc; |
273 | } | 273 | } |
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c index 4864cb32be25..2d60ea30fed6 100644 --- a/arch/powerpc/platforms/pseries/xics.c +++ b/arch/powerpc/platforms/pseries/xics.c | |||
@@ -168,7 +168,7 @@ static int pSeriesLP_xirr_info_get(int n_cpu) | |||
168 | unsigned long return_value; | 168 | unsigned long return_value; |
169 | 169 | ||
170 | lpar_rc = plpar_xirr(&return_value); | 170 | lpar_rc = plpar_xirr(&return_value); |
171 | if (lpar_rc != H_Success) | 171 | if (lpar_rc != H_SUCCESS) |
172 | panic(" bad return code xirr - rc = %lx \n", lpar_rc); | 172 | panic(" bad return code xirr - rc = %lx \n", lpar_rc); |
173 | return (int)return_value; | 173 | return (int)return_value; |
174 | } | 174 | } |
@@ -179,7 +179,7 @@ static void pSeriesLP_xirr_info_set(int n_cpu, int value) | |||
179 | unsigned long val64 = value & 0xffffffff; | 179 | unsigned long val64 = value & 0xffffffff; |
180 | 180 | ||
181 | lpar_rc = plpar_eoi(val64); | 181 | lpar_rc = plpar_eoi(val64); |
182 | if (lpar_rc != H_Success) | 182 | if (lpar_rc != H_SUCCESS) |
183 | panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc, | 183 | panic("bad return code EOI - rc = %ld, value=%lx\n", lpar_rc, |
184 | val64); | 184 | val64); |
185 | } | 185 | } |
@@ -189,7 +189,7 @@ void pSeriesLP_cppr_info(int n_cpu, u8 value) | |||
189 | unsigned long lpar_rc; | 189 | unsigned long lpar_rc; |
190 | 190 | ||
191 | lpar_rc = plpar_cppr(value); | 191 | lpar_rc = plpar_cppr(value); |
192 | if (lpar_rc != H_Success) | 192 | if (lpar_rc != H_SUCCESS) |
193 | panic("bad return code cppr - rc = %lx\n", lpar_rc); | 193 | panic("bad return code cppr - rc = %lx\n", lpar_rc); |
194 | } | 194 | } |
195 | 195 | ||
@@ -198,7 +198,7 @@ static void pSeriesLP_qirr_info(int n_cpu , u8 value) | |||
198 | unsigned long lpar_rc; | 198 | unsigned long lpar_rc; |
199 | 199 | ||
200 | lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value); | 200 | lpar_rc = plpar_ipi(get_hard_smp_processor_id(n_cpu), value); |
201 | if (lpar_rc != H_Success) | 201 | if (lpar_rc != H_SUCCESS) |
202 | panic("bad return code qirr - rc = %lx\n", lpar_rc); | 202 | panic("bad return code qirr - rc = %lx\n", lpar_rc); |
203 | } | 203 | } |
204 | 204 | ||
diff --git a/drivers/char/hvcs.c b/drivers/char/hvcs.c index 327b00c3c45e..8d97b3911293 100644 --- a/drivers/char/hvcs.c +++ b/drivers/char/hvcs.c | |||
@@ -904,7 +904,7 @@ static int hvcs_enable_device(struct hvcs_struct *hvcsd, uint32_t unit_address, | |||
904 | * It is possible the vty-server was removed after the irq was | 904 | * It is possible the vty-server was removed after the irq was |
905 | * requested but before we have time to enable interrupts. | 905 | * requested but before we have time to enable interrupts. |
906 | */ | 906 | */ |
907 | if (vio_enable_interrupts(vdev) == H_Success) | 907 | if (vio_enable_interrupts(vdev) == H_SUCCESS) |
908 | return 0; | 908 | return 0; |
909 | else { | 909 | else { |
910 | printk(KERN_ERR "HVCS: int enable failed for" | 910 | printk(KERN_ERR "HVCS: int enable failed for" |
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c index ceb98fd398af..52d01027d9e7 100644 --- a/drivers/net/ibmveth.c +++ b/drivers/net/ibmveth.c | |||
@@ -235,7 +235,7 @@ static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter, struc | |||
235 | 235 | ||
236 | lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); | 236 | lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); |
237 | 237 | ||
238 | if(lpar_rc != H_Success) { | 238 | if(lpar_rc != H_SUCCESS) { |
239 | pool->free_map[free_index] = index; | 239 | pool->free_map[free_index] = index; |
240 | pool->skbuff[index] = NULL; | 240 | pool->skbuff[index] = NULL; |
241 | pool->consumer_index--; | 241 | pool->consumer_index--; |
@@ -373,7 +373,7 @@ static void ibmveth_rxq_recycle_buffer(struct ibmveth_adapter *adapter) | |||
373 | 373 | ||
374 | lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); | 374 | lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); |
375 | 375 | ||
376 | if(lpar_rc != H_Success) { | 376 | if(lpar_rc != H_SUCCESS) { |
377 | ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc); | 377 | ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc); |
378 | ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator); | 378 | ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator); |
379 | } | 379 | } |
@@ -511,7 +511,7 @@ static int ibmveth_open(struct net_device *netdev) | |||
511 | adapter->filter_list_dma, | 511 | adapter->filter_list_dma, |
512 | mac_address); | 512 | mac_address); |
513 | 513 | ||
514 | if(lpar_rc != H_Success) { | 514 | if(lpar_rc != H_SUCCESS) { |
515 | ibmveth_error_printk("h_register_logical_lan failed with %ld\n", lpar_rc); | 515 | ibmveth_error_printk("h_register_logical_lan failed with %ld\n", lpar_rc); |
516 | ibmveth_error_printk("buffer TCE:0x%lx filter TCE:0x%lx rxq desc:0x%lx MAC:0x%lx\n", | 516 | ibmveth_error_printk("buffer TCE:0x%lx filter TCE:0x%lx rxq desc:0x%lx MAC:0x%lx\n", |
517 | adapter->buffer_list_dma, | 517 | adapter->buffer_list_dma, |
@@ -527,7 +527,7 @@ static int ibmveth_open(struct net_device *netdev) | |||
527 | ibmveth_error_printk("unable to request irq 0x%x, rc %d\n", netdev->irq, rc); | 527 | ibmveth_error_printk("unable to request irq 0x%x, rc %d\n", netdev->irq, rc); |
528 | do { | 528 | do { |
529 | rc = h_free_logical_lan(adapter->vdev->unit_address); | 529 | rc = h_free_logical_lan(adapter->vdev->unit_address); |
530 | } while (H_isLongBusy(rc) || (rc == H_Busy)); | 530 | } while (H_IS_LONG_BUSY(rc) || (rc == H_BUSY)); |
531 | 531 | ||
532 | ibmveth_cleanup(adapter); | 532 | ibmveth_cleanup(adapter); |
533 | return rc; | 533 | return rc; |
@@ -556,9 +556,9 @@ static int ibmveth_close(struct net_device *netdev) | |||
556 | 556 | ||
557 | do { | 557 | do { |
558 | lpar_rc = h_free_logical_lan(adapter->vdev->unit_address); | 558 | lpar_rc = h_free_logical_lan(adapter->vdev->unit_address); |
559 | } while (H_isLongBusy(lpar_rc) || (lpar_rc == H_Busy)); | 559 | } while (H_IS_LONG_BUSY(lpar_rc) || (lpar_rc == H_BUSY)); |
560 | 560 | ||
561 | if(lpar_rc != H_Success) | 561 | if(lpar_rc != H_SUCCESS) |
562 | { | 562 | { |
563 | ibmveth_error_printk("h_free_logical_lan failed with %lx, continuing with close\n", | 563 | ibmveth_error_printk("h_free_logical_lan failed with %lx, continuing with close\n", |
564 | lpar_rc); | 564 | lpar_rc); |
@@ -693,9 +693,9 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
693 | desc[4].desc, | 693 | desc[4].desc, |
694 | desc[5].desc, | 694 | desc[5].desc, |
695 | correlator); | 695 | correlator); |
696 | } while ((lpar_rc == H_Busy) && (retry_count--)); | 696 | } while ((lpar_rc == H_BUSY) && (retry_count--)); |
697 | 697 | ||
698 | if(lpar_rc != H_Success && lpar_rc != H_Dropped) { | 698 | if(lpar_rc != H_SUCCESS && lpar_rc != H_DROPPED) { |
699 | int i; | 699 | int i; |
700 | ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc); | 700 | ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc); |
701 | for(i = 0; i < 6; i++) { | 701 | for(i = 0; i < 6; i++) { |
@@ -786,14 +786,14 @@ static int ibmveth_poll(struct net_device *netdev, int *budget) | |||
786 | /* we think we are done - reenable interrupts, then check once more to make sure we are done */ | 786 | /* we think we are done - reenable interrupts, then check once more to make sure we are done */ |
787 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_ENABLE); | 787 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_ENABLE); |
788 | 788 | ||
789 | ibmveth_assert(lpar_rc == H_Success); | 789 | ibmveth_assert(lpar_rc == H_SUCCESS); |
790 | 790 | ||
791 | netif_rx_complete(netdev); | 791 | netif_rx_complete(netdev); |
792 | 792 | ||
793 | if(ibmveth_rxq_pending_buffer(adapter) && netif_rx_reschedule(netdev, frames_processed)) | 793 | if(ibmveth_rxq_pending_buffer(adapter) && netif_rx_reschedule(netdev, frames_processed)) |
794 | { | 794 | { |
795 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); | 795 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); |
796 | ibmveth_assert(lpar_rc == H_Success); | 796 | ibmveth_assert(lpar_rc == H_SUCCESS); |
797 | more_work = 1; | 797 | more_work = 1; |
798 | goto restart_poll; | 798 | goto restart_poll; |
799 | } | 799 | } |
@@ -813,7 +813,7 @@ static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance, struct pt_regs | |||
813 | 813 | ||
814 | if(netif_rx_schedule_prep(netdev)) { | 814 | if(netif_rx_schedule_prep(netdev)) { |
815 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); | 815 | lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE); |
816 | ibmveth_assert(lpar_rc == H_Success); | 816 | ibmveth_assert(lpar_rc == H_SUCCESS); |
817 | __netif_rx_schedule(netdev); | 817 | __netif_rx_schedule(netdev); |
818 | } | 818 | } |
819 | return IRQ_HANDLED; | 819 | return IRQ_HANDLED; |
@@ -835,7 +835,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev) | |||
835 | IbmVethMcastEnableRecv | | 835 | IbmVethMcastEnableRecv | |
836 | IbmVethMcastDisableFiltering, | 836 | IbmVethMcastDisableFiltering, |
837 | 0); | 837 | 0); |
838 | if(lpar_rc != H_Success) { | 838 | if(lpar_rc != H_SUCCESS) { |
839 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when entering promisc mode\n", lpar_rc); | 839 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when entering promisc mode\n", lpar_rc); |
840 | } | 840 | } |
841 | } else { | 841 | } else { |
@@ -847,7 +847,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev) | |||
847 | IbmVethMcastDisableFiltering | | 847 | IbmVethMcastDisableFiltering | |
848 | IbmVethMcastClearFilterTable, | 848 | IbmVethMcastClearFilterTable, |
849 | 0); | 849 | 0); |
850 | if(lpar_rc != H_Success) { | 850 | if(lpar_rc != H_SUCCESS) { |
851 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when attempting to clear filter table\n", lpar_rc); | 851 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when attempting to clear filter table\n", lpar_rc); |
852 | } | 852 | } |
853 | /* add the addresses to the filter table */ | 853 | /* add the addresses to the filter table */ |
@@ -858,7 +858,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev) | |||
858 | lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, | 858 | lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, |
859 | IbmVethMcastAddFilter, | 859 | IbmVethMcastAddFilter, |
860 | mcast_addr); | 860 | mcast_addr); |
861 | if(lpar_rc != H_Success) { | 861 | if(lpar_rc != H_SUCCESS) { |
862 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc); | 862 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc); |
863 | } | 863 | } |
864 | } | 864 | } |
@@ -867,7 +867,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev) | |||
867 | lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, | 867 | lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address, |
868 | IbmVethMcastEnableFiltering, | 868 | IbmVethMcastEnableFiltering, |
869 | 0); | 869 | 0); |
870 | if(lpar_rc != H_Success) { | 870 | if(lpar_rc != H_SUCCESS) { |
871 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when enabling filtering\n", lpar_rc); | 871 | ibmveth_error_printk("h_multicast_ctrl rc=%ld when enabling filtering\n", lpar_rc); |
872 | } | 872 | } |
873 | } | 873 | } |
diff --git a/drivers/scsi/ibmvscsi/rpa_vscsi.c b/drivers/scsi/ibmvscsi/rpa_vscsi.c index f47dd87c05e7..892e8ed63091 100644 --- a/drivers/scsi/ibmvscsi/rpa_vscsi.c +++ b/drivers/scsi/ibmvscsi/rpa_vscsi.c | |||
@@ -80,7 +80,7 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue, | |||
80 | tasklet_kill(&hostdata->srp_task); | 80 | tasklet_kill(&hostdata->srp_task); |
81 | do { | 81 | do { |
82 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 82 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
83 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 83 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
84 | dma_unmap_single(hostdata->dev, | 84 | dma_unmap_single(hostdata->dev, |
85 | queue->msg_token, | 85 | queue->msg_token, |
86 | queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL); | 86 | queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL); |
@@ -230,7 +230,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
230 | rc = plpar_hcall_norets(H_REG_CRQ, | 230 | rc = plpar_hcall_norets(H_REG_CRQ, |
231 | vdev->unit_address, | 231 | vdev->unit_address, |
232 | queue->msg_token, PAGE_SIZE); | 232 | queue->msg_token, PAGE_SIZE); |
233 | if (rc == H_Resource) | 233 | if (rc == H_RESOURCE) |
234 | /* maybe kexecing and resource is busy. try a reset */ | 234 | /* maybe kexecing and resource is busy. try a reset */ |
235 | rc = ibmvscsi_reset_crq_queue(queue, | 235 | rc = ibmvscsi_reset_crq_queue(queue, |
236 | hostdata); | 236 | hostdata); |
@@ -269,7 +269,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
269 | req_irq_failed: | 269 | req_irq_failed: |
270 | do { | 270 | do { |
271 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 271 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
272 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 272 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
273 | reg_crq_failed: | 273 | reg_crq_failed: |
274 | dma_unmap_single(hostdata->dev, | 274 | dma_unmap_single(hostdata->dev, |
275 | queue->msg_token, | 275 | queue->msg_token, |
@@ -295,7 +295,7 @@ int ibmvscsi_reenable_crq_queue(struct crq_queue *queue, | |||
295 | /* Re-enable the CRQ */ | 295 | /* Re-enable the CRQ */ |
296 | do { | 296 | do { |
297 | rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address); | 297 | rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address); |
298 | } while ((rc == H_InProgress) || (rc == H_Busy) || (H_isLongBusy(rc))); | 298 | } while ((rc == H_IN_PROGRESS) || (rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
299 | 299 | ||
300 | if (rc) | 300 | if (rc) |
301 | printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc); | 301 | printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc); |
@@ -317,7 +317,7 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue, | |||
317 | /* Close the CRQ */ | 317 | /* Close the CRQ */ |
318 | do { | 318 | do { |
319 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 319 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
320 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 320 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
321 | 321 | ||
322 | /* Clean out the queue */ | 322 | /* Clean out the queue */ |
323 | memset(queue->msgs, 0x00, PAGE_SIZE); | 323 | memset(queue->msgs, 0x00, PAGE_SIZE); |
diff --git a/include/asm-powerpc/eeh.h b/include/asm-powerpc/eeh.h index 5207758a6dd9..868c7139dbff 100644 --- a/include/asm-powerpc/eeh.h +++ b/include/asm-powerpc/eeh.h | |||
@@ -60,24 +60,10 @@ void __init pci_addr_cache_build(void); | |||
60 | * device (including config space i/o). Call eeh_add_device_late | 60 | * device (including config space i/o). Call eeh_add_device_late |
61 | * to finish the eeh setup for this device. | 61 | * to finish the eeh setup for this device. |
62 | */ | 62 | */ |
63 | void eeh_add_device_early(struct device_node *); | ||
64 | void eeh_add_device_late(struct pci_dev *dev); | ||
65 | void eeh_add_device_tree_early(struct device_node *); | 63 | void eeh_add_device_tree_early(struct device_node *); |
66 | void eeh_add_device_tree_late(struct pci_bus *); | 64 | void eeh_add_device_tree_late(struct pci_bus *); |
67 | 65 | ||
68 | /** | 66 | /** |
69 | * eeh_remove_device - undo EEH setup for the indicated pci device | ||
70 | * @dev: pci device to be removed | ||
71 | * | ||
72 | * This routine should be called when a device is removed from | ||
73 | * a running system (e.g. by hotplug or dlpar). It unregisters | ||
74 | * the PCI device from the EEH subsystem. I/O errors affecting | ||
75 | * this device will no longer be detected after this call; thus, | ||
76 | * i/o errors affecting this slot may leave this device unusable. | ||
77 | */ | ||
78 | void eeh_remove_device(struct pci_dev *); | ||
79 | |||
80 | /** | ||
81 | * eeh_remove_device_recursive - undo EEH for device & children. | 67 | * eeh_remove_device_recursive - undo EEH for device & children. |
82 | * @dev: pci device to be removed | 68 | * @dev: pci device to be removed |
83 | * | 69 | * |
@@ -116,12 +102,6 @@ static inline int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *d | |||
116 | 102 | ||
117 | static inline void pci_addr_cache_build(void) { } | 103 | static inline void pci_addr_cache_build(void) { } |
118 | 104 | ||
119 | static inline void eeh_add_device_early(struct device_node *dn) { } | ||
120 | |||
121 | static inline void eeh_add_device_late(struct pci_dev *dev) { } | ||
122 | |||
123 | static inline void eeh_remove_device(struct pci_dev *dev) { } | ||
124 | |||
125 | static inline void eeh_add_device_tree_early(struct device_node *dn) { } | 105 | static inline void eeh_add_device_tree_early(struct device_node *dn) { } |
126 | 106 | ||
127 | static inline void eeh_add_device_tree_late(struct pci_bus *bus) { } | 107 | static inline void eeh_add_device_tree_late(struct pci_bus *bus) { } |
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index b72c04f3f551..6cc7e1fb7bfd 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -4,47 +4,88 @@ | |||
4 | 4 | ||
5 | #define HVSC .long 0x44000022 | 5 | #define HVSC .long 0x44000022 |
6 | 6 | ||
7 | #define H_Success 0 | 7 | #define H_SUCCESS 0 |
8 | #define H_Busy 1 /* Hardware busy -- retry later */ | 8 | #define H_BUSY 1 /* Hardware busy -- retry later */ |
9 | #define H_Closed 2 /* Resource closed */ | 9 | #define H_CLOSED 2 /* Resource closed */ |
10 | #define H_Constrained 4 /* Resource request constrained to max allowed */ | 10 | #define H_NOT_AVAILABLE 3 |
11 | #define H_InProgress 14 /* Kind of like busy */ | 11 | #define H_CONSTRAINED 4 /* Resource request constrained to max allowed */ |
12 | #define H_Pending 17 /* returned from H_POLL_PENDING */ | 12 | #define H_PARTIAL 5 |
13 | #define H_Continue 18 /* Returned from H_Join on success */ | 13 | #define H_IN_PROGRESS 14 /* Kind of like busy */ |
14 | #define H_LongBusyStartRange 9900 /* Start of long busy range */ | 14 | #define H_PAGE_REGISTERED 15 |
15 | #define H_LongBusyOrder1msec 9900 /* Long busy, hint that 1msec is a good time to retry */ | 15 | #define H_PARTIAL_STORE 16 |
16 | #define H_LongBusyOrder10msec 9901 /* Long busy, hint that 10msec is a good time to retry */ | 16 | #define H_PENDING 17 /* returned from H_POLL_PENDING */ |
17 | #define H_LongBusyOrder100msec 9902 /* Long busy, hint that 100msec is a good time to retry */ | 17 | #define H_CONTINUE 18 /* Returned from H_Join on success */ |
18 | #define H_LongBusyOrder1sec 9903 /* Long busy, hint that 1sec is a good time to retry */ | 18 | #define H_LONG_BUSY_START_RANGE 9900 /* Start of long busy range */ |
19 | #define H_LongBusyOrder10sec 9904 /* Long busy, hint that 10sec is a good time to retry */ | 19 | #define H_LONG_BUSY_ORDER_1_MSEC 9900 /* Long busy, hint that 1msec \ |
20 | #define H_LongBusyOrder100sec 9905 /* Long busy, hint that 100sec is a good time to retry */ | 20 | is a good time to retry */ |
21 | #define H_LongBusyEndRange 9905 /* End of long busy range */ | 21 | #define H_LONG_BUSY_ORDER_10_MSEC 9901 /* Long busy, hint that 10msec \ |
22 | #define H_Hardware -1 /* Hardware error */ | 22 | is a good time to retry */ |
23 | #define H_Function -2 /* Function not supported */ | 23 | #define H_LONG_BUSY_ORDER_100_MSEC 9902 /* Long busy, hint that 100msec \ |
24 | #define H_Privilege -3 /* Caller not privileged */ | 24 | is a good time to retry */ |
25 | #define H_Parameter -4 /* Parameter invalid, out-of-range or conflicting */ | 25 | #define H_LONG_BUSY_ORDER_1_SEC 9903 /* Long busy, hint that 1sec \ |
26 | #define H_Bad_Mode -5 /* Illegal msr value */ | 26 | is a good time to retry */ |
27 | #define H_PTEG_Full -6 /* PTEG is full */ | 27 | #define H_LONG_BUSY_ORDER_10_SEC 9904 /* Long busy, hint that 10sec \ |
28 | #define H_Not_Found -7 /* PTE was not found" */ | 28 | is a good time to retry */ |
29 | #define H_Reserved_DABR -8 /* DABR address is reserved by the hypervisor on this processor" */ | 29 | #define H_LONG_BUSY_ORDER_100_SEC 9905 /* Long busy, hint that 100sec \ |
30 | #define H_NoMem -9 | 30 | is a good time to retry */ |
31 | #define H_Authority -10 | 31 | #define H_LONG_BUSY_END_RANGE 9905 /* End of long busy range */ |
32 | #define H_Permission -11 | 32 | #define H_HARDWARE -1 /* Hardware error */ |
33 | #define H_Dropped -12 | 33 | #define H_FUNCTION -2 /* Function not supported */ |
34 | #define H_SourceParm -13 | 34 | #define H_PRIVILEGE -3 /* Caller not privileged */ |
35 | #define H_DestParm -14 | 35 | #define H_PARAMETER -4 /* Parameter invalid, out-of-range or conflicting */ |
36 | #define H_RemoteParm -15 | 36 | #define H_BAD_MODE -5 /* Illegal msr value */ |
37 | #define H_Resource -16 | 37 | #define H_PTEG_FULL -6 /* PTEG is full */ |
38 | #define H_NOT_FOUND -7 /* PTE was not found" */ | ||
39 | #define H_RESERVED_DABR -8 /* DABR address is reserved by the hypervisor on this processor" */ | ||
40 | #define H_NO_MEM -9 | ||
41 | #define H_AUTHORITY -10 | ||
42 | #define H_PERMISSION -11 | ||
43 | #define H_DROPPED -12 | ||
44 | #define H_SOURCE_PARM -13 | ||
45 | #define H_DEST_PARM -14 | ||
46 | #define H_REMOTE_PARM -15 | ||
47 | #define H_RESOURCE -16 | ||
48 | #define H_ADAPTER_PARM -17 | ||
49 | #define H_RH_PARM -18 | ||
50 | #define H_RCQ_PARM -19 | ||
51 | #define H_SCQ_PARM -20 | ||
52 | #define H_EQ_PARM -21 | ||
53 | #define H_RT_PARM -22 | ||
54 | #define H_ST_PARM -23 | ||
55 | #define H_SIGT_PARM -24 | ||
56 | #define H_TOKEN_PARM -25 | ||
57 | #define H_MLENGTH_PARM -27 | ||
58 | #define H_MEM_PARM -28 | ||
59 | #define H_MEM_ACCESS_PARM -29 | ||
60 | #define H_ATTR_PARM -30 | ||
61 | #define H_PORT_PARM -31 | ||
62 | #define H_MCG_PARM -32 | ||
63 | #define H_VL_PARM -33 | ||
64 | #define H_TSIZE_PARM -34 | ||
65 | #define H_TRACE_PARM -35 | ||
66 | |||
67 | #define H_MASK_PARM -37 | ||
68 | #define H_MCG_FULL -38 | ||
69 | #define H_ALIAS_EXIST -39 | ||
70 | #define H_P_COUNTER -40 | ||
71 | #define H_TABLE_FULL -41 | ||
72 | #define H_ALT_TABLE -42 | ||
73 | #define H_MR_CONDITION -43 | ||
74 | #define H_NOT_ENOUGH_RESOURCES -44 | ||
75 | #define H_R_STATE -45 | ||
76 | #define H_RESCINDEND -46 | ||
77 | |||
38 | 78 | ||
39 | /* Long Busy is a condition that can be returned by the firmware | 79 | /* Long Busy is a condition that can be returned by the firmware |
40 | * when a call cannot be completed now, but the identical call | 80 | * when a call cannot be completed now, but the identical call |
41 | * should be retried later. This prevents calls blocking in the | 81 | * should be retried later. This prevents calls blocking in the |
42 | * firmware for long periods of time. Annoyingly the firmware can return | 82 | * firmware for long periods of time. Annoyingly the firmware can return |
43 | * a range of return codes, hinting at how long we should wait before | 83 | * a range of return codes, hinting at how long we should wait before |
44 | * retrying. If you don't care for the hint, the macro below is a good | 84 | * retrying. If you don't care for the hint, the macro below is a good |
45 | * way to check for the long_busy return codes | 85 | * way to check for the long_busy return codes |
46 | */ | 86 | */ |
47 | #define H_isLongBusy(x) ((x >= H_LongBusyStartRange) && (x <= H_LongBusyEndRange)) | 87 | #define H_IS_LONG_BUSY(x) ((x >= H_LONG_BUSY_START_RANGE) \ |
88 | && (x <= H_LONG_BUSY_END_RANGE)) | ||
48 | 89 | ||
49 | /* Flags */ | 90 | /* Flags */ |
50 | #define H_LARGE_PAGE (1UL<<(63-16)) | 91 | #define H_LARGE_PAGE (1UL<<(63-16)) |
@@ -66,6 +107,9 @@ | |||
66 | #define H_DABRX_KERNEL (1UL<<(63-62)) | 107 | #define H_DABRX_KERNEL (1UL<<(63-62)) |
67 | #define H_DABRX_USER (1UL<<(63-63)) | 108 | #define H_DABRX_USER (1UL<<(63-63)) |
68 | 109 | ||
110 | /* Each control block has to be on a 4K bondary */ | ||
111 | #define H_CB_ALIGNMENT 4096 | ||
112 | |||
69 | /* pSeries hypervisor opcodes */ | 113 | /* pSeries hypervisor opcodes */ |
70 | #define H_REMOVE 0x04 | 114 | #define H_REMOVE 0x04 |
71 | #define H_ENTER 0x08 | 115 | #define H_ENTER 0x08 |
@@ -99,25 +143,52 @@ | |||
99 | #define H_PERFMON 0x7c | 143 | #define H_PERFMON 0x7c |
100 | #define H_MIGRATE_DMA 0x78 | 144 | #define H_MIGRATE_DMA 0x78 |
101 | #define H_REGISTER_VPA 0xDC | 145 | #define H_REGISTER_VPA 0xDC |
102 | #define H_CEDE 0xE0 | 146 | #define H_CEDE 0xE0 |
103 | #define H_CONFER 0xE4 | 147 | #define H_CONFER 0xE4 |
104 | #define H_PROD 0xE8 | 148 | #define H_PROD 0xE8 |
105 | #define H_GET_PPP 0xEC | 149 | #define H_GET_PPP 0xEC |
106 | #define H_SET_PPP 0xF0 | 150 | #define H_SET_PPP 0xF0 |
107 | #define H_PURR 0xF4 | 151 | #define H_PURR 0xF4 |
108 | #define H_PIC 0xF8 | 152 | #define H_PIC 0xF8 |
109 | #define H_REG_CRQ 0xFC | 153 | #define H_REG_CRQ 0xFC |
110 | #define H_FREE_CRQ 0x100 | 154 | #define H_FREE_CRQ 0x100 |
111 | #define H_VIO_SIGNAL 0x104 | 155 | #define H_VIO_SIGNAL 0x104 |
112 | #define H_SEND_CRQ 0x108 | 156 | #define H_SEND_CRQ 0x108 |
113 | #define H_COPY_RDMA 0x110 | 157 | #define H_COPY_RDMA 0x110 |
114 | #define H_SET_XDABR 0x134 | 158 | #define H_SET_XDABR 0x134 |
115 | #define H_STUFF_TCE 0x138 | 159 | #define H_STUFF_TCE 0x138 |
116 | #define H_PUT_TCE_INDIRECT 0x13C | 160 | #define H_PUT_TCE_INDIRECT 0x13C |
117 | #define H_VTERM_PARTNER_INFO 0x150 | 161 | #define H_VTERM_PARTNER_INFO 0x150 |
118 | #define H_REGISTER_VTERM 0x154 | 162 | #define H_REGISTER_VTERM 0x154 |
119 | #define H_FREE_VTERM 0x158 | 163 | #define H_FREE_VTERM 0x158 |
120 | #define H_POLL_PENDING 0x1D8 | 164 | #define H_RESET_EVENTS 0x15C |
165 | #define H_ALLOC_RESOURCE 0x160 | ||
166 | #define H_FREE_RESOURCE 0x164 | ||
167 | #define H_MODIFY_QP 0x168 | ||
168 | #define H_QUERY_QP 0x16C | ||
169 | #define H_REREGISTER_PMR 0x170 | ||
170 | #define H_REGISTER_SMR 0x174 | ||
171 | #define H_QUERY_MR 0x178 | ||
172 | #define H_QUERY_MW 0x17C | ||
173 | #define H_QUERY_HCA 0x180 | ||
174 | #define H_QUERY_PORT 0x184 | ||
175 | #define H_MODIFY_PORT 0x188 | ||
176 | #define H_DEFINE_AQP1 0x18C | ||
177 | #define H_GET_TRACE_BUFFER 0x190 | ||
178 | #define H_DEFINE_AQP0 0x194 | ||
179 | #define H_RESIZE_MR 0x198 | ||
180 | #define H_ATTACH_MCQP 0x19C | ||
181 | #define H_DETACH_MCQP 0x1A0 | ||
182 | #define H_CREATE_RPT 0x1A4 | ||
183 | #define H_REMOVE_RPT 0x1A8 | ||
184 | #define H_REGISTER_RPAGES 0x1AC | ||
185 | #define H_DISABLE_AND_GETC 0x1B0 | ||
186 | #define H_ERROR_DATA 0x1B4 | ||
187 | #define H_GET_HCA_INFO 0x1B8 | ||
188 | #define H_GET_PERF_COUNT 0x1BC | ||
189 | #define H_MANAGE_TRACE 0x1C0 | ||
190 | #define H_QUERY_INT_STATE 0x1E4 | ||
191 | #define H_POLL_PENDING 0x1D8 | ||
121 | #define H_JOIN 0x298 | 192 | #define H_JOIN 0x298 |
122 | #define H_ENABLE_CRQ 0x2B0 | 193 | #define H_ENABLE_CRQ 0x2B0 |
123 | 194 | ||
@@ -152,7 +223,7 @@ long plpar_hcall_norets(unsigned long opcode, ...); | |||
152 | */ | 223 | */ |
153 | long plpar_hcall_8arg_2ret(unsigned long opcode, | 224 | long plpar_hcall_8arg_2ret(unsigned long opcode, |
154 | unsigned long arg1, | 225 | unsigned long arg1, |
155 | unsigned long arg2, | 226 | unsigned long arg2, |
156 | unsigned long arg3, | 227 | unsigned long arg3, |
157 | unsigned long arg4, | 228 | unsigned long arg4, |
158 | unsigned long arg5, | 229 | unsigned long arg5, |
@@ -176,6 +247,42 @@ long plpar_hcall_4out(unsigned long opcode, | |||
176 | unsigned long *out3, | 247 | unsigned long *out3, |
177 | unsigned long *out4); | 248 | unsigned long *out4); |
178 | 249 | ||
250 | long plpar_hcall_7arg_7ret(unsigned long opcode, | ||
251 | unsigned long arg1, | ||
252 | unsigned long arg2, | ||
253 | unsigned long arg3, | ||
254 | unsigned long arg4, | ||
255 | unsigned long arg5, | ||
256 | unsigned long arg6, | ||
257 | unsigned long arg7, | ||
258 | unsigned long *out1, | ||
259 | unsigned long *out2, | ||
260 | unsigned long *out3, | ||
261 | unsigned long *out4, | ||
262 | unsigned long *out5, | ||
263 | unsigned long *out6, | ||
264 | unsigned long *out7); | ||
265 | |||
266 | long plpar_hcall_9arg_9ret(unsigned long opcode, | ||
267 | unsigned long arg1, | ||
268 | unsigned long arg2, | ||
269 | unsigned long arg3, | ||
270 | unsigned long arg4, | ||
271 | unsigned long arg5, | ||
272 | unsigned long arg6, | ||
273 | unsigned long arg7, | ||
274 | unsigned long arg8, | ||
275 | unsigned long arg9, | ||
276 | unsigned long *out1, | ||
277 | unsigned long *out2, | ||
278 | unsigned long *out3, | ||
279 | unsigned long *out4, | ||
280 | unsigned long *out5, | ||
281 | unsigned long *out6, | ||
282 | unsigned long *out7, | ||
283 | unsigned long *out8, | ||
284 | unsigned long *out9); | ||
285 | |||
179 | #endif /* __ASSEMBLY__ */ | 286 | #endif /* __ASSEMBLY__ */ |
180 | #endif /* __KERNEL__ */ | 287 | #endif /* __KERNEL__ */ |
181 | #endif /* _ASM_POWERPC_HVCALL_H */ | 288 | #endif /* _ASM_POWERPC_HVCALL_H */ |