linux/arch/um/kernel/sigio.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{linux.intel,addtoit}.com)
   3 * Licensed under the GPL
   4 */
   5
   6#include <linux/interrupt.h>
   7#include "irq_kern.h"
   8#include "os.h"
   9#include "sigio.h"
  10
  11/* Protected by sigio_lock() called from write_sigio_workaround */
  12static int sigio_irq_fd = -1;
  13
  14static irqreturn_t sigio_interrupt(int irq, void *data)
  15{
  16        char c;
  17
  18        os_read_file(sigio_irq_fd, &c, sizeof(c));
  19        reactivate_fd(sigio_irq_fd, SIGIO_WRITE_IRQ);
  20        return IRQ_HANDLED;
  21}
  22
  23int write_sigio_irq(int fd)
  24{
  25        int err;
  26
  27        err = um_request_irq(SIGIO_WRITE_IRQ, fd, IRQ_READ, sigio_interrupt,
  28                             IRQF_SAMPLE_RANDOM, "write sigio",
  29                             NULL);
  30        if (err) {
  31                printk(KERN_ERR "write_sigio_irq : um_request_irq failed, "
  32                       "err = %d\n", err);
  33                return -1;
  34        }
  35        sigio_irq_fd = fd;
  36        return 0;
  37}
  38
  39/* These are called from os-Linux/sigio.c to protect its pollfds arrays. */
  40static DEFINE_SPINLOCK(sigio_spinlock);
  41
  42void sigio_lock(void)
  43{
  44        spin_lock(&sigio_spinlock);
  45}
  46
  47void sigio_unlock(void)
  48{
  49        spin_unlock(&sigio_spinlock);
  50}
  51
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.