Browse Source

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.
nce_cpp
Lioncash 7 years ago
parent
commit
1ae0cc696c
  1. 22
      src/core/hle/kernel/process_capability.cpp

22
src/core/hle/kernel/process_capability.cpp

@ -278,7 +278,27 @@ ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, VMManager& vm_manage
}
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;
}

Loading…
Cancel
Save