apic: use emulated lapic version 0x14 on pc machines >= 2.1
authorGabriel L. Somlo <gsomlo@gmail.com>
Mon, 5 May 2014 14:52:51 +0000 (10:52 -0400)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 7 May 2014 15:36:37 +0000 (18:36 +0300)
Add "version" property to local apic, and have it default to
0x14 for pc machines starting at 2.1. For compatibility with
previous releases, pc machines up to 2.0 will have their local
apic version set to 0x11.

Signed-off-by: Gabriel L. Somlo <somlo@cmu.edu>
Acked-by: Alexander Graf <agraf@suse.de>
Reviewed-by: Andreas Färber <afaerber@suse.de>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/intc/apic.c
hw/intc/apic_common.c
include/hw/i386/apic_internal.h
include/hw/i386/pc.h

index 2f40cbad2daf3762675375a362f61473f3c5da90..ef19e5515c6a91085b3ec82750a40a5cca6c8f39 100644 (file)
@@ -675,7 +675,7 @@ static uint32_t apic_mem_readl(void *opaque, hwaddr addr)
         val = s->id << 24;
         break;
     case 0x03: /* version */
-        val = 0x11 | ((APIC_LVT_NB - 1) << 16); /* version 0x11 */
+        val = s->version | ((APIC_LVT_NB - 1) << 16);
         break;
     case 0x08:
         apic_sync_vapic(s, SYNC_FROM_VAPIC);
index 7ecce2dcce7b08416c4baa1c079616b3c0f201ad..71376533caff9fa5e5869cda9266236f7c85b257 100644 (file)
@@ -380,6 +380,7 @@ static const VMStateDescription vmstate_apic_common = {
 
 static Property apic_properties_common[] = {
     DEFINE_PROP_UINT8("id", APICCommonState, id, -1),
+    DEFINE_PROP_UINT8("version", APICCommonState, version, 0x14),
     DEFINE_PROP_BIT("vapic", APICCommonState, vapic_control, VAPIC_ENABLE_BIT,
                     true),
     DEFINE_PROP_END_OF_LIST(),
index 70542a6f43c6c6839639a512197ee4157fa61bde..83e2a42cc18a8fe1c48fbb4a17de552e5e0a5fcb 100644 (file)
@@ -98,6 +98,7 @@ struct APICCommonState {
     X86CPU *cpu;
     uint32_t apicbase;
     uint8_t id;
+    uint8_t version;
     uint8_t arb_id;
     uint8_t tpr;
     uint32_t spurious_vec;
index 0ade0f114ef7684af86a4da24c137240c5419960..32a76876c758fa938fb1e5df14ac5b043d92eae7 100644 (file)
@@ -268,6 +268,9 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
 
 #define PC_COMPAT_2_0 \
         {\
+            .driver   = "apic",\
+            .property = "version",\
+            .value    = stringify(0x11),\
         }
 
 #define PC_COMPAT_1_7 \