kernel/process_capability: Handle interrupt capability flags
Similar to the service capability flags, however, we currently don't emulate the GIC, so this currently handles all interrupts as being valid for the time being.pull/15/head
parent
3dc59b74ec
commit
0f216d20e3
|
|
@ -278,7 +278,27 @@ ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, VMManager& vm_manage
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
|
ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
|
||||||
// TODO: Implement
|
constexpr u32 interrupt_ignore_value = 0x3FF;
|
||||||
|
const u32 interrupt0 = (flags >> 12) & 0x3FF;
|
||||||
|
const u32 interrupt1 = (flags >> 22) & 0x3FF;
|
||||||
|
|
||||||
|
for (u32 interrupt : {interrupt0, interrupt1}) {
|
||||||
|
if (interrupt == interrupt_ignore_value) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE:
|
||||||
|
// This should be checking a generic interrupt controller value
|
||||||
|
// as part of the calculation, however, given we don't currently
|
||||||
|
// emulate that, it's sufficient to mark every interrupt as defined.
|
||||||
|
|
||||||
|
if (interrupt >= interrupt_capabilities.size()) {
|
||||||
|
return ERR_OUT_OF_RANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
interrupt_capabilities[interrupt] = true;
|
||||||
|
}
|
||||||
|
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue