qemu/hw/irq.h
<<
>>
Prefs
   1#ifndef QEMU_IRQ_H
   2#define QEMU_IRQ_H
   3
   4/* Generic IRQ/GPIO pin infrastructure.  */
   5
   6typedef struct IRQState *qemu_irq;
   7
   8typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
   9
  10void qemu_set_irq(qemu_irq irq, int level);
  11
  12static inline void qemu_irq_raise(qemu_irq irq)
  13{
  14    qemu_set_irq(irq, 1);
  15}
  16
  17static inline void qemu_irq_lower(qemu_irq irq)
  18{
  19    qemu_set_irq(irq, 0);
  20}
  21
  22static inline void qemu_irq_pulse(qemu_irq irq)
  23{
  24    qemu_set_irq(irq, 1);
  25    qemu_set_irq(irq, 0);
  26}
  27
  28/* Returns an array of N IRQs. Each IRQ is assigned the argument handler and
  29 * opaque data.
  30 */
  31qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
  32
  33/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
  34 * preserved. New IRQs are assigned the argument handler and opaque data.
  35 */
  36qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
  37                                void *opaque, int n);
  38
  39void qemu_free_irqs(qemu_irq *s);
  40
  41/* Returns a new IRQ with opposite polarity.  */
  42qemu_irq qemu_irq_invert(qemu_irq irq);
  43
  44/* Returns a new IRQ which feeds into both the passed IRQs */
  45qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
  46
  47/* Returns a new IRQ set which connects 1:1 to another IRQ set, which
  48 * may be set later.
  49 */
  50qemu_irq *qemu_irq_proxy(qemu_irq **target, int n);
  51
  52/* For internal use in qtest.  Similar to qemu_irq_split, but operating
  53   on an existing vector of qemu_irq.  */
  54void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
  55void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n);
  56
  57#endif
  58