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

📄 setup.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DSACK0|VAC_CTRL_DSACK1|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL0_CTRL);	vac_outw(VAC_CTRL_IOWR|		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DSACK0|VAC_CTRL_DSACK1|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL1_CTRL);	vac_outw(VAC_CTRL_IOWR|		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DSACK0|VAC_CTRL_DSACK1|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL2_CTRL);	vac_outw(VAC_CTRL_IOWR|		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DSACK0|VAC_CTRL_DSACK1|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL3_CTRL);	vac_outw(VAC_CTRL_IOWR|		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL4_CTRL);	vac_outw(VAC_CTRL_IOWR|		 VAC_CTRL_DELAY_IOWR(3)|		 VAC_CTRL_DELAY_IORD(3)|		 VAC_CTRL_RECOVERY_IOSELI(2)|		 VAC_CTRL_DELAY_DSACKI(8),VAC_IOSEL5_CTRL);        vac_show();}static void __init vac_start(void){	vac_outw(0, VAC_ID);	vac_outw(VAC_INT_CTRL_TIMER_DISABLE|		 VAC_INT_CTRL_UART_B_DISABLE|		 VAC_INT_CTRL_UART_A_DISABLE|		 VAC_INT_CTRL_MBOX_DISABLE|		 VAC_INT_CTRL_PIO4_DISABLE|		 VAC_INT_CTRL_PIO7_DISABLE|		 VAC_INT_CTRL_PIO8_DISABLE|		 VAC_INT_CTRL_PIO9_DISABLE,VAC_INT_CTRL);	vac_outw(VAC_INT_CTRL_TIMER_PIO10|		 VAC_INT_CTRL_UART_B_PIO7|		 VAC_INT_CTRL_UART_A_PIO7,VAC_INT_CTRL);	/* 	 *  Set quadro speed for both UARTs.	 *  To do it we need use formulae from VIC/VAC manual,	 *  keeping in mind Baget's 50MHz frequency...	 */	vac_outw((500000/(384*16))<<8,VAC_CPU_CLK_DIV); }static void __init vic_show(void){	unsigned char val;	char *timeout[]  = { "4", "16", "32", "64", "128", "256", "disabled" };	char *deadlock[] = { "[dedlk only]", "[dedlk only]", 			     "[dedlk], [halt w/ rmc], [lberr]",			     "[dedlk], [halt w/o rmc], [lberr]" };	val = vic_inb(VIC_IFACE_CFG);	if (val & VIC_IFACE_CFG_VME)		printk("VMEbus controller ");	if (val & VIC_IFACE_CFG_TURBO)		printk("turbo ");	if (val & VIC_IFACE_CFG_MSTAB)		printk("metastability delay ");	printk("%s ",	       deadlock[VIC_IFACE_CFG_DEADLOCK_VAL(val)]);		printk("interrupts: ");	val = vic_inb(VIC_ERR_INT);	if (!(val & VIC_ERR_INT_SYSFAIL))		printk("[sysfail]");	if (!(val & VIC_ERR_INT_TIMO))		printk("[timeout]");	if (!(val & VIC_ERR_INT_WRPOST))		printk("[write post]");	if (!(val & VIC_ERR_INT_ACFAIL))		printk("[acfail] ");	printk("\n");		printk("timeouts: ");	val = vic_inb(VIC_XFER_TIMO);	printk("local %s, vme %s ",	       timeout[VIC_XFER_TIMO_LOCAL_PERIOD_VAL(val)],	       timeout[VIC_XFER_TIMO_VME_PERIOD_VAL(val)]);	if (val & VIC_XFER_TIMO_VME)		printk("acquisition ");	if (val & VIC_XFER_TIMO_ARB)		printk("arbitration ");	printk("\n");	val = vic_inb(VIC_LOCAL_TIM);	printk("pas time: (%d,%d), ds time: %d\n",	       VIC_LOCAL_TIM_PAS_ASSERT_VAL(val),	       VIC_LOCAL_TIM_PAS_DEASSERT_VAL(val),	       VIC_LOCAT_TIM_DS_DEASSERT_VAL(val));	val = vic_inb(VIC_BXFER_DEF);	printk("dma: ");	if (val & VIC_BXFER_DEF_DUAL)		printk("[dual path]");	if (val & VIC_BXFER_DEF_LOCAL_CROSS)		printk("[local boundary cross]");	if (val & VIC_BXFER_DEF_VME_CROSS)		printk("[vme boundary cross]");	}static void __init vic_init(void){	 unsigned char id = vic_inb(VIC_ID);	 if ((id & 0xf0) != 0xf0)		 panic("VIC not found");	 printk(" VIC068A Rev. %X: ", id & 0x0f);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE,VIC_VME_II);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE,VIC_VME_INT1);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE,VIC_VME_INT2);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE,VIC_VME_INT3);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE,VIC_VME_INT4);/*	 	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE, VIC_VME_INT5);*/	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE, VIC_VME_INT6);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE, VIC_VME_INT7);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_DISABLE, VIC_DMA_INT);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_LOW|VIC_INT_DISABLE, VIC_LINT1);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_HIGH|VIC_INT_DISABLE, VIC_LINT2);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_HIGH|VIC_INT_DISABLE, VIC_LINT3);	 vic_outb(VIC_INT_IPL(3)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_LOW|VIC_INT_DISABLE, VIC_LINT4);/*	 	 vic_outb(VIC_INT_IPL(3)|VIC_INT_NOAUTO|VIC_INT_LEVEL|		  VIC_INT_LOW|VIC_INT_DISABLE, VIC_LINT5);*/	 vic_outb(VIC_INT_IPL(6)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_LOW|VIC_INT_DISABLE, VIC_LINT6);	 vic_outb(VIC_INT_IPL(6)|VIC_INT_NOAUTO|VIC_INT_EDGE|		  VIC_INT_LOW|VIC_INT_DISABLE, VIC_LINT7);	 vic_outb(VIC_INT_IPL(3)|		  VIC_INT_SWITCH(0)|		  VIC_INT_SWITCH(1)|		  VIC_INT_SWITCH(2)|		  VIC_INT_SWITCH(3), VIC_ICGS_INT);	 vic_outb(VIC_INT_IPL(3)|		  VIC_INT_SWITCH(0)|		  VIC_INT_SWITCH(1)|		  VIC_INT_SWITCH(2)|		  VIC_INT_SWITCH(3), VIC_ICMS_INT);	 vic_outb(VIC_INT_IPL(6)|		  VIC_ERR_INT_SYSFAIL|		  VIC_ERR_INT_TIMO|		  VIC_ERR_INT_WRPOST|		  VIC_ERR_INT_ACFAIL, VIC_ERR_INT);	 vic_outb(VIC_ICxS_BASE_ID(0xf), VIC_ICGS_BASE);	 vic_outb(VIC_ICxS_BASE_ID(0xe), VIC_ICMS_BASE);	 vic_outb(VIC_LOCAL_BASE_ID(0x6), VIC_LOCAL_BASE);	 vic_outb(VIC_ERR_BASE_ID(0x3), VIC_ERR_BASE);	 vic_outb(VIC_XFER_TIMO_VME_PERIOD_32|		  VIC_XFER_TIMO_LOCAL_PERIOD_32, VIC_XFER_TIMO);	 vic_outb(VIC_LOCAL_TIM_PAS_ASSERT(2)|		  VIC_LOCAT_TIM_DS_DEASSERT(1)|		  VIC_LOCAL_TIM_PAS_DEASSERT(1), VIC_LOCAL_TIM);	 vic_outb(VIC_BXFER_DEF_VME_CROSS|		  VIC_BXFER_DEF_LOCAL_CROSS|		  VIC_BXFER_DEF_AMSR|		  VIC_BXFER_DEF_DUAL, VIC_BXFER_DEF);	 vic_outb(VIC_SSxCR0_LOCAL_XFER_SINGLE|		  VIC_SSxCR0_A32|VIC_SSxCR0_D32|		  VIC_SS0CR0_TIMER_FREQ_NONE, VIC_SS0CR0);	 vic_outb(VIC_SSxCR1_TF1(0xf)|		  VIC_SSxCR1_TF2(0xf), VIC_SS0CR1);	 vic_outb(VIC_SSxCR0_LOCAL_XFER_SINGLE|		  VIC_SSxCR0_A24|VIC_SSxCR0_D32, VIC_SS1CR0);	 vic_outb(VIC_SSxCR1_TF1(0xf)|		  VIC_SSxCR1_TF2(0xf), VIC_SS1CR1);         vic_outb(VIC_IFACE_CFG_NOHALT|		  VIC_IFACE_CFG_NOTURBO, VIC_IFACE_CFG);	 vic_outb(VIC_AMS_CODE(0), VIC_AMS);	 vic_outb(VIC_BXFER_CTRL_INTERLEAVE(0), VIC_BXFER_CTRL);	 vic_outb(0, VIC_BXFER_LEN_LO);	 vic_outb(0, VIC_BXFER_LEN_HI);	 vic_outb(VIC_REQ_CFG_FAIRNESS_DISABLED|		  VIC_REQ_CFG_LEVEL(3)|		  VIC_REQ_CFG_RR_ARBITRATION, VIC_REQ_CFG);	 vic_outb(VIC_RELEASE_BLKXFER_BLEN(0)|		  VIC_RELEASE_RWD, VIC_RELEASE);	 vic_outb(VIC_IC6_RUN, VIC_IC6);	 vic_outb(0, VIC_IC7);	 	 vic_show();}static void vic_start(void){	vic_outb(VIC_INT_IPL(3)|		 VIC_INT_NOAUTO|		 VIC_INT_EDGE|		 VIC_INT_HIGH|		 VIC_INT_ENABLE, VIC_LINT7);}void __init baget_irq_setup(void){	extern void bagetIRQ(void);        /* Now, it's safe to set the exception vector. */	set_except_vector(0, bagetIRQ);}extern void baget_machine_restart(char *command);extern void baget_machine_halt(void);extern void baget_machine_power_off(void); void __init baget_setup(void){	printk("BT23/63-201n found.\n");	*BAGET_WRERR_ACK = 0;	irq_setup = baget_irq_setup;        _machine_restart   = baget_machine_restart;        _machine_halt      = baget_machine_halt;        _machine_power_off = baget_machine_power_off;	vac_init();	vic_init();	vac_start();	vic_start();}

⌨️ 快捷键说明

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