patch-2.1.106 linux/arch/m68k/atari/config.c
Next file: linux/arch/m68k/atari/joystick.c
Previous file: linux/arch/m68k/atari/atasound.c
Back to the patch index
Back to the overall index
- Lines: 92
- Date:
Sat Jun 13 13:14:32 1998
- Orig file:
v2.1.105/linux/arch/m68k/atari/config.c
- Orig date:
Fri May 8 23:14:42 1998
diff -u --recursive --new-file v2.1.105/linux/arch/m68k/atari/config.c linux/arch/m68k/atari/config.c
@@ -38,6 +38,7 @@
#include <asm/atari_stram.h>
#include <asm/system.h>
#include <asm/machdep.h>
+#include <asm/hwtest.h>
u_long atari_mch_cookie;
u_long atari_mch_type = 0;
@@ -98,39 +99,15 @@
extern void (*kd_mksound)(unsigned int, unsigned int);
-/* This function tests for the presence of an address, specially a
- * hardware register address. It is called very early in the kernel
- * initialization process, when the VBR register isn't set up yet. On
- * an Atari, it still points to address 0, which is unmapped. So a bus
- * error would cause another bus error while fetching the exception
- * vector, and the CPU would do nothing at all. So we needed to set up
- * a temporary VBR and a vector table for the duration of the test.
+/* I've moved hwreg_present() and hwreg_present_bywrite() out into
+ * mm/hwtest.c, to avoid having multiple copies of the same routine
+ * in the kernel [I wanted them in hp300 and they were already used
+ * in the nubus code. NB: I don't have an Atari so this might (just
+ * conceivably) break something.
+ * I've preserved the #if 0 version of hwreg_present_bywrite() here
+ * for posterity.
+ * -- Peter Maydell <pmaydell@chiark.greenend.org.uk>, 05/1998
*/
-
-__initfunc(static int hwreg_present( volatile void *regp ))
-{
- int ret = 0;
- long save_sp, save_vbr;
- long tmp_vectors[3];
-
- __asm__ __volatile__
- ( "movec %/vbr,%2\n\t"
- "movel #Lberr1,%4@(8)\n\t"
- "movec %4,%/vbr\n\t"
- "movel %/sp,%1\n\t"
- "moveq #0,%0\n\t"
- "tstb %3@\n\t"
- "nop\n\t"
- "moveq #1,%0\n"
- "Lberr1:\n\t"
- "movel %1,%/sp\n\t"
- "movec %2,%/vbr"
- : "=&d" (ret), "=&r" (save_sp), "=&r" (save_vbr)
- : "a" (regp), "a" (tmp_vectors)
- );
-
- return( ret );
-}
#if 0
__initfunc(static int
@@ -163,35 +140,6 @@
}
#endif
-/* Basically the same, but writes a value into a word register, protected
- * by a bus error handler */
-
-__initfunc(static int hwreg_write( volatile void *regp, unsigned short val ))
-{
- int ret;
- long save_sp, save_vbr;
- long tmp_vectors[3];
-
- __asm__ __volatile__
- ( "movec %/vbr,%2\n\t"
- "movel #Lberr2,%4@(8)\n\t"
- "movec %4,%/vbr\n\t"
- "movel %/sp,%1\n\t"
- "moveq #0,%0\n\t"
- "movew %5,%3@\n\t"
- "nop \n\t" /* If this nop isn't present, 'ret' may already be
- * loaded with 1 at the time the bus error
- * happens! */
- "moveq #1,%0\n"
- "Lberr2:\n\t"
- "movel %1,%/sp\n\t"
- "movec %2,%/vbr"
- : "=&d" (ret), "=&r" (save_sp), "=&r" (save_vbr)
- : "a" (regp), "a" (tmp_vectors), "g" (val)
- );
-
- return( ret );
-}
/* ++roman: This is a more elaborate test for an SCC chip, since the plain
* Medusa board generates DTACK at the SCC's standard addresses, but a SCC
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov