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