📄 config.c
字号:
/* * linux/arch/m68k/mac/config.c * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. *//* * Miscellaneous linux stuff */#include <linux/config.h>#include <linux/module.h>#include <linux/types.h>#include <linux/mm.h>#include <linux/tty.h>#include <linux/console.h>#include <linux/interrupt.h>/* keyb */#include <linux/random.h>#include <linux/delay.h>/* keyb */#include <linux/init.h>#include <linux/vt_kern.h>#define BOOTINFO_COMPAT_1_0#include <asm/setup.h>#include <asm/bootinfo.h>#include <asm/system.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/pgtable.h>#include <asm/rtc.h>#include <asm/machdep.h>#include <asm/macintosh.h>#include <asm/macints.h>#include <asm/machw.h>#include <asm/mac_iop.h>#include <asm/mac_via.h>#include <asm/mac_oss.h>#include <asm/mac_psc.h>/* Mac bootinfo struct */struct mac_booter_data mac_bi_data;int mac_bisize = sizeof mac_bi_data;struct mac_hw_present mac_hw_present;/* New m68k bootinfo stuff and videobase */extern int m68k_num_memory;extern struct mem_info m68k_memory[NUM_MEMINFO];extern struct mem_info m68k_ramdisk;extern char m68k_command_line[CL_SIZE];void *mac_env; /* Loaded by the boot asm *//* The phys. video addr. - might be bogus on some machines */unsigned long mac_orig_videoaddr;/* Mac specific timer functions */extern unsigned long mac_gettimeoffset (void);extern int mac_hwclk (int, struct rtc_time *);extern int mac_set_clock_mmss (unsigned long);extern int show_mac_interrupts(struct seq_file *, void *);extern void iop_preinit(void);extern void iop_init(void);extern void via_init(void);extern void via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *));extern void via_flush_cache(void);extern void oss_init(void);extern void psc_init(void);extern void baboon_init(void);extern void mac_mksound(unsigned int, unsigned int);extern void nubus_sweep_video(void);/* Mac specific debug functions (in debug.c) */extern void mac_debug_init(void);extern void mac_debugging_long(int, long);static void mac_get_model(char *str);void mac_bang(int irq, void *vector, struct pt_regs *p){ printk(KERN_INFO "Resetting ...\n"); mac_reset();}static void mac_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)){ via_init_clock(vector);}#if 0void mac_waitbut (void){ ;}#endifextern irqreturn_t mac_default_handler(int, void *, struct pt_regs *);irqreturn_t (*mac_handlers[8])(int, void *, struct pt_regs *)={ mac_default_handler, mac_default_handler, mac_default_handler, mac_default_handler, mac_default_handler, mac_default_handler, mac_default_handler, mac_default_handler};/* * Parse a Macintosh-specific record in the bootinfo */int __init mac_parse_bootinfo(const struct bi_record *record){ int unknown = 0; const u_long *data = record->data; switch (record->tag) { case BI_MAC_MODEL: mac_bi_data.id = *data; break; case BI_MAC_VADDR: mac_bi_data.videoaddr = *data; break; case BI_MAC_VDEPTH: mac_bi_data.videodepth = *data; break; case BI_MAC_VROW: mac_bi_data.videorow = *data; break; case BI_MAC_VDIM: mac_bi_data.dimensions = *data; break; case BI_MAC_VLOGICAL: mac_bi_data.videological = VIDEOMEMBASE + (*data & ~VIDEOMEMMASK); mac_orig_videoaddr = *data; break; case BI_MAC_SCCBASE: mac_bi_data.sccbase = *data; break; case BI_MAC_BTIME: mac_bi_data.boottime = *data; break; case BI_MAC_GMTBIAS: mac_bi_data.gmtbias = *data; break; case BI_MAC_MEMSIZE: mac_bi_data.memsize = *data; break; case BI_MAC_CPUID: mac_bi_data.cpuid = *data; break; case BI_MAC_ROMBASE: mac_bi_data.rombase = *data; break; default: unknown = 1; } return(unknown);}/* * Flip into 24bit mode for an instant - flushes the L2 cache card. We * have to disable interrupts for this. Our IRQ handlers will crap * themselves if they take an IRQ in 24bit mode! */static void mac_cache_card_flush(int writeback){ unsigned long flags; local_irq_save(flags); via_flush_cache(); local_irq_restore(flags);}void __init config_mac(void){ if (!MACH_IS_MAC) { printk(KERN_ERR "ERROR: no Mac, but config_mac() called!! \n"); } mach_sched_init = mac_sched_init; mach_init_IRQ = mac_init_IRQ; mach_request_irq = mac_request_irq; mach_free_irq = mac_free_irq; enable_irq = mac_enable_irq; disable_irq = mac_disable_irq; mach_get_model = mac_get_model; mach_default_handler = &mac_handlers; mach_get_irq_list = show_mac_interrupts; mach_gettimeoffset = mac_gettimeoffset;#warning move to adb/via init#if 0 mach_hwclk = mac_hwclk;#endif mach_set_clock_mmss = mac_set_clock_mmss; mach_reset = mac_reset; mach_halt = mac_poweroff; mach_power_off = mac_poweroff;#ifdef CONFIG_DUMMY_CONSOLE conswitchp = &dummy_con;#endif mach_max_dma_address = 0xffffffff;#if 0 mach_debug_init = mac_debug_init;#endif#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE) mach_beep = mac_mksound;#endif#ifdef CONFIG_HEARTBEAT#if 0 mach_heartbeat = mac_heartbeat; mach_heartbeat_irq = IRQ_MAC_TIMER;#endif#endif /* * Determine hardware present */ mac_identify(); mac_report_hardware(); /* AFAIK only the IIci takes a cache card. The IIfx has onboard cache ... someone needs to figure out how to tell if it's on or not. */ if (macintosh_config->ident == MAC_MODEL_IICI || macintosh_config->ident == MAC_MODEL_IIFX) { mach_l2_flush = mac_cache_card_flush; } /* * Check for machine specific fixups. */#ifdef OLD_NUBUS_CODE nubus_sweep_video();#endif}/* * Macintosh Table: hardcoded model configuration data. * * Much of this was defined by Alan, based on who knows what docs. * I've added a lot more, and some of that was pure guesswork based * on hardware pages present on the Mac web site. Possibly wildly * inaccurate, so look here if a new Mac model won't run. Example: if * a Mac crashes immediately after the VIA1 registers have been dumped * to the screen, it probably died attempting to read DirB on a RBV. * Meaning it should have MAC_VIA_IIci here :-) */struct mac_model *macintosh_config;EXPORT_SYMBOL(macintosh_config);static struct mac_model mac_data_table[]={ /* * We'll pretend to be a Macintosh II, that's pretty safe. */ { .ident = MAC_MODEL_II, .name = "Unknown", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_II, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, /* * Original MacII hardware * */ { .ident = MAC_MODEL_II, .name = "II", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_II, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IIX, .name = "IIx", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_II, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IICX, .name = "IIcx", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_II, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_SE30, .name = "SE/30", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_II, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, /* * Weirdified MacII hardware - all subtley different. Gee thanks * Apple. All these boxes seem to have VIA2 in a different place to * the MacII (+1A000 rather than +4000) * CSA: see http://developer.apple.com/technotes/hw/hw_09.html */ { .ident = MAC_MODEL_IICI, .name = "IIci", .adb_type = MAC_ADB_II, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IIFX, .name = "IIfx", .adb_type = MAC_ADB_IOP, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_IOP, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IISI, .name = "IIsi", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IIVI, .name = "IIvi", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_IIVX, .name = "IIvx", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, /* * Classic models (guessing: similar to SE/30 ?? Nope, similar to LC ...) */ { .ident = MAC_MODEL_CLII, .name = "Classic II", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_CCL, .name = "Color Classic", .adb_type = MAC_ADB_CUDA, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS}, /* * Some Mac LC machines. Basically the same as the IIci, ADB like IIsi */ { .ident = MAC_MODEL_LC, .name = "LC", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_LCII, .name = "LC II", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_LCIII, .name = "LC III", .adb_type = MAC_ADB_IISI, .via_type = MAC_VIA_IIci, .scsi_type = MAC_SCSI_OLD, .scc_type = MAC_SCC_II, .nubus_type = MAC_NUBUS }, /* * Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently * as some of the stuff connected to VIA2 seems different. Better SCSI chip and * onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an * AMD 79C940 (MACE). * The 700, 900 and 950 have some I/O chips in the wrong place to * confuse us. The 840AV has a SCSI location of its own (same as * the 660AV). */ { .ident = MAC_MODEL_Q605, .name = "Quadra 605", .adb_type = MAC_ADB_CUDA, .via_type = MAC_VIA_QUADRA, .scsi_type = MAC_SCSI_QUADRA, .scc_type = MAC_SCC_QUADRA, .nubus_type = MAC_NUBUS }, { .ident = MAC_MODEL_Q605_ACC, .name = "Quadra 605", .adb_type = MAC_ADB_CUDA, .via_type = MAC_VIA_QUADRA, .scsi_type = MAC_SCSI_QUADRA, .scc_type = MAC_SCC_QUADRA,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -