case HV_X64_MSR_SINT0 ... HV_X64_MSR_SINT15:
{
unsigned int sintx = idx - HV_X64_MSR_SINT0;
- union viridian_sint_msr new, *vs =
+ union hv_synic_sint new, *vs =
&array_access_nospec(vv->sint, sintx);
uint8_t vector;
return X86EMUL_EXCEPTION;
/* Vectors must be in the range 0x10-0xff inclusive */
- new.raw = val;
+ new.as_uint64 = val;
if ( new.vector < 0x10 )
return X86EMUL_EXCEPTION;
case HV_X64_MSR_SINT0 ... HV_X64_MSR_SINT15:
{
unsigned int sintx = idx - HV_X64_MSR_SINT0;
- const union viridian_sint_msr *vs =
+ const union hv_synic_sint *vs =
&array_access_nospec(vv->sint, sintx);
if ( !(viridian_feature_mask(d) & HVMPV_synic) )
return X86EMUL_EXCEPTION;
- *val = vs->raw;
+ *val = vs->as_uint64;
break;
}
* initally masked.
*/
for ( i = 0; i < ARRAY_SIZE(vv->sint); i++ )
- vv->sint[i].mask = 1;
+ vv->sint[i].masked = 1;
/* Initialize the mapping array with invalid values */
for ( i = 0; i < ARRAY_SIZE(vv->vector_to_sintx); i++ )
uint64_t delivery)
{
struct viridian_vcpu *vv = v->arch.hvm.viridian;
- const union viridian_sint_msr *vs = &vv->sint[sintx];
+ const union hv_synic_sint *vs = &vv->sint[sintx];
struct hv_message *msg = vv->simp.ptr;
struct {
uint32_t TimerIndex;
BUILD_BUG_ON(sizeof(payload) > sizeof(msg->u.payload));
memcpy(msg->u.payload, &payload, sizeof(payload));
- if ( !vs->mask )
+ if ( !vs->masked )
vlapic_set_irq(vcpu_vlapic(v), vs->vector, 0);
return true;
{
const struct viridian_vcpu *vv = v->arch.hvm.viridian;
unsigned int sintx = vv->vector_to_sintx[vector];
- const union viridian_sint_msr *vs =
+ const union hv_synic_sint *vs =
&array_access_nospec(vv->sint, sintx);
if ( sintx >= ARRAY_SIZE(vv->sint) )
BUILD_BUG_ON(ARRAY_SIZE(vv->sint) != ARRAY_SIZE(ctxt->sint_msr));
for ( i = 0; i < ARRAY_SIZE(vv->sint); i++ )
- ctxt->sint_msr[i] = vv->sint[i].raw;
+ ctxt->sint_msr[i] = vv->sint[i].as_uint64;
ctxt->simp_msr = vv->simp.msr.raw;
{
uint8_t vector;
- vv->sint[i].raw = ctxt->sint_msr[i];
+ vv->sint[i].as_uint64 = ctxt->sint_msr[i];
vector = vv->sint[i].vector;
if ( vector < 0x10 )
void *ptr;
};
-union viridian_sint_msr
-{
- uint64_t raw;
- struct
- {
- uint64_t vector:8;
- uint64_t reserved_preserved1:8;
- uint64_t mask:1;
- uint64_t auto_eoi:1;
- uint64_t polling:1;
- uint64_t reserved_preserved2:45;
- };
-};
-
union viridian_stimer_config_msr
{
uint64_t raw;
uint64_t scontrol;
uint64_t siefp;
struct viridian_page simp;
- union viridian_sint_msr sint[16];
+ union hv_synic_sint sint[16];
uint8_t vector_to_sintx[256];
struct viridian_stimer stimer[4];
unsigned int stimer_enabled;