Re: [RFC 24/24] m68k: Dispatch nvram_ops calls to Atari or Mac functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Finn,

On Sun, May 31, 2015 at 3:01 AM, Finn Thain <fthain@xxxxxxxxxxxxxxxxxxx> wrote:
A multi-platform kernel binary needs to decide at run-time how to dispatch
the arch_nvram_ops calls. Add platform-independent arch_nvram_ops, for use
when multiple platform-specific NVRAM ops implementations are needed.

Thanks for your series!

Signed-off-by: Finn Thain <fthain@xxxxxxxxxxxxxxxxxxx>

---
 arch/m68k/Kconfig                 |    2
 arch/m68k/atari/nvram.c           |   22 +++++----
 arch/m68k/include/asm/atarihw.h   |    6 ++
 arch/m68k/include/asm/macintosh.h |    4 +
 arch/m68k/kernel/setup_mm.c       |   89 ++++++++++++++++++++++++++++++++++++++
 arch/m68k/mac/misc.c              |    8 ++-
 6 files changed, 117 insertions(+), 14 deletions(-)

Index: linux/arch/m68k/atari/nvram.c
===================================================================
--- linux.orig/arch/m68k/atari/nvram.c  2015-05-31 11:01:21.000000000 +1000
+++ linux/arch/m68k/atari/nvram.c       2015-05-31 11:01:29.000000000 +1000
@@ -73,7 +73,7 @@ static void __nvram_set_checksum(void)

+#ifndef CONFIG_MAC
 const struct nvram_ops arch_nvram_ops = {
-       .read           = nvram_read,
-       .write          = nvram_write,
-       .get_size       = nvram_get_size,
-       .set_checksum   = nvram_set_checksum,
-       .initialize     = nvram_initialize,
+       .read           = atari_nvram_read,
+       .write          = atari_nvram_write,
+       .get_size       = atari_nvram_get_size,
+       .set_checksum   = atari_nvram_set_checksum,
+       .initialize     = atari_nvram_initialize,
 };
 EXPORT_SYMBOL(arch_nvram_ops);
+#endif

IMHO, the #ifdef is ugly.

 #ifdef CONFIG_PROC_FS
 static struct {
Index: linux/arch/m68k/mac/misc.c
===================================================================
--- linux.orig/arch/m68k/mac/misc.c     2015-05-31 11:01:28.000000000 +1000
+++ linux/arch/m68k/mac/misc.c  2015-05-31 11:01:29.000000000 +1000
@@ -489,7 +489,7 @@ void pmu_shutdown(void)

+#ifndef CONFIG_ATARI
 const struct nvram_ops arch_nvram_ops = {
        .read_byte      = mac_pram_read_byte,
        .write_byte     = mac_pram_write_byte,
        .get_size       = mac_pram_get_size,
 };
 EXPORT_SYMBOL(arch_nvram_ops);
+#endif
 #endif /* CONFIG_NVRAM */

Same here.

Index: linux/arch/m68k/kernel/setup_mm.c
===================================================================
--- linux.orig/arch/m68k/kernel/setup_mm.c      2015-05-31 11:00:59.000000000 +1000
+++ linux/arch/m68k/kernel/setup_mm.c   2015-05-31 11:01:29.000000000 +1000

@@ -568,3 +572,88 @@ static int __init adb_probe_sync_enable

 __setup("adb_sync", adb_probe_sync_enable);
 #endif /* CONFIG_ADB */
+
+#if IS_ENABLED(CONFIG_NVRAM) && defined(CONFIG_ATARI) && defined(CONFIG_MAC)

Likewise.

+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) {
+               ssize_t size = mac_pram_get_size();
+               char *p = buf;
+               loff_t i;
+
+               for (i = *ppos; count > 0 && i < size; --count, ++i, ++p)
+                       *p = mac_pram_read_byte(i);
+
+               *ppos = i;
+               return p - buf;
+       }
+       return -EINVAL;

Isn't this handled already by the nvram core, based on the available operations
in nvram_ops? Same for the other nvram abstractions in this file.

+const struct nvram_ops arch_nvram_ops = {
+       .read           = m68k_nvram_read,
+       .write          = m68k_nvram_write,
+       .read_byte      = m68k_nvram_read_byte,
+       .write_byte     = m68k_nvram_write_byte,
+       .get_size       = m68k_nvram_get_size,
+       .set_checksum   = m68k_nvram_set_checksum,
+       .initialize     = m68k_nvram_initialize,
+};
+EXPORT_SYMBOL(arch_nvram_ops);

Can't you just fill in the mach specific pointers in the generic structure,
and be done with it?

If you handle this right, I think you can do without the temporary "def_bool
(ATARI && !MAC) || (MAC && !ATARI)" in "[RFC 22/24] m68k/mac: Adopt nvram
module", too.

Thanks!

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux