diff --git a/Source/Core/Core/Analytics.cpp b/Source/Core/Core/Analytics.cpp index 3b49173ed2..6b28eeb153 100644 --- a/Source/Core/Core/Analytics.cpp +++ b/Source/Core/Core/Analytics.cpp @@ -132,7 +132,7 @@ void DolphinAnalytics::ReportGameStart() } // Keep in sync with enum class GameQuirk definition. -constexpr std::array GAME_QUIRKS_NAMES{ +constexpr std::array GAME_QUIRKS_NAMES{ "icache-matters", "directly-reads-wiimote-input", "uses-DVDLowStopLaser", @@ -142,6 +142,7 @@ constexpr std::array GAME_QUIRKS_NAMES{ "uses-DVDLowRequestRetryNumber", "uses-DVDLowSerMeasControl", "uses-different-partition-command", + "uses-di-interrupt-command", }; static_assert(GAME_QUIRKS_NAMES.size() == static_cast(GameQuirk::COUNT), "Game quirks names and enum definition are out of sync."); diff --git a/Source/Core/Core/Analytics.h b/Source/Core/Core/Analytics.h index 2d35029a46..f78cafbac6 100644 --- a/Source/Core/Core/Analytics.h +++ b/Source/Core/Core/Analytics.h @@ -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, }; diff --git a/Source/Core/Core/IOS/DI/DI.cpp b/Source/Core/Core/IOS/DI/DI.cpp index 8a828ce8a0..ebc5016453 100644 --- a/Source/Core/Core/IOS/DI/DI.cpp +++ b/Source/Core/Core/IOS/DI/DI.cpp @@ -243,6 +243,7 @@ std::optional DI::StartIOCtl(const IOCtlRequest& request) 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"); @@ -250,6 +251,7 @@ std::optional DI::StartIOCtl(const IOCtlRequest& request) 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: @@ -260,6 +262,7 @@ std::optional DI::StartIOCtl(const IOCtlRequest& request) 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: {