resx
struct resx get_reg_fixed_bits(struct kvm *kvm, enum vcpu_sysreg reg);
struct resx mask[NR_SYS_REGS - __SANITISED_REG_START__];
static inline struct resx __kvm_get_sysreg_resx(struct kvm_arch *arch,
return (struct resx){};
enum vcpu_sysreg sr, struct resx resx)
arch->sysreg_masks->mask[sr - __SANITISED_REG_START__] = resx;
#define kvm_set_sysreg_resx(k, sr, resx) \
__kvm_set_sysreg_resx(&(k)->arch, (sr), (resx))
int map_size, u64 resx, const char *str)
if (!((map[i].flags & FORCE_RESx) && (map[i].bits & resx)))
if (mask != ~resx)
str, mask ^ ~resx);
static struct resx compute_resx_bits(struct kvm *kvm,
struct resx resx = {};
resx.res1 |= bits;
resx.res0 |= bits;
return resx;
static struct resx compute_reg_resx_bits(struct kvm *kvm,
struct resx resx;
resx = compute_resx_bits(kvm, r->bit_feat_map, r->bit_feat_map_sz,
resx.res0 |= r->feat_map.masks->res0;
resx.res1 |= r->feat_map.masks->res1;
resx.res0 |= compute_resx_bits(kvm, &r->feat_map, 1, require, exclude).res0;
resx.res1 &= ~resx.res0;
return resx;
struct resx resx;
resx = compute_resx_bits(kvm, r->bit_feat_map, r->bit_feat_map_sz,
return resx.res0 | resx.res1;
struct resx get_reg_fixed_bits(struct kvm *kvm, enum vcpu_sysreg reg)
struct resx resx;
resx = compute_reg_resx_bits(kvm, &hfgrtr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hfgwtr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hfgitr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hdfgrtr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hdfgwtr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hafgrtr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hfgrtr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hfgwtr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hfgitr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hdfgrtr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hdfgwtr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &hcrx_desc, 0, 0);
resx.res1 |= __HCRX_EL2_RES1;
resx = compute_reg_resx_bits(kvm, &hcr_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &sctlr2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &tcr2_el2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &sctlr_el1_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &sctlr_el2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &mdcr_el2_desc, 0, 0);
resx = compute_reg_resx_bits(kvm, &vtcr_el2_desc, 0, 0);
resx = (typeof(resx)){};
return resx;
struct resx resx;
resx = kvm_get_sysreg_resx(vcpu->kvm, sr);
v &= ~resx.res0;
v |= resx.res1;
static __always_inline void set_sysreg_masks(struct kvm *kvm, int sr, struct resx resx)
kvm_set_sysreg_resx(kvm, sr, resx);
struct resx resx;
resx = (typeof(resx)){};
resx.res0 |= GENMASK(63, 56);
resx.res0 |= VTTBR_CNP_BIT;
set_sysreg_masks(kvm, VTTBR_EL2, resx);
resx = get_reg_fixed_bits(kvm, VTCR_EL2);
set_sysreg_masks(kvm, VTCR_EL2, resx);
resx.res0 = GENMASK(63, 40) | GENMASK(30, 24);
resx.res1 = BIT(31);
set_sysreg_masks(kvm, VMPIDR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HCR_EL2);
set_sysreg_masks(kvm, HCR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HCRX_EL2);
set_sysreg_masks(kvm, HCRX_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGRTR_EL2);
set_sysreg_masks(kvm, HFGRTR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGWTR_EL2);
set_sysreg_masks(kvm, HFGWTR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HDFGRTR_EL2);
set_sysreg_masks(kvm, HDFGRTR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HDFGWTR_EL2);
set_sysreg_masks(kvm, HDFGWTR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGITR_EL2);
set_sysreg_masks(kvm, HFGITR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HAFGRTR_EL2);
set_sysreg_masks(kvm, HAFGRTR_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGRTR2_EL2);
set_sysreg_masks(kvm, HFGRTR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGWTR2_EL2);
set_sysreg_masks(kvm, HFGWTR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, HDFGRTR2_EL2);
set_sysreg_masks(kvm, HDFGRTR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, HDFGWTR2_EL2);
set_sysreg_masks(kvm, HDFGWTR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, HFGITR2_EL2);
set_sysreg_masks(kvm, HFGITR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, TCR2_EL2);
set_sysreg_masks(kvm, TCR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, SCTLR_EL1);
set_sysreg_masks(kvm, SCTLR_EL1, resx);
resx = get_reg_fixed_bits(kvm, SCTLR_EL2);
set_sysreg_masks(kvm, SCTLR_EL2, resx);
resx = get_reg_fixed_bits(kvm, SCTLR2_EL1);
set_sysreg_masks(kvm, SCTLR2_EL1, resx);
resx = get_reg_fixed_bits(kvm, SCTLR2_EL2);
set_sysreg_masks(kvm, SCTLR2_EL2, resx);
resx = get_reg_fixed_bits(kvm, MDCR_EL2);
set_sysreg_masks(kvm, MDCR_EL2, resx);
resx.res0 = GENMASK(63, 20);
resx.res1 = 0;
resx.res0 |= CNTHCTL_CNTPMASK | CNTHCTL_CNTVMASK;
resx.res0 |= CNTHCTL_ECV;
resx.res0 |= (CNTHCTL_EL1TVT | CNTHCTL_EL1TVCT |
resx.res0 |= GENMASK(11, 8);
set_sysreg_masks(kvm, CNTHCTL_EL2, resx);
resx.res0 = ICH_HCR_EL2_RES0;
resx.res1 = ICH_HCR_EL2_RES1;
resx.res0 |= ICH_HCR_EL2_TDIR;
resx.res0 |= ICH_HCR_EL2_DVIM | ICH_HCR_EL2_vSGIEOICount;
set_sysreg_masks(kvm, ICH_HCR_EL2, resx);
resx.res0 = VNCR_EL2_RES0;
resx.res1 = VNCR_EL2_RES1;
set_sysreg_masks(kvm, VNCR_EL2, resx);
struct resx resx;
resx = kvm_get_sysreg_resx(kvm, desc->reg);
desc->name, resx.res0, resx.res1);
u16 resx, resy;
resx = le16_to_cpup((__le16 *)rs);
if (!resx || resx == 0xffff || !resy || resy == 0xffff)
resx = 16384;
input_abs_set_max(priv->input, ABS_X, resx - 1);
input_abs_set_max(priv->input, ABS_MT_POSITION_X, resx - 1);