Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.32 123 lines 2.8 kB view raw
1/* 2 * Copyright (C) 2006 Atmark Techno, Inc. 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file "COPYING" in the main directory of this archive 6 * for more details. 7 */ 8 9#ifndef _ASM_MICROBLAZE_IRQFLAGS_H 10#define _ASM_MICROBLAZE_IRQFLAGS_H 11 12#include <linux/irqflags.h> 13 14# if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR 15 16# define local_irq_save(flags) \ 17 do { \ 18 asm volatile ("# local_irq_save \n\t" \ 19 "msrclr %0, %1 \n\t" \ 20 "nop \n\t" \ 21 : "=r"(flags) \ 22 : "i"(MSR_IE) \ 23 : "memory"); \ 24 } while (0) 25 26# define local_irq_disable() \ 27 do { \ 28 asm volatile ("# local_irq_disable \n\t" \ 29 "msrclr r0, %0 \n\t" \ 30 "nop \n\t" \ 31 : \ 32 : "i"(MSR_IE) \ 33 : "memory"); \ 34 } while (0) 35 36# define local_irq_enable() \ 37 do { \ 38 asm volatile ("# local_irq_enable \n\t" \ 39 "msrset r0, %0 \n\t" \ 40 "nop \n\t" \ 41 : \ 42 : "i"(MSR_IE) \ 43 : "memory"); \ 44 } while (0) 45 46# else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ 47 48# define local_irq_save(flags) \ 49 do { \ 50 register unsigned tmp; \ 51 asm volatile ("# local_irq_save \n\t" \ 52 "mfs %0, rmsr \n\t" \ 53 "nop \n\t" \ 54 "andi %1, %0, %2 \n\t" \ 55 "mts rmsr, %1 \n\t" \ 56 "nop \n\t" \ 57 : "=r"(flags), "=r" (tmp) \ 58 : "i"(~MSR_IE) \ 59 : "memory"); \ 60 } while (0) 61 62# define local_irq_disable() \ 63 do { \ 64 register unsigned tmp; \ 65 asm volatile ("# local_irq_disable \n\t" \ 66 "mfs %0, rmsr \n\t" \ 67 "nop \n\t" \ 68 "andi %0, %0, %1 \n\t" \ 69 "mts rmsr, %0 \n\t" \ 70 "nop \n\t" \ 71 : "=r"(tmp) \ 72 : "i"(~MSR_IE) \ 73 : "memory"); \ 74 } while (0) 75 76# define local_irq_enable() \ 77 do { \ 78 register unsigned tmp; \ 79 asm volatile ("# local_irq_enable \n\t" \ 80 "mfs %0, rmsr \n\t" \ 81 "nop \n\t" \ 82 "ori %0, %0, %1 \n\t" \ 83 "mts rmsr, %0 \n\t" \ 84 "nop \n\t" \ 85 : "=r"(tmp) \ 86 : "i"(MSR_IE) \ 87 : "memory"); \ 88 } while (0) 89 90# endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ 91 92#define local_save_flags(flags) \ 93 do { \ 94 asm volatile ("# local_save_flags \n\t" \ 95 "mfs %0, rmsr \n\t" \ 96 "nop \n\t" \ 97 : "=r"(flags) \ 98 : \ 99 : "memory"); \ 100 } while (0) 101 102#define local_irq_restore(flags) \ 103 do { \ 104 asm volatile ("# local_irq_restore \n\t"\ 105 "mts rmsr, %0 \n\t" \ 106 "nop \n\t" \ 107 : \ 108 : "r"(flags) \ 109 : "memory"); \ 110 } while (0) 111 112static inline int irqs_disabled(void) 113{ 114 unsigned long flags; 115 116 local_save_flags(flags); 117 return ((flags & MSR_IE) == 0); 118} 119 120#define raw_irqs_disabled irqs_disabled 121#define raw_irqs_disabled_flags(flags) ((flags) == 0) 122 123#endif /* _ASM_MICROBLAZE_IRQFLAGS_H */