summaryrefslogtreecommitdiff
path: root/cpu-exec.c
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2006-09-24 18:41:56 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2006-09-24 18:41:56 +0000
commit3b21e03e043236a0569383ff5d677c336e3d8b3a (patch)
treea7912035f32e2e8c5a13d8743a4a0880bcc2fc15 /cpu-exec.c
parentba86345802fcede0b0f50393c97c128aa7a3f40c (diff)
downloadqemu-3b21e03e043236a0569383ff5d677c336e3d8b3a.tar.gz
qemu-3b21e03e043236a0569383ff5d677c336e3d8b3a.tar.bz2
qemu-3b21e03e043236a0569383ff5d677c336e3d8b3a.zip
added SMM support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2169 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'cpu-exec.c')
-rw-r--r--cpu-exec.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/cpu-exec.c b/cpu-exec.c
index 6385639f46..0b5f7f3d86 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -458,8 +458,16 @@ int cpu_exec(CPUState *env1)
interrupt_request = env->interrupt_request;
if (__builtin_expect(interrupt_request, 0)) {
#if defined(TARGET_I386)
- /* if hardware interrupt pending, we execute it */
- if ((interrupt_request & CPU_INTERRUPT_HARD) &&
+ if ((interrupt_request & CPU_INTERRUPT_SMI) &&
+ !(env->hflags & HF_SMM_MASK)) {
+ env->interrupt_request &= ~CPU_INTERRUPT_SMI;
+ do_smm_enter();
+#if defined(__sparc__) && !defined(HOST_SOLARIS)
+ tmp_T0 = 0;
+#else
+ T0 = 0;
+#endif
+ } else if ((interrupt_request & CPU_INTERRUPT_HARD) &&
(env->eflags & IF_MASK) &&
!(env->hflags & HF_INHIBIT_IRQ_MASK)) {
int intno;