xref: /qemu/include/migration/qemu-file-types.h (revision 7f5b50a4)
108a0aee1SJuan Quintela /*
208a0aee1SJuan Quintela  * QEMU System Emulator
308a0aee1SJuan Quintela  *
408a0aee1SJuan Quintela  * Copyright (c) 2003-2008 Fabrice Bellard
508a0aee1SJuan Quintela  *
608a0aee1SJuan Quintela  * Permission is hereby granted, free of charge, to any person obtaining a copy
708a0aee1SJuan Quintela  * of this software and associated documentation files (the "Software"), to deal
808a0aee1SJuan Quintela  * in the Software without restriction, including without limitation the rights
908a0aee1SJuan Quintela  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1008a0aee1SJuan Quintela  * copies of the Software, and to permit persons to whom the Software is
1108a0aee1SJuan Quintela  * furnished to do so, subject to the following conditions:
1208a0aee1SJuan Quintela  *
1308a0aee1SJuan Quintela  * The above copyright notice and this permission notice shall be included in
1408a0aee1SJuan Quintela  * all copies or substantial portions of the Software.
1508a0aee1SJuan Quintela  *
1608a0aee1SJuan Quintela  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1708a0aee1SJuan Quintela  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1808a0aee1SJuan Quintela  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1908a0aee1SJuan Quintela  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2008a0aee1SJuan Quintela  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2108a0aee1SJuan Quintela  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2208a0aee1SJuan Quintela  * THE SOFTWARE.
2308a0aee1SJuan Quintela  */
2408a0aee1SJuan Quintela 
2558ea30f5SMarkus Armbruster #ifndef MIGRATION_QEMU_FILE_TYPES_H
2658ea30f5SMarkus Armbruster #define MIGRATION_QEMU_FILE_TYPES_H
2708a0aee1SJuan Quintela 
28d8903441SMarc-André Lureau int qemu_file_get_error(QEMUFile *f);
29d8903441SMarc-André Lureau 
3008a0aee1SJuan Quintela void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size);
3108a0aee1SJuan Quintela void qemu_put_byte(QEMUFile *f, int v);
3208a0aee1SJuan Quintela 
3308a0aee1SJuan Quintela #define qemu_put_sbyte qemu_put_byte
3408a0aee1SJuan Quintela 
3508a0aee1SJuan Quintela void qemu_put_be16(QEMUFile *f, unsigned int v);
3608a0aee1SJuan Quintela void qemu_put_be32(QEMUFile *f, unsigned int v);
3708a0aee1SJuan Quintela void qemu_put_be64(QEMUFile *f, uint64_t v);
38394b9407SPaolo Bonzini size_t coroutine_mixed_fn qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size);
3908a0aee1SJuan Quintela 
4008a0aee1SJuan Quintela int qemu_get_byte(QEMUFile *f);
4108a0aee1SJuan Quintela 
qemu_get_ubyte(QEMUFile * f)4208a0aee1SJuan Quintela static inline unsigned int qemu_get_ubyte(QEMUFile *f)
4308a0aee1SJuan Quintela {
4408a0aee1SJuan Quintela     return (unsigned int)qemu_get_byte(f);
4508a0aee1SJuan Quintela }
4608a0aee1SJuan Quintela 
4708a0aee1SJuan Quintela #define qemu_get_sbyte qemu_get_byte
4808a0aee1SJuan Quintela 
4908a0aee1SJuan Quintela unsigned int qemu_get_be16(QEMUFile *f);
5008a0aee1SJuan Quintela unsigned int qemu_get_be32(QEMUFile *f);
5108a0aee1SJuan Quintela uint64_t qemu_get_be64(QEMUFile *f);
5208a0aee1SJuan Quintela 
537f5b50a4SFabiano Rosas bool qemu_file_is_seekable(QEMUFile *f);
547f5b50a4SFabiano Rosas 
qemu_put_be64s(QEMUFile * f,const uint64_t * pv)5508a0aee1SJuan Quintela static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
5608a0aee1SJuan Quintela {
5708a0aee1SJuan Quintela     qemu_put_be64(f, *pv);
5808a0aee1SJuan Quintela }
5908a0aee1SJuan Quintela 
qemu_put_be32s(QEMUFile * f,const uint32_t * pv)6008a0aee1SJuan Quintela static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
6108a0aee1SJuan Quintela {
6208a0aee1SJuan Quintela     qemu_put_be32(f, *pv);
6308a0aee1SJuan Quintela }
6408a0aee1SJuan Quintela 
qemu_put_be16s(QEMUFile * f,const uint16_t * pv)6508a0aee1SJuan Quintela static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
6608a0aee1SJuan Quintela {
6708a0aee1SJuan Quintela     qemu_put_be16(f, *pv);
6808a0aee1SJuan Quintela }
6908a0aee1SJuan Quintela 
qemu_put_8s(QEMUFile * f,const uint8_t * pv)7008a0aee1SJuan Quintela static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
7108a0aee1SJuan Quintela {
7208a0aee1SJuan Quintela     qemu_put_byte(f, *pv);
7308a0aee1SJuan Quintela }
7408a0aee1SJuan Quintela 
qemu_get_be64s(QEMUFile * f,uint64_t * pv)7508a0aee1SJuan Quintela static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
7608a0aee1SJuan Quintela {
7708a0aee1SJuan Quintela     *pv = qemu_get_be64(f);
7808a0aee1SJuan Quintela }
7908a0aee1SJuan Quintela 
qemu_get_be32s(QEMUFile * f,uint32_t * pv)8008a0aee1SJuan Quintela static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
8108a0aee1SJuan Quintela {
8208a0aee1SJuan Quintela     *pv = qemu_get_be32(f);
8308a0aee1SJuan Quintela }
8408a0aee1SJuan Quintela 
qemu_get_be16s(QEMUFile * f,uint16_t * pv)8508a0aee1SJuan Quintela static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
8608a0aee1SJuan Quintela {
8708a0aee1SJuan Quintela     *pv = qemu_get_be16(f);
8808a0aee1SJuan Quintela }
8908a0aee1SJuan Quintela 
qemu_get_8s(QEMUFile * f,uint8_t * pv)9008a0aee1SJuan Quintela static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
9108a0aee1SJuan Quintela {
9208a0aee1SJuan Quintela     *pv = qemu_get_byte(f);
9308a0aee1SJuan Quintela }
9408a0aee1SJuan Quintela 
9508a0aee1SJuan Quintela /* Signed versions for type safety */
qemu_put_sbe16(QEMUFile * f,int v)9608a0aee1SJuan Quintela static inline void qemu_put_sbe16(QEMUFile *f, int v)
9708a0aee1SJuan Quintela {
9808a0aee1SJuan Quintela     qemu_put_be16(f, (unsigned int)v);
9908a0aee1SJuan Quintela }
10008a0aee1SJuan Quintela 
qemu_put_sbe32(QEMUFile * f,int v)10108a0aee1SJuan Quintela static inline void qemu_put_sbe32(QEMUFile *f, int v)
10208a0aee1SJuan Quintela {
10308a0aee1SJuan Quintela     qemu_put_be32(f, (unsigned int)v);
10408a0aee1SJuan Quintela }
10508a0aee1SJuan Quintela 
qemu_put_sbe64(QEMUFile * f,int64_t v)10608a0aee1SJuan Quintela static inline void qemu_put_sbe64(QEMUFile *f, int64_t v)
10708a0aee1SJuan Quintela {
10808a0aee1SJuan Quintela     qemu_put_be64(f, (uint64_t)v);
10908a0aee1SJuan Quintela }
11008a0aee1SJuan Quintela 
qemu_get_sbe16(QEMUFile * f)11108a0aee1SJuan Quintela static inline int qemu_get_sbe16(QEMUFile *f)
11208a0aee1SJuan Quintela {
11308a0aee1SJuan Quintela     return (int)qemu_get_be16(f);
11408a0aee1SJuan Quintela }
11508a0aee1SJuan Quintela 
qemu_get_sbe32(QEMUFile * f)11608a0aee1SJuan Quintela static inline int qemu_get_sbe32(QEMUFile *f)
11708a0aee1SJuan Quintela {
11808a0aee1SJuan Quintela     return (int)qemu_get_be32(f);
11908a0aee1SJuan Quintela }
12008a0aee1SJuan Quintela 
qemu_get_sbe64(QEMUFile * f)12108a0aee1SJuan Quintela static inline int64_t qemu_get_sbe64(QEMUFile *f)
12208a0aee1SJuan Quintela {
12308a0aee1SJuan Quintela     return (int64_t)qemu_get_be64(f);
12408a0aee1SJuan Quintela }
12508a0aee1SJuan Quintela 
qemu_put_s8s(QEMUFile * f,const int8_t * pv)12608a0aee1SJuan Quintela static inline void qemu_put_s8s(QEMUFile *f, const int8_t *pv)
12708a0aee1SJuan Quintela {
12808a0aee1SJuan Quintela     qemu_put_8s(f, (const uint8_t *)pv);
12908a0aee1SJuan Quintela }
13008a0aee1SJuan Quintela 
qemu_put_sbe16s(QEMUFile * f,const int16_t * pv)13108a0aee1SJuan Quintela static inline void qemu_put_sbe16s(QEMUFile *f, const int16_t *pv)
13208a0aee1SJuan Quintela {
13308a0aee1SJuan Quintela     qemu_put_be16s(f, (const uint16_t *)pv);
13408a0aee1SJuan Quintela }
13508a0aee1SJuan Quintela 
qemu_put_sbe32s(QEMUFile * f,const int32_t * pv)13608a0aee1SJuan Quintela static inline void qemu_put_sbe32s(QEMUFile *f, const int32_t *pv)
13708a0aee1SJuan Quintela {
13808a0aee1SJuan Quintela     qemu_put_be32s(f, (const uint32_t *)pv);
13908a0aee1SJuan Quintela }
14008a0aee1SJuan Quintela 
qemu_put_sbe64s(QEMUFile * f,const int64_t * pv)14108a0aee1SJuan Quintela static inline void qemu_put_sbe64s(QEMUFile *f, const int64_t *pv)
14208a0aee1SJuan Quintela {
14308a0aee1SJuan Quintela     qemu_put_be64s(f, (const uint64_t *)pv);
14408a0aee1SJuan Quintela }
14508a0aee1SJuan Quintela 
qemu_get_s8s(QEMUFile * f,int8_t * pv)14608a0aee1SJuan Quintela static inline void qemu_get_s8s(QEMUFile *f, int8_t *pv)
14708a0aee1SJuan Quintela {
14808a0aee1SJuan Quintela     qemu_get_8s(f, (uint8_t *)pv);
14908a0aee1SJuan Quintela }
15008a0aee1SJuan Quintela 
qemu_get_sbe16s(QEMUFile * f,int16_t * pv)15108a0aee1SJuan Quintela static inline void qemu_get_sbe16s(QEMUFile *f, int16_t *pv)
15208a0aee1SJuan Quintela {
15308a0aee1SJuan Quintela     qemu_get_be16s(f, (uint16_t *)pv);
15408a0aee1SJuan Quintela }
15508a0aee1SJuan Quintela 
qemu_get_sbe32s(QEMUFile * f,int32_t * pv)15608a0aee1SJuan Quintela static inline void qemu_get_sbe32s(QEMUFile *f, int32_t *pv)
15708a0aee1SJuan Quintela {
15808a0aee1SJuan Quintela     qemu_get_be32s(f, (uint32_t *)pv);
15908a0aee1SJuan Quintela }
16008a0aee1SJuan Quintela 
qemu_get_sbe64s(QEMUFile * f,int64_t * pv)16108a0aee1SJuan Quintela static inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv)
16208a0aee1SJuan Quintela {
16308a0aee1SJuan Quintela     qemu_get_be64s(f, (uint64_t *)pv);
16408a0aee1SJuan Quintela }
16508a0aee1SJuan Quintela 
166394b9407SPaolo Bonzini size_t coroutine_mixed_fn qemu_get_counted_string(QEMUFile *f, char buf[256]);
1673170a645SMarc-André Lureau 
1683170a645SMarc-André Lureau void qemu_put_counted_string(QEMUFile *f, const char *name);
1693170a645SMarc-André Lureau 
170e1fde0e0SJuan Quintela /**
171e1fde0e0SJuan Quintela  * migration_rate_exceeded: Check if we have exceeded rate for this interval
172e1fde0e0SJuan Quintela  *
173e1fde0e0SJuan Quintela  * Checks if we have already transferred more data that we are allowed
174e1fde0e0SJuan Quintela  * in the current interval.
175e1fde0e0SJuan Quintela  *
176e1fde0e0SJuan Quintela  * @f: QEMUFile used for main migration channel
177e1fde0e0SJuan Quintela  *
178e1fde0e0SJuan Quintela  * Returns if we should stop sending data for this interval.
179e1fde0e0SJuan Quintela  */
180e1fde0e0SJuan Quintela bool migration_rate_exceeded(QEMUFile *f);
18108a0aee1SJuan Quintela 
18208a0aee1SJuan Quintela #endif
183