📄 setup.c
字号:
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 + -