embox

Форк
0
62 строки · 1.0 Кб
1
/**
2
 * @file
3
 * @brief MIPS build-in interrupt controller
4
 *
5
 * @date 04.07.2012
6
 * @author Anton Bondarev
7
 */
8

9
#include <assert.h>
10
#include <stddef.h>
11
#include <stdint.h>
12

13
#include <asm/mipsregs.h>
14
#include <drivers/irqctrl.h>
15
#include <kernel/irq.h>
16

17
void irqctrl_enable(unsigned int irq) {
18
	uint32_t c0;
19

20
	assert(irq_nr_valid(irq));
21

22
	c0 = mips_read_c0_status();
23
	c0 |= 1U << (irq + ST0_IRQ_MASK_OFFSET);
24
	mips_write_c0_status(c0);
25
}
26

27
void irqctrl_disable(unsigned int irq) {
28
	uint32_t c0;
29

30
	assert(irq_nr_valid(irq));
31

32
	c0 = mips_read_c0_status();
33
	c0 &= ~(1U << (irq + ST0_IRQ_MASK_OFFSET));
34
	mips_write_c0_status(c0);
35
}
36

37
void irqctrl_force(unsigned int irq) {
38
}
39

40
int irqctrl_pending(unsigned int irq) {
41
	return 0;
42
}
43

44
void irqctrl_eoi(unsigned int irq) {
45
}
46

47
unsigned int irqctrl_get_intid(void) {
48
	unsigned int irq;
49
	uint32_t pending;
50

51
	pending = (mips_read_c0_cause() & CAUSE_IM) >> ST0_IRQ_MASK_OFFSET;
52

53
	for (irq = 0; irq < IRQCTRL_IRQS_TOTAL; irq++) {
54
		if (pending & (1U << irq)) {
55
			return irq;
56
		}
57
	}
58

59
	return -1;
60
}
61

62
IRQCTRL_DEF(mips_intc, NULL);
63

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.