[kernel] r10087 - in dists/trunk/linux-2.6/debian: . patches/bugfix/m68k patches/bugfix/m68k/2.6.24 patches/series

Christian T. Steigies cts at alioth.debian.org
Tue Jan 8 22:54:41 UTC 2008


Author: cts
Date: Tue Jan  8 22:54:40 2008
New Revision: 10087

Log:
Update patches from linux-m68k CVS


Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/130-adbraw.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/133-arch.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/134-atari-fat.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/141-ide.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/633-atari_scc.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/atari-hades-pci-balance-iomap-and-iounmap.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/dio-ARRAY_SIZE-cleanup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-ARRAY_SIZE-cleanup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-cc-cross-prefix.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-initrd-fix.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-amiga-amiga_ksyms-c.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-atari-atari_ksyms-c.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-hp300-ksyms-c.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mac-mac_ksyms-c.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mvme16x-mvme16x_ksyms-c.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-add-nubus-card-definitions-and-a-typo-fix.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-macii-adb-comment-correction.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-MAC_ADBKEYCODES.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-code.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/nubus-kill-drivers-nubus-nubus_syms-c.diff
Removed:
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/130-adbraw.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/133-arch.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/134-atari-fat.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/141-ide.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/143-ioext.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/149-mc68681.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/152-pci.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/357-mac89x0.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/448-ide.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/478-serial.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/577-module-arch.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/600-task_thread_info.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/611-module_fixup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/618-discontig.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/630-extern-cleanup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/630-extern-cleanup.diff.1
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/631-thread_stack.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/633-atari_scc.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/634-atari_scsi.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/635-atari_input.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/636-atafb.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/add-termios2.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/amiga-a2065-ariadne-stats.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/ask-m68k-io.h-missing.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari-aranym.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari-ethernec.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari-rom-isa.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari-scsi-compile-fixes.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari-scsi-reformat.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/atari_NCR5380-work.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/debian-2.6.21-2-atari-scsi.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/debian-2.6.21-2-rom-isa.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/disable-mac-broken-config-options.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/dmasound_paula.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/early-param.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/ethernec-kill-ETHERNEC_USE_POLL.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/ethernec-work.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/falconide_intr_lock-ratelimit.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/falconide_intr_lock-reentrant.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/hilkbd-warning.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/irq_lockdep.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/kmap_atomic-inline.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-53c700-cleanups.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-53c700-scsi.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-amiga-z2ram-kill-TRUE-FALSE.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-arbitary-speed-tty-support.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-as.patch
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-do-not-include-RODATA-in-text-segment.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-generic-io.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-linux-gnu-crosscompile.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-mvme-scsi-rename.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-page.h-needs-compiler.h.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-reformat.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-scsi-Kconfig-hickups.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-undefined-module_fixup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/m68k-use-_AC.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-cuda-adb-fixes.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-finish_irq_cleanup.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-irq-plan-e.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-irq-prep.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-macii-adb-fixes.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-macmace-fixes.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-macsonic-via-alt-mapping.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-patch_A-mac68k_cvs_nubus_defines.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-patch_B-mac68k_cvs_DP8390_update.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-patch_d-via-alt-mapping.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-remove-unused-adb-header.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-revert-remaining-irq-damage.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/mac68k-sonic-fixes.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/nfeth-virt_to_phys.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/pmu_queue_request-conflict.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/split-amiga7xx.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/sun3-3x-cg3-bw2.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/sun3-3x-serial.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/sun3-numints.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/unnecessary-m68k_memoffset.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/via-pmu68k-dead-code.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/zorro-module-device-table.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/zorro-resource_size_t-warnings.diff
   dists/trunk/linux-2.6/debian/patches/bugfix/m68k/zorro_config_attr-read-only.diff
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	(original)
+++ dists/trunk/linux-2.6/debian/changelog	Tue Jan  8 22:54:40 2008
@@ -59,7 +59,10 @@
   * [mips/mipsel] Remove QEMU flavour, as the Malta platform is now correctly
     emulated in QEMU.
 
- -- maximilian attems <maks at debian.org>  Mon, 07 Jan 2008 17:28:08 +0100
+  [ Christian T. Steigies ]
+  * [m68k]: Update patches from linux-m68k CVS 
+
+ -- Christian T. Steigies <cts at debian.org>  Tue,  8 Jan 2008 22:16:26 +0100
 
 linux-2.6 (2.6.23-1~experimental.1) UNRELEASED; urgency=low
 

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/130-adbraw.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/130-adbraw.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,42 @@
+To: linus, alan
+Cc: lkml
+Subject: [PATCH] ADB raw packets
+
+From: Linux/m68k legacy
+
+ADB: add support for raw packets
+---
+ drivers/macintosh/adb.c |    7 ++++---
+ include/linux/adb.h     |    1 +
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/macintosh/adb.c
++++ b/drivers/macintosh/adb.c
+@@ -448,13 +448,14 @@ adb_request(struct adb_request *req, voi
+ 		use_sreq = 1;
+ 	} else
+ 		use_sreq = 0;
+-	req->nbytes = nbytes+1;
++	i = (flags & ADBREQ_RAW) ? 0 : 1;
++	req->nbytes = nbytes+i;
+ 	req->done = done;
+ 	req->reply_expected = flags & ADBREQ_REPLY;
+ 	req->data[0] = ADB_PACKET;
+ 	va_start(list, nbytes);
+-	for (i = 0; i < nbytes; ++i)
+-		req->data[i+1] = va_arg(list, int);
++	while (i < req->nbytes)
++		req->data[i++] = va_arg(list, int);
+ 	va_end(list);
+ 
+ 	if (flags & ADBREQ_NOSEND)
+--- a/include/linux/adb.h
++++ b/include/linux/adb.h
+@@ -76,6 +76,7 @@ struct adb_driver {
+ #define ADBREQ_REPLY	1	/* expect reply */
+ #define ADBREQ_SYNC	2	/* poll until done */
+ #define ADBREQ_NOSEND	4	/* build the request, but don't send it */
++#define ADBREQ_RAW	8	/* send raw packet (don't prepend ADB_PACKET) */
+ 
+ /* Messages sent thru the client_list notifier. You should NOT stop
+    the operation, at least not with this version */

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/133-arch.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/133-arch.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,23 @@
+Subject: [PATCH] Local m68k changes
+
+Local m68k changes, _NEVER_ to be submitted upstream:
+  - Force ARCH to be m68k
+  - Append `-m68k' to EXTRAVERSION
+
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org> for m68k CVS only
+---
+ Makefile          |    2 +-
+ localversion.m68k |    1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+--- a/Makefile
++++ b/Makefile
+@@ -190,7 +190,7 @@ SUBARCH := $(shell uname -m | sed -e s/i
+ # Default value for CROSS_COMPILE is not to prefix executables
+ # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
+ 
+-ARCH		?= $(SUBARCH)
++ARCH		?= m68k
+ CROSS_COMPILE	?=
+ 
+ # Architecture as present in compile.h

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/134-atari-fat.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/134-atari-fat.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,101 @@
+To: linus, alan
+Cc: lkml
+Subject: [PATCH] Atari FAT updates
+
+From: Linux/m68k legacy
+
+Add support for the Atari-variant of the FAT filesystem
+---
+ fs/fat/inode.c |   46 +++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 43 insertions(+), 3 deletions(-)
+
+--- a/fs/fat/inode.c
++++ b/fs/fat/inode.c
+@@ -17,6 +17,7 @@
+ #include <linux/smp_lock.h>
+ #include <linux/seq_file.h>
+ #include <linux/msdos_fs.h>
++#include <linux/major.h>
+ #include <linux/pagemap.h>
+ #include <linux/mpage.h>
+ #include <linux/buffer_head.h>
+@@ -847,7 +848,7 @@ enum {
+ 	Opt_check_n, Opt_check_r, Opt_check_s, Opt_uid, Opt_gid,
+ 	Opt_umask, Opt_dmask, Opt_fmask, Opt_codepage, Opt_usefree, Opt_nocase,
+ 	Opt_quiet, Opt_showexec, Opt_debug, Opt_immutable,
+-	Opt_dots, Opt_nodots,
++	Opt_dots, Opt_nodots, Opt_atari_no, Opt_atari_yes,
+ 	Opt_charset, Opt_shortname_lower, Opt_shortname_win95,
+ 	Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes,
+ 	Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes,
+@@ -873,6 +874,9 @@ static match_table_t fat_tokens = {
+ 	{Opt_showexec, "showexec"},
+ 	{Opt_debug, "debug"},
+ 	{Opt_immutable, "sys_immutable"},
++	{Opt_atari_yes, "atari=yes"},
++	{Opt_atari_yes, "atari"},
++	{Opt_atari_no, "atari=no"},
+ 	{Opt_obsolate, "conv=binary"},
+ 	{Opt_obsolate, "conv=text"},
+ 	{Opt_obsolate, "conv=auto"},
+@@ -948,6 +952,13 @@ static int parse_options(char *options, 
+ 	opts->utf8 = opts->unicode_xlate = 0;
+ 	opts->numtail = 1;
+ 	opts->usefree = opts->nocase = 0;
++	opts->atari = 0;
++
++#ifdef CONFIG_ATARI
++	if (MACH_IS_ATARI)
++	/* make Atari GEMDOS format the default if machine is an Atari */
++		opts->atari = 1;
++#endif
+ 	*debug = 0;
+ 
+ 	if (!options)
+@@ -999,6 +1010,12 @@ static int parse_options(char *options, 
+ 		case Opt_immutable:
+ 			opts->sys_immutable = 1;
+ 			break;
++		case Opt_atari_yes:
++			opts->atari = 1;
++			break;
++		case Opt_atari_no:
++			opts->atari = 0;
++			break;
+ 		case Opt_uid:
+ 			if (match_int(&args[0], &option))
+ 				return 0;
+@@ -1335,8 +1352,31 @@ int fat_fill_super(struct super_block *s
+ 
+ 	total_clusters = (total_sectors - sbi->data_start) / sbi->sec_per_clus;
+ 
+-	if (sbi->fat_bits != 32)
+-		sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12;
++	if (!sbi->options.atari) {
++		if (sbi->fat_bits != 32)
++			sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12;
++	} else {
++		int sectors;
++		/* Atari GEMDOS partitions always have 16-bit fat */
++		if (sbi->fat_bits != 32)
++			sbi->fat_bits = 16;
++		/* If more clusters than fat entries in 16-bit fat, we assume
++		 * it's a real MSDOS partition with 12-bit fat.
++		 */
++		if (sbi->fat_bits != 32 && total_clusters+2 > sbi->
++			fat_length*SECTOR_SIZE*8/sbi->fat_bits)
++			sbi->fat_bits = 12;
++		/* if it's a floppy disk --> 12bit fat */
++		if (sbi->fat_bits != 32 && MAJOR(sb->s_dev) == FLOPPY_MAJOR)
++			sbi->fat_bits = 12;
++		/* if it's a ramdisk or loopback device and has one of the usual
++		 * floppy sizes -> 12bit FAT  */
++		sectors = total_sectors + sbi->data_start;
++		if (sbi->fat_bits != 32 && (MAJOR(sb->s_dev) == RAMDISK_MAJOR ||
++			 MAJOR(sb->s_dev) == LOOP_MAJOR) &&
++			(sectors == 720 || sectors == 1440 || sectors == 2880))
++			sbi->fat_bits = 12;
++	}
+ 
+ 	/* check that FAT table does not overflow */
+ 	fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits;

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/141-ide.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/141-ide.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,37 @@
+To: linus, alan
+Cc: lkml
+Subject: [PATCH] M68k IDE updates
+
+From: Linux/m68k legacy
+
+M68k IDE updates: Add m68k-isms to the generic ide_fix_driveid()
+---
+ drivers/ide/ide-iops.c |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+--- a/drivers/ide/ide-iops.c
++++ b/drivers/ide/ide-iops.c
+@@ -313,6 +313,23 @@ void ide_fix_driveid (struct hd_driveid 
+ 	int i;
+ 	u16 *stringcast;
+ 
++#ifdef __mc68000__
++	if (!MACH_IS_AMIGA && !MACH_IS_MAC && !MACH_IS_Q40 && !MACH_IS_ATARI)
++		return;
++
++#ifdef M68K_IDE_SWAPW
++	if (M68K_IDE_SWAPW) {	/* fix bus byteorder first */
++		u_char *p = (u_char *)id;
++		u_char t;
++		for (i = 0; i < 512; i += 2) {
++			t = p[i];
++			p[i] = p[i+1];
++			p[i+1] = t;
++		}
++	}
++#endif
++#endif /* __mc68000__ */
++
+ 	id->config         = __le16_to_cpu(id->config);
+ 	id->cyls           = __le16_to_cpu(id->cyls);
+ 	id->reserved2      = __le16_to_cpu(id->reserved2);

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/633-atari_scc.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/633-atari_scc.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,1739 @@
+To: linus, akpm
+Cc: lkml
+Subject: [PATCH] m68k: Atari SCC serial driver
+
+From: Michael Schmitz <schmitz at opal.biophys.uni-duesseldorf.de>
+
+Atari SCC serial driver - this one works less well in 2.6 than it did in 2.4,
+most likely due to the way flip buffer push is handled now - i.e. no
+immediate push of received characters to the line disc. if the handler
+runs in interrupt context, and the bottom half for pushing is run as
+delayed task. 9 out of 10 ping packets end up in the bit bucket this way.
+I haven't figured out how to prevent overruns yet, and getting this right
+will require a bit more testing.
+
+Anyway, the basics are working, and maybe someone can figure out a better
+way to push characters up to the ldisc.
+
+Signed-off-by: Michael Schmitz <schmitz at debian.org>
+Signed-off-by: Roman Zippel <zippel at linux-m68k.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ drivers/char/Makefile    |    1 
+ drivers/char/atari_scc.c | 1701 +++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 1702 insertions(+)
+
+--- a/drivers/char/Makefile
++++ b/drivers/char/Makefile
+@@ -30,6 +30,7 @@ obj-$(CONFIG_DIGIEPCA)		+= epca.o
+ obj-$(CONFIG_SPECIALIX)		+= specialix.o
+ obj-$(CONFIG_MOXA_INTELLIO)	+= moxa.o
+ obj-$(CONFIG_A2232)		+= ser_a2232.o generic_serial.o
++obj-$(CONFIG_ATARI_SCC)		+= atari_scc.o generic_serial.o
+ obj-$(CONFIG_ATARI_DSP56K)	+= dsp56k.o
+ obj-$(CONFIG_MOXA_SMARTIO)	+= mxser.o
+ obj-$(CONFIG_MOXA_SMARTIO_NEW)	+= mxser_new.o
+--- /dev/null
++++ b/drivers/char/atari_scc.c
+@@ -0,0 +1,1701 @@
++/*
++ * Atari TT/Falcon Am8530 SCC serial ports implementation.
++ *
++ * Copyright 2005 Michael Schmitz
++ *
++ * Based on:
++ *   drivers/char/vme_scc.c: MVME147, MVME162, BVME6000 SCC serial ports
++ *   implementation.
++ *   Copyright 1999 Richard Hirst <richard at sleepie.demon.co.uk>
++ *
++ * which, in turn, was
++ *
++ * Based on atari_SCC.c which was
++ *   Copyright 1994-95 Roman Hodek <Roman.Hodek at informatik.uni-erlangen.de>
++ *   Partially based on PC-Linux serial.c by Linus Torvalds and Theodore Ts'o
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kdev_t.h>
++#include <asm/io.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/errno.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/mm.h>
++#include <linux/serial.h>
++#include <linux/fcntl.h>
++#include <linux/major.h>
++#include <linux/delay.h>
++#include <linux/slab.h>
++#include <linux/miscdevice.h>
++#include <linux/console.h>
++#include <linux/init.h>
++#include <asm/setup.h>
++#include <asm/uaccess.h>
++#include <asm/bootinfo.h>
++
++#include <asm/atarihw.h>
++#include <asm/atariints.h>
++
++#include <linux/generic_serial.h>
++#include "scc.h"
++
++#define CONFIG_TT_SCC     1
++#define CONFIG_FALCON_SCC 1
++
++#define CHANNEL_A	0
++#define CHANNEL_B	1
++
++#define SCC_MINOR_BASE	64
++
++/* Shadows for all SCC write registers */
++static unsigned char scc_shadow[2][16];
++
++/* Location to access for SCC register access delay */
++static volatile unsigned char *scc_del = NULL;
++
++/* To keep track of STATUS_REG state for detection of Ext/Status int source */
++static unsigned char scc_last_status_reg[2];
++
++/***************************** Prototypes *****************************/
++
++/* Function prototypes */
++static void scc_disable_tx_interrupts(void *ptr);
++static void scc_enable_tx_interrupts(void *ptr);
++static void scc_disable_rx_interrupts(void *ptr);
++static void scc_enable_rx_interrupts(void *ptr);
++static int scc_get_CD(void *ptr);
++static void scc_shutdown_port(void *ptr);
++static int scc_set_real_termios(void *ptr);
++static void scc_hungup(void *ptr);
++static void scc_close(void *ptr);
++static int scc_chars_in_buffer(void *ptr);
++static int scc_open(struct tty_struct *tty, struct file *filp);
++static int scc_ioctl(struct tty_struct *tty, struct file *filp,
++		     unsigned int cmd, unsigned long arg);
++static void scc_throttle(struct tty_struct *tty);
++static void scc_unthrottle(struct tty_struct *tty);
++static irqreturn_t scc_tx_int(int irq, void *data);
++static irqreturn_t scc_rx_int(int irq, void *data);
++static irqreturn_t scc_stat_int(int irq, void *data);
++static irqreturn_t scc_spcond_int(int irq, void *data);
++static void scc_setsignals(struct scc_port *port, int dtr, int rts);
++static void scc_break_ctl(struct tty_struct *tty, int break_state);
++
++static struct tty_driver *scc_driver;
++
++struct scc_port scc_ports[2];
++
++int scc_initialized = 0;
++
++/*
++ * Flags to indicate one of the serial ports has already been initialized by the
++ * serial debug driver. We may want to hold off reinitializing ...
++ */
++
++/* Flag that Modem1 port is already initialized and used */
++extern int atari_SCC_init_done;
++/* Can be set somewhere, if a SCC master reset has already be done and should
++ * not be repeated; used by kgdb */
++extern int atari_SCC_reset_done;
++
++/*---------------------------------------------------------------------------
++ * Interface from generic_serial.c back here
++ *--------------------------------------------------------------------------*/
++
++static struct real_driver scc_real_driver = {
++	.disable_tx_interrupts	= scc_disable_tx_interrupts,
++	.enable_tx_interrupts	= scc_enable_tx_interrupts,
++	.disable_rx_interrupts	= scc_disable_rx_interrupts,
++	.enable_rx_interrupts	= scc_enable_rx_interrupts,
++	.get_CD			= scc_get_CD,
++	.shutdown_port		= scc_shutdown_port,
++	.set_real_termios	= scc_set_real_termios,
++	.chars_in_buffer	= scc_chars_in_buffer,
++	.close			= scc_close,
++	.hungup			= scc_hungup,
++};
++
++static struct tty_operations scc_ops = {
++	.open			= scc_open,
++	.close			= gs_close,
++	.write			= gs_write,
++	.put_char		= gs_put_char,
++	.flush_chars		= gs_flush_chars,
++	.write_room		= gs_write_room,
++	.chars_in_buffer	= gs_chars_in_buffer,
++	.flush_buffer		= gs_flush_buffer,
++	.ioctl			= scc_ioctl,
++	.throttle		= scc_throttle,
++	.unthrottle		= scc_unthrottle,
++	.set_termios		= gs_set_termios,
++	.stop			= gs_stop,
++	.start			= gs_start,
++	.hangup			= gs_hangup,
++	.break_ctl		= scc_break_ctl,
++};
++
++/* BRG values for the standard speeds and the various clock sources */
++
++typedef struct {
++	unsigned clksrc;		/* clock source to use or -1 for not possible */
++	unsigned div;			/* divisor: 1, 2 and 4 correspond to
++					 * direct 1:16, 1:32 and 1:64 modes,
++					 * divisors >= 4 yield a BRG value of
++					 * div/2-2 (in 1:16 mode)
++					 */
++} BAUD_ENTRY;
++
++/* A pointer for each channel to the current baud table */
++static BAUD_ENTRY *scc_baud_table[2];
++
++/* Baud table format:
++ *
++ * Each entry consists of the clock source (CLK_RTxC, CLK_TRxC or
++ * CLK_PCLK) and a divisor. The following rules apply to the divisor:
++ *
++ *   - CLK_RTxC: 1 or even (1, 2 and 4 are the direct modes, > 4 use
++ *               the BRG)
++ *
++ *   - CLK_TRxC: 1, 2 or 4 (no BRG, only direct modes possible)
++ *
++ *   - CLK_PCLK: >= 4 and even (no direct modes, only BRG)
++ *
++ */
++
++/* This table is used if RTxC = 3.672 MHz. This is the case for TT's
++ * channel A and for both channels on the Mega STE/Falcon. (TRxC is unused)
++ */
++
++static BAUD_ENTRY bdtab_norm[20] = {
++	/* B0      */ { 0, 0 },
++	/* B50     */ { CLK_RTxC, 4590 },
++	/* B75     */ { CLK_RTxC, 3060 },
++	/* B110    */ { CLK_PCLK, 4576 },
++	/* B134    */ { CLK_PCLK, 3756 },
++	/* B150    */ { CLK_RTxC, 1530 },
++	/* B200    */ { CLK_PCLK, 2516 },
++	/* B300    */ { CLK_PCLK, 1678 },
++	/* B600    */ { CLK_PCLK, 838 },
++	/* B1200   */ { CLK_PCLK, 420 },
++	/* B1800   */ { CLK_PCLK, 280 },
++	/* B2400   */ { CLK_PCLK, 210 },
++	/* B4800   */ { CLK_RTxC, 48 },
++	/* B9600   */ { CLK_RTxC, 24 },
++	/* B19200  */ { CLK_RTxC, 12 },
++	/* B38400  */ { CLK_RTxC, 6 },   /* #15 spd_extra */
++	/* B57600  */ { CLK_RTxC, 4 },   /* #16 spd_hi */
++	/* B115200 */ { CLK_RTxC, 2 },   /* #17 spd_vhi */
++	/* B230400 */ { CLK_RTxC, 1 },   /* #18 spd_shi */
++	/* B460800 */ { 0, 0 }           /* #19 spd_warp: Impossible */
++};
++
++/* This is a special table for the TT channel B with 307.2 kHz at RTxC
++ * and 2.4576 MHz at TRxC
++ */
++static BAUD_ENTRY bdtab_TTChB[20] = {
++	/* B0      */ { 0, 0 },
++	/* B50     */ { CLK_RTxC, 384 },
++	/* B75     */ { CLK_RTxC, 256 },
++	/* B110    */ { CLK_PCLK, 4576 },
++	/* B134    */ { CLK_PCLK, 3756 },
++	/* B150    */ { CLK_RTxC, 128 },
++	/* B200    */ { CLK_RTxC, 96 },
++	/* B300    */ { CLK_RTxC, 64 },
++	/* B600    */ { CLK_RTxC, 32 },
++	/* B1200   */ { CLK_RTxC, 16 },
++	/* B1800   */ { CLK_PCLK, 280 },
++	/* B2400   */ { CLK_RTxC, 8 },
++	/* B4800   */ { CLK_RTxC, 4 },
++	/* B9600   */ { CLK_RTxC, 2 },
++	/* B19200  */ { CLK_RTxC, 1 },
++	/* B38400  */ { CLK_TRxC, 4 },
++	/* B57600  */ { CLK_TRxC, 2 }, /* 57600 is not possible, use 76800 instead */
++	/* B115200 */ { CLK_TRxC, 1 }, /* 115200 is not possible, use 153600 instead */
++	/* B230400 */ { 0, 0 },        /* #18 spd_shi: Impossible  */
++	/* B460800 */ { 0, 0 }         /* #19 spd_warp: Impossible */
++};
++
++
++/*----------------------------------------------------------------------------
++ * atari_scc_init() and support functions
++ *---------------------------------------------------------------------------*/
++
++static int scc_init_drivers(void)
++{
++	int error;
++
++	scc_driver = alloc_tty_driver(2);
++	if (!scc_driver)
++		return -ENOMEM;
++	scc_driver->owner = THIS_MODULE;
++	scc_driver->driver_name = "scc";
++	scc_driver->name = "ttyS";
++	scc_driver->major = TTY_MAJOR;
++	scc_driver->minor_start = SCC_MINOR_BASE;
++	scc_driver->type = TTY_DRIVER_TYPE_SERIAL;
++	scc_driver->subtype = SERIAL_TYPE_NORMAL;
++	scc_driver->init_termios = tty_std_termios;
++	scc_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++	scc_driver->flags = TTY_DRIVER_REAL_RAW;
++
++	tty_set_operations(scc_driver, &scc_ops);
++
++	if ((error = tty_register_driver(scc_driver))) {
++		printk(KERN_ERR "scc: Couldn't register scc driver, error = %d\n",
++		       error);
++		put_tty_driver(scc_driver);
++		return 1;
++	}
++
++	return 0;
++}
++
++
++/* ports[] array is indexed by line no (i.e. [0] for ttyS0, [1] for ttyS1).
++ */
++
++static void scc_init_portstructs(void)
++{
++	struct scc_port *port;
++	int i;
++
++	for (i = 0; i < 2; i++) {
++		port = scc_ports + i;
++		port->gs.magic = SCC_MAGIC;
++		port->gs.close_delay = HZ/2;
++		port->gs.closing_wait = 30 * HZ;
++		port->gs.rd = &scc_real_driver;
++#ifdef NEW_WRITE_LOCKING
++		port->gs.port_write_sem = MUTEX;
++#endif
++		init_waitqueue_head(&port->gs.open_wait);
++		init_waitqueue_head(&port->gs.close_wait);
++	}
++}
++
++
++#ifdef CONFIG_TT_SCC
++static int atari_tt_scc_init(void)
++{
++	struct scc_port *port;
++
++	printk(KERN_INFO "SCC: Atari TT Serial Driver\n");
++	/* FIXME channel A may be switchable between modem and LAN port */
++	/* Init channel A */
++	if (atari_SCC_init_done)
++		printk(KERN_INFO "SCC: already initialized, expect trouble!\n");
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: init channel A\n");
++#endif
++	port = &scc_ports[0];
++	port->channel = CHANNEL_A;
++	port->ctrlp = (volatile unsigned char *)&scc.cha_a_ctrl;
++	port->datap = port->ctrlp + 1;
++	port->port_a = &scc_ports[0];
++	port->port_b = &scc_ports[1];
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: request channel A irqs, port = %p\n", port);
++#endif
++	request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
++	request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++		    "SCC-A status", port);
++	request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
++	request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++		    "SCC-A special cond", port);
++	{
++		SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: read SCC status\n");
++#endif
++		/* on the first access, read status register to reset internal pointers */
++		SCCread(STATUS_REG);
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: reset SCC\n");
++#endif
++		/* FIXME: master reset, once only */
++		SCCwrite(MASTER_INT_CTRL, MIC_HARD_RESET);
++		udelay(40);
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++		/* Set the interrupt vector ; 0x60 for all Atari models */
++		SCCwrite(INT_VECTOR_REG, 0x60);
++		/* Interrupt parameters: vector includes status, status low */
++		SCCwrite(MASTER_INT_CTRL, MIC_VEC_INCL_STAT);
++		SCCmod(MASTER_INT_CTRL, 0xff, MIC_MASTER_INT_ENAB);
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++	}
++
++	if (!atari_SCC_init_done) {
++		/* Init channel B */
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: init channel B\n");
++#endif
++		port = &scc_ports[1];
++		port->channel = CHANNEL_B;
++		port->ctrlp = (volatile unsigned char *)&scc.cha_b_ctrl;
++		port->datap = port->ctrlp + 1;
++		port->port_a = &scc_ports[0];
++		port->port_b = &scc_ports[1];
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: request channel B irqs, port = %p\n", port);
++#endif
++		request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO,
++			    "SCC-B TX", port);
++		request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++			    "SCC-B status", port);
++		request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO,
++			    "SCC-B RX", port);
++		request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++			    "SCC-B special cond", port);
++		{
++			SCC_ACCESS_INIT(port);
++
++			/* disable interrupts for this channel */
++			SCCwrite(INT_AND_DMA_REG, 0);
++		}
++/* not implemented yet */
++#if 0
++		request_irq(IRQ_TT_MFP_RI, scc_ri_int, IRQ_TYPE_SLOW,
++			    "TT-MFP ring indicator (modem 2)", port);
++#endif
++
++	}
++
++	/* once only: initalize MFP timer C for RTxC */
++	tt_mfp.tim_ct_cd = (tt_mfp.tim_ct_cd & ~0x70) | 0x10;
++	tt_mfp.tim_dt_c = 1;
++	atari_turnoff_irq(IRQ_TT_MFP_TIMC);
++
++	/* set baud tables */
++	scc_baud_table[CHANNEL_A] = bdtab_norm;
++	scc_baud_table[CHANNEL_B] = bdtab_TTChB;
++
++	/* Initialise the tty driver structures and register */
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: scc_init_portstructs()\n");
++#endif
++	scc_init_portstructs();
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: scc_init_drivers()\n");
++#endif
++	scc_init_drivers();
++
++	return 0;
++}
++#endif
++
++
++#ifdef CONFIG_FALCON_SCC
++static int atari_falcon_scc_init(void)
++{
++	struct scc_port *port;
++
++	printk(KERN_INFO "SCC: Atari Falcon Serial Driver\n");
++	if (atari_SCC_init_done)
++		printk(KERN_INFO "SCC: already initialized, expect trouble!\n");
++
++	/* Init channel A */
++	port = &scc_ports[0];
++	port->channel = CHANNEL_A;
++	port->ctrlp = (volatile unsigned char *)&scc.cha_a_ctrl;
++	port->datap = port->ctrlp + 2;
++	port->port_a = &scc_ports[0];
++	port->port_b = &scc_ports[1];
++	request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
++	request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++		    "SCC-A status", port);
++	request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
++	request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++		    "SCC-A special cond", port);
++	{
++		SCC_ACCESS_INIT(port);
++
++		/* on the first access, read status register to reset internal pointers */
++		SCCread(STATUS_REG);
++
++		/* FIXME: master reset, once only */
++		SCCwrite(MASTER_INT_CTRL, MIC_HARD_RESET);
++		udelay(40);
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++		/* Set the interrupt vector */
++		SCCwrite(INT_VECTOR_REG, 0x60);
++		/* Interrupt parameters: vector includes status, status low */
++		SCCwrite(MASTER_INT_CTRL, MIC_VEC_INCL_STAT);
++		SCCmod(MASTER_INT_CTRL, 0xff, MIC_MASTER_INT_ENAB);
++	}
++
++	/* conditionalize if port in use by console ?? */
++	/* Init channel B */
++	port = &scc_ports[1];
++	port->channel = CHANNEL_B;
++	port->ctrlp = (volatile unsigned char *)&scc.cha_b_ctrl;
++	port->datap = port->ctrlp + 2;
++	port->port_a = &scc_ports[0];
++	port->port_b = &scc_ports[1];
++	request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-B TX", port);
++	request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++		    "SCC-B status", port);
++	request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-B RX", port);
++	request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++		    "SCC-B special cond", port);
++
++	{
++		SCC_ACCESS_INIT(port);	/* Either channel will do */
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++	}
++
++	/* set baud tables */
++	scc_baud_table[CHANNEL_A] = bdtab_norm;
++	scc_baud_table[CHANNEL_B] = bdtab_norm;
++
++	/* Initialise the tty driver structures and register */
++	scc_init_portstructs();
++	scc_init_drivers();
++
++	return 0;
++}
++#endif
++
++
++#ifdef CONFIG_ST_SCC
++static int atari_st_scc_init(void)
++{
++	struct scc_port *port;
++
++	int escc = ATARIHW_PRESENT(ST_ESCC);
++
++	printk(KERN_INFO "SCC: Atari MegaST/E Serial Driver\n");
++	/* FIXME: ports reversed logic */
++	/* Init channel A */
++	port = &scc_ports[1];
++	port->channel = CHANNEL_A;
++	port->ctrlp = (volatile unsigned char *)(escc ? &st_escc.cha_a_ctrl : &scc.cha_a_ctrl);
++	port->datap = port->ctrlp + 4;
++	port->port_a = &scc_ports[1];
++	port->port_b = &scc_ports[0];
++	request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
++	request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++		    "SCC-A status", port);
++	request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
++	request_irq(SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++		    "SCC-A special cond", port);
++	{
++		SCC_ACCESS_INIT(port);
++
++		/* on the first access, read status register to reset internal pointers */
++		SCCread(STATUS_REG);
++
++		/* FIXME: master reset, once only */
++		SCCwrite(MASTER_INT_CTRL, MIC_HARD_RESET);
++		udelay(40);
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++		/* Set the interrupt vector */
++		SCCwrite(INT_VECTOR_REG, BVME_IRQ_SCC_BASE);
++		/* Interrupt parameters: vector includes status, status low */
++		SCCwrite(MASTER_INT_CTRL, MIC_VEC_INCL_STAT);
++		SCCmod(MASTER_INT_CTRL, 0xff, MIC_MASTER_INT_ENAB);
++	}
++
++	/* Init channel B */
++	port = &scc_ports[0];
++	port->channel = CHANNEL_B;
++	port->ctrlp = (volatile unsigned char *)(escc ? &st_escc.cha_b_ctrl : &scc.cha_b_ctrl);
++	port->datap = port->ctrlp + 4;
++	port->port_a = &scc_ports[0];
++	port->port_b = &scc_ports[1];
++	request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-B TX", port);
++	request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
++		    "SCC-B status", port);
++	request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-B RX", port);
++	request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
++		    "SCC-B special cond", port);
++
++	{
++		SCC_ACCESS_INIT(port);	/* Either channel will do */
++
++		/* disable interrupts for this channel */
++		SCCwrite(INT_AND_DMA_REG, 0);
++	}
++
++	/* set baud tables */
++	scc_baud_table[CHANNEL_A] = bdtab_norm;
++	scc_baud_table[CHANNEL_B] = bdtab_norm;
++
++	/* Initialise the tty driver structures and register */
++	scc_init_portstructs();
++	scc_init_drivers();
++
++	return 0;
++}
++#endif
++
++
++int atari_scc_init(void)
++{
++	int res = -ENODEV;
++	static int called = 0;
++
++	if (called)
++		return res;
++	called = 1;
++
++	if (!(ATARIHW_PRESENT(SCC) || ATARIHW_PRESENT(ST_ESCC)))
++		return -ENODEV;
++
++	scc_del = &mfp.par_dt_reg;
++
++#ifdef CONFIG_TT_SCC
++	if (MACH_IS_TT)
++		res = atari_tt_scc_init();
++#endif
++#ifdef CONFIG_FALCON_SCC
++	if (MACH_IS_FALCON)
++		res = atari_falcon_scc_init();
++#endif
++#ifdef CONFIG_ST_SCC
++	if (MACH_IS_ST)
++		res = atari_st_scc_init();
++#endif
++	return res;
++}
++
++void atari_scc_cleanup(void)
++{
++	struct scc_port *port;
++
++	tty_unregister_driver(scc_driver);
++	port = &scc_ports[0];
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: free channel A irqs, port = %p\n", port);
++#endif
++	free_irq(IRQ_SCCA_TX, port);
++	free_irq(IRQ_SCCA_STAT, port);
++	free_irq(IRQ_SCCA_RX, port);
++	free_irq(IRQ_SCCA_SPCOND, port);
++
++	port = &scc_ports[1];
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: free channel A irqs, port = %p\n", port);
++#endif
++	free_irq(IRQ_SCCB_TX, port);
++	free_irq(IRQ_SCCB_STAT, port);
++	free_irq(IRQ_SCCB_RX, port);
++	free_irq(IRQ_SCCB_SPCOND, port);
++
++}
++
++module_init(atari_scc_init);
++module_exit(atari_scc_cleanup);
++
++/*---------------------------------------------------------------------------
++ * Interrupt handlers
++ *--------------------------------------------------------------------------*/
++
++static irqreturn_t scc_rx_int(int irq, void *data)
++{
++	unsigned char ch;
++	struct scc_port *port = data;
++	struct tty_struct *tty = port->gs.tty;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: rx_int ...\n");
++#endif
++	ch = SCCread_NB(RX_DATA_REG);
++	if (!tty) {
++		printk(KERN_WARNING "scc_rx_int with NULL tty!\n");
++		SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++		return IRQ_HANDLED;
++	}
++	tty_insert_flip_char(tty, ch, 0);
++#if 0
++	if (tty->flip.count < TTY_FLIPBUF_SIZE) {
++		*tty->flip.char_buf_ptr = ch;
++		*tty->flip.flag_buf_ptr = 0;
++		tty->flip.flag_buf_ptr++;
++		tty->flip.char_buf_ptr++;
++		tty->flip.count++;
++	}
++#endif
++	/* Check if another character is already ready; in that case, the
++	 * spcond_int() function must be used, because this character may have an
++	 * error condition that isn't signalled by the interrupt vector used!
++	 */
++	if (SCCread(INT_PENDING_REG) &
++	    (port->channel == CHANNEL_A ? IPR_A_RX : IPR_B_RX)) {
++		scc_spcond_int(irq, data);
++		return IRQ_HANDLED;
++	}
++
++	SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++
++	tty_flip_buffer_push(tty);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: rx_int done\n");
++#endif
++	return IRQ_HANDLED;
++}
++
++
++static irqreturn_t scc_spcond_int(int irq, void *data)
++{
++	struct scc_port *port = data;
++	struct tty_struct *tty = port->gs.tty;
++	unsigned char stat, ch, err;
++	int int_pending_mask = port->channel == CHANNEL_A ? IPR_A_RX : IPR_B_RX;
++
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: spcond_int ...\n");
++#endif
++	if (!tty) {
++		printk(KERN_WARNING "scc_spcond_int with NULL tty!\n");
++		SCCwrite(COMMAND_REG, CR_ERROR_RESET);
++		SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++		return IRQ_HANDLED;
++	}
++	do {
++		stat = SCCread(SPCOND_STATUS_REG);
++		ch = SCCread_NB(RX_DATA_REG);
++
++		if (stat & SCSR_RX_OVERRUN)
++			err = TTY_OVERRUN;
++		else if (stat & SCSR_PARITY_ERR)
++			err = TTY_PARITY;
++		else if (stat & SCSR_CRC_FRAME_ERR)
++			err = TTY_FRAME;
++		else
++			err = 0;
++
++		tty_insert_flip_char(tty, ch, err);
++#if 0
++		if (tty->flip.count < TTY_FLIPBUF_SIZE) {
++			*tty->flip.char_buf_ptr = ch;
++			*tty->flip.flag_buf_ptr = err;
++			tty->flip.flag_buf_ptr++;
++			tty->flip.char_buf_ptr++;
++			tty->flip.count++;
++		}
++#endif
++		/* ++TeSche: *All* errors have to be cleared manually,
++		 * else the condition persists for the next chars
++		 */
++		if (err)
++			SCCwrite(COMMAND_REG, CR_ERROR_RESET);
++
++	} while (SCCread(INT_PENDING_REG) & int_pending_mask);
++
++	SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++
++	tty_flip_buffer_push(tty);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: spcond_int done\n");
++#endif
++	return IRQ_HANDLED;
++}
++
++/* not implemented yet */
++#if 0
++static void scc_ri_int(int irq, void *data)
++{
++	struct scc_port *port = data;
++	/* update input line counter */
++	port->icount.rng++;
++	wake_up_interruptible(&port->delta_msr_wait);
++}
++#endif
++
++static irqreturn_t scc_tx_int(int irq, void *data)
++{
++	struct scc_port *port = data;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: tx_int irq %d port %p ...\n", irq, data);
++#endif
++	if (!port->gs.tty) {
++		printk(KERN_WARNING "scc_tx_int with NULL tty!\n");
++		SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
++		SCCwrite(COMMAND_REG, CR_TX_PENDING_RESET);
++		SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++		return IRQ_HANDLED;
++	}
++	while ((SCCread_NB(STATUS_REG) & SR_TX_BUF_EMPTY)) {
++		if (port->x_char) {
++#ifdef DEBUG
++			printk(KERN_INFO "SCC: tx_int writing char %c\n",
++			       port->x_char);
++#endif
++			SCCwrite(TX_DATA_REG, port->x_char);
++			port->x_char = 0;
++		} else if ((port->gs.xmit_cnt <= 0) || port->gs.tty->stopped ||
++			   port->gs.tty->hw_stopped) {
++#ifdef DEBUG
++			printk(KERN_INFO "SCC: nothing to do!\n");
++#endif
++			break;
++		} else {
++#ifdef DEBUG
++			printk(KERN_INFO "SCC: tx_int writing buf %c\n",
++			       port->gs.xmit_buf[port->gs.xmit_tail]);
++#endif
++			SCCwrite(TX_DATA_REG, port->gs.xmit_buf[port->gs.xmit_tail++]);
++			port->gs.xmit_tail = port->gs.xmit_tail & (SERIAL_XMIT_SIZE-1);
++			if (--port->gs.xmit_cnt <= 0)
++				break;
++		}
++	}
++	if ((port->gs.xmit_cnt <= 0) || port->gs.tty->stopped ||
++	    port->gs.tty->hw_stopped) {
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: nothing to do, disabling int\n");
++#endif
++		/* disable tx interrupts */
++		SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
++		SCCwrite(COMMAND_REG, CR_TX_PENDING_RESET);	/* disable tx_int on next tx underrun? */
++		port->gs.flags &= ~GS_TX_INTEN;
++	}
++	if (port->gs.tty && port->gs.xmit_cnt <= port->gs.wakeup_chars) {
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: waking up tty!\n");
++#endif
++		tty_wakeup(port->gs.tty);
++	}
++
++	SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: tx_int done\n");
++#endif
++	return IRQ_HANDLED;
++}
++
++
++static irqreturn_t scc_stat_int(int irq, void *data)
++{
++	struct scc_port *port = data;
++	unsigned channel = port->channel;
++	unsigned char last_sr, sr, changed;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: stat_int ...\n");
++#endif
++	last_sr = scc_last_status_reg[channel];
++	sr = scc_last_status_reg[channel] = SCCread_NB(STATUS_REG);
++	changed = last_sr ^ sr;
++
++	if (changed & SR_DCD) {
++		port->c_dcd = !!(sr & SR_DCD);
++		if (!(port->gs.flags & ASYNC_CHECK_CD))
++			;	/* Don't report DCD changes */
++		else if (port->c_dcd) {
++			/* Are we blocking in open? */
++			wake_up_interruptible(&port->gs.open_wait);
++		} else {
++			if (port->gs.tty)
++				tty_hangup(port->gs.tty);
++		}
++	}
++
++	// FIXME: CTS and DSR status changes?
++
++	SCCwrite(COMMAND_REG, CR_EXTSTAT_RESET);
++	SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: stat_int done\n");
++#endif
++	return IRQ_HANDLED;
++}
++
++
++/*---------------------------------------------------------------------------
++ * generic_serial.c callback funtions
++ *--------------------------------------------------------------------------*/
++
++static void scc_disable_tx_interrupts(void *ptr)
++{
++	struct scc_port *port = ptr;
++	unsigned long flags;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: disable_tx_int ...\n");
++#endif
++	local_irq_save(flags);
++	SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
++	port->gs.flags &= ~GS_TX_INTEN;
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: disable_tx_int done!\n");
++#endif
++}
++
++
++static void scc_enable_tx_interrupts(void *ptr)
++{
++	struct scc_port *port = ptr;
++	unsigned long flags;
++
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: enable_tx_int ...\n");
++#endif
++	local_irq_save(flags);
++	SCCmod(INT_AND_DMA_REG, 0xff, IDR_TX_INT_ENAB);
++	/* restart the transmitter */
++	scc_tx_int(0, port);
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: enable_tx_int done!\n");
++#endif
++}
++
++
++static void scc_disable_rx_interrupts(void *ptr)
++{
++	struct scc_port *port = ptr;
++	unsigned long flags;
++
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: disable_rx_int ...\n");
++#endif
++	local_irq_save(flags);
++	SCCmod(INT_AND_DMA_REG,
++	       ~(IDR_RX_INT_MASK|IDR_PARERR_AS_SPCOND|IDR_EXTSTAT_INT_ENAB), 0);
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: disable_rx_int done!\n");
++#endif
++}
++
++
++static void scc_enable_rx_interrupts(void *ptr)
++{
++	struct scc_port *port = ptr;
++	unsigned long flags;
++
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: enable_rx_int ...\n");
++#endif
++	local_irq_save(flags);
++	SCCmod(INT_AND_DMA_REG, 0xff,
++	       IDR_EXTSTAT_INT_ENAB|IDR_PARERR_AS_SPCOND|IDR_RX_INT_ALL);
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: enable_rx_int done!\n");
++#endif
++}
++
++
++static int scc_get_CD(void *ptr)
++{
++	struct scc_port *port = ptr;
++	unsigned channel = port->channel;
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: get_CD!\n");
++#endif
++	return !!(scc_last_status_reg[channel] & SR_DCD);
++}
++
++
++static void scc_shutdown_port(void *ptr)
++{
++	struct scc_port *port = ptr;
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: shutdown_port ...\n");
++#endif
++	port->gs.flags &= ~GS_ACTIVE;
++	if (port->gs.tty && port->gs.tty->termios->c_cflag & HUPCL)
++		scc_setsignals(port, 0, 0);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: shutdown_port done!\n");
++#endif
++}
++
++
++static int scc_set_real_termios(void *ptr)
++{
++	/* the SCC has char sizes 5,7,6,8 in that order! */
++	static int chsize_map[4] = { 0, 2, 1, 3 };
++	unsigned int cflag, baud, baudbits, baudidx, brgmode;
++	unsigned int clkmode, clksrc, div, chsize, channel, brgval = 0;
++	unsigned long flags;
++	struct scc_port *port = ptr;
++	SCC_ACCESS_INIT(port);
++
++	if (!port->gs.tty || !port->gs.tty->termios)
++		return 0;
++
++	channel = port->channel;
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: termios for channel %p\n", channel);
++#endif
++	cflag = port->gs.tty->termios->c_cflag;
++	baud = port->gs.baud;
++	baudbits = cflag & CBAUD;
++	chsize = (cflag & CSIZE) >> 4;
++
++	if (baud == 0) {
++		/* speed == 0 -> drop DTR */
++		local_irq_save(flags);
++		SCCmod(TX_CTRL_REG, ~TCR_DTR, 0);
++		local_irq_restore(flags);
++		return 0;
++	} else if ((MACH_IS_TT && (baud < 50 || baud > 115200)) ||
++		   (MACH_IS_FALCON && (baud < 50 || baud > 230400))) {
++		printk(KERN_NOTICE "SCC: Bad speed requested, %d\n", baud);
++		return 0;
++	}
++
++	if (cflag & CLOCAL)
++		port->gs.flags &= ~ASYNC_CHECK_CD;
++	else
++		port->gs.flags |= ASYNC_CHECK_CD;
++
++	// calculate brgval for Atari; enable direct modes!
++
++	/* convert baud rate from gs.baud to table index, set custom divisor eventually */
++
++	div     = 0;
++	clksrc  = 0;
++	baudidx = 0;
++
++	switch (baud) {
++	case 50:
++		baudidx = 1;
++		break;
++	case 75:
++		baudidx = 2;
++		break;
++	case 110:
++		baudidx = 3;
++		break;
++	case 134:
++		baudidx = 4;
++		break;
++	case 150:
++		baudidx = 5;
++		break;
++	case 200:
++		baudidx = 6;
++		break;
++	case 300:
++		baudidx = 7;
++		break;
++	case 600:
++		baudidx = 8;
++		break;
++	case 1200:
++		baudidx = 9;
++		break;
++	case 1800:
++		baudidx = 10;
++		break;
++	case 2400:
++		baudidx = 11;
++		break;
++	case 4800:
++		baudidx = 12;
++		break;
++	case 9600:
++		baudidx = 13;
++		break;
++	case 19200:
++		baudidx = 14;
++		break;
++	case 38400:
++		baudidx = 15;
++		break;
++	case 57600:
++		baudidx = 16;
++		break;
++	case 115200:
++		baudidx = 17;
++		break;
++	case 230400:
++		baudidx = 18;
++		break;
++	default:
++		baudidx = 15;
++		break;
++	}
++
++	/* do we have a custom divisor ?? */
++	if (!div) {
++		if (baudidx > 19)
++			baudidx = 19;
++		clksrc = scc_baud_table[channel][baudidx].clksrc;
++		div = scc_baud_table[channel][baudidx].div;
++		if (!div) {
++			printk(" SCC_change_speed: divisor = 0 !!!");
++			return 0;
++		}
++	}
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: termios baud %d baudbits %d baudidx %d \n clksrc %d div %d\n",
++		baud, baudbits, baudidx, clksrc, div);
++#endif
++	/* compute the SCC's clock source, clock mode, BRG mode and BRG
++	 * value from clksrc and div
++	 */
++	if (div <= 4) {
++		clkmode = (div == 1 ? A1CR_CLKMODE_x16 :
++			   div == 2 ? A1CR_CLKMODE_x32 :
++				      A1CR_CLKMODE_x64);
++		clksrc  = (clksrc == CLK_RTxC
++			   ? CCR_TXCLK_RTxC | CCR_RXCLK_RTxC
++			   : CCR_TXCLK_TRxC | CCR_RXCLK_TRxC);
++		brgmode = 0; /* off */
++		brgval  = 0;
++	} else {
++		brgval  = div/2 - 2;
++		brgmode = (DCR_BRG_ENAB |
++			   (clksrc == CLK_PCLK ? DCR_BRG_USE_PCLK : 0));
++		clkmode = A1CR_CLKMODE_x16;
++		clksrc  = CCR_TXCLK_BRG | CCR_RXCLK_BRG;
++	}
++
++	//printk(KERN_INFO "SCC: termios baud %d baudbits %d baudidx %d \n clksrc %d clkmode %d div %d brgval %d brgmode %d\n",
++	//	baud, baudbits, baudidx, clksrc, clkmode, div, brgval, brgmode);
++
++	/* Now we have all parameters and can go to set them: */
++	local_irq_save(flags);
++
++#ifdef DEBUG
++	printk("  brgval=%d brgmode=%02x clkmode=%02x clksrc=%02x\n",
++		brgval, brgmode, clkmode, clksrc);
++#endif
++	/* receiver's character size and auto-enables */
++#if 0	// auto-enable considered harmful ...
++	SCCmod(RX_CTRL_REG, ~(RCR_CHSIZE_MASK|RCR_AUTO_ENAB_MODE),
++	       (chsize_map[chsize] << 6) |
++	       ((cflag & CRTSCTS) ? RCR_AUTO_ENAB_MODE : 0));
++#else
++	/* receiver's character size */
++	SCCmod(RX_CTRL_REG, ~RCR_CHSIZE_MASK, chsize_map[chsize] << 6);
++#endif
++#ifdef DEBUG
++	printk("  RX_CTRL_REG <- %02x\n", SCCread( RX_CTRL_REG ));
++#endif
++
++	// clock mode changes depending on baud rate
++	/* parity and stop bits (both, Tx and Rx) and clock mode */
++	SCCmod(AUX1_CTRL_REG,
++		~(A1CR_PARITY_MASK | A1CR_MODE_MASK | A1CR_CLKMODE_MASK),
++		((cflag & PARENB
++		  ? (cflag & PARODD ? A1CR_PARITY_ODD : A1CR_PARITY_EVEN)
++		  : A1CR_PARITY_NONE)
++		 | (cflag & CSTOPB ? A1CR_MODE_ASYNC_2 : A1CR_MODE_ASYNC_1)
++		 | clkmode));
++
++#ifdef DEBUG
++	printk("  AUX1_CTRL_REG <- %02x\n", SCCread(AUX1_CTRL_REG));
++#endif
++	/* sender's character size, set DTR for valid baud rate */
++	SCCmod(TX_CTRL_REG, ~TCR_CHSIZE_MASK, chsize_map[chsize] << 5 | TCR_DTR);
++#ifdef DEBUG
++	printk("  TX_CTRL_REG <- %02x\n", SCCread(TX_CTRL_REG));
++#endif
++
++	// clock sources change for TT !!
++	/* clock sources never change */
++	/* clock sources */
++	SCCmod(CLK_CTRL_REG, ~(CCR_TXCLK_MASK | CCR_RXCLK_MASK), clksrc);
++#ifdef DEBUG
++	printk("  CLK_CTRL_REG <- %02x\n", SCCread(CLK_CTRL_REG));
++#endif
++
++	/* disable BRG before changing the value */
++	SCCmod(DPLL_CTRL_REG, ~DCR_BRG_ENAB, 0);
++	/* BRG value */
++	SCCwrite(TIMER_LOW_REG, brgval & 0xff);
++	SCCwrite(TIMER_HIGH_REG, (brgval >> 8) & 0xff);
++	/* BRG enable, and clock source never changes */
++	//SCCmod(DPLL_CTRL_REG, 0xff, DCR_BRG_ENAB);
++	SCCmod(DPLL_CTRL_REG, ~(DCR_BRG_ENAB | DCR_BRG_USE_PCLK), brgmode);
++#ifdef DEBUG
++	printk("  TIMER_LOW_REG <- %02x\n", SCCread(TIMER_LOW_REG));
++	printk("  TIMER_HIGH_REG <- %02x\n", SCCread(TIMER_HIGH_REG));
++#endif
++#ifdef DEBUG
++	printk("  DPLL_CTRL_REG <- %02x\n", SCCread(DPLL_CTRL_REG));
++#endif
++
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: done termios for channel %d\n", channel);
++#endif
++	return 0;
++}
++
++
++static int scc_chars_in_buffer(void *ptr)
++{
++	struct scc_port *port = ptr;
++#ifdef DEBUG
++	int rv;
++#endif
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	rv = (SCCread(SPCOND_STATUS_REG) & SCSR_ALL_SENT) ? 0  : 1;
++	printk(KERN_INFO "SCC: chars_in_buffer: %d\n", rv);
++	return rv;
++#else
++	return (SCCread(SPCOND_STATUS_REG) & SCSR_ALL_SENT) ? 0  : 1;
++#endif
++}
++
++
++/* Comment taken from sx.c (2.4.0):
++   I haven't the foggiest why the decrement use count has to happen
++   here. The whole linux serial drivers stuff needs to be redesigned.
++   My guess is that this is a hack to minimize the impact of a bug
++   elsewhere. Thinking about it some more. (try it sometime) Try
++   running minicom on a serial port that is driven by a modularized
++   driver. Have the modem hangup. Then remove the driver module. Then
++   exit minicom.  I expect an "oops".  -- REW */
++
++static void scc_hungup(void *ptr)
++{
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: hungup ...\n");
++#endif
++	scc_disable_tx_interrupts(ptr);
++	scc_disable_rx_interrupts(ptr);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: hungup done\n");
++#endif
++}
++
++
++static void scc_close(void *ptr)
++{
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: close ...\n");
++#endif
++	scc_disable_tx_interrupts(ptr);
++	scc_disable_rx_interrupts(ptr);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: close done\n");
++#endif
++}
++
++
++/*---------------------------------------------------------------------------
++ * Internal support functions
++ *--------------------------------------------------------------------------*/
++
++static void scc_setsignals(struct scc_port *port, int dtr, int rts)
++{
++	unsigned long flags;
++	unsigned char t;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: setsignals dtr %d rts %d...\n", dtr, rts);
++#endif
++	local_irq_save(flags);
++	t = SCCread(TX_CTRL_REG);
++	if (dtr >= 0)
++		t = dtr? (t | TCR_DTR): (t & ~TCR_DTR);
++	if (rts >= 0)
++		t = rts? (t | TCR_RTS): (t & ~TCR_RTS);
++	SCCwrite(TX_CTRL_REG, t);
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: setsignals done\n");
++#endif
++}
++
++
++static void scc_send_xchar(struct tty_struct *tty, char ch)
++{
++	struct scc_port *port = (struct scc_port *)tty->driver_data;
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: send_xchar ...\n");
++#endif
++	port->x_char = ch;
++	if (ch)
++		scc_enable_tx_interrupts(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: send_xchar done\n");
++#endif
++}
++
++
++/*---------------------------------------------------------------------------
++ * Driver entrypoints referenced from above
++ *--------------------------------------------------------------------------*/
++
++static int scc_open(struct tty_struct *tty, struct file *filp)
++{
++	int line = tty->index;
++	int retval;
++	struct scc_port *port = &scc_ports[line];
++	int i, channel = port->channel;
++	unsigned long flags;
++	SCC_ACCESS_INIT(port);
++
++	static const struct {
++		unsigned reg, val;
++	} scc_init_tab[] = {
++		/* no parity, 1 stop bit, async, 1:16 */
++		{ AUX1_CTRL_REG, A1CR_PARITY_NONE|A1CR_MODE_ASYNC_1|A1CR_CLKMODE_x64 },
++		/* parity error is special cond, ints disabled, no DMA */
++		{ INT_AND_DMA_REG, IDR_PARERR_AS_SPCOND | IDR_RX_INT_DISAB },
++		/* Rx 8 bits/char, no auto enable, Rx off */
++		{ RX_CTRL_REG, RCR_CHSIZE_8 },
++		/* DTR off, Tx 8 bits/char, RTS off, Tx off */
++		{ TX_CTRL_REG, TCR_CHSIZE_8 },
++		/* special features off */
++		{ AUX2_CTRL_REG, 0 },
++		/* RTxC is XTAL, TRxC is input, both clocks = RTxC */
++		{ CLK_CTRL_REG, CCR_TRxCOUT_XTAL | CCR_TXCLK_RTxC | CCR_RXCLK_RTxC },
++		{ DPLL_CTRL_REG, 0 },
++		/* Start Rx */
++		{ RX_CTRL_REG, RCR_RX_ENAB | RCR_CHSIZE_8 },
++		/* Start Tx */
++		{ TX_CTRL_REG, TCR_TX_ENAB | TCR_RTS | TCR_DTR | TCR_CHSIZE_8 },
++		/* Ext/Stat ints: CTS, DCD, SYNC (DSR) */
++		{ INT_CTRL_REG, ICR_ENAB_DCD_INT | ICR_ENAB_CTS_INT | ICR_ENAB_SYNC_INT },
++		/* Reset Ext/Stat ints */
++		{ COMMAND_REG, CR_EXTSTAT_RESET },
++		/* ...again */
++		{ COMMAND_REG, CR_EXTSTAT_RESET },
++		/* Rx int always, TX int off, Ext/Stat int on */
++		{ INT_AND_DMA_REG, IDR_EXTSTAT_INT_ENAB |
++		  IDR_PARERR_AS_SPCOND | IDR_RX_INT_ALL }
++	};
++
++	if (atari_SCC_init_done && line == 1)
++		return -ENODEV;
++
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: open port ...\n");
++#endif
++	if (!(port->gs.flags & ASYNC_INITIALIZED)) {
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: init port ...\n");
++#endif
++		local_irq_save(flags);
++
++		SCCmod(MASTER_INT_CTRL, 0x3f,
++		       channel == 0 ? MIC_CH_A_RESET : MIC_CH_B_RESET);
++		udelay(40);		/* extra delay after a reset */
++
++		for (i = 0; i < sizeof(scc_init_tab)/sizeof(*scc_init_tab); ++i)
++			SCCwrite(scc_init_tab[i].reg, scc_init_tab[i].val);
++
++
++		/* remember status register for detection of DCD and CTS changes */
++		scc_last_status_reg[channel] = SCCread(STATUS_REG);
++
++		port->c_dcd = 0;	/* Prevent initial 1->0 interrupt */
++		scc_setsignals(port, 1, 1);
++		local_irq_restore(flags);
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: init port done!\n");
++#endif
++	}
++
++	tty->driver_data = port;
++	port->gs.tty = tty;
++	port->gs.count++;
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: gs init port ...\n");
++#endif
++	retval = gs_init_port(&port->gs);
++	if (retval) {
++		port->gs.count--;
++		return retval;
++	}
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: gs init port done!\n");
++#endif
++	port->gs.flags |= GS_ACTIVE;
++
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: gs wait ready ...\n");
++#endif
++	retval = gs_block_til_ready(port, filp);
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: gs wait ready done!\n");
++#endif
++	if (retval) {
++		port->gs.count--;
++		return retval;
++	}
++
++	port->c_dcd = scc_get_CD(port);
++
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: enable rx ints ...\n");
++#endif
++	scc_enable_rx_interrupts(port);
++#ifdef DEBUG
++	printk(KERN_WARNING "SCC: enable rx ints done!\n");
++
++	printk(KERN_INFO "SCC: open port done!\n");
++#endif
++	return 0;
++}
++
++
++static void scc_throttle(struct tty_struct *tty)
++{
++	struct scc_port *port = (struct scc_port *)tty->driver_data;
++	unsigned long flags;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: throttle ...\n");
++#endif
++	if (tty->termios->c_cflag & CRTSCTS) {
++		local_irq_save(flags);
++		SCCmod(TX_CTRL_REG, ~TCR_RTS, 0);
++		local_irq_restore(flags);
++	}
++	if (I_IXOFF(tty))
++		scc_send_xchar(tty, STOP_CHAR(tty));
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: throttle done!\n");
++#endif
++}
++
++
++static void scc_unthrottle(struct tty_struct *tty)
++{
++	struct scc_port *port = (struct scc_port *)tty->driver_data;
++	unsigned long flags;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: unthrottle ...\n");
++#endif
++	if (tty->termios->c_cflag & CRTSCTS) {
++		local_irq_save(flags);
++		SCCmod(TX_CTRL_REG, 0xff, TCR_RTS);
++		local_irq_restore(flags);
++	}
++	if (I_IXOFF(tty))
++		scc_send_xchar(tty, START_CHAR(tty));
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: unthrottle done!\n");
++#endif
++}
++
++
++static int scc_ioctl(struct tty_struct *tty, struct file *file,
++		     unsigned int cmd, unsigned long arg)
++{
++	struct scc_port *port = (struct scc_port *)tty->driver_data;
++	int retval;
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: ioctl! cmd %d, arg %p \n", cmd, arg);
++#endif
++	//if (serial_paranoia_check(info, tty->device, "zs_ioctl"))
++	//	return -ENODEV;
++
++	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
++	    (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) &&
++	    (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) {
++		if (tty->flags & (1 << TTY_IO_ERROR))
++			return -EIO;
++	}
++
++	switch (cmd) {
++	case TCSBRK:	/* SVID version: non-zero arg --> no break */
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TCSBRK\n");
++#endif
++		retval = tty_check_change(tty);
++		if (retval)
++			return retval;
++		tty_wait_until_sent(tty, 0);
++		//if (!arg)
++		//	send_break(info, HZ/4);	/* 1/4 second */
++		return 0;
++	case TCSBRKP:	/* support for POSIX tcsendbreak() */
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TCSBRKP\n");
++#endif
++		retval = tty_check_change(tty);
++		if (retval)
++			return retval;
++		tty_wait_until_sent(tty, 0);
++		//send_break(info, arg ? arg*(HZ/10) : HZ/4);
++		return 0;
++	case TIOCGSOFTCAR:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCGSOFTCAR\n");
++#endif
++		if (put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg))
++			return -EFAULT;
++		return 0;
++	case TIOCSSOFTCAR:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCSSOFTCAR\n");
++#endif
++		if (get_user(arg, (unsigned long *)arg))
++			return -EFAULT;
++		tty->termios->c_cflag =
++			((tty->termios->c_cflag & ~CLOCAL) |
++			 (arg ? CLOCAL : 0));
++		return 0;
++	case TIOCMGET:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCMGET\n");
++#endif
++		//return get_modem_info(info, (unsigned int *)arg);
++		return 0;
++	case TIOCMBIS:
++	case TIOCMBIC:
++	case TIOCMSET:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCMSET\n");
++#endif
++		//return set_modem_info(info, cmd, (unsigned int *)arg);
++		return 0;
++	case TIOCGSERIAL:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCGSERIAL\n");
++#endif
++		return 0;
++		//return get_serial_info(info,
++		//		       (struct serial_struct *)arg);
++	case TIOCSSERIAL:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCSSERIAL\n");
++#endif
++		return 0;
++		//return set_serial_info(info,
++		//		       (struct serial_struct *)arg);
++	case TIOCSERGETLSR: /* Get line status register */
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCSERGETLSR\n");
++#endif
++		return 0;
++		//return get_lsr_info(info, (unsigned int *)arg);
++
++	case TIOCSERGSTRUCT:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl TIOCSERGSTRUCT\n");
++#endif
++		return 0;
++		if (copy_to_user((struct scc_port *)arg,
++				 port, sizeof(struct scc_port)))
++			return -EFAULT;
++		return 0;
++
++	default:
++#ifdef DEBUG
++		printk(KERN_INFO "SCC: ioctl default\n");
++#endif
++		return -ENOIOCTLCMD;
++	}
++	return 0;
++}
++
++
++static void scc_break_ctl(struct tty_struct *tty, int break_state)
++{
++	struct scc_port *port = (struct scc_port *)tty->driver_data;
++	unsigned long flags;
++	SCC_ACCESS_INIT(port);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: break ctl ...\n");
++#endif
++	local_irq_save(flags);
++	SCCmod(TX_CTRL_REG, ~TCR_SEND_BREAK, break_state ? TCR_SEND_BREAK : 0);
++	local_irq_restore(flags);
++#ifdef DEBUG
++	printk(KERN_INFO "SCC: break ctl done!\n");
++#endif
++}
++
++
++/*---------------------------------------------------------------------------
++ * Serial console stuff...
++ *--------------------------------------------------------------------------*/
++#if 1
++#define scc_delay() \
++	asm volatile ("tstb %0" : : "m" (*scc_del) : "cc")
++
++#define SCC_WRITE(reg,val)				\
++	do {						\
++		scc.cha_b_ctrl = (reg);			\
++		scc_delay();				\
++		scc.cha_b_ctrl = (val);			\
++		scc_delay();				\
++	} while (0)
++
++/* loops_per_jiffy isn't initialized yet, so we can't use udelay(). This does a
++ * delay of ~ 60us. */
++#define LONG_DELAY()					\
++	do {						\
++		int i;					\
++		for (i = 100; i > 0; --i)		\
++			scc_delay();			\
++	} while (0)
++
++static void atari_init_scc_port(int cflag)
++{
++	extern int atari_SCC_reset_done;
++	static int clksrc_table[9] =
++		/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
++		{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
++	static int brgsrc_table[9] =
++		/* reg 14: 0 = RTxC, 2 = PCLK */
++		{ 2, 2, 2, 2, 2, 2, 0, 2, 2 };
++	static int clkmode_table[9] =
++		/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
++		{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
++	static int div_table[9] =
++		/* reg12 (BRG low) */
++		{ 208, 138, 103, 50, 24, 11, 1, 0, 0 };
++
++	int baud = cflag & CBAUD;
++	int clksrc, clkmode, div, reg3, reg5;
++
++	scc_del = &mfp.par_dt_reg;
++
++	if (cflag & CBAUDEX)
++		baud += B38400;
++	if (baud < B1200 || baud > B38400+2)
++		baud = B9600;		/* use default 9600bps for non-implemented rates */
++	baud -= B1200;			/* tables starts at 1200bps */
++
++	clksrc  = clksrc_table[baud];
++	clkmode = clkmode_table[baud];
++	div     = div_table[baud];
++	if (ATARIHW_PRESENT(TT_MFP) && baud >= 6) {
++		/* special treatment for TT, where rates >= 38400 are done via TRxC */
++		clksrc = 0x28; /* TRxC */
++		clkmode = baud == 6 ? 0xc0 :
++			  baud == 7 ? 0x80 : /* really 76800bps */
++				      0x40;  /* really 153600bps */
++		div = 0;
++	}
++
++	reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40;
++	reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */;
++
++	(void)scc.cha_b_ctrl;		/* reset reg pointer */
++	SCC_WRITE(9, 0xc0);		/* reset */
++	LONG_DELAY();			/* extra delay after WR9 access */
++	SCC_WRITE(4, (cflag & PARENB) ? ((cflag & PARODD) ? 0x01 : 0x03) : 0 |
++		  0x04 /* 1 stopbit */ |
++		  clkmode);
++	SCC_WRITE(3, reg3);
++	SCC_WRITE(5, reg5);
++	SCC_WRITE(9, 0);		/* no interrupts */
++	LONG_DELAY();			/* extra delay after WR9 access */
++	SCC_WRITE(10, 0);		/* NRZ mode */
++	SCC_WRITE(11, clksrc);		/* main clock source */
++	SCC_WRITE(12, div);		/* BRG value */
++	SCC_WRITE(13, 0);		/* BRG high byte */
++	SCC_WRITE(14, brgsrc_table[baud]);
++	SCC_WRITE(14, brgsrc_table[baud] | (div ? 1 : 0));
++	SCC_WRITE(3, reg3 | 1);
++	SCC_WRITE(5, reg5 | 8);
++
++	atari_SCC_reset_done = 1;
++	atari_SCC_init_done = 1;
++}
++
++static void scc_ch_write(char ch)
++{
++	volatile char *p = NULL;
++
++	if (MACH_IS_TT || MACH_IS_FALCON)
++		p = (volatile char *)&scc.cha_b_ctrl;
++
++	if (MACH_IS_ST)
++		p = (volatile char *)&scc.cha_b_ctrl;
++
++	if (MACH_IS_STE)
++		p = (volatile char *)&st_escc.cha_b_ctrl;
++
++	do {
++		scc_delay();
++	}
++	while (!(*p & 4));
++	// scc_delay();
++	// *p = 8;
++	scc_delay();
++	*(p+1) = ch;
++}
++
++/* The console must be locked when we get here. */
++
++static void scc_console_write(struct console *co, const char *str, unsigned count)
++{
++	unsigned long flags;
++
++	//printk("scc_console_write: %s\n", str);
++	local_irq_save(flags);
++
++	while (count--) {
++		if (*str == '\n')
++			scc_ch_write('\r');
++		scc_ch_write(*str++);
++	}
++	local_irq_restore(flags);
++	//printk("scc_console_write done!\n");
++}
++
++static struct tty_driver *scc_console_device(struct console *c, int *index)
++{
++	*index = c->index;
++	return scc_driver;
++}
++
++
++static int __init scc_console_setup(struct console *co, char *options)
++{
++	printk("scc_console_setup: initializing SCC port B\n");
++	atari_init_scc_port(B9600|CS8);
++	printk("scc_console_setup: done!\n");
++	return 0;
++}
++
++
++static struct console sercons = {
++	.name		= "ttyS",
++	.write		= scc_console_write,
++	.device		= scc_console_device,
++	.setup		= scc_console_setup,
++	.flags		= CON_PRINTBUFFER,
++	.index		= -1,
++};
++
++
++static int __init vme_scc_console_init(void)
++{
++	if (MACH_IS_TT || MACH_IS_ST || MACH_IS_FALCON)
++		register_console(&sercons);
++	return 0;
++}
++
++console_initcall(vme_scc_console_init);
++#endif
++
++/***************************** End of Functions *********************/
++
++MODULE_AUTHOR("Michael Schmitz");
++MODULE_DESCRIPTION("Atari Amd8350 SCC serial driver");
++MODULE_LICENSE("GPL");

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/atari-hades-pci-balance-iomap-and-iounmap.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/atari-hades-pci-balance-iomap-and-iounmap.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,100 @@
+Subject: m68k: Balance ioremap and iounmap in m68k/atari/hades-pci.c
+
+From: Roel Kluin <12o3l at tiscali.nl>
+
+m68k: Balance ioremap and iounmap in m68k/atari/hades-pci.c
+
+Signed-off-by: Roel Kluin <12o3l at tiscali.nl>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/atari/hades-pci.c |   56 +++++++++++++++++++++-----------------------
+ 1 file changed, 27 insertions(+), 29 deletions(-)
+
+--- a/arch/m68k/atari/hades-pci.c
++++ b/arch/m68k/atari/hades-pci.c
+@@ -376,8 +376,8 @@ struct pci_bus_info * __init init_hades_
+ 	 */
+ 
+ 	bus = kzalloc(sizeof(struct pci_bus_info), GFP_KERNEL);
+-	if (!bus)
+-		return NULL;
++	if (unlikely(!bus))
++		goto iounmap_base_virt;
+ 
+ 	/*
+ 	 * Claim resources. The m68k has no separate I/O space, both
+@@ -385,43 +385,25 @@ struct pci_bus_info * __init init_hades_
+ 	 * the I/O resources are requested in memory space as well.
+ 	 */
+ 
+-	if (request_resource(&iomem_resource, &config_space) != 0)
+-	{
+-		kfree(bus);
+-		return NULL;
+-	}
+-
+-	if (request_resource(&iomem_resource, &io_space) != 0)
+-	{
+-		release_resource(&config_space);
+-		kfree(bus);
+-		return NULL;
+-	}
++	if (unlikely(request_resource(&iomem_resource, &config_space) != 0))
++		goto free_bus;
++
++	if (unlikely(request_resource(&iomem_resource, &io_space) != 0))
++		goto release_config_space;
+ 
+ 	bus->mem_space.start = HADES_MEM_BASE;
+ 	bus->mem_space.end = HADES_MEM_BASE + HADES_MEM_SIZE - 1;
+ 	bus->mem_space.name = pci_mem_name;
+ #if 1
+-	if (request_resource(&iomem_resource, &bus->mem_space) != 0)
+-	{
+-		release_resource(&io_space);
+-		release_resource(&config_space);
+-		kfree(bus);
+-		return NULL;
+-	}
++	if (unlikely(request_resource(&iomem_resource, &bus->mem_space) != 0))
++		goto release_io_space;
+ #endif
+ 	bus->io_space.start = pci_io_base_virt;
+ 	bus->io_space.end = pci_io_base_virt + HADES_VIRT_IO_SIZE - 1;
+ 	bus->io_space.name = pci_io_name;
+ #if 1
+-	if (request_resource(&ioport_resource, &bus->io_space) != 0)
+-	{
+-		release_resource(&bus->mem_space);
+-		release_resource(&io_space);
+-		release_resource(&config_space);
+-		kfree(bus);
+-		return NULL;
+-	}
++	if (unlikely(request_resource(&ioport_resource, &bus->io_space) != 0))
++		goto release_bus_mem_space;
+ #endif
+ 	/*
+ 	 * Set hardware dependent functions.
+@@ -438,5 +420,21 @@ struct pci_bus_info * __init init_hades_
+ 	tt_mfp.active_edge &= ~0x27;
+ 
+ 	return bus;
++
++release_bus_mem_space:
++	release_resource(&bus->mem_space);
++release_io_space:
++	release_resource(&io_space);
++release_config_space:
++	release_resource(&config_space);
++free_bus:
++	kfree(bus);
++iounmap_base_virt:
++	iounmap((void *)pci_io_base_virt);
++
++	for (i = 0; i < N_SLOTS; i++)
++		iounmap((void *)pci_conf_base_virt[i]);
++
++	return NULL;
+ }
+ #endif

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/dio-ARRAY_SIZE-cleanup.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/dio-ARRAY_SIZE-cleanup.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,34 @@
+Subject: dio: ARRAY_SIZE() cleanup
+
+From: Alejandro Martinez Ruiz <alex at flawedcode.org>
+
+dio: ARRAY_SIZE() cleanup
+
+[Geert: eliminate NUMNAMES, as suggested by Richard Knutsson ]
+
+Signed-off-by: Alejandro Martinez Ruiz <alex at flawedcode.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ drivers/dio/dio.c |    4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+--- a/drivers/dio/dio.c
++++ b/drivers/dio/dio.c
+@@ -88,8 +88,6 @@ static struct dioname names[] = 
+ #undef DIONAME
+ #undef DIOFBNAME
+ 
+-#define NUMNAMES (sizeof(names) / sizeof(struct dioname))
+-
+ static const char *unknowndioname 
+         = "unknown DIO board -- please email <linux-m68k at lists.linux-m68k.org>!";
+ 
+@@ -97,7 +95,7 @@ static const char *dio_getname(int id)
+ {
+         /* return pointer to a constant string describing the board with given ID */
+ 	unsigned int i;
+-        for (i = 0; i < NUMNAMES; i++)
++        for (i = 0; i < ARRAY_SIZE(names); i++)
+                 if (names[i].id == id) 
+                         return names[i].name;
+ 

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-ARRAY_SIZE-cleanup.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-ARRAY_SIZE-cleanup.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,23 @@
+Subject: m68k: ARRAY_SIZE() cleanup
+
+From: Alejandro Martinez Ruiz <alex at flawedcode.org>
+
+m68k: ARRAY_SIZE() cleanup
+
+Signed-off-by: Alejandro Martinez Ruiz <alex at flawedcode.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/amiga/amisound.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/m68k/amiga/amisound.c
++++ b/arch/m68k/amiga/amisound.c
+@@ -21,7 +21,7 @@ static const signed char sine_data[] = {
+ 	0,  39,  75,  103,  121,  127,  121,  103,  75,  39,
+ 	0, -39, -75, -103, -121, -127, -121, -103, -75, -39
+ };
+-#define DATA_SIZE	(sizeof(sine_data)/sizeof(sine_data[0]))
++#define DATA_SIZE	ARRAY_SIZE(sine_data)
+ 
+ #define custom amiga_custom
+ 

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-cc-cross-prefix.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-cc-cross-prefix.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,35 @@
+Subject: m68k: Use cc-cross-prefix
+
+From: Geert Uytterhoeven <geert at linux-m68k.org>
+
+m68k: Use cc-cross-prefix
+
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/Makefile |   11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+--- a/arch/m68k/Makefile
++++ b/arch/m68k/Makefile
+@@ -13,16 +13,15 @@
+ # Copyright (C) 1994 by Hamish Macdonald
+ #
+ 
+-# test for cross compiling
+-COMPILE_ARCH = $(shell uname -m)
+-
+ # override top level makefile
+ AS += -m68020
+ LDFLAGS := -m m68kelf
+ LDFLAGS_MODULE += -T $(srctree)/arch/m68k/kernel/module.lds
+-ifneq ($(COMPILE_ARCH),$(ARCH))
+-	# prefix for cross-compiling binaries
+-	CROSS_COMPILE = m68k-linux-gnu-
++ifneq ($(SUBARCH),$(ARCH))
++	ifeq ($(CROSS_COMPILE),)
++		CROSS_COMPILE := $(call cc-cross-prefix, \
++			m68k-linux-gnu- m68k-linux- m68k-unknown-linux-gnu-)
++	endif
+ endif
+ 
+ ifdef CONFIG_SUN3

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-initrd-fix.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-initrd-fix.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,52 @@
+Subject: initrd: Fix virtual/physical mix-up in overwrite test
+
+From: Geert Uytterhoeven <geert at linux-m68k.org>
+
+On recent kernels, I get the following error when using an initrd:
+
+| initrd overwritten (0x00b78000 < 0x07668000) - disabling it.
+
+My Amiga 4000 has 12 MiB of RAM at physical address 0x07400000 (virtual
+0x00000000).
+The initrd is located at the end of RAM: 0x00b78000 - 0x00c00000 (virtual).
+The overwrite test compares the (virtual) initrd location to the (physical)
+first available memory location, which fails.
+
+This patch converts initrd_start to a page frame number, so it can be safely
+compared with min_low_pfn.
+
+Before the introduction of discontiguous memory support on m68k
+(12d810c1b8c2b913d48e629e2b5c01d105029839), min_low_pfn was just left
+untouched by the m68k-specific code (zero, I guess), and everything worked
+fine.
+
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+On several platforms, initrd_below_start_ok is set to 1:
+
+| arch/mips/kernel/setup.c:       initrd_below_start_ok = 1;
+| arch/parisc/mm/init.c:                  initrd_below_start_ok = 1;
+| arch/powerpc/kernel/prom.c:                     initrd_below_start_ok = 1;
+| arch/ppc/platforms/hdpu.c:                      initrd_below_start_ok = 1;
+| arch/xtensa/kernel/setup.c:             initrd_below_start_ok = 1;
+
+Some of these may be workarounds for this bug. Please check.
+
+ init/main.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/init/main.c
++++ b/init/main.c
+@@ -598,9 +598,10 @@ asmlinkage void __init start_kernel(void
+ 
+ #ifdef CONFIG_BLK_DEV_INITRD
+ 	if (initrd_start && !initrd_below_start_ok &&
+-			initrd_start < min_low_pfn << PAGE_SHIFT) {
++	    page_to_pfn(virt_to_page(initrd_start)) < min_low_pfn) {
+ 		printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
+-		    "disabling it.\n",initrd_start,min_low_pfn << PAGE_SHIFT);
++		    "disabling it.\n",
++		    page_to_pfn(virt_to_page(initrd_start)), min_low_pfn);
+ 		initrd_start = 0;
+ 	}
+ #endif

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-amiga-amiga_ksyms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-amiga-amiga_ksyms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,217 @@
+Subject: m68k: kill arch/m68k/amiga/amiga_ksyms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+m68k: kill arch/m68k/amiga/amiga_ksyms.c
+
+EXPORT_SYMBOL's belong to the actual code.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/amiga/Makefile      |    2 +-
+ arch/m68k/amiga/amiga_ksyms.c |   33 ---------------------------------
+ arch/m68k/amiga/amisound.c    |    3 +++
+ arch/m68k/amiga/chipram.c     |    7 +++++++
+ arch/m68k/amiga/config.c      |   12 ++++++++++++
+ arch/m68k/amiga/pcmcia.c      |    9 +++++++++
+ 6 files changed, 32 insertions(+), 34 deletions(-)
+
+--- a/arch/m68k/amiga/Makefile
++++ b/arch/m68k/amiga/Makefile
+@@ -2,6 +2,6 @@
+ # Makefile for Linux arch/m68k/amiga source directory
+ #
+ 
+-obj-y		:= config.o amiints.o cia.o chipram.o amisound.o amiga_ksyms.o
++obj-y		:= config.o amiints.o cia.o chipram.o amisound.o
+ 
+ obj-$(CONFIG_AMIGA_PCMCIA)	+= pcmcia.o
+--- a/arch/m68k/amiga/amiga_ksyms.c
++++ /dev/null
+@@ -1,33 +0,0 @@
+-#include <linux/module.h>
+-#include <linux/types.h>
+-#include <asm/ptrace.h>
+-#include <asm/amigahw.h>
+-#include <asm/amigaints.h>
+-#include <asm/amipcmcia.h>
+-
+-extern volatile u_short amiga_audio_min_period;
+-extern u_short amiga_audio_period;
+-
+-/*
+- * Add things here when you find the need for it.
+- */
+-EXPORT_SYMBOL(amiga_model);
+-EXPORT_SYMBOL(amiga_chipset);
+-EXPORT_SYMBOL(amiga_hw_present);
+-EXPORT_SYMBOL(amiga_eclock);
+-EXPORT_SYMBOL(amiga_colorclock);
+-EXPORT_SYMBOL(amiga_chip_alloc);
+-EXPORT_SYMBOL(amiga_chip_free);
+-EXPORT_SYMBOL(amiga_chip_avail);
+-EXPORT_SYMBOL(amiga_chip_size);
+-EXPORT_SYMBOL(amiga_audio_period);
+-EXPORT_SYMBOL(amiga_audio_min_period);
+-
+-#ifdef CONFIG_AMIGA_PCMCIA
+-  EXPORT_SYMBOL(pcmcia_reset);
+-  EXPORT_SYMBOL(pcmcia_copy_tuple);
+-  EXPORT_SYMBOL(pcmcia_program_voltage);
+-  EXPORT_SYMBOL(pcmcia_access_speed);
+-  EXPORT_SYMBOL(pcmcia_write_enable);
+-  EXPORT_SYMBOL(pcmcia_write_disable);
+-#endif
+--- a/arch/m68k/amiga/amisound.c
++++ b/arch/m68k/amiga/amisound.c
+@@ -12,6 +12,7 @@
+ #include <linux/timer.h>
+ #include <linux/init.h>
+ #include <linux/string.h>
++#include <linux/module.h>
+ 
+ #include <asm/system.h>
+ #include <asm/amigahw.h>
+@@ -31,6 +32,7 @@ static const signed char sine_data[] = {
+      */
+ 
+ volatile unsigned short amiga_audio_min_period = 124; /* Default for pre-OCS */
++EXPORT_SYMBOL(amiga_audio_min_period);
+ 
+ #define MAX_PERIOD	(65535)
+ 
+@@ -40,6 +42,7 @@ volatile unsigned short amiga_audio_min_
+      */
+ 
+ unsigned short amiga_audio_period = MAX_PERIOD;
++EXPORT_SYMBOL(amiga_audio_period);
+ 
+ static unsigned long clock_constant;
+ 
+--- a/arch/m68k/amiga/chipram.c
++++ b/arch/m68k/amiga/chipram.c
+@@ -13,10 +13,13 @@
+ #include <linux/ioport.h>
+ #include <linux/slab.h>
+ #include <linux/string.h>
++#include <linux/module.h>
++
+ #include <asm/page.h>
+ #include <asm/amigahw.h>
+ 
+ unsigned long amiga_chip_size;
++EXPORT_SYMBOL(amiga_chip_size);
+ 
+ static struct resource chipram_res = {
+     .name = "Chip RAM", .start = CHIP_PHYSADDR
+@@ -67,6 +70,7 @@ void *amiga_chip_alloc(unsigned long siz
+ #endif
+     return (void *)ZTWO_VADDR(res->start);
+ }
++EXPORT_SYMBOL(amiga_chip_alloc);
+ 
+ 
+     /*
+@@ -120,6 +124,7 @@ void amiga_chip_free(void *ptr)
+     }
+     printk("amiga_chip_free: trying to free nonexistent region at %p\n", ptr);
+ }
++EXPORT_SYMBOL(amiga_chip_free);
+ 
+ 
+ unsigned long amiga_chip_avail(void)
+@@ -129,3 +134,5 @@ unsigned long amiga_chip_avail(void)
+ #endif
+ 	return chipavail;
+ }
++EXPORT_SYMBOL(amiga_chip_avail);
++
+--- a/arch/m68k/amiga/config.c
++++ b/arch/m68k/amiga/config.c
+@@ -23,6 +23,7 @@
+ #include <linux/delay.h>
+ #include <linux/interrupt.h>
+ #include <linux/zorro.h>
++#include <linux/module.h>
+ 
+ #include <asm/bootinfo.h>
+ #include <asm/setup.h>
+@@ -36,13 +37,24 @@
+ #include <asm/io.h>
+ 
+ unsigned long amiga_model;
++EXPORT_SYMBOL(amiga_model);
++
+ unsigned long amiga_eclock;
++EXPORT_SYMBOL(amiga_eclock);
++
+ unsigned long amiga_masterclock;
++
+ unsigned long amiga_colorclock;
++EXPORT_SYMBOL(amiga_colorclock);
++
+ unsigned long amiga_chipset;
++EXPORT_SYMBOL(amiga_chipset);
++
+ unsigned char amiga_vblank;
+ unsigned char amiga_psfreq;
++
+ struct amiga_hw_present amiga_hw_present;
++EXPORT_SYMBOL(amiga_hw_present);
+ 
+ static char s_a500[] __initdata = "A500";
+ static char s_a500p[] __initdata = "A500+";
+--- a/arch/m68k/amiga/pcmcia.c
++++ b/arch/m68k/amiga/pcmcia.c
+@@ -15,6 +15,8 @@
+ #include <linux/types.h>
+ #include <linux/jiffies.h>
+ #include <linux/timer.h>
++#include <linux/module.h>
++
+ #include <asm/amigayle.h>
+ #include <asm/amipcmcia.h>
+ 
+@@ -30,6 +32,7 @@ void pcmcia_reset(void)
+ 	while (time_before(jiffies, reset_start_time + 1*HZ/100));
+ 	b = gayle_reset;
+ }
++EXPORT_SYMBOL(pcmcia_reset);
+ 
+ 
+ /* copy a tuple, including tuple header. return nb bytes copied */
+@@ -61,6 +64,7 @@ int pcmcia_copy_tuple(unsigned char tupl
+ 
+ 	return 0;
+ }
++EXPORT_SYMBOL(pcmcia_copy_tuple);
+ 
+ void pcmcia_program_voltage(int voltage)
+ {
+@@ -84,6 +88,7 @@ void pcmcia_program_voltage(int voltage)
+ 	gayle.config = cfg_byte;
+ 
+ }
++EXPORT_SYMBOL(pcmcia_program_voltage);
+ 
+ void pcmcia_access_speed(int speed)
+ {
+@@ -101,13 +106,17 @@ void pcmcia_access_speed(int speed)
+ 	cfg_byte = (cfg_byte & 0xf3) | s;
+ 	gayle.config = cfg_byte;
+ }
++EXPORT_SYMBOL(pcmcia_access_speed);
+ 
+ void pcmcia_write_enable(void)
+ {
+ 	gayle.cardstatus = GAYLE_CS_WR|GAYLE_CS_DA;
+ }
++EXPORT_SYMBOL(pcmcia_write_enable);
+ 
+ void pcmcia_write_disable(void)
+ {
+ 	gayle.cardstatus = 0;
+ }
++EXPORT_SYMBOL(pcmcia_write_disable);
++

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-atari-atari_ksyms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-atari-atari_ksyms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,238 @@
+Subject: m68k: kill arch/m68k/atari/atari_ksyms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+m68k: kill arch/m68k/atari/atari_ksyms.c
+
+EXPORT_SYMBOL's belong to the actual code.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/atari/Makefile      |    2 +-
+ arch/m68k/atari/ataints.c     |    3 +++
+ arch/m68k/atari/atari_ksyms.c |   35 -----------------------------------
+ arch/m68k/atari/atasound.c    |    2 ++
+ arch/m68k/atari/config.c      |   11 +++++++++++
+ arch/m68k/atari/debug.c       |    6 ++++++
+ arch/m68k/atari/stdma.c       |    5 +++++
+ arch/m68k/atari/stram.c       |    3 +++
+ 8 files changed, 31 insertions(+), 36 deletions(-)
+
+--- a/arch/m68k/atari/Makefile
++++ b/arch/m68k/atari/Makefile
+@@ -3,7 +3,7 @@
+ #
+ 
+ obj-y		:= config.o time.o debug.o ataints.o stdma.o \
+-			atasound.o stram.o atari_ksyms.o
++			atasound.o stram.o
+ 
+ ifeq ($(CONFIG_PCI),y)
+ obj-$(CONFIG_HADES)	+= hades-pci.o
+--- a/arch/m68k/atari/ataints.c
++++ b/arch/m68k/atari/ataints.c
+@@ -40,6 +40,7 @@
+ #include <linux/kernel_stat.h>
+ #include <linux/init.h>
+ #include <linux/seq_file.h>
++#include <linux/module.h>
+ 
+ #include <asm/system.h>
+ #include <asm/traps.h>
+@@ -446,6 +447,7 @@ unsigned long atari_register_vme_int(voi
+ 	free_vme_vec_bitmap |= 1 << i;
+ 	return VME_SOURCE_BASE + i;
+ }
++EXPORT_SYMBOL(atari_register_vme_int);
+ 
+ 
+ void atari_unregister_vme_int(unsigned long irq)
+@@ -455,5 +457,6 @@ void atari_unregister_vme_int(unsigned l
+ 		free_vme_vec_bitmap &= ~(1 << irq);
+ 	}
+ }
++EXPORT_SYMBOL(atari_unregister_vme_int);
+ 
+ 
+--- a/arch/m68k/atari/atari_ksyms.c
++++ /dev/null
+@@ -1,35 +0,0 @@
+-#include <linux/module.h>
+-
+-#include <asm/ptrace.h>
+-#include <asm/traps.h>
+-#include <asm/atarihw.h>
+-#include <asm/atariints.h>
+-#include <asm/atarikb.h>
+-#include <asm/atari_joystick.h>
+-#include <asm/atari_stdma.h>
+-#include <asm/atari_stram.h>
+-
+-extern void atari_microwire_cmd( int cmd );
+-extern int atari_MFP_init_done;
+-extern int atari_SCC_init_done;
+-extern int atari_SCC_reset_done;
+-
+-EXPORT_SYMBOL(atari_mch_cookie);
+-EXPORT_SYMBOL(atari_mch_type);
+-EXPORT_SYMBOL(atari_hw_present);
+-EXPORT_SYMBOL(atari_switches);
+-EXPORT_SYMBOL(atari_dont_touch_floppy_select);
+-EXPORT_SYMBOL(atari_register_vme_int);
+-EXPORT_SYMBOL(atari_unregister_vme_int);
+-EXPORT_SYMBOL(stdma_lock);
+-EXPORT_SYMBOL(stdma_release);
+-EXPORT_SYMBOL(stdma_others_waiting);
+-EXPORT_SYMBOL(stdma_islocked);
+-EXPORT_SYMBOL(atari_stram_alloc);
+-EXPORT_SYMBOL(atari_stram_free);
+-
+-EXPORT_SYMBOL(atari_MFP_init_done);
+-EXPORT_SYMBOL(atari_SCC_init_done);
+-EXPORT_SYMBOL(atari_SCC_reset_done);
+-
+-EXPORT_SYMBOL(atari_microwire_cmd);
+--- a/arch/m68k/atari/atasound.c
++++ b/arch/m68k/atari/atasound.c
+@@ -22,6 +22,7 @@
+ #include <linux/fcntl.h>
+ #include <linux/errno.h>
+ #include <linux/mm.h>
++#include <linux/module.h>
+ 
+ #include <asm/atarihw.h>
+ #include <asm/system.h>
+@@ -43,6 +44,7 @@ void atari_microwire_cmd (int cmd)
+ 	while( tt_microwire.mask != 0x7ff)
+ 		;
+ }
++EXPORT_SYMBOL(atari_microwire_cmd);
+ 
+ 
+ /* PSG base frequency */
+--- a/arch/m68k/atari/config.c
++++ b/arch/m68k/atari/config.c
+@@ -31,6 +31,7 @@
+ #include <linux/delay.h>
+ #include <linux/ioport.h>
+ #include <linux/vt_kern.h>
++#include <linux/module.h>
+ 
+ #include <asm/bootinfo.h>
+ #include <asm/setup.h>
+@@ -43,10 +44,20 @@
+ #include <asm/io.h>
+ 
+ u_long atari_mch_cookie;
++EXPORT_SYMBOL(atari_mch_cookie);
++
+ u_long atari_mch_type;
++EXPORT_SYMBOL(atari_mch_type);
++
+ struct atari_hw_present atari_hw_present;
++EXPORT_SYMBOL(atari_hw_present);
++
+ u_long atari_switches;
++EXPORT_SYMBOL(atari_switches);
++
+ int atari_dont_touch_floppy_select;
++EXPORT_SYMBOL(atari_dont_touch_floppy_select);
++
+ int atari_rtc_year_offset;
+ 
+ /* local function prototypes */
+--- a/arch/m68k/atari/debug.c
++++ b/arch/m68k/atari/debug.c
+@@ -15,17 +15,23 @@
+ #include <linux/console.h>
+ #include <linux/init.h>
+ #include <linux/delay.h>
++#include <linux/module.h>
+ 
+ #include <asm/atarihw.h>
+ #include <asm/atariints.h>
+ 
+ /* Flag that Modem1 port is already initialized and used */
+ int atari_MFP_init_done;
++EXPORT_SYMBOL(atari_MFP_init_done);
++
+ /* Flag that Modem1 port is already initialized and used */
+ int atari_SCC_init_done;
++EXPORT_SYMBOL(atari_SCC_init_done);
++
+ /* Can be set somewhere, if a SCC master reset has already be done and should
+  * not be repeated; used by kgdb */
+ int atari_SCC_reset_done;
++EXPORT_SYMBOL(atari_SCC_reset_done);
+ 
+ static struct console atari_console_driver = {
+ 	.name	= "debug",
+--- a/arch/m68k/atari/stdma.c
++++ b/arch/m68k/atari/stdma.c
+@@ -35,6 +35,7 @@
+ #include <linux/init.h>
+ #include <linux/interrupt.h>
+ #include <linux/wait.h>
++#include <linux/module.h>
+ 
+ #include <asm/atari_stdma.h>
+ #include <asm/atariints.h>
+@@ -91,6 +92,7 @@ void stdma_lock(irq_handler_t handler, v
+ 	stdma_isr_data = data;
+ 	local_irq_restore(flags);
+ }
++EXPORT_SYMBOL(stdma_lock);
+ 
+ 
+ /*
+@@ -117,6 +119,7 @@ void stdma_release(void)
+ 
+ 	local_irq_restore(flags);
+ }
++EXPORT_SYMBOL(stdma_release);
+ 
+ 
+ /*
+@@ -134,6 +137,7 @@ int stdma_others_waiting(void)
+ {
+ 	return waitqueue_active(&stdma_wait);
+ }
++EXPORT_SYMBOL(stdma_others_waiting);
+ 
+ 
+ /*
+@@ -155,6 +159,7 @@ int stdma_islocked(void)
+ {
+ 	return stdma_locked;
+ }
++EXPORT_SYMBOL(stdma_islocked);
+ 
+ 
+ /*
+--- a/arch/m68k/atari/stram.c
++++ b/arch/m68k/atari/stram.c
+@@ -20,6 +20,7 @@
+ #include <linux/bootmem.h>
+ #include <linux/mount.h>
+ #include <linux/blkdev.h>
++#include <linux/module.h>
+ 
+ #include <asm/setup.h>
+ #include <asm/machdep.h>
+@@ -208,6 +209,7 @@ void *atari_stram_alloc(long size, const
+ 	}
+ 	return( addr );
+ }
++EXPORT_SYMBOL(atari_stram_alloc);
+ 
+ void atari_stram_free( void *addr )
+ 
+@@ -237,6 +239,7 @@ void atari_stram_free( void *addr )
+ 	printk( KERN_ERR "atari_stram_free: cannot free block at %p "
+ 			"(called from %p)\n", addr, __builtin_return_address(0) );
+ }
++EXPORT_SYMBOL(atari_stram_free);
+ 
+ 
+ /* ------------------------------------------------------------------------ */

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-hp300-ksyms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-hp300-ksyms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,35 @@
+Subject: m68k: kill arch/m68k/hp300/ksyms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+m68k: kill arch/m68k/hp300/ksyms.c
+
+It was empty.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/hp300/Makefile |    2 +-
+ arch/m68k/hp300/ksyms.c  |    9 ---------
+ 2 files changed, 1 insertion(+), 10 deletions(-)
+
+--- a/arch/m68k/hp300/Makefile
++++ b/arch/m68k/hp300/Makefile
+@@ -2,4 +2,4 @@
+ # Makefile for Linux arch/m68k/hp300 source directory
+ #
+ 
+-obj-y		:= ksyms.o config.o time.o reboot.o
++obj-y		:= config.o time.o reboot.o
+--- a/arch/m68k/hp300/ksyms.c
++++ /dev/null
+@@ -1,9 +0,0 @@
+-/*
+- *  linux/arch/m68k/hp300/ksyms.c
+- *
+- *  Copyright (C) 1998 Philip Blundell <philb at gnu.org>
+- *
+- *  This file contains the HP300-specific kernel symbols.  None yet. :-)
+- */
+-
+-#include <linux/module.h>

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mac-mac_ksyms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mac-mac_ksyms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,56 @@
+Subject: m68k: kill arch/m68k/mac/mac_ksyms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+m68k: kill arch/m68k/mac/mac_ksyms.c
+
+EXPORT_SYMBOL's belong to the actual code.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/mac/Makefile    |    2 +-
+ arch/m68k/mac/mac_ksyms.c |    8 --------
+ arch/m68k/mac/via.c       |    5 ++++-
+ 3 files changed, 5 insertions(+), 10 deletions(-)
+
+--- a/arch/m68k/mac/Makefile
++++ b/arch/m68k/mac/Makefile
+@@ -3,4 +3,4 @@
+ #
+ 
+ obj-y		:= config.o bootparse.o macints.o iop.o via.o oss.o psc.o \
+-			baboon.o macboing.o debug.o misc.o mac_ksyms.o
++			baboon.o macboing.o debug.o misc.o
+--- a/arch/m68k/mac/mac_ksyms.c
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#include <linux/module.h>
+-#include <asm/ptrace.h>
+-#include <asm/traps.h>
+-
+-/* Says whether we're using A/UX interrupts or not */
+-extern int via_alt_mapping;
+-
+-EXPORT_SYMBOL(via_alt_mapping);
+--- a/arch/m68k/mac/via.c
++++ b/arch/m68k/mac/via.c
+@@ -28,6 +28,7 @@
+ #include <linux/delay.h>
+ #include <linux/init.h>
+ #include <linux/ide.h>
++#include <linux/module.h>
+ 
+ #include <asm/bootinfo.h>
+ #include <asm/macintosh.h>
+@@ -41,7 +42,9 @@ volatile __u8 *via1, *via2;
+ /* See note in mac_via.h about how this is possibly not useful */
+ volatile long *via_memory_bogon=(long *)&via_memory_bogon;
+ #endif
+-int rbv_present, via_alt_mapping;
++int rbv_present;
++int via_alt_mapping;
++EXPORT_SYMBOL(via_alt_mapping);
+ __u8 rbv_clear;
+ 
+ /*

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mvme16x-mvme16x_ksyms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mvme16x-mvme16x_ksyms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,51 @@
+Subject: m68k: kill arch/m68k/mvme16x/mvme16x_ksyms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+m68k: kill arch/m68k/mvme16x/mvme16x_ksyms.c
+
+EXPORT_SYMBOL's belong to the actual code.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/mvme16x/Makefile        |    2 +-
+ arch/m68k/mvme16x/config.c        |    2 ++
+ arch/m68k/mvme16x/mvme16x_ksyms.c |    6 ------
+ 3 files changed, 3 insertions(+), 7 deletions(-)
+
+--- a/arch/m68k/mvme16x/Makefile
++++ b/arch/m68k/mvme16x/Makefile
+@@ -2,4 +2,4 @@
+ # Makefile for Linux arch/m68k/mvme16x source directory
+ #
+ 
+-obj-y		:= config.o rtc.o mvme16x_ksyms.o
++obj-y		:= config.o rtc.o
+--- a/arch/m68k/mvme16x/config.c
++++ b/arch/m68k/mvme16x/config.c
+@@ -25,6 +25,7 @@
+ #include <linux/genhd.h>
+ #include <linux/rtc.h>
+ #include <linux/interrupt.h>
++#include <linux/module.h>
+ 
+ #include <asm/bootinfo.h>
+ #include <asm/system.h>
+@@ -58,6 +59,7 @@ static irq_handler_t tick_handler;
+ 
+ 
+ unsigned short mvme16x_config;
++EXPORT_SYMBOL(mvme16x_config);
+ 
+ 
+ int mvme16x_parse_bootinfo(const struct bi_record *bi)
+--- a/arch/m68k/mvme16x/mvme16x_ksyms.c
++++ /dev/null
+@@ -1,6 +0,0 @@
+-#include <linux/module.h>
+-#include <linux/types.h>
+-#include <asm/ptrace.h>
+-#include <asm/mvme16xhw.h>
+-
+-EXPORT_SYMBOL(mvme16x_config);

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-add-nubus-card-definitions-and-a-typo-fix.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-add-nubus-card-definitions-and-a-typo-fix.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,28 @@
+Subject: mac68k: add nubus card definitions and a typo fix
+
+From: Finn Thain <fthain at telegraphics.com.au>
+
+Add some new card definitions and fix a typo (from Eugen Paiuc).
+
+Signed-off-by: Finn Thain <fthain at telegraphics.com.au>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ include/linux/nubus.h |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/include/linux/nubus.h
++++ b/include/linux/nubus.h
+@@ -132,10 +132,12 @@ enum nubus_drhw {
+ 	NUBUS_DRHW_RDIUS_DCGX     = 0x027C, /* Radius DirectColor/GX */
+ 	NUBUS_DRHW_RDIUS_PC8      = 0x0291, /* Radius PrecisionColor 8 */
+ 	NUBUS_DRHW_LAPIS_PCS8     = 0x0292, /* Lapis ProColorServer 8 */
+-	NUBUS_DRHW_RASTER_24LXI   = 0x02A0, /* RasterOps 8/24 XLi */
++	NUBUS_DRHW_RASTER_24XLI   = 0x02A0, /* RasterOps 8/24 XLi */
+ 	NUBUS_DRHW_RASTER_PBPGT   = 0x02A5, /* RasterOps PaintBoard Prism GT */
+ 	NUBUS_DRHW_EMACH_FSX      = 0x02AE, /* E-Machines Futura SX */
++	NUBUS_DRHW_RASTER_24XLTV  = 0x02B7, /* RasterOps 24XLTV */
+ 	NUBUS_DRHW_SMAC_THUND24   = 0x02CB, /* SuperMac Thunder/24 */
++	NUBUS_DRHW_SMAC_THUNDLGHT = 0x03D9, /* SuperMac ThunderLight */
+ 	NUBUS_DRHW_RDIUS_PC24XP   = 0x0406, /* Radius PrecisionColor 24Xp */
+ 	NUBUS_DRHW_RDIUS_PC24X    = 0x040A, /* Radius PrecisionColor 24X */
+ 	NUBUS_DRHW_RDIUS_PC8XJ    = 0x040B, /* Radius PrecisionColor 8XJ */

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-macii-adb-comment-correction.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-macii-adb-comment-correction.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,23 @@
+Subject: mac68k: macii adb comment correction
+
+From: Finn Thain <fthain at telegraphics.com.au>
+
+Corrects a mistake I made in a comment.
+
+Signed-off-by: Finn Thain <fthain at telegraphics.com.au>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ drivers/macintosh/via-macii.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/macintosh/via-macii.c
++++ b/drivers/macintosh/via-macii.c
+@@ -111,7 +111,7 @@ static enum macii_state {
+ static struct adb_request *current_req; /* first request struct in the queue */
+ static struct adb_request *last_req;     /* last request struct in the queue */
+ static unsigned char reply_buf[16];        /* storage for autopolled replies */
+-static unsigned char *reply_ptr;      /* next byte in req->data or reply_buf */
++static unsigned char *reply_ptr;     /* next byte in reply_buf or req->reply */
+ static int reading_reply;        /* store reply in reply_buf else req->reply */
+ static int data_index;      /* index of the next byte to send from req->data */
+ static int reply_len; /* number of bytes received in reply_buf or req->reply */

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-MAC_ADBKEYCODES.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-MAC_ADBKEYCODES.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,50 @@
+Subject: mac68k: remove dead MAC_ADBKEYCODES
+
+From: Stanislav Brabec <sbrabec at suse.cz>
+
+It seems, that current kernel source code contains no traces of
+MAC_ADBKEYCODES and no reference to keyboard_sends_linux_keycodes any
+more.
+
+Attached patch removes them from configuration files.
+
+Signed-off-by: Stanislav Brabec <sbrabec at suse.cz>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/Kconfig               |   14 --------------
+ arch/m68k/configs/mac_defconfig |    1 -
+ 2 files changed, 15 deletions(-)
+
+--- a/arch/m68k/Kconfig
++++ b/arch/m68k/Kconfig
+@@ -582,20 +582,6 @@ config MAC_HID
+ 	depends on INPUT_ADBHID
+ 	default y
+ 
+-config MAC_ADBKEYCODES
+-	bool "Support for ADB raw keycodes"
+-	depends on INPUT_ADBHID
+-	help
+-	  This provides support for sending raw ADB keycodes to console
+-	  devices.  This is the default up to 2.4.0, but in future this may be
+-	  phased out in favor of generic Linux keycodes.  If you say Y here,
+-	  you can dynamically switch via the
+-	  /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
+-	  sysctl and with the "keyboard_sends_linux_keycodes=" kernel
+-	  argument.
+-
+-	  If unsure, say Y here.
+-
+ config ADB_KEYBOARD
+ 	bool "Support for ADB keyboard (old driver)"
+ 	depends on MAC && !INPUT_ADBHID
+--- a/arch/m68k/configs/mac_defconfig
++++ b/arch/m68k/configs/mac_defconfig
+@@ -678,7 +678,6 @@ CONFIG_LOGO_MAC_CLUT224=y
+ #
+ CONFIG_MAC_SCC=y
+ CONFIG_MAC_HID=y
+-CONFIG_MAC_ADBKEYCODES=y
+ CONFIG_SERIAL_CONSOLE=y
+ 
+ #

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-code.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/mac68k-remove-dead-code.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,35 @@
+Subject: mac68k: remove dead code
+
+From: Finn Thain <fthain at telegraphics.com.au>
+
+Remove dead code.
+
+Signed-off-by: Finn Thain <fthain at telegraphics.com.au>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ arch/m68k/mac/config.c       |    2 --
+ include/asm-m68k/macintosh.h |    2 --
+ 2 files changed, 4 deletions(-)
+
+--- a/arch/m68k/mac/config.c
++++ b/arch/m68k/mac/config.c
+@@ -58,8 +58,6 @@ extern struct mem_info m68k_memory[NUM_M
+ 
+ extern struct mem_info m68k_ramdisk;
+ 
+-extern char m68k_command_line[CL_SIZE];
+-
+ void *mac_env;					/* Loaded by the boot asm */
+ 
+ /* The phys. video addr. - might be bogus on some machines */
+--- a/include/asm-m68k/macintosh.h
++++ b/include/asm-m68k/macintosh.h
+@@ -14,8 +14,6 @@ extern void mac_init_IRQ(void);
+ extern int mac_irq_pending(unsigned int);
+ extern void mac_identify(void);
+ extern void mac_report_hardware(void);
+-extern void mac_debugging_penguin(int);
+-extern void mac_boom(int);
+ 
+ /*
+  *	Floppy driver magic hook - probably shouldnt be here

Added: dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/nubus-kill-drivers-nubus-nubus_syms-c.diff
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/m68k/2.6.24/nubus-kill-drivers-nubus-nubus_syms-c.diff	Tue Jan  8 22:54:40 2008
@@ -0,0 +1,188 @@
+Subject: nubus: kill drivers/nubus/nubus_syms.c
+
+From: Adrian Bunk <bunk at kernel.org>
+
+nubus: kill drivers/nubus/nubus_syms.c
+
+EXPORT_SYMBOL's belong to the actual code.
+
+Signed-off-by: Adrian Bunk <bunk at kernel.org>
+Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
+---
+ drivers/nubus/Makefile     |    1 -
+ drivers/nubus/nubus.c      |   13 +++++++++++++
+ drivers/nubus/nubus_syms.c |   28 ----------------------------
+ drivers/nubus/proc.c       |    4 ++++
+ 4 files changed, 17 insertions(+), 29 deletions(-)
+
+--- a/drivers/nubus/Makefile
++++ b/drivers/nubus/Makefile
+@@ -4,5 +4,4 @@
+ 
+ obj-y   := nubus.o
+ 
+-obj-$(CONFIG_MODULES) += nubus_syms.o 
+ obj-$(CONFIG_PROC_FS) += proc.o
+--- a/drivers/nubus/nubus.c
++++ b/drivers/nubus/nubus.c
+@@ -14,6 +14,7 @@
+ #include <linux/errno.h>
+ #include <linux/init.h>
+ #include <linux/delay.h>
++#include <linux/module.h>
+ #include <asm/setup.h>
+ #include <asm/system.h>
+ #include <asm/page.h>
+@@ -186,6 +187,7 @@ void nubus_get_rsrc_mem(void *dest, cons
+ 		len--;
+ 	}
+ }
++EXPORT_SYMBOL(nubus_get_rsrc_mem);
+ 
+ void nubus_get_rsrc_str(void *dest, const struct nubus_dirent* dirent,
+ 			int len)
+@@ -200,6 +202,7 @@ void nubus_get_rsrc_str(void *dest, cons
+ 		len--;
+ 	}
+ }
++EXPORT_SYMBOL(nubus_get_rsrc_str);
+ 
+ int nubus_get_root_dir(const struct nubus_board* board,
+ 		       struct nubus_dir* dir)
+@@ -209,6 +212,7 @@ int nubus_get_root_dir(const struct nubu
+ 	dir->mask = board->lanes;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_get_root_dir);
+ 
+ /* This is a slyly renamed version of the above */
+ int nubus_get_func_dir(const struct nubus_dev* dev,
+@@ -219,6 +223,7 @@ int nubus_get_func_dir(const struct nubu
+ 	dir->mask = dev->board->lanes;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_get_func_dir);
+ 
+ int nubus_get_board_dir(const struct nubus_board* board,
+ 			struct nubus_dir* dir)
+@@ -237,6 +242,7 @@ int nubus_get_board_dir(const struct nub
+ 		return -1;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_get_board_dir);
+ 
+ int nubus_get_subdir(const struct nubus_dirent *ent,
+ 		     struct nubus_dir *dir)
+@@ -246,6 +252,7 @@ int nubus_get_subdir(const struct nubus_
+ 	dir->mask = ent->mask;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_get_subdir);
+ 
+ int nubus_readdir(struct nubus_dir *nd, struct nubus_dirent *ent)
+ {
+@@ -274,12 +281,14 @@ int nubus_readdir(struct nubus_dir *nd, 
+ 	ent->mask  = nd->mask;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_readdir);
+ 
+ int nubus_rewinddir(struct nubus_dir* dir)
+ {
+ 	dir->ptr = dir->base;
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_rewinddir);
+ 
+ /* Driver interface functions, more or less like in pci.c */
+ 
+@@ -303,6 +312,7 @@ nubus_find_device(unsigned short categor
+ 	}
+ 	return NULL;
+ }
++EXPORT_SYMBOL(nubus_find_device);
+ 
+ struct nubus_dev*
+ nubus_find_type(unsigned short category,
+@@ -320,6 +330,7 @@ nubus_find_type(unsigned short category,
+ 	}
+ 	return NULL;
+ }
++EXPORT_SYMBOL(nubus_find_type);
+ 
+ struct nubus_dev*
+ nubus_find_slot(unsigned int slot,
+@@ -335,6 +346,7 @@ nubus_find_slot(unsigned int slot,
+ 	}
+ 	return NULL;
+ }
++EXPORT_SYMBOL(nubus_find_slot);
+ 
+ int
+ nubus_find_rsrc(struct nubus_dir* dir, unsigned char rsrc_type,
+@@ -346,6 +358,7 @@ nubus_find_rsrc(struct nubus_dir* dir, u
+ 	}	
+ 	return -1;
+ }
++EXPORT_SYMBOL(nubus_find_rsrc);
+ 
+ /* Initialization functions - decide which slots contain stuff worth
+    looking at, and print out lots and lots of information from the
+--- a/drivers/nubus/nubus_syms.c
++++ /dev/null
+@@ -1,28 +0,0 @@
+-/* Exported symbols for NuBus services
+-
+-   (c) 1999 David Huggins-Daines <dhd at debian.org> */
+-
+-#include <linux/module.h>
+-#include <linux/types.h>
+-#include <linux/nubus.h>
+-
+-#ifdef CONFIG_PROC_FS
+-EXPORT_SYMBOL(nubus_proc_attach_device);
+-EXPORT_SYMBOL(nubus_proc_detach_device);
+-#endif
+-
+-MODULE_LICENSE("GPL");
+-
+-EXPORT_SYMBOL(nubus_find_device);
+-EXPORT_SYMBOL(nubus_find_type);
+-EXPORT_SYMBOL(nubus_find_slot);
+-EXPORT_SYMBOL(nubus_get_root_dir);
+-EXPORT_SYMBOL(nubus_get_board_dir);
+-EXPORT_SYMBOL(nubus_get_func_dir);
+-EXPORT_SYMBOL(nubus_readdir);
+-EXPORT_SYMBOL(nubus_find_rsrc);
+-EXPORT_SYMBOL(nubus_rewinddir);
+-EXPORT_SYMBOL(nubus_get_subdir);
+-EXPORT_SYMBOL(nubus_get_rsrc_mem);
+-EXPORT_SYMBOL(nubus_get_rsrc_str);
+-
+--- a/drivers/nubus/proc.c
++++ b/drivers/nubus/proc.c
+@@ -22,6 +22,8 @@
+ #include <linux/nubus.h>
+ #include <linux/proc_fs.h>
+ #include <linux/init.h>
++#include <linux/module.h>
++
+ #include <asm/uaccess.h>
+ #include <asm/byteorder.h>
+ 
+@@ -140,6 +142,7 @@ int nubus_proc_attach_device(struct nubu
+ 
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_proc_attach_device);
+ 
+ /* FIXME: this is certainly broken! */
+ int nubus_proc_detach_device(struct nubus_dev *dev)
+@@ -154,6 +157,7 @@ int nubus_proc_detach_device(struct nubu
+ 	}
+ 	return 0;
+ }
++EXPORT_SYMBOL(nubus_proc_detach_device);
+ 
+ void __init proc_bus_nubus_add_devices(void)
+ {

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	(original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1-extra	Tue Jan  8 22:54:40 2008
@@ -1,2 +1,22 @@
 + features/all/vserver/vs2.2.0-rc5.patch *_vserver *_xen-vserver
 + features/all/vserver/bindmount-dev.patch *_vserver *_xen-vserver
++ bugfix/m68k/2.6.24/m68k-cc-cross-prefix.diff
++ bugfix/m68k/2.6.24/m68k-initrd-fix.diff
++ bugfix/m68k/2.6.24/m68k-ARRAY_SIZE-cleanup.diff
++ bugfix/m68k/2.6.24/dio-ARRAY_SIZE-cleanup.diff
++ bugfix/m68k/2.6.24/atari-hades-pci-balance-iomap-and-iounmap.diff
++ bugfix/m68k/2.6.24/nubus-kill-drivers-nubus-nubus_syms-c.diff
++ bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mac-mac_ksyms-c.diff
++ bugfix/m68k/2.6.24/m68k-kill-arch-m68k-hp300-ksyms-c.diff
++ bugfix/m68k/2.6.24/m68k-kill-arch-m68k-amiga-amiga_ksyms-c.diff
++ bugfix/m68k/2.6.24/m68k-kill-arch-m68k-atari-atari_ksyms-c.diff
++ bugfix/m68k/2.6.24/m68k-kill-arch-m68k-mvme16x-mvme16x_ksyms-c.diff
++ bugfix/m68k/2.6.24/mac68k-macii-adb-comment-correction.diff
++ bugfix/m68k/2.6.24/mac68k-remove-dead-code.diff
++ bugfix/m68k/2.6.24/mac68k-add-nubus-card-definitions-and-a-typo-fix.diff
++ bugfix/m68k/2.6.24/mac68k-remove-dead-MAC_ADBKEYCODES.diff
++ bugfix/m68k/2.6.24/633-atari_scc.diff
++ bugfix/m68k/2.6.24/130-adbraw.diff
++ bugfix/m68k/2.6.24/133-arch.diff
++ bugfix/m68k/2.6.24/134-atari-fat.diff
++ bugfix/m68k/2.6.24/141-ide.diff



More information about the Kernel-svn-changes mailing list