m68k: early parameter support

Add early parameter support and convert current users to it.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c
index b10e7ad..e40e5dc 100644
--- a/arch/m68k/atari/config.c
+++ b/arch/m68k/atari/config.c
@@ -69,9 +69,6 @@
 extern int atari_mste_set_clock_mmss (unsigned long);
 extern int atari_tt_set_clock_mmss (unsigned long);
 
-/* atari specific debug functions (in debug.c) */
-extern void atari_debug_init(void);
-
 
 /* ++roman: This is a more elaborate test for an SCC chip, since the plain
  * Medusa board generates DTACK at the SCC's standard addresses, but a SCC
@@ -137,15 +134,18 @@
 
 
 /* Parse the Atari-specific switches= option. */
-void __init atari_switches_setup(const char *str, unsigned len)
+static int __init atari_switches_setup(char *str)
 {
-	char switches[len+1];
+	char switches[strlen(str) + 1];
 	char *p;
 	int ovsc_shift;
 	char *args = switches;
 
+	if (!MACH_IS_ATARI)
+		return 0;
+
 	/* copy string to local array, strsep works destructively... */
-	strlcpy(switches, str, sizeof(switches));
+	strcpy(switches, str);
 	atari_switches = 0;
 
 	/* parse the options */
@@ -170,8 +170,11 @@
 			atari_switches |= ATARI_SWITCH_SND7 << ovsc_shift;
 		}
 	}
+	return 0;
 }
 
+early_param("switches", atari_switches_setup);
+
 
     /*
      *  Setup the Atari configuration info
@@ -183,8 +186,6 @@
 
 	memset(&atari_hw_present, 0, sizeof(atari_hw_present));
 
-	atari_debug_init();
-
 	/* Change size of I/O space from 64KB to 4GB. */
 	ioport_resource.end  = 0xFFFFFFFF;
 
diff --git a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c
index 66983fe..fbeed8c 100644
--- a/arch/m68k/atari/debug.c
+++ b/arch/m68k/atari/debug.c
@@ -19,8 +19,6 @@
 #include <asm/atarihw.h>
 #include <asm/atariints.h>
 
-extern char m68k_debug_device[];
-
 /* Flag that Modem1 port is already initialized and used */
 int atari_MFP_init_done;
 /* Flag that Modem1 port is already initialized and used */
@@ -305,26 +303,28 @@
 		     ACIA_RHTID : ACIA_RLTID);
 }
 
-void __init atari_debug_init(void)
+static int __init atari_debug_setup(char *arg)
 {
-	if (!strcmp(m68k_debug_device, "ser")) {
-		/* defaults to ser2 for a Falcon and ser1 otherwise */
-		strcpy(m68k_debug_device, MACH_IS_FALCON ? "ser2" : "ser1");
-	}
+	if (!MACH_IS_ATARI)
+		return 0;
 
-	if (!strcmp(m68k_debug_device, "ser1")) {
+	if (!strcmp(arg, "ser"))
+		/* defaults to ser2 for a Falcon and ser1 otherwise */
+		arg = MACH_IS_FALCON ? "ser2" : "ser1";
+
+	if (!strcmp(arg, "ser1")) {
 		/* ST-MFP Modem1 serial port */
 		atari_init_mfp_port(B9600|CS8);
 		atari_console_driver.write = atari_mfp_console_write;
-	} else if (!strcmp(m68k_debug_device, "ser2")) {
+	} else if (!strcmp(arg, "ser2")) {
 		/* SCC Modem2 serial port */
 		atari_init_scc_port(B9600|CS8);
 		atari_console_driver.write = atari_scc_console_write;
-	} else if (!strcmp(m68k_debug_device, "midi")) {
+	} else if (!strcmp(arg, "midi")) {
 		/* MIDI port */
 		atari_init_midi_port(B9600|CS8);
 		atari_console_driver.write = atari_midi_console_write;
-	} else if (!strcmp(m68k_debug_device, "par")) {
+	} else if (!strcmp(arg, "par")) {
 		/* parallel printer */
 		atari_turnoff_irq(IRQ_MFP_BUSY); /* avoid ints */
 		sound_ym.rd_data_reg_sel = 7;	/* select mixer control */
@@ -337,4 +337,8 @@
 	}
 	if (atari_console_driver.write)
 		register_console(&atari_console_driver);
+
+	return 0;
 }
+
+early_param("debug", atari_debug_setup);