コード例 #1
0
ファイル: interrupts.c プロジェクト: ArthurMurata/lk
void platform_init_interrupts(void)
{
	unsigned int i;

	// reset the controller
	*REG32(INTC_SYSCONFIG) = 0x2; // start a reset
	while ((*REG32(INTC_SYSSTATUS) & 0x1) == 0)
		;

	// mask all interrupts
	*REG32(INTC_MIR(0)) = 0xffffffff;
	*REG32(INTC_MIR(1)) = 0xffffffff;
	*REG32(INTC_MIR(2)) = 0xffffffff;

	// set up each of the interrupts
	for (i = 0; i < INT_VECTORS; i++) {
		// set each vector up as high priority IRQ
		*REG32(INTC_ILR(i)) = 0;
		//*ICReg(i / 32, INTCON_ILR_BASE + 4*(i%32)) = ((level_trigger[i/32] & (1<<(i%32))) ? (1<<1) : (0<<1)) | 0;
	}

	// disable the priority threshold
	*REG32(INTC_THRESHOLD) = 0xff;

	// clear any pending sw interrupts
	*REG32(INTC_ISR_CLEAR(0)) = 0xffffffff;
	*REG32(INTC_ISR_CLEAR(1)) = 0xffffffff;
	*REG32(INTC_ISR_CLEAR(2)) = 0xffffffff;

	// globally unmask interrupts
	*REG32(INTC_CONTROL) = 3; // reset and enable the controller
}
コード例 #2
0
ファイル: intc.c プロジェクト: JackieXie168/xvisor-next
static void intc_mask(struct vmm_host_irq *irq)
{
	intc_write(INTC_MIR((irq->num / INTC_BITS_PER_REG)),
		   0x1 << (irq->num & (INTC_BITS_PER_REG - 1)));
}