mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
* Add cpu0-id to query-sev-capabilities
* whpx support for breakpoints and stepping * initial support for Hyper-V Synthetic Debugging * use monotonic clock for QemuCond and QemuSemaphore * Remove qemu-common.h include from most units and lots of other clenaups * do not include headers for all virtio devices in virtio-ccw.h -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmJXCQAUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroNT6wf+NHDJUEdDiwaVGVTGXgHuiaycsymi FpNPiw/+XxSGN5xF3fkUGgqaDrcwIYwVfnXlghKSz8kp1cP3cjxa5CzNMLGTp5je N6BxFbD7yC6dhagGm3mj32jlsptv3M38OHqKc3t+RaUAotP5RF2VdCyfUBLG6vU0 aMzvMfMtB5aG0D8Fr5EV63t1JMTceFU0YxsG73UCFs2Yx4Z0cGBbNxMbHweRhd1q tPeVDS46MFPM3/2cGGHpeeqxkoCTU7A9j1VuNQI3k+Kg+6W5YVxiK/UP7bw77E/a yAHsmIVTNro8ajMBch73weuHtGtdfFLvCKc6QX6aVjzK4dF1voQ01E7gPQ== =rMle -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * Add cpu0-id to query-sev-capabilities * whpx support for breakpoints and stepping * initial support for Hyper-V Synthetic Debugging * use monotonic clock for QemuCond and QemuSemaphore * Remove qemu-common.h include from most units and lots of other clenaups * do not include headers for all virtio devices in virtio-ccw.h # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmJXCQAUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroNT6wf+NHDJUEdDiwaVGVTGXgHuiaycsymi # FpNPiw/+XxSGN5xF3fkUGgqaDrcwIYwVfnXlghKSz8kp1cP3cjxa5CzNMLGTp5je # N6BxFbD7yC6dhagGm3mj32jlsptv3M38OHqKc3t+RaUAotP5RF2VdCyfUBLG6vU0 # aMzvMfMtB5aG0D8Fr5EV63t1JMTceFU0YxsG73UCFs2Yx4Z0cGBbNxMbHweRhd1q # tPeVDS46MFPM3/2cGGHpeeqxkoCTU7A9j1VuNQI3k+Kg+6W5YVxiK/UP7bw77E/a # yAHsmIVTNro8ajMBch73weuHtGtdfFLvCKc6QX6aVjzK4dF1voQ01E7gPQ== # =rMle # -----END PGP SIGNATURE----- # gpg: Signature made Wed 13 Apr 2022 10:31:44 AM PDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [undefined] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (53 commits) target/i386: Remove unused XMMReg, YMMReg types and CPUState fields target/i386: do not access beyond the low 128 bits of SSE registers virtio-ccw: do not include headers for all virtio devices virtio-ccw: move device type declarations to .c files virtio-ccw: move vhost_ccw_scsi to a separate file s390x: follow qdev tree to detect SCSI device on a CCW bus hw: hyperv: Initial commit for Synthetic Debugging device hyperv: Add support to process syndbg commands hyperv: Add definitions for syndbg hyperv: SControl is optional to enable SynIc thread-posix: optimize qemu_sem_timedwait with zero timeout thread-posix: implement Semaphore with QemuCond and QemuMutex thread-posix: use monotonic clock for QemuCond and QemuSemaphore thread-posix: remove the posix semaphore support whpx: Added support for breakpoints and stepping build-sys: simplify AF_VSOCK check build-sys: drop ntddscsi.h check Remove qemu-common.h include from most units qga: remove explicit environ argument from exec/spawn Move fcntl_setfl() to oslib-posix ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
1be5a765c0
515 changed files with 3179 additions and 1791 deletions
|
@ -187,7 +187,7 @@ struct CPUClass {
|
|||
typedef union IcountDecr {
|
||||
uint32_t u32;
|
||||
struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint16_t high;
|
||||
uint16_t low;
|
||||
#else
|
||||
|
@ -1028,13 +1028,15 @@ void cpu_exec_unrealizefn(CPUState *cpu);
|
|||
* target_words_bigendian:
|
||||
* Returns true if the (default) endianness of the target is big endian,
|
||||
* false otherwise. Note that in target-specific code, you can use
|
||||
* TARGET_WORDS_BIGENDIAN directly instead. On the other hand, common
|
||||
* TARGET_BIG_ENDIAN directly instead. On the other hand, common
|
||||
* code should normally never need to know about the endianness of the
|
||||
* target, so please do *not* use this function unless you know very well
|
||||
* what you are doing!
|
||||
*/
|
||||
bool target_words_bigendian(void);
|
||||
|
||||
void page_size_init(void);
|
||||
|
||||
#ifdef NEED_CPU_H
|
||||
|
||||
#ifdef CONFIG_SOFTMMU
|
||||
|
|
|
@ -24,12 +24,17 @@
|
|||
#define HV_STATUS_INVALID_PORT_ID 17
|
||||
#define HV_STATUS_INVALID_CONNECTION_ID 18
|
||||
#define HV_STATUS_INSUFFICIENT_BUFFERS 19
|
||||
#define HV_STATUS_NOT_ACKNOWLEDGED 20
|
||||
#define HV_STATUS_NO_DATA 27
|
||||
|
||||
/*
|
||||
* Hypercall numbers
|
||||
*/
|
||||
#define HV_POST_MESSAGE 0x005c
|
||||
#define HV_SIGNAL_EVENT 0x005d
|
||||
#define HV_POST_DEBUG_DATA 0x0069
|
||||
#define HV_RETRIEVE_DEBUG_DATA 0x006a
|
||||
#define HV_RESET_DEBUG_SESSION 0x006b
|
||||
#define HV_HYPERCALL_FAST (1u << 16)
|
||||
|
||||
/*
|
||||
|
@ -127,4 +132,51 @@ struct hyperv_event_flags_page {
|
|||
struct hyperv_event_flags slot[HV_SINT_COUNT];
|
||||
};
|
||||
|
||||
/*
|
||||
* Kernel debugger structures
|
||||
*/
|
||||
|
||||
/* Options flags for hyperv_reset_debug_session */
|
||||
#define HV_DEBUG_PURGE_INCOMING_DATA 0x00000001
|
||||
#define HV_DEBUG_PURGE_OUTGOING_DATA 0x00000002
|
||||
struct hyperv_reset_debug_session_input {
|
||||
uint32_t options;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct hyperv_reset_debug_session_output {
|
||||
uint32_t host_ip;
|
||||
uint32_t target_ip;
|
||||
uint16_t host_port;
|
||||
uint16_t target_port;
|
||||
uint8_t host_mac[6];
|
||||
uint8_t target_mac[6];
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
/* Options for hyperv_post_debug_data */
|
||||
#define HV_DEBUG_POST_LOOP 0x00000001
|
||||
|
||||
struct hyperv_post_debug_data_input {
|
||||
uint32_t count;
|
||||
uint32_t options;
|
||||
/*uint8_t data[HV_HYP_PAGE_SIZE - 2 * sizeof(uint32_t)];*/
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct hyperv_post_debug_data_output {
|
||||
uint32_t pending_count;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
/* Options for hyperv_retrieve_debug_data */
|
||||
#define HV_DEBUG_RETRIEVE_LOOP 0x00000001
|
||||
#define HV_DEBUG_RETRIEVE_TEST_ACTIVITY 0x00000002
|
||||
|
||||
struct hyperv_retrieve_debug_data_input {
|
||||
uint32_t count;
|
||||
uint32_t options;
|
||||
uint64_t timeout;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct hyperv_retrieve_debug_data_output {
|
||||
uint32_t retrieved_count;
|
||||
uint32_t remaining_count;
|
||||
} __attribute__ ((__packed__));
|
||||
#endif
|
||||
|
|
|
@ -81,4 +81,62 @@ void hyperv_synic_update(CPUState *cs, bool enable,
|
|||
hwaddr msg_page_addr, hwaddr event_page_addr);
|
||||
bool hyperv_is_synic_enabled(void);
|
||||
|
||||
/*
|
||||
* Process HVCALL_RESET_DEBUG_SESSION hypercall.
|
||||
*/
|
||||
uint16_t hyperv_hcall_reset_dbg_session(uint64_t outgpa);
|
||||
/*
|
||||
* Process HVCALL_RETREIVE_DEBUG_DATA hypercall.
|
||||
*/
|
||||
uint16_t hyperv_hcall_retreive_dbg_data(uint64_t ingpa, uint64_t outgpa,
|
||||
bool fast);
|
||||
/*
|
||||
* Process HVCALL_POST_DEBUG_DATA hypercall.
|
||||
*/
|
||||
uint16_t hyperv_hcall_post_dbg_data(uint64_t ingpa, uint64_t outgpa, bool fast);
|
||||
|
||||
uint32_t hyperv_syndbg_send(uint64_t ingpa, uint32_t count);
|
||||
uint32_t hyperv_syndbg_recv(uint64_t ingpa, uint32_t count);
|
||||
void hyperv_syndbg_set_pending_page(uint64_t ingpa);
|
||||
uint64_t hyperv_syndbg_query_options(void);
|
||||
|
||||
typedef enum HvSynthDbgMsgType {
|
||||
HV_SYNDBG_MSG_CONNECTION_INFO,
|
||||
HV_SYNDBG_MSG_SEND,
|
||||
HV_SYNDBG_MSG_RECV,
|
||||
HV_SYNDBG_MSG_SET_PENDING_PAGE,
|
||||
HV_SYNDBG_MSG_QUERY_OPTIONS
|
||||
} HvDbgSynthMsgType;
|
||||
|
||||
typedef struct HvSynDbgMsg {
|
||||
HvDbgSynthMsgType type;
|
||||
union {
|
||||
struct {
|
||||
uint32_t host_ip;
|
||||
uint16_t host_port;
|
||||
} connection_info;
|
||||
struct {
|
||||
uint64_t buf_gpa;
|
||||
uint32_t count;
|
||||
uint32_t pending_count;
|
||||
bool is_raw;
|
||||
} send;
|
||||
struct {
|
||||
uint64_t buf_gpa;
|
||||
uint32_t count;
|
||||
uint32_t options;
|
||||
uint64_t timeout;
|
||||
uint32_t retrieved_count;
|
||||
bool is_raw;
|
||||
} recv;
|
||||
struct {
|
||||
uint64_t buf_gpa;
|
||||
} pending_page;
|
||||
struct {
|
||||
uint64_t options;
|
||||
} query_options;
|
||||
} u;
|
||||
} HvSynDbgMsg;
|
||||
typedef uint16_t (*HvSynDbgHandler)(void *context, HvSynDbgMsg *msg);
|
||||
void hyperv_set_syndbg_handler(HvSynDbgHandler handler, void *context);
|
||||
#endif
|
||||
|
|
|
@ -145,7 +145,7 @@ enum {
|
|||
/* Interrupt Remapping Table Entry Definition */
|
||||
union VTD_IR_TableEntry {
|
||||
struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint32_t __reserved_1:8; /* Reserved 1 */
|
||||
uint32_t vector:8; /* Interrupt Vector */
|
||||
uint32_t irte_mode:1; /* IRTE Mode */
|
||||
|
@ -172,7 +172,7 @@ union VTD_IR_TableEntry {
|
|||
#endif
|
||||
uint32_t dest_id; /* Destination ID */
|
||||
uint16_t source_id; /* Source-ID */
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint64_t __reserved_2:44; /* Reserved 2 */
|
||||
uint64_t sid_vtype:2; /* Source-ID Validation Type */
|
||||
uint64_t sid_q:2; /* Source-ID Qualifier */
|
||||
|
@ -191,7 +191,7 @@ union VTD_IR_TableEntry {
|
|||
/* Programming format for MSI/MSI-X addresses */
|
||||
union VTD_IR_MSIAddress {
|
||||
struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint32_t __head:12; /* Should always be: 0x0fee */
|
||||
uint32_t index_l:15; /* Interrupt index bit 14-0 */
|
||||
uint32_t int_mode:1; /* Interrupt format */
|
||||
|
|
|
@ -87,7 +87,7 @@ struct X86IOMMUIrq {
|
|||
struct X86IOMMU_MSIMessage {
|
||||
union {
|
||||
struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint32_t __addr_head:12; /* 0xfee */
|
||||
uint32_t dest:8;
|
||||
uint32_t __reserved:8;
|
||||
|
@ -108,7 +108,7 @@ struct X86IOMMU_MSIMessage {
|
|||
};
|
||||
union {
|
||||
struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint16_t trigger_mode:1;
|
||||
uint16_t level:1;
|
||||
uint16_t __resved:3;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "cpu.h"
|
||||
|
||||
#define BIOS_SIZE (4 * MiB)
|
||||
#ifdef TARGET_WORDS_BIGENDIAN
|
||||
#if TARGET_BIG_ENDIAN
|
||||
#define BIOS_FILENAME "mips_bios.bin"
|
||||
#else
|
||||
#define BIOS_FILENAME "mipsel_bios.bin"
|
||||
|
|
|
@ -28,7 +28,7 @@ static inline bool virtio_access_is_big_endian(VirtIODevice *vdev)
|
|||
{
|
||||
#if defined(LEGACY_VIRTIO_IS_BIENDIAN)
|
||||
return virtio_is_big_endian(vdev);
|
||||
#elif defined(TARGET_WORDS_BIGENDIAN)
|
||||
#elif TARGET_BIG_ENDIAN
|
||||
if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
|
||||
/* Devices conforming to VIRTIO 1.0 or later are always LE. */
|
||||
return false;
|
||||
|
@ -149,7 +149,7 @@ static inline uint64_t virtio_ldq_p(VirtIODevice *vdev, const void *ptr)
|
|||
|
||||
static inline uint16_t virtio_tswap16(VirtIODevice *vdev, uint16_t s)
|
||||
{
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
return virtio_access_is_big_endian(vdev) ? s : bswap16(s);
|
||||
#else
|
||||
return virtio_access_is_big_endian(vdev) ? bswap16(s) : s;
|
||||
|
@ -215,7 +215,7 @@ static inline void virtio_tswap16s(VirtIODevice *vdev, uint16_t *s)
|
|||
|
||||
static inline uint32_t virtio_tswap32(VirtIODevice *vdev, uint32_t s)
|
||||
{
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
return virtio_access_is_big_endian(vdev) ? s : bswap32(s);
|
||||
#else
|
||||
return virtio_access_is_big_endian(vdev) ? bswap32(s) : s;
|
||||
|
@ -229,7 +229,7 @@ static inline void virtio_tswap32s(VirtIODevice *vdev, uint32_t *s)
|
|||
|
||||
static inline uint64_t virtio_tswap64(VirtIODevice *vdev, uint64_t s)
|
||||
{
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
return virtio_access_is_big_endian(vdev) ? s : bswap64(s);
|
||||
#else
|
||||
return virtio_access_is_big_endian(vdev) ? bswap64(s) : s;
|
||||
|
|
|
@ -29,7 +29,7 @@ virtio_gpu_ctrl_hdr_bswap(struct virtio_gpu_ctrl_hdr *hdr)
|
|||
static inline void
|
||||
virtio_gpu_bswap_32(void *ptr, size_t size)
|
||||
{
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
|
||||
size_t i;
|
||||
struct virtio_gpu_ctrl_hdr *hdr = (struct virtio_gpu_ctrl_hdr *) ptr;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue