18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Declarations for use by hardware emulation. */ 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef QEMU_HW_H 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_HW_H 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "qemu-common.h" 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "irq.h" 7462564f31bbdc9939bf1d2376e2782defa7ef655David 'Digit' Turner 8462564f31bbdc9939bf1d2376e2782defa7ef655David 'Digit' Turner#if defined(TARGET_PHYS_ADDRESS_SPACE_BITS) && !defined(NEED_CPU_H) 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "cpu.h" 10462564f31bbdc9939bf1d2376e2782defa7ef655David 'Digit' Turner#endif 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* VM Load/Save */ 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* This function writes a chunk of data to a file at the given position. 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * The pos argument can be ignored if the file is only being used for 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * streaming. The handler should try to write all of the data it can. 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int (QEMUFilePutBufferFunc)(void *opaque, const uint8_t *buf, 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t pos, int size); 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Read a chunk of data from a file at the given position. The pos argument 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * can be ignored if the file is only be used for streaming. The number of 235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * bytes actually read should be returned. 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf, 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int64_t pos, int size); 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Close a file and return an error code */ 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int (QEMUFileCloseFunc)(void *opaque); 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Called to determine if the file has exceeded it's bandwidth allocation. The 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * bandwidth capping is a soft limit, not a hard limit. 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int (QEMUFileRateLimit)(void *opaque); 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Called to change the current bandwidth allocation. This function must return 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * the new actual bandwidth. It should be new_rate if everything goes ok, and 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * the old rate otherwise 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 40986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnertypedef int64_t (QEMUFileSetRateLimit)(void *opaque, int64_t new_rate); 41986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnertypedef int64_t (QEMUFileGetRateLimit)(void *opaque); 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerQEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer, 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUFileGetBufferFunc *get_buffer, 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUFileCloseFunc *close, 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUFileRateLimit *rate_limit, 47a12820ef4aff2e2f6d3db9b704abee2c54d08f40David Turner QEMUFileSetRateLimit *set_rate_limit, 48a12820ef4aff2e2f6d3db9b704abee2c54d08f40David Turner QEMUFileGetRateLimit *get_rate_limit); 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectQEMUFile *qemu_fopen(const char *filename, const char *mode); 50986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' TurnerQEMUFile *qemu_fdopen(int fd, const char *mode); 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerQEMUFile *qemu_fopen_socket(int fd); 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerQEMUFile *qemu_popen(FILE *popen_file, const char *mode); 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerQEMUFile *qemu_popen_cmd(const char *command, const char *mode); 54986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerint qemu_stdio_fd(QEMUFile *f); 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_fflush(QEMUFile *f); 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_fclose(QEMUFile *f); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size); 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_put_byte(QEMUFile *f, int v); 595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_ubyte(QEMUFile *f, unsigned int v) 615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_byte(f, (int)v); 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_put_sbyte qemu_put_byte 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_put_be16(QEMUFile *f, unsigned int v); 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_put_be32(QEMUFile *f, unsigned int v); 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_put_be64(QEMUFile *f, uint64_t v); 70280afa072a7b829e581d884c2b3276530a6014b7David 'Digit' Turner#ifdef CONFIG_ANDROID 71871da2aa80687142bec00ef7c1112253c76c32bbOt ten Thijevoid qemu_put_float(QEMUFile *f, float v); 72280afa072a7b829e581d884c2b3276530a6014b7David 'Digit' Turner#endif 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size); 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint qemu_get_byte(QEMUFile *f); 755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline unsigned int qemu_get_ubyte(QEMUFile *f) 775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return (unsigned int)qemu_get_byte(f); 795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_get_sbyte qemu_get_byte 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectunsigned int qemu_get_be16(QEMUFile *f); 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectunsigned int qemu_get_be32(QEMUFile *f); 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectuint64_t qemu_get_be64(QEMUFile *f); 86280afa072a7b829e581d884c2b3276530a6014b7David 'Digit' Turner#ifdef CONFIG_ANDROID 87871da2aa80687142bec00ef7c1112253c76c32bbOt ten Thijefloat qemu_get_float(QEMUFile *f); 88280afa072a7b829e581d884c2b3276530a6014b7David 'Digit' Turner#endif 895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_file_rate_limit(QEMUFile *f); 90986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerint64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate); 91986acc9eba2cf7c9b468c2f84764fa478907ac66David 'Digit' Turnerint64_t qemu_file_get_rate_limit(QEMUFile *f); 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint qemu_file_has_error(QEMUFile *f); 935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_file_set_error(QEMUFile *f); 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Try to send any outstanding data. This function is useful when output is 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * halted due to rate limiting or EAGAIN errors occur as it can be used to 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * resume output. */ 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_file_put_notify(QEMUFile *f); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv) 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qemu_put_be64(f, *pv); 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv) 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qemu_put_be32(f, *pv); 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv) 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qemu_put_be16(f, *pv); 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv) 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qemu_put_byte(f, *pv); 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv) 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *pv = qemu_get_be64(f); 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv) 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *pv = qemu_get_be32(f); 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv) 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *pv = qemu_get_be16(f); 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void qemu_get_8s(QEMUFile *f, uint8_t *pv) 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *pv = qemu_get_byte(f); 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// Signed versions for type safety 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbuffer(QEMUFile *f, const int8_t *buf, int size) 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_buffer(f, (const uint8_t *)buf, size); 1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe16(QEMUFile *f, int v) 1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be16(f, (unsigned int)v); 1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe32(QEMUFile *f, int v) 1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be32(f, (unsigned int)v); 1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe64(QEMUFile *f, int64_t v) 1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be64(f, (uint64_t)v); 1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline size_t qemu_get_sbuffer(QEMUFile *f, int8_t *buf, int size) 1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return qemu_get_buffer(f, (uint8_t *)buf, size); 1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int qemu_get_sbe16(QEMUFile *f) 1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return (int)qemu_get_be16(f); 1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int qemu_get_sbe32(QEMUFile *f) 1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return (int)qemu_get_be32(f); 1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int64_t qemu_get_sbe64(QEMUFile *f) 1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return (int64_t)qemu_get_be64(f); 1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_s8s(QEMUFile *f, const int8_t *pv) 1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_8s(f, (const uint8_t *)pv); 1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe16s(QEMUFile *f, const int16_t *pv) 1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be16s(f, (const uint16_t *)pv); 1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe32s(QEMUFile *f, const int32_t *pv) 1925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be32s(f, (const uint32_t *)pv); 1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_put_sbe64s(QEMUFile *f, const int64_t *pv) 1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_put_be64s(f, (const uint64_t *)pv); 1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_get_s8s(QEMUFile *f, int8_t *pv) 2025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_get_8s(f, (uint8_t *)pv); 2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_get_sbe16s(QEMUFile *f, int16_t *pv) 2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_get_be16s(f, (uint16_t *)pv); 2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_get_sbe32s(QEMUFile *f, int32_t *pv) 2125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_get_be32s(f, (uint32_t *)pv); 2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv) 2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner qemu_get_be64s(f, (uint64_t *)pv); 2195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2213e92c2d49cb0e8752ce8c9a3c879c84ac3299061David 'Digit' Turner#ifdef CONFIG_ANDROID 2223e92c2d49cb0e8752ce8c9a3c879c84ac3299061David 'Digit' Turnervoid qemu_put_string(QEMUFile *f, const char* str); 2233e92c2d49cb0e8752ce8c9a3c879c84ac3299061David 'Digit' Turnerchar* qemu_get_string(QEMUFile *f); 2243e92c2d49cb0e8752ce8c9a3c879c84ac3299061David 'Digit' Turner#endif 2253e92c2d49cb0e8752ce8c9a3c879c84ac3299061David 'Digit' Turner 2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef NEED_CPU_H 2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64 2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_put_betl qemu_put_be64 2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_get_betl qemu_get_be64 2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_put_betls qemu_put_be64s 2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_get_betls qemu_get_be64s 2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_put_sbetl qemu_put_sbe64 2335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_get_sbetl qemu_get_sbe64 2345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_put_sbetls qemu_put_sbe64s 2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_get_sbetls qemu_get_sbe64s 2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_put_betl qemu_put_be32 2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_get_betl qemu_get_be32 2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_put_betls qemu_put_be32s 2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_get_betls qemu_get_be32s 2415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_put_sbetl qemu_put_sbe32 2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_get_sbetl qemu_get_sbe32 2435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_put_sbetls qemu_put_sbe32s 2445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define qemu_get_sbetls qemu_get_sbe32s 2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 2468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 2478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint64_t qemu_ftell(QEMUFile *f); 2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence); 2508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void SaveStateHandler(QEMUFile *f, void *opaque); 2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque); 2538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); 2548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint register_savevm(const char *idstr, 2568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int instance_id, 2578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int version_id, 2588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SaveStateHandler *save_state, 2598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project LoadStateHandler *load_state, 2608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque); 2618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint register_savevm_live(const char *idstr, 2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int instance_id, 2645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int version_id, 2655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SaveLiveStateHandler *save_live_state, 2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SaveStateHandler *save_state, 2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LoadStateHandler *load_state, 2685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void *opaque); 2695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid unregister_savevm(const char *idstr, void *opaque); 2715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void QEMUResetHandler(void *opaque); 2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_register_reset(QEMUResetHandler *func, int order, void *opaque); 2758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* handler to set the boot_device for a specific type of QEMUMachine */ 2778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* return 0 if success */ 2785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef int QEMUBootSetHandler(void *opaque, const char *boot_device); 2795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque); 2808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 282