qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

irq.h (2109B)


      1 #ifndef QEMU_IRQ_H
      2 #define QEMU_IRQ_H
      3 
      4 /* Generic IRQ/GPIO pin infrastructure.  */
      5 
      6 #define TYPE_IRQ "irq"
      7 
      8 void qemu_set_irq(qemu_irq irq, int level);
      9 
     10 static inline void qemu_irq_raise(qemu_irq irq)
     11 {
     12     qemu_set_irq(irq, 1);
     13 }
     14 
     15 static inline void qemu_irq_lower(qemu_irq irq)
     16 {
     17     qemu_set_irq(irq, 0);
     18 }
     19 
     20 static inline void qemu_irq_pulse(qemu_irq irq)
     21 {
     22     qemu_set_irq(irq, 1);
     23     qemu_set_irq(irq, 0);
     24 }
     25 
     26 /* Returns an array of N IRQs. Each IRQ is assigned the argument handler and
     27  * opaque data.
     28  */
     29 qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
     30 
     31 /*
     32  * Allocates a single IRQ. The irq is assigned with a handler, an opaque
     33  * data and the interrupt number.
     34  */
     35 qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
     36 
     37 /* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
     38  * preserved. New IRQs are assigned the argument handler and opaque data.
     39  */
     40 qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
     41                                 void *opaque, int n);
     42 
     43 void qemu_free_irqs(qemu_irq *s, int n);
     44 void qemu_free_irq(qemu_irq irq);
     45 
     46 /* Returns a new IRQ with opposite polarity.  */
     47 qemu_irq qemu_irq_invert(qemu_irq irq);
     48 
     49 /* For internal use in qtest.  Similar to qemu_irq_split, but operating
     50    on an existing vector of qemu_irq.  */
     51 void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
     52 
     53 /**
     54  * qemu_irq_is_connected: Return true if IRQ line is wired up
     55  *
     56  * If a qemu_irq has a device on the other (receiving) end of it,
     57  * return true; otherwise return false.
     58  *
     59  * Usually device models don't need to care whether the machine model
     60  * has wired up their outbound qemu_irq lines, because functions like
     61  * qemu_set_irq() silently do nothing if there is nothing on the other
     62  * end of the line. However occasionally a device model will want to
     63  * provide default behaviour if its output is left floating, and
     64  * it can use this function to identify when that is the case.
     65  */
     66 static inline bool qemu_irq_is_connected(qemu_irq irq)
     67 {
     68     return irq != NULL;
     69 }
     70 
     71 #endif