Le 2 nov. 08 à 09:54, Geert Uytterhoeven a écrit :
On Sat, 1 Nov 2008, Laurent@xxxxxxxxxxxx wrote:
From: Laurent Vivier <Laurent@xxxxxxxxxxxx>
This patch is a port of the driver I wrote for kernel 2.2.
Please run scripts/checkpatch.pl on your patch and fix the errors/
warnings.
I promise, next time, I'll do.
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/arch/m68k/mac/swim.c 2008-11-01 06:14:39.000000000
+0100
@@ -0,0 +1,111 @@
+/*
+ * Driver for SWIM (Sander. Woz Integrated Machine) floppy
controller
+ *
+ * Copyright (C) 2004,2008 Laurent Vivier <Laurent@xxxxxxxxxxxx>
+ *
+ * based on netBSD IWM driver (c) 1997, 1998 Hauke Fath.
+ * based on Alastair Bridgewater SWIM analysis, 2001
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * 2004-09-02 (lv) - Initial implementation
+ * 2008-10-30 (lv) - Port to kernel 2.6
+ */
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/init.h>
+#include <linux/module.h>
+
+#include <asm/macintosh.h>
+#include <asm/mac_via.h>
+
+volatile __u8 *SWIMBase;
+EXPORT_SYMBOL(SWIMBase);
+
+#define writePhase *(SWIMBase + 0x0800)
+#define readPhase *(SWIMBase + 0x1800)
These two definitions are not used in this file?
I remove them
+/*
+ * According to IWM netBSD driver, there are four kinds of SWIM:
+ *
+ * - QUADRA, QUADRA2, P580 -> SWIM base address is VIA1 + 0x1E000;
+ * - II, PB, LC -> SWIM base address is VIA1 + 0x16000;
+ * - IIfx, Q900, Q950 -> managed by IOP driver
+ * - AV -> not managed
+ *
+ */
+
+void __init swim_init(void)
+{
+ switch(macintosh_config->ident)
+ {
+ case MAC_MODEL_Q700:
+ case MAC_MODEL_Q800:
+ case MAC_MODEL_Q650:
+ case MAC_MODEL_Q605:
+ case MAC_MODEL_Q605_ACC:
+ case MAC_MODEL_Q610:
+ case MAC_MODEL_Q630:
+ case MAC_MODEL_P475:
+ case MAC_MODEL_P475F:
+ case MAC_MODEL_P575:
+ case MAC_MODEL_P588:
+ SWIMBase = (__u8*)(VIA1_BASE + 0x1E000);
+ break;
+ case MAC_MODEL_II:
+ case MAC_MODEL_IIX:
+ case MAC_MODEL_IICX:
+ case MAC_MODEL_SE30:
+ case MAC_MODEL_PB140:
+ case MAC_MODEL_PB145:
+ case MAC_MODEL_PB160:
+ case MAC_MODEL_PB165:
+ case MAC_MODEL_PB165C:
+ case MAC_MODEL_PB170:
+ case MAC_MODEL_PB180:
+ case MAC_MODEL_PB180C:
+ case MAC_MODEL_PB190:
+ case MAC_MODEL_PB520:
+ case MAC_MODEL_PB150:
+ case MAC_MODEL_PB210:
+ case MAC_MODEL_PB230:
+ case MAC_MODEL_PB250:
+ case MAC_MODEL_PB270C:
+ case MAC_MODEL_PB280:
+ case MAC_MODEL_PB280C:
+ case MAC_MODEL_IICI:
+ case MAC_MODEL_IISI:
+ case MAC_MODEL_IIVI:
+ case MAC_MODEL_IIVX:
+ case MAC_MODEL_P600:
+ case MAC_MODEL_P460:
+ case MAC_MODEL_P550:
+ case MAC_MODEL_TV:
+ case MAC_MODEL_LCII:
+ case MAC_MODEL_LCIII:
+ case MAC_MODEL_P520:
+ case MAC_MODEL_CLII:
+ case MAC_MODEL_CCL:
+ SWIMBase = (__u8*)(VIA1_BASE + 0x16000);
+ break;
+ case MAC_MODEL_IIFX:
+ case MAC_MODEL_Q900:
+ case MAC_MODEL_Q950:
+ SWIMBase = NULL;
+ break;
+ default:
+ SWIMBase = NULL;
+ printk("SWIM: unknown Macintosh: report to maintainer !\n");
+ break;
+ }
+
+ if (SWIMBase == NULL)
+ return;
+
+ printk("SWIM floppy controller base at 0x%p\n", SWIMBase);
+}
The preferred way to do this these days is to create a platform
device with a
struct resource that points to the SWIMBase.
Is this what Finn explains also in his answer ?
If so, I agree.
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/drivers/block/swim.c 2008-11-01 10:36:05.000000000
+0100
+static int __init swim_floppy_init(void)
+{
+ int err;
+ int drive;
+
+ if (SWIMBase == NULL)
+ return 0;
And the actual driver should become a platform driver, that is bound
automatically to the platform device, if it exists.
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6/drivers/block/swim_asm.S 2008-11-01
06:14:39.000000000 +0100
@@ -0,0 +1,295 @@
+/*
+ * low-level functions for the SWIM floppy controller
+ *
+ * needs assembly language because is very timing dependent
+ * this controller exists only on macintosh 680x0 based
Do you still need this to be written in assembly?
I don't know. But initially they were written in C and was too slow to
handle data on slow macintoshes.
Thank you for your comments.
Regards,
Laurent
----------------------- Laurent Vivier ----------------------
"The best way to predict the future is to invent it."
- Alan Kay
--
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