Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6713b40 authored by Roman Zippel's avatar Roman Zippel Committed by Linus Torvalds
Browse files

m68k: early parameter support



Add early parameter support and convert current users to it.

Signed-off-by: default avatarRoman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f8744bc9
Loading
Loading
Loading
Loading
+22 −19
Original line number Diff line number Diff line
@@ -79,8 +79,6 @@ static char *amiga_models[] __initdata = {

static char amiga_model_name[13] = "Amiga ";

extern char m68k_debug_device[];

static void amiga_sched_init(irq_handler_t handler);
/* amiga specific irq functions */
extern void amiga_init_IRQ(void);
@@ -95,12 +93,10 @@ static unsigned int amiga_get_ss(void);
extern void amiga_mksound(unsigned int count, unsigned int ticks);
static void amiga_reset(void);
extern void amiga_init_sound(void);
static void amiga_savekmsg_init(void);
static void amiga_mem_console_write(struct console *co, const char *b,
				    unsigned int count);
void amiga_serial_console_write(struct console *co, const char *s,
				unsigned int count);
static void amiga_debug_init(void);
#ifdef CONFIG_HEARTBEAT
static void amiga_heartbeat(int on);
#endif
@@ -370,7 +366,6 @@ void __init config_amiga(void)
{
	int i;

	amiga_debug_init();
	amiga_identify();

	/* Yuk, we don't have PCI memory */
@@ -458,17 +453,6 @@ void __init config_amiga(void)
	/* initialize chipram allocator */
	amiga_chip_init();

	/* debugging using chipram */
	if (!strcmp(m68k_debug_device, "mem")) {
		if (!AMIGAHW_PRESENT(CHIP_RAM))
			printk("Warning: no chipram present for debugging\n");
		else {
			amiga_savekmsg_init();
			amiga_console_driver.write = amiga_mem_console_write;
			register_console(&amiga_console_driver);
		}
	}

	/* our beloved beeper */
	if (AMIGAHW_PRESENT(AMI_AUDIO))
		amiga_init_sound();
@@ -787,17 +771,33 @@ static void amiga_mem_console_write(struct console *co, const char *s,
	}
}

static void amiga_savekmsg_init(void)
static int __init amiga_savekmsg_setup(char *arg)
{
	static struct resource debug_res = { .name = "Debug" };

	if (!MACH_IS_AMIGA || strcmp(arg, "mem"))
		goto done;

	if (!AMIGAHW_PRESENT(CHIP_RAM)) {
		printk("Warning: no chipram present for debugging\n");
		goto done;
	}

	savekmsg = amiga_chip_alloc_res(SAVEKMSG_MAXMEM, &debug_res);
	savekmsg->magic1 = SAVEKMSG_MAGIC1;
	savekmsg->magic2 = SAVEKMSG_MAGIC2;
	savekmsg->magicptr = ZTWO_PADDR(savekmsg);
	savekmsg->size = 0;

	amiga_console_driver.write = amiga_mem_console_write;
	register_console(&amiga_console_driver);

done:
	return 0;
}

early_param("debug", amiga_savekmsg_setup);

static void amiga_serial_putc(char c)
{
	amiga_custom.serdat = (unsigned char)c | 0x100;
@@ -872,15 +872,18 @@ void amiga_serial_gets(struct console *co, char *s, int len)
}
#endif

static void __init amiga_debug_init(void)
static int __init amiga_debug_setup(char *arg)
{
	if (!strcmp(m68k_debug_device, "ser" )) {
	if (MACH_IS_AMIGA && !strcmp(arg, "ser")) {
		/* no initialization required (?) */
		amiga_console_driver.write = amiga_serial_console_write;
		register_console(&amiga_console_driver);
	}
	return 0;
}

early_param("debug", amiga_debug_setup);

#ifdef CONFIG_HEARTBEAT
static void amiga_heartbeat(int on)
{
+9 −8
Original line number Diff line number Diff line
@@ -69,9 +69,6 @@ extern int atari_tt_hwclk (int, struct rtc_time *);
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 @@ int __init atari_parse_bootinfo(const struct bi_record *record)


/* 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 @@ void __init atari_switches_setup(const char *str, unsigned len)
			atari_switches |= ATARI_SWITCH_SND7 << ovsc_shift;
		}
	}
	return 0;
}

early_param("switches", atari_switches_setup);


    /*
     *  Setup the Atari configuration info
@@ -183,8 +186,6 @@ void __init config_atari(void)

	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;

+14 −10
Original line number Diff line number Diff line
@@ -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 @@ void atari_init_midi_port(int cflag)
		     ACIA_RHTID : ACIA_RLTID);
}

void __init atari_debug_init(void)
static int __init atari_debug_setup(char *arg)
{
	if (!strcmp(m68k_debug_device, "ser")) {
	if (!MACH_IS_ATARI)
		return 0;

	if (!strcmp(arg, "ser"))
		/* defaults to ser2 for a Falcon and ser1 otherwise */
		strcpy(m68k_debug_device, MACH_IS_FALCON ? "ser2" : "ser1");
	}
		arg = MACH_IS_FALCON ? "ser2" : "ser1";

	if (!strcmp(m68k_debug_device, "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 @@ void __init atari_debug_init(void)
	}
	if (atari_console_driver.write)
		register_console(&atari_console_driver);

	return 0;
}

early_param("debug", atari_debug_setup);
+1 −38
Original line number Diff line number Diff line
@@ -71,9 +71,6 @@ static struct mem_info m68k_ramdisk;

static char m68k_command_line[CL_SIZE];

char m68k_debug_device[6] = "";
EXPORT_SYMBOL(m68k_debug_device);

void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL;
/* machine dependent irq functions */
void (*mach_init_IRQ) (void) __initdata = NULL;
@@ -215,7 +212,6 @@ void __init setup_arch(char **cmdline_p)
	unsigned long endmem, startmem;
#endif
	int i;
	char *p, *q;

	/* The bootinfo is located right after the kernel bss */
	m68k_parse_bootinfo((const struct bi_record *)&_end);
@@ -258,40 +254,7 @@ void __init setup_arch(char **cmdline_p)
	*cmdline_p = m68k_command_line;
	memcpy(boot_command_line, *cmdline_p, CL_SIZE);

	/* Parse the command line for arch-specific options.
	 * For the m68k, this is currently only "debug=xxx" to enable printing
	 * certain kernel messages to some machine-specific device.
	 */
	for (p = *cmdline_p; p && *p;) {
		i = 0;
		if (!strncmp(p, "debug=", 6)) {
			strlcpy(m68k_debug_device, p+6, sizeof(m68k_debug_device));
			q = strchr(m68k_debug_device, ' ');
			if (q)
				*q = 0;
			i = 1;
		}
#ifdef CONFIG_ATARI
		/* This option must be parsed very early */
		if (!strncmp(p, "switches=", 9)) {
			extern void atari_switches_setup(const char *, int);
			q = strchr(p + 9, ' ');
			atari_switches_setup(p + 9, q ? (q - (p + 9)) : strlen(p + 9));
			i = 1;
		}
#endif

		if (i) {
			/* option processed, delete it */
			if ((q = strchr(p, ' ')))
				strcpy(p, q + 1);
			else
				*p = 0;
		} else {
			if ((p = strchr(p, ' ')))
				++p;
		}
	}
	parse_early_param();

#ifdef CONFIG_DUMMY_CONSOLE
	conswitchp = &dummy_con;
+0 −8
Original line number Diff line number Diff line
@@ -82,10 +82,6 @@ extern void mac_mksound(unsigned int, unsigned int);

extern void nubus_sweep_video(void);

/* Mac specific debug functions (in debug.c) */
extern void mac_debug_init(void);
extern void mac_debugging_long(int, long);

static void mac_get_model(char *str);

static void mac_sched_init(irq_handler_t vector)
@@ -180,9 +176,6 @@ void __init config_mac(void)
	mach_halt = mac_poweroff;
	mach_power_off = mac_poweroff;
	mach_max_dma_address = 0xffffffff;
#if 0
	mach_debug_init	= mac_debug_init;
#endif
#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE)
	mach_beep = mac_mksound;
#endif
@@ -802,7 +795,6 @@ void mac_identify(void)
	/* the serial ports set to "Faster" mode in MacOS. */

	iop_preinit();
	mac_debug_init();

	printk(KERN_INFO "Detected Macintosh model: %d \n", model);

Loading