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

[PATCH] m68k: cleanup amiga irq numbering

Fix amiga irq numbering, so they are after the generic IRQ_AUTO defines and
remove the IRQ_AMIGA_AUTO defines.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Roman Zippel and committed by
Linus Torvalds
1d174cfb 4facfde9

+80 -97
+38 -36
arch/m68k/amiga/amiints.c
··· 61 61 static irq_node_t *ami_irq_list[AMI_STD_IRQS]; 62 62 63 63 static unsigned short amiga_intena_vals[AMI_STD_IRQS] = { 64 - [IRQ_AMIGA_VERTB] = IF_VERTB, 65 - [IRQ_AMIGA_COPPER] = IF_COPER, 66 - [IRQ_AMIGA_AUD0] = IF_AUD0, 67 - [IRQ_AMIGA_AUD1] = IF_AUD1, 68 - [IRQ_AMIGA_AUD2] = IF_AUD2, 69 - [IRQ_AMIGA_AUD3] = IF_AUD3, 70 - [IRQ_AMIGA_BLIT] = IF_BLIT, 71 - [IRQ_AMIGA_DSKSYN] = IF_DSKSYN, 72 - [IRQ_AMIGA_DSKBLK] = IF_DSKBLK, 73 - [IRQ_AMIGA_RBF] = IF_RBF, 74 - [IRQ_AMIGA_TBE] = IF_TBE, 75 - [IRQ_AMIGA_SOFT] = IF_SOFT, 76 - [IRQ_AMIGA_PORTS] = IF_PORTS, 77 - [IRQ_AMIGA_EXTER] = IF_EXTER 64 + [IRQ_AMIGA_VERTB-IRQ_USER] = IF_VERTB, 65 + [IRQ_AMIGA_COPPER-IRQ_USER] = IF_COPER, 66 + [IRQ_AMIGA_AUD0-IRQ_USER] = IF_AUD0, 67 + [IRQ_AMIGA_AUD1-IRQ_USER] = IF_AUD1, 68 + [IRQ_AMIGA_AUD2-IRQ_USER] = IF_AUD2, 69 + [IRQ_AMIGA_AUD3-IRQ_USER] = IF_AUD3, 70 + [IRQ_AMIGA_BLIT-IRQ_USER] = IF_BLIT, 71 + [IRQ_AMIGA_DSKSYN-IRQ_USER] = IF_DSKSYN, 72 + [IRQ_AMIGA_DSKBLK-IRQ_USER] = IF_DSKBLK, 73 + [IRQ_AMIGA_RBF-IRQ_USER] = IF_RBF, 74 + [IRQ_AMIGA_TBE-IRQ_USER] = IF_TBE, 75 + [IRQ_AMIGA_SOFT-IRQ_USER] = IF_SOFT, 76 + [IRQ_AMIGA_PORTS-IRQ_USER] = IF_PORTS, 77 + [IRQ_AMIGA_EXTER-IRQ_USER] = IF_EXTER 78 78 }; 79 79 static const unsigned char ami_servers[AMI_STD_IRQS] = { 80 - [IRQ_AMIGA_VERTB] = 1, 81 - [IRQ_AMIGA_PORTS] = 1, 82 - [IRQ_AMIGA_EXTER] = 1 80 + [IRQ_AMIGA_VERTB-IRQ_USER] = 1, 81 + [IRQ_AMIGA_PORTS-IRQ_USER] = 1, 82 + [IRQ_AMIGA_EXTER-IRQ_USER] = 1 83 83 }; 84 84 85 85 static short ami_ablecount[AMI_IRQS]; ··· 210 210 return -ENXIO; 211 211 } 212 212 213 - if (irq >= IRQ_AMIGA_AUTO) 214 - return cpu_request_irq(irq - IRQ_AMIGA_AUTO, handler, 215 - flags, devname, dev_id); 213 + if (irq < IRQ_USER) 214 + return cpu_request_irq(irq, handler, flags, devname, dev_id); 216 215 217 216 if (irq >= IRQ_AMIGA_CIAB) 218 217 return cia_request_irq(&ciab_base, irq - IRQ_AMIGA_CIAB, ··· 221 222 return cia_request_irq(&ciaa_base, irq - IRQ_AMIGA_CIAA, 222 223 handler, flags, devname, dev_id); 223 224 225 + irq -= IRQ_USER; 224 226 /* 225 227 * IRQ_AMIGA_PORTS & IRQ_AMIGA_EXTER defaults to shared, 226 228 * we could add a check here for the SA_SHIRQ flag but all drivers ··· 257 257 return; 258 258 } 259 259 260 - if (irq >= IRQ_AMIGA_AUTO) 261 - cpu_free_irq(irq - IRQ_AMIGA_AUTO, dev_id); 260 + if (irq < IRQ_USER) 261 + cpu_free_irq(irq, dev_id); 262 262 263 263 if (irq >= IRQ_AMIGA_CIAB) { 264 264 cia_free_irq(&ciab_base, irq - IRQ_AMIGA_CIAB, dev_id); ··· 270 270 return; 271 271 } 272 272 273 + irq -= IRQ_USER; 273 274 if (ami_servers[irq]) { 274 275 amiga_delete_irq(&ami_irq_list[irq], dev_id); 275 276 /* if server list empty, disable the interrupt */ ··· 307 306 return; 308 307 309 308 /* No action for auto-vector interrupts */ 310 - if (irq >= IRQ_AMIGA_AUTO){ 309 + if (irq < IRQ_USER) { 311 310 printk("%s: Trying to enable auto-vector IRQ %i\n", 312 - __FUNCTION__, irq - IRQ_AMIGA_AUTO); 311 + __FUNCTION__, irq); 313 312 return; 314 313 } 315 314 ··· 328 327 } 329 328 330 329 /* enable the interrupt */ 331 - amiga_custom.intena = IF_SETCLR | amiga_intena_vals[irq]; 330 + amiga_custom.intena = IF_SETCLR | amiga_intena_vals[irq-IRQ_USER]; 332 331 } 333 332 334 333 void amiga_disable_irq(unsigned int irq) ··· 342 341 return; 343 342 344 343 /* No action for auto-vector interrupts */ 345 - if (irq >= IRQ_AMIGA_AUTO) { 344 + if (irq < IRQ_USER) { 346 345 printk("%s: Trying to disable auto-vector IRQ %i\n", 347 - __FUNCTION__, irq - IRQ_AMIGA_AUTO); 346 + __FUNCTION__, irq); 348 347 return; 349 348 } 350 349 ··· 359 358 } 360 359 361 360 /* disable the interrupt */ 362 - amiga_custom.intena = amiga_intena_vals[irq]; 361 + amiga_custom.intena = amiga_intena_vals[irq-IRQ_USER]; 363 362 } 364 363 365 364 inline void amiga_do_irq(int irq, struct pt_regs *fp) 366 365 { 367 - kstat_cpu(0).irqs[SYS_IRQS + irq]++; 368 - ami_irq_list[irq]->handler(irq, ami_irq_list[irq]->dev_id, fp); 366 + kstat_cpu(0).irqs[irq]++; 367 + ami_irq_list[irq-IRQ_USER]->handler(irq, ami_irq_list[irq-IRQ_USER]->dev_id, fp); 369 368 } 370 369 371 370 void amiga_do_irq_list(int irq, struct pt_regs *fp) 372 371 { 373 372 irq_node_t *node; 374 373 375 - kstat_cpu(0).irqs[SYS_IRQS + irq]++; 374 + kstat_cpu(0).irqs[irq]++; 376 375 377 - amiga_custom.intreq = amiga_intena_vals[irq]; 376 + amiga_custom.intreq = amiga_intena_vals[irq-IRQ_USER]; 378 377 379 - for (node = ami_irq_list[irq]; node; node = node->next) 378 + for (node = ami_irq_list[irq-IRQ_USER]; node; node = node->next) 380 379 node->handler(irq, node->dev_id, fp); 381 380 } 382 381 ··· 499 498 int i; 500 499 irq_node_t *node; 501 500 502 - for (i = 0; i < AMI_STD_IRQS; i++) { 503 - if (!(node = ami_irq_list[i])) 501 + for (i = IRQ_USER; i < IRQ_AMIGA_CIAA; i++) { 502 + node = ami_irq_list[i - IRQ_USER]; 503 + if (!node) 504 504 continue; 505 505 seq_printf(p, "ami %2d: %10u ", i, 506 - kstat_cpu(0).irqs[SYS_IRQS + i]); 506 + kstat_cpu(0).irqs[i]); 507 507 do { 508 508 if (node->flags & SA_INTERRUPT) 509 509 seq_puts(p, "F ");
+5 -6
arch/m68k/amiga/cia.c
··· 33 33 } ciaa_base = { 34 34 .cia = &ciaa, 35 35 .int_mask = IF_PORTS, 36 - .handler_irq = IRQ_AMIGA_AUTO_2, 36 + .handler_irq = IRQ_AUTO_2, 37 37 .cia_irq = IRQ_AMIGA_CIAA, 38 38 .server_irq = IRQ_AMIGA_PORTS, 39 39 .name = "CIAA handler" 40 40 }, ciab_base = { 41 41 .cia = &ciab, 42 42 .int_mask = IF_EXTER, 43 - .handler_irq = IRQ_AMIGA_AUTO_6, 43 + .handler_irq = IRQ_AUTO_6, 44 44 .cia_irq = IRQ_AMIGA_CIAB, 45 45 .server_irq = IRQ_AMIGA_EXTER, 46 46 .name = "CIAB handler" ··· 131 131 unsigned char ints; 132 132 133 133 mach_irq = base->cia_irq; 134 - irq = SYS_IRQS + mach_irq; 135 134 ints = cia_set_irq(base, CIA_ICR_ALL); 136 135 amiga_custom.intreq = base->int_mask; 137 - for (i = 0; i < CIA_IRQS; i++, irq++, mach_irq++) { 136 + for (i = 0; i < CIA_IRQS; i++, mach_irq++) { 138 137 if (ints & 1) { 139 - kstat_cpu(0).irqs[irq]++; 138 + kstat_cpu(0).irqs[mach_irq]++; 140 139 base->irq_list[i].handler(mach_irq, base->irq_list[i].dev_id, fp); 141 140 } 142 141 ints >>= 1; ··· 171 172 j = base->cia_irq; 172 173 for (i = 0; i < CIA_IRQS; i++) { 173 174 seq_printf(p, "cia %2d: %10d ", j + i, 174 - kstat_cpu(0).irqs[SYS_IRQS + j + i]); 175 + kstat_cpu(0).irqs[j + i]); 175 176 seq_puts(p, " "); 176 177 seq_printf(p, "%s\n", base->irq_list[i].devname); 177 178 }
+37 -55
include/asm-m68k/amigaints.h
··· 13 13 #ifndef _ASMm68k_AMIGAINTS_H_ 14 14 #define _ASMm68k_AMIGAINTS_H_ 15 15 16 + #include <asm/irq.h> 17 + 16 18 /* 17 19 ** Amiga Interrupt sources. 18 20 ** ··· 25 23 #define CIA_IRQS (5) 26 24 #define AMI_IRQS (32) /* AUTO_IRQS+AMI_STD_IRQS+2*CIA_IRQS */ 27 25 28 - /* vertical blanking interrupt */ 29 - #define IRQ_AMIGA_VERTB 0 30 - 31 - /* copper interrupt */ 32 - #define IRQ_AMIGA_COPPER 1 33 - 34 - /* Audio interrupts */ 35 - #define IRQ_AMIGA_AUD0 2 36 - #define IRQ_AMIGA_AUD1 3 37 - #define IRQ_AMIGA_AUD2 4 38 - #define IRQ_AMIGA_AUD3 5 39 - 40 - /* Blitter done interrupt */ 41 - #define IRQ_AMIGA_BLIT 6 26 + /* builtin serial port interrupts */ 27 + #define IRQ_AMIGA_TBE (IRQ_USER+0) 28 + #define IRQ_AMIGA_RBF (IRQ_USER+11) 42 29 43 30 /* floppy disk interrupts */ 44 - #define IRQ_AMIGA_DSKSYN 7 45 - #define IRQ_AMIGA_DSKBLK 8 46 - 47 - /* builtin serial port interrupts */ 48 - #define IRQ_AMIGA_RBF 9 49 - #define IRQ_AMIGA_TBE 10 31 + #define IRQ_AMIGA_DSKBLK (IRQ_USER+1) 32 + #define IRQ_AMIGA_DSKSYN (IRQ_USER+12) 50 33 51 34 /* software interrupts */ 52 - #define IRQ_AMIGA_SOFT 11 35 + #define IRQ_AMIGA_SOFT (IRQ_USER+2) 53 36 54 37 /* interrupts from external hardware */ 55 - #define IRQ_AMIGA_PORTS 12 56 - #define IRQ_AMIGA_EXTER 13 38 + #define IRQ_AMIGA_PORTS (IRQ_USER+3) 39 + #define IRQ_AMIGA_EXTER (IRQ_USER+13) 40 + 41 + /* copper interrupt */ 42 + #define IRQ_AMIGA_COPPER (IRQ_USER+4) 43 + 44 + /* vertical blanking interrupt */ 45 + #define IRQ_AMIGA_VERTB (IRQ_USER+5) 46 + 47 + /* Blitter done interrupt */ 48 + #define IRQ_AMIGA_BLIT (IRQ_USER+6) 49 + 50 + /* Audio interrupts */ 51 + #define IRQ_AMIGA_AUD0 (IRQ_USER+7) 52 + #define IRQ_AMIGA_AUD1 (IRQ_USER+8) 53 + #define IRQ_AMIGA_AUD2 (IRQ_USER+9) 54 + #define IRQ_AMIGA_AUD3 (IRQ_USER+10) 57 55 58 56 /* CIA interrupt sources */ 59 - #define IRQ_AMIGA_CIAA 14 60 - #define IRQ_AMIGA_CIAA_TA 14 61 - #define IRQ_AMIGA_CIAA_TB 15 62 - #define IRQ_AMIGA_CIAA_ALRM 16 63 - #define IRQ_AMIGA_CIAA_SP 17 64 - #define IRQ_AMIGA_CIAA_FLG 18 65 - #define IRQ_AMIGA_CIAB 19 66 - #define IRQ_AMIGA_CIAB_TA 19 67 - #define IRQ_AMIGA_CIAB_TB 20 68 - #define IRQ_AMIGA_CIAB_ALRM 21 69 - #define IRQ_AMIGA_CIAB_SP 22 70 - #define IRQ_AMIGA_CIAB_FLG 23 57 + #define IRQ_AMIGA_CIAA (IRQ_USER+14) 58 + #define IRQ_AMIGA_CIAA_TA (IRQ_USER+14) 59 + #define IRQ_AMIGA_CIAA_TB (IRQ_USER+15) 60 + #define IRQ_AMIGA_CIAA_ALRM (IRQ_USER+16) 61 + #define IRQ_AMIGA_CIAA_SP (IRQ_USER+17) 62 + #define IRQ_AMIGA_CIAA_FLG (IRQ_USER+18) 63 + #define IRQ_AMIGA_CIAB (IRQ_USER+19) 64 + #define IRQ_AMIGA_CIAB_TA (IRQ_USER+19) 65 + #define IRQ_AMIGA_CIAB_TB (IRQ_USER+20) 66 + #define IRQ_AMIGA_CIAB_ALRM (IRQ_USER+21) 67 + #define IRQ_AMIGA_CIAB_SP (IRQ_USER+22) 68 + #define IRQ_AMIGA_CIAB_FLG (IRQ_USER+23) 71 69 72 - /* auto-vector interrupts */ 73 - #define IRQ_AMIGA_AUTO 24 74 - #define IRQ_AMIGA_AUTO_0 24 /* This is just a dummy */ 75 - #define IRQ_AMIGA_AUTO_1 25 76 - #define IRQ_AMIGA_AUTO_2 26 77 - #define IRQ_AMIGA_AUTO_3 27 78 - #define IRQ_AMIGA_AUTO_4 28 79 - #define IRQ_AMIGA_AUTO_5 29 80 - #define IRQ_AMIGA_AUTO_6 30 81 - #define IRQ_AMIGA_AUTO_7 31 82 - 83 - #define IRQ_FLOPPY IRQ_AMIGA_DSKBLK 84 70 85 71 /* INTREQR masks */ 86 - #define IRQ1_MASK 0x0007 /* INTREQR mask for IRQ 1 */ 87 - #define IRQ2_MASK 0x0008 /* INTREQR mask for IRQ 2 */ 88 - #define IRQ3_MASK 0x0070 /* INTREQR mask for IRQ 3 */ 89 - #define IRQ4_MASK 0x0780 /* INTREQR mask for IRQ 4 */ 90 - #define IRQ5_MASK 0x1800 /* INTREQR mask for IRQ 5 */ 91 - #define IRQ6_MASK 0x2000 /* INTREQR mask for IRQ 6 */ 92 - #define IRQ7_MASK 0x4000 /* INTREQR mask for IRQ 7 */ 93 - 94 72 #define IF_SETCLR 0x8000 /* set/clr bit */ 95 73 #define IF_INTEN 0x4000 /* master interrupt bit in INT* registers */ 96 74 #define IF_EXTER 0x2000 /* external level 6 and CIA B interrupt */