mirror of
https://github.com/qemu/qemu.git
synced 2025-08-01 02:05:48 +00:00
trivial patches for 2015-04-30
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJVQikmAAoJEL7lnXSkw9fb4XUH/25cUpHNks1UUdwMBLAO/Et+ KK9JE6c2o7HLsn6okPbNhWTbszRpFHC4cGFIozoYoSr780EjLgO/M73kzmSyGHqB jUgyLO0CgHFN1bBRpXj/E6hgmWrB1U6wTQsRFSzNDQ8f3xl/WqQAGnNg2jVtNIA5 AWm4LWzorQldKEFenCRoINW7YqJfR5/x7ijTG6TYLmru67BJhpOrt4SuEa5dPVVy Tzl4Bc8P85hlRcB6N2aoyCLqtH2NSGXfilrAmNrzbzxV1fNze0gMkWG+eL69Ci44 2RldU7O9oc55AuJyFhuLvsSygIie3f5c7XlX6t8Cnu3EpOZEDlX9gHBJ9wYDkAw= =vysd -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mjt/tags/pull-trivial-patches-2015-04-30' into staging trivial patches for 2015-04-30 # gpg: Signature made Thu Apr 30 14:07:50 2015 BST using RSA key ID A4C3D7DB # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>" # gpg: aka "Michael Tokarev <mjt@corpit.ru>" # gpg: aka "Michael Tokarev <mjt@debian.org>" * remotes/mjt/tags/pull-trivial-patches-2015-04-30: (42 commits) openrisc: cpu: Remove unused cpu_get_pc microblaze: fix memory leak tcg: Delete unused cpu_pc_from_tb() kvm: Silence warning from valgrind vhost-user: remove superfluous '\n' around error_report() target-mips: fix memory leak qmp-commands: Fix typo linux-user/elfload: use QTAILQ_FOREACH instead of open-coding it coroutine: remove unnecessary parentheses in qemu_co_queue_empty qemu-char: remove unused list node from FDCharDriver input: remove unused mouse_handlers list cpus: use first_cpu macro instead of QTAILQ_FIRST(&cpus) microblaze: cpu: delete unused cpu_interrupts_enabled microblaze: cpu: Renumber EXCP_* constants to close gap microblaze: cpu: Delete EXCP_NMI microblaze: cpu: Remove unused CC_OP enum microblaze: cpu: Remote unused cpu_get_pc microblaze: mmu: Delete flip_um fn prototype defconfigs: Piggyback microblazeel on microblaze libcacard: do not use full paths for include files in the same dir ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
f90f5b9a9a
@ -43,7 +43,7 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!fb->mem_path) {
|
if (!fb->mem_path) {
|
||||||
error_setg(errp, "mem_path property not set");
|
error_setg(errp, "mem-path property not set");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifndef CONFIG_LINUX
|
#ifndef CONFIG_LINUX
|
||||||
|
4
configure
vendored
4
configure
vendored
@ -5193,8 +5193,6 @@ case "$target_name" in
|
|||||||
TARGET_BASE_ARCH=mips
|
TARGET_BASE_ARCH=mips
|
||||||
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
|
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
|
||||||
;;
|
;;
|
||||||
tricore)
|
|
||||||
;;
|
|
||||||
moxie)
|
moxie)
|
||||||
;;
|
;;
|
||||||
or32)
|
or32)
|
||||||
@ -5245,6 +5243,8 @@ case "$target_name" in
|
|||||||
s390x)
|
s390x)
|
||||||
gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
|
gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml"
|
||||||
;;
|
;;
|
||||||
|
tricore)
|
||||||
|
;;
|
||||||
unicore32)
|
unicore32)
|
||||||
;;
|
;;
|
||||||
xtensa|xtensaeb)
|
xtensa|xtensaeb)
|
||||||
|
2
cpus.c
2
cpus.c
@ -1016,7 +1016,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
|
|||||||
qemu_cond_signal(&qemu_cpu_cond);
|
qemu_cond_signal(&qemu_cpu_cond);
|
||||||
|
|
||||||
/* wait for initial kick-off after machine start */
|
/* wait for initial kick-off after machine start */
|
||||||
while (QTAILQ_FIRST(&cpus)->stopped) {
|
while (first_cpu->stopped) {
|
||||||
qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
|
qemu_cond_wait(tcg_halt_cond, &qemu_global_mutex);
|
||||||
|
|
||||||
/* process any pending work */
|
/* process any pending work */
|
||||||
|
@ -1,11 +1,3 @@
|
|||||||
# Default configuration for microblazeel-softmmu
|
# Default configuration for microblazeel-softmmu
|
||||||
|
|
||||||
CONFIG_PTIMER=y
|
include microblaze-softmmu.mak
|
||||||
CONFIG_PFLASH_CFI01=y
|
|
||||||
CONFIG_SERIAL=y
|
|
||||||
CONFIG_XILINX=y
|
|
||||||
CONFIG_XILINX_AXI=y
|
|
||||||
CONFIG_XILINX_SPI=y
|
|
||||||
CONFIG_XILINX_ETHLITE=y
|
|
||||||
CONFIG_SSI=y
|
|
||||||
CONFIG_SSI_M25P80=y
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
#include "sysemu/dma.h"
|
#include "sysemu/dma.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
#include "qemu/range.h"
|
|
||||||
#include "qemu/thread.h"
|
#include "qemu/thread.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ note that the other barrier may actually be in a driver that runs in
|
|||||||
the guest!
|
the guest!
|
||||||
|
|
||||||
For the purposes of pairing, smp_read_barrier_depends() and smp_rmb()
|
For the purposes of pairing, smp_read_barrier_depends() and smp_rmb()
|
||||||
both count as read barriers. A read barriers shall pair with a write
|
both count as read barriers. A read barrier shall pair with a write
|
||||||
barrier or a full barrier; a write barrier shall pair with a read
|
barrier or a full barrier; a write barrier shall pair with a read
|
||||||
barrier or a full barrier. A full barrier can pair with anything.
|
barrier or a full barrier. A full barrier can pair with anything.
|
||||||
For example:
|
For example:
|
||||||
@ -294,7 +294,7 @@ For example:
|
|||||||
smp_rmb();
|
smp_rmb();
|
||||||
y = a;
|
y = a;
|
||||||
|
|
||||||
Note that the "writing" thread are accessing the variables in the
|
Note that the "writing" thread is accessing the variables in the
|
||||||
opposite order as the "reading" thread. This is expected: stores
|
opposite order as the "reading" thread. This is expected: stores
|
||||||
before the write barrier will normally match the loads after the
|
before the write barrier will normally match the loads after the
|
||||||
read barrier, and vice versa. The same is true for more than 2
|
read barrier, and vice versa. The same is true for more than 2
|
||||||
|
1
hmp.h
1
hmp.h
@ -109,7 +109,6 @@ void set_link_completion(ReadLineState *rs, int nb_args, const char *str);
|
|||||||
void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str);
|
void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
void ringbuf_read_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
||||||
void watchdog_action_completion(ReadLineState *rs, int nb_args,
|
void watchdog_action_completion(ReadLineState *rs, int nb_args,
|
||||||
const char *str);
|
const char *str);
|
||||||
void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
|
void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "hw/acpi/acpi.h"
|
#include "hw/acpi/acpi.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "qemu/range.h"
|
|
||||||
#include "exec/ioport.h"
|
#include "exec/ioport.h"
|
||||||
#include "exec/address-spaces.h"
|
#include "exec/address-spaces.h"
|
||||||
#include "hw/pci/pci_bus.h"
|
#include "hw/pci/pci_bus.h"
|
||||||
|
@ -515,7 +515,7 @@ void virtio_blk_handle_request(VirtIOBlockReq *req, MultiReqBuffer *mrb)
|
|||||||
type = virtio_ldl_p(VIRTIO_DEVICE(req->dev), &req->out.type);
|
type = virtio_ldl_p(VIRTIO_DEVICE(req->dev), &req->out.type);
|
||||||
|
|
||||||
/* VIRTIO_BLK_T_OUT defines the command direction. VIRTIO_BLK_T_BARRIER
|
/* VIRTIO_BLK_T_OUT defines the command direction. VIRTIO_BLK_T_BARRIER
|
||||||
* is an optional flag. Altough a guest should not send this flag if
|
* is an optional flag. Although a guest should not send this flag if
|
||||||
* not negotiated we ignored it in the past. So keep ignoring it. */
|
* not negotiated we ignored it in the past. So keep ignoring it. */
|
||||||
switch (type & ~(VIRTIO_BLK_T_OUT | VIRTIO_BLK_T_BARRIER)) {
|
switch (type & ~(VIRTIO_BLK_T_OUT | VIRTIO_BLK_T_BARRIER)) {
|
||||||
case VIRTIO_BLK_T_IN:
|
case VIRTIO_BLK_T_IN:
|
||||||
|
@ -696,7 +696,7 @@ static inline void qxl_push_free_res(PCIQXLDevice *d, int flush)
|
|||||||
|
|
||||||
/* called from spice server thread context only */
|
/* called from spice server thread context only */
|
||||||
static void interface_release_resource(QXLInstance *sin,
|
static void interface_release_resource(QXLInstance *sin,
|
||||||
struct QXLReleaseInfoExt ext)
|
QXLReleaseInfoExt ext)
|
||||||
{
|
{
|
||||||
PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl);
|
PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl);
|
||||||
QXLReleaseRing *ring;
|
QXLReleaseRing *ring;
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "qemu/bitmap.h"
|
#include "qemu/bitmap.h"
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/range.h"
|
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "qom/cpu.h"
|
#include "qom/cpu.h"
|
||||||
|
@ -113,15 +113,15 @@ void microblaze_load_kernel(MicroBlazeCPU *cpu, hwaddr ddr_base,
|
|||||||
const char *kernel_filename;
|
const char *kernel_filename;
|
||||||
const char *kernel_cmdline;
|
const char *kernel_cmdline;
|
||||||
const char *dtb_arg;
|
const char *dtb_arg;
|
||||||
|
char *filename = NULL;
|
||||||
|
|
||||||
machine_opts = qemu_get_machine_opts();
|
machine_opts = qemu_get_machine_opts();
|
||||||
kernel_filename = qemu_opt_get(machine_opts, "kernel");
|
kernel_filename = qemu_opt_get(machine_opts, "kernel");
|
||||||
kernel_cmdline = qemu_opt_get(machine_opts, "append");
|
kernel_cmdline = qemu_opt_get(machine_opts, "append");
|
||||||
dtb_arg = qemu_opt_get(machine_opts, "dtb");
|
dtb_arg = qemu_opt_get(machine_opts, "dtb");
|
||||||
if (dtb_arg) { /* Preference a -dtb argument */
|
/* default to pcbios dtb as passed by machine_init */
|
||||||
dtb_filename = dtb_arg;
|
if (!dtb_arg) {
|
||||||
} else { /* default to pcbios dtb as passed by machine_init */
|
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename);
|
||||||
dtb_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dtb_filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boot_info.machine_cpu_reset = machine_cpu_reset;
|
boot_info.machine_cpu_reset = machine_cpu_reset;
|
||||||
@ -203,7 +203,8 @@ void microblaze_load_kernel(MicroBlazeCPU *cpu, hwaddr ddr_base,
|
|||||||
boot_info.initrd_start,
|
boot_info.initrd_start,
|
||||||
boot_info.initrd_end,
|
boot_info.initrd_end,
|
||||||
kernel_cmdline,
|
kernel_cmdline,
|
||||||
dtb_filename);
|
/* Preference a -dtb argument */
|
||||||
|
dtb_arg ? dtb_arg : filename);
|
||||||
}
|
}
|
||||||
|
g_free(filename);
|
||||||
}
|
}
|
||||||
|
@ -168,6 +168,7 @@ static int64_t load_kernel (CPUMIPSState *env)
|
|||||||
rom_add_blob_fixed("prom", prom_buf, prom_size,
|
rom_add_blob_fixed("prom", prom_buf, prom_size,
|
||||||
cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
|
cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
|
||||||
|
|
||||||
|
g_free(prom_buf);
|
||||||
return kernel_entry;
|
return kernel_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,6 +861,7 @@ static int64_t load_kernel (void)
|
|||||||
rom_add_blob_fixed("prom", prom_buf, prom_size,
|
rom_add_blob_fixed("prom", prom_buf, prom_size,
|
||||||
cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
|
cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));
|
||||||
|
|
||||||
|
g_free(prom_buf);
|
||||||
return kernel_entry;
|
return kernel_entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +139,7 @@ static int64_t load_kernel(void)
|
|||||||
rom_add_blob_fixed("params", params_buf, params_size,
|
rom_add_blob_fixed("params", params_buf, params_size,
|
||||||
(16 << 20) - 264);
|
(16 << 20) - 264);
|
||||||
|
|
||||||
|
g_free(params_buf);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ static const MemoryRegionOps edu_mmio_ops = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We purposedly use a thread, so that users are forced to wait for the status
|
* We purposely use a thread, so that users are forced to wait for the status
|
||||||
* register.
|
* register.
|
||||||
*/
|
*/
|
||||||
static void *edu_fact_thread(void *opaque)
|
static void *edu_fact_thread(void *opaque)
|
||||||
|
@ -1590,7 +1590,7 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
|||||||
n->max_queues = MAX(n->nic_conf.peers.queues, 1);
|
n->max_queues = MAX(n->nic_conf.peers.queues, 1);
|
||||||
if (n->max_queues * 2 + 1 > VIRTIO_PCI_QUEUE_MAX) {
|
if (n->max_queues * 2 + 1 > VIRTIO_PCI_QUEUE_MAX) {
|
||||||
error_setg(errp, "Invalid number of queues (= %" PRIu32 "), "
|
error_setg(errp, "Invalid number of queues (= %" PRIu32 "), "
|
||||||
"must be a postive integer less than %d.",
|
"must be a positive integer less than %d.",
|
||||||
n->max_queues, (VIRTIO_PCI_QUEUE_MAX - 1) / 2);
|
n->max_queues, (VIRTIO_PCI_QUEUE_MAX - 1) / 2);
|
||||||
virtio_cleanup(vdev);
|
virtio_cleanup(vdev);
|
||||||
return;
|
return;
|
||||||
|
@ -172,13 +172,6 @@ bool vmxnet_rx_pkt_has_virt_hdr(struct VmxnetRxPkt *pkt)
|
|||||||
return pkt->has_virt_hdr;
|
return pkt->has_virt_hdr;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t vmxnet_rx_pkt_get_num_frags(struct VmxnetRxPkt *pkt)
|
|
||||||
{
|
|
||||||
assert(pkt);
|
|
||||||
|
|
||||||
return pkt->vec_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t vmxnet_rx_pkt_get_vlan_tag(struct VmxnetRxPkt *pkt)
|
uint16_t vmxnet_rx_pkt_get_vlan_tag(struct VmxnetRxPkt *pkt)
|
||||||
{
|
{
|
||||||
assert(pkt);
|
assert(pkt);
|
||||||
|
@ -113,15 +113,6 @@ bool vmxnet_rx_pkt_is_vlan_stripped(struct VmxnetRxPkt *pkt);
|
|||||||
*/
|
*/
|
||||||
bool vmxnet_rx_pkt_has_virt_hdr(struct VmxnetRxPkt *pkt);
|
bool vmxnet_rx_pkt_has_virt_hdr(struct VmxnetRxPkt *pkt);
|
||||||
|
|
||||||
/**
|
|
||||||
* returns number of frags attached to the packet
|
|
||||||
*
|
|
||||||
* @pkt: packet
|
|
||||||
* @ret: number of frags
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
uint16_t vmxnet_rx_pkt_get_num_frags(struct VmxnetRxPkt *pkt);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* attach data to rx packet
|
* attach data to rx packet
|
||||||
*
|
*
|
||||||
|
@ -101,27 +101,6 @@ static const TypeInfo i82801b11_bridge_info = {
|
|||||||
.class_init = i82801b11_bridge_class_init,
|
.class_init = i82801b11_bridge_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
PCIBus *ich9_d2pbr_init(PCIBus *bus, int devfn, int sec_bus)
|
|
||||||
{
|
|
||||||
PCIDevice *d;
|
|
||||||
PCIBridge *br;
|
|
||||||
char buf[16];
|
|
||||||
DeviceState *qdev;
|
|
||||||
|
|
||||||
d = pci_create_multifunction(bus, devfn, true, "i82801b11-bridge");
|
|
||||||
if (!d) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
br = PCI_BRIDGE(d);
|
|
||||||
qdev = DEVICE(d);
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "pci.%d", sec_bus);
|
|
||||||
pci_bridge_map_irq(br, buf, pci_swizzle_map_irq_fn);
|
|
||||||
qdev_init_nofail(qdev);
|
|
||||||
|
|
||||||
return pci_bridge_get_sec_bus(br);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void d2pbr_register(void)
|
static void d2pbr_register(void)
|
||||||
{
|
{
|
||||||
type_register_static(&i82801b11_bridge_info);
|
type_register_static(&i82801b11_bridge_info);
|
||||||
|
@ -1029,7 +1029,7 @@ static int spapr_post_load(void *opaque, int version_id)
|
|||||||
sPAPREnvironment *spapr = (sPAPREnvironment *)opaque;
|
sPAPREnvironment *spapr = (sPAPREnvironment *)opaque;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
/* In earlier versions, there was no seperate qdev for the PAPR
|
/* In earlier versions, there was no separate qdev for the PAPR
|
||||||
* RTC, so the RTC offset was stored directly in sPAPREnvironment.
|
* RTC, so the RTC offset was stored directly in sPAPREnvironment.
|
||||||
* So when migrating from those versions, poke the incoming offset
|
* So when migrating from those versions, poke the incoming offset
|
||||||
* value into the RTC device */
|
* value into the RTC device */
|
||||||
|
@ -34,15 +34,13 @@
|
|||||||
#include "sysemu/tpm_backend_int.h"
|
#include "sysemu/tpm_backend_int.h"
|
||||||
#include "tpm_tis.h"
|
#include "tpm_tis.h"
|
||||||
|
|
||||||
/* #define DEBUG_TPM */
|
#define DEBUG_TPM 0
|
||||||
|
|
||||||
#ifdef DEBUG_TPM
|
#define DPRINTF(fmt, ...) do { \
|
||||||
#define DPRINTF(fmt, ...) \
|
if (DEBUG_TPM) { \
|
||||||
do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
|
fprintf(stderr, fmt, ## __VA_ARGS__); \
|
||||||
#else
|
} \
|
||||||
#define DPRINTF(fmt, ...) \
|
} while (0);
|
||||||
do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TYPE_TPM_PASSTHROUGH "tpm-passthrough"
|
#define TYPE_TPM_PASSTHROUGH "tpm-passthrough"
|
||||||
#define TPM_PASSTHROUGH(obj) \
|
#define TPM_PASSTHROUGH(obj) \
|
||||||
|
@ -30,15 +30,13 @@
|
|||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
|
|
||||||
/*#define DEBUG_TIS */
|
#define DEBUG_TIS 0
|
||||||
|
|
||||||
#ifdef DEBUG_TIS
|
#define DPRINTF(fmt, ...) do { \
|
||||||
#define DPRINTF(fmt, ...) \
|
if (DEBUG_TIS) { \
|
||||||
do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
|
printf(fmt, ## __VA_ARGS__); \
|
||||||
#else
|
} \
|
||||||
#define DPRINTF(fmt, ...) \
|
} while (0);
|
||||||
do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* whether the STS interrupt is supported */
|
/* whether the STS interrupt is supported */
|
||||||
#define RAISE_STS_IRQ
|
#define RAISE_STS_IRQ
|
||||||
@ -421,7 +419,7 @@ static void tpm_tis_dump_state(void *opaque, hwaddr addr)
|
|||||||
|
|
||||||
for (idx = 0; regs[idx] != 0xfff; idx++) {
|
for (idx = 0; regs[idx] != 0xfff; idx++) {
|
||||||
DPRINTF("tpm_tis: 0x%04x : 0x%08x\n", regs[idx],
|
DPRINTF("tpm_tis: 0x%04x : 0x%08x\n", regs[idx],
|
||||||
(uint32_t)tpm_tis_mmio_read(opaque, base + regs[idx], 4));
|
(int)tpm_tis_mmio_read(opaque, base + regs[idx], 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTF("tpm_tis: read offset : %d\n"
|
DPRINTF("tpm_tis: read offset : %d\n"
|
||||||
@ -555,7 +553,7 @@ static uint64_t tpm_tis_mmio_read(void *opaque, hwaddr addr,
|
|||||||
val >>= shift;
|
val >>= shift;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTF("tpm_tis: read.%u(%08x) = %08x\n", size, (int)addr, (uint32_t)val);
|
DPRINTF("tpm_tis: read.%u(%08x) = %08x\n", size, (int)addr, (int)val);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -578,7 +576,7 @@ static void tpm_tis_mmio_write_intern(void *opaque, hwaddr addr,
|
|||||||
uint16_t len;
|
uint16_t len;
|
||||||
uint32_t mask = (size == 1) ? 0xff : ((size == 2) ? 0xffff : ~0);
|
uint32_t mask = (size == 1) ? 0xff : ((size == 2) ? 0xffff : ~0);
|
||||||
|
|
||||||
DPRINTF("tpm_tis: write.%u(%08x) = %08x\n", size, (int)addr, (uint32_t)val);
|
DPRINTF("tpm_tis: write.%u(%08x) = %08x\n", size, (int)addr, (int)val);
|
||||||
|
|
||||||
if (locty == 4 && !hw_access) {
|
if (locty == 4 && !hw_access) {
|
||||||
DPRINTF("tpm_tis: Access to locality 4 only allowed from hardware\n");
|
DPRINTF("tpm_tis: Access to locality 4 only allowed from hardware\n");
|
||||||
@ -815,7 +813,7 @@ static void tpm_tis_mmio_write_intern(void *opaque, hwaddr addr,
|
|||||||
/* drop the byte */
|
/* drop the byte */
|
||||||
} else {
|
} else {
|
||||||
DPRINTF("tpm_tis: Data to send to TPM: %08x (size=%d)\n",
|
DPRINTF("tpm_tis: Data to send to TPM: %08x (size=%d)\n",
|
||||||
val, size);
|
(int)val, size);
|
||||||
if (tis->loc[locty].state == TPM_TIS_STATE_READY) {
|
if (tis->loc[locty].state == TPM_TIS_STATE_READY) {
|
||||||
tis->loc[locty].state = TPM_TIS_STATE_RECEPTION;
|
tis->loc[locty].state = TPM_TIS_STATE_RECEPTION;
|
||||||
tpm_tis_sts_set(&tis->loc[locty],
|
tpm_tis_sts_set(&tis->loc[locty],
|
||||||
@ -844,7 +842,7 @@ static void tpm_tis_mmio_write_intern(void *opaque, hwaddr addr,
|
|||||||
(tis->loc[locty].sts & TPM_TIS_STS_EXPECT)) {
|
(tis->loc[locty].sts & TPM_TIS_STS_EXPECT)) {
|
||||||
/* we have a packet length - see if we have all of it */
|
/* we have a packet length - see if we have all of it */
|
||||||
#ifdef RAISE_STS_IRQ
|
#ifdef RAISE_STS_IRQ
|
||||||
bool needIrq = !(tis->loc[locty].sts & TPM_TIS_STS_VALID);
|
bool need_irq = !(tis->loc[locty].sts & TPM_TIS_STS_VALID);
|
||||||
#endif
|
#endif
|
||||||
len = tpm_tis_get_size_from_buffer(&tis->loc[locty].w_buffer);
|
len = tpm_tis_get_size_from_buffer(&tis->loc[locty].w_buffer);
|
||||||
if (len > tis->loc[locty].w_offset) {
|
if (len > tis->loc[locty].w_offset) {
|
||||||
@ -855,7 +853,7 @@ static void tpm_tis_mmio_write_intern(void *opaque, hwaddr addr,
|
|||||||
tpm_tis_sts_set(&tis->loc[locty], TPM_TIS_STS_VALID);
|
tpm_tis_sts_set(&tis->loc[locty], TPM_TIS_STS_VALID);
|
||||||
}
|
}
|
||||||
#ifdef RAISE_STS_IRQ
|
#ifdef RAISE_STS_IRQ
|
||||||
if (needIrq) {
|
if (need_irq) {
|
||||||
tpm_tis_raise_irq(s, locty, TPM_TIS_INT_STS_VALID);
|
tpm_tis_raise_irq(s, locty, TPM_TIS_INT_STS_VALID);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -331,23 +331,6 @@ void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p)
|
|||||||
usb_packet_complete(s, p);
|
usb_packet_complete(s, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: fix overflow */
|
|
||||||
int set_usb_string(uint8_t *buf, const char *str)
|
|
||||||
{
|
|
||||||
int len, i;
|
|
||||||
uint8_t *q;
|
|
||||||
|
|
||||||
q = buf;
|
|
||||||
len = strlen(str);
|
|
||||||
*q++ = 2 * len + 2;
|
|
||||||
*q++ = 3;
|
|
||||||
for(i = 0; i < len; i++) {
|
|
||||||
*q++ = str[i];
|
|
||||||
*q++ = 0;
|
|
||||||
}
|
|
||||||
return q - buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
USBDevice *usb_find_device(USBPort *port, uint8_t addr)
|
USBDevice *usb_find_device(USBPort *port, uint8_t addr)
|
||||||
{
|
{
|
||||||
USBDevice *dev = port->dev;
|
USBDevice *dev = port->dev;
|
||||||
@ -749,12 +732,6 @@ void usb_ep_set_type(USBDevice *dev, int pid, int ep, uint8_t type)
|
|||||||
uep->type = type;
|
uep->type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t usb_ep_get_ifnum(USBDevice *dev, int pid, int ep)
|
|
||||||
{
|
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
|
||||||
return uep->ifnum;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum)
|
void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum)
|
||||||
{
|
{
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
||||||
@ -782,12 +759,6 @@ void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
|
|||||||
uep->max_packet_size = size * microframes;
|
uep->max_packet_size = size * microframes;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep)
|
|
||||||
{
|
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
|
||||||
return uep->max_packet_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw)
|
void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw)
|
||||||
{
|
{
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
||||||
@ -801,18 +772,6 @@ void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int usb_ep_get_max_streams(USBDevice *dev, int pid, int ep)
|
|
||||||
{
|
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
|
||||||
return uep->max_streams;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled)
|
|
||||||
{
|
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
|
||||||
uep->pipeline = enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usb_ep_set_halted(USBDevice *dev, int pid, int ep, bool halted)
|
void usb_ep_set_halted(USBDevice *dev, int pid, int ep, bool halted)
|
||||||
{
|
{
|
||||||
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
|
||||||
|
@ -128,7 +128,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
|||||||
|
|
||||||
r = qemu_chr_fe_read_all(chr, p, size);
|
r = qemu_chr_fe_read_all(chr, p, size);
|
||||||
if (r != size) {
|
if (r != size) {
|
||||||
error_report("Failed to read msg header. Read %d instead of %d.\n", r,
|
error_report("Failed to read msg header. Read %d instead of %d.", r,
|
||||||
size);
|
size);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -136,7 +136,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
|||||||
/* validate received flags */
|
/* validate received flags */
|
||||||
if (msg->flags != (VHOST_USER_REPLY_MASK | VHOST_USER_VERSION)) {
|
if (msg->flags != (VHOST_USER_REPLY_MASK | VHOST_USER_VERSION)) {
|
||||||
error_report("Failed to read msg header."
|
error_report("Failed to read msg header."
|
||||||
" Flags 0x%x instead of 0x%x.\n", msg->flags,
|
" Flags 0x%x instead of 0x%x.", msg->flags,
|
||||||
VHOST_USER_REPLY_MASK | VHOST_USER_VERSION);
|
VHOST_USER_REPLY_MASK | VHOST_USER_VERSION);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
|||||||
/* validate message size is sane */
|
/* validate message size is sane */
|
||||||
if (msg->size > VHOST_USER_PAYLOAD_SIZE) {
|
if (msg->size > VHOST_USER_PAYLOAD_SIZE) {
|
||||||
error_report("Failed to read msg header."
|
error_report("Failed to read msg header."
|
||||||
" Size %d exceeds the maximum %zu.\n", msg->size,
|
" Size %d exceeds the maximum %zu.", msg->size,
|
||||||
VHOST_USER_PAYLOAD_SIZE);
|
VHOST_USER_PAYLOAD_SIZE);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ static int vhost_user_read(struct vhost_dev *dev, VhostUserMsg *msg)
|
|||||||
r = qemu_chr_fe_read_all(chr, p, size);
|
r = qemu_chr_fe_read_all(chr, p, size);
|
||||||
if (r != size) {
|
if (r != size) {
|
||||||
error_report("Failed to read msg payload."
|
error_report("Failed to read msg payload."
|
||||||
" Read %d instead of %d.\n", r, msg->size);
|
" Read %d instead of %d.", r, msg->size);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -235,8 +235,8 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
|
|||||||
msg.memory.nregions = fd_num;
|
msg.memory.nregions = fd_num;
|
||||||
|
|
||||||
if (!fd_num) {
|
if (!fd_num) {
|
||||||
error_report("Failed initializing vhost-user memory map\n"
|
error_report("Failed initializing vhost-user memory map, "
|
||||||
"consider using -object memory-backend-file share=on\n");
|
"consider using -object memory-backend-file share=on");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_report("vhost-user trying to send unhandled ioctl\n");
|
error_report("vhost-user trying to send unhandled ioctl");
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -296,27 +296,27 @@ static int vhost_user_call(struct vhost_dev *dev, unsigned long int request,
|
|||||||
|
|
||||||
if (msg_request != msg.request) {
|
if (msg_request != msg.request) {
|
||||||
error_report("Received unexpected msg type."
|
error_report("Received unexpected msg type."
|
||||||
" Expected %d received %d\n", msg_request, msg.request);
|
" Expected %d received %d", msg_request, msg.request);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (msg_request) {
|
switch (msg_request) {
|
||||||
case VHOST_USER_GET_FEATURES:
|
case VHOST_USER_GET_FEATURES:
|
||||||
if (msg.size != sizeof(m.u64)) {
|
if (msg.size != sizeof(m.u64)) {
|
||||||
error_report("Received bad msg size.\n");
|
error_report("Received bad msg size.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*((__u64 *) arg) = msg.u64;
|
*((__u64 *) arg) = msg.u64;
|
||||||
break;
|
break;
|
||||||
case VHOST_USER_GET_VRING_BASE:
|
case VHOST_USER_GET_VRING_BASE:
|
||||||
if (msg.size != sizeof(m.state)) {
|
if (msg.size != sizeof(m.state)) {
|
||||||
error_report("Received bad msg size.\n");
|
error_report("Received bad msg size.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memcpy(arg, &msg.state, sizeof(struct vhost_vring_state));
|
memcpy(arg, &msg.state, sizeof(struct vhost_vring_state));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error_report("Received unexpected msg type.\n");
|
error_report("Received unexpected msg type.");
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#define HW_ICH9_H
|
#define HW_ICH9_H
|
||||||
|
|
||||||
#include "hw/hw.h"
|
#include "hw/hw.h"
|
||||||
#include "qemu/range.h"
|
|
||||||
#include "hw/isa/isa.h"
|
#include "hw/isa/isa.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
@ -19,7 +18,6 @@ void ich9_lpc_set_irq(void *opaque, int irq_num, int level);
|
|||||||
int ich9_lpc_map_irq(PCIDevice *pci_dev, int intx);
|
int ich9_lpc_map_irq(PCIDevice *pci_dev, int intx);
|
||||||
PCIINTxRoute ich9_route_intx_pin_to_irq(void *opaque, int pirq_pin);
|
PCIINTxRoute ich9_route_intx_pin_to_irq(void *opaque, int pirq_pin);
|
||||||
void ich9_lpc_pm_init(PCIDevice *pci_lpc);
|
void ich9_lpc_pm_init(PCIDevice *pci_lpc);
|
||||||
PCIBus *ich9_d2pbr_init(PCIBus *bus, int devfn, int sec_bus);
|
|
||||||
I2CBus *ich9_smb_init(PCIBus *bus, int devfn, uint32_t smb_io_base);
|
I2CBus *ich9_smb_init(PCIBus *bus, int devfn, uint32_t smb_io_base);
|
||||||
|
|
||||||
#define ICH9_CC_SIZE (16 * 1024) /* 16KB */
|
#define ICH9_CC_SIZE (16 * 1024) /* 16KB */
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#define HW_Q35_H
|
#define HW_Q35_H
|
||||||
|
|
||||||
#include "hw/hw.h"
|
#include "hw/hw.h"
|
||||||
#include "qemu/range.h"
|
|
||||||
#include "hw/isa/isa.h"
|
#include "hw/isa/isa.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
|
@ -445,15 +445,11 @@ void usb_ep_reset(USBDevice *dev);
|
|||||||
void usb_ep_dump(USBDevice *dev);
|
void usb_ep_dump(USBDevice *dev);
|
||||||
struct USBEndpoint *usb_ep_get(USBDevice *dev, int pid, int ep);
|
struct USBEndpoint *usb_ep_get(USBDevice *dev, int pid, int ep);
|
||||||
uint8_t usb_ep_get_type(USBDevice *dev, int pid, int ep);
|
uint8_t usb_ep_get_type(USBDevice *dev, int pid, int ep);
|
||||||
uint8_t usb_ep_get_ifnum(USBDevice *dev, int pid, int ep);
|
|
||||||
void usb_ep_set_type(USBDevice *dev, int pid, int ep, uint8_t type);
|
void usb_ep_set_type(USBDevice *dev, int pid, int ep, uint8_t type);
|
||||||
void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum);
|
void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep, uint8_t ifnum);
|
||||||
void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
|
void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
|
||||||
uint16_t raw);
|
uint16_t raw);
|
||||||
int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep);
|
|
||||||
void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw);
|
void usb_ep_set_max_streams(USBDevice *dev, int pid, int ep, uint8_t raw);
|
||||||
int usb_ep_get_max_streams(USBDevice *dev, int pid, int ep);
|
|
||||||
void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled);
|
|
||||||
void usb_ep_set_halted(USBDevice *dev, int pid, int ep, bool halted);
|
void usb_ep_set_halted(USBDevice *dev, int pid, int ep, bool halted);
|
||||||
USBPacket *usb_ep_find_packet_by_id(USBDevice *dev, int pid, int ep,
|
USBPacket *usb_ep_find_packet_by_id(USBDevice *dev, int pid, int ep,
|
||||||
uint64_t id);
|
uint64_t id);
|
||||||
@ -469,7 +465,6 @@ void usb_port_reset(USBPort *port);
|
|||||||
void usb_device_reset(USBDevice *dev);
|
void usb_device_reset(USBDevice *dev);
|
||||||
void usb_wakeup(USBEndpoint *ep, unsigned int stream);
|
void usb_wakeup(USBEndpoint *ep, unsigned int stream);
|
||||||
void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p);
|
void usb_generic_async_ctrl_complete(USBDevice *s, USBPacket *p);
|
||||||
int set_usb_string(uint8_t *buf, const char *str);
|
|
||||||
|
|
||||||
/* usb-linux.c */
|
/* usb-linux.c */
|
||||||
USBDevice *usb_host_device_open(USBBus *bus, const char *devname);
|
USBDevice *usb_host_device_open(USBBus *bus, const char *devname);
|
||||||
|
@ -47,7 +47,6 @@ typedef void (MonitorCompletion)(void *opaque, QObject *ret_data);
|
|||||||
|
|
||||||
void monitor_set_error(Monitor *mon, QError *qerror);
|
void monitor_set_error(Monitor *mon, QError *qerror);
|
||||||
void monitor_read_command(Monitor *mon, int show_prompt);
|
void monitor_read_command(Monitor *mon, int show_prompt);
|
||||||
ReadLineState *monitor_get_rs(Monitor *mon);
|
|
||||||
int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
|
int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
|
|
||||||
|
@ -217,10 +217,6 @@ void *qemu_oom_check(void *ptr);
|
|||||||
|
|
||||||
ssize_t qemu_write_full(int fd, const void *buf, size_t count)
|
ssize_t qemu_write_full(int fd, const void *buf, size_t count)
|
||||||
QEMU_WARN_UNUSED_RESULT;
|
QEMU_WARN_UNUSED_RESULT;
|
||||||
ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags)
|
|
||||||
QEMU_WARN_UNUSED_RESULT;
|
|
||||||
ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags)
|
|
||||||
QEMU_WARN_UNUSED_RESULT;
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
int qemu_pipe(int pipefd[2]);
|
int qemu_pipe(int pipefd[2]);
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
#define BITS_PER_BYTE CHAR_BIT
|
#define BITS_PER_BYTE CHAR_BIT
|
||||||
#define BITS_PER_LONG (sizeof (unsigned long) * BITS_PER_BYTE)
|
#define BITS_PER_LONG (sizeof (unsigned long) * BITS_PER_BYTE)
|
||||||
|
|
||||||
#define BIT(nr) (1UL << (nr))
|
#define BIT(nr) (1UL << (nr))
|
||||||
#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
|
#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
|
||||||
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
|
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
|
||||||
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
|
#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set_bit - Set a bit in memory
|
* set_bit - Set a bit in memory
|
||||||
@ -32,10 +32,10 @@
|
|||||||
*/
|
*/
|
||||||
static inline void set_bit(long nr, unsigned long *addr)
|
static inline void set_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
|
|
||||||
*p |= mask;
|
*p |= mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,10 +45,10 @@ static inline void set_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline void clear_bit(long nr, unsigned long *addr)
|
static inline void clear_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
|
|
||||||
*p &= ~mask;
|
*p &= ~mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,10 +58,10 @@ static inline void clear_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline void change_bit(long nr, unsigned long *addr)
|
static inline void change_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
|
|
||||||
*p ^= mask;
|
*p ^= mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,12 +71,12 @@ static inline void change_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline int test_and_set_bit(long nr, unsigned long *addr)
|
static inline int test_and_set_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
unsigned long old = *p;
|
unsigned long old = *p;
|
||||||
|
|
||||||
*p = old | mask;
|
*p = old | mask;
|
||||||
return (old & mask) != 0;
|
return (old & mask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,12 +86,12 @@ static inline int test_and_set_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline int test_and_clear_bit(long nr, unsigned long *addr)
|
static inline int test_and_clear_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
unsigned long old = *p;
|
unsigned long old = *p;
|
||||||
|
|
||||||
*p = old & ~mask;
|
*p = old & ~mask;
|
||||||
return (old & mask) != 0;
|
return (old & mask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,12 +101,12 @@ static inline int test_and_clear_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline int test_and_change_bit(long nr, unsigned long *addr)
|
static inline int test_and_change_bit(long nr, unsigned long *addr)
|
||||||
{
|
{
|
||||||
unsigned long mask = BIT_MASK(nr);
|
unsigned long mask = BIT_MASK(nr);
|
||||||
unsigned long *p = addr + BIT_WORD(nr);
|
unsigned long *p = addr + BIT_WORD(nr);
|
||||||
unsigned long old = *p;
|
unsigned long old = *p;
|
||||||
|
|
||||||
*p = old ^ mask;
|
*p = old ^ mask;
|
||||||
return (old & mask) != 0;
|
return (old & mask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,7 +116,7 @@ static inline int test_and_change_bit(long nr, unsigned long *addr)
|
|||||||
*/
|
*/
|
||||||
static inline int test_bit(long nr, const unsigned long *addr)
|
static inline int test_bit(long nr, const unsigned long *addr)
|
||||||
{
|
{
|
||||||
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
|
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -136,7 +136,8 @@ unsigned long find_last_bit(const unsigned long *addr,
|
|||||||
* @size: The bitmap size in bits
|
* @size: The bitmap size in bits
|
||||||
*/
|
*/
|
||||||
unsigned long find_next_bit(const unsigned long *addr,
|
unsigned long find_next_bit(const unsigned long *addr,
|
||||||
unsigned long size, unsigned long offset);
|
unsigned long size,
|
||||||
|
unsigned long offset);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* find_next_zero_bit - find the next cleared bit in a memory region
|
* find_next_zero_bit - find the next cleared bit in a memory region
|
||||||
|
@ -39,6 +39,5 @@ struct qemu_signalfd_siginfo {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int qemu_signalfd(const sigset_t *mask);
|
int qemu_signalfd(const sigset_t *mask);
|
||||||
bool qemu_signalfd_available(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
14
kvm-all.c
14
kvm-all.c
@ -552,13 +552,13 @@ static int kvm_set_ioeventfd_mmio(int fd, hwaddr addr, uint32_t val,
|
|||||||
bool assign, uint32_t size, bool datamatch)
|
bool assign, uint32_t size, bool datamatch)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct kvm_ioeventfd iofd;
|
struct kvm_ioeventfd iofd = {
|
||||||
|
.datamatch = datamatch ? adjust_ioeventfd_endianness(val, size) : 0,
|
||||||
iofd.datamatch = datamatch ? adjust_ioeventfd_endianness(val, size) : 0;
|
.addr = addr,
|
||||||
iofd.addr = addr;
|
.len = size,
|
||||||
iofd.len = size;
|
.flags = 0,
|
||||||
iofd.flags = 0;
|
.fd = fd,
|
||||||
iofd.fd = fd;
|
};
|
||||||
|
|
||||||
if (!kvm_enabled()) {
|
if (!kvm_enabled()) {
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
@ -5,7 +5,10 @@
|
|||||||
* See the COPYING.LIB file in the top-level directory.
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "cac.h"
|
#include "cac.h"
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
* See the COPYING.LIB file in the top-level directory.
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
#include "vcard_emul.h"
|
#include "vcard_emul.h"
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* See the COPYING.LIB file in the top-level directory.
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
#include "vreader.h"
|
#include "vreader.h"
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
* See the COPYING.LIB file in the top-level directory.
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
#include "vcard_emul.h"
|
#include "vcard_emul.h"
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include <prthread.h>
|
#include <prthread.h>
|
||||||
#include <secerr.h>
|
#include <secerr.h>
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
#include "card_7816t.h"
|
#include "card_7816t.h"
|
||||||
@ -33,7 +33,7 @@
|
|||||||
#include "vreader.h"
|
#include "vreader.h"
|
||||||
#include "vevent.h"
|
#include "vevent.h"
|
||||||
|
|
||||||
#include "libcacard/vcardt_internal.h"
|
#include "vcardt_internal.h"
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include "libcacard/vcardt.h"
|
#include "vcardt.h"
|
||||||
|
|
||||||
#include "libcacard/vcardt_internal.h"
|
#include "vcardt_internal.h"
|
||||||
|
|
||||||
/* create an ATR with appropriate historical bytes */
|
/* create an ATR with appropriate historical bytes */
|
||||||
#define ATR_TS_DIRECT_CONVENTION 0x3b
|
#define ATR_TS_DIRECT_CONVENTION 0x3b
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#define G_LOG_DOMAIN "libcacard"
|
#define G_LOG_DOMAIN "libcacard"
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "vcard.h"
|
#include "vcard.h"
|
||||||
#include "vcard_emul.h"
|
#include "vcard_emul.h"
|
||||||
|
@ -10,14 +10,20 @@
|
|||||||
* See the COPYING.LIB file in the top-level directory.
|
* See the COPYING.LIB file in the top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#include <unistd.h>
|
||||||
#define closesocket(x) close(x)
|
#define closesocket(x) close(x)
|
||||||
|
#else
|
||||||
|
#include <getopt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "qemu-common.h"
|
#include "glib-compat.h"
|
||||||
|
|
||||||
#include "vscard_common.h"
|
#include "vscard_common.h"
|
||||||
|
|
||||||
|
@ -2887,8 +2887,7 @@ static int write_note_info(struct elf_note_info *info, int fd)
|
|||||||
return (error);
|
return (error);
|
||||||
|
|
||||||
/* write prstatus for each thread */
|
/* write prstatus for each thread */
|
||||||
for (ets = info->thread_list.tqh_first; ets != NULL;
|
QTAILQ_FOREACH(ets, &info->thread_list, ets_link) {
|
||||||
ets = ets->ets_link.tqe_next) {
|
|
||||||
if ((error = write_note(&ets->notes[0], fd)) != 0)
|
if ((error = write_note(&ets->notes[0], fd)) != 0)
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
13
monitor.c
13
monitor.c
@ -4390,14 +4390,6 @@ static void ringbuf_completion(ReadLineState *rs, const char *str)
|
|||||||
qapi_free_ChardevInfoList(start);
|
qapi_free_ChardevInfoList(start);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ringbuf_read_completion(ReadLineState *rs, int nb_args, const char *str)
|
|
||||||
{
|
|
||||||
if (nb_args != 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ringbuf_completion(rs, str);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str)
|
void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str)
|
||||||
{
|
{
|
||||||
if (nb_args != 2) {
|
if (nb_args != 2) {
|
||||||
@ -5392,11 +5384,6 @@ static void bdrv_password_cb(void *opaque, const char *password,
|
|||||||
monitor_read_command(mon, 1);
|
monitor_read_command(mon, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadLineState *monitor_get_rs(Monitor *mon)
|
|
||||||
{
|
|
||||||
return mon->rs;
|
|
||||||
}
|
|
||||||
|
|
||||||
int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
|
int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
|
||||||
BlockCompletionFunc *completion_cb,
|
BlockCompletionFunc *completion_cb,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
|
@ -973,7 +973,6 @@ typedef struct FDCharDriver {
|
|||||||
CharDriverState *chr;
|
CharDriverState *chr;
|
||||||
GIOChannel *fd_in, *fd_out;
|
GIOChannel *fd_in, *fd_out;
|
||||||
int max_size;
|
int max_size;
|
||||||
QTAILQ_ENTRY(FDCharDriver) node;
|
|
||||||
} FDCharDriver;
|
} FDCharDriver;
|
||||||
|
|
||||||
/* Called with chr_write_lock held. */
|
/* Called with chr_write_lock held. */
|
||||||
|
@ -108,7 +108,7 @@ bool qemu_co_enter_next(CoQueue *queue)
|
|||||||
|
|
||||||
bool qemu_co_queue_empty(CoQueue *queue)
|
bool qemu_co_queue_empty(CoQueue *queue)
|
||||||
{
|
{
|
||||||
return (QTAILQ_FIRST(&queue->entries) == NULL);
|
return QTAILQ_FIRST(&queue->entries) == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_co_mutex_init(CoMutex *mutex)
|
void qemu_co_mutex_init(CoMutex *mutex)
|
||||||
|
@ -3106,7 +3106,7 @@ executed often has little or no correlation with actual performance.
|
|||||||
to synchronise the host clock and the virtual clock. The goal is to
|
to synchronise the host clock and the virtual clock. The goal is to
|
||||||
have a guest running at the real frequency imposed by the shift option.
|
have a guest running at the real frequency imposed by the shift option.
|
||||||
Whenever the guest clock is behind the host clock and if
|
Whenever the guest clock is behind the host clock and if
|
||||||
@option{align=on} is specified then we print a messsage to the user
|
@option{align=on} is specified then we print a message to the user
|
||||||
to inform about the delay.
|
to inform about the delay.
|
||||||
Currently this option does not work when @option{shift} is @code{auto}.
|
Currently this option does not work when @option{shift} is @code{auto}.
|
||||||
Note: The sync algorithm will work for those shift values for which
|
Note: The sync algorithm will work for those shift values for which
|
||||||
|
@ -808,7 +808,7 @@
|
|||||||
#
|
#
|
||||||
# An enumeration of memory block operation result.
|
# An enumeration of memory block operation result.
|
||||||
#
|
#
|
||||||
# @sucess: the operation of online/offline memory block is successful.
|
# @success: the operation of online/offline memory block is successful.
|
||||||
# @not-found: can't find the corresponding memoryXXX directory in sysfs.
|
# @not-found: can't find the corresponding memoryXXX directory in sysfs.
|
||||||
# @operation-not-supported: for some old kernels, it does not support
|
# @operation-not-supported: for some old kernels, it does not support
|
||||||
# online or offline memory block.
|
# online or offline memory block.
|
||||||
|
@ -2380,7 +2380,7 @@ Example:
|
|||||||
"virtual-size":2048000,
|
"virtual-size":2048000,
|
||||||
"backing_file":"base.qcow2",
|
"backing_file":"base.qcow2",
|
||||||
"full-backing-filename":"disks/base.qcow2",
|
"full-backing-filename":"disks/base.qcow2",
|
||||||
"backing-filename-format:"qcow2",
|
"backing-filename-format":"qcow2",
|
||||||
"snapshots":[
|
"snapshots":[
|
||||||
{
|
{
|
||||||
"id": "1",
|
"id": "1",
|
||||||
@ -3847,7 +3847,7 @@ Example:
|
|||||||
"virtual-size":2048000,
|
"virtual-size":2048000,
|
||||||
"backing_file":"base.qcow2",
|
"backing_file":"base.qcow2",
|
||||||
"full-backing-filename":"disks/base.qcow2",
|
"full-backing-filename":"disks/base.qcow2",
|
||||||
"backing-filename-format:"qcow2",
|
"backing-filename-format":"qcow2",
|
||||||
"snapshots":[
|
"snapshots":[
|
||||||
{
|
{
|
||||||
"id": "1",
|
"id": "1",
|
||||||
|
@ -93,11 +93,6 @@
|
|||||||
#define ARM_CPU_VIRQ 2
|
#define ARM_CPU_VIRQ 2
|
||||||
#define ARM_CPU_VFIQ 3
|
#define ARM_CPU_VFIQ 3
|
||||||
|
|
||||||
typedef void ARMWriteCPFunc(void *opaque, int cp_info,
|
|
||||||
int srcreg, int operand, uint32_t value);
|
|
||||||
typedef uint32_t ARMReadCPFunc(void *opaque, int cp_info,
|
|
||||||
int dstreg, int operand);
|
|
||||||
|
|
||||||
struct arm_boot_info;
|
struct arm_boot_info;
|
||||||
|
|
||||||
#define NB_MMU_MODES 7
|
#define NB_MMU_MODES 7
|
||||||
@ -1879,15 +1874,6 @@ static inline void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc,
|
|||||||
|
|
||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
|
|
||||||
static inline void cpu_pc_from_tb(CPUARMState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
if (ARM_TBFLAG_AARCH64_STATE(tb->flags)) {
|
|
||||||
env->pc = tb->pc;
|
|
||||||
} else {
|
|
||||||
env->regs[15] = tb->pc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
QEMU_PSCI_CONDUIT_DISABLED = 0,
|
QEMU_PSCI_CONDUIT_DISABLED = 0,
|
||||||
QEMU_PSCI_CONDUIT_SMC = 1,
|
QEMU_PSCI_CONDUIT_SMC = 1,
|
||||||
|
@ -36,12 +36,11 @@ typedef struct CPUMBState CPUMBState;
|
|||||||
|
|
||||||
#define ELF_MACHINE EM_MICROBLAZE
|
#define ELF_MACHINE EM_MICROBLAZE
|
||||||
|
|
||||||
#define EXCP_NMI 1
|
#define EXCP_MMU 1
|
||||||
#define EXCP_MMU 2
|
#define EXCP_IRQ 2
|
||||||
#define EXCP_IRQ 3
|
#define EXCP_BREAK 3
|
||||||
#define EXCP_BREAK 4
|
#define EXCP_HW_BREAK 4
|
||||||
#define EXCP_HW_BREAK 5
|
#define EXCP_HW_EXCP 5
|
||||||
#define EXCP_HW_EXCP 6
|
|
||||||
|
|
||||||
/* MicroBlaze-specific interrupt pending bits. */
|
/* MicroBlaze-specific interrupt pending bits. */
|
||||||
#define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3
|
#define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_3
|
||||||
@ -284,12 +283,6 @@ int cpu_mb_exec(CPUMBState *s);
|
|||||||
int cpu_mb_signal_handler(int host_signum, void *pinfo,
|
int cpu_mb_signal_handler(int host_signum, void *pinfo,
|
||||||
void *puc);
|
void *puc);
|
||||||
|
|
||||||
enum {
|
|
||||||
CC_OP_DYNAMIC, /* Use env->cc_op */
|
|
||||||
CC_OP_FLAGS,
|
|
||||||
CC_OP_CMP,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */
|
/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */
|
||||||
#define TARGET_PAGE_BITS 12
|
#define TARGET_PAGE_BITS 12
|
||||||
#define MMAP_SHIFT TARGET_PAGE_BITS
|
#define MMAP_SHIFT TARGET_PAGE_BITS
|
||||||
@ -326,18 +319,8 @@ static inline int cpu_mmu_index (CPUMBState *env)
|
|||||||
int mb_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int rw,
|
int mb_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int rw,
|
||||||
int mmu_idx);
|
int mmu_idx);
|
||||||
|
|
||||||
static inline int cpu_interrupts_enabled(CPUMBState *env)
|
|
||||||
{
|
|
||||||
return env->sregs[SR_MSR] & MSR_IE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "exec/cpu-all.h"
|
#include "exec/cpu-all.h"
|
||||||
|
|
||||||
static inline target_ulong cpu_get_pc(CPUMBState *env)
|
|
||||||
{
|
|
||||||
return env->sregs[SR_PC];
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void cpu_get_tb_cpu_state(CPUMBState *env, target_ulong *pc,
|
static inline void cpu_get_tb_cpu_state(CPUMBState *env, target_ulong *pc,
|
||||||
target_ulong *cs_base, int *flags)
|
target_ulong *cs_base, int *flags)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +82,6 @@ struct microblaze_mmu_lookup
|
|||||||
} err;
|
} err;
|
||||||
};
|
};
|
||||||
|
|
||||||
void mmu_flip_um(CPUMBState *env, unsigned int um);
|
|
||||||
unsigned int mmu_translate(struct microblaze_mmu *mmu,
|
unsigned int mmu_translate(struct microblaze_mmu *mmu,
|
||||||
struct microblaze_mmu_lookup *lu,
|
struct microblaze_mmu_lookup *lu,
|
||||||
target_ulong vaddr, int rw, int mmu_idx);
|
target_ulong vaddr, int rw, int mmu_idx);
|
||||||
|
@ -415,9 +415,4 @@ static inline int cpu_mmu_index(CPUOpenRISCState *env)
|
|||||||
|
|
||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
|
|
||||||
static inline target_ulong cpu_get_pc(CPUOpenRISCState *env)
|
|
||||||
{
|
|
||||||
return env->pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CPU_OPENRISC_H */
|
#endif /* CPU_OPENRISC_H */
|
||||||
|
@ -303,8 +303,8 @@ static int mmu_translate_asce(CPUS390XState *env, target_ulong vaddr,
|
|||||||
* @param asc address space control (one of the PSW_ASC_* modes)
|
* @param asc address space control (one of the PSW_ASC_* modes)
|
||||||
* @param raddr the translated address is stored to this pointer
|
* @param raddr the translated address is stored to this pointer
|
||||||
* @param flags the PAGE_READ/WRITE/EXEC flags are stored to this pointer
|
* @param flags the PAGE_READ/WRITE/EXEC flags are stored to this pointer
|
||||||
* @param exc true = inject a program check if a fault occured
|
* @param exc true = inject a program check if a fault occurred
|
||||||
* @return 0 if the translation was successfull, -1 if a fault occured
|
* @return 0 if the translation was successful, -1 if a fault occurred
|
||||||
*/
|
*/
|
||||||
int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
|
int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
|
||||||
target_ulong *raddr, int *flags, bool exc)
|
target_ulong *raddr, int *flags, bool exc)
|
||||||
@ -437,9 +437,9 @@ static int translate_pages(S390CPU *cpu, vaddr addr, int nr_pages,
|
|||||||
* @laddr: the logical start address
|
* @laddr: the logical start address
|
||||||
* @ar: the access register number
|
* @ar: the access register number
|
||||||
* @hostbuf: buffer in host memory. NULL = do only checks w/o copying
|
* @hostbuf: buffer in host memory. NULL = do only checks w/o copying
|
||||||
* @len: length that should be transfered
|
* @len: length that should be transferred
|
||||||
* @is_write: true = write, false = read
|
* @is_write: true = write, false = read
|
||||||
* Returns: 0 on success, non-zero if an exception occured
|
* Returns: 0 on success, non-zero if an exception occurred
|
||||||
*
|
*
|
||||||
* Copy from/to guest memory using logical addresses. Note that we inject a
|
* Copy from/to guest memory using logical addresses. Note that we inject a
|
||||||
* program interrupt in case there is an error while accessing the memory.
|
* program interrupt in case there is an error while accessing the memory.
|
||||||
|
@ -2990,7 +2990,7 @@ static ExitStatus op_sam(DisasContext *s, DisasOps *o)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bizzare but true, we check the address of the current insn for the
|
/* Bizarre but true, we check the address of the current insn for the
|
||||||
specification exception, not the next to be executed. Thus the PoO
|
specification exception, not the next to be executed. Thus the PoO
|
||||||
documents that Bad Things Happen two bytes before the end. */
|
documents that Bad Things Happen two bytes before the end. */
|
||||||
if (s->pc & ~mask) {
|
if (s->pc & ~mask) {
|
||||||
|
@ -395,9 +395,4 @@ int cpu_tricore_handle_mmu_fault(CPUState *cpu, target_ulong address,
|
|||||||
|
|
||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
|
|
||||||
static inline void cpu_pc_from_tb(CPUTriCoreState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
env->PC = tb->pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /*__TRICORE_CPU_H__ */
|
#endif /*__TRICORE_CPU_H__ */
|
||||||
|
@ -859,8 +859,10 @@ static inline size_t tcg_current_code_size(TCGContext *s)
|
|||||||
* state is correctly synchronised and ready for execution of the next
|
* state is correctly synchronised and ready for execution of the next
|
||||||
* TB (and in particular the guest PC is the address to execute next).
|
* TB (and in particular the guest PC is the address to execute next).
|
||||||
* Otherwise, we gave up on execution of this TB before it started, and
|
* Otherwise, we gave up on execution of this TB before it started, and
|
||||||
* the caller must fix up the CPU state by calling cpu_pc_from_tb()
|
* the caller must fix up the CPU state by calling the CPU's
|
||||||
* with the next-TB pointer we return.
|
* synchronize_from_tb() method with the next-TB pointer we return (falling
|
||||||
|
* back to calling the CPU's set_pc method with tb->pb if no
|
||||||
|
* synchronize_from_tb() method exists).
|
||||||
*
|
*
|
||||||
* Note that TCG targets may use a different definition of tcg_qemu_tb_exec
|
* Note that TCG targets may use a different definition of tcg_qemu_tb_exec
|
||||||
* to this default (which just calls the prologue.code emitted by
|
* to this default (which just calls the prologue.code emitted by
|
||||||
|
@ -364,7 +364,7 @@ void ahci_port_clear(AHCIQState *ahci, uint8_t port)
|
|||||||
ahci_px_wreg(ahci, port, AHCI_PX_IS, reg);
|
ahci_px_wreg(ahci, port, AHCI_PX_IS, reg);
|
||||||
g_assert_cmphex(ahci_px_rreg(ahci, port, AHCI_PX_IS), ==, 0);
|
g_assert_cmphex(ahci_px_rreg(ahci, port, AHCI_PX_IS), ==, 0);
|
||||||
|
|
||||||
/* Wipe the FIS-Recieve Buffer */
|
/* Wipe the FIS-Receive Buffer */
|
||||||
qmemset(ahci->port[port].fb, 0x00, 0x100);
|
qmemset(ahci->port[port].fb, 0x00, 0x100);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,7 +442,7 @@ void ahci_port_check_pio_sanity(AHCIQState *ahci, uint8_t port,
|
|||||||
{
|
{
|
||||||
PIOSetupFIS *pio = g_malloc0(0x20);
|
PIOSetupFIS *pio = g_malloc0(0x20);
|
||||||
|
|
||||||
/* We cannot check the Status or E_Status registers, becuase
|
/* We cannot check the Status or E_Status registers, because
|
||||||
* the status may have again changed between the PIO Setup FIS
|
* the status may have again changed between the PIO Setup FIS
|
||||||
* and the conclusion of the command with the D2H Register FIS. */
|
* and the conclusion of the command with the D2H Register FIS. */
|
||||||
memread(ahci->port[port].fb + 0x20, pio, 0x20);
|
memread(ahci->port[port].fb + 0x20, pio, 0x20);
|
||||||
|
@ -269,7 +269,7 @@ void graphic_hw_invalidate(QemuConsole *con)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ppm_save(const char *filename, struct DisplaySurface *ds,
|
static void ppm_save(const char *filename, DisplaySurface *ds,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
int width = pixman_image_get_width(ds->image);
|
int width = pixman_image_get_width(ds->image);
|
||||||
@ -1535,7 +1535,7 @@ void dpy_text_update(QemuConsole *con, int x, int y, int w, int h)
|
|||||||
void dpy_text_resize(QemuConsole *con, int w, int h)
|
void dpy_text_resize(QemuConsole *con, int w, int h)
|
||||||
{
|
{
|
||||||
DisplayState *s = con->ds;
|
DisplayState *s = con->ds;
|
||||||
struct DisplayChangeListener *dcl;
|
DisplayChangeListener *dcl;
|
||||||
|
|
||||||
if (!qemu_console_is_visible(con)) {
|
if (!qemu_console_is_visible(con)) {
|
||||||
return;
|
return;
|
||||||
|
@ -57,8 +57,6 @@ struct QEMUPutLEDEntry {
|
|||||||
|
|
||||||
static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers =
|
static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers =
|
||||||
QTAILQ_HEAD_INITIALIZER(led_handlers);
|
QTAILQ_HEAD_INITIALIZER(led_handlers);
|
||||||
static QTAILQ_HEAD(, QEMUPutMouseEntry) mouse_handlers =
|
|
||||||
QTAILQ_HEAD_INITIALIZER(mouse_handlers);
|
|
||||||
|
|
||||||
int index_from_key(const char *key)
|
int index_from_key(const char *key)
|
||||||
{
|
{
|
||||||
|
@ -539,7 +539,7 @@ static void interface_get_init_info(QXLInstance *sin, QXLDevInitInfo *info)
|
|||||||
info->n_surfaces = ssd->num_surfaces;
|
info->n_surfaces = ssd->num_surfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int interface_get_command(QXLInstance *sin, struct QXLCommandExt *ext)
|
static int interface_get_command(QXLInstance *sin, QXLCommandExt *ext)
|
||||||
{
|
{
|
||||||
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
||||||
SimpleSpiceUpdate *update;
|
SimpleSpiceUpdate *update;
|
||||||
@ -566,7 +566,7 @@ static int interface_req_cmd_notification(QXLInstance *sin)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void interface_release_resource(QXLInstance *sin,
|
static void interface_release_resource(QXLInstance *sin,
|
||||||
struct QXLReleaseInfoExt rext)
|
QXLReleaseInfoExt rext)
|
||||||
{
|
{
|
||||||
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
||||||
SimpleSpiceUpdate *update;
|
SimpleSpiceUpdate *update;
|
||||||
@ -589,7 +589,7 @@ static void interface_release_resource(QXLInstance *sin,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int interface_get_cursor_command(QXLInstance *sin, struct QXLCommandExt *ext)
|
static int interface_get_cursor_command(QXLInstance *sin, QXLCommandExt *ext)
|
||||||
{
|
{
|
||||||
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
SimpleSpiceDisplay *ssd = container_of(sin, SimpleSpiceDisplay, qxl);
|
||||||
int ret;
|
int ret;
|
||||||
@ -718,7 +718,7 @@ static void display_update(DisplayChangeListener *dcl,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void display_switch(DisplayChangeListener *dcl,
|
static void display_switch(DisplayChangeListener *dcl,
|
||||||
struct DisplaySurface *surface)
|
DisplaySurface *surface)
|
||||||
{
|
{
|
||||||
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
|
SimpleSpiceDisplay *ssd = container_of(dcl, SimpleSpiceDisplay, dcl);
|
||||||
qemu_spice_display_switch(ssd, surface);
|
qemu_spice_display_switch(ssd, surface);
|
||||||
|
@ -65,7 +65,8 @@ static void start_auth_vencrypt_subauth(VncState *vs)
|
|||||||
|
|
||||||
static void vnc_tls_handshake_io(void *opaque);
|
static void vnc_tls_handshake_io(void *opaque);
|
||||||
|
|
||||||
static int vnc_start_vencrypt_handshake(struct VncState *vs) {
|
static int vnc_start_vencrypt_handshake(VncState *vs)
|
||||||
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if ((ret = gnutls_handshake(vs->tls.session)) < 0) {
|
if ((ret = gnutls_handshake(vs->tls.session)) < 0) {
|
||||||
@ -100,8 +101,9 @@ static int vnc_start_vencrypt_handshake(struct VncState *vs) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vnc_tls_handshake_io(void *opaque) {
|
static void vnc_tls_handshake_io(void *opaque)
|
||||||
struct VncState *vs = (struct VncState *)opaque;
|
{
|
||||||
|
VncState *vs = (VncState *)opaque;
|
||||||
|
|
||||||
VNC_DEBUG("Handshake IO continue\n");
|
VNC_DEBUG("Handshake IO continue\n");
|
||||||
vnc_start_vencrypt_handshake(vs);
|
vnc_start_vencrypt_handshake(vs);
|
||||||
|
10
ui/vnc-tls.c
10
ui/vnc-tls.c
@ -68,7 +68,7 @@ static int vnc_tls_initialize(void)
|
|||||||
static ssize_t vnc_tls_push(gnutls_transport_ptr_t transport,
|
static ssize_t vnc_tls_push(gnutls_transport_ptr_t transport,
|
||||||
const void *data,
|
const void *data,
|
||||||
size_t len) {
|
size_t len) {
|
||||||
struct VncState *vs = (struct VncState *)transport;
|
VncState *vs = (VncState *)transport;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
@ -85,7 +85,7 @@ static ssize_t vnc_tls_push(gnutls_transport_ptr_t transport,
|
|||||||
static ssize_t vnc_tls_pull(gnutls_transport_ptr_t transport,
|
static ssize_t vnc_tls_pull(gnutls_transport_ptr_t transport,
|
||||||
void *data,
|
void *data,
|
||||||
size_t len) {
|
size_t len) {
|
||||||
struct VncState *vs = (struct VncState *)transport;
|
VncState *vs = (VncState *)transport;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
@ -170,7 +170,7 @@ static gnutls_certificate_credentials_t vnc_tls_initialize_x509_cred(VncDisplay
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vnc_tls_validate_certificate(struct VncState *vs)
|
int vnc_tls_validate_certificate(VncState *vs)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int status;
|
unsigned int status;
|
||||||
@ -332,7 +332,7 @@ static int vnc_set_gnutls_priority(gnutls_session_t s, int x509)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int vnc_tls_client_setup(struct VncState *vs,
|
int vnc_tls_client_setup(VncState *vs,
|
||||||
int needX509Creds) {
|
int needX509Creds) {
|
||||||
VNC_DEBUG("Do TLS setup\n");
|
VNC_DEBUG("Do TLS setup\n");
|
||||||
if (vnc_tls_initialize() < 0) {
|
if (vnc_tls_initialize() < 0) {
|
||||||
@ -410,7 +410,7 @@ int vnc_tls_client_setup(struct VncState *vs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void vnc_tls_client_cleanup(struct VncState *vs)
|
void vnc_tls_client_cleanup(VncState *vs)
|
||||||
{
|
{
|
||||||
if (vs->tls.session) {
|
if (vs->tls.session) {
|
||||||
gnutls_deinit(vs->tls.session);
|
gnutls_deinit(vs->tls.session);
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#ifdef CONFIG_VNC_TLS
|
#ifdef CONFIG_VNC_TLS
|
||||||
#include "qemu/sockets.h"
|
#include "qemu/sockets.h"
|
||||||
|
|
||||||
static int vncws_start_tls_handshake(struct VncState *vs)
|
static int vncws_start_tls_handshake(VncState *vs)
|
||||||
{
|
{
|
||||||
int ret = gnutls_handshake(vs->tls.session);
|
int ret = gnutls_handshake(vs->tls.session);
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ static int vncws_start_tls_handshake(struct VncState *vs)
|
|||||||
|
|
||||||
void vncws_tls_handshake_io(void *opaque)
|
void vncws_tls_handshake_io(void *opaque)
|
||||||
{
|
{
|
||||||
struct VncState *vs = (struct VncState *)opaque;
|
VncState *vs = (VncState *)opaque;
|
||||||
|
|
||||||
if (!vs->tls.session) {
|
if (!vs->tls.session) {
|
||||||
VNC_DEBUG("TLS Websocket setup\n");
|
VNC_DEBUG("TLS Websocket setup\n");
|
||||||
|
2
ui/vnc.c
2
ui/vnc.c
@ -1046,7 +1046,7 @@ static void vnc_dpy_cursor_define(DisplayChangeListener *dcl,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_and_clear_dirty_height(struct VncState *vs,
|
static int find_and_clear_dirty_height(VncState *vs,
|
||||||
int y, int last_x, int x, int height)
|
int y, int last_x, int x, int height)
|
||||||
{
|
{
|
||||||
int h;
|
int h;
|
||||||
|
@ -108,22 +108,3 @@ int qemu_signalfd(const sigset_t *mask)
|
|||||||
|
|
||||||
return qemu_signalfd_compat(mask);
|
return qemu_signalfd_compat(mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool qemu_signalfd_available(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_SIGNALFD
|
|
||||||
sigset_t mask;
|
|
||||||
int fd;
|
|
||||||
bool ok;
|
|
||||||
sigemptyset(&mask);
|
|
||||||
errno = 0;
|
|
||||||
fd = syscall(SYS_signalfd, -1, &mask, _NSIG / 8);
|
|
||||||
ok = (errno != ENOSYS);
|
|
||||||
if (fd >= 0) {
|
|
||||||
close(fd);
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
66
util/osdep.c
66
util/osdep.c
@ -310,72 +310,6 @@ int qemu_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* A variant of send(2) which handles partial write.
|
|
||||||
*
|
|
||||||
* Return the number of bytes transferred, which is only
|
|
||||||
* smaller than `count' if there is an error.
|
|
||||||
*
|
|
||||||
* This function won't work with non-blocking fd's.
|
|
||||||
* Any of the possibilities with non-bloking fd's is bad:
|
|
||||||
* - return a short write (then name is wrong)
|
|
||||||
* - busy wait adding (errno == EAGAIN) to the loop
|
|
||||||
*/
|
|
||||||
ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags)
|
|
||||||
{
|
|
||||||
ssize_t ret = 0;
|
|
||||||
ssize_t total = 0;
|
|
||||||
|
|
||||||
while (count) {
|
|
||||||
ret = send(fd, buf, count, flags);
|
|
||||||
if (ret < 0) {
|
|
||||||
if (errno == EINTR) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
count -= ret;
|
|
||||||
buf += ret;
|
|
||||||
total += ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A variant of recv(2) which handles partial write.
|
|
||||||
*
|
|
||||||
* Return the number of bytes transferred, which is only
|
|
||||||
* smaller than `count' if there is an error.
|
|
||||||
*
|
|
||||||
* This function won't work with non-blocking fd's.
|
|
||||||
* Any of the possibilities with non-bloking fd's is bad:
|
|
||||||
* - return a short write (then name is wrong)
|
|
||||||
* - busy wait adding (errno == EAGAIN) to the loop
|
|
||||||
*/
|
|
||||||
ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags)
|
|
||||||
{
|
|
||||||
ssize_t ret = 0;
|
|
||||||
ssize_t total = 0;
|
|
||||||
|
|
||||||
while (count) {
|
|
||||||
ret = qemu_recv(fd, buf, count, flags);
|
|
||||||
if (ret <= 0) {
|
|
||||||
if (ret < 0 && errno == EINTR) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
count -= ret;
|
|
||||||
buf += ret;
|
|
||||||
total += ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
void qemu_set_version(const char *version)
|
void qemu_set_version(const char *version)
|
||||||
{
|
{
|
||||||
qemu_version = version;
|
qemu_version = version;
|
||||||
|
@ -3,10 +3,8 @@
|
|||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
#include "hw/qdev.h"
|
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qmp-commands.h"
|
#include "qmp-commands.h"
|
||||||
#include "hw/i386/pc.h"
|
|
||||||
|
|
||||||
static QemuOptsList *vm_config_groups[32];
|
static QemuOptsList *vm_config_groups[32];
|
||||||
static QemuOptsList *drive_config_groups[4];
|
static QemuOptsList *drive_config_groups[4];
|
||||||
|
Loading…
Reference in New Issue
Block a user