From 70a5084759438a2773aa9a6c2171e2bc3612a21d Mon Sep 17 00:00:00 2001 From: hellwig Date: Fri, 30 Mar 2012 15:25:46 +0000 Subject: [PATCH] forgotten aspect... git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1012 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- core/SAL/bochs/fireInterrupt.ah | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 core/SAL/bochs/fireInterrupt.ah diff --git a/core/SAL/bochs/fireInterrupt.ah b/core/SAL/bochs/fireInterrupt.ah new file mode 100644 index 00000000..6039f5e7 --- /dev/null +++ b/core/SAL/bochs/fireInterrupt.ah @@ -0,0 +1,48 @@ +#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__ */