⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * System-specific setup, especially interrupts. * * 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. * * Copyright (C) 1998 Harald Koerfgen * Copyright (C) 2000, 2001, 2002, 2003, 2005  Maciej W. Rozycki */#include <linux/console.h>#include <linux/init.h>#include <linux/interrupt.h>#include <linux/ioport.h>#include <linux/module.h>#include <linux/param.h>#include <linux/sched.h>#include <linux/spinlock.h>#include <linux/types.h>#include <asm/bootinfo.h>#include <asm/cpu.h>#include <asm/cpu-features.h>#include <asm/irq.h>#include <asm/irq_cpu.h>#include <asm/mipsregs.h>#include <asm/reboot.h>#include <asm/time.h>#include <asm/traps.h>#include <asm/wbflush.h>#include <asm/dec/interrupts.h>#include <asm/dec/ioasic.h>#include <asm/dec/ioasic_addrs.h>#include <asm/dec/ioasic_ints.h>#include <asm/dec/kn01.h>#include <asm/dec/kn02.h>#include <asm/dec/kn02ba.h>#include <asm/dec/kn02ca.h>#include <asm/dec/kn03.h>#include <asm/dec/kn230.h>#include <asm/dec/system.h>extern void dec_machine_restart(char *command);extern void dec_machine_halt(void);extern void dec_machine_power_off(void);extern irqreturn_t dec_intr_halt(int irq, void *dev_id, struct pt_regs *regs);extern asmlinkage void decstation_handle_int(void);unsigned long dec_kn_slot_base, dec_kn_slot_size;EXPORT_SYMBOL(dec_kn_slot_base);EXPORT_SYMBOL(dec_kn_slot_size);spinlock_t ioasic_ssr_lock;volatile u32 *ioasic_base;EXPORT_SYMBOL(ioasic_base);/* * IRQ routing and priority tables.  Priorites are set as follows: * * 		KN01	KN230	KN02	KN02-BA	KN02-CA	KN03 * * MEMORY	CPU	CPU	CPU	ASIC	CPU	CPU * RTC		CPU	CPU	CPU	ASIC	CPU	CPU * DMA		-	-	-	ASIC	ASIC	ASIC * SERIAL0	CPU	CPU	CSR	ASIC	ASIC	ASIC * SERIAL1	-	-	-	ASIC	-	ASIC * SCSI		CPU	CPU	CSR	ASIC	ASIC	ASIC * ETHERNET	CPU	*	CSR	ASIC	ASIC	ASIC * other	-	-	-	ASIC	-	- * TC2		-	-	CSR	CPU	ASIC	ASIC * TC1		-	-	CSR	CPU	ASIC	ASIC * TC0		-	-	CSR	CPU	ASIC	ASIC * other	-	CPU	-	CPU	ASIC	ASIC * other	-	-	-	-	CPU	CPU * * * -- shared with SCSI */int dec_interrupt[DEC_NR_INTS] = {	[0 ... DEC_NR_INTS - 1] = -1};EXPORT_SYMBOL(dec_interrupt);int_ptr cpu_mask_nr_tbl[DEC_MAX_CPU_INTS][2] = {	{ { .i = ~0 }, { .p = dec_intr_unimplemented } },};int_ptr asic_mask_nr_tbl[DEC_MAX_ASIC_INTS][2] = {	{ { .i = ~0 }, { .p = asic_intr_unimplemented } },};int cpu_fpu_mask = DEC_CPU_IRQ_MASK(DEC_CPU_INR_FPU);static struct irqaction ioirq = {	.handler = no_action,	.name = "cascade",};static struct irqaction fpuirq = {	.handler = no_action,	.name = "fpu",};static struct irqaction busirq = {	.flags = SA_INTERRUPT,	.name = "bus error",};static struct irqaction haltirq = {	.handler = dec_intr_halt,	.name = "halt",};/* * Bus error (DBE/IBE exceptions and bus interrupts) handling setup. */static void __init dec_be_init(void){	switch (mips_machtype) {	case MACH_DS23100:	/* DS2100/DS3100 Pmin/Pmax */		board_be_handler = dec_kn01_be_handler;		busirq.handler = dec_kn01_be_interrupt;		busirq.flags |= SA_SHIRQ;		dec_kn01_be_init();		break;	case MACH_DS5000_1XX:	/* DS5000/1xx 3min */	case MACH_DS5000_XX:	/* DS5000/xx Maxine */		board_be_handler = dec_kn02xa_be_handler;		busirq.handler = dec_kn02xa_be_interrupt;		dec_kn02xa_be_init();		break;	case MACH_DS5000_200:	/* DS5000/200 3max */	case MACH_DS5000_2X0:	/* DS5000/240 3max+ */	case MACH_DS5900:	/* DS5900 bigmax */		board_be_handler = dec_ecc_be_handler;		busirq.handler = dec_ecc_be_interrupt;		dec_ecc_be_init();		break;	}}extern void dec_time_init(void);extern void dec_timer_setup(struct irqaction *);void __init plat_setup(void){	board_be_init = dec_be_init;	board_time_init = dec_time_init;	board_timer_setup = dec_timer_setup;	wbflush_setup();	_machine_restart = dec_machine_restart;	_machine_halt = dec_machine_halt;	_machine_power_off = dec_machine_power_off;	ioport_resource.start = ~0UL;	ioport_resource.end = 0UL;}/* * Machine-specific initialisation for KN01, aka DS2100 (aka Pmin) * or DS3100 (aka Pmax). */static int kn01_interrupt[DEC_NR_INTS] __initdata = {	[DEC_IRQ_CASCADE]	= -1,	[DEC_IRQ_AB_RECV]	= -1,	[DEC_IRQ_AB_XMIT]	= -1,	[DEC_IRQ_DZ11]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_DZ11),	[DEC_IRQ_ASC]		= -1,	[DEC_IRQ_FLOPPY]	= -1,	[DEC_IRQ_FPU]		= DEC_CPU_IRQ_NR(DEC_CPU_INR_FPU),	[DEC_IRQ_HALT]		= -1,	[DEC_IRQ_ISDN]		= -1,	[DEC_IRQ_LANCE]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_LANCE),	[DEC_IRQ_BUS]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_BUS),	[DEC_IRQ_PSU]		= -1,	[DEC_IRQ_RTC]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_RTC),	[DEC_IRQ_SCC0]		= -1,	[DEC_IRQ_SCC1]		= -1,	[DEC_IRQ_SII]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_SII),	[DEC_IRQ_TC0]		= -1,	[DEC_IRQ_TC1]		= -1,	[DEC_IRQ_TC2]		= -1,	[DEC_IRQ_TIMER]		= -1,	[DEC_IRQ_VIDEO]		= DEC_CPU_IRQ_NR(KN01_CPU_INR_VIDEO),	[DEC_IRQ_ASC_MERR]	= -1,	[DEC_IRQ_ASC_ERR]	= -1,	[DEC_IRQ_ASC_DMA]	= -1,	[DEC_IRQ_FLOPPY_ERR]	= -1,	[DEC_IRQ_ISDN_ERR]	= -1,	[DEC_IRQ_ISDN_RXDMA]	= -1,	[DEC_IRQ_ISDN_TXDMA]	= -1,	[DEC_IRQ_LANCE_MERR]	= -1,	[DEC_IRQ_SCC0A_RXERR]	= -1,	[DEC_IRQ_SCC0A_RXDMA]	= -1,	[DEC_IRQ_SCC0A_TXERR]	= -1,	[DEC_IRQ_SCC0A_TXDMA]	= -1,	[DEC_IRQ_AB_RXERR]	= -1,	[DEC_IRQ_AB_RXDMA]	= -1,	[DEC_IRQ_AB_TXERR]	= -1,	[DEC_IRQ_AB_TXDMA]	= -1,	[DEC_IRQ_SCC1A_RXERR]	= -1,	[DEC_IRQ_SCC1A_RXDMA]	= -1,	[DEC_IRQ_SCC1A_TXERR]	= -1,	[DEC_IRQ_SCC1A_TXDMA]	= -1,};static int_ptr kn01_cpu_mask_nr_tbl[][2] __initdata = {	{ { .i = DEC_CPU_IRQ_MASK(KN01_CPU_INR_BUS) },		{ .i = DEC_CPU_IRQ_NR(KN01_CPU_INR_BUS) } },	{ { .i = DEC_CPU_IRQ_MASK(KN01_CPU_INR_RTC) },		{ .i = DEC_CPU_IRQ_NR(KN01_CPU_INR_RTC) } },	{ { .i = DEC_CPU_IRQ_MASK(KN01_CPU_INR_DZ11) },		{ .i = DEC_CPU_IRQ_NR(KN01_CPU_INR_DZ11) } },	{ { .i = DEC_CPU_IRQ_MASK(KN01_CPU_INR_SII) },		{ .i = DEC_CPU_IRQ_NR(KN01_CPU_INR_SII) } },	{ { .i = DEC_CPU_IRQ_MASK(KN01_CPU_INR_LANCE) },		{ .i = DEC_CPU_IRQ_NR(KN01_CPU_INR_LANCE) } },	{ { .i = DEC_CPU_IRQ_ALL },		{ .p = cpu_all_int } },};static void __init dec_init_kn01(void){	/* IRQ routing. */	memcpy(&dec_interrupt, &kn01_interrupt,		sizeof(kn01_interrupt));	/* CPU IRQ priorities. */	memcpy(&cpu_mask_nr_tbl, &kn01_cpu_mask_nr_tbl,		sizeof(kn01_cpu_mask_nr_tbl));	mips_cpu_irq_init(DEC_CPU_IRQ_BASE);}				/* dec_init_kn01 *//* * Machine-specific initialisation for KN230, aka DS5100, aka MIPSmate. */static int kn230_interrupt[DEC_NR_INTS] __initdata = {	[DEC_IRQ_CASCADE]	= -1,	[DEC_IRQ_AB_RECV]	= -1,	[DEC_IRQ_AB_XMIT]	= -1,	[DEC_IRQ_DZ11]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_DZ11),	[DEC_IRQ_ASC]		= -1,	[DEC_IRQ_FLOPPY]	= -1,	[DEC_IRQ_FPU]		= DEC_CPU_IRQ_NR(DEC_CPU_INR_FPU),	[DEC_IRQ_HALT]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_HALT),	[DEC_IRQ_ISDN]		= -1,	[DEC_IRQ_LANCE]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_LANCE),	[DEC_IRQ_BUS]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_BUS),	[DEC_IRQ_PSU]		= -1,	[DEC_IRQ_RTC]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_RTC),	[DEC_IRQ_SCC0]		= -1,	[DEC_IRQ_SCC1]		= -1,	[DEC_IRQ_SII]		= DEC_CPU_IRQ_NR(KN230_CPU_INR_SII),	[DEC_IRQ_TC0]		= -1,	[DEC_IRQ_TC1]		= -1,	[DEC_IRQ_TC2]		= -1,	[DEC_IRQ_TIMER]		= -1,	[DEC_IRQ_VIDEO]		= -1,	[DEC_IRQ_ASC_MERR]	= -1,	[DEC_IRQ_ASC_ERR]	= -1,	[DEC_IRQ_ASC_DMA]	= -1,	[DEC_IRQ_FLOPPY_ERR]	= -1,	[DEC_IRQ_ISDN_ERR]	= -1,	[DEC_IRQ_ISDN_RXDMA]	= -1,	[DEC_IRQ_ISDN_TXDMA]	= -1,	[DEC_IRQ_LANCE_MERR]	= -1,	[DEC_IRQ_SCC0A_RXERR]	= -1,	[DEC_IRQ_SCC0A_RXDMA]	= -1,	[DEC_IRQ_SCC0A_TXERR]	= -1,	[DEC_IRQ_SCC0A_TXDMA]	= -1,	[DEC_IRQ_AB_RXERR]	= -1,	[DEC_IRQ_AB_RXDMA]	= -1,	[DEC_IRQ_AB_TXERR]	= -1,	[DEC_IRQ_AB_TXDMA]	= -1,	[DEC_IRQ_SCC1A_RXERR]	= -1,	[DEC_IRQ_SCC1A_RXDMA]	= -1,	[DEC_IRQ_SCC1A_TXERR]	= -1,	[DEC_IRQ_SCC1A_TXDMA]	= -1,};static int_ptr kn230_cpu_mask_nr_tbl[][2] __initdata = {	{ { .i = DEC_CPU_IRQ_MASK(KN230_CPU_INR_BUS) },		{ .i = DEC_CPU_IRQ_NR(KN230_CPU_INR_BUS) } },	{ { .i = DEC_CPU_IRQ_MASK(KN230_CPU_INR_RTC) },		{ .i = DEC_CPU_IRQ_NR(KN230_CPU_INR_RTC) } },	{ { .i = DEC_CPU_IRQ_MASK(KN230_CPU_INR_DZ11) },		{ .i = DEC_CPU_IRQ_NR(KN230_CPU_INR_DZ11) } },	{ { .i = DEC_CPU_IRQ_MASK(KN230_CPU_INR_SII) },		{ .i = DEC_CPU_IRQ_NR(KN230_CPU_INR_SII) } },	{ { .i = DEC_CPU_IRQ_ALL },		{ .p = cpu_all_int } },};static void __init dec_init_kn230(void){	/* IRQ routing. */	memcpy(&dec_interrupt, &kn230_interrupt,		sizeof(kn230_interrupt));	/* CPU IRQ priorities. */	memcpy(&cpu_mask_nr_tbl, &kn230_cpu_mask_nr_tbl,		sizeof(kn230_cpu_mask_nr_tbl));	mips_cpu_irq_init(DEC_CPU_IRQ_BASE);}				/* dec_init_kn230 *//* * Machine-specific initialisation for KN02, aka DS5000/200, aka 3max. */static int kn02_interrupt[DEC_NR_INTS] __initdata = {	[DEC_IRQ_CASCADE]	= DEC_CPU_IRQ_NR(KN02_CPU_INR_CASCADE),	[DEC_IRQ_AB_RECV]	= -1,	[DEC_IRQ_AB_XMIT]	= -1,	[DEC_IRQ_DZ11]		= KN02_IRQ_NR(KN02_CSR_INR_DZ11),	[DEC_IRQ_ASC]		= KN02_IRQ_NR(KN02_CSR_INR_ASC),	[DEC_IRQ_FLOPPY]	= -1,	[DEC_IRQ_FPU]		= DEC_CPU_IRQ_NR(DEC_CPU_INR_FPU),	[DEC_IRQ_HALT]		= -1,	[DEC_IRQ_ISDN]		= -1,	[DEC_IRQ_LANCE]		= KN02_IRQ_NR(KN02_CSR_INR_LANCE),	[DEC_IRQ_BUS]		= DEC_CPU_IRQ_NR(KN02_CPU_INR_BUS),	[DEC_IRQ_PSU]		= -1,	[DEC_IRQ_RTC]		= DEC_CPU_IRQ_NR(KN02_CPU_INR_RTC),	[DEC_IRQ_SCC0]		= -1,	[DEC_IRQ_SCC1]		= -1,	[DEC_IRQ_SII]		= -1,	[DEC_IRQ_TC0]		= KN02_IRQ_NR(KN02_CSR_INR_TC0),	[DEC_IRQ_TC1]		= KN02_IRQ_NR(KN02_CSR_INR_TC1),	[DEC_IRQ_TC2]		= KN02_IRQ_NR(KN02_CSR_INR_TC2),	[DEC_IRQ_TIMER]		= -1,	[DEC_IRQ_VIDEO]		= -1,	[DEC_IRQ_ASC_MERR]	= -1,	[DEC_IRQ_ASC_ERR]	= -1,	[DEC_IRQ_ASC_DMA]	= -1,	[DEC_IRQ_FLOPPY_ERR]	= -1,	[DEC_IRQ_ISDN_ERR]	= -1,	[DEC_IRQ_ISDN_RXDMA]	= -1,	[DEC_IRQ_ISDN_TXDMA]	= -1,	[DEC_IRQ_LANCE_MERR]	= -1,	[DEC_IRQ_SCC0A_RXERR]	= -1,	[DEC_IRQ_SCC0A_RXDMA]	= -1,	[DEC_IRQ_SCC0A_TXERR]	= -1,	[DEC_IRQ_SCC0A_TXDMA]	= -1,	[DEC_IRQ_AB_RXERR]	= -1,	[DEC_IRQ_AB_RXDMA]	= -1,	[DEC_IRQ_AB_TXERR]	= -1,	[DEC_IRQ_AB_TXDMA]	= -1,	[DEC_IRQ_SCC1A_RXERR]	= -1,	[DEC_IRQ_SCC1A_RXDMA]	= -1,	[DEC_IRQ_SCC1A_TXERR]	= -1,	[DEC_IRQ_SCC1A_TXDMA]	= -1,};static int_ptr kn02_cpu_mask_nr_tbl[][2] __initdata = {	{ { .i = DEC_CPU_IRQ_MASK(KN02_CPU_INR_BUS) },		{ .i = DEC_CPU_IRQ_NR(KN02_CPU_INR_BUS) } },	{ { .i = DEC_CPU_IRQ_MASK(KN02_CPU_INR_RTC) },		{ .i = DEC_CPU_IRQ_NR(KN02_CPU_INR_RTC) } },	{ { .i = DEC_CPU_IRQ_MASK(KN02_CPU_INR_CASCADE) },		{ .p = kn02_io_int } },	{ { .i = DEC_CPU_IRQ_ALL },		{ .p = cpu_all_int } },};static int_ptr kn02_asic_mask_nr_tbl[][2] __initdata = {	{ { .i = KN02_IRQ_MASK(KN02_CSR_INR_DZ11) },		{ .i = KN02_IRQ_NR(KN02_CSR_INR_DZ11) } },	{ { .i = KN02_IRQ_MASK(KN02_CSR_INR_ASC) },		{ .i = KN02_IRQ_NR(KN02_CSR_INR_ASC) } },	{ { .i = KN02_IRQ_MASK(KN02_CSR_INR_LANCE) },		{ .i = KN02_IRQ_NR(KN02_CSR_INR_LANCE) } },

⌨️ 快捷键说明

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