Pablo Greco e6a3ae
From 442feac1a3812e235baee5868d1b6096978fc62c Mon Sep 17 00:00:00 2001
Pablo Greco e6a3ae
From: David Hildenbrand <david@redhat.com>
Pablo Greco e6a3ae
Date: Wed, 22 May 2019 08:03:53 +0100
Pablo Greco e6a3ae
Subject: [PATCH 01/12] s390x/cpumodel: enum type S390FeatGroup now gets
Pablo Greco e6a3ae
 generated
Pablo Greco e6a3ae
Pablo Greco e6a3ae
RH-Author: David Hildenbrand <david@redhat.com>
Pablo Greco e6a3ae
Message-id: <20190522080402.20173-2-david@redhat.com>
Pablo Greco e6a3ae
Patchwork-id: 88153
Pablo Greco e6a3ae
O-Subject: [RHEL8.1 qemu-kvm PATCH v2 01/10] s390x/cpumodel: enum type S390FeatGroup now gets generated
Pablo Greco e6a3ae
Bugzilla: 1660912
Pablo Greco e6a3ae
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
Pablo Greco e6a3ae
RH-Acked-by: Thomas Huth <thuth@redhat.com>
Pablo Greco e6a3ae
Pablo Greco e6a3ae
The enumeration type S390FeatGroup is now generated as well.
Pablo Greco e6a3ae
This shall simplify the definition of new feature groups
Pablo Greco e6a3ae
without the requirement to modify existing code.
Pablo Greco e6a3ae
Pablo Greco e6a3ae
Signed-off-by: Michael Mueller <mimu@linux.ibm.com>
Pablo Greco e6a3ae
Message-Id: <20180725143617.8731-1-mimu@linux.ibm.com>
Pablo Greco e6a3ae
Acked-by: David Hildenbrand <david@redhat.com>
Pablo Greco e6a3ae
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Pablo Greco e6a3ae
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Pablo Greco e6a3ae
(cherry picked from commit a5f9ecc49d63a905da6598900e0a0eeec1ef269d)
Pablo Greco e6a3ae
Signed-off-by: David Hildenbrand <david@redhat.com>
Pablo Greco e6a3ae
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
Pablo Greco e6a3ae
---
Pablo Greco e6a3ae
 target/s390x/cpu_features.c |  1 -
Pablo Greco e6a3ae
 target/s390x/cpu_features.h | 19 +------------------
Pablo Greco e6a3ae
 target/s390x/gen-features.c | 18 +++++++++++++++++-
Pablo Greco e6a3ae
 3 files changed, 18 insertions(+), 20 deletions(-)
Pablo Greco e6a3ae
Pablo Greco e6a3ae
diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
Pablo Greco e6a3ae
index 91e40c2..1843c84 100644
Pablo Greco e6a3ae
--- a/target/s390x/cpu_features.c
Pablo Greco e6a3ae
+++ b/target/s390x/cpu_features.c
Pablo Greco e6a3ae
@@ -13,7 +13,6 @@
Pablo Greco e6a3ae
 #include "qemu/osdep.h"
Pablo Greco e6a3ae
 #include "qemu/module.h"
Pablo Greco e6a3ae
 #include "cpu_features.h"
Pablo Greco e6a3ae
-#include "gen-features.h"
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
 #define FEAT_INIT(_name, _type, _bit, _desc) \
Pablo Greco e6a3ae
     {                                                \
Pablo Greco e6a3ae
diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
Pablo Greco e6a3ae
index 968b12f..effe790 100644
Pablo Greco e6a3ae
--- a/target/s390x/cpu_features.h
Pablo Greco e6a3ae
+++ b/target/s390x/cpu_features.h
Pablo Greco e6a3ae
@@ -16,6 +16,7 @@
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
 #include "qemu/bitmap.h"
Pablo Greco e6a3ae
 #include "cpu_features_def.h"
Pablo Greco e6a3ae
+#include "gen-features.h"
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
 /* CPU features are announced via different ways */
Pablo Greco e6a3ae
 typedef enum {
Pablo Greco e6a3ae
@@ -64,24 +65,6 @@ void s390_add_from_feat_block(S390FeatBitmap features, S390FeatType type,
Pablo Greco e6a3ae
 void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
Pablo Greco e6a3ae
                                void (*fn)(const char *name, void *opaque));
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
-/* static groups that will never change */
Pablo Greco e6a3ae
-typedef enum {
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_PLO,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_TOD_CLOCK_STEERING,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_GEN13_PTFF_ENH,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_1,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_2,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_3,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_4,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_5,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_6,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_7,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MSA_EXT_8,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF,
Pablo Greco e6a3ae
-    S390_FEAT_GROUP_MAX,
Pablo Greco e6a3ae
-} S390FeatGroup;
Pablo Greco e6a3ae
-
Pablo Greco e6a3ae
 /* Definition of a CPU feature group */
Pablo Greco e6a3ae
 typedef struct {
Pablo Greco e6a3ae
     const char *name;       /* name exposed to the user */
Pablo Greco e6a3ae
diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
Pablo Greco e6a3ae
index 739d5f1..dcc5d25 100644
Pablo Greco e6a3ae
--- a/target/s390x/gen-features.c
Pablo Greco e6a3ae
+++ b/target/s390x/gen-features.c
Pablo Greco e6a3ae
@@ -680,6 +680,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
Pablo Greco e6a3ae
 #define FEAT_GROUP_INITIALIZER(_name)                  \
Pablo Greco e6a3ae
     {                                                  \
Pablo Greco e6a3ae
         .name = "S390_FEAT_GROUP_LIST_" #_name,        \
Pablo Greco e6a3ae
+        .enum_name = "S390_FEAT_GROUP_" #_name,        \
Pablo Greco e6a3ae
         .bits =                                        \
Pablo Greco e6a3ae
             { .data = group_##_name,                   \
Pablo Greco e6a3ae
               .len = ARRAY_SIZE(group_##_name) },      \
Pablo Greco e6a3ae
@@ -687,6 +688,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
 typedef struct {
Pablo Greco e6a3ae
     const char *name;
Pablo Greco e6a3ae
+    const char *enum_name;
Pablo Greco e6a3ae
     BitSpec bits;
Pablo Greco e6a3ae
 } FeatGroupDefSpec;
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
@@ -697,7 +699,6 @@ static FeatGroupDefSpec FeatGroupDef[] = {
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(PLO),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(GEN13_PTFF),
Pablo Greco e6a3ae
-    FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA_EXT_1),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA_EXT_2),
Pablo Greco e6a3ae
@@ -707,6 +708,7 @@ static FeatGroupDefSpec FeatGroupDef[] = {
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA_EXT_6),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA_EXT_7),
Pablo Greco e6a3ae
     FEAT_GROUP_INITIALIZER(MSA_EXT_8),
Pablo Greco e6a3ae
+    FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
Pablo Greco e6a3ae
 };
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
 #define QEMU_FEAT_INITIALIZER(_name)                   \
Pablo Greco e6a3ae
@@ -829,6 +831,19 @@ static void print_feature_group_defs(void)
Pablo Greco e6a3ae
     }
Pablo Greco e6a3ae
 }
Pablo Greco e6a3ae
 
Pablo Greco e6a3ae
+static void print_feature_group_enum_type(void)
Pablo Greco e6a3ae
+{
Pablo Greco e6a3ae
+    int i;
Pablo Greco e6a3ae
+
Pablo Greco e6a3ae
+    printf("\n/* CPU feature group enum type */\n"
Pablo Greco e6a3ae
+           "typedef enum {\n");
Pablo Greco e6a3ae
+    for (i = 0; i < ARRAY_SIZE(FeatGroupDef); i++) {
Pablo Greco e6a3ae
+        printf("\t%s,\n", FeatGroupDef[i].enum_name);
Pablo Greco e6a3ae
+    }
Pablo Greco e6a3ae
+    printf("\tS390_FEAT_GROUP_MAX,\n"
Pablo Greco e6a3ae
+           "} S390FeatGroup;\n");
Pablo Greco e6a3ae
+}
Pablo Greco e6a3ae
+
Pablo Greco e6a3ae
 int main(int argc, char *argv[])
Pablo Greco e6a3ae
 {
Pablo Greco e6a3ae
     printf("/*\n"
Pablo Greco e6a3ae
@@ -845,6 +860,7 @@ int main(int argc, char *argv[])
Pablo Greco e6a3ae
     print_feature_defs();
Pablo Greco e6a3ae
     print_feature_group_defs();
Pablo Greco e6a3ae
     print_qemu_feature_defs();
Pablo Greco e6a3ae
+    print_feature_group_enum_type();
Pablo Greco e6a3ae
     printf("\n#endif\n");
Pablo Greco e6a3ae
     return 0;
Pablo Greco e6a3ae
 }
Pablo Greco e6a3ae
-- 
Pablo Greco e6a3ae
1.8.3.1
Pablo Greco e6a3ae