s390x/cpumodel: enum type S390FeatGroup now gets generated

The enumeration type S390FeatGroup is now generated as well.
This shall simplify the definition of new feature groups
without the requirement to modify existing code.

Signed-off-by: Michael Mueller <mimu@linux.ibm.com>
Message-Id: <20180725143617.8731-1-mimu@linux.ibm.com>
Acked-by: David Hildenbrand <david@redhat.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
Michael Mueller 2018-07-25 16:36:17 +02:00 committed by Cornelia Huck
parent 9ca056d68f
commit a5f9ecc49d
3 changed files with 18 additions and 20 deletions

View File

@ -13,7 +13,6 @@
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "qemu/module.h" #include "qemu/module.h"
#include "cpu_features.h" #include "cpu_features.h"
#include "gen-features.h"
#define FEAT_INIT(_name, _type, _bit, _desc) \ #define FEAT_INIT(_name, _type, _bit, _desc) \
{ \ { \

View File

@ -16,6 +16,7 @@
#include "qemu/bitmap.h" #include "qemu/bitmap.h"
#include "cpu_features_def.h" #include "cpu_features_def.h"
#include "gen-features.h"
/* CPU features are announced via different ways */ /* CPU features are announced via different ways */
typedef enum { typedef enum {
@ -64,24 +65,6 @@ void s390_add_from_feat_block(S390FeatBitmap features, S390FeatType type,
void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque, void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
void (*fn)(const char *name, void *opaque)); void (*fn)(const char *name, void *opaque));
/* static groups that will never change */
typedef enum {
S390_FEAT_GROUP_PLO,
S390_FEAT_GROUP_TOD_CLOCK_STEERING,
S390_FEAT_GROUP_GEN13_PTFF_ENH,
S390_FEAT_GROUP_MSA,
S390_FEAT_GROUP_MSA_EXT_1,
S390_FEAT_GROUP_MSA_EXT_2,
S390_FEAT_GROUP_MSA_EXT_3,
S390_FEAT_GROUP_MSA_EXT_4,
S390_FEAT_GROUP_MSA_EXT_5,
S390_FEAT_GROUP_MSA_EXT_6,
S390_FEAT_GROUP_MSA_EXT_7,
S390_FEAT_GROUP_MSA_EXT_8,
S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF,
S390_FEAT_GROUP_MAX,
} S390FeatGroup;
/* Definition of a CPU feature group */ /* Definition of a CPU feature group */
typedef struct { typedef struct {
const char *name; /* name exposed to the user */ const char *name; /* name exposed to the user */

View File

@ -661,6 +661,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
#define FEAT_GROUP_INITIALIZER(_name) \ #define FEAT_GROUP_INITIALIZER(_name) \
{ \ { \
.name = "S390_FEAT_GROUP_LIST_" #_name, \ .name = "S390_FEAT_GROUP_LIST_" #_name, \
.enum_name = "S390_FEAT_GROUP_" #_name, \
.bits = \ .bits = \
{ .data = group_##_name, \ { .data = group_##_name, \
.len = ARRAY_SIZE(group_##_name) }, \ .len = ARRAY_SIZE(group_##_name) }, \
@ -668,6 +669,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
typedef struct { typedef struct {
const char *name; const char *name;
const char *enum_name;
BitSpec bits; BitSpec bits;
} FeatGroupDefSpec; } FeatGroupDefSpec;
@ -678,7 +680,6 @@ static FeatGroupDefSpec FeatGroupDef[] = {
FEAT_GROUP_INITIALIZER(PLO), FEAT_GROUP_INITIALIZER(PLO),
FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING), FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
FEAT_GROUP_INITIALIZER(GEN13_PTFF), FEAT_GROUP_INITIALIZER(GEN13_PTFF),
FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
FEAT_GROUP_INITIALIZER(MSA), FEAT_GROUP_INITIALIZER(MSA),
FEAT_GROUP_INITIALIZER(MSA_EXT_1), FEAT_GROUP_INITIALIZER(MSA_EXT_1),
FEAT_GROUP_INITIALIZER(MSA_EXT_2), FEAT_GROUP_INITIALIZER(MSA_EXT_2),
@ -688,6 +689,7 @@ static FeatGroupDefSpec FeatGroupDef[] = {
FEAT_GROUP_INITIALIZER(MSA_EXT_6), FEAT_GROUP_INITIALIZER(MSA_EXT_6),
FEAT_GROUP_INITIALIZER(MSA_EXT_7), FEAT_GROUP_INITIALIZER(MSA_EXT_7),
FEAT_GROUP_INITIALIZER(MSA_EXT_8), FEAT_GROUP_INITIALIZER(MSA_EXT_8),
FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
}; };
#define QEMU_FEAT_INITIALIZER(_name) \ #define QEMU_FEAT_INITIALIZER(_name) \
@ -810,6 +812,19 @@ static void print_feature_group_defs(void)
} }
} }
static void print_feature_group_enum_type(void)
{
int i;
printf("\n/* CPU feature group enum type */\n"
"typedef enum {\n");
for (i = 0; i < ARRAY_SIZE(FeatGroupDef); i++) {
printf("\t%s,\n", FeatGroupDef[i].enum_name);
}
printf("\tS390_FEAT_GROUP_MAX,\n"
"} S390FeatGroup;\n");
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
printf("/*\n" printf("/*\n"
@ -826,6 +841,7 @@ int main(int argc, char *argv[])
print_feature_defs(); print_feature_defs();
print_feature_group_defs(); print_feature_group_defs();
print_qemu_feature_defs(); print_qemu_feature_defs();
print_feature_group_enum_type();
printf("\n#endif\n"); printf("\n#endif\n");
return 0; return 0;
} }