9 #include <linux/types.h>
11 #include <linux/pci.h>
14 #include <linux/slab.h>
16 #include <asm/sn/addrs.h>
17 #include <asm/sn/intr.h>
56 widget = (nasid & 1) ?
97 widget = (nasid & 1) ?
101 sn_irq_info = kzalloc(
sizeof(
struct sn_irq_info),
GFP_KERNEL);
107 status =
sn_intr_alloc(nasid, widget, sn_irq_info, irq, -1, -1);
145 msg.
data = 0x100 + irq;
155 static int sn_set_msi_irq_affinity(
struct irq_data *
data,
165 struct sn_irq_info *new_irq_info;
169 cpu = cpumask_first(cpu_mask);
183 bus_addr = (
u64)(
msg.address_hi) << 32 | (
u64)(
msg.address_lo);
192 if (new_irq_info ==
NULL)
205 msg.address_hi = (
u32)(bus_addr >> 32);
206 msg.address_lo = (
u32)(bus_addr & 0x00000000ffffffff);
209 cpumask_copy(data->
affinity, cpu_mask);
215 static void sn_ack_msi_irq(
struct irq_data *data)
221 static int sn_msi_retrigger_irq(
struct irq_data *data)
229 static struct irq_chip sn_msi_chip = {
233 .irq_ack = sn_ack_msi_irq,
235 .irq_set_affinity = sn_set_msi_irq_affinity,
237 .irq_retrigger = sn_msi_retrigger_irq,