| /* |
| * This file contains miscellaneous low-level functions. |
| * Copyright (C) 1995-2005 IBM Corp |
| * |
| * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) |
| * and Paul Mackerras. |
| * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com) |
| * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version |
| * 2 of the License, or (at your option) any later version. |
| */ |
| |
| #include <asm/processor.h> |
| #include <asm/asm-offsets.h> |
| #include <asm/ppc_asm.h> |
| |
| .text |
| |
| /* unsigned long local_save_flags(void) */ |
| _GLOBAL(local_get_flags) |
| lbz r3,PACAPROCENABLED(r13) |
| blr |
| |
| /* unsigned long local_irq_disable(void) */ |
| _GLOBAL(local_irq_disable) |
| lbz r3,PACAPROCENABLED(r13) |
| li r4,0 |
| stb r4,PACAPROCENABLED(r13) |
| blr /* Done */ |
| |
| /* void local_irq_restore(unsigned long flags) */ |
| _GLOBAL(local_irq_restore) |
| lbz r5,PACAPROCENABLED(r13) |
| /* Check if things are setup the way we want _already_. */ |
| cmpw 0,r3,r5 |
| beqlr |
| /* are we enabling interrupts? */ |
| cmpdi 0,r3,0 |
| stb r3,PACAPROCENABLED(r13) |
| beqlr |
| /* Check pending interrupts */ |
| /* A decrementer, IPI or PMC interrupt may have occurred |
| * while we were in the hypervisor (which enables) */ |
| ld r4,PACALPPACAPTR(r13) |
| ld r4,LPPACAANYINT(r4) |
| cmpdi r4,0 |
| beqlr |
| |
| /* |
| * Handle pending interrupts in interrupt context |
| */ |
| li r0,0x5555 |
| sc |
| blr |