Skip to content
Snippets Groups Projects
Commit 5f8652e9 authored by Avi Kivity's avatar Avi Kivity
Browse files

apic: add read() method

parent f496f7a7
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ class x2apic : public apic_driver { ...@@ -7,6 +7,7 @@ class x2apic : public apic_driver {
public: public:
explicit x2apic(); explicit x2apic();
virtual void init_on_ap(); virtual void init_on_ap();
virtual u32 read(apicreg reg);
virtual void write(apicreg reg, u32 value); virtual void write(apicreg reg, u32 value);
virtual void self_ipi(unsigned vector); virtual void self_ipi(unsigned vector);
virtual void ipi(unsigned apic_id, unsigned vector); virtual void ipi(unsigned apic_id, unsigned vector);
...@@ -75,6 +76,11 @@ void x2apic::eoi() ...@@ -75,6 +76,11 @@ void x2apic::eoi()
wrmsr(msr::X2APIC_EOI, 0); wrmsr(msr::X2APIC_EOI, 0);
} }
u32 x2apic::read(apicreg reg)
{
return processor::rdmsr(0x800 + unsigned(reg) / 0x10);
}
void x2apic::write(apicreg reg, u32 value) void x2apic::write(apicreg reg, u32 value)
{ {
processor::wrmsr(0x800 + unsigned(reg) / 0x10, value); processor::wrmsr(0x800 + unsigned(reg) / 0x10, value);
......
...@@ -83,6 +83,7 @@ public: ...@@ -83,6 +83,7 @@ public:
virtual void ipi_allbutself(unsigned vector) = 0; virtual void ipi_allbutself(unsigned vector) = 0;
virtual void nmi_allbutself() = 0; virtual void nmi_allbutself() = 0;
virtual void eoi() = 0; virtual void eoi() = 0;
virtual u32 read(apicreg reg) = 0;
virtual void write(apicreg reg, u32 value) = 0; virtual void write(apicreg reg, u32 value) = 0;
virtual u32 id() = 0; virtual u32 id() = 0;
void set_lvt(apiclvt reg, unsigned vector); void set_lvt(apiclvt reg, unsigned vector);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment