1/* 2 * Copyright IBM Corp. 2001,2008 3 * 4 * This file contains the IRQ specific code for hvc_console 5 * 6 */ 7 8#include <linux/interrupt.h> 9 10#include "hvc_console.h" 11 12static irqreturn_t hvc_handle_interrupt(int irq, void *dev_instance) 13{ 14 /* if hvc_poll request a repoll, then kick the hvcd thread */ 15 if (hvc_poll(dev_instance)) 16 hvc_kick(); 17 return IRQ_HANDLED; 18} 19 20/* 21 * For IRQ based systems these callbacks can be used 22 */ 23int notifier_add_irq(struct hvc_struct *hp, int irq) 24{ 25 int rc; 26 27 if (!irq) { 28 hp->irq_requested = 0; 29 return 0; 30 } 31 rc = request_irq(irq, hvc_handle_interrupt, 0, 32 "hvc_console", hp); 33 if (!rc) 34 hp->irq_requested = 1; 35 return rc; 36} 37 38void notifier_del_irq(struct hvc_struct *hp, int irq) 39{ 40 if (!hp->irq_requested) 41 return; 42 free_irq(irq, hp); 43 hp->irq_requested = 0; 44} 45 46void notifier_hangup_irq(struct hvc_struct *hp, int irq) 47{ 48 notifier_del_irq(hp, irq); 49} 50