mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
m68k: Dispatch nvram_ops calls to Atari or Mac functions
A multi-platform kernel binary has to decide at run-time how to dispatch the arch_nvram_ops calls. Add a platform-independent arch_nvram_ops struct for this, to replace the atari-specific one. Enable CONFIG_HAVE_ARCH_NVRAM_OPS for Macs. Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Tested-by: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
458c77f3de
commit
d3b41b6bb4
6 changed files with 108 additions and 17 deletions
|
@ -24,6 +24,7 @@
|
|||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/nvram.h>
|
||||
#include <linux/initrd.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
|
@ -37,13 +38,14 @@
|
|||
#ifdef CONFIG_AMIGA
|
||||
#include <asm/amigahw.h>
|
||||
#endif
|
||||
#ifdef CONFIG_ATARI
|
||||
#include <asm/atarihw.h>
|
||||
#ifdef CONFIG_ATARI
|
||||
#include <asm/atari_stram.h>
|
||||
#endif
|
||||
#ifdef CONFIG_SUN3X
|
||||
#include <asm/dvma.h>
|
||||
#endif
|
||||
#include <asm/macintosh.h>
|
||||
#include <asm/natfeat.h>
|
||||
|
||||
#if !FPSTATESIZE || !NR_IRQS
|
||||
|
@ -547,3 +549,81 @@ static int __init adb_probe_sync_enable (char *str) {
|
|||
|
||||
__setup("adb_sync", adb_probe_sync_enable);
|
||||
#endif /* CONFIG_ADB */
|
||||
|
||||
#if IS_ENABLED(CONFIG_NVRAM)
|
||||
#ifdef CONFIG_MAC
|
||||
static unsigned char m68k_nvram_read_byte(int addr)
|
||||
{
|
||||
if (MACH_IS_MAC)
|
||||
return mac_pram_read_byte(addr);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
static void m68k_nvram_write_byte(unsigned char val, int addr)
|
||||
{
|
||||
if (MACH_IS_MAC)
|
||||
mac_pram_write_byte(val, addr);
|
||||
}
|
||||
#endif /* CONFIG_MAC */
|
||||
|
||||
#ifdef CONFIG_ATARI
|
||||
static ssize_t m68k_nvram_read(char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
if (MACH_IS_ATARI)
|
||||
return atari_nvram_read(buf, count, ppos);
|
||||
else if (MACH_IS_MAC)
|
||||
return nvram_read_bytes(buf, count, ppos);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static ssize_t m68k_nvram_write(char *buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
if (MACH_IS_ATARI)
|
||||
return atari_nvram_write(buf, count, ppos);
|
||||
else if (MACH_IS_MAC)
|
||||
return nvram_write_bytes(buf, count, ppos);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static long m68k_nvram_set_checksum(void)
|
||||
{
|
||||
if (MACH_IS_ATARI)
|
||||
return atari_nvram_set_checksum();
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static long m68k_nvram_initialize(void)
|
||||
{
|
||||
if (MACH_IS_ATARI)
|
||||
return atari_nvram_initialize();
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif /* CONFIG_ATARI */
|
||||
|
||||
static ssize_t m68k_nvram_get_size(void)
|
||||
{
|
||||
if (MACH_IS_ATARI)
|
||||
return atari_nvram_get_size();
|
||||
else if (MACH_IS_MAC)
|
||||
return mac_pram_get_size();
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Atari device drivers call .read (to get checksum validation) whereas
|
||||
* Mac and PowerMac device drivers just use .read_byte.
|
||||
*/
|
||||
const struct nvram_ops arch_nvram_ops = {
|
||||
#ifdef CONFIG_MAC
|
||||
.read_byte = m68k_nvram_read_byte,
|
||||
.write_byte = m68k_nvram_write_byte,
|
||||
#endif
|
||||
#ifdef CONFIG_ATARI
|
||||
.read = m68k_nvram_read,
|
||||
.write = m68k_nvram_write,
|
||||
.set_checksum = m68k_nvram_set_checksum,
|
||||
.initialize = m68k_nvram_initialize,
|
||||
#endif
|
||||
.get_size = m68k_nvram_get_size,
|
||||
};
|
||||
EXPORT_SYMBOL(arch_nvram_ops);
|
||||
#endif /* CONFIG_NVRAM */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue