00001
00002 #ifndef QEMU_HW_H
00003 #define QEMU_HW_H
00004
00005 #include "qemu-common.h"
00006 #include "irq.h"
00007
00008
00009
00010
00011
00012
00013
00014 typedef int (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf,
00015 int64_t pos, int size);
00016
00017
00018
00019
00020
00021 typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf,
00022 int64_t pos, int size);
00023
00024
00025 typedef int (QEMUFileCloseFunc)(void *opaque);
00026
00027
00028
00029
00030 typedef int (QEMUFileRateLimit)(void *opaque);
00031
00032 QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
00033 QEMUFileGetBufferFunc *get_buffer,
00034 QEMUFileCloseFunc *close,
00035 QEMUFileRateLimit *rate_limit);
00036 QEMUFile *qemu_fopen(const char *filename, const char *mode);
00037 QEMUFile *qemu_fopen_socket(int fd);
00038 QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
00039 QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
00040 void qemu_fflush(QEMUFile *f);
00041 int qemu_fclose(QEMUFile *f);
00042 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
00043 void qemu_put_byte(QEMUFile *f, int v);
00044
00045 static inline void qemu_put_ubyte(QEMUFile *f, unsigned int v)
00046 {
00047 qemu_put_byte(f, (int)v);
00048 }
00049
00050 #define qemu_put_sbyte qemu_put_byte
00051
00052 void qemu_put_be16(QEMUFile *f, unsigned int v);
00053 void qemu_put_be32(QEMUFile *f, unsigned int v);
00054 void qemu_put_be64(QEMUFile *f, uint64_t v);
00055 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
00056 int qemu_get_byte(QEMUFile *f);
00057
00058 static inline unsigned int qemu_get_ubyte(QEMUFile *f)
00059 {
00060 return (unsigned int)qemu_get_byte(f);
00061 }
00062
00063 #define qemu_get_sbyte qemu_get_byte
00064
00065 unsigned int qemu_get_be16(QEMUFile *f);
00066 unsigned int qemu_get_be32(QEMUFile *f);
00067 uint64_t qemu_get_be64(QEMUFile *f);
00068 int qemu_file_rate_limit(QEMUFile *f);
00069 int qemu_file_has_error(QEMUFile *f);
00070 void qemu_file_set_error(QEMUFile *f);
00071
00072
00073
00074
00075 void qemu_file_put_notify(QEMUFile *f);
00076
00077 static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
00078 {
00079 qemu_put_be64(f, *pv);
00080 }
00081
00082 static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
00083 {
00084 qemu_put_be32(f, *pv);
00085 }
00086
00087 static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
00088 {
00089 qemu_put_be16(f, *pv);
00090 }
00091
00092 static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
00093 {
00094 qemu_put_byte(f, *pv);
00095 }
00096
00097 static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
00098 {
00099 *pv = qemu_get_be64(f);
00100 }
00101
00102 static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
00103 {
00104 *pv = qemu_get_be32(f);
00105 }
00106
00107 static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
00108 {
00109 *pv = qemu_get_be16(f);
00110 }
00111
00112 static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
00113 {
00114 *pv = qemu_get_byte(f);
00115 }
00116
00117
00118 static inline void qemu_put_sbuffer(QEMUFile *f, const int8_t *buf, int size)
00119 {
00120 qemu_put_buffer(f, (const uint8_t *)buf, size);
00121 }
00122
00123 static inline void qemu_put_sbe16(QEMUFile *f, int v)
00124 {
00125 qemu_put_be16(f, (unsigned int)v);
00126 }
00127
00128 static inline void qemu_put_sbe32(QEMUFile *f, int v)
00129 {
00130 qemu_put_be32(f, (unsigned int)v);
00131 }
00132
00133 static inline void qemu_put_sbe64(QEMUFile *f, int64_t v)
00134 {
00135 qemu_put_be64(f, (uint64_t)v);
00136 }
00137
00138 static inline size_t qemu_get_sbuffer(QEMUFile *f, int8_t *buf, int size)
00139 {
00140 return qemu_get_buffer(f, (uint8_t *)buf, size);
00141 }
00142
00143 static inline int qemu_get_sbe16(QEMUFile *f)
00144 {
00145 return (int)qemu_get_be16(f);
00146 }
00147
00148 static inline int qemu_get_sbe32(QEMUFile *f)
00149 {
00150 return (int)qemu_get_be32(f);
00151 }
00152
00153 static inline int64_t qemu_get_sbe64(QEMUFile *f)
00154 {
00155 return (int64_t)qemu_get_be64(f);
00156 }
00157
00158 static inline void qemu_put_s8s(QEMUFile *f, const int8_t *pv)
00159 {
00160 qemu_put_8s(f, (const uint8_t *)pv);
00161 }
00162
00163 static inline void qemu_put_sbe16s(QEMUFile *f, const int16_t *pv)
00164 {
00165 qemu_put_be16s(f, (const uint16_t *)pv);
00166 }
00167
00168 static inline void qemu_put_sbe32s(QEMUFile *f, const int32_t *pv)
00169 {
00170 qemu_put_be32s(f, (const uint32_t *)pv);
00171 }
00172
00173 static inline void qemu_put_sbe64s(QEMUFile *f, const int64_t *pv)
00174 {
00175 qemu_put_be64s(f, (const uint64_t *)pv);
00176 }
00177
00178 static inline void qemu_get_s8s(QEMUFile *f, int8_t *pv)
00179 {
00180 qemu_get_8s(f, (uint8_t *)pv);
00181 }
00182
00183 static inline void qemu_get_sbe16s(QEMUFile *f, int16_t *pv)
00184 {
00185 qemu_get_be16s(f, (uint16_t *)pv);
00186 }
00187
00188 static inline void qemu_get_sbe32s(QEMUFile *f, int32_t *pv)
00189 {
00190 qemu_get_be32s(f, (uint32_t *)pv);
00191 }
00192
00193 static inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv)
00194 {
00195 qemu_get_be64s(f, (uint64_t *)pv);
00196 }
00197
00198 #ifdef NEED_CPU_H
00199 #if TARGET_LONG_BITS == 64
00200 #define qemu_put_betl qemu_put_be64
00201 #define qemu_get_betl qemu_get_be64
00202 #define qemu_put_betls qemu_put_be64s
00203 #define qemu_get_betls qemu_get_be64s
00204 #define qemu_put_sbetl qemu_put_sbe64
00205 #define qemu_get_sbetl qemu_get_sbe64
00206 #define qemu_put_sbetls qemu_put_sbe64s
00207 #define qemu_get_sbetls qemu_get_sbe64s
00208 #else
00209 #define qemu_put_betl qemu_put_be32
00210 #define qemu_get_betl qemu_get_be32
00211 #define qemu_put_betls qemu_put_be32s
00212 #define qemu_get_betls qemu_get_be32s
00213 #define qemu_put_sbetl qemu_put_sbe32
00214 #define qemu_get_sbetl qemu_get_sbe32
00215 #define qemu_put_sbetls qemu_put_sbe32s
00216 #define qemu_get_sbetls qemu_get_sbe32s
00217 #endif
00218 #endif
00219
00220 int64_t qemu_ftell(QEMUFile *f);
00221 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
00222
00223 typedef void SaveStateHandler(QEMUFile *f, void *opaque);
00224 typedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque);
00225 typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
00226
00227 int register_savevm(const char *idstr,
00228 int instance_id,
00229 int version_id,
00230 SaveStateHandler *save_state,
00231 LoadStateHandler *load_state,
00232 void *opaque);
00233
00234 int register_savevm_live(const char *idstr,
00235 int instance_id,
00236 int version_id,
00237 SaveLiveStateHandler *save_live_state,
00238 SaveStateHandler *save_state,
00239 LoadStateHandler *load_state,
00240 void *opaque);
00241
00242 void unregister_savevm(const char *idstr, void *opaque);
00243
00244 typedef void QEMUResetHandler(void *opaque);
00245
00246 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
00247
00248
00249
00250 typedef int QEMUBootSetHandler(void *opaque, const char *boot_device);
00251 void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque);
00252
00253
00254 typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
00255 typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
00256
00257 #endif