Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/m68k/apollo/dn_ints.c
26439 views
1
// SPDX-License-Identifier: GPL-2.0
2
#include <linux/interrupt.h>
3
#include <linux/irq.h>
4
5
#include <asm/traps.h>
6
#include <asm/apollohw.h>
7
8
#include "apollo.h"
9
10
static unsigned int apollo_irq_startup(struct irq_data *data)
11
{
12
unsigned int irq = data->irq;
13
14
if (irq < 8)
15
*(volatile unsigned char *)(pica+1) &= ~(1 << irq);
16
else
17
*(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
18
return 0;
19
}
20
21
static void apollo_irq_shutdown(struct irq_data *data)
22
{
23
unsigned int irq = data->irq;
24
25
if (irq < 8)
26
*(volatile unsigned char *)(pica+1) |= (1 << irq);
27
else
28
*(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
29
}
30
31
static void apollo_irq_eoi(struct irq_data *data)
32
{
33
*(volatile unsigned char *)(pica) = 0x20;
34
*(volatile unsigned char *)(picb) = 0x20;
35
}
36
37
static struct irq_chip apollo_irq_chip = {
38
.name = "apollo",
39
.irq_startup = apollo_irq_startup,
40
.irq_shutdown = apollo_irq_shutdown,
41
.irq_eoi = apollo_irq_eoi,
42
};
43
44
45
void __init dn_init_IRQ(void)
46
{
47
m68k_setup_user_interrupt(VEC_USER + 96, 16);
48
m68k_setup_irq_controller(&apollo_irq_chip, handle_fasteoi_irq,
49
IRQ_APOLLO, 16);
50
}
51
52