mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
softmmu: move include files to include/sysemu/
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
1de7afc984
commit
9c17d615a6
296 changed files with 421 additions and 421 deletions
39
include/sysemu/arch_init.h
Normal file
39
include/sysemu/arch_init.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#ifndef QEMU_ARCH_INIT_H
|
||||
#define QEMU_ARCH_INIT_H
|
||||
|
||||
#include "qmp-commands.h"
|
||||
|
||||
enum {
|
||||
QEMU_ARCH_ALL = -1,
|
||||
QEMU_ARCH_ALPHA = 1,
|
||||
QEMU_ARCH_ARM = 2,
|
||||
QEMU_ARCH_CRIS = 4,
|
||||
QEMU_ARCH_I386 = 8,
|
||||
QEMU_ARCH_M68K = 16,
|
||||
QEMU_ARCH_LM32 = 32,
|
||||
QEMU_ARCH_MICROBLAZE = 64,
|
||||
QEMU_ARCH_MIPS = 128,
|
||||
QEMU_ARCH_PPC = 256,
|
||||
QEMU_ARCH_S390X = 512,
|
||||
QEMU_ARCH_SH4 = 1024,
|
||||
QEMU_ARCH_SPARC = 2048,
|
||||
QEMU_ARCH_XTENSA = 4096,
|
||||
QEMU_ARCH_OPENRISC = 8192,
|
||||
QEMU_ARCH_UNICORE32 = 0x4000,
|
||||
};
|
||||
|
||||
extern const uint32_t arch_type;
|
||||
|
||||
void select_soundhw(const char *optarg);
|
||||
void do_acpitable_option(const char *optarg);
|
||||
void do_smbios_option(const char *optarg);
|
||||
void cpudef_init(void);
|
||||
int audio_available(void);
|
||||
void audio_init(ISABus *isa_bus, PCIBus *pci_bus);
|
||||
int tcg_available(void);
|
||||
int kvm_available(void);
|
||||
int xen_available(void);
|
||||
|
||||
CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
|
||||
|
||||
#endif
|
29
include/sysemu/balloon.h
Normal file
29
include/sysemu/balloon.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Balloon
|
||||
*
|
||||
* Copyright IBM, Corp. 2008
|
||||
*
|
||||
* Authors:
|
||||
* Anthony Liguori <aliguori@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _QEMU_BALLOON_H
|
||||
#define _QEMU_BALLOON_H
|
||||
|
||||
#include "monitor/monitor.h"
|
||||
#include "qapi-types.h"
|
||||
|
||||
typedef void (QEMUBalloonEvent)(void *opaque, ram_addr_t target);
|
||||
typedef void (QEMUBalloonStatus)(void *opaque, BalloonInfo *info);
|
||||
|
||||
int qemu_add_balloon_handler(QEMUBalloonEvent *event_func,
|
||||
QEMUBalloonStatus *stat_func, void *opaque);
|
||||
void qemu_remove_balloon_handler(void *opaque);
|
||||
|
||||
void qemu_balloon_changed(int64_t actual);
|
||||
|
||||
#endif
|
69
include/sysemu/blockdev.h
Normal file
69
include/sysemu/blockdev.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* QEMU host block devices
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
* later. See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#ifndef BLOCKDEV_H
|
||||
#define BLOCKDEV_H
|
||||
|
||||
#include "block/block.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/queue.h"
|
||||
|
||||
void blockdev_mark_auto_del(BlockDriverState *bs);
|
||||
void blockdev_auto_del(BlockDriverState *bs);
|
||||
|
||||
typedef enum {
|
||||
IF_DEFAULT = -1, /* for use with drive_add() only */
|
||||
/*
|
||||
* IF_IDE must be zero, because we want QEMUMachine member
|
||||
* block_default_type to default-initialize to IF_IDE
|
||||
*/
|
||||
IF_IDE = 0,
|
||||
IF_NONE,
|
||||
IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
|
||||
IF_COUNT
|
||||
} BlockInterfaceType;
|
||||
|
||||
struct DriveInfo {
|
||||
BlockDriverState *bdrv;
|
||||
char *id;
|
||||
const char *devaddr;
|
||||
BlockInterfaceType type;
|
||||
int bus;
|
||||
int unit;
|
||||
int auto_del; /* see blockdev_mark_auto_del() */
|
||||
int media_cd;
|
||||
int cyls, heads, secs, trans;
|
||||
QemuOpts *opts;
|
||||
const char *serial;
|
||||
QTAILQ_ENTRY(DriveInfo) next;
|
||||
int refcount;
|
||||
};
|
||||
|
||||
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
||||
int drive_get_max_bus(BlockInterfaceType type);
|
||||
DriveInfo *drive_get_next(BlockInterfaceType type);
|
||||
void drive_get_ref(DriveInfo *dinfo);
|
||||
void drive_put_ref(DriveInfo *dinfo);
|
||||
DriveInfo *drive_get_by_blockdev(BlockDriverState *bs);
|
||||
|
||||
QemuOpts *drive_def(const char *optstr);
|
||||
QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
|
||||
const char *optstr);
|
||||
DriveInfo *drive_init(QemuOpts *arg, BlockInterfaceType block_default_type);
|
||||
|
||||
/* device-hotplug */
|
||||
|
||||
DriveInfo *add_init_drive(const char *opts);
|
||||
|
||||
void qmp_change_blockdev(const char *device, const char *filename,
|
||||
bool has_format, const char *format, Error **errp);
|
||||
void do_commit(Monitor *mon, const QDict *qdict);
|
||||
int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
|
||||
#endif
|
24
include/sysemu/cpus.h
Normal file
24
include/sysemu/cpus.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef QEMU_CPUS_H
|
||||
#define QEMU_CPUS_H
|
||||
|
||||
/* cpus.c */
|
||||
void qemu_init_cpu_loop(void);
|
||||
void resume_all_vcpus(void);
|
||||
void pause_all_vcpus(void);
|
||||
void cpu_stop_current(void);
|
||||
|
||||
void cpu_synchronize_all_states(void);
|
||||
void cpu_synchronize_all_post_reset(void);
|
||||
void cpu_synchronize_all_post_init(void);
|
||||
|
||||
void qtest_clock_warp(int64_t dest);
|
||||
|
||||
/* vl.c */
|
||||
extern int smp_cores;
|
||||
extern int smp_threads;
|
||||
void set_numa_modes(void);
|
||||
void set_cpu_log(const char *optarg);
|
||||
void set_cpu_log_filename(const char *optarg);
|
||||
void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg);
|
||||
|
||||
#endif
|
54
include/sysemu/device_tree.h
Normal file
54
include/sysemu/device_tree.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Header with function prototypes to help device tree manipulation using
|
||||
* libfdt. It also provides functions to read entries from device tree proc
|
||||
* interface.
|
||||
*
|
||||
* Copyright 2008 IBM Corporation.
|
||||
* Authors: Jerone Young <jyoung5@us.ibm.com>
|
||||
* Hollis Blanchard <hollisb@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the GNU GPL license version 2 or later.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DEVICE_TREE_H__
|
||||
#define __DEVICE_TREE_H__
|
||||
|
||||
void *create_device_tree(int *sizep);
|
||||
void *load_device_tree(const char *filename_path, int *sizep);
|
||||
|
||||
int qemu_devtree_setprop(void *fdt, const char *node_path,
|
||||
const char *property, const void *val_array, int size);
|
||||
int qemu_devtree_setprop_cell(void *fdt, const char *node_path,
|
||||
const char *property, uint32_t val);
|
||||
int qemu_devtree_setprop_u64(void *fdt, const char *node_path,
|
||||
const char *property, uint64_t val);
|
||||
int qemu_devtree_setprop_string(void *fdt, const char *node_path,
|
||||
const char *property, const char *string);
|
||||
int qemu_devtree_setprop_phandle(void *fdt, const char *node_path,
|
||||
const char *property,
|
||||
const char *target_node_path);
|
||||
const void *qemu_devtree_getprop(void *fdt, const char *node_path,
|
||||
const char *property, int *lenp);
|
||||
uint32_t qemu_devtree_getprop_cell(void *fdt, const char *node_path,
|
||||
const char *property);
|
||||
uint32_t qemu_devtree_get_phandle(void *fdt, const char *path);
|
||||
uint32_t qemu_devtree_alloc_phandle(void *fdt);
|
||||
int qemu_devtree_nop_node(void *fdt, const char *node_path);
|
||||
int qemu_devtree_add_subnode(void *fdt, const char *name);
|
||||
|
||||
#define qemu_devtree_setprop_cells(fdt, node_path, property, ...) \
|
||||
do { \
|
||||
uint32_t qdt_tmp[] = { __VA_ARGS__ }; \
|
||||
int i; \
|
||||
\
|
||||
for (i = 0; i < ARRAY_SIZE(qdt_tmp); i++) { \
|
||||
qdt_tmp[i] = cpu_to_be32(qdt_tmp[i]); \
|
||||
} \
|
||||
qemu_devtree_setprop(fdt, node_path, property, qdt_tmp, \
|
||||
sizeof(qdt_tmp)); \
|
||||
} while (0)
|
||||
|
||||
void qemu_devtree_dumpdtb(void *fdt, int size);
|
||||
|
||||
#endif /* __DEVICE_TREE_H__ */
|
282
include/sysemu/dma.h
Normal file
282
include/sysemu/dma.h
Normal file
|
@ -0,0 +1,282 @@
|
|||
/*
|
||||
* DMA helper functions
|
||||
*
|
||||
* Copyright (c) 2009 Red Hat
|
||||
*
|
||||
* This work is licensed under the terms of the GNU General Public License
|
||||
* (GNU GPL), version 2 or later.
|
||||
*/
|
||||
|
||||
#ifndef DMA_H
|
||||
#define DMA_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "exec/memory.h"
|
||||
#include "hw/hw.h"
|
||||
#include "block/block.h"
|
||||
#include "sysemu/kvm.h"
|
||||
|
||||
typedef struct DMAContext DMAContext;
|
||||
typedef struct ScatterGatherEntry ScatterGatherEntry;
|
||||
|
||||
typedef enum {
|
||||
DMA_DIRECTION_TO_DEVICE = 0,
|
||||
DMA_DIRECTION_FROM_DEVICE = 1,
|
||||
} DMADirection;
|
||||
|
||||
struct QEMUSGList {
|
||||
ScatterGatherEntry *sg;
|
||||
int nsg;
|
||||
int nalloc;
|
||||
size_t size;
|
||||
DMAContext *dma;
|
||||
};
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
|
||||
/*
|
||||
* When an IOMMU is present, bus addresses become distinct from
|
||||
* CPU/memory physical addresses and may be a different size. Because
|
||||
* the IOVA size depends more on the bus than on the platform, we more
|
||||
* or less have to treat these as 64-bit always to cover all (or at
|
||||
* least most) cases.
|
||||
*/
|
||||
typedef uint64_t dma_addr_t;
|
||||
|
||||
#define DMA_ADDR_BITS 64
|
||||
#define DMA_ADDR_FMT "%" PRIx64
|
||||
|
||||
typedef int DMATranslateFunc(DMAContext *dma,
|
||||
dma_addr_t addr,
|
||||
hwaddr *paddr,
|
||||
hwaddr *len,
|
||||
DMADirection dir);
|
||||
typedef void* DMAMapFunc(DMAContext *dma,
|
||||
dma_addr_t addr,
|
||||
dma_addr_t *len,
|
||||
DMADirection dir);
|
||||
typedef void DMAUnmapFunc(DMAContext *dma,
|
||||
void *buffer,
|
||||
dma_addr_t len,
|
||||
DMADirection dir,
|
||||
dma_addr_t access_len);
|
||||
|
||||
struct DMAContext {
|
||||
AddressSpace *as;
|
||||
DMATranslateFunc *translate;
|
||||
DMAMapFunc *map;
|
||||
DMAUnmapFunc *unmap;
|
||||
};
|
||||
|
||||
/* A global DMA context corresponding to the address_space_memory
|
||||
* AddressSpace, for sysbus devices which do DMA.
|
||||
*/
|
||||
extern DMAContext dma_context_memory;
|
||||
|
||||
static inline void dma_barrier(DMAContext *dma, DMADirection dir)
|
||||
{
|
||||
/*
|
||||
* This is called before DMA read and write operations
|
||||
* unless the _relaxed form is used and is responsible
|
||||
* for providing some sane ordering of accesses vs
|
||||
* concurrently running VCPUs.
|
||||
*
|
||||
* Users of map(), unmap() or lower level st/ld_*
|
||||
* operations are responsible for providing their own
|
||||
* ordering via barriers.
|
||||
*
|
||||
* This primitive implementation does a simple smp_mb()
|
||||
* before each operation which provides pretty much full
|
||||
* ordering.
|
||||
*
|
||||
* A smarter implementation can be devised if needed to
|
||||
* use lighter barriers based on the direction of the
|
||||
* transfer, the DMA context, etc...
|
||||
*/
|
||||
if (kvm_enabled()) {
|
||||
smp_mb();
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool dma_has_iommu(DMAContext *dma)
|
||||
{
|
||||
return dma && dma->translate;
|
||||
}
|
||||
|
||||
/* Checks that the given range of addresses is valid for DMA. This is
|
||||
* useful for certain cases, but usually you should just use
|
||||
* dma_memory_{read,write}() and check for errors */
|
||||
bool iommu_dma_memory_valid(DMAContext *dma, dma_addr_t addr, dma_addr_t len,
|
||||
DMADirection dir);
|
||||
static inline bool dma_memory_valid(DMAContext *dma,
|
||||
dma_addr_t addr, dma_addr_t len,
|
||||
DMADirection dir)
|
||||
{
|
||||
if (!dma_has_iommu(dma)) {
|
||||
return true;
|
||||
} else {
|
||||
return iommu_dma_memory_valid(dma, addr, len, dir);
|
||||
}
|
||||
}
|
||||
|
||||
int iommu_dma_memory_rw(DMAContext *dma, dma_addr_t addr,
|
||||
void *buf, dma_addr_t len, DMADirection dir);
|
||||
static inline int dma_memory_rw_relaxed(DMAContext *dma, dma_addr_t addr,
|
||||
void *buf, dma_addr_t len,
|
||||
DMADirection dir)
|
||||
{
|
||||
if (!dma_has_iommu(dma)) {
|
||||
/* Fast-path for no IOMMU */
|
||||
address_space_rw(dma->as, addr, buf, len, dir == DMA_DIRECTION_FROM_DEVICE);
|
||||
return 0;
|
||||
} else {
|
||||
return iommu_dma_memory_rw(dma, addr, buf, len, dir);
|
||||
}
|
||||
}
|
||||
|
||||
static inline int dma_memory_read_relaxed(DMAContext *dma, dma_addr_t addr,
|
||||
void *buf, dma_addr_t len)
|
||||
{
|
||||
return dma_memory_rw_relaxed(dma, addr, buf, len, DMA_DIRECTION_TO_DEVICE);
|
||||
}
|
||||
|
||||
static inline int dma_memory_write_relaxed(DMAContext *dma, dma_addr_t addr,
|
||||
const void *buf, dma_addr_t len)
|
||||
{
|
||||
return dma_memory_rw_relaxed(dma, addr, (void *)buf, len,
|
||||
DMA_DIRECTION_FROM_DEVICE);
|
||||
}
|
||||
|
||||
static inline int dma_memory_rw(DMAContext *dma, dma_addr_t addr,
|
||||
void *buf, dma_addr_t len,
|
||||
DMADirection dir)
|
||||
{
|
||||
dma_barrier(dma, dir);
|
||||
|
||||
return dma_memory_rw_relaxed(dma, addr, buf, len, dir);
|
||||
}
|
||||
|
||||
static inline int dma_memory_read(DMAContext *dma, dma_addr_t addr,
|
||||
void *buf, dma_addr_t len)
|
||||
{
|
||||
return dma_memory_rw(dma, addr, buf, len, DMA_DIRECTION_TO_DEVICE);
|
||||
}
|
||||
|
||||
static inline int dma_memory_write(DMAContext *dma, dma_addr_t addr,
|
||||
const void *buf, dma_addr_t len)
|
||||
{
|
||||
return dma_memory_rw(dma, addr, (void *)buf, len,
|
||||
DMA_DIRECTION_FROM_DEVICE);
|
||||
}
|
||||
|
||||
int iommu_dma_memory_set(DMAContext *dma, dma_addr_t addr, uint8_t c,
|
||||
dma_addr_t len);
|
||||
|
||||
int dma_memory_set(DMAContext *dma, dma_addr_t addr, uint8_t c, dma_addr_t len);
|
||||
|
||||
void *iommu_dma_memory_map(DMAContext *dma,
|
||||
dma_addr_t addr, dma_addr_t *len,
|
||||
DMADirection dir);
|
||||
static inline void *dma_memory_map(DMAContext *dma,
|
||||
dma_addr_t addr, dma_addr_t *len,
|
||||
DMADirection dir)
|
||||
{
|
||||
if (!dma_has_iommu(dma)) {
|
||||
hwaddr xlen = *len;
|
||||
void *p;
|
||||
|
||||
p = address_space_map(dma->as, addr, &xlen, dir == DMA_DIRECTION_FROM_DEVICE);
|
||||
*len = xlen;
|
||||
return p;
|
||||
} else {
|
||||
return iommu_dma_memory_map(dma, addr, len, dir);
|
||||
}
|
||||
}
|
||||
|
||||
void iommu_dma_memory_unmap(DMAContext *dma,
|
||||
void *buffer, dma_addr_t len,
|
||||
DMADirection dir, dma_addr_t access_len);
|
||||
static inline void dma_memory_unmap(DMAContext *dma,
|
||||
void *buffer, dma_addr_t len,
|
||||
DMADirection dir, dma_addr_t access_len)
|
||||
{
|
||||
if (!dma_has_iommu(dma)) {
|
||||
address_space_unmap(dma->as, buffer, (hwaddr)len,
|
||||
dir == DMA_DIRECTION_FROM_DEVICE, access_len);
|
||||
} else {
|
||||
iommu_dma_memory_unmap(dma, buffer, len, dir, access_len);
|
||||
}
|
||||
}
|
||||
|
||||
#define DEFINE_LDST_DMA(_lname, _sname, _bits, _end) \
|
||||
static inline uint##_bits##_t ld##_lname##_##_end##_dma(DMAContext *dma, \
|
||||
dma_addr_t addr) \
|
||||
{ \
|
||||
uint##_bits##_t val; \
|
||||
dma_memory_read(dma, addr, &val, (_bits) / 8); \
|
||||
return _end##_bits##_to_cpu(val); \
|
||||
} \
|
||||
static inline void st##_sname##_##_end##_dma(DMAContext *dma, \
|
||||
dma_addr_t addr, \
|
||||
uint##_bits##_t val) \
|
||||
{ \
|
||||
val = cpu_to_##_end##_bits(val); \
|
||||
dma_memory_write(dma, addr, &val, (_bits) / 8); \
|
||||
}
|
||||
|
||||
static inline uint8_t ldub_dma(DMAContext *dma, dma_addr_t addr)
|
||||
{
|
||||
uint8_t val;
|
||||
|
||||
dma_memory_read(dma, addr, &val, 1);
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void stb_dma(DMAContext *dma, dma_addr_t addr, uint8_t val)
|
||||
{
|
||||
dma_memory_write(dma, addr, &val, 1);
|
||||
}
|
||||
|
||||
DEFINE_LDST_DMA(uw, w, 16, le);
|
||||
DEFINE_LDST_DMA(l, l, 32, le);
|
||||
DEFINE_LDST_DMA(q, q, 64, le);
|
||||
DEFINE_LDST_DMA(uw, w, 16, be);
|
||||
DEFINE_LDST_DMA(l, l, 32, be);
|
||||
DEFINE_LDST_DMA(q, q, 64, be);
|
||||
|
||||
#undef DEFINE_LDST_DMA
|
||||
|
||||
void dma_context_init(DMAContext *dma, AddressSpace *as, DMATranslateFunc translate,
|
||||
DMAMapFunc map, DMAUnmapFunc unmap);
|
||||
|
||||
struct ScatterGatherEntry {
|
||||
dma_addr_t base;
|
||||
dma_addr_t len;
|
||||
};
|
||||
|
||||
void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint, DMAContext *dma);
|
||||
void qemu_sglist_add(QEMUSGList *qsg, dma_addr_t base, dma_addr_t len);
|
||||
void qemu_sglist_destroy(QEMUSGList *qsg);
|
||||
#endif
|
||||
|
||||
typedef BlockDriverAIOCB *DMAIOFunc(BlockDriverState *bs, int64_t sector_num,
|
||||
QEMUIOVector *iov, int nb_sectors,
|
||||
BlockDriverCompletionFunc *cb, void *opaque);
|
||||
|
||||
BlockDriverAIOCB *dma_bdrv_io(BlockDriverState *bs,
|
||||
QEMUSGList *sg, uint64_t sector_num,
|
||||
DMAIOFunc *io_func, BlockDriverCompletionFunc *cb,
|
||||
void *opaque, DMADirection dir);
|
||||
BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs,
|
||||
QEMUSGList *sg, uint64_t sector,
|
||||
BlockDriverCompletionFunc *cb, void *opaque);
|
||||
BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs,
|
||||
QEMUSGList *sg, uint64_t sector,
|
||||
BlockDriverCompletionFunc *cb, void *opaque);
|
||||
uint64_t dma_buf_read(uint8_t *ptr, int32_t len, QEMUSGList *sg);
|
||||
uint64_t dma_buf_write(uint8_t *ptr, int32_t len, QEMUSGList *sg);
|
||||
|
||||
void dma_acct_start(BlockDriverState *bs, BlockAcctCookie *cookie,
|
||||
QEMUSGList *sg, enum BlockAcctType type);
|
||||
|
||||
#endif
|
35
include/sysemu/dump.h
Normal file
35
include/sysemu/dump.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* QEMU dump
|
||||
*
|
||||
* Copyright Fujitsu, Corp. 2011, 2012
|
||||
*
|
||||
* Authors:
|
||||
* Wen Congyang <wency@cn.fujitsu.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DUMP_H
|
||||
#define DUMP_H
|
||||
|
||||
typedef struct ArchDumpInfo {
|
||||
int d_machine; /* Architecture */
|
||||
int d_endian; /* ELFDATA2LSB or ELFDATA2MSB */
|
||||
int d_class; /* ELFCLASS32 or ELFCLASS64 */
|
||||
} ArchDumpInfo;
|
||||
|
||||
typedef int (*write_core_dump_function)(void *buf, size_t size, void *opaque);
|
||||
int cpu_write_elf64_note(write_core_dump_function f, CPUArchState *env,
|
||||
int cpuid, void *opaque);
|
||||
int cpu_write_elf32_note(write_core_dump_function f, CPUArchState *env,
|
||||
int cpuid, void *opaque);
|
||||
int cpu_write_elf64_qemunote(write_core_dump_function f, CPUArchState *env,
|
||||
void *opaque);
|
||||
int cpu_write_elf32_qemunote(write_core_dump_function f, CPUArchState *env,
|
||||
void *opaque);
|
||||
int cpu_get_dump_info(ArchDumpInfo *info);
|
||||
ssize_t cpu_get_note_size(int class, int machine, int nr_cpus);
|
||||
|
||||
#endif
|
280
include/sysemu/kvm.h
Normal file
280
include/sysemu/kvm.h
Normal file
|
@ -0,0 +1,280 @@
|
|||
/*
|
||||
* QEMU KVM support
|
||||
*
|
||||
* Copyright IBM, Corp. 2008
|
||||
*
|
||||
* Authors:
|
||||
* Anthony Liguori <aliguori@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef QEMU_KVM_H
|
||||
#define QEMU_KVM_H
|
||||
|
||||
#include <errno.h>
|
||||
#include "config-host.h"
|
||||
#include "qemu/queue.h"
|
||||
|
||||
#ifdef CONFIG_KVM
|
||||
#include <linux/kvm.h>
|
||||
#include <linux/kvm_para.h>
|
||||
#endif
|
||||
|
||||
extern int kvm_allowed;
|
||||
extern bool kvm_kernel_irqchip;
|
||||
extern bool kvm_async_interrupts_allowed;
|
||||
extern bool kvm_irqfds_allowed;
|
||||
extern bool kvm_msi_via_irqfd_allowed;
|
||||
extern bool kvm_gsi_routing_allowed;
|
||||
|
||||
#if defined CONFIG_KVM || !defined NEED_CPU_H
|
||||
#define kvm_enabled() (kvm_allowed)
|
||||
/**
|
||||
* kvm_irqchip_in_kernel:
|
||||
*
|
||||
* Returns: true if the user asked us to create an in-kernel
|
||||
* irqchip via the "kernel_irqchip=on" machine option.
|
||||
* What this actually means is architecture and machine model
|
||||
* specific: on PC, for instance, it means that the LAPIC,
|
||||
* IOAPIC and PIT are all in kernel. This function should never
|
||||
* be used from generic target-independent code: use one of the
|
||||
* following functions or some other specific check instead.
|
||||
*/
|
||||
#define kvm_irqchip_in_kernel() (kvm_kernel_irqchip)
|
||||
|
||||
/**
|
||||
* kvm_async_interrupts_enabled:
|
||||
*
|
||||
* Returns: true if we can deliver interrupts to KVM
|
||||
* asynchronously (ie by ioctl from any thread at any time)
|
||||
* rather than having to do interrupt delivery synchronously
|
||||
* (where the vcpu must be stopped at a suitable point first).
|
||||
*/
|
||||
#define kvm_async_interrupts_enabled() (kvm_async_interrupts_allowed)
|
||||
|
||||
/**
|
||||
* kvm_irqfds_enabled:
|
||||
*
|
||||
* Returns: true if we can use irqfds to inject interrupts into
|
||||
* a KVM CPU (ie the kernel supports irqfds and we are running
|
||||
* with a configuration where it is meaningful to use them).
|
||||
*/
|
||||
#define kvm_irqfds_enabled() (kvm_irqfds_allowed)
|
||||
|
||||
/**
|
||||
* kvm_msi_via_irqfd_enabled:
|
||||
*
|
||||
* Returns: true if we can route a PCI MSI (Message Signaled Interrupt)
|
||||
* to a KVM CPU via an irqfd. This requires that the kernel supports
|
||||
* this and that we're running in a configuration that permits it.
|
||||
*/
|
||||
#define kvm_msi_via_irqfd_enabled() (kvm_msi_via_irqfd_allowed)
|
||||
|
||||
/**
|
||||
* kvm_gsi_routing_enabled:
|
||||
*
|
||||
* Returns: true if GSI routing is enabled (ie the kernel supports
|
||||
* it and we're running in a configuration that permits it).
|
||||
*/
|
||||
#define kvm_gsi_routing_enabled() (kvm_gsi_routing_allowed)
|
||||
|
||||
#else
|
||||
#define kvm_enabled() (0)
|
||||
#define kvm_irqchip_in_kernel() (false)
|
||||
#define kvm_async_interrupts_enabled() (false)
|
||||
#define kvm_irqfds_enabled() (false)
|
||||
#define kvm_msi_via_irqfd_enabled() (false)
|
||||
#define kvm_gsi_routing_allowed() (false)
|
||||
#endif
|
||||
|
||||
struct kvm_run;
|
||||
struct kvm_lapic_state;
|
||||
|
||||
typedef struct KVMCapabilityInfo {
|
||||
const char *name;
|
||||
int value;
|
||||
} KVMCapabilityInfo;
|
||||
|
||||
#define KVM_CAP_INFO(CAP) { "KVM_CAP_" stringify(CAP), KVM_CAP_##CAP }
|
||||
#define KVM_CAP_LAST_INFO { NULL, 0 }
|
||||
|
||||
struct KVMState;
|
||||
typedef struct KVMState KVMState;
|
||||
extern KVMState *kvm_state;
|
||||
|
||||
/* external API */
|
||||
|
||||
int kvm_init(void);
|
||||
|
||||
int kvm_has_sync_mmu(void);
|
||||
int kvm_has_vcpu_events(void);
|
||||
int kvm_has_robust_singlestep(void);
|
||||
int kvm_has_debugregs(void);
|
||||
int kvm_has_xsave(void);
|
||||
int kvm_has_xcrs(void);
|
||||
int kvm_has_pit_state2(void);
|
||||
int kvm_has_many_ioeventfds(void);
|
||||
int kvm_has_gsi_routing(void);
|
||||
int kvm_has_intx_set_mask(void);
|
||||
|
||||
#ifdef NEED_CPU_H
|
||||
int kvm_init_vcpu(CPUArchState *env);
|
||||
|
||||
int kvm_cpu_exec(CPUArchState *env);
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
void *kvm_vmalloc(ram_addr_t size);
|
||||
void *kvm_arch_vmalloc(ram_addr_t size);
|
||||
void kvm_setup_guest_memory(void *start, size_t size);
|
||||
|
||||
void kvm_flush_coalesced_mmio_buffer(void);
|
||||
#endif
|
||||
|
||||
int kvm_insert_breakpoint(CPUArchState *current_env, target_ulong addr,
|
||||
target_ulong len, int type);
|
||||
int kvm_remove_breakpoint(CPUArchState *current_env, target_ulong addr,
|
||||
target_ulong len, int type);
|
||||
void kvm_remove_all_breakpoints(CPUArchState *current_env);
|
||||
int kvm_update_guest_debug(CPUArchState *env, unsigned long reinject_trap);
|
||||
#ifndef _WIN32
|
||||
int kvm_set_signal_mask(CPUArchState *env, const sigset_t *sigset);
|
||||
#endif
|
||||
|
||||
int kvm_on_sigbus_vcpu(CPUArchState *env, int code, void *addr);
|
||||
int kvm_on_sigbus(int code, void *addr);
|
||||
|
||||
/* internal API */
|
||||
|
||||
int kvm_ioctl(KVMState *s, int type, ...);
|
||||
|
||||
int kvm_vm_ioctl(KVMState *s, int type, ...);
|
||||
|
||||
int kvm_vcpu_ioctl(CPUArchState *env, int type, ...);
|
||||
|
||||
/* Arch specific hooks */
|
||||
|
||||
extern const KVMCapabilityInfo kvm_arch_required_capabilities[];
|
||||
|
||||
void kvm_arch_pre_run(CPUArchState *env, struct kvm_run *run);
|
||||
void kvm_arch_post_run(CPUArchState *env, struct kvm_run *run);
|
||||
|
||||
int kvm_arch_handle_exit(CPUArchState *env, struct kvm_run *run);
|
||||
|
||||
int kvm_arch_process_async_events(CPUArchState *env);
|
||||
|
||||
int kvm_arch_get_registers(CPUArchState *env);
|
||||
|
||||
/* state subset only touched by the VCPU itself during runtime */
|
||||
#define KVM_PUT_RUNTIME_STATE 1
|
||||
/* state subset modified during VCPU reset */
|
||||
#define KVM_PUT_RESET_STATE 2
|
||||
/* full state set, modified during initialization or on vmload */
|
||||
#define KVM_PUT_FULL_STATE 3
|
||||
|
||||
int kvm_arch_put_registers(CPUArchState *env, int level);
|
||||
|
||||
int kvm_arch_init(KVMState *s);
|
||||
|
||||
int kvm_arch_init_vcpu(CPUArchState *env);
|
||||
|
||||
void kvm_arch_reset_vcpu(CPUArchState *env);
|
||||
|
||||
int kvm_arch_on_sigbus_vcpu(CPUArchState *env, int code, void *addr);
|
||||
int kvm_arch_on_sigbus(int code, void *addr);
|
||||
|
||||
void kvm_arch_init_irq_routing(KVMState *s);
|
||||
|
||||
int kvm_set_irq(KVMState *s, int irq, int level);
|
||||
int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg);
|
||||
|
||||
void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin);
|
||||
|
||||
void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
||||
void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic);
|
||||
|
||||
struct kvm_guest_debug;
|
||||
struct kvm_debug_exit_arch;
|
||||
|
||||
struct kvm_sw_breakpoint {
|
||||
target_ulong pc;
|
||||
target_ulong saved_insn;
|
||||
int use_count;
|
||||
QTAILQ_ENTRY(kvm_sw_breakpoint) entry;
|
||||
};
|
||||
|
||||
QTAILQ_HEAD(kvm_sw_breakpoint_head, kvm_sw_breakpoint);
|
||||
|
||||
struct kvm_sw_breakpoint *kvm_find_sw_breakpoint(CPUArchState *env,
|
||||
target_ulong pc);
|
||||
|
||||
int kvm_sw_breakpoints_active(CPUArchState *env);
|
||||
|
||||
int kvm_arch_insert_sw_breakpoint(CPUArchState *current_env,
|
||||
struct kvm_sw_breakpoint *bp);
|
||||
int kvm_arch_remove_sw_breakpoint(CPUArchState *current_env,
|
||||
struct kvm_sw_breakpoint *bp);
|
||||
int kvm_arch_insert_hw_breakpoint(target_ulong addr,
|
||||
target_ulong len, int type);
|
||||
int kvm_arch_remove_hw_breakpoint(target_ulong addr,
|
||||
target_ulong len, int type);
|
||||
void kvm_arch_remove_all_hw_breakpoints(void);
|
||||
|
||||
void kvm_arch_update_guest_debug(CPUArchState *env, struct kvm_guest_debug *dbg);
|
||||
|
||||
bool kvm_arch_stop_on_emulation_error(CPUArchState *env);
|
||||
|
||||
int kvm_check_extension(KVMState *s, unsigned int extension);
|
||||
|
||||
uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
|
||||
uint32_t index, int reg);
|
||||
void kvm_cpu_synchronize_state(CPUArchState *env);
|
||||
void kvm_cpu_synchronize_post_reset(CPUArchState *env);
|
||||
void kvm_cpu_synchronize_post_init(CPUArchState *env);
|
||||
|
||||
/* generic hooks - to be moved/refactored once there are more users */
|
||||
|
||||
static inline void cpu_synchronize_state(CPUArchState *env)
|
||||
{
|
||||
if (kvm_enabled()) {
|
||||
kvm_cpu_synchronize_state(env);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cpu_synchronize_post_reset(CPUArchState *env)
|
||||
{
|
||||
if (kvm_enabled()) {
|
||||
kvm_cpu_synchronize_post_reset(env);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cpu_synchronize_post_init(CPUArchState *env)
|
||||
{
|
||||
if (kvm_enabled()) {
|
||||
kvm_cpu_synchronize_post_init(env);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
|
||||
hwaddr *phys_addr);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
int kvm_set_ioeventfd_mmio(int fd, uint32_t adr, uint32_t val, bool assign,
|
||||
uint32_t size);
|
||||
|
||||
int kvm_set_ioeventfd_pio_word(int fd, uint16_t adr, uint16_t val, bool assign);
|
||||
|
||||
int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg);
|
||||
int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg);
|
||||
void kvm_irqchip_release_virq(KVMState *s, int virq);
|
||||
|
||||
int kvm_irqchip_add_irqfd_notifier(KVMState *s, EventNotifier *n, int virq);
|
||||
int kvm_irqchip_remove_irqfd_notifier(KVMState *s, EventNotifier *n, int virq);
|
||||
void kvm_pc_gsi_handler(void *opaque, int n, int level);
|
||||
void kvm_pc_setup_irq_routing(bool pci_enabled);
|
||||
#endif
|
64
include/sysemu/memory_mapping.h
Normal file
64
include/sysemu/memory_mapping.h
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* QEMU memory mapping
|
||||
*
|
||||
* Copyright Fujitsu, Corp. 2011, 2012
|
||||
*
|
||||
* Authors:
|
||||
* Wen Congyang <wency@cn.fujitsu.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MEMORY_MAPPING_H
|
||||
#define MEMORY_MAPPING_H
|
||||
|
||||
#include "qemu/queue.h"
|
||||
|
||||
/* The physical and virtual address in the memory mapping are contiguous. */
|
||||
typedef struct MemoryMapping {
|
||||
hwaddr phys_addr;
|
||||
target_ulong virt_addr;
|
||||
ram_addr_t length;
|
||||
QTAILQ_ENTRY(MemoryMapping) next;
|
||||
} MemoryMapping;
|
||||
|
||||
typedef struct MemoryMappingList {
|
||||
unsigned int num;
|
||||
MemoryMapping *last_mapping;
|
||||
QTAILQ_HEAD(, MemoryMapping) head;
|
||||
} MemoryMappingList;
|
||||
|
||||
int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env);
|
||||
bool cpu_paging_enabled(CPUArchState *env);
|
||||
|
||||
/*
|
||||
* add or merge the memory region [phys_addr, phys_addr + length) into the
|
||||
* memory mapping's list. The region's virtual address starts with virt_addr,
|
||||
* and is contiguous. The list is sorted by phys_addr.
|
||||
*/
|
||||
void memory_mapping_list_add_merge_sorted(MemoryMappingList *list,
|
||||
hwaddr phys_addr,
|
||||
hwaddr virt_addr,
|
||||
ram_addr_t length);
|
||||
|
||||
void memory_mapping_list_free(MemoryMappingList *list);
|
||||
|
||||
void memory_mapping_list_init(MemoryMappingList *list);
|
||||
|
||||
/*
|
||||
* Return value:
|
||||
* 0: success
|
||||
* -1: failed
|
||||
* -2: unsupported
|
||||
*/
|
||||
int qemu_get_guest_memory_mapping(MemoryMappingList *list);
|
||||
|
||||
/* get guest's memory mapping without do paging(virtual address is 0). */
|
||||
void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list);
|
||||
|
||||
void memory_mapping_filter(MemoryMappingList *list, int64_t begin,
|
||||
int64_t length);
|
||||
|
||||
#endif
|
51
include/sysemu/os-posix.h
Normal file
51
include/sysemu/os-posix.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* posix specific declarations
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
* Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef QEMU_OS_POSIX_H
|
||||
#define QEMU_OS_POSIX_H
|
||||
|
||||
void os_set_line_buffering(void);
|
||||
void os_set_proc_name(const char *s);
|
||||
void os_setup_signal_handling(void);
|
||||
void os_daemonize(void);
|
||||
void os_setup_post(void);
|
||||
|
||||
typedef struct timeval qemu_timeval;
|
||||
#define qemu_gettimeofday(tp) gettimeofday(tp, NULL)
|
||||
|
||||
#ifndef CONFIG_UTIMENSAT
|
||||
#ifndef UTIME_NOW
|
||||
# define UTIME_NOW ((1l << 30) - 1l)
|
||||
#endif
|
||||
#ifndef UTIME_OMIT
|
||||
# define UTIME_OMIT ((1l << 30) - 2l)
|
||||
#endif
|
||||
#endif
|
||||
typedef struct timespec qemu_timespec;
|
||||
int qemu_utimens(const char *path, const qemu_timespec *times);
|
||||
|
||||
bool is_daemonized(void);
|
||||
|
||||
#endif
|
99
include/sysemu/os-win32.h
Normal file
99
include/sysemu/os-win32.h
Normal file
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* win32 specific declarations
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
* Copyright (c) 2010 Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef QEMU_OS_WIN32_H
|
||||
#define QEMU_OS_WIN32_H
|
||||
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
|
||||
/* Workaround for older versions of MinGW. */
|
||||
#ifndef ECONNREFUSED
|
||||
# define ECONNREFUSED WSAECONNREFUSED
|
||||
#endif
|
||||
#ifndef EINPROGRESS
|
||||
# define EINPROGRESS WSAEINPROGRESS
|
||||
#endif
|
||||
#ifndef EHOSTUNREACH
|
||||
# define EHOSTUNREACH WSAEHOSTUNREACH
|
||||
#endif
|
||||
#ifndef EINTR
|
||||
# define EINTR WSAEINTR
|
||||
#endif
|
||||
#ifndef EINPROGRESS
|
||||
# define EINPROGRESS WSAEINPROGRESS
|
||||
#endif
|
||||
#ifndef ENETUNREACH
|
||||
# define ENETUNREACH WSAENETUNREACH
|
||||
#endif
|
||||
#ifndef ENOTCONN
|
||||
# define ENOTCONN WSAENOTCONN
|
||||
#endif
|
||||
#ifndef EWOULDBLOCK
|
||||
# define EWOULDBLOCK WSAEWOULDBLOCK
|
||||
#endif
|
||||
|
||||
#if defined(_WIN64)
|
||||
/* On w64, setjmp is implemented by _setjmp which needs a second parameter.
|
||||
* If this parameter is NULL, longjump does no stack unwinding.
|
||||
* That is what we need for QEMU. Passing the value of register rsp (default)
|
||||
* lets longjmp try a stack unwinding which will crash with generated code. */
|
||||
# undef setjmp
|
||||
# define setjmp(env) _setjmp(env, NULL)
|
||||
#endif
|
||||
|
||||
/* Declaration of ffs() is missing in MinGW's strings.h. */
|
||||
int ffs(int i);
|
||||
|
||||
/* Missing POSIX functions. Don't use MinGW-w64 macros. */
|
||||
#undef gmtime_r
|
||||
struct tm *gmtime_r(const time_t *timep, struct tm *result);
|
||||
#undef localtime_r
|
||||
struct tm *localtime_r(const time_t *timep, struct tm *result);
|
||||
|
||||
static inline void os_setup_signal_handling(void) {}
|
||||
static inline void os_daemonize(void) {}
|
||||
static inline void os_setup_post(void) {}
|
||||
void os_set_line_buffering(void);
|
||||
static inline void os_set_proc_name(const char *dummy) {}
|
||||
|
||||
#if !defined(EPROTONOSUPPORT)
|
||||
# define EPROTONOSUPPORT EINVAL
|
||||
#endif
|
||||
|
||||
int setenv(const char *name, const char *value, int overwrite);
|
||||
|
||||
typedef struct {
|
||||
long tv_sec;
|
||||
long tv_usec;
|
||||
} qemu_timeval;
|
||||
int qemu_gettimeofday(qemu_timeval *tp);
|
||||
|
||||
static inline bool is_daemonized(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
53
include/sysemu/qtest.h
Normal file
53
include/sysemu/qtest.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Test Server
|
||||
*
|
||||
* Copyright IBM, Corp. 2011
|
||||
*
|
||||
* Authors:
|
||||
* Anthony Liguori <aliguori@us.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef QTEST_H
|
||||
#define QTEST_H
|
||||
|
||||
#include "qemu-common.h"
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
extern int qtest_allowed;
|
||||
extern const char *qtest_chrdev;
|
||||
extern const char *qtest_log;
|
||||
|
||||
static inline bool qtest_enabled(void)
|
||||
{
|
||||
return qtest_allowed;
|
||||
}
|
||||
|
||||
static inline int qtest_available(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int qtest_init(void);
|
||||
#else
|
||||
static inline bool qtest_enabled(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int qtest_available(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int qtest_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
22
include/sysemu/seccomp.h
Normal file
22
include/sysemu/seccomp.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* QEMU seccomp mode 2 support with libseccomp
|
||||
*
|
||||
* Copyright IBM, Corp. 2012
|
||||
*
|
||||
* Authors:
|
||||
* Eduardo Otubo <eotubo@br.ibm.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
* Contributions after 2012-01-13 are licensed under the terms of the
|
||||
* GNU GPL, version 2 or (at your option) any later version.
|
||||
*/
|
||||
#ifndef QEMU_SECCOMP_H
|
||||
#define QEMU_SECCOMP_H
|
||||
|
||||
#include <seccomp.h>
|
||||
#include "qemu/osdep.h"
|
||||
|
||||
int seccomp_start(void);
|
||||
#endif
|
185
include/sysemu/sysemu.h
Normal file
185
include/sysemu/sysemu.h
Normal file
|
@ -0,0 +1,185 @@
|
|||
#ifndef SYSEMU_H
|
||||
#define SYSEMU_H
|
||||
/* Misc. things related to the system emulator. */
|
||||
|
||||
#include "qemu/typedefs.h"
|
||||
#include "qemu/option.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "qapi-types.h"
|
||||
#include "qemu/notify.h"
|
||||
#include "qemu/main-loop.h"
|
||||
|
||||
/* vl.c */
|
||||
|
||||
extern const char *bios_name;
|
||||
|
||||
extern const char *qemu_name;
|
||||
extern uint8_t qemu_uuid[];
|
||||
int qemu_uuid_parse(const char *str, uint8_t *uuid);
|
||||
#define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
|
||||
|
||||
bool runstate_check(RunState state);
|
||||
void runstate_set(RunState new_state);
|
||||
int runstate_is_running(void);
|
||||
typedef struct vm_change_state_entry VMChangeStateEntry;
|
||||
typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
|
||||
|
||||
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
|
||||
void *opaque);
|
||||
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
|
||||
void vm_state_notify(int running, RunState state);
|
||||
|
||||
#define VMRESET_SILENT false
|
||||
#define VMRESET_REPORT true
|
||||
|
||||
void vm_start(void);
|
||||
void vm_stop(RunState state);
|
||||
void vm_stop_force_state(RunState state);
|
||||
|
||||
typedef enum WakeupReason {
|
||||
QEMU_WAKEUP_REASON_OTHER = 0,
|
||||
QEMU_WAKEUP_REASON_RTC,
|
||||
QEMU_WAKEUP_REASON_PMTIMER,
|
||||
} WakeupReason;
|
||||
|
||||
void qemu_system_reset_request(void);
|
||||
void qemu_system_suspend_request(void);
|
||||
void qemu_register_suspend_notifier(Notifier *notifier);
|
||||
void qemu_system_wakeup_request(WakeupReason reason);
|
||||
void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
|
||||
void qemu_register_wakeup_notifier(Notifier *notifier);
|
||||
void qemu_system_shutdown_request(void);
|
||||
void qemu_system_powerdown_request(void);
|
||||
void qemu_register_powerdown_notifier(Notifier *notifier);
|
||||
void qemu_system_debug_request(void);
|
||||
void qemu_system_vmstop_request(RunState reason);
|
||||
int qemu_shutdown_requested_get(void);
|
||||
int qemu_reset_requested_get(void);
|
||||
void qemu_system_killed(int signal, pid_t pid);
|
||||
void qemu_devices_reset(void);
|
||||
void qemu_system_reset(bool report);
|
||||
|
||||
void qemu_add_exit_notifier(Notifier *notify);
|
||||
void qemu_remove_exit_notifier(Notifier *notify);
|
||||
|
||||
void qemu_add_machine_init_done_notifier(Notifier *notify);
|
||||
|
||||
void do_savevm(Monitor *mon, const QDict *qdict);
|
||||
int load_vmstate(const char *name);
|
||||
void do_delvm(Monitor *mon, const QDict *qdict);
|
||||
void do_info_snapshots(Monitor *mon);
|
||||
|
||||
void qemu_announce_self(void);
|
||||
|
||||
bool qemu_savevm_state_blocked(Error **errp);
|
||||
int qemu_savevm_state_begin(QEMUFile *f,
|
||||
const MigrationParams *params);
|
||||
int qemu_savevm_state_iterate(QEMUFile *f);
|
||||
int qemu_savevm_state_complete(QEMUFile *f);
|
||||
void qemu_savevm_state_cancel(QEMUFile *f);
|
||||
int qemu_loadvm_state(QEMUFile *f);
|
||||
|
||||
/* SLIRP */
|
||||
void do_info_slirp(Monitor *mon);
|
||||
|
||||
typedef enum DisplayType
|
||||
{
|
||||
DT_DEFAULT,
|
||||
DT_CURSES,
|
||||
DT_SDL,
|
||||
DT_NOGRAPHIC,
|
||||
DT_NONE,
|
||||
} DisplayType;
|
||||
|
||||
extern int autostart;
|
||||
extern int bios_size;
|
||||
|
||||
typedef enum {
|
||||
VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL,
|
||||
} VGAInterfaceType;
|
||||
|
||||
extern int vga_interface_type;
|
||||
#define xenfb_enabled (vga_interface_type == VGA_XENFB)
|
||||
#define qxl_enabled (vga_interface_type == VGA_QXL)
|
||||
|
||||
extern int graphic_width;
|
||||
extern int graphic_height;
|
||||
extern int graphic_depth;
|
||||
extern DisplayType display_type;
|
||||
extern const char *keyboard_layout;
|
||||
extern int win2k_install_hack;
|
||||
extern int alt_grab;
|
||||
extern int ctrl_grab;
|
||||
extern int smp_cpus;
|
||||
extern int max_cpus;
|
||||
extern int cursor_hide;
|
||||
extern int graphic_rotate;
|
||||
extern int no_quit;
|
||||
extern int no_shutdown;
|
||||
extern int semihosting_enabled;
|
||||
extern int old_param;
|
||||
extern int boot_menu;
|
||||
extern uint8_t *boot_splash_filedata;
|
||||
extern int boot_splash_filedata_size;
|
||||
extern uint8_t qemu_extra_params_fw[2];
|
||||
extern QEMUClock *rtc_clock;
|
||||
|
||||
#define MAX_NODES 64
|
||||
#define MAX_CPUMASK_BITS 255
|
||||
extern int nb_numa_nodes;
|
||||
extern uint64_t node_mem[MAX_NODES];
|
||||
extern unsigned long *node_cpumask[MAX_NODES];
|
||||
|
||||
#define MAX_OPTION_ROMS 16
|
||||
typedef struct QEMUOptionRom {
|
||||
const char *name;
|
||||
int32_t bootindex;
|
||||
} QEMUOptionRom;
|
||||
extern QEMUOptionRom option_rom[MAX_OPTION_ROMS];
|
||||
extern int nb_option_roms;
|
||||
|
||||
#define MAX_PROM_ENVS 128
|
||||
extern const char *prom_envs[MAX_PROM_ENVS];
|
||||
extern unsigned int nb_prom_envs;
|
||||
|
||||
/* pci-hotplug */
|
||||
void pci_device_hot_add(Monitor *mon, const QDict *qdict);
|
||||
int pci_drive_hot_add(Monitor *mon, const QDict *qdict, DriveInfo *dinfo);
|
||||
void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict);
|
||||
|
||||
/* generic hotplug */
|
||||
void drive_hot_add(Monitor *mon, const QDict *qdict);
|
||||
|
||||
/* pcie aer error injection */
|
||||
void pcie_aer_inject_error_print(Monitor *mon, const QObject *data);
|
||||
int do_pcie_aer_inject_error(Monitor *mon,
|
||||
const QDict *qdict, QObject **ret_data);
|
||||
|
||||
/* serial ports */
|
||||
|
||||
#define MAX_SERIAL_PORTS 4
|
||||
|
||||
extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
|
||||
|
||||
/* parallel ports */
|
||||
|
||||
#define MAX_PARALLEL_PORTS 3
|
||||
|
||||
extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
|
||||
|
||||
void do_usb_add(Monitor *mon, const QDict *qdict);
|
||||
void do_usb_del(Monitor *mon, const QDict *qdict);
|
||||
void usb_info(Monitor *mon);
|
||||
|
||||
void rtc_change_mon_event(struct tm *tm);
|
||||
|
||||
void register_devices(void);
|
||||
|
||||
void add_boot_device_path(int32_t bootindex, DeviceState *dev,
|
||||
const char *suffix);
|
||||
char *get_boot_devices_list(uint32_t *size);
|
||||
|
||||
bool usb_enabled(bool default_usb);
|
||||
|
||||
#endif
|
56
include/sysemu/xen-mapcache.h
Normal file
56
include/sysemu/xen-mapcache.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (C) 2011 Citrix Ltd.
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef XEN_MAPCACHE_H
|
||||
#define XEN_MAPCACHE_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef hwaddr (*phys_offset_to_gaddr_t)(hwaddr start_addr,
|
||||
ram_addr_t size,
|
||||
void *opaque);
|
||||
#ifdef CONFIG_XEN
|
||||
|
||||
void xen_map_cache_init(phys_offset_to_gaddr_t f,
|
||||
void *opaque);
|
||||
uint8_t *xen_map_cache(hwaddr phys_addr, hwaddr size,
|
||||
uint8_t lock);
|
||||
ram_addr_t xen_ram_addr_from_mapcache(void *ptr);
|
||||
void xen_invalidate_map_cache_entry(uint8_t *buffer);
|
||||
void xen_invalidate_map_cache(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline void xen_map_cache_init(phys_offset_to_gaddr_t f,
|
||||
void *opaque)
|
||||
{
|
||||
}
|
||||
|
||||
static inline uint8_t *xen_map_cache(hwaddr phys_addr,
|
||||
hwaddr size,
|
||||
uint8_t lock)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
static inline ram_addr_t xen_ram_addr_from_mapcache(void *ptr)
|
||||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
static inline void xen_invalidate_map_cache_entry(uint8_t *buffer)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_invalidate_map_cache(void)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !XEN_MAPCACHE_H */
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include "qemu/thread.h"
|
||||
#include "ui/qemu-pixman.h"
|
||||
#include "sysemu.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
#define NUM_MEMSLOTS 8
|
||||
#define MEMSLOT_GENERATION_BITS 8
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue