cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

config.c (29311B)


      1/*
      2 *  linux/arch/m68k/mac/config.c
      3 *
      4 * This file is subject to the terms and conditions of the GNU General Public
      5 * License.  See the file COPYING in the main directory of this archive
      6 * for more details.
      7 */
      8
      9/*
     10 * Miscellaneous linux stuff
     11 */
     12
     13#include <linux/errno.h>
     14#include <linux/module.h>
     15#include <linux/reboot.h>
     16#include <linux/types.h>
     17#include <linux/mm.h>
     18#include <linux/tty.h>
     19#include <linux/console.h>
     20#include <linux/interrupt.h>
     21/* keyb */
     22#include <linux/random.h>
     23#include <linux/delay.h>
     24/* keyb */
     25#include <linux/init.h>
     26#include <linux/vt_kern.h>
     27#include <linux/platform_device.h>
     28#include <linux/ata_platform.h>
     29#include <linux/adb.h>
     30#include <linux/cuda.h>
     31#include <linux/pmu.h>
     32#include <linux/rtc.h>
     33
     34#include <asm/setup.h>
     35#include <asm/bootinfo.h>
     36#include <asm/bootinfo-mac.h>
     37#include <asm/byteorder.h>
     38
     39#include <asm/io.h>
     40#include <asm/irq.h>
     41#include <asm/machdep.h>
     42
     43#include <asm/macintosh.h>
     44#include <asm/macints.h>
     45#include <asm/machw.h>
     46
     47#include <asm/mac_iop.h>
     48#include <asm/mac_via.h>
     49#include <asm/mac_oss.h>
     50#include <asm/mac_psc.h>
     51#include <asm/config.h>
     52
     53/* Mac bootinfo struct */
     54struct mac_booter_data mac_bi_data;
     55
     56/* The phys. video addr. - might be bogus on some machines */
     57static unsigned long mac_orig_videoaddr;
     58
     59extern int mac_hwclk(int, struct rtc_time *);
     60extern void iop_init(void);
     61extern void via_init(void);
     62extern void via_init_clock(void);
     63extern void oss_init(void);
     64extern void psc_init(void);
     65extern void baboon_init(void);
     66
     67extern void mac_mksound(unsigned int, unsigned int);
     68
     69static void mac_get_model(char *str);
     70static void mac_identify(void);
     71static void mac_report_hardware(void);
     72
     73static void __init mac_sched_init(void)
     74{
     75	via_init_clock();
     76}
     77
     78/*
     79 * Parse a Macintosh-specific record in the bootinfo
     80 */
     81
     82int __init mac_parse_bootinfo(const struct bi_record *record)
     83{
     84	int unknown = 0;
     85	const void *data = record->data;
     86
     87	switch (be16_to_cpu(record->tag)) {
     88	case BI_MAC_MODEL:
     89		mac_bi_data.id = be32_to_cpup(data);
     90		break;
     91	case BI_MAC_VADDR:
     92		mac_bi_data.videoaddr = be32_to_cpup(data);
     93		break;
     94	case BI_MAC_VDEPTH:
     95		mac_bi_data.videodepth = be32_to_cpup(data);
     96		break;
     97	case BI_MAC_VROW:
     98		mac_bi_data.videorow = be32_to_cpup(data);
     99		break;
    100	case BI_MAC_VDIM:
    101		mac_bi_data.dimensions = be32_to_cpup(data);
    102		break;
    103	case BI_MAC_VLOGICAL:
    104		mac_orig_videoaddr = be32_to_cpup(data);
    105		mac_bi_data.videological =
    106			VIDEOMEMBASE + (mac_orig_videoaddr & ~VIDEOMEMMASK);
    107		break;
    108	case BI_MAC_SCCBASE:
    109		mac_bi_data.sccbase = be32_to_cpup(data);
    110		break;
    111	case BI_MAC_BTIME:
    112		mac_bi_data.boottime = be32_to_cpup(data);
    113		break;
    114	case BI_MAC_GMTBIAS:
    115		mac_bi_data.gmtbias = be32_to_cpup(data);
    116		break;
    117	case BI_MAC_MEMSIZE:
    118		mac_bi_data.memsize = be32_to_cpup(data);
    119		break;
    120	case BI_MAC_CPUID:
    121		mac_bi_data.cpuid = be32_to_cpup(data);
    122		break;
    123	case BI_MAC_ROMBASE:
    124		mac_bi_data.rombase = be32_to_cpup(data);
    125		break;
    126	default:
    127		unknown = 1;
    128		break;
    129	}
    130	return unknown;
    131}
    132
    133void __init config_mac(void)
    134{
    135	if (!MACH_IS_MAC)
    136		pr_err("ERROR: no Mac, but config_mac() called!!\n");
    137
    138	mach_sched_init = mac_sched_init;
    139	mach_init_IRQ = mac_init_IRQ;
    140	mach_get_model = mac_get_model;
    141	mach_hwclk = mac_hwclk;
    142	mach_reset = mac_reset;
    143	mach_halt = mac_poweroff;
    144#if IS_ENABLED(CONFIG_INPUT_M68K_BEEP)
    145	mach_beep = mac_mksound;
    146#endif
    147
    148	/*
    149	 * Determine hardware present
    150	 */
    151
    152	mac_identify();
    153	mac_report_hardware();
    154
    155	/*
    156	 * AFAIK only the IIci takes a cache card.  The IIfx has onboard
    157	 * cache ... someone needs to figure out how to tell if it's on or
    158	 * not.
    159	 */
    160
    161	if (macintosh_config->ident == MAC_MODEL_IICI)
    162		mach_l2_flush = via_l2_flush;
    163
    164	register_platform_power_off(mac_poweroff);
    165}
    166
    167
    168/*
    169 * Macintosh Table: hardcoded model configuration data.
    170 *
    171 * Much of this was defined by Alan, based on who knows what docs.
    172 * I've added a lot more, and some of that was pure guesswork based
    173 * on hardware pages present on the Mac web site. Possibly wildly
    174 * inaccurate, so look here if a new Mac model won't run. Example: if
    175 * a Mac crashes immediately after the VIA1 registers have been dumped
    176 * to the screen, it probably died attempting to read DirB on a RBV.
    177 * Meaning it should have MAC_VIA_IICI here :-)
    178 */
    179
    180struct mac_model *macintosh_config;
    181EXPORT_SYMBOL(macintosh_config);
    182
    183static struct mac_model mac_data_table[] = {
    184	/*
    185	 * We'll pretend to be a Macintosh II, that's pretty safe.
    186	 */
    187
    188	{
    189		.ident		= MAC_MODEL_II,
    190		.name		= "Unknown",
    191		.adb_type	= MAC_ADB_II,
    192		.via_type	= MAC_VIA_II,
    193		.scsi_type	= MAC_SCSI_OLD,
    194		.scc_type	= MAC_SCC_II,
    195		.expansion_type	= MAC_EXP_NUBUS,
    196		.floppy_type	= MAC_FLOPPY_UNSUPPORTED, /* IWM */
    197	},
    198
    199	/*
    200	 * Original Mac II hardware
    201	 */
    202
    203	{
    204		.ident		= MAC_MODEL_II,
    205		.name		= "II",
    206		.adb_type	= MAC_ADB_II,
    207		.via_type	= MAC_VIA_II,
    208		.scsi_type	= MAC_SCSI_OLD,
    209		.scc_type	= MAC_SCC_II,
    210		.expansion_type	= MAC_EXP_NUBUS,
    211		.floppy_type	= MAC_FLOPPY_UNSUPPORTED, /* IWM */
    212	}, {
    213		.ident		= MAC_MODEL_IIX,
    214		.name		= "IIx",
    215		.adb_type	= MAC_ADB_II,
    216		.via_type	= MAC_VIA_II,
    217		.scsi_type	= MAC_SCSI_OLD,
    218		.scc_type	= MAC_SCC_II,
    219		.expansion_type	= MAC_EXP_NUBUS,
    220		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    221	}, {
    222		.ident		= MAC_MODEL_IICX,
    223		.name		= "IIcx",
    224		.adb_type	= MAC_ADB_II,
    225		.via_type	= MAC_VIA_II,
    226		.scsi_type	= MAC_SCSI_OLD,
    227		.scc_type	= MAC_SCC_II,
    228		.expansion_type	= MAC_EXP_NUBUS,
    229		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    230	}, {
    231		.ident		= MAC_MODEL_SE30,
    232		.name		= "SE/30",
    233		.adb_type	= MAC_ADB_II,
    234		.via_type	= MAC_VIA_II,
    235		.scsi_type	= MAC_SCSI_OLD,
    236		.scc_type	= MAC_SCC_II,
    237		.expansion_type	= MAC_EXP_PDS,
    238		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    239	},
    240
    241	/*
    242	 * Weirdified Mac II hardware - all subtly different. Gee thanks
    243	 * Apple. All these boxes seem to have VIA2 in a different place to
    244	 * the Mac II (+1A000 rather than +4000)
    245	 * CSA: see http://developer.apple.com/technotes/hw/hw_09.html
    246	 */
    247
    248	{
    249		.ident		= MAC_MODEL_IICI,
    250		.name		= "IIci",
    251		.adb_type	= MAC_ADB_II,
    252		.via_type	= MAC_VIA_IICI,
    253		.scsi_type	= MAC_SCSI_OLD,
    254		.scc_type	= MAC_SCC_II,
    255		.expansion_type	= MAC_EXP_NUBUS,
    256		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    257	}, {
    258		.ident		= MAC_MODEL_IIFX,
    259		.name		= "IIfx",
    260		.adb_type	= MAC_ADB_IOP,
    261		.via_type	= MAC_VIA_IICI,
    262		.scsi_type	= MAC_SCSI_IIFX,
    263		.scc_type	= MAC_SCC_IOP,
    264		.expansion_type	= MAC_EXP_PDS_NUBUS,
    265		.floppy_type	= MAC_FLOPPY_SWIM_IOP, /* SWIM */
    266	}, {
    267		.ident		= MAC_MODEL_IISI,
    268		.name		= "IIsi",
    269		.adb_type	= MAC_ADB_EGRET,
    270		.via_type	= MAC_VIA_IICI,
    271		.scsi_type	= MAC_SCSI_OLD,
    272		.scc_type	= MAC_SCC_II,
    273		.expansion_type	= MAC_EXP_PDS_NUBUS,
    274		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    275	}, {
    276		.ident		= MAC_MODEL_IIVI,
    277		.name		= "IIvi",
    278		.adb_type	= MAC_ADB_EGRET,
    279		.via_type	= MAC_VIA_IICI,
    280		.scsi_type	= MAC_SCSI_LC,
    281		.scc_type	= MAC_SCC_II,
    282		.expansion_type	= MAC_EXP_NUBUS,
    283		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    284	}, {
    285		.ident		= MAC_MODEL_IIVX,
    286		.name		= "IIvx",
    287		.adb_type	= MAC_ADB_EGRET,
    288		.via_type	= MAC_VIA_IICI,
    289		.scsi_type	= MAC_SCSI_LC,
    290		.scc_type	= MAC_SCC_II,
    291		.expansion_type	= MAC_EXP_NUBUS,
    292		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    293	},
    294
    295	/*
    296	 * Classic models (guessing: similar to SE/30? Nope, similar to LC...)
    297	 */
    298
    299	{
    300		.ident		= MAC_MODEL_CLII,
    301		.name		= "Classic II",
    302		.adb_type	= MAC_ADB_EGRET,
    303		.via_type	= MAC_VIA_IICI,
    304		.scsi_type	= MAC_SCSI_LC,
    305		.scc_type	= MAC_SCC_II,
    306		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    307	}, {
    308		.ident		= MAC_MODEL_CCL,
    309		.name		= "Color Classic",
    310		.adb_type	= MAC_ADB_CUDA,
    311		.via_type	= MAC_VIA_IICI,
    312		.scsi_type	= MAC_SCSI_LC,
    313		.scc_type	= MAC_SCC_II,
    314		.expansion_type	= MAC_EXP_PDS,
    315		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    316	}, {
    317		.ident		= MAC_MODEL_CCLII,
    318		.name		= "Color Classic II",
    319		.adb_type	= MAC_ADB_CUDA,
    320		.via_type	= MAC_VIA_IICI,
    321		.scsi_type	= MAC_SCSI_LC,
    322		.scc_type	= MAC_SCC_II,
    323		.expansion_type	= MAC_EXP_PDS,
    324		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    325	},
    326
    327	/*
    328	 * Some Mac LC machines. Basically the same as the IIci, ADB like IIsi
    329	 */
    330
    331	{
    332		.ident		= MAC_MODEL_LC,
    333		.name		= "LC",
    334		.adb_type	= MAC_ADB_EGRET,
    335		.via_type	= MAC_VIA_IICI,
    336		.scsi_type	= MAC_SCSI_LC,
    337		.scc_type	= MAC_SCC_II,
    338		.expansion_type	= MAC_EXP_PDS,
    339		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    340	}, {
    341		.ident		= MAC_MODEL_LCII,
    342		.name		= "LC II",
    343		.adb_type	= MAC_ADB_EGRET,
    344		.via_type	= MAC_VIA_IICI,
    345		.scsi_type	= MAC_SCSI_LC,
    346		.scc_type	= MAC_SCC_II,
    347		.expansion_type	= MAC_EXP_PDS,
    348		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    349	}, {
    350		.ident		= MAC_MODEL_LCIII,
    351		.name		= "LC III",
    352		.adb_type	= MAC_ADB_EGRET,
    353		.via_type	= MAC_VIA_IICI,
    354		.scsi_type	= MAC_SCSI_LC,
    355		.scc_type	= MAC_SCC_II,
    356		.expansion_type	= MAC_EXP_PDS,
    357		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    358	},
    359
    360	/*
    361	 * Quadra. Video is at 0xF9000000, via is like a MacII. We label it
    362	 * differently as some of the stuff connected to VIA2 seems different.
    363	 * Better SCSI chip and onboard ethernet using a NatSemi SONIC except
    364	 * the 660AV and 840AV which use an AMD 79C940 (MACE).
    365	 * The 700, 900 and 950 have some I/O chips in the wrong place to
    366	 * confuse us. The 840AV has a SCSI location of its own (same as
    367	 * the 660AV).
    368	 */
    369
    370	{
    371		.ident		= MAC_MODEL_Q605,
    372		.name		= "Quadra 605",
    373		.adb_type	= MAC_ADB_CUDA,
    374		.via_type	= MAC_VIA_QUADRA,
    375		.scsi_type	= MAC_SCSI_QUADRA,
    376		.scc_type	= MAC_SCC_QUADRA,
    377		.expansion_type	= MAC_EXP_PDS,
    378		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    379	}, {
    380		.ident		= MAC_MODEL_Q605_ACC,
    381		.name		= "Quadra 605",
    382		.adb_type	= MAC_ADB_CUDA,
    383		.via_type	= MAC_VIA_QUADRA,
    384		.scsi_type	= MAC_SCSI_QUADRA,
    385		.scc_type	= MAC_SCC_QUADRA,
    386		.expansion_type	= MAC_EXP_PDS,
    387		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    388	}, {
    389		.ident		= MAC_MODEL_Q610,
    390		.name		= "Quadra 610",
    391		.adb_type	= MAC_ADB_II,
    392		.via_type	= MAC_VIA_QUADRA,
    393		.scsi_type	= MAC_SCSI_QUADRA,
    394		.scc_type	= MAC_SCC_QUADRA,
    395		.ether_type	= MAC_ETHER_SONIC,
    396		.expansion_type	= MAC_EXP_PDS_NUBUS,
    397		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    398	}, {
    399		.ident		= MAC_MODEL_Q630,
    400		.name		= "Quadra 630",
    401		.adb_type	= MAC_ADB_CUDA,
    402		.via_type	= MAC_VIA_QUADRA,
    403		.scsi_type	= MAC_SCSI_QUADRA,
    404		.ide_type	= MAC_IDE_QUADRA,
    405		.scc_type	= MAC_SCC_QUADRA,
    406		.expansion_type	= MAC_EXP_PDS_COMM,
    407		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    408	}, {
    409		.ident		= MAC_MODEL_Q650,
    410		.name		= "Quadra 650",
    411		.adb_type	= MAC_ADB_II,
    412		.via_type	= MAC_VIA_QUADRA,
    413		.scsi_type	= MAC_SCSI_QUADRA,
    414		.scc_type	= MAC_SCC_QUADRA,
    415		.ether_type	= MAC_ETHER_SONIC,
    416		.expansion_type	= MAC_EXP_PDS_NUBUS,
    417		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    418	},
    419	/* The Q700 does have a NS Sonic */
    420	{
    421		.ident		= MAC_MODEL_Q700,
    422		.name		= "Quadra 700",
    423		.adb_type	= MAC_ADB_II,
    424		.via_type	= MAC_VIA_QUADRA,
    425		.scsi_type	= MAC_SCSI_QUADRA2,
    426		.scc_type	= MAC_SCC_QUADRA,
    427		.ether_type	= MAC_ETHER_SONIC,
    428		.expansion_type	= MAC_EXP_PDS_NUBUS,
    429		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM */
    430	}, {
    431		.ident		= MAC_MODEL_Q800,
    432		.name		= "Quadra 800",
    433		.adb_type	= MAC_ADB_II,
    434		.via_type	= MAC_VIA_QUADRA,
    435		.scsi_type	= MAC_SCSI_QUADRA,
    436		.scc_type	= MAC_SCC_QUADRA,
    437		.ether_type	= MAC_ETHER_SONIC,
    438		.expansion_type	= MAC_EXP_PDS_NUBUS,
    439		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    440	}, {
    441		.ident		= MAC_MODEL_Q840,
    442		.name		= "Quadra 840AV",
    443		.adb_type	= MAC_ADB_CUDA,
    444		.via_type	= MAC_VIA_QUADRA,
    445		.scsi_type	= MAC_SCSI_QUADRA3,
    446		.scc_type	= MAC_SCC_PSC,
    447		.ether_type	= MAC_ETHER_MACE,
    448		.expansion_type	= MAC_EXP_NUBUS,
    449		.floppy_type	= MAC_FLOPPY_UNSUPPORTED, /* New Age */
    450	}, {
    451		.ident		= MAC_MODEL_Q900,
    452		.name		= "Quadra 900",
    453		.adb_type	= MAC_ADB_IOP,
    454		.via_type	= MAC_VIA_QUADRA,
    455		.scsi_type	= MAC_SCSI_QUADRA2,
    456		.scc_type	= MAC_SCC_IOP,
    457		.ether_type	= MAC_ETHER_SONIC,
    458		.expansion_type	= MAC_EXP_PDS_NUBUS,
    459		.floppy_type	= MAC_FLOPPY_SWIM_IOP, /* SWIM */
    460	}, {
    461		.ident		= MAC_MODEL_Q950,
    462		.name		= "Quadra 950",
    463		.adb_type	= MAC_ADB_IOP,
    464		.via_type	= MAC_VIA_QUADRA,
    465		.scsi_type	= MAC_SCSI_QUADRA2,
    466		.scc_type	= MAC_SCC_IOP,
    467		.ether_type	= MAC_ETHER_SONIC,
    468		.expansion_type	= MAC_EXP_PDS_NUBUS,
    469		.floppy_type	= MAC_FLOPPY_SWIM_IOP, /* SWIM */
    470	},
    471
    472	/*
    473	 * Performa - more LC type machines
    474	 */
    475
    476	{
    477		.ident		= MAC_MODEL_P460,
    478		.name		= "Performa 460",
    479		.adb_type	= MAC_ADB_EGRET,
    480		.via_type	= MAC_VIA_IICI,
    481		.scsi_type	= MAC_SCSI_LC,
    482		.scc_type	= MAC_SCC_II,
    483		.expansion_type	= MAC_EXP_PDS,
    484		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    485	}, {
    486		.ident		= MAC_MODEL_P475,
    487		.name		= "Performa 475",
    488		.adb_type	= MAC_ADB_CUDA,
    489		.via_type	= MAC_VIA_QUADRA,
    490		.scsi_type	= MAC_SCSI_QUADRA,
    491		.scc_type	= MAC_SCC_II,
    492		.expansion_type	= MAC_EXP_PDS,
    493		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    494	}, {
    495		.ident		= MAC_MODEL_P475F,
    496		.name		= "Performa 475",
    497		.adb_type	= MAC_ADB_CUDA,
    498		.via_type	= MAC_VIA_QUADRA,
    499		.scsi_type	= MAC_SCSI_QUADRA,
    500		.scc_type	= MAC_SCC_II,
    501		.expansion_type	= MAC_EXP_PDS,
    502		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    503	}, {
    504		.ident		= MAC_MODEL_P520,
    505		.name		= "Performa 520",
    506		.adb_type	= MAC_ADB_CUDA,
    507		.via_type	= MAC_VIA_IICI,
    508		.scsi_type	= MAC_SCSI_LC,
    509		.scc_type	= MAC_SCC_II,
    510		.expansion_type	= MAC_EXP_PDS,
    511		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    512	}, {
    513		.ident		= MAC_MODEL_P550,
    514		.name		= "Performa 550",
    515		.adb_type	= MAC_ADB_CUDA,
    516		.via_type	= MAC_VIA_IICI,
    517		.scsi_type	= MAC_SCSI_LC,
    518		.scc_type	= MAC_SCC_II,
    519		.expansion_type	= MAC_EXP_PDS,
    520		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    521	},
    522	/* These have the comm slot, and therefore possibly SONIC ethernet */
    523	{
    524		.ident		= MAC_MODEL_P575,
    525		.name		= "Performa 575",
    526		.adb_type	= MAC_ADB_CUDA,
    527		.via_type	= MAC_VIA_QUADRA,
    528		.scsi_type	= MAC_SCSI_QUADRA,
    529		.scc_type	= MAC_SCC_II,
    530		.expansion_type	= MAC_EXP_PDS_COMM,
    531		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    532	}, {
    533		.ident		= MAC_MODEL_P588,
    534		.name		= "Performa 588",
    535		.adb_type	= MAC_ADB_CUDA,
    536		.via_type	= MAC_VIA_QUADRA,
    537		.scsi_type	= MAC_SCSI_QUADRA,
    538		.ide_type	= MAC_IDE_QUADRA,
    539		.scc_type	= MAC_SCC_II,
    540		.expansion_type	= MAC_EXP_PDS_COMM,
    541		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    542	}, {
    543		.ident		= MAC_MODEL_TV,
    544		.name		= "TV",
    545		.adb_type	= MAC_ADB_CUDA,
    546		.via_type	= MAC_VIA_IICI,
    547		.scsi_type	= MAC_SCSI_LC,
    548		.scc_type	= MAC_SCC_II,
    549		.floppy_type	= MAC_FLOPPY_LC, /* SWIM 2 */
    550	}, {
    551		.ident		= MAC_MODEL_P600,
    552		.name		= "Performa 600",
    553		.adb_type	= MAC_ADB_EGRET,
    554		.via_type	= MAC_VIA_IICI,
    555		.scsi_type	= MAC_SCSI_LC,
    556		.scc_type	= MAC_SCC_II,
    557		.expansion_type	= MAC_EXP_NUBUS,
    558		.floppy_type	= MAC_FLOPPY_LC, /* SWIM */
    559	},
    560
    561	/*
    562	 * Centris - just guessing again; maybe like Quadra.
    563	 * The C610 may or may not have SONIC. We probe to make sure.
    564	 */
    565
    566	{
    567		.ident		= MAC_MODEL_C610,
    568		.name		= "Centris 610",
    569		.adb_type	= MAC_ADB_II,
    570		.via_type	= MAC_VIA_QUADRA,
    571		.scsi_type	= MAC_SCSI_QUADRA,
    572		.scc_type	= MAC_SCC_QUADRA,
    573		.ether_type	= MAC_ETHER_SONIC,
    574		.expansion_type	= MAC_EXP_PDS_NUBUS,
    575		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    576	}, {
    577		.ident		= MAC_MODEL_C650,
    578		.name		= "Centris 650",
    579		.adb_type	= MAC_ADB_II,
    580		.via_type	= MAC_VIA_QUADRA,
    581		.scsi_type	= MAC_SCSI_QUADRA,
    582		.scc_type	= MAC_SCC_QUADRA,
    583		.ether_type	= MAC_ETHER_SONIC,
    584		.expansion_type	= MAC_EXP_PDS_NUBUS,
    585		.floppy_type	= MAC_FLOPPY_QUADRA, /* SWIM 2 */
    586	}, {
    587		.ident		= MAC_MODEL_C660,
    588		.name		= "Centris 660AV",
    589		.adb_type	= MAC_ADB_CUDA,
    590		.via_type	= MAC_VIA_QUADRA,
    591		.scsi_type	= MAC_SCSI_QUADRA3,
    592		.scc_type	= MAC_SCC_PSC,
    593		.ether_type	= MAC_ETHER_MACE,
    594		.expansion_type	= MAC_EXP_PDS_NUBUS,
    595		.floppy_type	= MAC_FLOPPY_UNSUPPORTED, /* New Age */
    596	},
    597
    598	/*
    599	 * The PowerBooks all the same "Combo" custom IC for SCSI and SCC
    600	 * and a PMU (in two variations?) for ADB. Most of them use the
    601	 * Quadra-style VIAs. A few models also have IDE from hell.
    602	 */
    603
    604	{
    605		.ident		= MAC_MODEL_PB140,
    606		.name		= "PowerBook 140",
    607		.adb_type	= MAC_ADB_PB1,
    608		.via_type	= MAC_VIA_QUADRA,
    609		.scsi_type	= MAC_SCSI_OLD,
    610		.scc_type	= MAC_SCC_QUADRA,
    611		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    612	}, {
    613		.ident		= MAC_MODEL_PB145,
    614		.name		= "PowerBook 145",
    615		.adb_type	= MAC_ADB_PB1,
    616		.via_type	= MAC_VIA_QUADRA,
    617		.scsi_type	= MAC_SCSI_OLD,
    618		.scc_type	= MAC_SCC_QUADRA,
    619		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    620	}, {
    621		.ident		= MAC_MODEL_PB150,
    622		.name		= "PowerBook 150",
    623		.adb_type	= MAC_ADB_PB2,
    624		.via_type	= MAC_VIA_IICI,
    625		.scsi_type	= MAC_SCSI_OLD,
    626		.ide_type	= MAC_IDE_PB,
    627		.scc_type	= MAC_SCC_QUADRA,
    628		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    629	}, {
    630		.ident		= MAC_MODEL_PB160,
    631		.name		= "PowerBook 160",
    632		.adb_type	= MAC_ADB_PB1,
    633		.via_type	= MAC_VIA_QUADRA,
    634		.scsi_type	= MAC_SCSI_OLD,
    635		.scc_type	= MAC_SCC_QUADRA,
    636		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    637	}, {
    638		.ident		= MAC_MODEL_PB165,
    639		.name		= "PowerBook 165",
    640		.adb_type	= MAC_ADB_PB1,
    641		.via_type	= MAC_VIA_QUADRA,
    642		.scsi_type	= MAC_SCSI_OLD,
    643		.scc_type	= MAC_SCC_QUADRA,
    644		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    645	}, {
    646		.ident		= MAC_MODEL_PB165C,
    647		.name		= "PowerBook 165c",
    648		.adb_type	= MAC_ADB_PB1,
    649		.via_type	= MAC_VIA_QUADRA,
    650		.scsi_type	= MAC_SCSI_OLD,
    651		.scc_type	= MAC_SCC_QUADRA,
    652		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    653	}, {
    654		.ident		= MAC_MODEL_PB170,
    655		.name		= "PowerBook 170",
    656		.adb_type	= MAC_ADB_PB1,
    657		.via_type	= MAC_VIA_QUADRA,
    658		.scsi_type	= MAC_SCSI_OLD,
    659		.scc_type	= MAC_SCC_QUADRA,
    660		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    661	}, {
    662		.ident		= MAC_MODEL_PB180,
    663		.name		= "PowerBook 180",
    664		.adb_type	= MAC_ADB_PB1,
    665		.via_type	= MAC_VIA_QUADRA,
    666		.scsi_type	= MAC_SCSI_OLD,
    667		.scc_type	= MAC_SCC_QUADRA,
    668		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    669	}, {
    670		.ident		= MAC_MODEL_PB180C,
    671		.name		= "PowerBook 180c",
    672		.adb_type	= MAC_ADB_PB1,
    673		.via_type	= MAC_VIA_QUADRA,
    674		.scsi_type	= MAC_SCSI_OLD,
    675		.scc_type	= MAC_SCC_QUADRA,
    676		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    677	}, {
    678		.ident		= MAC_MODEL_PB190,
    679		.name		= "PowerBook 190",
    680		.adb_type	= MAC_ADB_PB2,
    681		.via_type	= MAC_VIA_QUADRA,
    682		.scsi_type	= MAC_SCSI_OLD,
    683		.ide_type	= MAC_IDE_BABOON,
    684		.scc_type	= MAC_SCC_QUADRA,
    685		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM 2 */
    686	}, {
    687		.ident		= MAC_MODEL_PB520,
    688		.name		= "PowerBook 520",
    689		.adb_type	= MAC_ADB_PB2,
    690		.via_type	= MAC_VIA_QUADRA,
    691		.scsi_type	= MAC_SCSI_OLD,
    692		.scc_type	= MAC_SCC_QUADRA,
    693		.ether_type	= MAC_ETHER_SONIC,
    694		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM 2 */
    695	},
    696
    697	/*
    698	 * PowerBook Duos are pretty much like normal PowerBooks
    699	 * All of these probably have onboard SONIC in the Dock which
    700	 * means we'll have to probe for it eventually.
    701	 */
    702
    703	{
    704		.ident		= MAC_MODEL_PB210,
    705		.name		= "PowerBook Duo 210",
    706		.adb_type	= MAC_ADB_PB2,
    707		.via_type	= MAC_VIA_IICI,
    708		.scsi_type	= MAC_SCSI_DUO,
    709		.scc_type	= MAC_SCC_QUADRA,
    710		.expansion_type	= MAC_EXP_NUBUS,
    711		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    712	}, {
    713		.ident		= MAC_MODEL_PB230,
    714		.name		= "PowerBook Duo 230",
    715		.adb_type	= MAC_ADB_PB2,
    716		.via_type	= MAC_VIA_IICI,
    717		.scsi_type	= MAC_SCSI_DUO,
    718		.scc_type	= MAC_SCC_QUADRA,
    719		.expansion_type	= MAC_EXP_NUBUS,
    720		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    721	}, {
    722		.ident		= MAC_MODEL_PB250,
    723		.name		= "PowerBook Duo 250",
    724		.adb_type	= MAC_ADB_PB2,
    725		.via_type	= MAC_VIA_IICI,
    726		.scsi_type	= MAC_SCSI_DUO,
    727		.scc_type	= MAC_SCC_QUADRA,
    728		.expansion_type	= MAC_EXP_NUBUS,
    729		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    730	}, {
    731		.ident		= MAC_MODEL_PB270C,
    732		.name		= "PowerBook Duo 270c",
    733		.adb_type	= MAC_ADB_PB2,
    734		.via_type	= MAC_VIA_IICI,
    735		.scsi_type	= MAC_SCSI_DUO,
    736		.scc_type	= MAC_SCC_QUADRA,
    737		.expansion_type	= MAC_EXP_NUBUS,
    738		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    739	}, {
    740		.ident		= MAC_MODEL_PB280,
    741		.name		= "PowerBook Duo 280",
    742		.adb_type	= MAC_ADB_PB2,
    743		.via_type	= MAC_VIA_IICI,
    744		.scsi_type	= MAC_SCSI_DUO,
    745		.scc_type	= MAC_SCC_QUADRA,
    746		.expansion_type	= MAC_EXP_NUBUS,
    747		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    748	}, {
    749		.ident		= MAC_MODEL_PB280C,
    750		.name		= "PowerBook Duo 280c",
    751		.adb_type	= MAC_ADB_PB2,
    752		.via_type	= MAC_VIA_IICI,
    753		.scsi_type	= MAC_SCSI_DUO,
    754		.scc_type	= MAC_SCC_QUADRA,
    755		.expansion_type	= MAC_EXP_NUBUS,
    756		.floppy_type	= MAC_FLOPPY_OLD, /* SWIM */
    757	},
    758
    759	/*
    760	 * Other stuff?
    761	 */
    762
    763	{
    764		.ident		= -1
    765	}
    766};
    767
    768static struct resource scc_a_rsrcs[] = {
    769	{ .flags = IORESOURCE_MEM },
    770	{ .flags = IORESOURCE_IRQ },
    771};
    772
    773static struct resource scc_b_rsrcs[] = {
    774	{ .flags = IORESOURCE_MEM },
    775	{ .flags = IORESOURCE_IRQ },
    776};
    777
    778struct platform_device scc_a_pdev = {
    779	.name           = "scc",
    780	.id             = 0,
    781};
    782EXPORT_SYMBOL(scc_a_pdev);
    783
    784struct platform_device scc_b_pdev = {
    785	.name           = "scc",
    786	.id             = 1,
    787};
    788EXPORT_SYMBOL(scc_b_pdev);
    789
    790static void __init mac_identify(void)
    791{
    792	struct mac_model *m;
    793
    794	/* Penguin data useful? */
    795	int model = mac_bi_data.id;
    796	if (!model) {
    797		/* no bootinfo model id -> NetBSD booter was used! */
    798		/* XXX FIXME: breaks for model > 31 */
    799		model = (mac_bi_data.cpuid >> 2) & 63;
    800		pr_warn("No bootinfo model ID, using cpuid instead (obsolete bootloader?)\n");
    801	}
    802
    803	macintosh_config = mac_data_table;
    804	for (m = macintosh_config; m->ident != -1; m++) {
    805		if (m->ident == model) {
    806			macintosh_config = m;
    807			break;
    808		}
    809	}
    810
    811	/* Set up serial port resources for the console initcall. */
    812
    813	scc_a_rsrcs[0].start     = (resource_size_t)mac_bi_data.sccbase + 2;
    814	scc_a_rsrcs[0].end       = scc_a_rsrcs[0].start;
    815	scc_a_pdev.num_resources = ARRAY_SIZE(scc_a_rsrcs);
    816	scc_a_pdev.resource      = scc_a_rsrcs;
    817
    818	scc_b_rsrcs[0].start     = (resource_size_t)mac_bi_data.sccbase;
    819	scc_b_rsrcs[0].end       = scc_b_rsrcs[0].start;
    820	scc_b_pdev.num_resources = ARRAY_SIZE(scc_b_rsrcs);
    821	scc_b_pdev.resource      = scc_b_rsrcs;
    822
    823	switch (macintosh_config->scc_type) {
    824	case MAC_SCC_PSC:
    825		scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_MAC_SCC_A;
    826		scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_MAC_SCC_B;
    827		break;
    828	default:
    829		/* On non-PSC machines, the serial ports share an IRQ. */
    830		if (macintosh_config->ident == MAC_MODEL_IIFX) {
    831			scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_MAC_SCC;
    832			scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_MAC_SCC;
    833		} else {
    834			scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_AUTO_4;
    835			scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_AUTO_4;
    836		}
    837		break;
    838	}
    839
    840	pr_info("Detected Macintosh model: %d\n", model);
    841
    842	/*
    843	 * Report booter data:
    844	 */
    845	printk(KERN_DEBUG " Penguin bootinfo data:\n");
    846	printk(KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n",
    847		mac_bi_data.videoaddr, mac_bi_data.videorow,
    848		mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF,
    849		mac_bi_data.dimensions >> 16);
    850	printk(KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx\n",
    851		mac_bi_data.videological, mac_orig_videoaddr,
    852		mac_bi_data.sccbase);
    853	printk(KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx\n",
    854		mac_bi_data.boottime, mac_bi_data.gmtbias);
    855	printk(KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx\n",
    856		mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize);
    857
    858	iop_init();
    859	oss_init();
    860	via_init();
    861	psc_init();
    862	baboon_init();
    863
    864#ifdef CONFIG_ADB_CUDA
    865	find_via_cuda();
    866#endif
    867#ifdef CONFIG_ADB_PMU
    868	find_via_pmu();
    869#endif
    870}
    871
    872static void __init mac_report_hardware(void)
    873{
    874	pr_info("Apple Macintosh %s\n", macintosh_config->name);
    875}
    876
    877static void mac_get_model(char *str)
    878{
    879	strcpy(str, "Macintosh ");
    880	strcat(str, macintosh_config->name);
    881}
    882
    883static const struct resource mac_scsi_iifx_rsrc[] __initconst = {
    884	{
    885		.flags = IORESOURCE_IRQ,
    886		.start = IRQ_MAC_SCSI,
    887		.end   = IRQ_MAC_SCSI,
    888	}, {
    889		.flags = IORESOURCE_MEM,
    890		.start = 0x50008000,
    891		.end   = 0x50009FFF,
    892	}, {
    893		.flags = IORESOURCE_MEM,
    894		.start = 0x50008000,
    895		.end   = 0x50009FFF,
    896	},
    897};
    898
    899static const struct resource mac_scsi_duo_rsrc[] __initconst = {
    900	{
    901		.flags = IORESOURCE_MEM,
    902		.start = 0xFEE02000,
    903		.end   = 0xFEE03FFF,
    904	},
    905};
    906
    907static const struct resource mac_scsi_old_rsrc[] __initconst = {
    908	{
    909		.flags = IORESOURCE_IRQ,
    910		.start = IRQ_MAC_SCSI,
    911		.end   = IRQ_MAC_SCSI,
    912	}, {
    913		.flags = IORESOURCE_MEM,
    914		.start = 0x50010000,
    915		.end   = 0x50011FFF,
    916	}, {
    917		.flags = IORESOURCE_MEM,
    918		.start = 0x50006000,
    919		.end   = 0x50007FFF,
    920	},
    921};
    922
    923static const struct resource mac_scsi_ccl_rsrc[] __initconst = {
    924	{
    925		.flags = IORESOURCE_IRQ,
    926		.start = IRQ_MAC_SCSI,
    927		.end   = IRQ_MAC_SCSI,
    928	}, {
    929		.flags = IORESOURCE_MEM,
    930		.start = 0x50F10000,
    931		.end   = 0x50F11FFF,
    932	}, {
    933		.flags = IORESOURCE_MEM,
    934		.start = 0x50F06000,
    935		.end   = 0x50F07FFF,
    936	},
    937};
    938
    939static const struct resource mac_pata_quadra_rsrc[] __initconst = {
    940	DEFINE_RES_MEM(0x50F1A000, 0x38),
    941	DEFINE_RES_MEM(0x50F1A038, 0x04),
    942	DEFINE_RES_IRQ(IRQ_NUBUS_F),
    943};
    944
    945static const struct resource mac_pata_pb_rsrc[] __initconst = {
    946	DEFINE_RES_MEM(0x50F1A000, 0x38),
    947	DEFINE_RES_MEM(0x50F1A038, 0x04),
    948	DEFINE_RES_IRQ(IRQ_NUBUS_C),
    949};
    950
    951static const struct resource mac_pata_baboon_rsrc[] __initconst = {
    952	DEFINE_RES_MEM(0x50F1A000, 0x38),
    953	DEFINE_RES_MEM(0x50F1A038, 0x04),
    954	DEFINE_RES_IRQ(IRQ_BABOON_1),
    955};
    956
    957static const struct pata_platform_info mac_pata_data __initconst = {
    958	.ioport_shift = 2,
    959};
    960
    961int __init mac_platform_init(void)
    962{
    963	phys_addr_t swim_base = 0;
    964
    965	if (!MACH_IS_MAC)
    966		return -ENODEV;
    967
    968	/*
    969	 * Serial devices
    970	 */
    971
    972	platform_device_register(&scc_a_pdev);
    973	platform_device_register(&scc_b_pdev);
    974
    975	/*
    976	 * Floppy device
    977	 */
    978
    979	switch (macintosh_config->floppy_type) {
    980	case MAC_FLOPPY_QUADRA:
    981		swim_base = 0x5001E000;
    982		break;
    983	case MAC_FLOPPY_OLD:
    984		swim_base = 0x50016000;
    985		break;
    986	case MAC_FLOPPY_LC:
    987		swim_base = 0x50F16000;
    988		break;
    989	}
    990
    991	if (swim_base) {
    992		struct resource swim_rsrc = {
    993			.flags = IORESOURCE_MEM,
    994			.start = swim_base,
    995			.end   = swim_base + 0x1FFF,
    996		};
    997
    998		platform_device_register_simple("swim", -1, &swim_rsrc, 1);
    999	}
   1000
   1001	/*
   1002	 * SCSI device(s)
   1003	 */
   1004
   1005	switch (macintosh_config->scsi_type) {
   1006	case MAC_SCSI_QUADRA:
   1007	case MAC_SCSI_QUADRA3:
   1008		platform_device_register_simple("mac_esp", 0, NULL, 0);
   1009		break;
   1010	case MAC_SCSI_QUADRA2:
   1011		platform_device_register_simple("mac_esp", 0, NULL, 0);
   1012		if ((macintosh_config->ident == MAC_MODEL_Q900) ||
   1013		    (macintosh_config->ident == MAC_MODEL_Q950))
   1014			platform_device_register_simple("mac_esp", 1, NULL, 0);
   1015		break;
   1016	case MAC_SCSI_IIFX:
   1017		/* Addresses from The Guide to Mac Family Hardware.
   1018		 * $5000 8000 - $5000 9FFF: SCSI DMA
   1019		 * $5000 A000 - $5000 BFFF: Alternate SCSI
   1020		 * $5000 C000 - $5000 DFFF: Alternate SCSI (DMA)
   1021		 * $5000 E000 - $5000 FFFF: Alternate SCSI (Hsk)
   1022		 * The A/UX header file sys/uconfig.h says $50F0 8000.
   1023		 * The "SCSI DMA" custom IC embeds the 53C80 core and
   1024		 * supports Programmed IO, DMA and PDMA (hardware handshake).
   1025		 */
   1026		platform_device_register_simple("mac_scsi", 0,
   1027			mac_scsi_iifx_rsrc, ARRAY_SIZE(mac_scsi_iifx_rsrc));
   1028		break;
   1029	case MAC_SCSI_DUO:
   1030		/* Addresses from the Duo Dock II Developer Note.
   1031		 * $FEE0 2000 - $FEE0 3FFF: normal mode
   1032		 * $FEE0 4000 - $FEE0 5FFF: pseudo DMA without /DRQ
   1033		 * $FEE0 6000 - $FEE0 7FFF: pseudo DMA with /DRQ
   1034		 * The NetBSD code indicates that both 5380 chips share
   1035		 * an IRQ (?) which would need careful handling (see mac_esp).
   1036		 */
   1037		platform_device_register_simple("mac_scsi", 1,
   1038			mac_scsi_duo_rsrc, ARRAY_SIZE(mac_scsi_duo_rsrc));
   1039		fallthrough;
   1040	case MAC_SCSI_OLD:
   1041		/* Addresses from Developer Notes for Duo System,
   1042		 * PowerBook 180 & 160, 140 & 170, Macintosh IIsi
   1043		 * and also from The Guide to Mac Family Hardware for
   1044		 * SE/30, II, IIx, IIcx, IIci.
   1045		 * $5000 6000 - $5000 7FFF: pseudo-DMA with /DRQ
   1046		 * $5001 0000 - $5001 1FFF: normal mode
   1047		 * $5001 2000 - $5001 3FFF: pseudo-DMA without /DRQ
   1048		 * GMFH says that $5000 0000 - $50FF FFFF "wraps
   1049		 * $5000 0000 - $5001 FFFF eight times" (!)
   1050		 * mess.org says IIci and Color Classic do not alias
   1051		 * I/O address space.
   1052		 */
   1053		platform_device_register_simple("mac_scsi", 0,
   1054			mac_scsi_old_rsrc, ARRAY_SIZE(mac_scsi_old_rsrc));
   1055		break;
   1056	case MAC_SCSI_LC:
   1057		/* Addresses from Mac LC data in Designing Cards & Drivers 3ed.
   1058		 * Also from the Developer Notes for Classic II, LC III,
   1059		 * Color Classic and IIvx.
   1060		 * $50F0 6000 - $50F0 7FFF: SCSI handshake
   1061		 * $50F1 0000 - $50F1 1FFF: SCSI
   1062		 * $50F1 2000 - $50F1 3FFF: SCSI DMA
   1063		 */
   1064		platform_device_register_simple("mac_scsi", 0,
   1065			mac_scsi_ccl_rsrc, ARRAY_SIZE(mac_scsi_ccl_rsrc));
   1066		break;
   1067	}
   1068
   1069	/*
   1070	 * IDE device
   1071	 */
   1072
   1073	switch (macintosh_config->ide_type) {
   1074	case MAC_IDE_QUADRA:
   1075		platform_device_register_resndata(NULL, "pata_platform", -1,
   1076			mac_pata_quadra_rsrc, ARRAY_SIZE(mac_pata_quadra_rsrc),
   1077			&mac_pata_data, sizeof(mac_pata_data));
   1078		break;
   1079	case MAC_IDE_PB:
   1080		platform_device_register_resndata(NULL, "pata_platform", -1,
   1081			mac_pata_pb_rsrc, ARRAY_SIZE(mac_pata_pb_rsrc),
   1082			&mac_pata_data, sizeof(mac_pata_data));
   1083		break;
   1084	case MAC_IDE_BABOON:
   1085		platform_device_register_resndata(NULL, "pata_platform", -1,
   1086			mac_pata_baboon_rsrc, ARRAY_SIZE(mac_pata_baboon_rsrc),
   1087			&mac_pata_data, sizeof(mac_pata_data));
   1088		break;
   1089	}
   1090
   1091	/*
   1092	 * Ethernet device
   1093	 */
   1094
   1095	if (macintosh_config->ether_type == MAC_ETHER_SONIC ||
   1096	    macintosh_config->expansion_type == MAC_EXP_PDS_COMM)
   1097		platform_device_register_simple("macsonic", -1, NULL, 0);
   1098
   1099	if (macintosh_config->expansion_type == MAC_EXP_PDS ||
   1100	    macintosh_config->expansion_type == MAC_EXP_PDS_COMM)
   1101		platform_device_register_simple("mac89x0", -1, NULL, 0);
   1102
   1103	if (macintosh_config->ether_type == MAC_ETHER_MACE)
   1104		platform_device_register_simple("macmace", -1, NULL, 0);
   1105
   1106	return 0;
   1107}
   1108
   1109arch_initcall(mac_platform_init);