- Use more CONFIG Makefile switches for qtests

- Get rid of global_qtests in some more qtests
 - typedef cleanups
 - Fixes for compiling with Clang
 - Force C standard to gnu99
 - Don't use -nographic in qtests
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.22 (GNU/Linux)
 
 iQIcBAABAgAGBQJcRrXBAAoJEC7Z13T+cC21wq0P/jpawNBkGvBje8wEi/8hcAzw
 iacZePdBjbVUhSAE7JAc+SqZQgvirjYVP3j6f1u15S5FmTpGNhbcyKUrQbtFn9cg
 inOr5kYtoj3k9g6YPb2WD7zXX5RW6AzgjORTZnlRi0eWemfW0BKPHV0TLs9JxtAR
 08k4JgGksx4itrh+Y7h9T0iorBByCvnevFPiRQThcf82DP3J9HhdKCtOAN/jVIb6
 HDb5dNMMkvy4lO7tgYZUHWVwO4t2Hh/5upDsp28Tlsx3Bw3e0vdPm2fkGpmp77U2
 O7GDkxKJrPBw4VvNSxh9piVM8vWovIvO0irPao8H7ZcRFQXBiPsV/DTbmXei2YUV
 j3c7s4TFerbIYHKRphUmY2ok6VClaZQPs+vl7QU6BXQLEgS+aVKfIoLOxHpOOPcq
 x11ppsreWxZ3FQWIBgeV4CicO7l3eS8m/l9qIbesb3ChBeWR8DeriQ+a/lQ7gHLt
 rGemVuvpzIIHDj8vwJhpzOI6ecJB4ucA9aA67dMET57pic74uabS/LnqmNs88vYH
 nHT2gPZbzZCRg2wsP8RcAV4aooYqwMpKvuxBwbXgQC4UUjLtq6NPQIcwRVRr73dF
 6xoB1M9THPr/N5SrCSH4b2mB3exJrzBTu/cjFqwileW62zYF8G2dhgKAVWASghJi
 0ecexmiZOl3XH9GXXbGL
 =X/Yb
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-01-22' into staging

- Use more CONFIG Makefile switches for qtests
- Get rid of global_qtests in some more qtests
- typedef cleanups
- Fixes for compiling with Clang
- Force C standard to gnu99
- Don't use -nographic in qtests

# gpg: Signature made Tue 22 Jan 2019 06:18:41 GMT
# gpg:                using RSA key 2ED9D774FE702DB5
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>"
# gpg:                 aka "Thomas Huth <thuth@redhat.com>"
# gpg:                 aka "Thomas Huth <huth@tuxfamily.org>"
# gpg:                 aka "Thomas Huth <th.huth@posteo.de>"
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3  EAB9 2ED9 D774 FE70 2DB5

* remotes/huth-gitlab/tags/pull-request-2019-01-22: (26 commits)
  tests: remove rule for nonexisting qdev-monitor-test
  tests/hexloader-test: Don't pass -nographic to the QEMU under test
  configure: Force the C standard to gnu99
  seccomp: Work-around GCC 4.x bug in gnu99 mode
  block: Work-around a bug in libiscsi 1.9.0 when used in gnu99 mode
  linux-user: Fix compilation with clang 3.4
  virtio-net: Fix VirtIONet typedef redefinition
  ppc: Fix duplicated typedefs to be able to compile with Clang in gnu99 mode
  ppc: Move spapr-related prototypes from xics.h into a seperate header file
  ui/console: Remove PixelFormat from qemu/typedefs.h
  ui/console: Remove MouseTransformInfo from qemu/typedefs.h
  ui/console: Remove DisplayState/DisplaySurface from "qemu/typedefs.h"
  ui/console: Remove QemuDmaBuf from "qemu/typedefs.h"
  audio: Remove AudioState from "qemu/typedefs.h"
  hw/i386: Remove PCMachineClass from "qemu/typedefs.h"
  hw/char/serial: Remove SerialState from "qemu/typedefs.h"
  hw/bt: Remove HCIInfo from "qemu/typedefs.h"
  hw/i2c/smbus: Remove SMBusDevice from "qemu/typedefs.h"
  hw/ide/ahci: Remove AllwinnerAHCIState from "qemu/typedefs.h"
  hw/pcmcia: Remove PCMCIACardState from "qemu/typedefs.h"
  ...

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2019-01-22 09:48:40 +00:00
commit 851aa0a5a8
32 changed files with 300 additions and 265 deletions

View file

@ -191,7 +191,7 @@ struct SWVoiceCap {
QLIST_ENTRY (SWVoiceCap) entries; QLIST_ENTRY (SWVoiceCap) entries;
}; };
struct AudioState { typedef struct AudioState {
struct audio_driver *drv; struct audio_driver *drv;
void *drv_opaque; void *drv_opaque;
@ -203,7 +203,7 @@ struct AudioState {
int nb_hw_voices_out; int nb_hw_voices_out;
int nb_hw_voices_in; int nb_hw_voices_in;
int vm_running; int vm_running;
}; } AudioState;
extern const struct mixeng_volume nominal_volume; extern const struct mixeng_volume nominal_volume;

View file

@ -49,7 +49,9 @@
/* Conflict between scsi/utils.h and libiscsi! :( */ /* Conflict between scsi/utils.h and libiscsi! :( */
#define SCSI_XFER_NONE ISCSI_XFER_NONE #define SCSI_XFER_NONE ISCSI_XFER_NONE
#include <iscsi/iscsi.h> #include <iscsi/iscsi.h>
#define inline __attribute__((gnu_inline)) /* required for libiscsi v1.9.0 */
#include <iscsi/scsi-lowlevel.h> #include <iscsi/scsi-lowlevel.h>
#undef inline
#undef SCSI_XFER_NONE #undef SCSI_XFER_NONE
QEMU_BUILD_BUG_ON((int)SCSI_XFER_NONE != (int)ISCSI_XFER_NONE); QEMU_BUILD_BUG_ON((int)SCSI_XFER_NONE != (int)ISCSI_XFER_NONE);

5
configure vendored
View file

@ -107,6 +107,9 @@ update_cxxflags() {
-Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
-Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
;; ;;
-std=gnu99)
QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
;;
*) *)
QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
;; ;;
@ -584,7 +587,7 @@ ARFLAGS="${ARFLAGS-rv}"
# left shift of signed integers is well defined and has the expected # left shift of signed integers is well defined and has the expected
# 2s-complement style results. (Both clang and gcc agree that it # 2s-complement style results. (Both clang and gcc agree that it
# provides these semantics.) # provides these semantics.)
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"

View file

@ -34,6 +34,7 @@
#include "sysemu/kvm.h" #include "sysemu/kvm.h"
#include "hw/ppc/spapr.h" #include "hw/ppc/spapr.h"
#include "hw/ppc/xics.h" #include "hw/ppc/xics.h"
#include "hw/ppc/xics_spapr.h"
#include "kvm_ppc.h" #include "kvm_ppc.h"
#include "qemu/config-file.h" #include "qemu/config-file.h"
#include "qemu/error-report.h" #include "qemu/error-report.h"

View file

@ -32,6 +32,7 @@
#include "qemu/timer.h" #include "qemu/timer.h"
#include "hw/ppc/spapr.h" #include "hw/ppc/spapr.h"
#include "hw/ppc/xics.h" #include "hw/ppc/xics.h"
#include "hw/ppc/xics_spapr.h"
#include "hw/ppc/fdt.h" #include "hw/ppc/fdt.h"
#include "qapi/visitor.h" #include "qapi/visitor.h"

View file

@ -14,6 +14,7 @@
#include "hw/ppc/spapr.h" #include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_xive.h" #include "hw/ppc/spapr_xive.h"
#include "hw/ppc/xics.h" #include "hw/ppc/xics.h"
#include "hw/ppc/xics_spapr.h"
#include "sysemu/kvm.h" #include "sysemu/kvm.h"
#include "trace.h" #include "trace.h"

View file

@ -12,6 +12,7 @@
#include "exec/memory.h" #include "exec/memory.h"
#include "target/arm/cpu-qom.h" #include "target/arm/cpu-qom.h"
#include "hw/pcmcia.h"
/* Interrupt numbers */ /* Interrupt numbers */
# define PXA2XX_PIC_SSP3 0 # define PXA2XX_PIC_SSP3 0

View file

@ -35,7 +35,7 @@
#define UART_FIFO_LENGTH 16 /* 16550A Fifo Length */ #define UART_FIFO_LENGTH 16 /* 16550A Fifo Length */
struct SerialState { typedef struct SerialState {
uint16_t divider; uint16_t divider;
uint8_t rbr; /* receive register */ uint8_t rbr; /* receive register */
uint8_t thr; /* transmit holding register */ uint8_t thr; /* transmit holding register */
@ -77,7 +77,7 @@ struct SerialState {
QEMUTimer *modem_status_poll; QEMUTimer *modem_status_poll;
MemoryRegion io; MemoryRegion io;
}; } SerialState;
extern const VMStateDescription vmstate_serial; extern const VMStateDescription vmstate_serial;
extern const MemoryRegionOps serial_io_ops; extern const MemoryRegionOps serial_io_ops;

View file

@ -4,6 +4,7 @@
/* Devices that have nowhere better to go. */ /* Devices that have nowhere better to go. */
#include "hw/hw.h" #include "hw/hw.h"
#include "ui/console.h"
/* smc91c111.c */ /* smc91c111.c */
void smc91c111_init(NICInfo *, uint32_t, qemu_irq); void smc91c111_init(NICInfo *, uint32_t, qemu_irq);

View file

@ -35,6 +35,8 @@
#define SMBUS_DEVICE_GET_CLASS(obj) \ #define SMBUS_DEVICE_GET_CLASS(obj) \
OBJECT_GET_CLASS(SMBusDeviceClass, (obj), TYPE_SMBUS_DEVICE) OBJECT_GET_CLASS(SMBusDeviceClass, (obj), TYPE_SMBUS_DEVICE)
typedef struct SMBusDevice SMBusDevice;
typedef struct SMBusDeviceClass typedef struct SMBusDeviceClass
{ {
I2CSlaveClass parent_class; I2CSlaveClass parent_class;

View file

@ -96,7 +96,7 @@ struct PCMachineState {
* way we can use 1GByte pages in the host. * way we can use 1GByte pages in the host.
* *
*/ */
struct PCMachineClass { typedef struct PCMachineClass {
/*< private >*/ /*< private >*/
MachineClass parent_class; MachineClass parent_class;
@ -133,7 +133,7 @@ struct PCMachineClass {
/* use DMA capable linuxboot option rom */ /* use DMA capable linuxboot option rom */
bool linuxboot_dma_enabled; bool linuxboot_dma_enabled;
}; } PCMachineClass;
#define TYPE_PC_MACHINE "generic-pc-machine" #define TYPE_PC_MACHINE "generic-pc-machine"
#define PC_MACHINE(obj) \ #define PC_MACHINE(obj) \

View file

@ -73,13 +73,13 @@ typedef struct SysbusAHCIState {
#define ALLWINNER_AHCI_MMIO_OFF 0x80 #define ALLWINNER_AHCI_MMIO_OFF 0x80
#define ALLWINNER_AHCI_MMIO_SIZE 0x80 #define ALLWINNER_AHCI_MMIO_SIZE 0x80
struct AllwinnerAHCIState { typedef struct AllwinnerAHCIState {
/*< private >*/ /*< private >*/
SysbusAHCIState parent_obj; SysbusAHCIState parent_obj;
/*< public >*/ /*< public >*/
MemoryRegion mmio; MemoryRegion mmio;
uint32_t regs[ALLWINNER_AHCI_MMIO_SIZE/4]; uint32_t regs[ALLWINNER_AHCI_MMIO_SIZE/4];
}; } AllwinnerAHCIState;
#endif /* HW_IDE_AHCI_H */ #endif /* HW_IDE_AHCI_H */

View file

@ -31,6 +31,8 @@
#define PS2_MOUSE_BUTTON_SIDE 0x08 #define PS2_MOUSE_BUTTON_SIDE 0x08
#define PS2_MOUSE_BUTTON_EXTRA 0x10 #define PS2_MOUSE_BUTTON_EXTRA 0x10
typedef struct PS2State PS2State;
/* ps2.c */ /* ps2.c */
void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg); void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg);
void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg); void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg);

View file

@ -18,13 +18,13 @@ typedef struct PCMCIASocket {
#define PCMCIA_CARD_CLASS(cls) \ #define PCMCIA_CARD_CLASS(cls) \
OBJECT_CLASS_CHECK(PCMCIACardClass, cls, TYPE_PCMCIA_CARD) OBJECT_CLASS_CHECK(PCMCIACardClass, cls, TYPE_PCMCIA_CARD)
struct PCMCIACardState { typedef struct PCMCIACardState {
/*< private >*/ /*< private >*/
DeviceState parent_obj; DeviceState parent_obj;
/*< public >*/ /*< public >*/
PCMCIASocket *slot; PCMCIASocket *slot;
}; } PCMCIACardState;
typedef struct PCMCIACardClass { typedef struct PCMCIACardClass {
/*< private >*/ /*< private >*/

View file

@ -8,15 +8,16 @@
#include "hw/mem/pc-dimm.h" #include "hw/mem/pc-dimm.h"
#include "hw/ppc/spapr_ovec.h" #include "hw/ppc/spapr_ovec.h"
#include "hw/ppc/spapr_irq.h" #include "hw/ppc/spapr_irq.h"
#include "hw/ppc/spapr_xive.h" /* For sPAPRXive */
#include "hw/ppc/xics.h" /* For ICSState */
struct VIOsPAPRBus; struct VIOsPAPRBus;
struct sPAPRPHBState; struct sPAPRPHBState;
struct sPAPRNVRAM; struct sPAPRNVRAM;
typedef struct sPAPREventLogEntry sPAPREventLogEntry; typedef struct sPAPREventLogEntry sPAPREventLogEntry;
typedef struct sPAPREventSource sPAPREventSource; typedef struct sPAPREventSource sPAPREventSource;
typedef struct sPAPRPendingHPT sPAPRPendingHPT; typedef struct sPAPRPendingHPT sPAPRPendingHPT;
typedef struct ICSState ICSState;
typedef struct sPAPRXive sPAPRXive;
#define HPTE64_V_HPTE_DIRTY 0x0000000000000040ULL #define HPTE64_V_HPTE_DIRTY 0x0000000000000040ULL
#define SPAPR_ENTRY_POINT 0x100 #define SPAPR_ENTRY_POINT 0x100

View file

@ -41,8 +41,6 @@ bool spapr_xive_irq_claim(sPAPRXive *xive, uint32_t lisn, bool lsi);
bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn); bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon); void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
typedef struct sPAPRMachineState sPAPRMachineState;
void spapr_xive_hcall_init(sPAPRMachineState *spapr); void spapr_xive_hcall_init(sPAPRMachineState *spapr);
void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt, void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
uint32_t phandle); uint32_t phandle);

View file

@ -200,13 +200,6 @@ void ics_pic_print_info(ICSState *ics, Monitor *mon);
void ics_resend(ICSState *ics); void ics_resend(ICSState *ics);
void icp_resend(ICPState *ss); void icp_resend(ICPState *ss);
typedef struct sPAPRMachineState sPAPRMachineState;
void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
uint32_t phandle);
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
void xics_spapr_init(sPAPRMachineState *spapr);
Object *icp_create(Object *cpu, const char *type, XICSFabric *xi, Object *icp_create(Object *cpu, const char *type, XICSFabric *xi,
Error **errp); Error **errp);

View file

@ -0,0 +1,37 @@
/*
* QEMU PowerPC pSeries Logical Partition (aka sPAPR) hardware System Emulator
*
* PAPR Virtualized Interrupt System, aka ICS/ICP aka xics
*
* Copyright (c) 2010, 2011 David Gibson, IBM Corporation.
*
* 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 XICS_SPAPR_H
#define XICS_SPAPR_H
#include "hw/ppc/spapr.h"
void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
uint32_t phandle);
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
void xics_spapr_init(sPAPRMachineState *spapr);
#endif /* XICS_SPAPR_H */

View file

@ -106,7 +106,6 @@ typedef struct VirtioNetRscSeg {
NetClientState *nc; NetClientState *nc;
} VirtioNetRscSeg; } VirtioNetRscSeg;
struct VirtIONet;
typedef struct VirtIONet VirtIONet; typedef struct VirtIONet VirtIONet;
/* Chain is divided by protocol(ipv4/v6) and NetClientInfo */ /* Chain is divided by protocol(ipv4/v6) and NetClientInfo */
@ -136,7 +135,7 @@ typedef struct VirtIONetQueue {
struct VirtIONet *n; struct VirtIONet *n;
} VirtIONetQueue; } VirtIONetQueue;
typedef struct VirtIONet { struct VirtIONet {
VirtIODevice parent_obj; VirtIODevice parent_obj;
uint8_t mac[ETH_ALEN]; uint8_t mac[ETH_ALEN];
uint16_t status; uint16_t status;
@ -186,7 +185,7 @@ typedef struct VirtIONet {
int announce_counter; int announce_counter;
bool needs_vnet_hdr_swap; bool needs_vnet_hdr_swap;
bool mtu_bypass_backend; bool mtu_bypass_backend;
} VirtIONet; };
void virtio_net_set_netclient_name(VirtIONet *n, const char *name, void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
const char *type); const char *type);

View file

@ -113,6 +113,10 @@
#define GCC_FMT_ATTR(n, m) #define GCC_FMT_ATTR(n, m)
#endif #endif
#ifndef __has_warning
#define __has_warning(x) 0 /* compatibility with non-clang compilers */
#endif
#ifndef __has_feature #ifndef __has_feature
#define __has_feature(x) 0 /* compatibility with non-clang compilers */ #define __has_feature(x) 0 /* compatibility with non-clang compilers */
#endif #endif

View file

@ -8,8 +8,6 @@
typedef struct AdapterInfo AdapterInfo; typedef struct AdapterInfo AdapterInfo;
typedef struct AddressSpace AddressSpace; typedef struct AddressSpace AddressSpace;
typedef struct AioContext AioContext; typedef struct AioContext AioContext;
typedef struct AllwinnerAHCIState AllwinnerAHCIState;
typedef struct AudioState AudioState;
typedef struct BdrvDirtyBitmap BdrvDirtyBitmap; typedef struct BdrvDirtyBitmap BdrvDirtyBitmap;
typedef struct BdrvDirtyBitmapIter BdrvDirtyBitmapIter; typedef struct BdrvDirtyBitmapIter BdrvDirtyBitmapIter;
typedef struct BlockBackend BlockBackend; typedef struct BlockBackend BlockBackend;
@ -26,8 +24,6 @@ typedef struct DeviceListener DeviceListener;
typedef struct DeviceState DeviceState; typedef struct DeviceState DeviceState;
typedef struct DirtyBitmapSnapshot DirtyBitmapSnapshot; typedef struct DirtyBitmapSnapshot DirtyBitmapSnapshot;
typedef struct DisplayChangeListener DisplayChangeListener; typedef struct DisplayChangeListener DisplayChangeListener;
typedef struct DisplayState DisplayState;
typedef struct DisplaySurface DisplaySurface;
typedef struct DriveInfo DriveInfo; typedef struct DriveInfo DriveInfo;
typedef struct Error Error; typedef struct Error Error;
typedef struct EventNotifier EventNotifier; typedef struct EventNotifier EventNotifier;
@ -36,7 +32,6 @@ typedef struct FWCfgEntry FWCfgEntry;
typedef struct FWCfgIoState FWCfgIoState; typedef struct FWCfgIoState FWCfgIoState;
typedef struct FWCfgMemState FWCfgMemState; typedef struct FWCfgMemState FWCfgMemState;
typedef struct FWCfgState FWCfgState; typedef struct FWCfgState FWCfgState;
typedef struct HCIInfo HCIInfo;
typedef struct HVFX86EmulatorState HVFX86EmulatorState; typedef struct HVFX86EmulatorState HVFX86EmulatorState;
typedef struct I2CBus I2CBus; typedef struct I2CBus I2CBus;
typedef struct I2SCodec I2SCodec; typedef struct I2SCodec I2SCodec;
@ -56,7 +51,6 @@ typedef struct MigrationIncomingState MigrationIncomingState;
typedef struct MigrationState MigrationState; typedef struct MigrationState MigrationState;
typedef struct Monitor Monitor; typedef struct Monitor Monitor;
typedef struct MonitorDef MonitorDef; typedef struct MonitorDef MonitorDef;
typedef struct MouseTransformInfo MouseTransformInfo;
typedef struct MSIMessage MSIMessage; typedef struct MSIMessage MSIMessage;
typedef struct NetClientState NetClientState; typedef struct NetClientState NetClientState;
typedef struct NetFilterState NetFilterState; typedef struct NetFilterState NetFilterState;
@ -76,19 +70,14 @@ typedef struct PCIExpressDevice PCIExpressDevice;
typedef struct PCIExpressHost PCIExpressHost; typedef struct PCIExpressHost PCIExpressHost;
typedef struct PCIHostDeviceAddress PCIHostDeviceAddress; typedef struct PCIHostDeviceAddress PCIHostDeviceAddress;
typedef struct PCIHostState PCIHostState; typedef struct PCIHostState PCIHostState;
typedef struct PCMachineClass PCMachineClass;
typedef struct PCMachineState PCMachineState; typedef struct PCMachineState PCMachineState;
typedef struct PCMCIACardState PCMCIACardState;
typedef struct PixelFormat PixelFormat;
typedef struct PostcopyDiscardState PostcopyDiscardState; typedef struct PostcopyDiscardState PostcopyDiscardState;
typedef struct Property Property; typedef struct Property Property;
typedef struct PropertyInfo PropertyInfo; typedef struct PropertyInfo PropertyInfo;
typedef struct PS2State PS2State;
typedef struct QBool QBool; typedef struct QBool QBool;
typedef struct QDict QDict; typedef struct QDict QDict;
typedef struct QEMUBH QEMUBH; typedef struct QEMUBH QEMUBH;
typedef struct QemuConsole QemuConsole; typedef struct QemuConsole QemuConsole;
typedef struct QemuDmaBuf QemuDmaBuf;
typedef struct QEMUFile QEMUFile; typedef struct QEMUFile QEMUFile;
typedef struct QemuLockable QemuLockable; typedef struct QemuLockable QemuLockable;
typedef struct QemuMutex QemuMutex; typedef struct QemuMutex QemuMutex;
@ -107,9 +96,7 @@ typedef struct QObject QObject;
typedef struct QString QString; typedef struct QString QString;
typedef struct RAMBlock RAMBlock; typedef struct RAMBlock RAMBlock;
typedef struct Range Range; typedef struct Range Range;
typedef struct SerialState SerialState;
typedef struct SHPCDevice SHPCDevice; typedef struct SHPCDevice SHPCDevice;
typedef struct SMBusDevice SMBusDevice;
typedef struct SSIBus SSIBus; typedef struct SSIBus SSIBus;
typedef struct uWireSlave uWireSlave; typedef struct uWireSlave uWireSlave;
typedef struct VirtIODevice VirtIODevice; typedef struct VirtIODevice VirtIODevice;

View file

@ -3,7 +3,7 @@
/* BT HCI info */ /* BT HCI info */
struct HCIInfo { typedef struct HCIInfo {
int (*bdaddr_set)(struct HCIInfo *hci, const uint8_t *bd_addr); int (*bdaddr_set)(struct HCIInfo *hci, const uint8_t *bd_addr);
void (*cmd_send)(struct HCIInfo *hci, const uint8_t *data, int len); void (*cmd_send)(struct HCIInfo *hci, const uint8_t *data, int len);
void (*sco_send)(struct HCIInfo *hci, const uint8_t *data, int len); void (*sco_send)(struct HCIInfo *hci, const uint8_t *data, int len);
@ -11,7 +11,7 @@ struct HCIInfo {
void *opaque; void *opaque;
void (*evt_recv)(void *opaque, const uint8_t *data, int len); void (*evt_recv)(void *opaque, const uint8_t *data, int len);
void (*acl_recv)(void *opaque, const uint8_t *data, int len); void (*acl_recv)(void *opaque, const uint8_t *data, int len);
}; } HCIInfo;
/* bt-host.c */ /* bt-host.c */
struct HCIInfo *bt_host_hci(const char *id); struct HCIInfo *bt_host_hci(const char *id);

View file

@ -65,13 +65,13 @@ void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
void kbd_put_ledstate(int ledstate); void kbd_put_ledstate(int ledstate);
struct MouseTransformInfo { typedef struct MouseTransformInfo {
/* Touchscreen resolution */ /* Touchscreen resolution */
int x; int x;
int y; int y;
/* Calibration values as used/generated by tslib */ /* Calibration values as used/generated by tslib */
int a[7]; int a[7];
}; } MouseTransformInfo;
void hmp_mouse_set(Monitor *mon, const QDict *qdict); void hmp_mouse_set(Monitor *mon, const QDict *qdict);
@ -121,17 +121,7 @@ struct QemuConsoleClass {
#define QEMU_ALLOCATED_FLAG 0x01 #define QEMU_ALLOCATED_FLAG 0x01
struct PixelFormat { typedef struct DisplaySurface {
uint8_t bits_per_pixel;
uint8_t bytes_per_pixel;
uint8_t depth; /* color depth in bits */
uint32_t rmask, gmask, bmask, amask;
uint8_t rshift, gshift, bshift, ashift;
uint8_t rmax, gmax, bmax, amax;
uint8_t rbits, gbits, bbits, abits;
};
struct DisplaySurface {
pixman_format_code_t format; pixman_format_code_t format;
pixman_image_t *image; pixman_image_t *image;
uint8_t flags; uint8_t flags;
@ -140,7 +130,7 @@ struct DisplaySurface {
GLenum gltype; GLenum gltype;
GLuint texture; GLuint texture;
#endif #endif
}; } DisplaySurface;
typedef struct QemuUIInfo { typedef struct QemuUIInfo {
/* geometry */ /* geometry */
@ -179,7 +169,7 @@ struct QEMUGLParams {
int minor_ver; int minor_ver;
}; };
struct QemuDmaBuf { typedef struct QemuDmaBuf {
int fd; int fd;
uint32_t width; uint32_t width;
uint32_t height; uint32_t height;
@ -187,7 +177,9 @@ struct QemuDmaBuf {
uint32_t fourcc; uint32_t fourcc;
uint32_t texture; uint32_t texture;
bool y0_top; bool y0_top;
}; } QemuDmaBuf;
typedef struct DisplayState DisplayState;
typedef struct DisplayChangeListenerOps { typedef struct DisplayChangeListenerOps {
const char *dpy_name; const char *dpy_name;

View file

@ -53,6 +53,16 @@
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */
typedef struct PixelFormat {
uint8_t bits_per_pixel;
uint8_t bytes_per_pixel;
uint8_t depth; /* color depth in bits */
uint32_t rmask, gmask, bmask, amask;
uint8_t rshift, gshift, bshift, ashift;
uint8_t rmax, gmax, bmax, amax;
uint8_t rbits, gbits, bbits, abits;
} PixelFormat;
PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format); PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format);
pixman_format_code_t qemu_default_pixman_format(int bpp, bool native_endian); pixman_format_code_t qemu_default_pixman_format(int bpp, bool native_endian);
pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format); pixman_format_code_t qemu_drm_format_to_pixman(uint32_t drm_format);

View file

@ -474,17 +474,13 @@ static inline int access_ok(int type, abi_ulong addr, abi_ulong size)
* functions than host-endian unaligned load/store plus tswapN. * functions than host-endian unaligned load/store plus tswapN.
* - The pragmas are necessary only to silence a clang false-positive * - The pragmas are necessary only to silence a clang false-positive
* warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 . * warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 .
* - We have to disable -Wpragmas warnings to avoid a complaint about
* an unknown warning type from older compilers that don't know about
* -Waddress-of-packed-member.
* - gcc has bugs in its _Pragma() support in some versions, eg * - gcc has bugs in its _Pragma() support in some versions, eg
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only
* include the warning-suppression pragmas for clang * include the warning-suppression pragmas for clang
*/ */
#ifdef __clang__ #if defined(__clang__) && __has_warning("-Waddress-of-packed-member")
#define PRAGMA_DISABLE_PACKED_WARNING \ #define PRAGMA_DISABLE_PACKED_WARNING \
_Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wpragmas\""); \
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"") _Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")
#define PRAGMA_REENABLE_PACKED_WARNING \ #define PRAGMA_REENABLE_PACKED_WARNING \

View file

@ -41,7 +41,8 @@ struct QemuSeccompSyscall {
}; };
const struct scmp_arg_cmp sched_setscheduler_arg[] = { const struct scmp_arg_cmp sched_setscheduler_arg[] = {
SCMP_A1(SCMP_CMP_NE, SCHED_IDLE) /* was SCMP_A1(SCMP_CMP_NE, SCHED_IDLE), but expanded due to GCC 4.x bug */
{ .arg = 1, .op = SCMP_CMP_NE, .datum_a = SCHED_IDLE }
}; };
static const struct QemuSeccompSyscall blacklist[] = { static const struct QemuSeccompSyscall blacklist[] = {

View file

@ -1177,8 +1177,9 @@ do { \
typedef struct PPCVirtualHypervisor PPCVirtualHypervisor; typedef struct PPCVirtualHypervisor PPCVirtualHypervisor;
typedef struct PPCVirtualHypervisorClass PPCVirtualHypervisorClass; typedef struct PPCVirtualHypervisorClass PPCVirtualHypervisorClass;
typedef struct XiveTCTX XiveTCTX;
typedef struct ICPState ICPState; struct XiveTCTX;
struct ICPState;
/** /**
* PowerPCCPU: * PowerPCCPU:
@ -1197,8 +1198,8 @@ struct PowerPCCPU {
int vcpu_id; int vcpu_id;
uint32_t compat_pvr; uint32_t compat_pvr;
PPCVirtualHypervisor *vhyp; PPCVirtualHypervisor *vhyp;
ICPState *icp; struct ICPState *icp;
XiveTCTX *tctx; struct XiveTCTX *tctx;
void *machine_data; void *machine_data;
int32_t node_id; /* NUMA node this CPU belongs to */ int32_t node_id; /* NUMA node this CPU belongs to */
PPCHash64Options *hash64_opts; PPCHash64Options *hash64_opts;

View file

@ -167,13 +167,13 @@ check-qtest-pci-$(CONFIG_NE2000_PCI) += tests/ne2000-test$(EXESUF)
check-qtest-pci-$(CONFIG_NVME_PCI) += tests/nvme-test$(EXESUF) check-qtest-pci-$(CONFIG_NVME_PCI) += tests/nvme-test$(EXESUF)
check-qtest-pci-$(CONFIG_AC97) += tests/ac97-test$(EXESUF) check-qtest-pci-$(CONFIG_AC97) += tests/ac97-test$(EXESUF)
check-qtest-pci-$(CONFIG_ES1370) += tests/es1370-test$(EXESUF) check-qtest-pci-$(CONFIG_ES1370) += tests/es1370-test$(EXESUF)
check-qtest-pci-y += $(check-qtest-virtio-y) check-qtest-pci-$(CONFIG_VIRTIO) += $(check-qtest-virtio-y)
check-qtest-pci-$(CONFIG_IPACK) += tests/tpci200-test$(EXESUF) check-qtest-pci-$(CONFIG_IPACK) += tests/tpci200-test$(EXESUF)
check-qtest-pci-$(CONFIG_IPACK) += $(check-qtest-ipack-y) check-qtest-pci-$(CONFIG_IPACK) += $(check-qtest-ipack-y)
check-qtest-pci-y += tests/display-vga-test$(EXESUF) check-qtest-pci-$(CONFIG_VGA) += tests/display-vga-test$(EXESUF)
check-qtest-pci-$(CONFIG_HDA) += tests/intel-hda-test$(EXESUF) check-qtest-pci-$(CONFIG_HDA) += tests/intel-hda-test$(EXESUF)
check-qtest-pci-$(CONFIG_IVSHMEM_DEVICE) += tests/ivshmem-test$(EXESUF) check-qtest-pci-$(CONFIG_IVSHMEM_DEVICE) += tests/ivshmem-test$(EXESUF)
check-qtest-pci-y += tests/megasas-test$(EXESUF) check-qtest-pci-$(CONFIG_MEGASAS_SCSI_PCI) += tests/megasas-test$(EXESUF)
check-qtest-i386-$(CONFIG_ISA_TESTDEV) = tests/endianness-test$(EXESUF) check-qtest-i386-$(CONFIG_ISA_TESTDEV) = tests/endianness-test$(EXESUF)
check-qtest-i386-y += tests/fdc-test$(EXESUF) check-qtest-i386-y += tests/fdc-test$(EXESUF)
@ -185,9 +185,9 @@ check-qtest-i386-y += tests/bios-tables-test$(EXESUF)
check-qtest-i386-$(CONFIG_SGA) += tests/boot-serial-test$(EXESUF) check-qtest-i386-$(CONFIG_SGA) += tests/boot-serial-test$(EXESUF)
check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF) check-qtest-i386-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
check-qtest-i386-y += tests/rtc-test$(EXESUF) check-qtest-i386-y += tests/rtc-test$(EXESUF)
check-qtest-i386-y += tests/ipmi-kcs-test$(EXESUF) check-qtest-i386-$(CONFIG_ISA_IPMI_KCS) += tests/ipmi-kcs-test$(EXESUF)
# Disabled temporarily as it fails intermittently especially under NetBSD VM # Disabled temporarily as it fails intermittently especially under NetBSD VM
# check-qtest-i386-y += tests/ipmi-bt-test$(EXESUF) # check-qtest-i386-$(CONFIG_ISA_IPMI_BT) += tests/ipmi-bt-test$(EXESUF)
check-qtest-i386-y += tests/i440fx-test$(EXESUF) check-qtest-i386-y += tests/i440fx-test$(EXESUF)
check-qtest-i386-y += tests/fw_cfg-test$(EXESUF) check-qtest-i386-y += tests/fw_cfg-test$(EXESUF)
check-qtest-i386-y += tests/drive_del-test$(EXESUF) check-qtest-i386-y += tests/drive_del-test$(EXESUF)
@ -250,22 +250,22 @@ check-qtest-ppc-y += tests/boot-order-test$(EXESUF)
check-qtest-ppc-y += tests/prom-env-test$(EXESUF) check-qtest-ppc-y += tests/prom-env-test$(EXESUF)
check-qtest-ppc-y += tests/drive_del-test$(EXESUF) check-qtest-ppc-y += tests/drive_del-test$(EXESUF)
check-qtest-ppc-y += tests/boot-serial-test$(EXESUF) check-qtest-ppc-y += tests/boot-serial-test$(EXESUF)
check-qtest-ppc-y += tests/m48t59-test$(EXESUF) check-qtest-ppc-$(CONFIG_M48T59) += tests/m48t59-test$(EXESUF)
check-qtest-ppc64-y += $(check-qtest-ppc-y) check-qtest-ppc64-y += $(check-qtest-ppc-y)
check-qtest-ppc64-y += tests/spapr-phb-test$(EXESUF) check-qtest-ppc64-$(CONFIG_PSERIES) += tests/spapr-phb-test$(EXESUF)
check-qtest-ppc64-y += tests/pnv-xscom-test$(EXESUF) check-qtest-ppc64-$(CONFIG_POWERNV) += tests/pnv-xscom-test$(EXESUF)
check-qtest-ppc64-y += tests/migration-test$(EXESUF) check-qtest-ppc64-y += tests/migration-test$(EXESUF)
check-qtest-ppc64-y += tests/rtas-test$(EXESUF) check-qtest-ppc64-$(CONFIG_PSERIES) += tests/rtas-test$(EXESUF)
check-qtest-ppc64-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF) check-qtest-ppc64-$(CONFIG_SLIRP) += tests/pxe-test$(EXESUF)
check-qtest-ppc64-$(CONFIG_USB_OHCI) += tests/usb-hcd-ohci-test$(EXESUF) check-qtest-ppc64-$(CONFIG_USB_OHCI) += tests/usb-hcd-ohci-test$(EXESUF)
check-qtest-ppc64-$(CONFIG_USB_UHCI) += tests/usb-hcd-uhci-test$(EXESUF) check-qtest-ppc64-$(CONFIG_USB_UHCI) += tests/usb-hcd-uhci-test$(EXESUF)
check-qtest-ppc64-$(CONFIG_USB_XHCI_NEC) += tests/usb-hcd-xhci-test$(EXESUF) check-qtest-ppc64-$(CONFIG_USB_XHCI_NEC) += tests/usb-hcd-xhci-test$(EXESUF)
check-qtest-ppc64-y += $(check-qtest-virtio-y) check-qtest-ppc64-$(CONFIG_VIRTIO) += $(check-qtest-virtio-y)
check-qtest-ppc64-$(CONFIG_SLIRP) += tests/test-netfilter$(EXESUF) check-qtest-ppc64-$(CONFIG_SLIRP) += tests/test-netfilter$(EXESUF)
check-qtest-ppc64-$(CONFIG_POSIX) += tests/test-filter-mirror$(EXESUF) check-qtest-ppc64-$(CONFIG_POSIX) += tests/test-filter-mirror$(EXESUF)
check-qtest-ppc64-$(CONFIG_RTL8139_PCI) += tests/test-filter-redirector$(EXESUF) check-qtest-ppc64-$(CONFIG_RTL8139_PCI) += tests/test-filter-redirector$(EXESUF)
check-qtest-ppc64-y += tests/display-vga-test$(EXESUF) check-qtest-ppc64-$(CONFIG_VGA) += tests/display-vga-test$(EXESUF)
check-qtest-ppc64-y += tests/numa-test$(EXESUF) check-qtest-ppc64-y += tests/numa-test$(EXESUF)
check-qtest-ppc64-$(CONFIG_IVSHMEM_DEVICE) += tests/ivshmem-test$(EXESUF) check-qtest-ppc64-$(CONFIG_IVSHMEM_DEVICE) += tests/ivshmem-test$(EXESUF)
check-qtest-ppc64-y += tests/cpu-plug-test$(EXESUF) check-qtest-ppc64-y += tests/cpu-plug-test$(EXESUF)
@ -748,7 +748,6 @@ tests/qom-test$(EXESUF): tests/qom-test.o
tests/test-hmp$(EXESUF): tests/test-hmp.o tests/test-hmp$(EXESUF): tests/test-hmp.o
tests/machine-none-test$(EXESUF): tests/machine-none-test.o tests/machine-none-test$(EXESUF): tests/machine-none-test.o
tests/drive_del-test$(EXESUF): tests/drive_del-test.o $(libqos-virtio-obj-y) tests/drive_del-test$(EXESUF): tests/drive_del-test.o $(libqos-virtio-obj-y)
tests/qdev-monitor-test$(EXESUF): tests/qdev-monitor-test.o $(libqos-pc-obj-y)
tests/nvme-test$(EXESUF): tests/nvme-test.o $(libqos-pc-obj-y) tests/nvme-test$(EXESUF): tests/nvme-test.o $(libqos-pc-obj-y)
tests/pvpanic-test$(EXESUF): tests/pvpanic-test.o tests/pvpanic-test$(EXESUF): tests/pvpanic-test.o
tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o

View file

@ -17,7 +17,7 @@
#include "standard-headers/linux/qemu_fw_cfg.h" #include "standard-headers/linux/qemu_fw_cfg.h"
/* TODO actually test the results and get rid of this */ /* TODO actually test the results and get rid of this */
#define qmp_discard_response(...) qobject_unref(qmp(__VA_ARGS__)) #define qmp_discard_response(qs, ...) qobject_unref(qtest_qmp(qs, __VA_ARGS__))
typedef struct { typedef struct {
const char *args; const char *args;
@ -27,31 +27,30 @@ typedef struct {
static void test_a_boot_order(const char *machine, static void test_a_boot_order(const char *machine,
const char *test_args, const char *test_args,
uint64_t (*read_boot_order)(void), uint64_t (*read_boot_order)(QTestState *),
uint64_t expected_boot, uint64_t expected_boot,
uint64_t expected_reboot) uint64_t expected_reboot)
{ {
uint64_t actual; uint64_t actual;
QTestState *qts;
global_qtest = qtest_initf("-nodefaults%s%s %s", qts = qtest_initf("-nodefaults%s%s %s", machine ? " -M " : "",
machine ? " -M " : "", machine ?: "", test_args);
machine ?: "", actual = read_boot_order(qts);
test_args);
actual = read_boot_order();
g_assert_cmphex(actual, ==, expected_boot); g_assert_cmphex(actual, ==, expected_boot);
qmp_discard_response("{ 'execute': 'system_reset' }"); qmp_discard_response(qts, "{ 'execute': 'system_reset' }");
/* /*
* system_reset only requests reset. We get a RESET event after * system_reset only requests reset. We get a RESET event after
* the actual reset completes. Need to wait for that. * the actual reset completes. Need to wait for that.
*/ */
qmp_eventwait("RESET"); qtest_qmp_eventwait(qts, "RESET");
actual = read_boot_order(); actual = read_boot_order(qts);
g_assert_cmphex(actual, ==, expected_reboot); g_assert_cmphex(actual, ==, expected_reboot);
qtest_quit(global_qtest); qtest_quit(qts);
} }
static void test_boot_orders(const char *machine, static void test_boot_orders(const char *machine,
uint64_t (*read_boot_order)(void), uint64_t (*read_boot_order)(QTestState *),
const boot_order_test *tests) const boot_order_test *tests)
{ {
int i; int i;
@ -64,16 +63,16 @@ static void test_boot_orders(const char *machine,
} }
} }
static uint8_t read_mc146818(uint16_t port, uint8_t reg) static uint8_t read_mc146818(QTestState *qts, uint16_t port, uint8_t reg)
{ {
outb(port, reg); qtest_outb(qts, port, reg);
return inb(port + 1); return qtest_inb(qts, port + 1);
} }
static uint64_t read_boot_order_pc(void) static uint64_t read_boot_order_pc(QTestState *qts)
{ {
uint8_t b1 = read_mc146818(0x70, 0x38); uint8_t b1 = read_mc146818(qts, 0x70, 0x38);
uint8_t b2 = read_mc146818(0x70, 0x3d); uint8_t b2 = read_mc146818(qts, 0x70, 0x3d);
return b1 | (b2 << 8); return b1 | (b2 << 8);
} }
@ -109,16 +108,16 @@ static void test_pc_boot_order(void)
test_boot_orders(NULL, read_boot_order_pc, test_cases_pc); test_boot_orders(NULL, read_boot_order_pc, test_cases_pc);
} }
static uint8_t read_m48t59(uint64_t addr, uint16_t reg) static uint8_t read_m48t59(QTestState *qts, uint64_t addr, uint16_t reg)
{ {
writeb(addr, reg & 0xff); qtest_writeb(qts, addr, reg & 0xff);
writeb(addr + 1, reg >> 8); qtest_writeb(qts, addr + 1, reg >> 8);
return readb(addr + 3); return qtest_readb(qts, addr + 3);
} }
static uint64_t read_boot_order_prep(void) static uint64_t read_boot_order_prep(QTestState *qts)
{ {
return read_m48t59(0x80000000 + 0x74, 0x34); return read_m48t59(qts, 0x80000000 + 0x74, 0x34);
} }
static const boot_order_test test_cases_prep[] = { static const boot_order_test test_cases_prep[] = {
@ -133,9 +132,9 @@ static void test_prep_boot_order(void)
test_boot_orders("prep", read_boot_order_prep, test_cases_prep); test_boot_orders("prep", read_boot_order_prep, test_cases_prep);
} }
static uint64_t read_boot_order_pmac(void) static uint64_t read_boot_order_pmac(QTestState *qts)
{ {
QFWCFG *fw_cfg = mm_fw_cfg_init(global_qtest, 0xf0000510); QFWCFG *fw_cfg = mm_fw_cfg_init(qts, 0xf0000510);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }
@ -158,9 +157,9 @@ static void test_pmac_newworld_boot_order(void)
test_boot_orders("mac99", read_boot_order_pmac, test_cases_fw_cfg); test_boot_orders("mac99", read_boot_order_pmac, test_cases_fw_cfg);
} }
static uint64_t read_boot_order_sun4m(void) static uint64_t read_boot_order_sun4m(QTestState *qts)
{ {
QFWCFG *fw_cfg = mm_fw_cfg_init(global_qtest, 0xd00000510ULL); QFWCFG *fw_cfg = mm_fw_cfg_init(qts, 0xd00000510ULL);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }
@ -170,9 +169,9 @@ static void test_sun4m_boot_order(void)
test_boot_orders("SS-5", read_boot_order_sun4m, test_cases_fw_cfg); test_boot_orders("SS-5", read_boot_order_sun4m, test_cases_fw_cfg);
} }
static uint64_t read_boot_order_sun4u(void) static uint64_t read_boot_order_sun4u(QTestState *qts)
{ {
QFWCFG *fw_cfg = io_fw_cfg_init(global_qtest, 0x510); QFWCFG *fw_cfg = io_fw_cfg_init(qts, 0x510);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }

View file

@ -48,65 +48,68 @@ static const TestCase test_cases[] = {
{} {}
}; };
static uint8_t isa_inb(const TestCase *test, uint16_t addr) static uint8_t isa_inb(QTestState *qts, const TestCase *test, uint16_t addr)
{ {
uint8_t value; uint8_t value;
if (test->isa_base == -1) { if (test->isa_base == -1) {
value = inb(addr); value = qtest_inb(qts, addr);
} else { } else {
value = readb(test->isa_base + addr); value = qtest_readb(qts, test->isa_base + addr);
} }
return value; return value;
} }
static uint16_t isa_inw(const TestCase *test, uint16_t addr) static uint16_t isa_inw(QTestState *qts, const TestCase *test, uint16_t addr)
{ {
uint16_t value; uint16_t value;
if (test->isa_base == -1) { if (test->isa_base == -1) {
value = inw(addr); value = qtest_inw(qts, addr);
} else { } else {
value = readw(test->isa_base + addr); value = qtest_readw(qts, test->isa_base + addr);
} }
return test->bswap ? bswap16(value) : value; return test->bswap ? bswap16(value) : value;
} }
static uint32_t isa_inl(const TestCase *test, uint16_t addr) static uint32_t isa_inl(QTestState *qts, const TestCase *test, uint16_t addr)
{ {
uint32_t value; uint32_t value;
if (test->isa_base == -1) { if (test->isa_base == -1) {
value = inl(addr); value = qtest_inl(qts, addr);
} else { } else {
value = readl(test->isa_base + addr); value = qtest_readl(qts, test->isa_base + addr);
} }
return test->bswap ? bswap32(value) : value; return test->bswap ? bswap32(value) : value;
} }
static void isa_outb(const TestCase *test, uint16_t addr, uint8_t value) static void isa_outb(QTestState *qts, const TestCase *test, uint16_t addr,
uint8_t value)
{ {
if (test->isa_base == -1) { if (test->isa_base == -1) {
outb(addr, value); qtest_outb(qts, addr, value);
} else { } else {
writeb(test->isa_base + addr, value); qtest_writeb(qts, test->isa_base + addr, value);
} }
} }
static void isa_outw(const TestCase *test, uint16_t addr, uint16_t value) static void isa_outw(QTestState *qts, const TestCase *test, uint16_t addr,
uint16_t value)
{ {
value = test->bswap ? bswap16(value) : value; value = test->bswap ? bswap16(value) : value;
if (test->isa_base == -1) { if (test->isa_base == -1) {
outw(addr, value); qtest_outw(qts, addr, value);
} else { } else {
writew(test->isa_base + addr, value); qtest_writew(qts, test->isa_base + addr, value);
} }
} }
static void isa_outl(const TestCase *test, uint16_t addr, uint32_t value) static void isa_outl(QTestState *qts, const TestCase *test, uint16_t addr,
uint32_t value)
{ {
value = test->bswap ? bswap32(value) : value; value = test->bswap ? bswap32(value) : value;
if (test->isa_base == -1) { if (test->isa_base == -1) {
outl(addr, value); qtest_outl(qts, addr, value);
} else { } else {
writel(test->isa_base + addr, value); qtest_writel(qts, test->isa_base + addr, value);
} }
} }
@ -114,161 +117,161 @@ static void isa_outl(const TestCase *test, uint16_t addr, uint32_t value)
static void test_endianness(gconstpointer data) static void test_endianness(gconstpointer data)
{ {
const TestCase *test = data; const TestCase *test = data;
QTestState *qts;
global_qtest = qtest_initf("-M %s%s%s -device pc-testdev", qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
test->machine, test->superio ? " -device " : "",
test->superio ? " -device " : "", test->superio ?: "");
test->superio ?: ""); isa_outl(qts, test, 0xe0, 0x87654321);
isa_outl(test, 0xe0, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x87); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x65); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x21);
isa_outw(test, 0xe2, 0x8866); isa_outw(qts, test, 0xe2, 0x8866);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x88664321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664321);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x88); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x88);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x66); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x21); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
isa_outw(test, 0xe0, 0x4422); isa_outw(qts, test, 0xe0, 0x4422);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x88664422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x88); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x88);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x66); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x44); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x22); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
isa_outb(test, 0xe3, 0x87); isa_outb(qts, test, 0xe3, 0x87);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87664422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87664422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8766); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8766);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x87); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x66); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x44); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x22); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
isa_outb(test, 0xe2, 0x65); isa_outb(qts, test, 0xe2, 0x65);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x87); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x65); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x44); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x22); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
isa_outb(test, 0xe1, 0x43); isa_outb(qts, test, 0xe1, 0x43);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654322); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654322);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4322); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4322);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x87); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x65); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x22); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
isa_outb(test, 0xe0, 0x21); isa_outb(qts, test, 0xe0, 0x21);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
g_assert_cmphex(isa_inb(test, 0xe3), ==, 0x87); g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
g_assert_cmphex(isa_inb(test, 0xe2), ==, 0x65); g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43); g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x21); g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
qtest_quit(global_qtest); qtest_quit(qts);
} }
static void test_endianness_split(gconstpointer data) static void test_endianness_split(gconstpointer data)
{ {
const TestCase *test = data; const TestCase *test = data;
QTestState *qts;
global_qtest = qtest_initf("-M %s%s%s -device pc-testdev", qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
test->machine, test->superio ? " -device " : "",
test->superio ? " -device " : "", test->superio ?: "");
test->superio ?: ""); isa_outl(qts, test, 0xe8, 0x87654321);
isa_outl(test, 0xe8, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321);
isa_outw(test, 0xea, 0x8866); isa_outw(qts, test, 0xea, 0x8866);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x88664321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664321);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
isa_outw(test, 0xe8, 0x4422); isa_outw(qts, test, 0xe8, 0x4422);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x88664422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
isa_outb(test, 0xeb, 0x87); isa_outb(qts, test, 0xeb, 0x87);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87664422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87664422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8766); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8766);
isa_outb(test, 0xea, 0x65); isa_outb(qts, test, 0xea, 0x65);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654422); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654422);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
isa_outb(test, 0xe9, 0x43); isa_outb(qts, test, 0xe9, 0x43);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654322); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654322);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4322); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4322);
isa_outb(test, 0xe8, 0x21); isa_outb(qts, test, 0xe8, 0x21);
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
qtest_quit(global_qtest); qtest_quit(qts);
} }
static void test_endianness_combine(gconstpointer data) static void test_endianness_combine(gconstpointer data)
{ {
const TestCase *test = data; const TestCase *test = data;
QTestState *qts;
global_qtest = qtest_initf("-M %s%s%s -device pc-testdev", qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
test->machine, test->superio ? " -device " : "",
test->superio ? " -device " : "", test->superio ?: "");
test->superio ?: ""); isa_outl(qts, test, 0xe0, 0x87654321);
isa_outl(test, 0xe0, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654321);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654321); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4321);
isa_outw(test, 0xe2, 0x8866); isa_outw(qts, test, 0xe2, 0x8866);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x88664321); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x88664321);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
isa_outw(test, 0xe0, 0x4422); isa_outw(qts, test, 0xe0, 0x4422);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x88664422); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x88664422);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8866); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8866);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4422);
isa_outb(test, 0xe3, 0x87); isa_outb(qts, test, 0xe3, 0x87);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87664422); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87664422);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8766); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8766);
isa_outb(test, 0xe2, 0x65); isa_outb(qts, test, 0xe2, 0x65);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654422); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654422);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4422); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4422);
isa_outb(test, 0xe1, 0x43); isa_outb(qts, test, 0xe1, 0x43);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654322); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654322);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4322); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4322);
isa_outb(test, 0xe0, 0x21); isa_outb(qts, test, 0xe0, 0x21);
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654321); g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654321);
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765); g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4321); g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
qtest_quit(global_qtest); qtest_quit(qts);
} }
int main(int argc, char **argv) int main(int argc, char **argv)

View file

@ -23,7 +23,7 @@ static void hex_loader_test(void)
const unsigned int base_addr = 0x00010000; const unsigned int base_addr = 0x00010000;
QTestState *s = qtest_initf( QTestState *s = qtest_initf(
"-M vexpress-a9 -nographic -device loader,file=tests/data/hex-loader/test.hex"); "-M vexpress-a9 -device loader,file=tests/data/hex-loader/test.hex");
for (i = 0; i < 256; ++i) { for (i = 0; i < 256; ++i) {
uint8_t val = qtest_readb(s, base_addr + i); uint8_t val = qtest_readb(s, base_addr + i);

View file

@ -63,14 +63,15 @@ static uint64_t pnv_xscom_addr(const PnvChip *chip, uint32_t pcba)
return addr; return addr;
} }
static uint64_t pnv_xscom_read(const PnvChip *chip, uint32_t pcba) static uint64_t pnv_xscom_read(QTestState *qts, const PnvChip *chip,
uint32_t pcba)
{ {
return readq(pnv_xscom_addr(chip, pcba)); return qtest_readq(qts, pnv_xscom_addr(chip, pcba));
} }
static void test_xscom_cfam_id(const PnvChip *chip) static void test_xscom_cfam_id(QTestState *qts, const PnvChip *chip)
{ {
uint64_t f000f = pnv_xscom_read(chip, 0xf000f); uint64_t f000f = pnv_xscom_read(qts, chip, 0xf000f);
g_assert_cmphex(f000f, ==, chip->cfam_id); g_assert_cmphex(f000f, ==, chip->cfam_id);
} }
@ -78,11 +79,11 @@ static void test_xscom_cfam_id(const PnvChip *chip)
static void test_cfam_id(const void *data) static void test_cfam_id(const void *data)
{ {
const PnvChip *chip = data; const PnvChip *chip = data;
QTestState *qts;
global_qtest = qtest_initf("-M powernv,accel=tcg -cpu %s", qts = qtest_initf("-M powernv,accel=tcg -cpu %s", chip->cpu_model);
chip->cpu_model); test_xscom_cfam_id(qts, chip);
test_xscom_cfam_id(chip); qtest_quit(qts);
qtest_quit(global_qtest);
} }
@ -94,7 +95,7 @@ static void test_cfam_id(const void *data)
#define PNV_XSCOM_EX_DTS_RESULT0 0x50000 #define PNV_XSCOM_EX_DTS_RESULT0 0x50000
static void test_xscom_core(const PnvChip *chip) static void test_xscom_core(QTestState *qts, const PnvChip *chip)
{ {
uint32_t first_core_dts0 = PNV_XSCOM_EX_DTS_RESULT0; uint32_t first_core_dts0 = PNV_XSCOM_EX_DTS_RESULT0;
uint64_t dts0; uint64_t dts0;
@ -105,7 +106,7 @@ static void test_xscom_core(const PnvChip *chip)
first_core_dts0 |= PNV_XSCOM_P9_EC_BASE(chip->first_core); first_core_dts0 |= PNV_XSCOM_P9_EC_BASE(chip->first_core);
} }
dts0 = pnv_xscom_read(chip, first_core_dts0); dts0 = pnv_xscom_read(qts, chip, first_core_dts0);
g_assert_cmphex(dts0, ==, 0x26f024f023f0000ull); g_assert_cmphex(dts0, ==, 0x26f024f023f0000ull);
} }
@ -113,11 +114,11 @@ static void test_xscom_core(const PnvChip *chip)
static void test_core(const void *data) static void test_core(const void *data)
{ {
const PnvChip *chip = data; const PnvChip *chip = data;
QTestState *qts;
global_qtest = qtest_initf("-M powernv,accel=tcg -cpu %s", qts = qtest_initf("-M powernv,accel=tcg -cpu %s", chip->cpu_model);
chip->cpu_model); test_xscom_core(qts, chip);
test_xscom_core(chip); qtest_quit(qts);
qtest_quit(global_qtest);
} }
static void add_test(const char *name, void (*test)(const void *data)) static void add_test(const char *name, void (*test)(const void *data))