2 * CPU features/facilities helper structs and utility functions for s390
4 * Copyright 2016 IBM Corp.
6 * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
7 * David Hildenbrand <dahi@linux.vnet.ibm.com>
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
14 #ifndef TARGET_S390X_CPU_FEATURES_H
15 #define TARGET_S390X_CPU_FEATURES_H
17 #include "qemu/bitmap.h"
18 #include "cpu_features_def.h"
19 #include "target/s390x/gen-features.h"
21 /* CPU features are announced via different ways */
24 S390_FEAT_TYPE_SCLP_CONF_CHAR
,
25 S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT
,
26 S390_FEAT_TYPE_SCLP_FAC134
,
27 S390_FEAT_TYPE_SCLP_CPU
,
45 S390_FEAT_TYPE_DFLTCC
,
48 /* Definition of a CPU feature */
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) */
56 /* use ordinary bitmap operations to work with features */
57 typedef unsigned long S390FeatBitmap
[BITS_TO_LONGS(S390_FEAT_MAX
)];
59 /* 64bit based bitmap used to init S390FeatBitmap from generated data */
60 typedef uint64_t S390FeatInit
[S390_FEAT_MAX
/ 64 + 1];
62 const S390FeatDef
*s390_feat_def(S390Feat feat
);
63 S390Feat
s390_feat_by_type_and_bit(S390FeatType type
, int bit
);
64 void s390_init_feat_bitmap(const S390FeatInit init
, S390FeatBitmap bitmap
);
65 void s390_fill_feat_block(const S390FeatBitmap features
, S390FeatType type
,
67 void s390_add_from_feat_block(S390FeatBitmap features
, S390FeatType type
,
69 void s390_feat_bitmap_to_ascii(const S390FeatBitmap features
, void *opaque
,
70 void (*fn
)(const char *name
, void *opaque
));
72 /* Definition of a CPU feature group */
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 */
80 const S390FeatGroupDef
*s390_feat_group_def(S390FeatGroup group
);
82 #define BE_BIT_NR(BIT) (BIT ^ (BITS_PER_LONG - 1))
84 static inline void clear_be_bit(unsigned int bit_nr
, uint8_t *array
)
86 array
[bit_nr
/ 8] &= ~(0x80 >> (bit_nr
% 8));
88 static inline void set_be_bit(unsigned int bit_nr
, uint8_t *array
)
90 array
[bit_nr
/ 8] |= 0x80 >> (bit_nr
% 8);
92 static inline bool test_be_bit(unsigned int bit_nr
, const uint8_t *array
)
94 return array
[bit_nr
/ 8] & (0x80 >> (bit_nr
% 8));
96 #endif /* TARGET_S390X_CPU_FEATURES_H */