]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | // SPDX-License-Identifier: GPL-2.0 |
1da177e4 LT |
2 | /* |
3 | * Platform dependent support for HP simulator. | |
4 | * | |
5 | * Copyright (C) 1998-2001 Hewlett-Packard Co | |
6 | * Copyright (C) 1998-2001 David Mosberger-Tang <davidm@hpl.hp.com> | |
7 | */ | |
8 | ||
9 | #include <linux/init.h> | |
10 | #include <linux/kernel.h> | |
11 | #include <linux/sched.h> | |
12 | #include <linux/irq.h> | |
13 | ||
6efb6b77 JS |
14 | #include "hpsim_ssc.h" |
15 | ||
1da177e4 | 16 | static unsigned int |
35d75b0e | 17 | hpsim_irq_startup(struct irq_data *data) |
1da177e4 LT |
18 | { |
19 | return 0; | |
20 | } | |
21 | ||
22 | static void | |
35d75b0e | 23 | hpsim_irq_noop(struct irq_data *data) |
1da177e4 LT |
24 | { |
25 | } | |
26 | ||
d5dedd45 | 27 | static int |
35d75b0e | 28 | hpsim_set_affinity_noop(struct irq_data *d, const struct cpumask *b, bool f) |
1da177e4 | 29 | { |
d5dedd45 | 30 | return 0; |
1da177e4 LT |
31 | } |
32 | ||
fb824f48 | 33 | static struct irq_chip irq_type_hp_sim = { |
35d75b0e TG |
34 | .name = "hpsim", |
35 | .irq_startup = hpsim_irq_startup, | |
36 | .irq_shutdown = hpsim_irq_noop, | |
37 | .irq_enable = hpsim_irq_noop, | |
38 | .irq_disable = hpsim_irq_noop, | |
39 | .irq_ack = hpsim_irq_noop, | |
40 | .irq_set_affinity = hpsim_set_affinity_noop, | |
1da177e4 LT |
41 | }; |
42 | ||
6efb6b77 JS |
43 | static void hpsim_irq_set_chip(int irq) |
44 | { | |
45 | struct irq_chip *chip = irq_get_chip(irq); | |
46 | ||
47 | if (chip == &no_irq_chip) | |
48 | irq_set_chip(irq, &irq_type_hp_sim); | |
49 | } | |
50 | ||
51 | static void hpsim_connect_irq(int intr, int irq) | |
52 | { | |
53 | ia64_ssc(intr, irq, 0, 0, SSC_CONNECT_INTERRUPT); | |
54 | } | |
55 | ||
56 | int hpsim_get_irq(int intr) | |
57 | { | |
58 | int irq = assign_irq_vector(AUTO_ASSIGN); | |
59 | ||
60 | if (irq >= 0) { | |
61 | hpsim_irq_set_chip(irq); | |
62 | irq_set_handler(irq, handle_simple_irq); | |
63 | hpsim_connect_irq(intr, irq); | |
64 | } | |
65 | ||
66 | return irq; | |
67 | } | |
68 | ||
1da177e4 LT |
69 | void __init |
70 | hpsim_irq_init (void) | |
71 | { | |
1da177e4 LT |
72 | int i; |
73 | ||
6efb6b77 JS |
74 | for_each_active_irq(i) |
75 | hpsim_irq_set_chip(i); | |
1da177e4 | 76 | } |