summaryrefslogtreecommitdiff
path: root/src/arch/x86/intmessage.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2008-10-12 13:44:24 -0700
committerGabe Black <gblack@eecs.umich.edu>2008-10-12 13:44:24 -0700
commit876f4845f258ed09d348135d8af8cf4a17de1b8a (patch)
tree2d109af5103908a7f1561f3610b8e55add81ec7f /src/arch/x86/intmessage.hh
parent4d5c7f70389b8911e37d391b09023dbf6a6ab0d9 (diff)
downloadgem5-876f4845f258ed09d348135d8af8cf4a17de1b8a.tar.xz
X86: Make the local APIC handle interrupt messages from the IO APIC.
Diffstat (limited to 'src/arch/x86/intmessage.hh')
-rw-r--r--src/arch/x86/intmessage.hh39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/arch/x86/intmessage.hh b/src/arch/x86/intmessage.hh
index 64e821a41..a018a997b 100644
--- a/src/arch/x86/intmessage.hh
+++ b/src/arch/x86/intmessage.hh
@@ -44,8 +44,47 @@ namespace X86ISA
Bitfield<15, 8> vector;
Bitfield<18, 16> deliveryMode;
Bitfield<19> destMode;
+ Bitfield<20> level;
+ Bitfield<21> trigger;
EndBitUnion(TriggerIntMessage)
+ namespace DeliveryMode
+ {
+ enum IntDeliveryMode {
+ Fixed = 0,
+ LowestPriority = 1,
+ SMI = 2,
+ NMI = 4,
+ INIT = 5,
+ ExtInt = 7,
+ NumModes
+ };
+
+ static const char * const names[NumModes] = {
+ "Fixed", "LowestPriority", "SMI", "Reserved",
+ "NMI", "INIT", "Reserved", "ExtInt"
+ };
+
+ static inline bool
+ isUnmaskable(int mode)
+ {
+ return (mode == SMI || mode == NMI ||
+ mode == INIT || mode == ExtInt);
+ }
+
+ static inline bool
+ isMaskable(int mode)
+ {
+ return (mode == Fixed || mode == LowestPriority);
+ }
+
+ static inline bool
+ isReserved(int mode)
+ {
+ return !(isMaskable(mode) || isUnmaskable(mode));
+ }
+ }
+
static const Addr TriggerIntOffset = 0;
static inline PacketPtr