cpu,stats: Update stats style for base.hh and base.cc
[gem5.git] / src / cpu / intr_control.cc
index 8f3808889e69979fd5caecd9f3db8cadb39853d7..b62483594d86db2945be2b12b6328957a8aa13f9 100644 (file)
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Nathan Binkert
- *          Ron Dreslinski
  */
 
+#include "cpu/intr_control.hh"
+
 #include <string>
 #include <vector>
 
 #include "base/trace.hh"
 #include "cpu/base.hh"
-#include "cpu/intr_control.hh"
 #include "cpu/thread_context.hh"
 #include "debug/IntrControl.hh"
 #include "sim/sim_object.hh"
 
 using namespace std;
 
-IntrControl::IntrControl(const Params *p)
-    : SimObject(p), sys(p->sys)
+IntrControl::IntrControl(const Params &p)
+    : SimObject(p), sys(p.sys)
 {}
 
 void
 IntrControl::post(int cpu_id, int int_num, int index)
 {
     DPRINTF(IntrControl, "post  %d:%d (cpu %d)\n", int_num, index, cpu_id);
-    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
-    BaseCPU *cpu = tcvec[cpu_id]->getCpuPtr();
-    cpu->postInterrupt(int_num, index);
+    auto *tc = sys->threads[cpu_id];
+    tc->getCpuPtr()->postInterrupt(tc->threadId(), int_num, index);
 }
 
 void
 IntrControl::clear(int cpu_id, int int_num, int index)
 {
     DPRINTF(IntrControl, "clear %d:%d (cpu %d)\n", int_num, index, cpu_id);
-    std::vector<ThreadContext *> &tcvec = sys->threadContexts;
-    BaseCPU *cpu = tcvec[cpu_id]->getCpuPtr();
-    cpu->clearInterrupt(int_num, index);
+    auto *tc = sys->threads[cpu_id];
+    tc->getCpuPtr()->clearInterrupt(tc->threadId(), int_num, index);
+}
+
+void
+IntrControl::clearAll(int cpu_id)
+{
+    DPRINTF(IntrControl, "Clear all pending interrupts for CPU %d\n", cpu_id);
+    auto *tc = sys->threads[cpu_id];
+    tc->getCpuPtr()->clearInterrupts(tc->threadId());
 }
 
-IntrControl *
-IntrControlParams::create()
+bool
+IntrControl::havePosted(int cpu_id) const
 {
-    return new IntrControl(this);
+    DPRINTF(IntrControl, "Check pending interrupts for CPU %d\n", cpu_id);
+    auto *tc = sys->threads[cpu_id];
+    return tc->getCpuPtr()->checkInterrupts(tc->threadId());
 }