Merge pull request #8599 from Pokechu22/di-interrupt-mask-ioctls
Fix DI interrupt mask ioctl names
This commit is contained in:
commit
4c9b1f3e0b
|
@ -132,7 +132,7 @@ void DolphinAnalytics::ReportGameStart()
|
|||
}
|
||||
|
||||
// Keep in sync with enum class GameQuirk definition.
|
||||
constexpr std::array<const char*, 9> GAME_QUIRKS_NAMES{
|
||||
constexpr std::array<const char*, 10> GAME_QUIRKS_NAMES{
|
||||
"icache-matters",
|
||||
"directly-reads-wiimote-input",
|
||||
"uses-DVDLowStopLaser",
|
||||
|
@ -142,6 +142,7 @@ constexpr std::array<const char*, 9> GAME_QUIRKS_NAMES{
|
|||
"uses-DVDLowRequestRetryNumber",
|
||||
"uses-DVDLowSerMeasControl",
|
||||
"uses-different-partition-command",
|
||||
"uses-di-interrupt-command",
|
||||
};
|
||||
static_assert(GAME_QUIRKS_NAMES.size() == static_cast<u32>(GameQuirk::COUNT),
|
||||
"Game quirks names and enum definition are out of sync.");
|
||||
|
|
|
@ -41,6 +41,12 @@ enum class GameQuirk
|
|||
// already-read data is provided
|
||||
USES_DIFFERENT_PARTITION_COMMAND,
|
||||
|
||||
// IOS has implementations for ioctls 0x85 and 0x89 and a stub for 0x87, but
|
||||
// DVDLowMaskCoverInterrupt/DVDLowUnmaskCoverInterrupt/DVDLowUnmaskStatusInterrupts
|
||||
// are all stubbed on the PPC side so they presumably will never be used.
|
||||
// (DVDLowClearCoverInterrupt is used, though)
|
||||
USES_DI_INTERRUPT_MASK_COMMAND,
|
||||
|
||||
COUNT,
|
||||
};
|
||||
|
||||
|
|
|
@ -240,22 +240,29 @@ std::optional<DI::DIResult> DI::StartIOCtl(const IOCtlRequest& request)
|
|||
INFO_LOG(IOS_DI, "DVDLowGetImmBuf 0x%08x", diimmbuf);
|
||||
return WriteIfFits(request, diimmbuf);
|
||||
}
|
||||
case DIIoctl::DVDLowUnmaskCoverInterrupt:
|
||||
INFO_LOG(IOS_DI, "DVDLowUnmaskCoverInterrupt");
|
||||
case DIIoctl::DVDLowMaskCoverInterrupt:
|
||||
INFO_LOG(IOS_DI, "DVDLowMaskCoverInterrupt");
|
||||
DVDInterface::SetInterruptEnabled(DVDInterface::DIInterruptType::CVRINT, false);
|
||||
DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::USES_DI_INTERRUPT_MASK_COMMAND);
|
||||
return DIResult::Success;
|
||||
case DIIoctl::DVDLowClearCoverInterrupt:
|
||||
DEBUG_LOG(IOS_DI, "DVDLowClearCoverInterrupt");
|
||||
DVDInterface::ClearInterrupt(DVDInterface::DIInterruptType::CVRINT);
|
||||
return DIResult::Success;
|
||||
case DIIoctl::DVDLowUnmaskStatusInterrupts:
|
||||
INFO_LOG(IOS_DI, "DVDLowUnmaskStatusInterrupts");
|
||||
DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::USES_DI_INTERRUPT_MASK_COMMAND);
|
||||
// Dummied out
|
||||
return DIResult::Success;
|
||||
case DIIoctl::DVDLowGetCoverStatus:
|
||||
// TODO: handle resetting case
|
||||
INFO_LOG(IOS_DI, "DVDLowGetCoverStatus: Disc %sInserted",
|
||||
DVDInterface::IsDiscInside() ? "" : "Not ");
|
||||
return WriteIfFits(request, DVDInterface::IsDiscInside() ? 2 : 1);
|
||||
case DIIoctl::DVDLowEnableCoverInterrupt:
|
||||
INFO_LOG(IOS_DI, "DVDLowEnableCoverInterrupt");
|
||||
case DIIoctl::DVDLowUnmaskCoverInterrupt:
|
||||
INFO_LOG(IOS_DI, "DVDLowUnmaskCoverInterrupt");
|
||||
DVDInterface::SetInterruptEnabled(DVDInterface::DIInterruptType::CVRINT, true);
|
||||
DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::USES_DI_INTERRUPT_MASK_COMMAND);
|
||||
return DIResult::Success;
|
||||
case DIIoctl::DVDLowReset:
|
||||
{
|
||||
|
|
|
@ -60,11 +60,11 @@ public:
|
|||
DVDLowReadDvdDiscKey = 0x82,
|
||||
DVDLowGetLength = 0x83,
|
||||
DVDLowGetImmBuf = 0x84, // Unconfirmed name
|
||||
DVDLowUnmaskCoverInterrupt = 0x85,
|
||||
DVDLowMaskCoverInterrupt = 0x85,
|
||||
DVDLowClearCoverInterrupt = 0x86,
|
||||
// 0x87 is a dummied out command
|
||||
DVDLowUnmaskStatusInterrupts = 0x87, // Dummied out, ID is educated guess
|
||||
DVDLowGetCoverStatus = 0x88,
|
||||
DVDLowEnableCoverInterrupt = 0x89, // Unconfirmed name
|
||||
DVDLowUnmaskCoverInterrupt = 0x89,
|
||||
DVDLowReset = 0x8a,
|
||||
DVDLowOpenPartition = 0x8b, // ioctlv only
|
||||
DVDLowClosePartition = 0x8c,
|
||||
|
|
Loading…
Reference in New Issue