cpu: IntrControl, clear all and check helpers
This patch extends the IntrControl to provided additional member functions for (1) clearing all pending interrupts in a PE and (2) checking for any pending interrupt in a PE. These are intended to be used from interrupt management related peripherals. Change-Id: I06b553872ed469e7449b872a0716865773ace154 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/26809 Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Giacomo Travaglini
parent
252560f03a
commit
700bf943f3
@@ -47,18 +47,32 @@ 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(tcvec[cpu_id]->threadId(), int_num, index);
|
||||
ThreadContext *tc = sys->getThreadContext(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(tcvec[cpu_id]->threadId(), int_num, index);
|
||||
ThreadContext *tc = sys->getThreadContext(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);
|
||||
ThreadContext *tc = sys->getThreadContext(cpu_id);
|
||||
tc->getCpuPtr()->clearInterrupts(tc->threadId());
|
||||
}
|
||||
|
||||
bool
|
||||
IntrControl::havePosted(int cpu_id) const
|
||||
{
|
||||
DPRINTF(IntrControl, "Check pending interrupts for CPU %d\n", cpu_id);
|
||||
ThreadContext *tc = sys->getThreadContext(cpu_id);
|
||||
return tc->getCpuPtr()->checkInterrupts(tc);
|
||||
}
|
||||
|
||||
IntrControl *
|
||||
|
||||
@@ -45,6 +45,8 @@ class IntrControl : public SimObject
|
||||
|
||||
void clear(int cpu_id, int int_num, int index);
|
||||
void post(int cpu_id, int int_num, int index);
|
||||
void clearAll(int cpu_id);
|
||||
bool havePosted(int cpu_id) const;
|
||||
|
||||
void
|
||||
clear(int int_num, int index = 0)
|
||||
|
||||
Reference in New Issue
Block a user