mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20160906-v2' into staging
First (big) chunk of s390x updates: - cpumodel support for s390x - various fixes and improvements # gpg: Signature made Tue 06 Sep 2016 16:09:53 BST # gpg: using RSA key 0xDECF6B93C6F02FAF # gpg: Good signature from "Cornelia Huck <huckc@linux.vnet.ibm.com>" # gpg: aka "Cornelia Huck <cornelia.huck@de.ibm.com>" # Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0 18CE DECF 6B93 C6F0 2FAF * remotes/cohuck/tags/s390x-20160906-v2: (38 commits) s390x/cpumodel: implement QMP interface "query-cpu-model-baseline" s390x/cpumodel: implement QMP interface "query-cpu-model-comparison" s390x/cpumodel: implement QMP interface "query-cpu-model-expansion" qmp: add QMP interface "query-cpu-model-baseline" qmp: add QMP interface "query-cpu-model-comparison" qmp: add QMP interface "query-cpu-model-expansion" s390x/kvm: don't enable key wrapping if msa3 is disabled s390x/kvm: let the CPU model control CMM(A) s390x/kvm: disable host model for problematic compat machines s390x/kvm: implement CPU model support s390x/kvm: allow runtime-instrumentation for "none" machine s390x/sclp: propagate hmfai s390x/sclp: propagate the mha via sclp s390x/sclp: propagate the ibc val (lowest and unblocked ibc) s390x/sclp: indicate sclp features s390x/sclp: introduce sclp feature blocks s390x/sclp: factor out preparation of cpu entries s390x/cpumodel: check and apply the CPU model s390x/cpumodel: let the CPU model handle feature checks s390x/cpumodel: expose features and feature groups as properties ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
+1
-1
@@ -212,7 +212,7 @@ hmp-commands-info.h: $(SRC_PATH)/hmp-commands-info.hx $(SRC_PATH)/scripts/hxtool
|
||||
qmp-commands-old.h: $(SRC_PATH)/qmp-commands.hx $(SRC_PATH)/scripts/hxtool
|
||||
$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@," GEN $(TARGET_DIR)$@")
|
||||
|
||||
clean:
|
||||
clean: clean-target
|
||||
rm -f *.a *~ $(PROGS)
|
||||
rm -f $(shell find . -name '*.[od]')
|
||||
rm -f hmp-commands.h qmp-commands-old.h gdbstub-xml.c
|
||||
|
||||
+23
-19
@@ -280,12 +280,13 @@ static void kvm_s390_release_adapter_routes(S390FLICState *fs,
|
||||
* kvm_flic_save - Save pending floating interrupts
|
||||
* @f: QEMUFile containing migration state
|
||||
* @opaque: pointer to flic device state
|
||||
* @size: ignored
|
||||
*
|
||||
* Note: Pass buf and len to kernel. Start with one page and
|
||||
* increase until buffer is sufficient or maxium size is
|
||||
* reached
|
||||
*/
|
||||
static void kvm_flic_save(QEMUFile *f, void *opaque)
|
||||
static void kvm_flic_save(QEMUFile *f, void *opaque, size_t size)
|
||||
{
|
||||
KVMS390FLICState *flic = opaque;
|
||||
int len = FLIC_SAVE_INITIAL_SIZE;
|
||||
@@ -324,24 +325,19 @@ static void kvm_flic_save(QEMUFile *f, void *opaque)
|
||||
* kvm_flic_load - Load pending floating interrupts
|
||||
* @f: QEMUFile containing migration state
|
||||
* @opaque: pointer to flic device state
|
||||
* @version_id: version id for migration
|
||||
* @size: ignored
|
||||
*
|
||||
* Returns: value of flic_enqueue_irqs, -EINVAL on error
|
||||
* Note: Do nothing when no interrupts where stored
|
||||
* in QEMUFile
|
||||
*/
|
||||
static int kvm_flic_load(QEMUFile *f, void *opaque, int version_id)
|
||||
static int kvm_flic_load(QEMUFile *f, void *opaque, size_t size)
|
||||
{
|
||||
uint64_t len = 0;
|
||||
uint64_t count = 0;
|
||||
void *buf = NULL;
|
||||
int r = 0;
|
||||
|
||||
if (version_id != FLIC_SAVEVM_VERSION) {
|
||||
r = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
flic_enable_pfault((struct KVMS390FLICState *) opaque);
|
||||
|
||||
count = qemu_get_be64(f);
|
||||
@@ -372,6 +368,24 @@ out:
|
||||
return r;
|
||||
}
|
||||
|
||||
static const VMStateDescription kvm_s390_flic_vmstate = {
|
||||
.name = "s390-flic",
|
||||
.version_id = FLIC_SAVEVM_VERSION,
|
||||
.minimum_version_id = FLIC_SAVEVM_VERSION,
|
||||
.fields = (VMStateField[]) {
|
||||
{
|
||||
.name = "irqs",
|
||||
.info = &(const VMStateInfo) {
|
||||
.name = "irqs",
|
||||
.get = kvm_flic_load,
|
||||
.put = kvm_flic_save,
|
||||
},
|
||||
.flags = VMS_SINGLE,
|
||||
},
|
||||
VMSTATE_END_OF_LIST()
|
||||
}
|
||||
};
|
||||
|
||||
static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
|
||||
@@ -398,16 +412,6 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
|
||||
flic_state->clear_io_supported = !ioctl(flic_state->fd,
|
||||
KVM_HAS_DEVICE_ATTR, test_attr);
|
||||
|
||||
/* Register savevm handler for floating interrupts */
|
||||
register_savevm(NULL, "s390-flic", 0, 1, kvm_flic_save,
|
||||
kvm_flic_load, (void *) flic_state);
|
||||
}
|
||||
|
||||
static void kvm_s390_flic_unrealize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
|
||||
|
||||
unregister_savevm(DEVICE(flic_state), "s390-flic", flic_state);
|
||||
}
|
||||
|
||||
static void kvm_s390_flic_reset(DeviceState *dev)
|
||||
@@ -438,7 +442,7 @@ static void kvm_s390_flic_class_init(ObjectClass *oc, void *data)
|
||||
S390FLICStateClass *fsc = S390_FLIC_COMMON_CLASS(oc);
|
||||
|
||||
dc->realize = kvm_s390_flic_realize;
|
||||
dc->unrealize = kvm_s390_flic_unrealize;
|
||||
dc->vmsd = &kvm_s390_flic_vmstate;
|
||||
dc->reset = kvm_s390_flic_reset;
|
||||
fsc->register_io_adapter = kvm_s390_register_io_adapter;
|
||||
fsc->io_adapter_map = kvm_s390_io_adapter_map;
|
||||
|
||||
+3
-5
@@ -141,7 +141,8 @@ out_err:
|
||||
int css_create_css_image(uint8_t cssid, bool default_image)
|
||||
{
|
||||
trace_css_new_image(cssid, default_image ? "(default)" : "");
|
||||
if (cssid > MAX_CSSID) {
|
||||
/* 255 is reserved */
|
||||
if (cssid == 255) {
|
||||
return -EINVAL;
|
||||
}
|
||||
if (channel_subsys.css[cssid]) {
|
||||
@@ -1267,7 +1268,7 @@ bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid)
|
||||
uint8_t real_cssid;
|
||||
|
||||
real_cssid = (!m && (cssid == 0)) ? channel_subsys.default_cssid : cssid;
|
||||
if (real_cssid > MAX_CSSID || ssid > MAX_SSID ||
|
||||
if (ssid > MAX_SSID ||
|
||||
!channel_subsys.css[real_cssid] ||
|
||||
!channel_subsys.css[real_cssid]->sch_set[ssid]) {
|
||||
return true;
|
||||
@@ -1282,9 +1283,6 @@ static int css_add_virtual_chpid(uint8_t cssid, uint8_t chpid, uint8_t type)
|
||||
CssImage *css;
|
||||
|
||||
trace_css_chpid_add(cssid, chpid, type);
|
||||
if (cssid > MAX_CSSID) {
|
||||
return -EINVAL;
|
||||
}
|
||||
css = channel_subsys.css[cssid];
|
||||
if (!css) {
|
||||
return -EINVAL;
|
||||
|
||||
@@ -649,6 +649,7 @@ static void s390_pcihost_hot_plug(HotplugHandler *hotplug_dev,
|
||||
pbdev = s390_pci_device_new(dev->id);
|
||||
if (!pbdev) {
|
||||
error_setg(errp, "create zpci device failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,11 +718,7 @@ static void s390_pcihost_hot_unplug(HotplugHandler *hotplug_dev,
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pbdev) {
|
||||
object_unparent(OBJECT(pci_dev));
|
||||
return;
|
||||
}
|
||||
assert(pbdev != NULL);
|
||||
} else if (object_dynamic_cast(OBJECT(dev), TYPE_S390_PCI_DEVICE)) {
|
||||
pbdev = S390_PCI_DEVICE(dev);
|
||||
pci_dev = pbdev->pdev;
|
||||
|
||||
@@ -249,6 +249,11 @@ bool ri_allowed(void)
|
||||
|
||||
return s390mc->ri_allowed;
|
||||
}
|
||||
/*
|
||||
* Make sure the "none" machine can have ri, otherwise it won't * be
|
||||
* unlocked in KVM and therefore the host CPU model might be wrong.
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -316,7 +321,11 @@ static const TypeInfo ccw_machine_info = {
|
||||
} \
|
||||
type_init(ccw_machine_register_##suffix)
|
||||
|
||||
#define CCW_COMPAT_2_7 \
|
||||
HW_COMPAT_2_7
|
||||
|
||||
#define CCW_COMPAT_2_6 \
|
||||
CCW_COMPAT_2_7 \
|
||||
HW_COMPAT_2_6 \
|
||||
{\
|
||||
.driver = TYPE_S390_IPL,\
|
||||
@@ -372,14 +381,26 @@ static const TypeInfo ccw_machine_info = {
|
||||
.value = "0",\
|
||||
},
|
||||
|
||||
static void ccw_machine_2_8_instance_options(MachineState *machine)
|
||||
{
|
||||
}
|
||||
|
||||
static void ccw_machine_2_8_class_options(MachineClass *mc)
|
||||
{
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_8, "2.8", true);
|
||||
|
||||
static void ccw_machine_2_7_instance_options(MachineState *machine)
|
||||
{
|
||||
ccw_machine_2_8_instance_options(machine);
|
||||
}
|
||||
|
||||
static void ccw_machine_2_7_class_options(MachineClass *mc)
|
||||
{
|
||||
ccw_machine_2_8_class_options(mc);
|
||||
SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_7);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(2_7, "2.7", true);
|
||||
DEFINE_CCW_MACHINE(2_7, "2.7", false);
|
||||
|
||||
static void ccw_machine_2_6_instance_options(MachineState *machine)
|
||||
{
|
||||
|
||||
@@ -101,7 +101,11 @@ void s390_init_cpus(MachineState *machine)
|
||||
gchar *name;
|
||||
|
||||
if (machine->cpu_model == NULL) {
|
||||
machine->cpu_model = "host";
|
||||
if (kvm_enabled()) {
|
||||
machine->cpu_model = "host";
|
||||
} else {
|
||||
machine->cpu_model = "qemu";
|
||||
}
|
||||
}
|
||||
|
||||
cpu_states = g_new0(S390CPU *, max_cpus);
|
||||
|
||||
+31
-11
@@ -26,7 +26,25 @@
|
||||
|
||||
static inline SCLPDevice *get_sclp_device(void)
|
||||
{
|
||||
return SCLP(object_resolve_path_type("", TYPE_SCLP, NULL));
|
||||
static SCLPDevice *sclp;
|
||||
|
||||
if (!sclp) {
|
||||
sclp = SCLP(object_resolve_path_type("", TYPE_SCLP, NULL));
|
||||
}
|
||||
return sclp;
|
||||
}
|
||||
|
||||
static void prepare_cpu_entries(SCLPDevice *sclp, CPUEntry *entry, int count)
|
||||
{
|
||||
uint8_t features[SCCB_CPU_FEATURE_LEN] = { 0 };
|
||||
int i;
|
||||
|
||||
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CPU, features);
|
||||
for (i = 0; i < count; i++) {
|
||||
entry[i].address = i;
|
||||
entry[i].type = 0;
|
||||
memcpy(entry[i].features, features, sizeof(entry[i].features));
|
||||
}
|
||||
}
|
||||
|
||||
/* Provide information about the configuration, CPUs and storage */
|
||||
@@ -37,7 +55,6 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
||||
sclpMemoryHotplugDev *mhd = get_sclp_memory_hotplug_dev();
|
||||
CPUState *cpu;
|
||||
int cpu_count = 0;
|
||||
int i = 0;
|
||||
int rnsize, rnmax;
|
||||
int slots = MIN(machine->ram_slots, s390_get_memslot_count(kvm_state));
|
||||
|
||||
@@ -50,10 +67,15 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
||||
read_info->offset_cpu = cpu_to_be16(offsetof(ReadInfo, entries));
|
||||
read_info->highest_cpu = cpu_to_be16(max_cpus);
|
||||
|
||||
for (i = 0; i < cpu_count; i++) {
|
||||
read_info->entries[i].address = i;
|
||||
read_info->entries[i].type = 0;
|
||||
}
|
||||
read_info->ibc_val = cpu_to_be32(s390_get_ibc_val());
|
||||
|
||||
/* Configuration Characteristic (Extension) */
|
||||
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR,
|
||||
read_info->conf_char);
|
||||
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
|
||||
read_info->conf_char_ext);
|
||||
|
||||
prepare_cpu_entries(sclp, read_info->entries, cpu_count);
|
||||
|
||||
read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
|
||||
SCLP_HAS_PCI_RECONFIG);
|
||||
@@ -88,6 +110,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
|
||||
|
||||
read_info->facilities |= cpu_to_be64(SCLP_FC_ASSIGN_ATTACH_READ_STOR);
|
||||
}
|
||||
read_info->mha_pow = s390_get_mha_pow();
|
||||
read_info->hmfai = cpu_to_be32(s390_get_hmfai());
|
||||
|
||||
rnsize = 1 << (sclp->increment_size - 20);
|
||||
if (rnsize <= 128) {
|
||||
@@ -304,7 +328,6 @@ static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
|
||||
ReadCpuInfo *cpu_info = (ReadCpuInfo *) sccb;
|
||||
CPUState *cpu;
|
||||
int cpu_count = 0;
|
||||
int i = 0;
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
cpu_count++;
|
||||
@@ -318,10 +341,7 @@ static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
|
||||
cpu_info->offset_standby = cpu_to_be16(cpu_info->offset_configured
|
||||
+ cpu_info->nr_configured*sizeof(CPUEntry));
|
||||
|
||||
for (i = 0; i < cpu_count; i++) {
|
||||
cpu_info->entries[i].address = i;
|
||||
cpu_info->entries[i].type = 0;
|
||||
}
|
||||
prepare_cpu_entries(sclp, cpu_info->entries, cpu_count);
|
||||
|
||||
sccb->h.response_code = cpu_to_be16(SCLP_RC_NORMAL_READ_COMPLETION);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#ifndef HW_COMPAT_H
|
||||
#define HW_COMPAT_H
|
||||
|
||||
#define HW_COMPAT_2_7 \
|
||||
/* empty */
|
||||
|
||||
#define HW_COMPAT_2_6 \
|
||||
{\
|
||||
.driver = "virtio-mmio",\
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#define MAX_DEVNO 65535
|
||||
#define MAX_SCHID 65535
|
||||
#define MAX_SSID 3
|
||||
#define MAX_CSSID 254 /* 255 is reserved */
|
||||
#define MAX_CSSID 255
|
||||
#define MAX_CHPID 255
|
||||
|
||||
#define MAX_CIWS 62
|
||||
|
||||
+13
-4
@@ -98,11 +98,14 @@ typedef struct SCCBHeader {
|
||||
} QEMU_PACKED SCCBHeader;
|
||||
|
||||
#define SCCB_DATA_LEN (SCCB_SIZE - sizeof(SCCBHeader))
|
||||
#define SCCB_CPU_FEATURE_LEN 6
|
||||
|
||||
/* CPU information */
|
||||
typedef struct CPUEntry {
|
||||
uint8_t address;
|
||||
uint8_t reserved0[13];
|
||||
uint8_t reserved0;
|
||||
uint8_t features[SCCB_CPU_FEATURE_LEN];
|
||||
uint8_t reserved2[6];
|
||||
uint8_t type;
|
||||
uint8_t reserved1;
|
||||
} QEMU_PACKED CPUEntry;
|
||||
@@ -118,12 +121,18 @@ typedef struct ReadInfo {
|
||||
uint8_t loadparm[8]; /* 24-31 */
|
||||
uint8_t _reserved3[48 - 32]; /* 32-47 */
|
||||
uint64_t facilities; /* 48-55 */
|
||||
uint8_t _reserved0[100 - 56];
|
||||
uint8_t _reserved0[76 - 56]; /* 56-75 */
|
||||
uint32_t ibc_val;
|
||||
uint8_t conf_char[96 - 80]; /* 80-95 */
|
||||
uint8_t _reserved4[99 - 96]; /* 96-98 */
|
||||
uint8_t mha_pow;
|
||||
uint32_t rnsize2;
|
||||
uint64_t rnmax2;
|
||||
uint8_t _reserved4[120-112]; /* 112-119 */
|
||||
uint8_t _reserved6[116 - 112]; /* 112-115 */
|
||||
uint8_t conf_char_ext[120 - 116]; /* 116-119 */
|
||||
uint16_t highest_cpu;
|
||||
uint8_t _reserved5[128 - 122]; /* 122-127 */
|
||||
uint8_t _reserved5[124 - 122]; /* 122-123 */
|
||||
uint32_t hmfai;
|
||||
struct CPUEntry entries[0];
|
||||
} QEMU_PACKED ReadInfo;
|
||||
|
||||
|
||||
@@ -611,6 +611,37 @@
|
||||
#define KEY_KBDINPUTASSIST_ACCEPT 0x264
|
||||
#define KEY_KBDINPUTASSIST_CANCEL 0x265
|
||||
|
||||
/* Diagonal movement keys */
|
||||
#define KEY_RIGHT_UP 0x266
|
||||
#define KEY_RIGHT_DOWN 0x267
|
||||
#define KEY_LEFT_UP 0x268
|
||||
#define KEY_LEFT_DOWN 0x269
|
||||
|
||||
#define KEY_ROOT_MENU 0x26a /* Show Device's Root Menu */
|
||||
/* Show Top Menu of the Media (e.g. DVD) */
|
||||
#define KEY_MEDIA_TOP_MENU 0x26b
|
||||
#define KEY_NUMERIC_11 0x26c
|
||||
#define KEY_NUMERIC_12 0x26d
|
||||
/*
|
||||
* Toggle Audio Description: refers to an audio service that helps blind and
|
||||
* visually impaired consumers understand the action in a program. Note: in
|
||||
* some countries this is referred to as "Video Description".
|
||||
*/
|
||||
#define KEY_AUDIO_DESC 0x26e
|
||||
#define KEY_3D_MODE 0x26f
|
||||
#define KEY_NEXT_FAVORITE 0x270
|
||||
#define KEY_STOP_RECORD 0x271
|
||||
#define KEY_PAUSE_RECORD 0x272
|
||||
#define KEY_VOD 0x273 /* Video on Demand */
|
||||
#define KEY_UNMUTE 0x274
|
||||
#define KEY_FASTREVERSE 0x275
|
||||
#define KEY_SLOWREVERSE 0x276
|
||||
/*
|
||||
* Control a data application associated with the currently viewed channel,
|
||||
* e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
|
||||
*/
|
||||
#define KEY_DATA 0x275
|
||||
|
||||
#define BTN_TRIGGER_HAPPY 0x2c0
|
||||
#define BTN_TRIGGER_HAPPY1 0x2c0
|
||||
#define BTN_TRIGGER_HAPPY2 0x2c1
|
||||
@@ -749,6 +780,7 @@
|
||||
#define SW_ROTATE_LOCK 0x0c /* set = rotate locked/disabled */
|
||||
#define SW_LINEIN_INSERT 0x0d /* set = inserted */
|
||||
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
|
||||
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
|
||||
#define SW_MAX_ 0x0f
|
||||
#define SW_CNT (SW_MAX_+1)
|
||||
|
||||
|
||||
@@ -244,6 +244,7 @@ struct input_mask {
|
||||
#define BUS_ATARI 0x1B
|
||||
#define BUS_SPI 0x1C
|
||||
#define BUS_RMI 0x1D
|
||||
#define BUS_CEC 0x1E
|
||||
|
||||
/*
|
||||
* MT_TOOL types
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
* transport being used (eg. virtio_ring), the rest are per-device feature
|
||||
* bits. */
|
||||
#define VIRTIO_TRANSPORT_F_START 28
|
||||
#define VIRTIO_TRANSPORT_F_END 33
|
||||
#define VIRTIO_TRANSPORT_F_END 34
|
||||
|
||||
#ifndef VIRTIO_CONFIG_NO_LEGACY
|
||||
/* Do we get callbacks when the ring is completely used, even if we've
|
||||
@@ -63,4 +63,12 @@
|
||||
/* v1.0 compliant. */
|
||||
#define VIRTIO_F_VERSION_1 32
|
||||
|
||||
/*
|
||||
* If clear - device has the IOMMU bypass quirk feature.
|
||||
* If set - use platform tools to detect the IOMMU.
|
||||
*
|
||||
* Note the reverse polarity (compared to most other features),
|
||||
* this is for compatibility with legacy systems.
|
||||
*/
|
||||
#define VIRTIO_F_IOMMU_PLATFORM 33
|
||||
#endif /* _LINUX_VIRTIO_CONFIG_H */
|
||||
|
||||
@@ -41,5 +41,6 @@
|
||||
#define VIRTIO_ID_CAIF 12 /* Virtio caif */
|
||||
#define VIRTIO_ID_GPU 16 /* virtio GPU */
|
||||
#define VIRTIO_ID_INPUT 18 /* virtio input */
|
||||
#define VIRTIO_ID_VSOCK 19 /* virtio vsock transport */
|
||||
|
||||
#endif /* _LINUX_VIRTIO_IDS_H */
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */
|
||||
#define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */
|
||||
#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Dynamic offload configuration. */
|
||||
#define VIRTIO_NET_F_MTU 3 /* Initial MTU advice */
|
||||
#define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */
|
||||
#define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */
|
||||
#define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */
|
||||
@@ -73,6 +74,8 @@ struct virtio_net_config {
|
||||
* Legal values are between 1 and 0x8000
|
||||
*/
|
||||
uint16_t max_virtqueue_pairs;
|
||||
/* Default maximum transmit unit advice */
|
||||
uint16_t mtu;
|
||||
} QEMU_PACKED;
|
||||
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
|
||||
* anyone can use the definitions to implement compatible drivers/servers:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of IBM nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* Copyright (C) Red Hat, Inc., 2013-2015
|
||||
* Copyright (C) Asias He <asias@redhat.com>, 2013
|
||||
* Copyright (C) Stefan Hajnoczi <stefanha@redhat.com>, 2015
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_VIRTIO_VSOCK_H
|
||||
#define _LINUX_VIRTIO_VSOCK_H
|
||||
|
||||
#include "standard-headers/linux/types.h"
|
||||
#include "standard-headers/linux/virtio_ids.h"
|
||||
#include "standard-headers/linux/virtio_config.h"
|
||||
|
||||
struct virtio_vsock_config {
|
||||
uint64_t guest_cid;
|
||||
} QEMU_PACKED;
|
||||
|
||||
enum virtio_vsock_event_id {
|
||||
VIRTIO_VSOCK_EVENT_TRANSPORT_RESET = 0,
|
||||
};
|
||||
|
||||
struct virtio_vsock_event {
|
||||
uint32_t id;
|
||||
} QEMU_PACKED;
|
||||
|
||||
struct virtio_vsock_hdr {
|
||||
uint64_t src_cid;
|
||||
uint64_t dst_cid;
|
||||
uint32_t src_port;
|
||||
uint32_t dst_port;
|
||||
uint32_t len;
|
||||
uint16_t type; /* enum virtio_vsock_type */
|
||||
uint16_t op; /* enum virtio_vsock_op */
|
||||
uint32_t flags;
|
||||
uint32_t buf_alloc;
|
||||
uint32_t fwd_cnt;
|
||||
} QEMU_PACKED;
|
||||
|
||||
enum virtio_vsock_type {
|
||||
VIRTIO_VSOCK_TYPE_STREAM = 1,
|
||||
};
|
||||
|
||||
enum virtio_vsock_op {
|
||||
VIRTIO_VSOCK_OP_INVALID = 0,
|
||||
|
||||
/* Connect operations */
|
||||
VIRTIO_VSOCK_OP_REQUEST = 1,
|
||||
VIRTIO_VSOCK_OP_RESPONSE = 2,
|
||||
VIRTIO_VSOCK_OP_RST = 3,
|
||||
VIRTIO_VSOCK_OP_SHUTDOWN = 4,
|
||||
|
||||
/* To send payload */
|
||||
VIRTIO_VSOCK_OP_RW = 5,
|
||||
|
||||
/* Tell the peer our credit info */
|
||||
VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6,
|
||||
/* Request the peer to send the credit info to us */
|
||||
VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7,
|
||||
};
|
||||
|
||||
/* VIRTIO_VSOCK_OP_SHUTDOWN flags values */
|
||||
enum virtio_vsock_shutdown {
|
||||
VIRTIO_VSOCK_SHUTDOWN_RCV = 1,
|
||||
VIRTIO_VSOCK_SHUTDOWN_SEND = 2,
|
||||
};
|
||||
|
||||
#endif /* _LINUX_VIRTIO_VSOCK_H */
|
||||
@@ -35,5 +35,14 @@ int kvm_available(void);
|
||||
int xen_available(void);
|
||||
|
||||
CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp);
|
||||
CpuModelExpansionInfo *arch_query_cpu_model_expansion(CpuModelExpansionType type,
|
||||
CpuModelInfo *mode,
|
||||
Error **errp);
|
||||
CpuModelCompareInfo *arch_query_cpu_model_comparison(CpuModelInfo *modela,
|
||||
CpuModelInfo *modelb,
|
||||
Error **errp);
|
||||
CpuModelBaselineInfo *arch_query_cpu_model_baseline(CpuModelInfo *modela,
|
||||
CpuModelInfo *modelb,
|
||||
Error **errp);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -139,8 +139,8 @@ struct kvm_arch_memory_slot {
|
||||
#define ARM_CP15_REG64(...) __ARM_CP15_REG64(__VA_ARGS__)
|
||||
|
||||
#define KVM_REG_ARM_TIMER_CTL ARM_CP15_REG32(0, 14, 3, 1)
|
||||
#define KVM_REG_ARM_TIMER_CNT ARM_CP15_REG64(1, 14)
|
||||
#define KVM_REG_ARM_TIMER_CVAL ARM_CP15_REG64(3, 14)
|
||||
#define KVM_REG_ARM_TIMER_CNT ARM_CP15_REG64(1, 14)
|
||||
#define KVM_REG_ARM_TIMER_CVAL ARM_CP15_REG64(3, 14)
|
||||
|
||||
/* Normal registers are mapped as coprocessor 16. */
|
||||
#define KVM_REG_ARM_CORE (0x0010 << KVM_REG_ARM_COPROC_SHIFT)
|
||||
|
||||
@@ -87,9 +87,11 @@ struct kvm_regs {
|
||||
/* Supported VGICv3 address types */
|
||||
#define KVM_VGIC_V3_ADDR_TYPE_DIST 2
|
||||
#define KVM_VGIC_V3_ADDR_TYPE_REDIST 3
|
||||
#define KVM_VGIC_ITS_ADDR_TYPE 4
|
||||
|
||||
#define KVM_VGIC_V3_DIST_SIZE SZ_64K
|
||||
#define KVM_VGIC_V3_REDIST_SIZE (2 * SZ_64K)
|
||||
#define KVM_VGIC_V3_ITS_SIZE (2 * SZ_64K)
|
||||
|
||||
#define KVM_ARM_VCPU_POWER_OFF 0 /* CPU is started in OFF state */
|
||||
#define KVM_ARM_VCPU_EL1_32BIT 1 /* CPU running a 32bit VM */
|
||||
|
||||
@@ -93,6 +93,47 @@ struct kvm_s390_vm_cpu_machine {
|
||||
__u64 fac_list[256];
|
||||
};
|
||||
|
||||
#define KVM_S390_VM_CPU_PROCESSOR_FEAT 2
|
||||
#define KVM_S390_VM_CPU_MACHINE_FEAT 3
|
||||
|
||||
#define KVM_S390_VM_CPU_FEAT_NR_BITS 1024
|
||||
#define KVM_S390_VM_CPU_FEAT_ESOP 0
|
||||
#define KVM_S390_VM_CPU_FEAT_SIEF2 1
|
||||
#define KVM_S390_VM_CPU_FEAT_64BSCAO 2
|
||||
#define KVM_S390_VM_CPU_FEAT_SIIF 3
|
||||
#define KVM_S390_VM_CPU_FEAT_GPERE 4
|
||||
#define KVM_S390_VM_CPU_FEAT_GSLS 5
|
||||
#define KVM_S390_VM_CPU_FEAT_IB 6
|
||||
#define KVM_S390_VM_CPU_FEAT_CEI 7
|
||||
#define KVM_S390_VM_CPU_FEAT_IBS 8
|
||||
#define KVM_S390_VM_CPU_FEAT_SKEY 9
|
||||
#define KVM_S390_VM_CPU_FEAT_CMMA 10
|
||||
#define KVM_S390_VM_CPU_FEAT_PFMFI 11
|
||||
#define KVM_S390_VM_CPU_FEAT_SIGPIF 12
|
||||
struct kvm_s390_vm_cpu_feat {
|
||||
__u64 feat[16];
|
||||
};
|
||||
|
||||
#define KVM_S390_VM_CPU_PROCESSOR_SUBFUNC 4
|
||||
#define KVM_S390_VM_CPU_MACHINE_SUBFUNC 5
|
||||
/* for "test bit" instructions MSB 0 bit ordering, for "query" raw blocks */
|
||||
struct kvm_s390_vm_cpu_subfunc {
|
||||
__u8 plo[32]; /* always */
|
||||
__u8 ptff[16]; /* with TOD-clock steering */
|
||||
__u8 kmac[16]; /* with MSA */
|
||||
__u8 kmc[16]; /* with MSA */
|
||||
__u8 km[16]; /* with MSA */
|
||||
__u8 kimd[16]; /* with MSA */
|
||||
__u8 klmd[16]; /* with MSA */
|
||||
__u8 pckmo[16]; /* with MSA3 */
|
||||
__u8 kmctr[16]; /* with MSA4 */
|
||||
__u8 kmf[16]; /* with MSA4 */
|
||||
__u8 kmo[16]; /* with MSA4 */
|
||||
__u8 pcc[16]; /* with MSA4 */
|
||||
__u8 ppno[16]; /* with MSA5 */
|
||||
__u8 reserved[1824];
|
||||
};
|
||||
|
||||
/* kvm attributes for crypto */
|
||||
#define KVM_S390_VM_CRYPTO_ENABLE_AES_KW 0
|
||||
#define KVM_S390_VM_CRYPTO_ENABLE_DEA_KW 1
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user