]> git.proxmox.com Git - qemu.git/blobdiff - qemu-coroutine.h
acpi_piix4: Re-define PCI hotplug eject register read
[qemu.git] / qemu-coroutine.h
index b8fc4f43328c0b5e482bd425888d7c2a599b1e35..34c15d41169ebb3aab061861c593ac60b4b58b51 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <stdbool.h>
 #include "qemu-queue.h"
+#include "qemu-timer.h"
 
 /**
  * Coroutines are a mechanism for stack switching and can be used for
@@ -117,6 +118,12 @@ void qemu_co_queue_init(CoQueue *queue);
  */
 void coroutine_fn qemu_co_queue_wait(CoQueue *queue);
 
+/**
+ * Adds the current coroutine to the head of the CoQueue and transfers control to the
+ * caller of the coroutine.
+ */
+void coroutine_fn qemu_co_queue_wait_insert_head(CoQueue *queue);
+
 /**
  * Restarts the next coroutine in the CoQueue and removes it from the queue.
  *
@@ -124,6 +131,11 @@ void coroutine_fn qemu_co_queue_wait(CoQueue *queue);
  */
 bool qemu_co_queue_next(CoQueue *queue);
 
+/**
+ * Restarts all coroutines in the CoQueue and leaves the queue empty.
+ */
+void qemu_co_queue_restart_all(CoQueue *queue);
+
 /**
  * Checks if the CoQueue is empty.
  */
@@ -188,4 +200,12 @@ void qemu_co_rwlock_wrlock(CoRwlock *lock);
  */
 void qemu_co_rwlock_unlock(CoRwlock *lock);
 
+/**
+ * Yield the coroutine for a given duration
+ *
+ * Note this function uses timers and hence only works when a main loop is in
+ * use.  See main-loop.h and do not use from qemu-tool programs.
+ */
+void coroutine_fn co_sleep_ns(QEMUClock *clock, int64_t ns);
+
 #endif /* QEMU_COROUTINE_H */