irq.h 969 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef QEMU_IRQ_H
  2. #define QEMU_IRQ_H
  3. /* Generic IRQ/GPIO pin infrastructure. */
  4. typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
  5. void qemu_set_irq(qemu_irq irq, int level);
  6. static inline void qemu_irq_raise(qemu_irq irq)
  7. {
  8. qemu_set_irq(irq, 1);
  9. }
  10. static inline void qemu_irq_lower(qemu_irq irq)
  11. {
  12. qemu_set_irq(irq, 0);
  13. }
  14. static inline void qemu_irq_pulse(qemu_irq irq)
  15. {
  16. qemu_set_irq(irq, 1);
  17. qemu_set_irq(irq, 0);
  18. }
  19. /* Returns an array of N IRQs. */
  20. qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
  21. void qemu_free_irqs(qemu_irq *s);
  22. /* Returns a new IRQ with opposite polarity. */
  23. qemu_irq qemu_irq_invert(qemu_irq irq);
  24. /* Returns a new IRQ which feeds into both the passed IRQs */
  25. qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
  26. /* Returns a new IRQ set which connects 1:1 to another IRQ set, which
  27. * may be set later.
  28. */
  29. qemu_irq *qemu_irq_proxy(qemu_irq **target, int n);
  30. #endif