patch-2.1.87 linux/arch/m68k/atari/ataints.c

Next file: linux/arch/m68k/atari/atakeyb.c
Previous file: linux/arch/m68k/atari/Makefile
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.86/linux/arch/m68k/atari/ataints.c linux/arch/m68k/atari/ataints.c
@@ -166,7 +166,7 @@
 asmlinkage void IRQ_NAME(n);						   \
 /* Dummy function to allow asm with operands.  */			   \
 void atari_slow_irq_##n##_dummy (void) {				   \
-__asm__ (ALIGN_STR "\n"							   \
+__asm__ (__ALIGN_STR "\n"						   \
 SYMBOL_NAME_STR(atari_slow_irq_) #n "_handler:\t"			   \
 "	addql	#1,"SYMBOL_NAME_STR(local_irq_count)"\n"		   \
 	SAVE_ALL_INT "\n"						   \
@@ -190,7 +190,7 @@
 "	andw	#0xfeff,%%sr\n"		/* set IPL = 6 again */		   \
 "	orb 	#(1<<(%c3&7)),%a4:w\n"	/* now unmask the int again */	   \
 "	jbra	"SYMBOL_NAME_STR(ret_from_interrupt)"\n"		   \
-	 : : "i" (&kstat.interrupts[n+8]), "i" (&irq_handler[n+8]),	   \
+	 : : "i" (&kstat.irqs[0][n+8]), "i" (&irq_handler[n+8]),	   \
 	     "n" (PT_OFF_SR), "n" (n),					   \
 	     "i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &mfp.int_mk_a)	   \
 		        : (n & 16 ? &tt_mfp.int_mk_b : &mfp.int_mk_b))	   \
@@ -270,7 +270,7 @@
 
 /* Dummy function to allow asm with operands.  */
 void atari_fast_prio_irq_dummy (void) {
-__asm__ (ALIGN_STR "\n"
+__asm__ (__ALIGN_STR "\n"
 SYMBOL_NAME_STR(atari_fast_irq_handler) ":
 	orw 	#0x700,%%sr		/* disable all interrupts */
 "SYMBOL_NAME_STR(atari_prio_irq_handler) ":\t
@@ -294,7 +294,7 @@
 	addql	#8,%%sp
 	addql	#4,%%sp
 	jbra	"SYMBOL_NAME_STR(ret_from_interrupt)
-	 : : "i" (&kstat.interrupts), "n" (PT_OFF_FORMATVEC)
+	 : : "i" (&kstat.irqs), "n" (PT_OFF_FORMATVEC)
 );
 }
 
@@ -304,7 +304,7 @@
  */
 asmlinkage void falcon_hblhandler(void);
 asm(".text\n"
-ALIGN_STR "\n"
+__ALIGN_STR "\n"
 SYMBOL_NAME_STR(falcon_hblhandler) ":
 	orw	#0x200,%sp@	/* set saved ipl to 2 */
 	rte");
@@ -314,6 +314,8 @@
 
 extern void atari_microwire_cmd( int cmd );
 
+extern int atari_SCC_reset_done;
+
 /*
  * void atari_init_IRQ (void)
  *
@@ -358,7 +360,7 @@
 		tt_mfp.int_mk_b = 0xff;
 	}
 
-	if (ATARIHW_PRESENT(SCC)) {
+	if (ATARIHW_PRESENT(SCC) && !atari_SCC_reset_done) {
 		scc.cha_a_ctrl = 9;
 		MFPDELAY();
 		scc.cha_a_ctrl = (char) 0xc0; /* hardware reset */
@@ -374,10 +376,13 @@
 		tt_scu.vme_mask = 0x60;		/* enable MFP and SCC ints */
 	}
 	else {
-		/* If no SCU, the HSYNC interrupt needs to be disabled this
-		 * way. (Else _inthandler in kernel/sys_call.S gets overruns)
+		/* If no SCU and no Hades, the HSYNC interrupt needs to be
+		 * disabled this way. (Else _inthandler in kernel/sys_call.S
+		 * gets overruns)
 		 */
-		vectors[VEC_INT2] = falcon_hblhandler;
+
+		if (!MACH_IS_HADES)
+			vectors[VEC_INT2] = falcon_hblhandler;
 	}
 
 	if (ATARIHW_PRESENT(PCM_8BIT) && ATARIHW_PRESENT(MICROWIRE)) {
@@ -414,7 +419,14 @@
                       unsigned long flags, const char *devname, void *dev_id)
 {
 	int vector;
-	
+
+	/*
+	 * The following is a hack to make some PCI card drivers work,
+	 * which set the SA_SHIRQ flag.
+	 */
+
+	flags &= ~SA_SHIRQ;
+
 	if (flags < IRQ_TYPE_SLOW || flags > IRQ_TYPE_PRIO) {
 		printk ("%s: Bad irq type %ld requested from %s\n",
 		        __FUNCTION__, flags, devname);
@@ -600,11 +612,11 @@
 			continue;
 		if (i < STMFP_SOURCE_BASE)
 			len += sprintf(buf+len, "auto %2d: %10u ",
-				       i, kstat.interrupts[i]);
+				       i, kstat.irqs[0][i]);
 		else
 			len += sprintf(buf+len, "vec $%02x: %10u ",
 				       IRQ_SOURCE_TO_VECTOR(i),
-				       kstat.interrupts[i]);
+				       kstat.irqs[0][i]);
 
 		if (irq_handler[i].handler != atari_call_irq_list) {
 			len += sprintf(buf+len, "%s\n", irq_param[i].devname);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov