#include <linux/segment.h>#include <linux/linkage.h>Go to the source code of this file.
Defines | |
| #define | __STR(x) #x |
| #define | STR(x) __STR(x) |
| #define | SAVE_ALL |
| #define | SAVE_MOST |
| #define | RESTORE_MOST |
| #define | ACK_FIRST(mask) |
| #define | ACK_SECOND(mask) |
| #define | UNBLK_FIRST(mask) |
| #define | UNBLK_SECOND(mask) |
| #define | IRQ_NAME2(nr) nr##_interrupt(void) |
| #define | IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) |
| #define | FAST_IRQ_NAME(nr) IRQ_NAME2(fast_IRQ##nr) |
| #define | BAD_IRQ_NAME(nr) IRQ_NAME2(bad_IRQ##nr) |
| #define | BUILD_IRQ(chip, nr, mask) |
Functions | |
| void | disable_irq (unsigned int) |
| void | enable_irq (unsigned int) |
| #define ACK_FIRST | ( | mask | ) |
Value:
"inb $0x21,%al\n\t" \ "jmp 1f\n" \ "1:\tjmp 1f\n" \ "1:\torb $" #mask ",_cache_21\n\t" \ "movb _cache_21,%al\n\t" \ "outb %al,$0x21\n\t" \ "jmp 1f\n" \ "1:\tjmp 1f\n" \ "1:\tmovb $0x20,%al\n\t" \ "outb %al,$0x20\n\t"
| #define ACK_SECOND | ( | mask | ) |
Value:
"inb $0xA1,%al\n\t" \ "jmp 1f\n" \ "1:\tjmp 1f\n" \ "1:\torb $" #mask ",_cache_A1\n\t" \ "movb _cache_A1,%al\n\t" \ "outb %al,$0xA1\n\t" \ "jmp 1f\n" \ "1:\tjmp 1f\n" \ "1:\tmovb $0x20,%al\n\t" \ "outb %al,$0xA0\n\t" \ "jmp 1f\n" \ "1:\tjmp 1f\n" \ "1:\toutb %al,$0x20\n\t"
| #define RESTORE_MOST |
| #define SAVE_ALL |
Value:
"cld\n\t" \ "push %gs\n\t" \ "push %fs\n\t" \ "push %es\n\t" \ "push %ds\n\t" \ "pushl %eax\n\t" \ "pushl %ebp\n\t" \ "pushl %edi\n\t" \ "pushl %esi\n\t" \ "pushl %edx\n\t" \ "pushl %ecx\n\t" \ "pushl %ebx\n\t" \ "movl $" STR(KERNEL_DS) ",%edx\n\t" \ "mov %dx,%ds\n\t" \ "mov %dx,%es\n\t" \ "movl $" STR(USER_DS) ",%edx\n\t" \ "mov %dx,%fs\n\t" \ "movl $0,%edx\n\t" \ "movl %edx,%db7\n\t"
| #define SAVE_MOST |
Value:
"cld\n\t" \ "push %es\n\t" \ "push %ds\n\t" \ "pushl %eax\n\t" \ "pushl %edx\n\t" \ "pushl %ecx\n\t" \ "movl $" STR(KERNEL_DS) ",%edx\n\t" \ "mov %dx,%ds\n\t" \ "mov %dx,%es\n\t"
Also note that we actually save only those registers that are used in C subroutines (eax, edx and ecx), so if you do something weird, you're on your own. The only segments that are saved (not counting the automatic stack and code segment handling) are ds and es, and they point to kernel space. No messing around with fs here.
| #define UNBLK_FIRST | ( | mask | ) |
| #define UNBLK_SECOND | ( | mask | ) |
| void disable_irq | ( | unsigned | int | ) |
linux/include/asm/irq.h
(C) 1992, 1993 Linus Torvalds
| void enable_irq | ( | unsigned | int | ) |
1.4.6-5