81a82,92
> BitUnion32(LVTEntry)
> Bitfield<7, 0> vector;
> Bitfield<10, 8> deliveryMode;
> Bitfield<12> status;
> Bitfield<13> polarity;
> Bitfield<14> remoteIRR;
> Bitfield<15> trigger;
> Bitfield<16> masked;
> Bitfield<17> periodic;
> EndBitUnion(LVTEntry)
>
89a101,102
> private:
> Interrupts *localApic;
91c104,105
< ApicTimerEvent() : Event()
---
> ApicTimerEvent(Interrupts *_localApic) :
> Event(), localApic(_localApic)
96c110,114
< warn("Local APIC timer event doesn't do anything!\n");
---
> assert(localApic);
> if (localApic->triggerTimerInterrupt()) {
> localApic->setReg(APIC_INITIAL_COUNT,
> localApic->readReg(APIC_INITIAL_COUNT));
> }
107c125
< TriggerIntMessage smiMessage;
---
> uint8_t smiVector;
109c127
< TriggerIntMessage nmiMessage;
---
> uint8_t nmiVector;
111c129
< TriggerIntMessage extIntMessage;
---
> uint8_t extIntVector;
113c131
< TriggerIntMessage initMessage;
---
> uint8_t initVector;
165a184,185
> void requestInterrupt(uint8_t vector, uint8_t deliveryMode, bool level);
>
189a210,218
> bool
> triggerTimerInterrupt()
> {
> LVTEntry entry = regs[APIC_LVT_TIMER];
> if (!entry.masked)
> requestInterrupt(entry.vector, entry.deliveryMode, entry.trigger);
> return entry.periodic;
> }
>
228,231c257,261
< pendingSmi(false), smiMessage(0),
< pendingNmi(false), nmiMessage(0),
< pendingExtInt(false), extIntMessage(0),
< pendingInit(false), initMessage(0),
---
> apicTimerEvent(this),
> pendingSmi(false), smiVector(0),
> pendingNmi(false), nmiVector(0),
> pendingExtInt(false), extIntVector(0),
> pendingInit(false), initVector(0),