Merge zizzer:/m5/Bitkeeper/m5
[gem5.git] / cpu / intr_control.cc
index 7ad32a2b9f37dc0a31893ffb56f3a01b7968b3ad..c71a36b6f6c87d0f2e8c664449ea9ffa8c4a2d1a 100644 (file)
 #include <string>
 #include <vector>
 
-#include "base_cpu.hh"
-#include "intr_control.hh"
-#include "sim_object.hh"
+#include "cpu/base_cpu.hh"
+#include "cpu/intr_control.hh"
+#include "sim/builder.hh"
+#include "sim/sim_object.hh"
 
 using namespace std;
 
@@ -39,6 +40,42 @@ IntrControl::IntrControl(const string &name, BaseCPU *c)
     : SimObject(name), cpu(c)
 {}
 
+/* @todo
+ *Fix the cpu sim object parameter to be a system pointer
+ *instead, to avoid some extra dereferencing
+ */
+void
+IntrControl::post(int int_num, int index)
+{
+    std::vector<ExecContext *> &xcvec = cpu->system->execContexts;
+    BaseCPU *temp = xcvec[0]->cpu;
+    temp->post_interrupt(int_num, index);
+}
+
+void
+IntrControl::post(int cpu_id, int int_num, int index)
+{
+    std::vector<ExecContext *> &xcvec = cpu->system->execContexts;
+    BaseCPU *temp = xcvec[cpu_id]->cpu;
+    temp->post_interrupt(int_num, index);
+}
+
+void
+IntrControl::clear(int int_num, int index)
+{
+    std::vector<ExecContext *> &xcvec = cpu->system->execContexts;
+    BaseCPU *temp = xcvec[0]->cpu;
+    temp->clear_interrupt(int_num, index);
+}
+
+void
+IntrControl::clear(int cpu_id, int int_num, int index)
+{
+    std::vector<ExecContext *> &xcvec = cpu->system->execContexts;
+    BaseCPU *temp = xcvec[cpu_id]->cpu;
+    temp->clear_interrupt(int_num, index);
+}
+
 BEGIN_DECLARE_SIM_OBJECT_PARAMS(IntrControl)
 
     SimObjectParam<BaseCPU *> cpu;
@@ -47,7 +84,7 @@ END_DECLARE_SIM_OBJECT_PARAMS(IntrControl)
 
 BEGIN_INIT_SIM_OBJECT_PARAMS(IntrControl)
 
-    INIT_PARAM(cpu, "the processor")
+    INIT_PARAM(cpu, "the cpu")
 
 END_INIT_SIM_OBJECT_PARAMS(IntrControl)