]> git.proxmox.com Git - mirror_qemu.git/blame - target/s390x/cpu_features.h
Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2021-07-09-v2' into staging
[mirror_qemu.git] / target / s390x / cpu_features.h
CommitLineData
78241744
MM
1/*
2 * CPU features/facilities helper structs and utility functions for s390
3 *
4 * Copyright 2016 IBM Corp.
5 *
6 * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
7 * David Hildenbrand <dahi@linux.vnet.ibm.com>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2 or (at
10 * your option) any later version. See the COPYING file in the top-level
11 * directory.
12 */
13
14#ifndef TARGET_S390X_CPU_FEATURES_H
15#define TARGET_S390X_CPU_FEATURES_H
16
17#include "qemu/bitmap.h"
18#include "cpu_features_def.h"
d3b18480 19#include "target/s390x/gen-features.h"
78241744
MM
20
21/* CPU features are announced via different ways */
22typedef enum {
23 S390_FEAT_TYPE_STFL,
24 S390_FEAT_TYPE_SCLP_CONF_CHAR,
25 S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
fabdada9 26 S390_FEAT_TYPE_SCLP_FAC134,
78241744
MM
27 S390_FEAT_TYPE_SCLP_CPU,
28 S390_FEAT_TYPE_MISC,
29 S390_FEAT_TYPE_PLO,
30 S390_FEAT_TYPE_PTFF,
31 S390_FEAT_TYPE_KMAC,
32 S390_FEAT_TYPE_KMC,
33 S390_FEAT_TYPE_KM,
34 S390_FEAT_TYPE_KIMD,
35 S390_FEAT_TYPE_KLMD,
36 S390_FEAT_TYPE_PCKMO,
37 S390_FEAT_TYPE_KMCTR,
38 S390_FEAT_TYPE_KMF,
39 S390_FEAT_TYPE_KMO,
40 S390_FEAT_TYPE_PCC,
41 S390_FEAT_TYPE_PPNO,
6da5c593 42 S390_FEAT_TYPE_KMA,
5dacbe23 43 S390_FEAT_TYPE_KDSA,
d220fabf 44 S390_FEAT_TYPE_SORTL,
afc7b866 45 S390_FEAT_TYPE_DFLTCC,
78241744
MM
46} S390FeatType;
47
48/* Definition of a CPU feature */
49typedef struct {
50 const char *name; /* name exposed to the user */
51 const char *desc; /* description exposed to the user */
52 S390FeatType type; /* feature type (way of indication)*/
53 int bit; /* bit within the feature type area (fixed) */
54} S390FeatDef;
55
56/* use ordinary bitmap operations to work with features */
57typedef unsigned long S390FeatBitmap[BITS_TO_LONGS(S390_FEAT_MAX)];
58
59/* 64bit based bitmap used to init S390FeatBitmap from generated data */
60typedef uint64_t S390FeatInit[S390_FEAT_MAX / 64 + 1];
61
62const S390FeatDef *s390_feat_def(S390Feat feat);
63S390Feat s390_feat_by_type_and_bit(S390FeatType type, int bit);
64void s390_init_feat_bitmap(const S390FeatInit init, S390FeatBitmap bitmap);
65void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type,
66 uint8_t *data);
67void s390_add_from_feat_block(S390FeatBitmap features, S390FeatType type,
68 uint8_t *data);
69void s390_feat_bitmap_to_ascii(const S390FeatBitmap features, void *opaque,
70 void (*fn)(const char *name, void *opaque));
71
8b3d6cb1
DH
72/* Definition of a CPU feature group */
73typedef struct {
74 const char *name; /* name exposed to the user */
75 const char *desc; /* description exposed to the user */
76 S390FeatBitmap feat; /* features contained in the group */
77 S390FeatInit init; /* used to init feat from generated data */
78} S390FeatGroupDef;
79
80const S390FeatGroupDef *s390_feat_group_def(S390FeatGroup group);
81
78241744 82#define BE_BIT_NR(BIT) (BIT ^ (BITS_PER_LONG - 1))
78241744 83
3ded270a
JF
84static inline void clear_be_bit(unsigned int bit_nr, uint8_t *array)
85{
86 array[bit_nr / 8] &= ~(0x80 >> (bit_nr % 8));
87}
3d1cfc3c
DH
88static inline void set_be_bit(unsigned int bit_nr, uint8_t *array)
89{
90 array[bit_nr / 8] |= 0x80 >> (bit_nr % 8);
91}
92static inline bool test_be_bit(unsigned int bit_nr, const uint8_t *array)
93{
94 return array[bit_nr / 8] & (0x80 >> (bit_nr % 8));
95}
78241744 96#endif /* TARGET_S390X_CPU_FEATURES_H */