linux/drivers/char/hvc_irq.c
<<
>>
Prefs
   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, IRQF_DISABLED,
  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