void __init arch_init_irq(void)
{
	int i;
	unsigned long cp0_status;
	au1xxx_irq_map_t *imp;
	extern au1xxx_irq_map_t au1xxx_irq_map[];
	extern au1xxx_irq_map_t au1xxx_ic0_map[];
	extern int au1xxx_nr_irqs;
	extern int au1xxx_ic0_nr_irqs;

	cp0_status = read_c0_status();
	set_except_vector(0, au1000_IRQ);

	/* Initialize interrupt controllers to a safe state.
	*/
	au_writel(0xffffffff, IC0_CFG0CLR);
	au_writel(0xffffffff, IC0_CFG1CLR);
	au_writel(0xffffffff, IC0_CFG2CLR);
	au_writel(0xffffffff, IC0_MASKCLR);
	au_writel(0xffffffff, IC0_ASSIGNSET);
	au_writel(0xffffffff, IC0_WAKECLR);
	au_writel(0xffffffff, IC0_SRCSET);
	au_writel(0xffffffff, IC0_FALLINGCLR);
	au_writel(0xffffffff, IC0_RISINGCLR);
	au_writel(0x00000000, IC0_TESTBIT);

	au_writel(0xffffffff, IC1_CFG0CLR);
	au_writel(0xffffffff, IC1_CFG1CLR);
	au_writel(0xffffffff, IC1_CFG2CLR);
	au_writel(0xffffffff, IC1_MASKCLR);
	au_writel(0xffffffff, IC1_ASSIGNSET);
	au_writel(0xffffffff, IC1_WAKECLR);
	au_writel(0xffffffff, IC1_SRCSET);
	au_writel(0xffffffff, IC1_FALLINGCLR);
	au_writel(0xffffffff, IC1_RISINGCLR);
	au_writel(0x00000000, IC1_TESTBIT);

	/* Initialize IC0, which is fixed per processor.
	*/
	imp = au1xxx_ic0_map;
	for (i=0; i<au1xxx_ic0_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	/* Now set up the irq mapping for the board.
	*/
	imp = au1xxx_irq_map;
	for (i=0; i<au1xxx_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	set_c0_status(ALLINTS);

	/* Board specific IRQ initialization.
	*/
	if (board_init_irq)
		(*board_init_irq)();
}
示例#2
0
文件: irq.c 项目: TitaniumBoy/lin
void __init init_IRQ(void)
{
	int i;
	unsigned long cp0_status;

	cp0_status = read_32bit_cp0_register(CP0_STATUS);
	memset(irq_desc, 0, sizeof(irq_desc));
	set_except_vector(0, au1000_IRQ);

	init_generic_irq();
	
	/* 
	 * Setup high priority interrupts on int_request0; low priority on
	 * int_request1
	 */
	for (i = 0; i <= NR_IRQS; i++) {
		switch (i) {
			case AU1000_MAC0_DMA_INT:
			case AU1000_MAC1_DMA_INT:
				setup_local_irq(i, INTC_INT_HIGH_LEVEL, 0);
				irq_desc[i].handler = &level_irq_type;
				break;
			default: /* active high, level interrupt */
				setup_local_irq(i, INTC_INT_HIGH_LEVEL, 1);
				irq_desc[i].handler = &level_irq_type;
				break;
		}
	}

	set_cp0_status(ALLINTS);
#ifdef CONFIG_REMOTE_DEBUG
	/* If local serial I/O used for debug port, enter kgdb at once */
	puts("Waiting for kgdb to connect...");
	set_debug_traps();
	breakpoint(); 
#endif
}
示例#3
0
void __init init_IRQ(void)
{
	int i;
	unsigned long cp0_status;
	au1xxx_irq_map_t *imp;
	extern au1xxx_irq_map_t au1xxx_irq_map[];
	extern int au1xxx_nr_irqs;

	cp0_status = read_c0_status();
	memset(irq_desc, 0, sizeof(irq_desc));
	set_except_vector(0, au1000_IRQ);

	init_generic_irq();

	for (i = 0; i <= AU1000_MAX_INTR; i++) {
		/* default is active high, level interrupt */
		setup_local_irq(i, INTC_INT_HIGH_LEVEL, 0);
		irq_desc[i].handler = &level_irq_type;
	}

	/* Now set up the irq mapping for the board.
	*/
	imp = au1xxx_irq_map;
	for (i=0; i<au1xxx_nr_irqs; i++) {

		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);

		switch (imp->im_type) {

		case INTC_INT_HIGH_LEVEL:
			irq_desc[imp->im_irq].handler = &level_irq_type;
			break;

		case INTC_INT_LOW_LEVEL:
			irq_desc[imp->im_irq].handler = &level_irq_type;
			break;

		case INTC_INT_RISE_EDGE:
			irq_desc[imp->im_irq].handler = &rise_edge_irq_type;
			break;

		case INTC_INT_FALL_EDGE:
			irq_desc[imp->im_irq].handler = &fall_edge_irq_type;
			break;

		case INTC_INT_RISE_AND_FALL_EDGE:
			irq_desc[imp->im_irq].handler = &either_edge_irq_type;
			break;

		default:
			panic("Unknown au1xxx irq map");
			break;
		}
		imp++;
	}

	set_c0_status(ALLINTS);

	/* Board specific IRQ initialization.
	*/
	if (board_init_irq)
		(*board_init_irq)();

#ifdef CONFIG_KGDB
	/* If local serial I/O used for debug port, enter kgdb at once */
	puts("Waiting for kgdb to connect...");
	set_debug_traps();
	breakpoint();
#endif
}
示例#4
0
void __init init_IRQ(void)
{
    int i;
    unsigned long cp0_status;
    extern char except_vec0_au1000;

    cp0_status = read_32bit_cp0_register(CP0_STATUS);
    memset(irq_desc, 0, sizeof(irq_desc));
    set_except_vector(0, au1000_IRQ);

    init_generic_irq();

    for (i = 0; i <= AU1000_MAX_INTR; i++) {
        switch (i) {
        case AU1000_UART0_INT:
        case AU1000_UART3_INT:
#ifdef CONFIG_MIPS_PB1000
        case AU1000_UART1_INT:
        case AU1000_UART2_INT:

        case AU1000_SSI0_INT:
        case AU1000_SSI1_INT:
#endif

#ifdef CONFIG_MIPS_PB1100
        case AU1000_UART1_INT:

        case AU1000_SSI0_INT:
        case AU1000_SSI1_INT:
#endif
        case AU1000_DMA_INT_BASE:
        case AU1000_DMA_INT_BASE+1:
        case AU1000_DMA_INT_BASE+2:
        case AU1000_DMA_INT_BASE+3:
        case AU1000_DMA_INT_BASE+4:
        case AU1000_DMA_INT_BASE+5:
        case AU1000_DMA_INT_BASE+6:
        case AU1000_DMA_INT_BASE+7:

        case AU1000_IRDA_TX_INT:
        case AU1000_IRDA_RX_INT:

        case AU1000_MAC0_DMA_INT:
#ifdef CONFIG_MIPS_PB1000
        case AU1000_MAC1_DMA_INT:
#endif
#ifdef CONFIG_MIPS_PB1500
        case AU1000_MAC1_DMA_INT:
#endif
        case AU1500_GPIO_204:

            setup_local_irq(i, INTC_INT_HIGH_LEVEL, 0);
            irq_desc[i].handler = &level_irq_type;
            break;

#ifdef CONFIG_MIPS_PB1000
        case AU1000_GPIO_15:
#endif
        case AU1000_USB_HOST_INT:
#ifdef CONFIG_MIPS_PB1500
        case AU1000_PCI_INTA:
        case AU1000_PCI_INTB:
        case AU1000_PCI_INTC:
        case AU1000_PCI_INTD:
        case AU1500_GPIO_201:
        case AU1500_GPIO_202:
        case AU1500_GPIO_203:
        case AU1500_GPIO_205:
        case AU1500_GPIO_207:
#endif

#ifdef CONFIG_MIPS_PB1100
        case AU1000_GPIO_9: // PCMCIA Card Fully_Interted#
        case AU1000_GPIO_10: // PCMCIA_STSCHG#
        case AU1000_GPIO_11: // PCMCIA_IRQ#
        case AU1000_GPIO_13: // DC_IRQ#
        case AU1000_GPIO_23: // 2-wire SCL
#endif
            setup_local_irq(i, INTC_INT_LOW_LEVEL, 0);
            irq_desc[i].handler = &level_irq_type;
            break;
        case AU1000_ACSYNC_INT:
        case AU1000_AC97C_INT:
        case AU1000_TOY_INT:
        case AU1000_TOY_MATCH0_INT:
        case AU1000_TOY_MATCH1_INT:
        case AU1000_USB_DEV_SUS_INT:
        case AU1000_USB_DEV_REQ_INT:
        case AU1000_RTC_INT:
        case AU1000_RTC_MATCH0_INT:
        case AU1000_RTC_MATCH1_INT:
        case AU1000_RTC_MATCH2_INT:
            setup_local_irq(i, INTC_INT_RISE_EDGE, 0);
            irq_desc[i].handler = &rise_edge_irq_type;
            break;

        // Careful if you change match 2 request!
        // The interrupt handler is called directly
        // from the low level dispatch code.
        case AU1000_TOY_MATCH2_INT:
            setup_local_irq(i, INTC_INT_RISE_EDGE, 1);
            irq_desc[i].handler = &rise_edge_irq_type;
            break;
        default: /* active high, level interrupt */
            setup_local_irq(i, INTC_INT_HIGH_LEVEL, 0);
            irq_desc[i].handler = &level_irq_type;
            break;
        }
    }

    set_cp0_status(ALLINTS);
#ifdef CONFIG_REMOTE_DEBUG
    /* If local serial I/O used for debug port, enter kgdb at once */
    puts("Waiting for kgdb to connect...");
    set_debug_traps();
    breakpoint();
#endif
}
示例#5
0
文件: irq.c 项目: NieHao/Tomato-RAF
void __init init_IRQ(void)
{
	int i;
	unsigned long cp0_status;
	au1xxx_irq_map_t *imp;
	extern au1xxx_irq_map_t au1xxx_irq_map[];
	extern au1xxx_irq_map_t au1xxx_ic0_map[];
	extern int au1xxx_nr_irqs;
	extern int au1xxx_ic0_nr_irqs;

	cp0_status = read_c0_status();
	memset(irq_desc, 0, sizeof(irq_desc));
	set_except_vector(0, au1000_IRQ);

	init_generic_irq();

	/* Initialize interrupt controllers to a safe state.
	*/
	au_writel(0xffffffff, IC0_CFG0CLR);
	au_writel(0xffffffff, IC0_CFG1CLR);
	au_writel(0xffffffff, IC0_CFG2CLR);
	au_writel(0xffffffff, IC0_MASKCLR);
	au_writel(0xffffffff, IC0_ASSIGNSET);
	au_writel(0xffffffff, IC0_WAKECLR);
	au_writel(0xffffffff, IC0_SRCSET);
	au_writel(0xffffffff, IC0_FALLINGCLR);
	au_writel(0xffffffff, IC0_RISINGCLR);
	au_writel(0x00000000, IC0_TESTBIT);

	au_writel(0xffffffff, IC1_CFG0CLR);
	au_writel(0xffffffff, IC1_CFG1CLR);
	au_writel(0xffffffff, IC1_CFG2CLR);
	au_writel(0xffffffff, IC1_MASKCLR);
	au_writel(0xffffffff, IC1_ASSIGNSET);
	au_writel(0xffffffff, IC1_WAKECLR);
	au_writel(0xffffffff, IC1_SRCSET);
	au_writel(0xffffffff, IC1_FALLINGCLR);
	au_writel(0xffffffff, IC1_RISINGCLR);
	au_writel(0x00000000, IC1_TESTBIT);

	/* Initialize IC0, which is fixed per processor.
	*/
	imp = au1xxx_ic0_map;
	for (i=0; i<au1xxx_ic0_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	/* Now set up the irq mapping for the board.
	*/
	imp = au1xxx_irq_map;
	for (i=0; i<au1xxx_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	set_c0_status(ALLINTS);

	/* Board specific IRQ initialization.
	*/
	if (board_init_irq)
		(*board_init_irq)();

#ifdef CONFIG_KGDB
	/* If local serial I/O used for debug port, enter kgdb at once */
	puts("Waiting for kgdb to connect...");
	set_debug_traps();
	breakpoint();
#endif
}
示例#6
0
文件: irq.c 项目: ForayJones/iods
void __init arch_init_irq(void)
{
	int i;
	struct au1xxx_irqmap *imp;
	extern struct au1xxx_irqmap au1xxx_irq_map[];
	extern struct au1xxx_irqmap au1xxx_ic0_map[];
	extern int au1xxx_nr_irqs;
	extern int au1xxx_ic0_nr_irqs;

	/*
	 * Initialize interrupt controllers to a safe state.
	 */
	au_writel(0xffffffff, IC0_CFG0CLR);
	au_writel(0xffffffff, IC0_CFG1CLR);
	au_writel(0xffffffff, IC0_CFG2CLR);
	au_writel(0xffffffff, IC0_MASKCLR);
	au_writel(0xffffffff, IC0_ASSIGNSET);
	au_writel(0xffffffff, IC0_WAKECLR);
	au_writel(0xffffffff, IC0_SRCSET);
	au_writel(0xffffffff, IC0_FALLINGCLR);
	au_writel(0xffffffff, IC0_RISINGCLR);
	au_writel(0x00000000, IC0_TESTBIT);

	au_writel(0xffffffff, IC1_CFG0CLR);
	au_writel(0xffffffff, IC1_CFG1CLR);
	au_writel(0xffffffff, IC1_CFG2CLR);
	au_writel(0xffffffff, IC1_MASKCLR);
	au_writel(0xffffffff, IC1_ASSIGNSET);
	au_writel(0xffffffff, IC1_WAKECLR);
	au_writel(0xffffffff, IC1_SRCSET);
	au_writel(0xffffffff, IC1_FALLINGCLR);
	au_writel(0xffffffff, IC1_RISINGCLR);
	au_writel(0x00000000, IC1_TESTBIT);

	mips_cpu_irq_init();

	/*
	 * Initialize IC0, which is fixed per processor.
	 */
	imp = au1xxx_ic0_map;
	for (i = 0; i < au1xxx_ic0_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	/*
	 * Now set up the irq mapping for the board.
	 */
	imp = au1xxx_irq_map;
	for (i = 0; i < au1xxx_nr_irqs; i++) {
		setup_local_irq(imp->im_irq, imp->im_type, imp->im_request);
		imp++;
	}

	set_c0_status(ALLINTS);

	/* Board specific IRQ initialization.
	*/
	if (board_init_irq)
		board_init_irq();
}