diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-06 19:17:37 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-06 19:17:37 -0500 |
commit | 3f5e573a08a369bd10d2f89b63a2d68843f64a6b (patch) | |
tree | 069a5636974c783adc6251f71d71cd2b0aa49cc9 /include | |
parent | 9232d5876e83921414de65d82edd1098258f6680 (diff) | |
parent | 2cafe978462bc4016392aa330bf501a674679a86 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
[MIPS] Import updates from i386's i8259.c
[MIPS] *-berr: Header inclusions for DEC bus error handlers
[MIPS] Compile __do_IRQ() when really needed
[MIPS] genirq: use name instead of typename
[MIPS] Do not use handle_level_irq for ioasic_dma_irq_type.
[MIPS] pte_offset(dir,addr): parenthesis fix
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-mips/i8259.h | 37 | ||||
-rw-r--r-- | include/asm-mips/pgtable-32.h | 6 | ||||
-rw-r--r-- | include/asm-mips/pgtable-64.h | 4 |
3 files changed, 34 insertions, 13 deletions
diff --git a/include/asm-mips/i8259.h b/include/asm-mips/i8259.h index 0214abe3f0af..4df8d8b118c0 100644 --- a/include/asm-mips/i8259.h +++ b/include/asm-mips/i8259.h | |||
@@ -19,10 +19,31 @@ | |||
19 | 19 | ||
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
21 | 21 | ||
22 | /* i8259A PIC registers */ | ||
23 | #define PIC_MASTER_CMD 0x20 | ||
24 | #define PIC_MASTER_IMR 0x21 | ||
25 | #define PIC_MASTER_ISR PIC_MASTER_CMD | ||
26 | #define PIC_MASTER_POLL PIC_MASTER_ISR | ||
27 | #define PIC_MASTER_OCW3 PIC_MASTER_ISR | ||
28 | #define PIC_SLAVE_CMD 0xa0 | ||
29 | #define PIC_SLAVE_IMR 0xa1 | ||
30 | |||
31 | /* i8259A PIC related value */ | ||
32 | #define PIC_CASCADE_IR 2 | ||
33 | #define MASTER_ICW4_DEFAULT 0x01 | ||
34 | #define SLAVE_ICW4_DEFAULT 0x01 | ||
35 | #define PIC_ICW4_AEOI 2 | ||
36 | |||
22 | extern spinlock_t i8259A_lock; | 37 | extern spinlock_t i8259A_lock; |
23 | 38 | ||
39 | extern void init_8259A(int auto_eoi); | ||
40 | extern void enable_8259A_irq(unsigned int irq); | ||
41 | extern void disable_8259A_irq(unsigned int irq); | ||
42 | |||
24 | extern void init_i8259_irqs(void); | 43 | extern void init_i8259_irqs(void); |
25 | 44 | ||
45 | #define I8259A_IRQ_BASE 0 | ||
46 | |||
26 | /* | 47 | /* |
27 | * Do the traditional i8259 interrupt polling thing. This is for the few | 48 | * Do the traditional i8259 interrupt polling thing. This is for the few |
28 | * cases where no better interrupt acknowledge method is available and we | 49 | * cases where no better interrupt acknowledge method is available and we |
@@ -35,15 +56,15 @@ static inline int i8259_irq(void) | |||
35 | spin_lock(&i8259A_lock); | 56 | spin_lock(&i8259A_lock); |
36 | 57 | ||
37 | /* Perform an interrupt acknowledge cycle on controller 1. */ | 58 | /* Perform an interrupt acknowledge cycle on controller 1. */ |
38 | outb(0x0C, 0x20); /* prepare for poll */ | 59 | outb(0x0C, PIC_MASTER_CMD); /* prepare for poll */ |
39 | irq = inb(0x20) & 7; | 60 | irq = inb(PIC_MASTER_CMD) & 7; |
40 | if (irq == 2) { | 61 | if (irq == PIC_CASCADE_IR) { |
41 | /* | 62 | /* |
42 | * Interrupt is cascaded so perform interrupt | 63 | * Interrupt is cascaded so perform interrupt |
43 | * acknowledge on controller 2. | 64 | * acknowledge on controller 2. |
44 | */ | 65 | */ |
45 | outb(0x0C, 0xA0); /* prepare for poll */ | 66 | outb(0x0C, PIC_SLAVE_CMD); /* prepare for poll */ |
46 | irq = (inb(0xA0) & 7) + 8; | 67 | irq = (inb(PIC_SLAVE_CMD) & 7) + 8; |
47 | } | 68 | } |
48 | 69 | ||
49 | if (unlikely(irq == 7)) { | 70 | if (unlikely(irq == 7)) { |
@@ -54,14 +75,14 @@ static inline int i8259_irq(void) | |||
54 | * significant bit is not set then there is no valid | 75 | * significant bit is not set then there is no valid |
55 | * interrupt. | 76 | * interrupt. |
56 | */ | 77 | */ |
57 | outb(0x0B, 0x20); /* ISR register */ | 78 | outb(0x0B, PIC_MASTER_ISR); /* ISR register */ |
58 | if(~inb(0x20) & 0x80) | 79 | if(~inb(PIC_MASTER_ISR) & 0x80) |
59 | irq = -1; | 80 | irq = -1; |
60 | } | 81 | } |
61 | 82 | ||
62 | spin_unlock(&i8259A_lock); | 83 | spin_unlock(&i8259A_lock); |
63 | 84 | ||
64 | return irq; | 85 | return likely(irq >= 0) ? irq + I8259A_IRQ_BASE : irq; |
65 | } | 86 | } |
66 | 87 | ||
67 | #endif /* _ASM_I8259_H */ | 88 | #endif /* _ASM_I8259_H */ |
diff --git a/include/asm-mips/pgtable-32.h b/include/asm-mips/pgtable-32.h index d20f2e9b28be..2fbd47eba32d 100644 --- a/include/asm-mips/pgtable-32.h +++ b/include/asm-mips/pgtable-32.h | |||
@@ -156,9 +156,9 @@ pfn_pte(unsigned long pfn, pgprot_t prot) | |||
156 | #define __pte_offset(address) \ | 156 | #define __pte_offset(address) \ |
157 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 157 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
158 | #define pte_offset(dir, address) \ | 158 | #define pte_offset(dir, address) \ |
159 | ((pte_t *) (pmd_page_vaddr(*dir)) + __pte_offset(address)) | 159 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
160 | #define pte_offset_kernel(dir, address) \ | 160 | #define pte_offset_kernel(dir, address) \ |
161 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) | 161 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
162 | 162 | ||
163 | #define pte_offset_map(dir, address) \ | 163 | #define pte_offset_map(dir, address) \ |
164 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) | 164 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) |
diff --git a/include/asm-mips/pgtable-64.h b/include/asm-mips/pgtable-64.h index b9b1e86493ee..a5b18710b6a4 100644 --- a/include/asm-mips/pgtable-64.h +++ b/include/asm-mips/pgtable-64.h | |||
@@ -212,9 +212,9 @@ static inline pmd_t *pmd_offset(pud_t * pud, unsigned long address) | |||
212 | #define __pte_offset(address) \ | 212 | #define __pte_offset(address) \ |
213 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) | 213 | (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) |
214 | #define pte_offset(dir, address) \ | 214 | #define pte_offset(dir, address) \ |
215 | ((pte_t *) (pmd_page_vaddr(*dir)) + __pte_offset(address)) | 215 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
216 | #define pte_offset_kernel(dir, address) \ | 216 | #define pte_offset_kernel(dir, address) \ |
217 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) | 217 | ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address)) |
218 | #define pte_offset_map(dir, address) \ | 218 | #define pte_offset_map(dir, address) \ |
219 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) | 219 | ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) |
220 | #define pte_offset_map_nested(dir, address) \ | 220 | #define pte_offset_map_nested(dir, address) \ |