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

Commit 65cd577d authored by Petr Stehlik's avatar Petr Stehlik Committed by Geert Uytterhoeven
Browse files

m68k/atari: Initial ARAnyM support

Add improved support for running under the ARAnyM emulator
(Atari Running on Any Machine - http://aranym.org/

).

[michael, geert: Cleanups and updates]

Signed-off-by: default avatarPetr Stehlik <pstehlik@sophics.cz>
Signed-off-by: default avatarMichael Schmitz <schmitz@debian.org>
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent 93ff9542
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -240,6 +240,13 @@ config SUN3

	  If you don't want to compile a kernel exclusively for a Sun 3, say N.

config NATFEAT
	bool "ARAnyM emulator support"
	depends on ATARI
	help
	  This option enables support for ARAnyM native features, such as
	  access to a disk image as /dev/hda.

comment "Processor type"

config M68020
+1 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ core-$(CONFIG_MVME16x) += arch/m68k/mvme16x/
core-$(CONFIG_BVME6000)		+= arch/m68k/bvme6000/
core-$(CONFIG_SUN3X)		+= arch/m68k/sun3x/	arch/m68k/sun3/
core-$(CONFIG_SUN3)		+= arch/m68k/sun3/	arch/m68k/sun3/prom/
core-$(CONFIG_NATFEAT)		+= arch/m68k/emu/
core-$(CONFIG_M68040)		+= arch/m68k/fpsp040/
core-$(CONFIG_M68060)		+= arch/m68k/ifpsp060/
core-$(CONFIG_M68KFPU_EMU)	+= arch/m68k/math-emu/

arch/m68k/emu/Makefile

0 → 100644
+5 −0
Original line number Diff line number Diff line
#
# Makefile for Linux arch/m68k/emu source directory
#

obj-y			+= natfeat.o
+116 −0
Original line number Diff line number Diff line
/*
 * natfeat.c - ARAnyM hardware support via Native Features (natfeats)
 *
 * Copyright (c) 2005 Petr Stehlik of ARAnyM dev team
 *
 * Reworked for Linux by Roman Zippel <zippel@linux-m68k.org>
 *
 * This software may be used and distributed according to the terms of
 * the GNU General Public License (GPL), incorporated herein by reference.
 */

#include <linux/types.h>
#include <linux/console.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/io.h>
#include <asm/machdep.h>
#include <asm/natfeat.h>

asm("\n"
"	.global nf_get_id,nf_call\n"
"nf_get_id:\n"
"	.short	0x7300\n"
"	rts\n"
"nf_call:\n"
"	.short	0x7301\n"
"	rts\n"
"1:	moveq.l	#0,%d0\n"
"	rts\n"
"	.section __ex_table,\"a\"\n"
"	.long	nf_get_id,1b\n"
"	.long	nf_call,1b\n"
"	.previous");
EXPORT_SYMBOL_GPL(nf_get_id);
EXPORT_SYMBOL_GPL(nf_call);

static int stderr_id;

static void nf_write(struct console *co, const char *str, unsigned int count)
{
	char buf[68];

	buf[64] = 0;
	while (count > 64) {
		memcpy(buf, str, 64);
		nf_call(stderr_id, buf);
		str += 64;
		count -= 64;
	}
	memcpy(buf, str, count);
	buf[count] = 0;
	nf_call(stderr_id, buf);
}

void nfprint(const char *fmt, ...)
{
	static char buf[256];
	va_list ap;
	int n;

	va_start(ap, fmt);
	n = vsnprintf(buf, 256, fmt, ap);
	nf_call(nf_get_id("NF_STDERR"), buf);
	va_end(ap);
}

static struct console nf_console_driver = {
	.name	= "debug",
	.write	= nf_write,
	.flags	= CON_PRINTBUFFER,
	.index	= -1,
};

static int __init nf_debug_setup(char *arg)
{
	if (strcmp(arg, "emu"))
		return 0;

	stderr_id = nf_get_id("NF_STDERR");
	if (stderr_id)
		register_console(&nf_console_driver);
	return 0;
}

early_param("debug", nf_debug_setup);

static void nf_poweroff(void)
{
	long id = nf_get_id("NF_SHUTDOWN");

	if (id)
		nf_call(id);
}

void nf_init(void)
{
	unsigned long id, version;
	char buf[256];

	id = nf_get_id("NF_VERSION");
	if (!id)
		return;
	version = nf_call(id);

	id = nf_get_id("NF_NAME");
	if (!id)
		return;
	nf_call(id, buf, 256);
	buf[255] = 0;

	pr_info("NatFeats found (%s, %lu.%lu)\n", buf, version >> 16,
		version & 0xffff);

	mach_power_off = nf_poweroff;
}
+22 −0
Original line number Diff line number Diff line
/*
 * ARAnyM hardware support via Native Features (natfeats)
 *
 * Copyright (c) 2005 Petr Stehlik of ARAnyM dev team
 *
 * This software may be used and distributed according to the terms of
 * the GNU General Public License (GPL), incorporated herein by reference.
 */

#ifndef _NATFEAT_H
#define _NATFEAT_H

long nf_get_id(const char *feature_name);
long nf_call(long id, ...);

void nf_init(void);
void nf_shutdown(void);

void nfprint(const char *fmt, ...)
	__attribute__ ((format (printf, 1, 2)));

# endif /* _NATFEAT_H */
Loading