mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
fcf5ef2ab5
We've currently got 18 architectures in QEMU, and thus 18 target-xxx folders in the root folder of the QEMU source tree. More architectures (e.g. RISC-V, AVR) are likely to be included soon, too, so the main folder of the QEMU sources slowly gets quite overcrowded with the target-xxx folders. To disburden the main folder a little bit, let's move the target-xxx folders into a dedicated target/ folder, so that target-xxx/ simply becomes target/xxx/ instead. Acked-by: Laurent Vivier <laurent@vivier.eu> [m68k part] Acked-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> [tricore part] Acked-by: Michael Walle <michael@walle.cc> [lm32 part] Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> [s390x part] Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> [s390x part] Acked-by: Eduardo Habkost <ehabkost@redhat.com> [i386 part] Acked-by: Artyom Tarasenko <atar4qemu@gmail.com> [sparc part] Acked-by: Richard Henderson <rth@twiddle.net> [alpha part] Acked-by: Max Filippov <jcmvbkbc@gmail.com> [xtensa part] Reviewed-by: David Gibson <david@gibson.dropbear.id.au> [ppc part] Acked-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> [crisµblaze part] Acked-by: Guan Xuetao <gxt@mprc.pku.edu.cn> [unicore32 part] Signed-off-by: Thomas Huth <thuth@redhat.com>
93 lines
3.1 KiB
C
93 lines
3.1 KiB
C
/*
|
|
* CPU features/facilities helper structs and utility functions for s390
|
|
*
|
|
* Copyright 2016 IBM Corp.
|
|
*
|
|
* Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
|
|
* David Hildenbrand <dahi@linux.vnet.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or (at
|
|
* your option) any later version. See the COPYING file in the top-level
|
|
* directory.
|
|
*/
|
|
|
|
#ifndef TARGET_S390X_CPU_FEATURES_H
|
|
#define TARGET_S390X_CPU_FEATURES_H
|
|
|
|
#include "qemu/bitmap.h"
|
|
#include "cpu_features_def.h"
|
|
|
|
/* CPU features are announced via different ways */
|
|
typedef enum {
|
|
S390_FEAT_TYPE_STFL,
|
|
S390_FEAT_TYPE_SCLP_CONF_CHAR,
|
|
S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
|
|
S390_FEAT_TYPE_SCLP_CPU,
|
|
S390_FEAT_TYPE_MISC,
|
|
S390_FEAT_TYPE_PLO,
|
|
S390_FEAT_TYPE_PTFF,
|
|
S390_FEAT_TYPE_KMAC,
|
|
S390_FEAT_TYPE_KMC,
|
|
S390_FEAT_TYPE_KM,
|
|
S390_FEAT_TYPE_KIMD,
|
|
S390_FEAT_TYPE_KLMD,
|
|
S390_FEAT_TYPE_PCKMO,
|
|
S390_FEAT_TYPE_KMCTR,
|
|
S390_FEAT_TYPE_KMF,
|
|
S390_FEAT_TYPE_KMO,
|
|
S390_FEAT_TYPE_PCC,
|
|
S390_FEAT_TYPE_PPNO,
|
|
} S390FeatType;
|
|
|
|
/* Definition of a CPU feature */
|
|
typedef struct {
|
|
const char *name; /* name exposed to the user */
|
|
const char *desc; /* description exposed to the user */
|
|
S390FeatType type; /* feature type (way of indication)*/
|
|
int bit; /* bit within the feature type area (fixed) */
|
|
} S390FeatDef;
|
|
|
|
/* use ordinary bitmap operations to work with features */
|
|
typedef unsigned long S390FeatBitmap[BITS_TO_LONGS(S390_FEAT_MAX)];
|
|
|
|
/* 64bit based bitmap used to init S390FeatBitmap from generated data */
|
|
typedef uint64_t S390FeatInit[S390_FEAT_MAX / 64 + 1];
|
|
|
|
const S390FeatDef *s390_feat_def(S390Feat feat);
|
|
S390Feat s390_feat_by_type_and_bit(S390FeatType type, int bit);
|
|
void s390_init_feat_bitmap(const S390FeatInit init, S390FeatBitmap bitmap);
|
|
void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type,
|
|
uint8_t *data);
|
|
void s390_add_from_feat_block(S390FeatBitmap features, S390FeatType type,
|
|
uint8_t *data);
|
|
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_MAX,
|
|
} S390FeatGroup;
|
|
|
|
/* Definition of a CPU feature group */
|
|
typedef struct {
|
|
const char *name; /* name exposed to the user */
|
|
const char *desc; /* description exposed to the user */
|
|
S390FeatBitmap feat; /* features contained in the group */
|
|
S390FeatInit init; /* used to init feat from generated data */
|
|
} S390FeatGroupDef;
|
|
|
|
const S390FeatGroupDef *s390_feat_group_def(S390FeatGroup group);
|
|
|
|
#define BE_BIT_NR(BIT) (BIT ^ (BITS_PER_LONG - 1))
|
|
#define BE_BIT(BIT) (1ULL < BE_BIT_NR(BIT))
|
|
|
|
#endif /* TARGET_S390X_CPU_FEATURES_H */
|