Resent-Date: Mon, 18 Jan 1999 10:12:02 +0100 (MET)
To: linux-m68k@lists.linux-m68k.org
Subject: 2.2.0-pre6
X-Yow: I wish I was a sex-starved manicurist found dead in the Bronx!!
From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
Date: 18 Jan 1999 10:11:51 +0100
Resent-From: linux-m68k@phil.uni-sb.de

Hi!

Here are the patches that are necessary to make the kernel working again.

Andreas.

----------------------------------------------------------------------
--- linux/arch/m68k/kernel/head.S.~2~	Sun Jan 17 15:45:14 1999
+++ linux/arch/m68k/kernel/head.S	Mon Jan 18 00:13:53 1999
@@ -114,7 +114,7 @@
  * so that here also some mmu specific initialization is done. The second page
  * at the start of the kernel (the first page is unmapped later) is used for
  * the kernel_pg_dir. It must be at a position known at link time (as it's used
- * to initialize the init task struct) and since it's needs special cache
+ * to initialize the init task struct) and since it needs special cache
  * settings, it's the easiest to use this page, the rest of the page is used
  * for further pointer tables.
  * mmu_get_page_table_entry allocates always a whole page for page tables, this
@@ -296,8 +296,8 @@
  * The 8x8 font is harder to read but fits more on the screen.
  */
 #define FONT_8x8 	/* default */
-/* #define FONT_8x16	/* 2nd choice */
-/* #define FONT_6x11	/* 3rd choice */
+/* #define FONT_8x16 */	/* 2nd choice */
+/* #define FONT_6x11 */	/* 3rd choice */
 
 .globl SYMBOL_NAME(kernel_pg_dir)
 .globl SYMBOL_NAME(availmem)
@@ -364,6 +364,21 @@
 PTR_INDEX_SHIFT  = 18
 PAGE_INDEX_SHIFT = 12
 
+#ifdef DEBUG
+/* When debugging use readable names for labels */
+#ifdef __STDC__
+#define L(name) .head.S.##name
+#else
+#define L(name) .head.S./**/name
+#endif
+#else
+#ifdef __STDC__
+#define L(name) .L##name
+#else
+#define L(name) .L/**/name
+#endif
+#endif
+
 /* Several macros to make the writing of subroutines easier:
  * - func_start marks the beginning of the routine which setups the frame
  *   register and saves the registers, it also defines another macro
@@ -386,7 +401,7 @@
 #define ARG4	%a6@(20)
 
 .macro	func_start	name,saveregs,stack=0
-.L\name:
+L(\name):
 	linkw	%a6,#-\stack
 	moveml	\saveregs,%sp@-
 .set	stackstart,-\stack	
@@ -403,7 +418,7 @@
 .endm
 
 .macro	func_call	name
-	jbsr	.L\name
+	jbsr	L(\name)
 .endm
 
 .macro	move_stack	nr,arg1,arg2,arg3,arg4
@@ -433,6 +448,9 @@
 func_define	mmu_get_page_table_entry,2
 func_define	mmu_print
 func_define	get_new_page
+#ifdef CONFIG_HP300
+func_define	set_leds
+#endif
 
 .macro	mmu_map_eq	arg1,arg2,arg3
 	mmu_map	\arg1,\arg1,\arg2,\arg3
@@ -502,13 +520,13 @@
 #define is_not_bvme6000(lab) cmpl &MACH_BVME6000,%pc@(m68k_machtype); jne lab
 #define is_not_hp300(lab) cmpl &MACH_HP300,%pc@(m68k_machtype); jne lab
 
-#define is_040_or_060(lab)	btst &CPUTYPE_0460,%pc@(.Lcputype+3); jne lab
-#define is_not_040_or_060(lab)	btst &CPUTYPE_0460,%pc@(.Lcputype+3); jeq lab
-#define is_040(lab)		btst &CPUTYPE_040,%pc@(.Lcputype+3); jne lab
-#define is_060(lab)		btst &CPUTYPE_060,%pc@(.Lcputype+3); jne lab
-#define is_not_060(lab)		btst &CPUTYPE_060,%pc@(.Lcputype+3); jeq lab
-#define is_020(lab)		btst &CPUTYPE_020,%pc@(.Lcputype+3); jne lab
-#define is_not_020(lab)		btst &CPUTYPE_020,%pc@(.Lcputype+3); jeq lab
+#define is_040_or_060(lab)	btst &CPUTYPE_0460,%pc@(L(cputype)+3); jne lab
+#define is_not_040_or_060(lab)	btst &CPUTYPE_0460,%pc@(L(cputype)+3); jeq lab
+#define is_040(lab)		btst &CPUTYPE_040,%pc@(L(cputype)+3); jne lab
+#define is_060(lab)		btst &CPUTYPE_060,%pc@(L(cputype)+3); jne lab
+#define is_not_060(lab)		btst &CPUTYPE_060,%pc@(L(cputype)+3); jeq lab
+#define is_020(lab)		btst &CPUTYPE_020,%pc@(L(cputype)+3); jne lab
+#define is_not_020(lab)		btst &CPUTYPE_020,%pc@(L(cputype)+3); jeq lab
 
 /* On the HP300 we use the on-board LEDs for debug output before
    the console is running.  Writing a 1 bit turns the corresponding LED
@@ -517,7 +535,7 @@
 #ifdef CONFIG_HP300
 	is_not_hp300(.Lled\@)
 	pea	\mask
-	func_call	leds
+	func_call	set_leds
 	addql	#4,%sp
 .Lled\@:
 #endif
@@ -580,27 +598,27 @@
  * while debugging it).
  */
 
-	is_not_mac(.Ltest_notmac)
+	is_not_mac(L(test_notmac))
 
 	get_bi_record	BI_MAC_VADDR
-	lea	%pc@(.Lmac_videobase),%a1
+	lea	%pc@(L(mac_videobase)),%a1
 	movel	%a0@,%a1@
 
 	get_bi_record	BI_MAC_VDEPTH
-	lea	%pc@(.Lmac_videodepth),%a1
+	lea	%pc@(L(mac_videodepth)),%a1
 	movel	%a0@,%a1@
 
 	get_bi_record	BI_MAC_VDIM
-	lea	%pc@(.Lmac_dimensions),%a1
+	lea	%pc@(L(mac_dimensions)),%a1
 	movel	%a0@,%a1@
 
 	get_bi_record	BI_MAC_VROW
-	lea	%pc@(.Lmac_rowbytes),%a1
+	lea	%pc@(L(mac_rowbytes)),%a1
 	movel	%a0@,%a1@
 
 #ifdef MAC_SERIAL_DEBUG
 	get_bi_record	BI_MAC_SCCBASE
-	lea	%pc@(.Lmac_sccbase),%a1
+	lea	%pc@(L(mac_sccbase)),%a1
 	movel	%a0@,%a1@
 #endif /* MAC_SERIAL_DEBUG */
 
@@ -608,14 +626,14 @@
 	/*
 	 * Clear the screen
 	 */
-	lea	%pc@(.Lmac_videobase),%a0
+	lea	%pc@(L(mac_videobase)),%a0
 	movel	%a0@,%a1
-	lea	%pc@(.Lmac_dimensions),%a0
+	lea	%pc@(L(mac_dimensions)),%a0
 	movel	%a0@,%d1
 	swap	%d1		/* #rows is high bytes */
 	andl	#0xFFFF,%d1	/* rows */
 	subl	#10,%d1
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 loopy2:
 	movel	%a0@,%d0
 	subql	#1,%d0
@@ -625,7 +643,7 @@
 	dbra	%d1,loopy2
 #endif
 
-.Ltest_notmac:
+L(test_notmac):
 #endif /* CONFIG_MAC */
 
 
@@ -670,7 +688,7 @@
 	/*
 	 * Record the cpu type
 	 */
-	lea	%pc@(.Lcputype),%a0
+	lea	%pc@(L(cputype)),%a0
 	movel	%d1,%a0@
 
 	/*
@@ -691,7 +709,7 @@
 	clrl	%d0
 	clrl	%d1
 
-	is_not_040_or_060(.Lsave_cachetype)
+	is_not_040_or_060(L(save_cachetype))
 
 	/*
 	 * '040 or '060
@@ -709,14 +727,14 @@
 
 	is_not_060(1f)
 	movel	#_PAGE_CACHE040W,%d0
-	jra	.Lsave_cachetype
+	jra	L(save_cachetype)
 #endif /* CONFIG_060_WRITETHROUGH */
 1:
 	movew	#_PAGE_CACHE040,%d0
 
 	movel	#_PAGE_CACHE040W,%d1
 
-.Lsave_cachetype:
+L(save_cachetype):
 	/* Save cache mode for supervisor mode and page tables
 	 */
 	lea	%pc@(SYMBOL_NAME(m68k_supervisor_cachemode)),%a0
@@ -749,7 +767,7 @@
  */
 
 #ifdef CONFIG_ATARI
-	is_not_atari(.Lnotypetest)
+	is_not_atari(L(notypetest))
 
 	/* get special machine type (Medusa/Hades/AB40) */
 	moveq	#0,%d3 /* default if tag doesn't exist */
@@ -766,43 +784,44 @@
 	cmpl	#ATARI_MACH_HADES,%d3
 	jbne	1f
 	movel	#0xff000000,%d0		/* Hades I/O base addr: 0xff000000 */
-1:	lea     %pc@(.Liobase),%a0
+1:	lea     %pc@(L(iobase)),%a0
 	movel   %d0,%a0@
 
-.Lnotypetest:
+L(notypetest):
 #endif
 
 /*
  * Initialize serial port
  */
-	jbsr	.Lserial_init
+	jbsr	L(serial_init)
 
 /*
  * Initialize console
  */
 #ifdef CONFIG_MAC
-	is_not_mac(.Lnocon)
+	is_not_mac(L(nocon))
 #ifdef CONSOLE
-	jbsr	.Lconsole_init
+	jbsr	L(console_init)
 #ifdef CONSOLE_PENGUIN
-	jbsr	.Lconsole_put_penguin
+	jbsr	L(console_put_penguin)
 #endif	/* CONSOLE_PENGUIN */
-	jbsr	.Lconsole_put_stats
+	jbsr	L(console_put_stats)
 #endif	/* CONSOLE */
-.Lnocon:
+L(nocon):
 #endif	/* CONFIG_MAC */
 
 
 	putc	'\n'
 	putc	'A'
-	dputn	%pc@(.Lcputype)
+	dputn	%pc@(L(cputype))
 	dputn	%pc@(SYMBOL_NAME(m68k_supervisor_cachemode))
 	dputn	%pc@(SYMBOL_NAME(m68k_pgtable_cachemode))
+	dputc	'\n'
 
 /*
  * Save physical start address of kernel
  */
-	lea	%pc@(.Lphys_kernel_start),%a0
+	lea	%pc@(L(phys_kernel_start)),%a0
 	lea	%pc@(SYMBOL_NAME(_stext)),%a1
 	subl	#SYMBOL_NAME(_stext),%a1
 	movel	%a1,%a0@
@@ -819,16 +838,16 @@
  *	First map the first 4 MB of kernel code & data
  */
 
-	mmu_map	#0,%pc@(.Lphys_kernel_start),#4*1024*1024,\
+	mmu_map	#0,%pc@(L(phys_kernel_start)),#4*1024*1024,\
 		%pc@(SYMBOL_NAME(m68k_supervisor_cachemode))
 
 	putc	'C'
 
 #ifdef CONFIG_AMIGA
 
-.Lmmu_init_amiga:
+L(mmu_init_amiga):
 
-	is_not_amiga(.Lmmu_init_not_amiga)
+	is_not_amiga(L(mmu_init_not_amiga))
 /*
  * mmu_init_amiga
  */
@@ -842,25 +861,24 @@
 	 */
 	mmu_map	#0x80000000,#0,#0x01000000,#_PAGE_NOCACHE_S
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
 1:
 	/*
 	 * 030:	Map the 32Meg range physical 0x0 upto logical 0x8000.0000
 	 */
 	mmu_map	#0x80000000,#0,#0x02000000,#_PAGE_NOCACHE030
-	mmu_map_tt	1,#0xf8000000,#0x08000000,#_PAGE_NOCACHE_S
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lmmu_init_not_amiga:
+L(mmu_init_not_amiga):
 #endif
 
 #ifdef CONFIG_ATARI
 
-.Lmmu_init_atari:
+L(mmu_init_atari):
 
-	is_not_atari(.Lmmu_init_not_atari)
+	is_not_atari(L(mmu_init_not_atari))
 
 	putc	'E'
 
@@ -887,53 +905,49 @@
 2:	movel	#0xff000000,%d0 /* Medusa/Hades base addr: 0xff000000 */
 1:	movel	%d0,%d3
 
-	is_040_or_060(.Lspata68040)
+	is_040_or_060(L(spata68040))
 
 	/* Map everything non-cacheable, though not all parts really
-	 * need to disable caches (crucial only for 0xffc000..0xffffff
+	 * need to disable caches (crucial only for 0xff8000..0xffffff
 	 * (standard I/O) and 0xf00000..0xf3ffff (IDE)). The remainder
 	 * isn't really used, except for sometimes peeking into the
 	 * ROMs (mirror at phys. 0x0), so caching isn't necessary for
 	 * this. */
 	mmu_map	#0xff000000,%d3,#0x01000000,#_PAGE_NOCACHE030
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lspata68040:
+L(spata68040):
 
 	mmu_map	#0xff000000,%d3,#0x01000000,#_PAGE_NOCACHE_S
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lmmu_init_not_atari:
+L(mmu_init_not_atari):
 #endif
 
 #ifdef CONFIG_HP300
-	is_not_hp300(.Lnothp300)
+	is_not_hp300(L(nothp300))
 
 /* On the HP300, we map the ROM, INTIO and DIO regions (phys. 0x00xxxxxx)
    by mapping 32MB from 0xf0xxxxxx -> 0x00xxxxxx) using an 030 early
    termination page descriptor.  The ROM mapping is needed because the LEDs
    are mapped there too.  */
-
-	mmu_map	#0xf0000000,#0,#0x01000000,#_PAGE_NOCACHE030
 
-#if 0
-	movel	#_PAGE_NOCACHE030+_PAGE_PRESENT+_PAGE_ACCESSED,%d0
-	movel	%d0,%a5@(0x78<<2)
-#endif
+	mmu_map	#0xf0000000,#0,#0x02000000,#_PAGE_NOCACHE030
 
-.Lnothp300:
+L(nothp300):
 
 #endif
 
 #ifdef CONFIG_MVME16x
 
-	is_not_mvme16x(.Lnot16x)
+	is_not_mvme16x(L(not16x))
 
 	/* Get pointer to board ID data */
 	movel	%d2,%sp@-
-	.long	0x4e4f0070		/* trap 0x70 - .BRD_ID */
+	trap	#15
+	.word	0x70		/* trap 0x70 - .BRD_ID */
 	movel	%sp@+,%d2
 	lea	%pc@(SYMBOL_NAME(mvme_bdid_ptr)),%a0
 	movel	%d2,%a0@
@@ -953,14 +967,14 @@
 
 	mmu_map_tt	1,#0xe0000000,#0x20000000,#_PAGE_NOCACHE_S
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lnot16x:
+L(not16x):
 #endif	/* CONFIG_MVME162 | CONFIG_MVME167 */
 
 #ifdef CONFIG_BVME6000
 
-	is_not_bvme6000(.Lnot6000)
+	is_not_bvme6000(L(not6000))
 
 	/*
 	 * On BVME6000 we have already created kernel page tables for
@@ -973,9 +987,9 @@
 
 	mmu_map_tt	1,#0xe0000000,#0x20000000,#_PAGE_NOCACHE_S
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lnot6000:
+L(not6000):
 #endif /* CONFIG_BVME6000 */
 
 /*
@@ -1008,14 +1022,14 @@
 
 #ifdef CONFIG_MAC
 
-.Lmmu_init_mac:
+L(mmu_init_mac):
 
-	is_not_mac(.Lmmu_init_not_mac)
+	is_not_mac(L(mmu_init_not_mac))
 
 	putc	'F'
 
-	lea	%pc@(.Lmac_videobase),%a0
-	lea	%pc@(.Lconsole_video_virtual),%a1
+	lea	%pc@(L(mac_videobase)),%a0
+	lea	%pc@(L(console_video_virtual)),%a1
 	movel	%a0@,%a1@
 
 	is_not_040_or_060(1f)
@@ -1031,7 +1045,7 @@
 	 */
 
 	movel	#VIDEOMEMMASK,%d0
-	andl	.Lmac_videobase,%d0
+	andl	L(mac_videobase),%d0
 
 	mmu_map		#VIDEOMEMBASE,%d0,#VIDEOMEMSIZE,%d3
 	mmu_map_eq	#0x40800000,#0x02000000,%d3	/* rom ? */
@@ -1040,12 +1054,12 @@
 	mmu_map_eq	#0x9c000000,#0x00400000,%d3
 	mmu_map_tt	1,#0xf8000000,#0x08000000,%d3
 
-	jbra	.Lmmu_init_done
+	jbra	L(mmu_init_done)
 
-.Lmmu_init_not_mac:
+L(mmu_init_not_mac):
 #endif
 
-.Lmmu_init_done:
+L(mmu_init_done):
 
 	putc	'G'
 	leds	0x8
@@ -1063,25 +1077,25 @@
  * is used for all kind of tables, for that the cache attributes
  * are now fixed.
  */
-.Lmmu_fixup:
+L(mmu_fixup):
 
-	is_not_040_or_060(.Lmmu_fixup_done)
+	is_not_040_or_060(L(mmu_fixup_done))
 
 #ifdef MMU_NOCACHE_KERNEL
-	jbra	.Lmmu_fixup_done
+	jbra	L(mmu_fixup_done)
 #endif
 
 	/* first fix the page at the start of the kernel, that
          * contains also kernel_pg_dir.
 	 */
-	movel	%pc@(.Lphys_kernel_start),%d0
+	movel	%pc@(L(phys_kernel_start)),%d0
 	lea	%pc@(SYMBOL_NAME(_stext)),%a0
 	subl	%d0,%a0
 	mmu_fixup_page_mmu_cache	%a0
 
-	movel	%pc@(.Lkernel_end),%a0
+	movel	%pc@(L(kernel_end)),%a0
 	subl	%d0,%a0
-	movel	%pc@(.Lmemory_start),%a1
+	movel	%pc@(L(memory_start)),%a1
 	subl	%d0,%a1
 	bra	2f
 1:
@@ -1091,7 +1105,7 @@
 	cmpl	%a0,%a1
 	jgt	1b
 
-.Lmmu_fixup_done:
+L(mmu_fixup_done):
 
 #ifdef MMU_PRINT
 	mmu_print
@@ -1166,23 +1180,23 @@
 #ifdef CONFIG_AMIGA
 	is_not_amiga(1f)
 	/* fixup the Amiga custom register location before printing */
-	clrl	.Lcustom
+	clrl	L(custom)
 1:
 #endif
 
 #ifdef CONFIG_ATARI
 	is_not_atari(1f)
 	/* fixup the Atari iobase register location before printing */
-	movel	#0xff000000,.Liobase
+	movel	#0xff000000,L(iobase)
 1:
 #endif
 
 #ifdef CONFIG_MAC
 	is_not_mac(1f)
 	movel	#~VIDEOMEMMASK,%d0
-	andl	.Lmac_videobase,%d0
+	andl	L(mac_videobase),%d0
 	addl	#VIDEOMEMBASE,%d0
-	movel	%d0,.Lmac_videobase
+	movel	%d0,L(mac_videobase)
 1:
 #endif
 
@@ -1191,7 +1205,7 @@
 	/*
 	 * Fix up the custom register to point to the new location of the LEDs.
 	 */
-	movel	#0xf0000000,.Lcustom
+	movel	#0xf0000000,L(custom)
 
 	/*
 	 * Energise the FPU and caches.
@@ -1211,29 +1225,29 @@
 	/* do the same conversion on the first available memory
 	 * address (in a6).
 	 */
-	movel	.Lmemory_start,%d0
+	movel	L(memory_start),%d0
 	movel	%d0,SYMBOL_NAME(availmem)
 
 /*
  * Enable caches
  */
 
-	is_not_040_or_060(.Lcache_not_680460)
+	is_not_040_or_060(L(cache_not_680460))
 
-.Lcache680460:
+L(cache680460):
 	.chip	68040
 	nop
 	cpusha	%bc
 	nop
 
-	is_060(.Lcache68060)
+	is_060(L(cache68060))
 
 	movel	#CC6_ENABLE_D+CC6_ENABLE_I,%d0
 	/* MMU stuff works in copyback mode now, so enable the cache */
 	movec	%d0,%cacr
-	jra	.Lcache_done
+	jra	L(cache_done)
 
-.Lcache68060:
+L(cache68060):
 	movel	#CC6_ENABLE_D+CC6_ENABLE_I+CC6_ENABLE_SB+CC6_PUSH_DPI+CC6_ENABLE_B+CC6_CLRA_B,%d0
 	/* MMU stuff works in copyback mode now, so enable the cache */
 	movec	%d0,%cacr
@@ -1242,16 +1256,16 @@
 	.chip	68060
 	movec	%d0,%pcr
 
-	jbra	.Lcache_done
-.Lcache_not_680460:
-.Lcache68030:
+	jbra	L(cache_done)
+L(cache_not_680460):
+L(cache68030):
 	.chip	68030
 	movel	#CC3_ENABLE_DB+CC3_CLR_D+CC3_ENABLE_D+CC3_ENABLE_IB+CC3_CLR_I+CC3_ENABLE_I,%d0
 	movec	%d0,%cacr
 
-	jra	.Lcache_done
+	jra	L(cache_done)
 	.chip	68k
-.Lcache_done:
+L(cache_done):
 
 	putc	'J'
 
@@ -1381,8 +1395,8 @@
 
 func_start	mmu_print,%a0-%a6/%d0-%d7
 
-	lea	%pc@(SYMBOL_NAME(kernel_pg_dir)),%a5
-	lea	%pc@(.Lmmu_print_data),%a0
+	movel	%pc@(L(kernel_pgdir_ptr)),%a5
+	lea	%pc@(L(mmu_print_data)),%a0
 	movel	#MMU_PRINT_UNINITED,%a0@(mmu_next_valid)
 
 	is_not_040_or_060(mmu_030_print)
@@ -1576,9 +1590,10 @@
 	rts
 
 mmu_030_print:
+	puts	"\nMMU030\n"
 	puts	"\nrp:"
 	putn	%a5
-	puts	"\n\nMMU030\n"
+	putc	'\n'
 	movel	%a5,%d0
 	andil	#0xfffffff0,%d0
 	movel	%d0,%a0
@@ -1662,7 +1677,7 @@
 mmu_print_tuple_invalidate:
 	moveml	%a0/%d7,%sp@-
 
-	lea	%pc@(.Lmmu_print_data),%a0
+	lea	%pc@(L(mmu_print_data)),%a0
 	tstl	%a0@(mmu_next_valid)
 	jbmi	mmu_print_tuple_invalidate_exit
 
@@ -1680,14 +1695,11 @@
 mmu_print_tuple:
 	moveml	%d0-%d7/%a0,%sp@-
 
-	lea	%pc@(.Lmmu_print_data),%a0
+	lea	%pc@(L(mmu_print_data)),%a0
 
 	tstl	%a0@(mmu_next_valid)
-	jbmi	mmu_print_tuple_print
-	jbeq	mmu_print_tuple_print
-	jbpl	mmu_print_tuple_test
+	jble	mmu_print_tuple_print
 
-mmu_print_tuple_test:
 	cmpl	%a0@(mmu_next_physical),%d1
 	jbeq	mmu_print_tuple_increment
 
@@ -1749,8 +1761,9 @@
  * mmu_map_tt
  *
  * This is a specific function which works on all 680x0 machines.
- * On 040 & 060 it will attempt to use Transparent Translation registers (tt1).
- * On 020 & 030 it will call the standard mmu_map which will use early
+ * On 030, 040 & 060 it will attempt to use Transparent Translation
+ * registers (tt1).
+ * On 020 it will call the standard mmu_map which will use early
  * terminating descriptors.
  */
 func_start	mmu_map_tt,%d0/%d1/%a0,4
@@ -1762,13 +1775,13 @@
 	dputn	ARG4
 	dputc	'\n'
 
-	is_020(.Ldo_map)
+	is_020(L(do_map))
 
 	/* Extract the highest bit set
 	 */
 	bfffo	ARG3{#0,#32},%d1
 	cmpw	#8,%d0
-	jcc	.Ldo_map
+	jcc	L(do_map)
 
 	/* And get the mask
 	 */
@@ -1788,10 +1801,10 @@
 	orl	%d0,%d1
 	clrw	%d1
 
-	is_040_or_060(.Lmmu_map_tt_040)
+	is_040_or_060(L(mmu_map_tt_040))
 
 	/* set 030 specific bits (read/write access for supervisor mode
-	 * (highest function code set, lower two bits masked)
+	 * (highest function code set, lower two bits masked))
 	 */
 	orw	#TTR_ENABLE+TTR_RWM+TTR_FCB2+TTR_FCM1+TTR_FCM0,%d1
 	movel	ARG4,%d0
@@ -1809,11 +1822,11 @@
 	jra	2f
 1:	pmove	%a0@,%tt1
 2:	.chip	68k
-	jra	.Lmmu_map_tt_done
+	jra	L(mmu_map_tt_done)
 
 	/* set 040 specific bits
 	 */
-.Lmmu_map_tt_040:
+L(mmu_map_tt_040):
 	orw	#TTR_ENABLE+TTR_KERNELMODE,%d1
 	orl	ARG4,%d1
 	dputn	%d1
@@ -1828,12 +1841,12 @@
 	movec	%d1,%dtt1
 2:	.chip	68k
 
-	jra	.Lmmu_map_tt_done
+	jra	L(mmu_map_tt_done)
 
-.Ldo_map:
+L(do_map):
 	mmu_map_eq	ARG2,ARG3,ARG4
 
-.Lmmu_map_tt_done:
+L(mmu_map_tt_done):
 
 func_return	mmu_map_tt
 
@@ -1857,7 +1870,7 @@
  */
 func_start	mmu_map,%d0-%d4/%a0-%a4
 
-	dputs	"mmu_map:"
+	dputs	"\nmmu_map:"
 	dputn	ARG1
 	dputn	ARG2
 	dputn	ARG3
@@ -1874,6 +1887,7 @@
 	 */
 	movel	ARG1,%a4
 	addl	ARG3,%a4
+	subql	#1,%a4
 
 	/* Get physical address and round it down to 256KB
 	 */
@@ -1884,14 +1898,14 @@
 	/* Add page attributes to the physical address
 	 */
 	movel	ARG4,%d0
-	orw	#_PAGE_PRESENT+_PAGE_ACCESSED,%d0
+	orw	#_PAGE_PRESENT+_PAGE_ACCESSED+_PAGE_DIRTY,%d0
 	addw	%d0,%a2
 
 	dputn	%a2
 	dputn	%a3
 	dputn	%a4
 
-	is_not_040_or_060(.Lmmu_map_030)
+	is_not_040_or_060(L(mmu_map_030))
 
 	addw	#_PAGE_GLOBAL040,%a2
 /*
@@ -1910,7 +1924,7 @@
  *
  */
 
-.Lmmu_map_040:
+L(mmu_map_040):
 	/* Calculate the offset into the root table
 	 */
 	movel	%a3,%d0
@@ -1937,7 +1951,7 @@
 	/* The page table entry must not no be busy
 	 */
 	tstl	%a0@
-	jne	.Lmmu_map_error
+	jne	L(mmu_map_error)
 
 	/* Do the mapping and advance the pointers
 	 */
@@ -1948,11 +1962,12 @@
 
 	/* Ready with mapping?
 	 */
-	cmpl	%a3,%a4
-	jhi	.Lmmu_map_040
-	jra	.Lmmu_map_done
+	lea	%a3@(-1),%a0
+	cmpl	%a0,%a4
+	jhi	L(mmu_map_040)
+	jra	L(mmu_map_done)
 
-.Lmmu_map_030:
+L(mmu_map_030):
 	/* Calculate the offset into the root table
 	 */
 	movel	%a3,%d0
@@ -1969,27 +1984,29 @@
 
 	/* Is there enough to map for 32MB at once
 	 */
-	lea	%a3@(PTR_TABLE_SIZE*PAGE_TABLE_SIZE*PAGESIZE),%a1
+	lea	%a3@(PTR_TABLE_SIZE*PAGE_TABLE_SIZE*PAGESIZE-1),%a1
 	cmpl	%a1,%a4
 	jcs	1f
 
+	addql	#1,%a1
+
 	/* The root table entry must not no be busy
 	 */
 	tstl	%a0@
-	jne	.Lmmu_map_error
+	jne	L(mmu_map_error)
 
 	/* Do the mapping and advance the pointers
 	 */
-	puts	"early term1"
-	putn	%a2
-	putn	%a3
-	putn	%a1
-	putc	'\n'
+	dputs	"early term1"
+	dputn	%a2
+	dputn	%a3
+	dputn	%a1
+	dputc	'\n'
 	movel	%a2,%a0@
 
 	movel	%a1,%a3
 	lea	%a2@(PTR_TABLE_SIZE*PAGE_TABLE_SIZE*PAGESIZE),%a2
-	jra	.Lmmu_mapnext_030
+	jra	L(mmu_mapnext_030)
 1:
 	/* Calculate the offset into the pointer table
 	 */
@@ -2002,34 +2019,35 @@
 	/* The pointer table entry must not no be busy
 	 */
 	tstl	%a0@
-	jne	.Lmmu_map_error
+	jne	L(mmu_map_error)
 
 	/* Do the mapping and advance the pointers
 	 */
-	puts	"early term2"
-	putn	%a2
-	putn	%a3
-	putc	'\n'
+	dputs	"early term2"
+	dputn	%a2
+	dputn	%a3
+	dputc	'\n'
 	movel	%a2,%a0@
 
 	addl	#PAGE_TABLE_SIZE*PAGESIZE,%a2
 	addl	#PAGE_TABLE_SIZE*PAGESIZE,%a3
 
-.Lmmu_mapnext_030:
+L(mmu_mapnext_030):
 	/* Ready with mapping?
 	 */
-	cmpl	%a3,%a4
-	jhi	.Lmmu_map_030
-	jra	.Lmmu_map_done
+	lea	%a3@(-1),%a0
+	cmpl	%a0,%a4
+	jhi	L(mmu_map_030)
+	jra	L(mmu_map_done)
 
-.Lmmu_map_error:
+L(mmu_map_error):
 
 	dputs	"mmu_map error:"
 	dputn	%a2
 	dputn	%a3
 	dputc	'\n'
 
-.Lmmu_map_done:
+L(mmu_map_done):
 
 func_return	mmu_map
 
@@ -2091,7 +2109,7 @@
 	dputn	ARG2
 	dputc	'\n'
 
-	lea	%pc@(.Ltemp_mmap_mem),%a1
+	lea	%pc@(L(temp_mmap_mem)),%a1
 
 	/* Calculate the offset in the root table
 	 */
@@ -2103,13 +2121,13 @@
 	/* Check if the table is temporary allocated, so we have to reuse it
 	 */
 	movel	%a0@,%d0
-	cmpl	%pc@(.Lmemory_start),%d0
+	cmpl	%pc@(L(memory_start)),%d0
 	jcc	1f
 
 	/* Temporary allocate a ptr table and insert it into the root table
 	 */
 	movel	%a1@,%d0
-	addl	#512,%a1@
+	addl	#PTR_TABLE_SIZE*4,%a1@
 	orw	#_PAGE_TABLE+_PAGE_ACCESSED,%d0
 	movel	%d0,%a0@
 	dputs	" (new)"
@@ -2137,7 +2155,7 @@
 	/* Temporary allocate a page table and insert it into the ptr table
 	 */
 	movel	%a1@,%d0
-	addl	#512,%a1@
+	addl	#PAGE_TABLE_SIZE*4,%a1@
 	orw	#_PAGE_TABLE+_PAGE_ACCESSED,%d0
 	movel	%d0,%a0@
 	dputs	" (new)"
@@ -2161,7 +2179,7 @@
 	 */
 	movel	ARG1,%d0
 	andw	#-PAGESIZE,%d0
-	orw	#_PAGE_PRESENT+_PAGE_ACCESSED,%d0
+	orw	#_PAGE_PRESENT+_PAGE_ACCESSED+_PAGE_DIRTY,%d0
 	movel	%d0,%a0@
 	dputn	%d0
 
@@ -2169,16 +2187,20 @@
 
 func_return	mmu_temp_map
 
-func_start	mmu_engage,%d0-%d2/%a0-%a4,8
+func_start	mmu_engage,%d0-%d2/%a0-%a3
 
 	moveq	#ROOT_TABLE_SIZE-1,%d0
-	movel	%pc@(.Lkernel_pgdir_ptr),%a0
-	movel	%pc@(.Lmemory_start),%a1
+	/* Temporarily use a different root table.  */
+	lea	%pc@(L(kernel_pgdir_ptr)),%a0
+	movel	%a0@,%a2
+	movel	%pc@(L(memory_start)),%a1
+	movel	%a1,%a0@
+	movel	%a2,%a0
 1:
 	movel	%a0@+,%a1@+
 	dbra	%d0,1b
 
-	lea	%pc@(.Ltemp_mmap_mem),%a0
+	lea	%pc@(L(temp_mmap_mem)),%a0
 	movel	%a1,%a0@
 
 	movew	#PAGESIZE-1,%d0
@@ -2188,6 +2210,10 @@
 
 	lea	%pc@(1b),%a0
 	movel	#1b,%a1
+	/* Skip temp mappings if phys == virt */
+	cmpl	%a0,%a1
+	jeq	1f
+
 	mmu_temp_map	%a0,%a0
 	mmu_temp_map	%a0,%a1
 
@@ -2195,69 +2221,64 @@
 	addw	#PAGESIZE,%a1
 	mmu_temp_map	%a0,%a0
 	mmu_temp_map	%a0,%a1
-
-	movel	%pc@(.Lkernel_pgdir_ptr),%a2
-	mmu_temp_map	%a2,%a2
-	movel	%pc@(.Lmemory_start),%a3
-	mmu_temp_map	%a3,%a3
-	movel	%pc@(.Lphys_kernel_start),%d2
+1:
+	movel	%pc@(L(memory_start)),%a3
+	movel	%pc@(L(phys_kernel_start)),%d2
 
-	is_not_040_or_060(.Lmmu_engage_030)
+	is_not_040_or_060(L(mmu_engage_030))
 
-.Lmmu_engage_040:
+L(mmu_engage_040):
 	.chip	68040
 	nop
 	cinva	%bc
 	nop
 	pflusha
 	nop
-	movec	%a2,%srp
+	movec	%a3,%srp
 	movel	#TC_ENABLE+TC_PAGE4K,%d0
 	movec	%d0,%tc		/* enable the MMU */
+	jmp	1f:l
+1:	nop
+	movec	%a2,%srp
+	nop
+	cinva	%bc
+	nop
+	pflusha
 	.chip	68k
-	jmp	.Lmmu_engage_cleanup
+	jra	L(mmu_engage_cleanup)
 
-.Lmmu_engage_030:
+L(mmu_engage_030_temp):
+	.space	12
+L(mmu_engage_030):
 	.chip	68030
-	lea	STACK,%a0
+	lea	%pc@(L(mmu_engage_030_temp)),%a0
 	movel	#0x80000002,%a0@
-	movel	%a2,%a0@(4)
+	movel	%a3,%a0@(4)
 	movel	#0x0808,%d0
 	movec	%d0,%cacr
 	pmove	%a0@,%srp
-	pmove	%a0@,%crp
 	pflusha
 	/*
 	 * enable,super root enable,4096 byte pages,7 bit root index,
 	 * 7 bit pointer index, 6 bit page table index.
 	 */
-	movel	#0x82c07760,%a1@
-	pmove	%a1@,%tc	/* enable the MMU */
-	.chip	68k
-	jmp	.Lmmu_engage_cleanup
-
-.Lmmu_engage_cleanup:
-	moveq	#ROOT_TABLE_SIZE-1,%d0
-1:
-	movel	%a3@+,%a2@+
-	dbra	%d0,1b
-
-	is_not_040_or_060(1f)
-
-	.chip	68040
-	pflusha
-	nop
-	.chip	68k
-	jbra	2f
-1:
-	.chip	68030
+	movel	#0x82c07760,%a0@(8)
+	pmove	%a0@(8),%tc	/* enable the MMU */
+	jmp	1f:l
+1:	movel	%a2,%a0@(4)
+	movel	#0x0808,%d0
+	movec	%d0,%cacr
+	pmove	%a0@,%srp
 	pflusha
 	.chip	68k
-2:
+
+L(mmu_engage_cleanup):
+	subl	%d2,%a2
+	movel	%a2,L(kernel_pgdir_ptr)
 	subl	%d2,%fp
 	subl	%d2,%sp
 	subl	%d2,ARG0
-	subl	%d2,.Lmemory_start
+	subl	%d2,L(memory_start)
 
 func_return	mmu_engage
 
@@ -2269,11 +2290,11 @@
 	dputs	" ="
 #endif
 
-	movel	%pc@(.Lkernel_pgdir_ptr),%a0
+	movel	%pc@(L(kernel_pgdir_ptr)),%a0
 	tstl	%a0
 	jne	2f
 
-	dputs	" (mmu_init:"
+	dputs	"\nmmu_init:"
 
 	/* Find the start of free memory, get_bi_record does this for us,
 	 * as the bootinfo structure is located directly behind the kernel
@@ -2286,9 +2307,9 @@
 
 	dputn	%d0
 
-	lea	%pc@(.Lmemory_start),%a0
+	lea	%pc@(L(memory_start)),%a0
 	movel	%d0,%a0@
-	lea	%pc@(.Lkernel_end),%a0
+	lea	%pc@(L(kernel_end)),%a0
 	movel	%d0,%a0@
 
 	/* we have to return the first page at _stext since the init code
@@ -2296,11 +2317,11 @@
 	 * page is used for further ptr tables in get_ptr_table.
 	 */
 	lea	%pc@(SYMBOL_NAME(_stext)),%a0
-	lea	%pc@(.Lmmu_cached_pointer_tables),%a1
+	lea	%pc@(L(mmu_cached_pointer_tables)),%a1
 	movel	%a0,%a1@
 	addl	#ROOT_TABLE_SIZE*4,%a1@
 
-	lea	%pc@(.Lmmu_num_pointer_tables),%a1
+	lea	%pc@(L(mmu_num_pointer_tables)),%a1
 	addql	#1,%a1@
 
 	/* clear the page
@@ -2311,11 +2332,11 @@
 	clrl	%a1@+
 	dbra	%d0,1b
 
-	lea	%pc@(.Lkernel_pgdir_ptr),%a1
+	lea	%pc@(L(kernel_pgdir_ptr)),%a1
 	movel	%a0,%a1@
 
 	dputn	%a0
-	dputs	")"
+	dputc	'\n'
 2:
 	movel	ARG1,%d0
 	lea	%a0@(%d0*4),%a0
@@ -2344,14 +2365,14 @@
 
 	/* Keep track of the number of pointer tables we use
 	 */
-	dputs	"(mmu_get_new_ptr_table:"
-	lea	%pc@(.Lmmu_num_pointer_tables),%a0
+	dputs	"\nmmu_get_new_ptr_table:"
+	lea	%pc@(L(mmu_num_pointer_tables)),%a0
 	movel	%a0@,%d0
 	addql	#1,%a0@
 
 	/* See if there is a free pointer table in our cache of pointer tables
 	 */
-	lea	%pc@(.Lmmu_cached_pointer_tables),%a1
+	lea	%pc@(L(mmu_cached_pointer_tables)),%a1
 	andw	#7,%d0
 	jne	1f
 
@@ -2366,7 +2387,7 @@
 	addl	#PTR_TABLE_SIZE*4,%a1@
 
 	dputn	%d0
-	dputs	")"
+	dputc	'\n'
 
 	/* Insert the new pointer table into the root table
 	 */
@@ -2449,11 +2470,11 @@
  */
 func_start	get_new_page,%d0/%a1
 
-	dputs	"(get_new_page:"
+	dputs	"\nget_new_page:"
 
 	/* allocate the page and adjust memory_start
 	 */
-	lea	%pc@(.Lmemory_start),%a0
+	lea	%pc@(L(memory_start)),%a0
 	movel	%a0@,%a1
 	addl	#PAGESIZE,%a0@
 
@@ -2466,7 +2487,7 @@
 	dbra	%d0,1b
 
 	dputn	%a0
-	dputs	")"
+	dputc	'\n'
 
 func_return	get_new_page
 
@@ -2480,7 +2501,7 @@
 
 #ifdef CONFIG_MAC
 
-.Lscc_initable_mac:
+L(scc_initable_mac):
 	.byte	9,12		/* Reset */
 	.byte	4,0x44		/* x16, 1 stopbit, no parity */
 	.byte	3,0xc0		/* receiver: 8 bpc */
@@ -2505,7 +2526,7 @@
 #if defined(USE_SCC_A) || defined(USE_SCC_B)
 #define USE_SCC
 /* Initialisation table for SCC */
-.Lscc_initable:
+L(scc_initable):
 	.byte	9,12		/* Reset */
 	.byte	4,0x44		/* x16, 1 stopbit, no parity */
 	.byte	3,0xc0		/* receiver: 8 bpc */
@@ -2544,7 +2565,7 @@
 LSCC_DATA	= 0xff8c83
 
 /* Initialisation table for SCC */
-.Lscc_initable:
+L(scc_initable):
 	.byte	9,12		/* Reset */
 	.byte	4,0x44		/* x16, 1 stopbit, no parity */
 	.byte	3,0xc0		/* receiver: 8 bpc */
@@ -2598,7 +2619,7 @@
 #define SERIAL_CNTRL	CIABBASE+C_PRA
 
 	is_not_amiga(1f)
-	lea	%pc@(.Lcustom),%a0
+	lea	%pc@(L(custom)),%a0
 	movel	#-ZTWOBASE,%a0@
 	bclr	#SERIAL_DTR,SERIAL_CNTRL-ZTWOBASE
 	get_bi_record	BI_AMIGA_SERPER
@@ -2608,7 +2629,7 @@
 #endif
 #ifdef CONFIG_ATARI
 	is_not_atari(4f)
-	movel	%pc@(.Liobase),%a1
+	movel	%pc@(L(iobase)),%a1
 #if defined(USE_PRINTER)
 	bclr	#0,%a1@(LSTMFP_IERB)
 	bclr	#0,%a1@(LSTMFP_DDR)
@@ -2622,7 +2643,7 @@
 	moveb	%d0,%a1@(LPSG_WRITE)
 #elif defined(USE_SCC)
 	lea	%a1@(LSCC_CTRL),%a0
-	lea	%pc@(.Lscc_initable),%a1
+	lea	%pc@(L(scc_initable)),%a1
 2:	moveb	%a1@+,%d0
 	jmi	3f
 	moveb	%d0,%a0@
@@ -2637,11 +2658,11 @@
 	orb	#1,%a1@(LMFP_TDCDR)
 	bset	#1,%a1@(LMFP_TSR)
 #endif
-	jra	.Lserial_init_done
+	jra	L(serial_init_done)
 4:
 #endif
 #ifdef CONFIG_MAC
-	is_not_mac(.Lserial_init_not_mac)
+	is_not_mac(L(serial_init_not_mac))
 #ifdef MAC_SERIAL_DEBUG
 #if !defined(MAC_USE_SCC_A) && !defined(MAC_USE_SCC_B)
 #define MAC_USE_SCC_B
@@ -2653,8 +2674,8 @@
 
 #ifdef MAC_USE_SCC_A
 	/* Initialize channel A */
-	movel	%pc@(.Lmac_sccbase),%a0
-	lea	%pc@(.Lscc_initable_mac),%a1
+	movel	%pc@(L(mac_sccbase)),%a0
+	lea	%pc@(L(scc_initable_mac)),%a1
 5:	moveb	%a1@+,%d0
 	jmi	6f
 	moveb	%d0,%a0@(mac_scc_cha_a_ctrl_offset)
@@ -2666,9 +2687,9 @@
 #ifdef MAC_USE_SCC_B
 	/* Initialize channel B */
 #ifndef MAC_USE_SCC_A	/* Load mac_sccbase only if needed */
-	movel	%pc@(.Lmac_sccbase),%a0
+	movel	%pc@(L(mac_sccbase)),%a0
 #endif	/* MAC_USE_SCC_A */
-	lea	%pc@(.Lscc_initable_mac),%a1
+	lea	%pc@(L(scc_initable_mac)),%a1
 7:	moveb	%a1@+,%d0
 	jmi	8f
 	moveb	%d0,%a0@(mac_scc_cha_b_ctrl_offset)
@@ -2678,11 +2699,11 @@
 #endif	/* MAC_USE_SCC_B */
 #endif	/* MAC_SERIAL_DEBUG */
 
-	jra	.Lserial_init_done
-.Lserial_init_not_mac:
+	jra	L(serial_init_done)
+L(serial_init_not_mac):
 #endif	/* CONFIG_MAC */
 
-.Lserial_init_done:
+L(serial_init_done):
 func_return	serial_init
 
 /*
@@ -2702,12 +2723,12 @@
 	is_not_amiga(2f)
 	andw	#0x00ff,%d0
 	oriw	#0x0100,%d0
-	movel	%pc@(.Lcustom),%a0
+	movel	%pc@(L(custom)),%a0
 	movew	%d0,%a0@(CUSTOMBASE+C_SERDAT)
 1:	movew	%a0@(CUSTOMBASE+C_SERDATR),%d0
 	andw	#0x2000,%d0
 	jeq	1b
-	jra	.Lserial_putc_done
+	jra	L(serial_putc_done)
 2:
 #endif
 
@@ -2721,7 +2742,7 @@
 #ifdef MAC_SERIAL_DEBUG
 
 #ifdef MAC_USE_SCC_A
-	movel	%pc@(.Lmac_sccbase),%a1
+	movel	%pc@(L(mac_sccbase)),%a1
 3:	btst	#2,%a1@(mac_scc_cha_a_ctrl_offset)
 	jeq	3b
 	moveb	%d0,%a1@(mac_scc_cha_a_data_offset)
@@ -2729,7 +2750,7 @@
 
 #ifdef MAC_USE_SCC_B
 #ifndef MAC_USE_SCC_A	/* Load mac_sccbase only if needed */
-	movel	%pc@(.Lmac_sccbase),%a1
+	movel	%pc@(L(mac_sccbase)),%a1
 #endif	/* MAC_USE_SCC_A */
 4:	btst	#2,%a1@(mac_scc_cha_b_ctrl_offset)
 	jeq	4b
@@ -2738,13 +2759,13 @@
 
 #endif	/* MAC_SERIAL_DEBUG */
 
-	jra	.Lserial_putc_done
+	jra	L(serial_putc_done)
 5:
 #endif	/* CONFIG_MAC */
 
 #ifdef CONFIG_ATARI
 	is_not_atari(4f)
-	movel	%pc@(.Liobase),%a1
+	movel	%pc@(L(iobase)),%a1
 #if defined(USE_PRINTER)
 3:	btst	#0,%a1@(LSTMFP_GPIP)
 	jne	3b
@@ -2767,7 +2788,7 @@
 	jeq	3b
 	moveb	%d0,%a1@(LMFP_UDR)
 #endif
-	jra	.Lserial_putc_done
+	jra	L(serial_putc_done)
 4:
 #endif	/* CONFIG_ATARI */
 
@@ -2779,9 +2800,10 @@
 	 */
 	moveml	%d0-%d7/%a2-%a6,%sp@-
 	moveb	%d0,%sp@-
-	.long	0x4e4f0020	/* TRAP 0x020 */
+	trap	#15
+	.word	0x0020	/* TRAP 0x020 */
 	moveml	%sp@+,%d0-%d7/%a2-%a6
-	jbra	.Lserial_putc_done
+	jbra	L(serial_putc_done)
 2:
 #endif CONFIG_MVME162 | CONFIG_MVME167
 
@@ -2793,11 +2815,11 @@
 1:	btst	#2,BVME_SCC_CTRL_A
 	jeq	1b
 	moveb	%d0,BVME_SCC_DATA_A
-	jbra	.Lserial_putc_done
+	jbra	L(serial_putc_done)
 2:
 #endif
 
-.Lserial_putc_done:
+L(serial_putc_done):
 func_return	serial_putc
 
 /*
@@ -2879,6 +2901,14 @@
 	rts
 #endif /* CONFIG_MAC */
 
+#ifdef CONFIG_HP300
+func_start	set_leds,%d0/%a0
+	movel	ARG1,%d0
+	movel	%pc@(Lcustom),%a0
+	moveb	%d0,%a0@(0x1ffff)
+func_return	set_leds
+#endif
+
 #ifdef CONSOLE
 /*
  *	For continuity, see the data alignment
@@ -2891,7 +2921,7 @@
 #define Lconsole_struct_left_edge	16
 #define Lconsole_struct_penguin_putc	20
 
-.Lconsole_init:
+L(console_init):
 	/*
 	 *	Some of the register usage that follows
 	 *		a0 = pointer to boot_info
@@ -2907,12 +2937,12 @@
 	 */
 	moveml	%a0-%a4/%d0-%d7,%sp@-
 
-	lea	%pc@(SYMBOL_NAME(.Lconsole_globals)),%a2
-	lea	%pc@(.Lmac_videobase),%a0
+	lea	%pc@(L(console_globals)),%a2
+	lea	%pc@(L(mac_videobase)),%a0
 	movel	%a0@,%a1
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 	movel	%a0@,%d5
-	lea	%pc@(.Lmac_dimensions),%a0
+	lea	%pc@(L(mac_dimensions)),%a0
 	movel	%a0@,%d3	/* -> low byte */
 	movel	%d3,%d4
 	swap	%d4		/* -> high byte */
@@ -2946,7 +2976,7 @@
 	 *	At this point we make a shift in register usage
 	 *	a1 = address of Lconsole_font pointer
 	 */
-	lea	%pc@(SYMBOL_NAME(.Lconsole_font)),%a1
+	lea	%pc@(L(console_font)),%a1
 	movel	%a0,%a1@	/* store pointer to struct fbcon_font_desc in Lconsole_font */
 
 	/*
@@ -2978,7 +3008,7 @@
 	moveml	%sp@+,%a0-%a4/%d0-%d7
 	rts
 
-.Lconsole_put_stats:
+L(console_put_stats):
 	/*
 	 *	Some of the register usage that follows
 	 *		a0 = pointer to boot_info
@@ -2990,7 +3020,7 @@
 
 #ifdef SERIAL_DEBUG
 	puts	" vidaddr:"
-	putn	%pc@(.Lmac_videobase)		/* video addr. */
+	putn	%pc@(L(mac_videobase))		/* video addr. */
 
 	puts	"\n  _stext:"
 	lea	%pc@(SYMBOL_NAME(_stext)),%a0
@@ -3001,7 +3031,7 @@
 	putn	%a0
 
 	puts	"\ncpuid:"
-	putn	%pc@(.Lcputype)
+	putn	%pc@(L(cputype))
 	putc	'\n'
 
 #  if defined(MMU_PRINT)
@@ -3013,14 +3043,14 @@
 	rts
 
 #ifdef CONSOLE_PENGUIN
-.Lconsole_put_penguin:
+L(console_put_penguin):
 	/*
 	 *	Get 'that_penguin' onto the screen in the upper right corner
 	 *	penguin is 64 x 74 pixels, align against right edge of screen
 	 */
 	moveml	%a0-%a1/%d0-%d7,%sp@-
 
-	lea	%pc@(.Lmac_dimensions),%a0
+	lea	%pc@(L(mac_dimensions)),%a0
 	movel	%a0@,%d0
 	andil	#0xffff,%d0
 	subil	#64,%d0		/* snug up against the right edge */
@@ -3055,19 +3085,19 @@
 	 *	output	a1 = dest
 	 *		a2 = source
 	 */
-	lea	%pc@(.Lmac_videobase),%a0
+	lea	%pc@(L(mac_videobase)),%a0
 	movel	%a0@,%a1
 	movel	%a1,%a2
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 	movel	%a0@,%d5
-	movel	%pc@(SYMBOL_NAME(.Lconsole_font)),%a0
+	movel	%pc@(L(console_font)),%a0
 	mulul	%a0@(FBCON_FONT_DESC_HEIGHT),%d5	/* account for # scan lines per character */
 	addal	%d5,%a2
 
 	/*
 	 * Get dimensions
 	 */
-	lea	%pc@(.Lmac_dimensions),%a0
+	lea	%pc@(L(mac_dimensions)),%a0
 	movel	%a0@,%d3
 	movel	%d3,%d4
 	swap	%d4
@@ -3077,9 +3107,9 @@
 	/*
 	 * Calculate number of bytes to move
 	 */
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 	movel	%a0@,%d6
-	movel	%pc@(SYMBOL_NAME(.Lconsole_font)),%a0
+	movel	%pc@(L(console_font)),%a0
 	subl	%a0@(FBCON_FONT_DESC_HEIGHT),%d4	/* we're not scrolling the top row! */
 	mulul	%d4,%d6		/* scan line bytes x num scan lines */
 	divul	#32,%d6		/* we'll move 8 longs at a time */
@@ -3096,9 +3126,9 @@
 	movel	%a2@+,%a1@+
 	dbra	%d6,console_scroll_loop
 
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 	movel	%a0@,%d6
-	movel	%pc@(SYMBOL_NAME(.Lconsole_font)),%a0
+	movel	%pc@(L(console_font)),%a0
 	mulul	%a0@(FBCON_FONT_DESC_HEIGHT),%d6	/* scan line bytes x font height */
 	divul	#32,%d6			/* we'll move 8 words at a time */
 	subq	#1,%d6
@@ -3132,7 +3162,7 @@
 	/* A little safe recursion is good for the soul */
 	console_putc	#'\r'
 1:
-	lea	%pc@(.Lconsole_globals),%a0
+	lea	%pc@(L(console_globals)),%a0
 
 	cmpib	#10,%d7
 	jne	console_not_lf
@@ -3184,7 +3214,7 @@
 	 *	At this point we make a shift in register usage
 	 *	a0 = address of pointer to font data (fbcon_font_desc)
 	 */
-	movel	%pc@(SYMBOL_NAME(.Lconsole_font)),%a0
+	movel	%pc@(L(console_font)),%a0
 	movel	%a0@(FBCON_FONT_DESC_DATA),%a1	/* Load fbcon_font_desc.data into a1 */
 	andl	#0x000000ff,%d7
 		/* ASSERT: a0 = contents of Lconsole_font */
@@ -3238,11 +3268,11 @@
 	 */
 	moveml	%a0-%a1/%d0-%d4,%sp@-
 
-	lea	%pc@(.Lmac_videobase),%a0
+	lea	%pc@(L(mac_videobase)),%a0
 	movel	%a0@,%a1
-	lea	%pc@(.Lmac_videodepth),%a0
+	lea	%pc@(L(mac_videodepth)),%a0
 	movel	%a0@,%d3
-	lea	%pc@(.Lmac_rowbytes),%a0
+	lea	%pc@(L(mac_rowbytes)),%a0
 	mulul	%a0@,%d1
 
 	/*
@@ -3365,7 +3395,7 @@
  * It was still in the 2.1.77 head.S, so it's still here.
  * (And still not used!)
  */
-.Lshowtest:
+L(showtest):
 	moveml	%a0/%d7,%sp@-
 	puts	"A="
 	putn	%a1
@@ -3379,7 +3409,7 @@
 	putn	%a0@
 
 	puts	"S="
-	lea	%pc@(.Lmmu),%a0
+	lea	%pc@(L(mmu)),%a0
 	.long	0xf0106200		| pmove		%psr,%a0@
 	clrl	%d7
 	movew	%a0@,%d7
@@ -3393,31 +3423,31 @@
 __INITDATA
 	.align	4
 
-#if defined(CONFIG_ATARI) || defined(CONFIG_AMIGA)
-.Lcustom:
-.Liobase:
+#if defined(CONFIG_ATARI) || defined(CONFIG_AMIGA) || defined(CONFIG_HP300)
+L(custom):
+L(iobase):
 	.long 0
 #endif
 
 #ifdef CONFIG_MAC
-.Lconsole_video_virtual:
+L(console_video_virtual):
 	.long	0
 #endif	/* CONFIG_MAC */
 
 #if defined(CONSOLE)
-.Lconsole_globals:
+L(console_globals):
 	.long	0		/* cursor column */
 	.long	0		/* cursor row */
 	.long	0		/* max num columns */
 	.long	0		/* max num rows */
 	.long	0		/* left edge */
 	.long	0		/* mac putc */
-.Lconsole_font:
+L(console_font):
 	.long	0		/* pointer to console font (struct fbcon_font_desc) */
 #endif /* CONSOLE */
 
 #if defined(MMU_PRINT)
-.Lmmu_print_data:
+L(mmu_print_data):
 	.long	0		/* valid flag */
 	.long	0		/* start logical */
 	.long	0		/* next logical */
@@ -3425,21 +3455,21 @@
 	.long	0		/* next physical */
 #endif /* MMU_PRINT */
 
-.Lcputype:
+L(cputype):
 	.long	0
-.Lmmu_cached_pointer_tables:
+L(mmu_cached_pointer_tables):
 	.long	0
-.Lmmu_num_pointer_tables:
+L(mmu_num_pointer_tables):
 	.long	0
-.Lphys_kernel_start:
+L(phys_kernel_start):
 	.long	0
-.Lkernel_end:
+L(kernel_end):
 	.long	0
-.Lmemory_start:
+L(memory_start):
 	.long	0
-.Lkernel_pgdir_ptr:
+L(kernel_pgdir_ptr):
 	.long	0
-.Ltemp_mmap_mem:
+L(temp_mmap_mem):
 	.long	0
 
 
@@ -3449,18 +3479,18 @@
 #endif
 
 #if defined(CONFIG_MAC)
-.Lmac_booter_data:
+L(mac_booter_data):
 	.long	0
-.Lmac_videobase:
+L(mac_videobase):
 	.long	0
-.Lmac_videodepth:
+L(mac_videodepth):
 	.long	0
-.Lmac_dimensions:
+L(mac_dimensions):
 	.long	0
-.Lmac_rowbytes:
+L(mac_rowbytes):
 	.long	0
 #ifdef MAC_SERIAL_DEBUG
-.Lmac_sccbase:
+L(mac_sccbase):
 	.long	0
 #endif /* MAC_SERIAL_DEBUG */
 #endif
--- linux/arch/m68k/mm/init.c.~1~	Wed Jan 13 18:02:38 1999
+++ linux/arch/m68k/mm/init.c	Mon Jan 18 00:03:11 1999
@@ -150,18 +150,18 @@
 		for (i = 0; i < PTRS_PER_PGD; i++) {
 			if (!pgd_val(kernel_pg_dir[i]))
 				continue;
-			pmd = (unsigned long)phys_to_virt(pgd_val(kernel_pg_dir[i]));
+			pmd = pgd_page(kernel_pg_dir[i]);
 			if (pmd > last)
 				last = pmd;
 		}
 
-		last_pgtable = (pmd_t *)(last & -sizeof(pmd_table));
+		last_pgtable = (pmd_t *)last;
 #ifdef DEBUG
 		printk("kernel_ptr_init: %p\n", last_pgtable);
 #endif
 	}
 
-	if (((unsigned long)last_pgtable & ~PAGE_MASK) / sizeof(pmd_table) == 7) {
+	if (((unsigned long)(last_pgtable + PTRS_PER_PMD) & ~PAGE_MASK) == 0) {
 		last_pgtable = (pmd_t *)*memavailp;
 		*memavailp += PAGE_SIZE;
 
@@ -186,15 +186,16 @@
 	pmd_t *pmd_dir;
 	pte_t *pte_dir;
 
-	physaddr = addr | m68k_supervisor_cachemode |
-		_PAGE_PRESENT | _PAGE_ACCESSED;
+	physaddr = (addr | m68k_supervisor_cachemode |
+		    _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_DIRTY);
 	if (CPU_IS_040_OR_060)
 		physaddr |= _PAGE_GLOBAL040;
 
 	while (size > 0) {
 #ifdef DEBUG
 		if (!(virtaddr & (PTRTREESIZE-1)))
-			printk ("\npa=%#lx va=%#lx ", physaddr, virtaddr);
+			printk ("\npa=%#lx va=%#lx ", physaddr & PAGE_MASK,
+				virtaddr);
 #endif
 		pgd_dir = pgd_offset_k(virtaddr);
 		if (virtaddr && CPU_IS_020_OR_030) {
@@ -224,7 +225,7 @@
 #ifdef DEBUG
 				printk ("[early term]");
 #endif
-				pmd_dir->pmd[(virtaddr/PTRTREESIZE)&-16] = physaddr;
+				pmd_dir->pmd[(virtaddr/PTRTREESIZE) & 15] = physaddr;
 				physaddr += PTRTREESIZE;
 			} else {
 				int i;
@@ -436,8 +437,7 @@
 	init_pointer_table((unsigned long)kernel_pg_dir);
 	for (i = 0; i < PTRS_PER_PGD; i++) {
 		if (pgd_val(kernel_pg_dir[i]))
-			init_pointer_table((unsigned long)
-				phys_to_virt(pgd_val(kernel_pg_dir[i])));
+			init_pointer_table(pgd_page(kernel_pg_dir[i]));
 	}
 
 	printk("Memory: %luk/%luk available (%dk kernel code, %dk data, %dk init)\n",
--- linux/arch/m68k/mm/memory.c.~1~	Wed Jan 13 18:02:40 1999
+++ linux/arch/m68k/mm/memory.c	Sun Jan 17 22:09:16 1999
@@ -101,8 +101,8 @@
 void __init init_pointer_table(unsigned long ptable)
 {
 	ptable_desc *dp;
-	unsigned long page = (unsigned long)ptable & PAGE_MASK;
-	unsigned char mask = 1 << (((unsigned long)ptable - page)/PTABLE_SIZE);
+	unsigned long page = ptable & PAGE_MASK;
+	unsigned char mask = 1 << ((ptable - page)/PTABLE_SIZE);
 
 	dp = PAGE_PD(page);
 	if (!(PD_MARKBITS(dp) & mask)) {
--- linux/drivers/scsi/atari_scsi.c.~2~	Fri Jan 15 20:09:56 1999
+++ linux/drivers/scsi/atari_scsi.c	Fri Jan 15 20:06:28 1999
@@ -461,8 +461,8 @@
 		/* If the dribble buffer was used on a read operation, copy the DMA-ed
 		 * data to the original destination address.
 		 */
-		memcpy( atari_dma_orig_addr, (void *)phys_to_virt(atari_dma_startaddr),
-		       HOSTDATA_DMALEN - atari_dma_residual );
+		memcpy(atari_dma_orig_addr, phys_to_virt(atari_dma_startaddr),
+		       HOSTDATA_DMALEN - atari_dma_residual);
 		atari_dma_orig_addr = NULL;
 	}
 
@@ -476,20 +476,21 @@
 static void atari_scsi_fetch_restbytes( void )
 {
 	int nr;
-	char	*src, *dst;
+	char *src, *dst;
+	unsigned long phys_dst;
 
 	/* fetch rest bytes in the DMA register */
-	dst = (char *)SCSI_DMA_READ_P( dma_addr );
-	nr = ((long)dst & 3);
+	phys_dst = SCSI_DMA_READ_P(dma_addr);
+	nr = phys_dst & 3;
 	if (nr) {
-		/* there are 'nr' bytes left for the last long address before the
-		   DMA pointer */
-		dst = (char *)((unsigned long)dst ^ nr);
+		/* there are 'nr' bytes left for the last long address
+		   before the DMA pointer */
+		phys_dst ^= nr;
 		DMA_PRINTK("SCSI DMA: there are %d rest bytes for phys addr 0x%08lx",
-			   nr, (long)dst);
-		dst = (char *)phys_to_virt(dst);  /* The content of the DMA pointer
-					   * is a physical address! */
-		DMA_PRINTK(" = virt addr 0x%08lx\n", (long)dst);
+			   nr, phys_dst);
+		/* The content of the DMA pointer is a physical address!  */
+		dst = phys_to_virt(phys_dst);
+		DMA_PRINTK(" = virt addr %p\n", dst);
 		for (src = (char *)&tt_scsi_dma.dma_restdata; nr != 0; --nr)
 			*dst++ = *src++;
 	}
--- linux/drivers/video/atafb.c.~3~	Fri Jan 15 20:10:55 1999
+++ linux/drivers/video/atafb.c	Sun Jan 17 23:51:38 1999
@@ -103,7 +103,7 @@
 static int ovsc_offset=0, ovsc_addlen=0;
 
 static struct atafb_par {
-	unsigned long screen_base;
+	void *screen_base;
 	int yres_virtual;
 #if defined ATAFB_TT || defined ATAFB_STE
 	union {
@@ -167,8 +167,8 @@
 
 static struct fb_info fb_info;
 
-static unsigned long screen_base;	/* base address of screen */
-static unsigned long real_screen_base;	/* (only for Overscan) */
+static void *screen_base;	/* base address of screen */
+static void *real_screen_base;	/* (only for Overscan) */
 
 static int screen_len;
 
@@ -193,7 +193,7 @@
 
 static unsigned			external_depth;
 static int				external_pmode;
-static unsigned long	external_addr = 0;
+static void *external_addr = 0;
 static unsigned long	external_len;
 static unsigned long	external_vgaiobase = 0;
 static unsigned int		external_bitspercol = 6;
@@ -299,7 +299,7 @@
  *   Read a single color register and split it into
  *   colors/transparent. Return != 0 for invalid regno.
  *
- * void (*set_screen_base)( unsigned long s_base )
+ * void (*set_screen_base)(void *s_base)
  *   Set the base address of the displayed frame buffer. Only called
  *   if yres_virtual > yres or xres_virtual > xres.
  *
@@ -328,7 +328,7 @@
 	int  (*setcolreg)( unsigned regno, unsigned red,
 					   unsigned green, unsigned blue,
 					   unsigned transp, struct fb_info *info );
-	void (*set_screen_base)( unsigned long s_base );
+	void (*set_screen_base)(void *s_base);
 	int  (*blank)( int blank_mode );
 	int  (*pan_display)( struct fb_var_screeninfo *var,
 						 struct atafb_par *par);
@@ -464,7 +464,7 @@
 	int mode;
 
 	strcpy(fix->id,"Atari Builtin");
-	fix->smem_start = (char *)real_screen_base;
+	fix->smem_start = real_screen_base;
 	fix->smem_len = screen_len;
 	fix->type=FB_TYPE_INTERLEAVED_PLANES;
 	fix->type_aux=2;
@@ -797,7 +797,7 @@
 							  struct atafb_par *par )
 {
 	strcpy(fix->id, "Atari Builtin");
-	fix->smem_start = (char *)real_screen_base;
+	fix->smem_start = real_screen_base;
 	fix->smem_len = screen_len;
 	fix->type = FB_TYPE_INTERLEAVED_PLANES;
 	fix->type_aux = 2;
@@ -1760,7 +1760,7 @@
 	int mode;
 
 	strcpy(fix->id,"Atari Builtin");
-	fix->smem_start = (char *)real_screen_base;
+	fix->smem_start = real_screen_base;
 	fix->smem_len = screen_len;
 	fix->type = FB_TYPE_INTERLEAVED_PLANES;
 	fix->type_aux = 2;
@@ -2024,7 +2024,7 @@
 	return 1;
 }
 
-static void stste_set_screen_base(unsigned long s_base)
+static void stste_set_screen_base(void *s_base)
 {
 	unsigned long addr;
 	addr= virt_to_phys(s_base);
@@ -2104,8 +2104,8 @@
 
 {
 	strcpy(fix->id,"Unknown Extern");
-	fix->smem_start=(char *)external_addr;
-	fix->smem_len=(external_len + PAGE_SIZE -1) & PAGE_MASK;
+	fix->smem_start=external_addr;
+	fix->smem_len = PAGE_ALIGN(external_len);
 	if (external_depth == 1) {
 		fix->type = FB_TYPE_PACKED_PIXELS;
 		/* The letters 'n' and 'i' in the "atavideo=external:" stand
@@ -2295,7 +2295,7 @@
 
 /* ------ This is the same for most hardware types -------- */
 
-static void set_screen_base(unsigned long s_base)
+static void set_screen_base(void *s_base)
 {
 	unsigned long addr;
 	addr= virt_to_phys(s_base);
@@ -2804,15 +2804,14 @@
 #ifdef ATAFB_EXT
 	if (!external_addr) {
 #endif /* ATAFB_EXT */
-		mem_req = default_mem_req + ovsc_offset +
-			ovsc_addlen;
-		mem_req = ((mem_req + PAGE_SIZE - 1) & PAGE_MASK) + PAGE_SIZE;
-		screen_base = (unsigned long)atari_stram_alloc(mem_req, NULL,
-							       "atafb");
+		mem_req = default_mem_req + ovsc_offset + ovsc_addlen;
+		mem_req = PAGE_ALIGN(mem_req) + PAGE_SIZE;
+		screen_base = atari_stram_alloc(mem_req, NULL, "atafb");
 		if (!screen_base)
 			panic("Cannot allocate screen memory");
-		memset((char *) screen_base, 0, mem_req);
-		pad = ((screen_base + PAGE_SIZE-1) & PAGE_MASK) - screen_base;
+		memset(screen_base, 0, mem_req);
+		pad = (unsigned long)screen_base & (PAGE_SIZE-1);
+		if (pad) pad ^= PAGE_SIZE-1;
 		screen_base+=pad;
 		real_screen_base=screen_base+ovsc_offset;
 		screen_len = (mem_req - pad - ovsc_offset) & PAGE_MASK;
@@ -2820,9 +2819,9 @@
 		if (CPU_IS_040_OR_060) {
 			/* On a '040+, the cache mode of video RAM must be set to
 			 * write-through also for internal video hardware! */
-			cache_push( virt_to_phys(screen_base), screen_len );
-			kernel_set_cachemode( screen_base, screen_len,
-					      IOMAP_WRITETHROUGH );
+			cache_push(virt_to_phys(screen_base), screen_len);
+			kernel_set_cachemode(screen_base, screen_len,
+					     IOMAP_WRITETHROUGH);
 		}
 #ifdef ATAFB_EXT
 	}
@@ -2836,7 +2835,7 @@
 		screen_base      =
 		real_screen_base = external_addr;
 		screen_len       = external_len & PAGE_MASK;
-		memset ((char *) screen_base, 0, external_len);
+		memset (screen_base, 0, external_len);
 	}
 #endif /* ATAFB_EXT */
 
--- linux/include/asm-m68k/pgtable.h.~1~	Wed Jan 13 18:05:41 1999
+++ linux/include/asm-m68k/pgtable.h	Sun Jan 17 22:31:26 1999
@@ -429,24 +429,24 @@
 extern inline void pmd_set(pmd_t * pmdp, pte_t * ptep)
 {
 	int i;
-
-	ptep = (pte_t *) virt_to_phys(ptep);
-	for (i = 0; i < 16; i++, ptep += PTRS_PER_PTE/16)
-		pmdp->pmd[i] = _PAGE_TABLE | _PAGE_ACCESSED | (unsigned long)ptep;
+	unsigned long ptbl;
+	ptbl = virt_to_phys(ptep);
+	for (i = 0; i < 16; i++, ptbl += sizeof(pte_table)/16)
+		pmdp->pmd[i] = _PAGE_TABLE | _PAGE_ACCESSED | ptbl;
 }
 
 extern inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
 { pgd_val(*pgdp) = _PAGE_TABLE | _PAGE_ACCESSED | virt_to_phys(pmdp); }
 
 extern inline unsigned long pte_page(pte_t pte)
-{ return (unsigned long)phys_to_virt((unsigned long)(pte_val(pte) & PAGE_MASK)); }
+{ return (unsigned long)phys_to_virt(pte_val(pte) & PAGE_MASK); }
 
 extern inline unsigned long pmd_page2(pmd_t *pmd)
-{ return (unsigned long)phys_to_virt((unsigned long)(pmd_val(*pmd) & _TABLE_MASK)); }
+{ return (unsigned long)phys_to_virt(pmd_val(*pmd) & _TABLE_MASK); }
 #define pmd_page(pmd) pmd_page2(&(pmd))
 
 extern inline unsigned long pgd_page(pgd_t pgd)
-{ return (unsigned long)phys_to_virt((unsigned long)(pgd_val(pgd) & _TABLE_MASK)); }
+{ return (unsigned long)phys_to_virt(pgd_val(pgd) & _TABLE_MASK); }
 
 extern inline int pte_none(pte_t pte)		{ return !pte_val(pte); }
 extern inline int pte_present(pte_t pte)	{ return pte_val(pte) & (_PAGE_PRESENT | _PAGE_FAKE_SUPER); }

-- 
Andreas Schwab                                      "And now for something
schwab@issan.cs.uni-dortmund.de                      completely different"
schwab@gnu.org

