config.c

来自「linux 内核源代码」· C语言 代码 · 共 860 行 · 第 1/2 页

C
860
字号
/* *  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/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;EXPORT_SYMBOL(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(irq_handler_t func);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);static void mac_get_model(char *str);static void __init mac_sched_init(irq_handler_t vector){	via_init_clock(vector);}/* * 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;		break;	}	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_get_model = mac_get_model;	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;	mach_max_dma_address = 0xffffffff;#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 subtly 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,		.nubus_type	= MAC_NUBUS	}, {		.ident		= MAC_MODEL_Q610,		.name		= "Quadra 610",		.adb_type	= MAC_ADB_II,		.via_type	= MAC_VIA_QUADRA,		.scsi_type	= MAC_SCSI_QUADRA,		.scc_type	= MAC_SCC_QUADRA,		.ether_type	= MAC_ETHER_SONIC,		.nubus_type	= MAC_NUBUS	}, {		.ident		= MAC_MODEL_Q630,		.name		= "Quadra 630",		.adb_type	= MAC_ADB_CUDA,		.via_type	= MAC_VIA_QUADRA,		.scsi_type	= MAC_SCSI_QUADRA,		.ide_type	= MAC_IDE_QUADRA,		.scc_type	= MAC_SCC_QUADRA,		.ether_type	= MAC_ETHER_SONIC,		.nubus_type	= MAC_NUBUS

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?