34a35
> #include "cpu/thread_context.hh"
35a37
>
41,42d42
< Fault interrupts[NumInterruptLevels];
< bool requested[NumInterruptLevels];
43a44
>
47,51c48
< for(int x = 0; x < NumInterruptLevels; x++)
< {
< interrupts[x] = new InterruptLevelN(x);
< requested[x] = false;
< }
---
>
55,56d51
< if(int_num < 0 || int_num >= NumInterruptLevels)
< panic("int_num out of bounds\n");
58d52
< requested[int_num] = true;
63c57
< requested[int_num] = false;
---
>
68,69c62
< for(int x = 0; x < NumInterruptLevels; x++)
< requested[x] = false;
---
>
74c67,72
< return true;
---
> // so far only handle softint interrupts
> int int_level = InterruptLevel(tc->readMiscReg(MISCREG_SOFTINT));
> if (int_level)
> return true;
> else
> return false;
79c77,90
< return NoFault;
---
> // conditioning the softint interrups
> if (tc->readMiscReg(MISCREG_HPSTATE) & hpriv) {
> // if running in privileged mode, then pend the interrupt
> return NoFault;
> } else {
> int int_level = InterruptLevel(tc->readMiscReg(MISCREG_SOFTINT));
> if ((int_level <= tc->readMiscReg(MISCREG_PIL)) ||
> !(tc->readMiscReg(MISCREG_PSTATE) & ie)) {
> // if PIL or no interrupt enabled, then pend the interrupt
> return NoFault;
> } else {
> return new InterruptLevelN(int_level);
> }
> }