Install keymaps from new location
[qemu] / hw / hw.h
diff --git a/hw/hw.h b/hw/hw.h
index 069c992..c835800 100644 (file)
--- a/hw/hw.h
+++ b/hw/hw.h
@@ -3,39 +3,92 @@
 #define QEMU_HW_H
 
 #include "qemu-common.h"
+
+#if defined(TARGET_PHYS_ADDR_BITS) && !defined(NEED_CPU_H)
+#include "targphys.h"
+#include "poison.h"
+#include "cpu-common.h"
+#endif
+
 #include "irq.h"
 
 /* VM Load/Save */
 
+/* This function writes a chunk of data to a file at the given position.
+ * The pos argument can be ignored if the file is only being used for
+ * streaming.  The handler should try to write all of the data it can.
+ */
+typedef int (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
+                                    int64_t pos, int size);
+
+/* Read a chunk of data from a file at the given position.  The pos argument
+ * can be ignored if the file is only be used for streaming.  The number of
+ * bytes actually read should be returned.
+ */
+typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
+                                    int64_t pos, int size);
+
+/* Close a file and return an error code */
+typedef int (QEMUFileCloseFunc)(void *opaque);
+
+/* Called to determine if the file has exceeded it's bandwidth allocation.  The
+ * bandwidth capping is a soft limit, not a hard limit.
+ */
+typedef int (QEMUFileRateLimit)(void *opaque);
+
+/* Called to change the current bandwidth allocation. This function must return
+ * the new actual bandwidth. It should be new_rate if everything goes ok, and
+ * the old rate otherwise
+ */
+typedef size_t (QEMUFileSetRateLimit)(void *opaque, size_t new_rate);
+
+QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
+                         QEMUFileGetBufferFunc *get_buffer,
+                         QEMUFileCloseFunc *close,
+                         QEMUFileRateLimit *rate_limit,
+                         QEMUFileSetRateLimit *set_rate_limit);
 QEMUFile *qemu_fopen(const char *filename, const char *mode);
+QEMUFile *qemu_fopen_socket(int fd);
+QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
+QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
+int qemu_popen_fd(QEMUFile *f);
 void qemu_fflush(QEMUFile *f);
-void qemu_fclose(QEMUFile *f);
-void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size);
-void qemu_put_byte(QEMUFile *f, int8_t v);
+int qemu_fclose(QEMUFile *f);
+void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
+void qemu_put_byte(QEMUFile *f, int v);
 
-static inline void qemu_put_ubyte(QEMUFile *f, uint8_t v)
+static inline void qemu_put_ubyte(QEMUFile *f, unsigned int v)
 {
-    qemu_put_byte(f, (int8_t)v);
+    qemu_put_byte(f, (int)v);
 }
 
 #define qemu_put_sbyte qemu_put_byte
 
-void qemu_put_be16(QEMUFile *f, uint16_t v);
-void qemu_put_be32(QEMUFile *f, uint32_t v);
+void qemu_put_be16(QEMUFile *f, unsigned int v);
+void qemu_put_be32(QEMUFile *f, unsigned int v);
 void qemu_put_be64(QEMUFile *f, uint64_t v);
-size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size);
-int8_t qemu_get_byte(QEMUFile *f);
+int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
+int qemu_get_byte(QEMUFile *f);
 
-static inline uint8_t qemu_get_ubyte(QEMUFile *f)
+static inline unsigned int qemu_get_ubyte(QEMUFile *f)
 {
-    return (uint8_t)qemu_get_byte(f);
+    return (unsigned int)qemu_get_byte(f);
 }
 
 #define qemu_get_sbyte qemu_get_byte
 
-uint16_t qemu_get_be16(QEMUFile *f);
-uint32_t qemu_get_be32(QEMUFile *f);
+unsigned int qemu_get_be16(QEMUFile *f);
+unsigned int qemu_get_be32(QEMUFile *f);
 uint64_t qemu_get_be64(QEMUFile *f);
+int qemu_file_rate_limit(QEMUFile *f);
+size_t qemu_file_set_rate_limit(QEMUFile *f, size_t new_rate);
+int qemu_file_has_error(QEMUFile *f);
+void qemu_file_set_error(QEMUFile *f);
+
+/* Try to send any outstanding data.  This function is useful when output is
+ * halted due to rate limiting or EAGAIN errors occur as it can be used to
+ * resume output. */
+void qemu_file_put_notify(QEMUFile *f);
 
 static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
 {
@@ -78,19 +131,19 @@ static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
 }
 
 // Signed versions for type safety
-static inline void qemu_put_sbuffer(QEMUFile *f, const int8_t *buf, size_t size)
+static inline void qemu_put_sbuffer(QEMUFile *f, const int8_t *buf, int size)
 {
     qemu_put_buffer(f, (const uint8_t *)buf, size);
 }
 
-static inline void qemu_put_sbe16(QEMUFile *f, int16_t v)
+static inline void qemu_put_sbe16(QEMUFile *f, int v)
 {
-    qemu_put_be16(f, (uint16_t)v);
+    qemu_put_be16(f, (unsigned int)v);
 }
 
-static inline void qemu_put_sbe32(QEMUFile *f, int32_t v)
+static inline void qemu_put_sbe32(QEMUFile *f, int v)
 {
-    qemu_put_be32(f, (uint32_t)v);
+    qemu_put_be32(f, (unsigned int)v);
 }
 
 static inline void qemu_put_sbe64(QEMUFile *f, int64_t v)
@@ -98,19 +151,19 @@ static inline void qemu_put_sbe64(QEMUFile *f, int64_t v)
     qemu_put_be64(f, (uint64_t)v);
 }
 
-static inline size_t qemu_get_sbuffer(QEMUFile *f, int8_t *buf, size_t size)
+static inline size_t qemu_get_sbuffer(QEMUFile *f, int8_t *buf, int size)
 {
     return qemu_get_buffer(f, (uint8_t *)buf, size);
 }
 
-static inline int16_t qemu_get_sbe16(QEMUFile *f)
+static inline int qemu_get_sbe16(QEMUFile *f)
 {
-    return (int16_t)qemu_get_be16(f);
+    return (int)qemu_get_be16(f);
 }
 
-static inline int32_t qemu_get_sbe32(QEMUFile *f)
+static inline int qemu_get_sbe32(QEMUFile *f)
 {
-    return (int32_t)qemu_get_be32(f);
+    return (int)qemu_get_be32(f);
 }
 
 static inline int64_t qemu_get_sbe64(QEMUFile *f)
@@ -184,6 +237,7 @@ int64_t qemu_ftell(QEMUFile *f);
 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
 
 typedef void SaveStateHandler(QEMUFile *f, void *opaque);
+typedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque);
 typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
 
 int register_savevm(const char *idstr,
@@ -193,9 +247,19 @@ int register_savevm(const char *idstr,
                     LoadStateHandler *load_state,
                     void *opaque);
 
+int register_savevm_live(const char *idstr,
+                         int instance_id,
+                         int version_id,
+                         SaveLiveStateHandler *save_live_state,
+                         SaveStateHandler *save_state,
+                         LoadStateHandler *load_state,
+                         void *opaque);
+
+void unregister_savevm(const char *idstr, void *opaque);
+
 typedef void QEMUResetHandler(void *opaque);
 
-void qemu_register_reset(QEMUResetHandler *func, void *opaque);
+void qemu_register_reset(QEMUResetHandler *func, int order, void *opaque);
 
 /* handler to set the boot_device for a specific type of QEMUMachine */
 /* return 0 if success */