git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1012 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
49 lines
951 B
Plaintext
49 lines
951 B
Plaintext
#ifndef __FIREINTERRUPT_AH__
|
|
#define __FIREINTERRUPT_AH__
|
|
|
|
#include "config/AspectConfig.hpp"
|
|
|
|
#ifdef CONFIG_FIRE_INTERRUPTS
|
|
|
|
#include "../../../bochs/bochs.h"
|
|
#include "../../../bochs/cpu/cpu.h"
|
|
#include "../SALInst.hpp"
|
|
|
|
aspect fireInterrupt
|
|
{
|
|
pointcut cpuLoop() = "void defineCPULoopJoinPoint(...)";
|
|
|
|
advice execution (cpuLoop()) : before ()
|
|
{
|
|
if (!sal::interrupt_injection_request) {
|
|
return;
|
|
}else{
|
|
BX_SET_INTR(sal::interrupt_to_fire);
|
|
DEV_pic_raise_irq(sal::interrupt_to_fire);
|
|
}
|
|
}
|
|
};
|
|
|
|
aspect InterruptDone
|
|
{
|
|
|
|
pointcut interrupt_method() = "void bx_cpu_c::interrupt(...)";
|
|
|
|
advice execution (interrupt_method()) : before ()
|
|
{
|
|
if (!sal::interrupt_injection_request) {
|
|
return;
|
|
}else{
|
|
if(*(tjp->arg<0>()) == 32 + sal::interrupt_to_fire){
|
|
DEV_pic_lower_irq(sal::interrupt_to_fire);
|
|
|
|
sal::simulator.fireInterruptDone();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif // CONFIG_FIRE_INTERRUPTS
|
|
|
|
#endif /* __FIREINTERRUPT_AH__ */
|