Merge branch 'x86/cpufeature' into irq/numa
[sfrench/cifs-2.6.git] / arch / m68k / mac / config.c
index 98b6bcfb37bf4c10aa7e073c899ef84b0e0d4854..be017984a456e66c58369748cec265f6da6f2c46 100644 (file)
@@ -22,6 +22,7 @@
 /* keyb */
 #include <linux/init.h>
 #include <linux/vt_kern.h>
+#include <linux/platform_device.h>
 
 #define BOOTINFO_COMPAT_1_0
 #include <asm/setup.h>
 #include <asm/mac_oss.h>
 #include <asm/mac_psc.h>
 
+/* platform device info */
+
+#define SWIM_IO_SIZE 0x2000    /* SWIM IO resource size */
+
 /* Mac bootinfo struct */
 
 struct mac_booter_data mac_bi_data;
@@ -224,7 +229,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_II,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_IWM
        },
 
        /*
@@ -239,7 +245,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_II,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_IWM
        }, {
                .ident          = MAC_MODEL_IIX,
                .name           = "IIx",
@@ -247,7 +254,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_II,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_IICX,
                .name           = "IIcx",
@@ -255,7 +263,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_II,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_SE30,
                .name           = "SE/30",
@@ -263,7 +272,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_II,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -280,7 +290,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_IIFX,
                .name           = "IIfx",
@@ -288,7 +299,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_IOP,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_IOP
        }, {
                .ident          = MAC_MODEL_IISI,
                .name           = "IIsi",
@@ -296,7 +308,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_IIVI,
                .name           = "IIvi",
@@ -304,7 +317,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_IIVX,
                .name           = "IIvx",
@@ -312,7 +326,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -326,7 +341,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_CCL,
                .name           = "Color Classic",
@@ -334,7 +350,9 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS},
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
+       },
 
        /*
         *      Some Mac LC machines. Basically the same as the IIci, ADB like IIsi
@@ -347,7 +365,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_LCII,
                .name           = "LC II",
@@ -355,7 +374,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_LCIII,
                .name           = "LC III",
@@ -363,7 +383,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -383,7 +404,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q605_ACC,
                .name           = "Quadra 605",
@@ -391,7 +413,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q610,
                .name           = "Quadra 610",
@@ -400,7 +423,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q630,
                .name           = "Quadra 630",
@@ -410,7 +434,8 @@ static struct mac_model mac_data_table[] = {
                .ide_type       = MAC_IDE_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q650,
                .name           = "Quadra 650",
@@ -419,7 +444,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        },
        /*      The Q700 does have a NS Sonic */
        {
@@ -430,7 +456,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA2,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q800,
                .name           = "Quadra 800",
@@ -439,7 +466,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_Q840,
                .name           = "Quadra 840AV",
@@ -448,7 +476,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA3,
                .scc_type       = MAC_SCC_PSC,
                .ether_type     = MAC_ETHER_MACE,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_AV
        }, {
                .ident          = MAC_MODEL_Q900,
                .name           = "Quadra 900",
@@ -457,7 +486,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA2,
                .scc_type       = MAC_SCC_IOP,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_IOP
        }, {
                .ident          = MAC_MODEL_Q950,
                .name           = "Quadra 950",
@@ -466,7 +496,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA2,
                .scc_type       = MAC_SCC_IOP,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_IOP
        },
 
        /*
@@ -480,7 +511,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_P475,
                .name           =  "Performa 475",
@@ -488,7 +520,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_P475F,
                .name           =  "Performa 475",
@@ -496,7 +529,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_P520,
                .name           =  "Performa 520",
@@ -504,7 +538,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_P550,
                .name           =  "Performa 550",
@@ -512,7 +547,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
        /* These have the comm slot, and therefore the possibility of SONIC ethernet */
        {
@@ -523,7 +559,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_II,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_P588,
                .name           = "Performa 588",
@@ -533,7 +570,8 @@ static struct mac_model mac_data_table[] = {
                .ide_type       = MAC_IDE_QUADRA,
                .scc_type       = MAC_SCC_II,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_TV,
                .name           = "TV",
@@ -541,7 +579,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_P600,
                .name           = "Performa 600",
@@ -549,7 +588,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_II,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -565,7 +605,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_C650,
                .name           = "Centris 650",
@@ -574,7 +615,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR1
        }, {
                .ident          = MAC_MODEL_C660,
                .name           = "Centris 660AV",
@@ -583,7 +625,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_QUADRA3,
                .scc_type       = MAC_SCC_PSC,
                .ether_type     = MAC_ETHER_MACE,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_AV
        },
 
        /*
@@ -599,7 +642,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB145,
                .name           = "PowerBook 145",
@@ -607,7 +651,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB150,
                .name           = "PowerBook 150",
@@ -616,7 +661,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_OLD,
                .ide_type       = MAC_IDE_PB,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB160,
                .name           = "PowerBook 160",
@@ -624,7 +670,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB165,
                .name           = "PowerBook 165",
@@ -632,7 +679,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB165C,
                .name           = "PowerBook 165c",
@@ -640,7 +688,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB170,
                .name           = "PowerBook 170",
@@ -648,7 +697,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB180,
                .name           = "PowerBook 180",
@@ -656,7 +706,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB180C,
                .name           = "PowerBook 180c",
@@ -664,7 +715,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_QUADRA,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB190,
                .name           = "PowerBook 190",
@@ -673,7 +725,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_OLD,
                .ide_type       = MAC_IDE_BABOON,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB520,
                .name           = "PowerBook 520",
@@ -682,7 +735,8 @@ static struct mac_model mac_data_table[] = {
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
                .ether_type     = MAC_ETHER_SONIC,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -702,7 +756,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB230,
                .name           = "PowerBook Duo 230",
@@ -710,7 +765,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB250,
                .name           = "PowerBook Duo 250",
@@ -718,7 +774,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB270C,
                .name           = "PowerBook Duo 270c",
@@ -726,7 +783,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB280,
                .name           = "PowerBook Duo 280",
@@ -734,7 +792,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        }, {
                .ident          = MAC_MODEL_PB280C,
                .name           = "PowerBook Duo 280c",
@@ -742,7 +801,8 @@ static struct mac_model mac_data_table[] = {
                .via_type       = MAC_VIA_IIci,
                .scsi_type      = MAC_SCSI_OLD,
                .scc_type       = MAC_SCC_QUADRA,
-               .nubus_type     = MAC_NUBUS
+               .nubus_type     = MAC_NUBUS,
+               .floppy_type    = MAC_FLOPPY_SWIM_ADDR2
        },
 
        /*
@@ -815,3 +875,42 @@ static void mac_get_model(char *str)
        strcpy(str, "Macintosh ");
        strcat(str, macintosh_config->name);
 }
+
+static struct resource swim_resources[1];
+
+static struct platform_device swim_device = {
+       .name           = "swim",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(swim_resources),
+       .resource       = swim_resources,
+};
+
+static struct platform_device *mac_platform_devices[] __initdata = {
+       &swim_device
+};
+
+int __init mac_platform_init(void)
+{
+       u8 *swim_base;
+
+       switch (macintosh_config->floppy_type) {
+       case MAC_FLOPPY_SWIM_ADDR1:
+               swim_base = (u8 *)(VIA1_BASE + 0x1E000);
+               break;
+       case MAC_FLOPPY_SWIM_ADDR2:
+               swim_base = (u8 *)(VIA1_BASE + 0x16000);
+               break;
+       default:
+               return 0;
+       }
+
+       swim_resources[0].name = "swim-regs";
+       swim_resources[0].start = (resource_size_t)swim_base;
+       swim_resources[0].end = (resource_size_t)(swim_base + SWIM_IO_SIZE);
+       swim_resources[0].flags = IORESOURCE_MEM;
+
+       return platform_add_devices(mac_platform_devices,
+                                   ARRAY_SIZE(mac_platform_devices));
+}
+
+arch_initcall(mac_platform_init);