cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

irq.h (2295B)


      1#ifndef QEMU_IRQ_H
      2#define QEMU_IRQ_H
      3
      4/* Generic IRQ/GPIO pin infrastructure.  */
      5
      6#define TYPE_IRQ "irq"
      7
      8void qemu_set_irq(qemu_irq irq, int level);
      9
     10static inline void qemu_irq_raise(qemu_irq irq)
     11{
     12    qemu_set_irq(irq, 1);
     13}
     14
     15static inline void qemu_irq_lower(qemu_irq irq)
     16{
     17    qemu_set_irq(irq, 0);
     18}
     19
     20static 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 */
     29qemu_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 */
     35qemu_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 */
     40qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
     41                                void *opaque, int n);
     42
     43void qemu_free_irqs(qemu_irq *s, int n);
     44void qemu_free_irq(qemu_irq irq);
     45
     46/* Returns a new IRQ with opposite polarity.  */
     47qemu_irq qemu_irq_invert(qemu_irq irq);
     48
     49/* Returns a new IRQ which feeds into both the passed IRQs.
     50 * It's probably better to use the TYPE_SPLIT_IRQ device instead.
     51 */
     52qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
     53
     54/* For internal use in qtest.  Similar to qemu_irq_split, but operating
     55   on an existing vector of qemu_irq.  */
     56void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
     57
     58/**
     59 * qemu_irq_is_connected: Return true if IRQ line is wired up
     60 *
     61 * If a qemu_irq has a device on the other (receiving) end of it,
     62 * return true; otherwise return false.
     63 *
     64 * Usually device models don't need to care whether the machine model
     65 * has wired up their outbound qemu_irq lines, because functions like
     66 * qemu_set_irq() silently do nothing if there is nothing on the other
     67 * end of the line. However occasionally a device model will want to
     68 * provide default behaviour if its output is left floating, and
     69 * it can use this function to identify when that is the case.
     70 */
     71static inline bool qemu_irq_is_connected(qemu_irq irq)
     72{
     73    return irq != NULL;
     74}
     75
     76#endif