Lines Matching defs:smram
184 struct kvm_smram_state_32 *smram)
190 smram->cr0 = kvm_read_cr0(vcpu);
191 smram->cr3 = kvm_read_cr3(vcpu);
192 smram->eflags = kvm_get_rflags(vcpu);
193 smram->eip = kvm_rip_read(vcpu);
196 smram->gprs[i] = kvm_register_read_raw(vcpu, i);
199 smram->dr6 = (u32)val;
201 smram->dr7 = (u32)val;
203 enter_smm_save_seg_32(vcpu, &smram->tr, &smram->tr_sel, VCPU_SREG_TR);
204 enter_smm_save_seg_32(vcpu, &smram->ldtr, &smram->ldtr_sel, VCPU_SREG_LDTR);
207 smram->gdtr.base = dt.address;
208 smram->gdtr.limit = dt.size;
211 smram->idtr.base = dt.address;
212 smram->idtr.limit = dt.size;
214 enter_smm_save_seg_32(vcpu, &smram->es, &smram->es_sel, VCPU_SREG_ES);
215 enter_smm_save_seg_32(vcpu, &smram->cs, &smram->cs_sel, VCPU_SREG_CS);
216 enter_smm_save_seg_32(vcpu, &smram->ss, &smram->ss_sel, VCPU_SREG_SS);
218 enter_smm_save_seg_32(vcpu, &smram->ds, &smram->ds_sel, VCPU_SREG_DS);
219 enter_smm_save_seg_32(vcpu, &smram->fs, &smram->fs_sel, VCPU_SREG_FS);
220 enter_smm_save_seg_32(vcpu, &smram->gs, &smram->gs_sel, VCPU_SREG_GS);
222 smram->cr4 = kvm_read_cr4(vcpu);
223 smram->smm_revision = 0x00020000;
224 smram->smbase = vcpu->arch.smbase;
226 smram->int_shadow = static_call(kvm_x86_get_interrupt_shadow)(vcpu);
231 struct kvm_smram_state_64 *smram)
238 smram->gprs[15 - i] = kvm_register_read_raw(vcpu, i);
240 smram->rip = kvm_rip_read(vcpu);
241 smram->rflags = kvm_get_rflags(vcpu);
245 smram->dr6 = val;
247 smram->dr7 = val;
249 smram->cr0 = kvm_read_cr0(vcpu);
250 smram->cr3 = kvm_read_cr3(vcpu);
251 smram->cr4 = kvm_read_cr4(vcpu);
253 smram->smbase = vcpu->arch.smbase;
254 smram->smm_revison = 0x00020064;
256 smram->efer = vcpu->arch.efer;
258 enter_smm_save_seg_64(vcpu, &smram->tr, VCPU_SREG_TR);
261 smram->idtr.limit = dt.size;
262 smram->idtr.base = dt.address;
264 enter_smm_save_seg_64(vcpu, &smram->ldtr, VCPU_SREG_LDTR);
267 smram->gdtr.limit = dt.size;
268 smram->gdtr.base = dt.address;
270 enter_smm_save_seg_64(vcpu, &smram->es, VCPU_SREG_ES);
271 enter_smm_save_seg_64(vcpu, &smram->cs, VCPU_SREG_CS);
272 enter_smm_save_seg_64(vcpu, &smram->ss, VCPU_SREG_SS);
273 enter_smm_save_seg_64(vcpu, &smram->ds, VCPU_SREG_DS);
274 enter_smm_save_seg_64(vcpu, &smram->fs, VCPU_SREG_FS);
275 enter_smm_save_seg_64(vcpu, &smram->gs, VCPU_SREG_GS);
277 smram->int_shadow = static_call(kvm_x86_get_interrupt_shadow)(vcpu);
286 union kvm_smram smram;
290 memset(smram.bytes, 0, sizeof(smram.bytes));
294 enter_smm_save_state_64(vcpu, &smram.smram64);
297 enter_smm_save_state_32(vcpu, &smram.smram32);
307 if (static_call(kvm_x86_enter_smm)(vcpu, &smram))
312 if (kvm_vcpu_write_guest(vcpu, vcpu->arch.smbase + 0xfe00, &smram, sizeof(smram)))
576 union kvm_smram smram;
582 ret = kvm_vcpu_read_guest(vcpu, smbase + 0xfe00, smram.bytes, sizeof(smram));
639 if (static_call(kvm_x86_leave_smm)(vcpu, &smram))
644 return rsm_load_state_64(ctxt, &smram.smram64);
647 return rsm_load_state_32(ctxt, &smram.smram32);