irqflags.h
来自「linux 内核源代码」· C头文件 代码 · 共 133 行
H
133 行
#ifndef __ASM_ARM_IRQFLAGS_H#define __ASM_ARM_IRQFLAGS_H#ifdef __KERNEL__#include <asm/ptrace.h>/* * CPU interrupt mask handling. */#if __LINUX_ARM_ARCH__ >= 6#define raw_local_irq_save(x) \ ({ \ __asm__ __volatile__( \ "mrs %0, cpsr @ local_irq_save\n" \ "cpsid i" \ : "=r" (x) : : "memory", "cc"); \ })#define raw_local_irq_enable() __asm__("cpsie i @ __sti" : : : "memory", "cc")#define raw_local_irq_disable() __asm__("cpsid i @ __cli" : : : "memory", "cc")#define local_fiq_enable() __asm__("cpsie f @ __stf" : : : "memory", "cc")#define local_fiq_disable() __asm__("cpsid f @ __clf" : : : "memory", "cc")#else/* * Save the current interrupt enable state & disable IRQs */#define raw_local_irq_save(x) \ ({ \ unsigned long temp; \ (void) (&temp == &x); \ __asm__ __volatile__( \ "mrs %0, cpsr @ local_irq_save\n" \" orr %1, %0, #128\n" \" msr cpsr_c, %1" \ : "=r" (x), "=r" (temp) \ : \ : "memory", "cc"); \ }) /* * Enable IRQs */#define raw_local_irq_enable() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ "mrs %0, cpsr @ local_irq_enable\n" \" bic %0, %0, #128\n" \" msr cpsr_c, %0" \ : "=r" (temp) \ : \ : "memory", "cc"); \ })/* * Disable IRQs */#define raw_local_irq_disable() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ "mrs %0, cpsr @ local_irq_disable\n" \" orr %0, %0, #128\n" \" msr cpsr_c, %0" \ : "=r" (temp) \ : \ : "memory", "cc"); \ })/* * Enable FIQs */#define local_fiq_enable() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ "mrs %0, cpsr @ stf\n" \" bic %0, %0, #64\n" \" msr cpsr_c, %0" \ : "=r" (temp) \ : \ : "memory", "cc"); \ })/* * Disable FIQs */#define local_fiq_disable() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \ "mrs %0, cpsr @ clf\n" \" orr %0, %0, #64\n" \" msr cpsr_c, %0" \ : "=r" (temp) \ : \ : "memory", "cc"); \ })#endif/* * Save the current interrupt enable state. */#define raw_local_save_flags(x) \ ({ \ __asm__ __volatile__( \ "mrs %0, cpsr @ local_save_flags" \ : "=r" (x) : : "memory", "cc"); \ })/* * restore saved IRQ & FIQ state */#define raw_local_irq_restore(x) \ __asm__ __volatile__( \ "msr cpsr_c, %0 @ local_irq_restore\n" \ : \ : "r" (x) \ : "memory", "cc")#define raw_irqs_disabled_flags(flags) \({ \ (int)((flags) & PSR_I_BIT); \})#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?