uefi: init vlapic according to native lapic

this patch save native lapic configuration and restore it to vm0's vlapic
before its running, then doing hpet timer interrupt injection through vlapic
interface -- this will not mess up vlapic and we can see hpet
timer interrupt coming continuously.

Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
Jason Chen CJ
2018-03-20 03:49:46 +08:00
committed by Jack Ren
parent a87757d602
commit fcb95d02d6
7 changed files with 100 additions and 2 deletions

View File

@@ -119,6 +119,7 @@ uint8_t vlapic_get_apicid(struct vlapic *vlapic);
int vlapic_create(struct vcpu *vcpu);
void vlapic_free(struct vcpu *vcpu);
void vlapic_init(struct vlapic *vlapic);
void vlapic_restore(struct vlapic *vlapic, struct lapic_regs *regs);
bool vlapic_enabled(struct vlapic *vlapic);
uint64_t apicv_get_apic_access_addr(struct vm *vm);
uint64_t apicv_get_apic_page_addr(struct vlapic *vlapic);

View File

@@ -161,6 +161,25 @@ union lapic_id {
} x2apic;
};
struct lapic_regs {
uint32_t id;
uint32_t tpr;
uint32_t apr;
uint32_t ppr;
uint32_t ldr;
uint32_t dfr;
uint32_t tmr[8];
uint32_t svr;
uint32_t lvtt;
uint32_t lvt0;
uint32_t lvt1;
uint32_t lvterr;
uint32_t ticr;
uint32_t tccr;
uint32_t tdcr;
};
void save_lapic(struct lapic_regs *regs);
int early_init_lapic(void);
int init_lapic(uint32_t cpu_id);
int send_lapic_eoi(void);