Lines Matching defs:msr
28 static bool is_mtrr_base_msr(unsigned int msr)
31 return !(msr & 0x1);
35 unsigned int msr)
37 int index = (msr - MTRRphysBase_MSR(0)) / 2;
42 static bool msr_mtrr_valid(unsigned msr)
44 switch (msr) {
68 static bool kvm_mtrr_valid(struct kvm_vcpu *vcpu, u32 msr, u64 data)
73 if (!msr_mtrr_valid(msr))
76 if (msr == MSR_MTRRdefType) {
80 } else if (msr >= MSR_MTRRfix64K_00000 && msr <= MSR_MTRRfix4K_F8000) {
88 WARN_ON(!(msr >= MTRRphysBase_MSR(0) &&
89 msr <= MTRRphysMask_MSR(KVM_NR_VAR_MTRR - 1)));
92 if ((msr & 1) == 0) {
194 static bool fixed_msr_to_seg_unit(u32 msr, int *seg, int *unit)
196 switch (msr) {
204 msr - MSR_MTRRfix16K_80000,
210 msr - MSR_MTRRfix4K_C0000,
250 static bool fixed_msr_to_range(u32 msr, u64 *start, u64 *end)
254 if (!fixed_msr_to_seg_unit(msr, &seg, &unit))
261 static int fixed_msr_to_range_index(u32 msr)
265 if (!fixed_msr_to_seg_unit(msr, &seg, &unit))
318 static void update_mtrr(struct kvm_vcpu *vcpu, u32 msr)
326 if (!mtrr_is_enabled(mtrr_state) && msr != MSR_MTRRdefType)
330 if (fixed_msr_to_range(msr, &start, &end)) {
333 } else if (msr == MSR_MTRRdefType) {
338 var_mtrr_range(var_mtrr_msr_to_range(vcpu, msr), &start, &end);
349 static void set_var_mtrr_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data)
354 cur = var_mtrr_msr_to_range(vcpu, msr);
364 if (is_mtrr_base_msr(msr))
378 int kvm_mtrr_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data)
382 if (!kvm_mtrr_valid(vcpu, msr, data))
385 index = fixed_msr_to_range_index(msr);
388 else if (msr == MSR_MTRRdefType)
391 set_var_mtrr_msr(vcpu, msr, data);
393 update_mtrr(vcpu, msr);
397 int kvm_mtrr_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
402 if (msr == MSR_MTRRcap) {
413 if (!msr_mtrr_valid(msr))
416 index = fixed_msr_to_range_index(msr);
419 } else if (msr == MSR_MTRRdefType) {
423 if (is_mtrr_base_msr(msr))
424 *pdata = var_mtrr_msr_to_range(vcpu, msr)->base;
426 *pdata = var_mtrr_msr_to_range(vcpu, msr)->mask;