Commit a5f9ecc4 authored by Michael Mueller's avatar Michael Mueller Committed by Cornelia Huck
Browse files

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: default avatarMichael Mueller <mimu@linux.ibm.com>
Message-Id: <20180725143617.8731-1-mimu@linux.ibm.com>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Acked-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
parent 9ca056d6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@
#include "qemu/osdep.h"
#include "qemu/module.h"
#include "cpu_features.h"
#include "gen-features.h"

#define FEAT_INIT(_name, _type, _bit, _desc) \
    {                                                \
+1 −18
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "qemu/bitmap.h"
#include "cpu_features_def.h"
#include "gen-features.h"

/* CPU features are announced via different ways */
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 (*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 */
typedef struct {
    const char *name;       /* name exposed to the user */
+17 −1
Original line number Diff line number Diff line
@@ -661,6 +661,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {
#define FEAT_GROUP_INITIALIZER(_name)                  \
    {                                                  \
        .name = "S390_FEAT_GROUP_LIST_" #_name,        \
        .enum_name = "S390_FEAT_GROUP_" #_name,        \
        .bits =                                        \
            { .data = group_##_name,                   \
              .len = ARRAY_SIZE(group_##_name) },      \
@@ -668,6 +669,7 @@ static CpuFeatDefSpec CpuFeatDef[] = {

typedef struct {
    const char *name;
    const char *enum_name;
    BitSpec bits;
} FeatGroupDefSpec;

@@ -678,7 +680,6 @@ static FeatGroupDefSpec FeatGroupDef[] = {
    FEAT_GROUP_INITIALIZER(PLO),
    FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
    FEAT_GROUP_INITIALIZER(GEN13_PTFF),
    FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
    FEAT_GROUP_INITIALIZER(MSA),
    FEAT_GROUP_INITIALIZER(MSA_EXT_1),
    FEAT_GROUP_INITIALIZER(MSA_EXT_2),
@@ -688,6 +689,7 @@ static FeatGroupDefSpec FeatGroupDef[] = {
    FEAT_GROUP_INITIALIZER(MSA_EXT_6),
    FEAT_GROUP_INITIALIZER(MSA_EXT_7),
    FEAT_GROUP_INITIALIZER(MSA_EXT_8),
    FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
};

#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[])
{
    printf("/*\n"
@@ -826,6 +841,7 @@ int main(int argc, char *argv[])
    print_feature_defs();
    print_feature_group_defs();
    print_qemu_feature_defs();
    print_feature_group_enum_type();
    printf("\n#endif\n");
    return 0;
}