summaryrefslogtreecommitdiff
path: root/src/core/hle
AgeCommit message (Collapse)Author
2025-02-17network: Improve network interface handling and address resolutionZephyron
- Return loopback address (127.0.0.1) when no network interface is selected - Improve IPv4 address string conversion and handling - Add explicit handling for "None" network interface selection - Change IsAnyInternetRequestAccepted logging from ERROR to DEBUG - Simplify internet request acceptance check to assume availability This change makes the network interface handling more robust by providing fallback behaviors and improving address resolution. It also reduces unnecessary error logging for expected scenarios.
2025-02-17feat: Add Home Menu launch support and system improvementsZephyron
This commit adds support for launching the system Home Menu and implements several system-level improvements: - Add Home Menu launch functionality through new UI action - Implement shutdown/reboot sequence handlers in GlobalStateController - Add support for reserved region extra size in page tables - Enhance audio controller with output management - Expand parental control service capabilities - Add profile service improvements for user management Technical changes: - Add OnHomeMenu() handler to launch QLaunch system applet - Implement m_alias_region_extra_size tracking in page tables - Add new CreateProcessFlag for reserved region extra size - Expand audio controller interface with output management - Add self-controller methods to various services - Implement play timer and profile service improvements The changes primarily focus on system menu integration and core service improvements to better support system functionality.
2025-02-16build: upgrade fmt and SDL2Zephyron
Update fmt library to version 11.0.2 and make necessary adjustments: - Replace fmt/format.h includes with fmt/ranges.h - Add const qualifiers to formatter::format functions - Update CMake to require fmt version 11 Additional dependency updates: - Update SDL2 bundled version from 2.28.2 to 2.32.0 - Update catch2 to version 3.8.0 - Update vcpkg baseline to c82f74667287d3dc386bce81e44964370c91a289
2025-02-16service/am: Implement SetRequestExitToLibraryAppletAtExecuteNextProgramEnabledZephyron
- Removes STUBBED designation as implementation is now complete - Changes log level from WARNING to DEBUG - Properly sets the exit request flag under lock protection
2025-02-16service/am: Implement CreateManagedDisplaySeparableLayerZephyron
- Removes STUBBED designation as implementation is now complete - Changes log level from WARNING to DEBUG - Adds proper locking when accessing the display layer manager - Fixes parameter alignment in function declaration
2025-02-16service/nvnflinger: Unstub GetNativeHandleZephyron
Removes the STUBBED designation from GetNativeHandle in IHOSBinderDriver as the implementation is now complete. Changes the log level from WARNING to DEBUG to reflect this status. The function properly handles binder ID validation and returns the appropriate handle as documented in switchbrew.
2025-02-16service/vi: Improve OpenDisplay validationZephyron
Updates the OpenDisplay function in IApplicationDisplayService to properly validate display names. Instead of only accepting "Default", now validates against all known valid display names: "Default", "External", "Edid", "Internal", and "Null". - Changes log level from WARNING to DEBUG since this is no longer stubbed - Adds proper validation for all valid display names - Returns ResultOperationFailed for invalid display names - Improves logging by including the requested display name
2025-02-16service/aoc: Implement CheckAddOnContentMountStatusZephyron
Implements the CheckAddOnContentMountStatus command for the aoc:u service. This function checks whether add-on content (DLC) is currently mounted. Currently returns false as we don't yet track mounted content state. Changed log level from WARNING to DEBUG since this is no longer stubbed.
2025-02-09Revert "Replace yuzu identifiers with citron"Zephyron
This reverts commit d4ad55ed21047747698618e97dfa727d454c3c96.
2025-02-09Replace yuzu identifiers with citronZephyron
Update magic numbers and default identifiers across codebase: - UUID default value - Thread magic number - Amiibo name - Vulkan cache magic number - Shader cache magic number
2025-02-09service/nvdrv: Implement NVGPU_GPU_IOCTL_NUM_VSMSZephyron
- Add IoctlNumVsms struct definition - Implement ioctl 0x13 to return number of SM units (2 for Tegra X1)
2025-02-09service/friend: Clean up friend service implementationZephyron
- Remove unused function stubs - Improve GetCompletionEvent implementation - Clean up response builder naming
2025-02-09service/audio: Clean up audio controller implementationZephyron
- Remove Unknown5000 function and related debug commands - Fix incorrect service name in log message
2025-02-09service/acc: Clean up account service implementationZephyron
- Remove unused function stubs - Add version information comments - Add clang-format markers - Remove duplicate TrySelectUserWithoutInteraction function - Fix formatting and code style
2025-02-08service/friend: implement additional friend service functionsZephyron
- Add implementations for previously stubbed functions: * Cancel - Handle operation cancellation * RequestSyncFriendList - Friend list synchronization * GetUserPresenceView - User presence information * LoadUserSetting - User settings loading - Improve GetCompletionEvent implementation: * Add proper event signaling * Use clearer variable names * Improve debug logging - Enhance logging messages: * Add more descriptive debug messages * Include user ID in presence view logging * Use consistent naming in response builders - Fix response builder formatting for consistency These changes improve the friend service implementation by adding support for more friend-related functionality while enhancing the debugging experience through better logging and code organization.
2025-02-08service/audio: implement Unknown5000 and add debug commandsZephyron
- Add Unknown5000 implementation to create duplicate controller interface - Add new debug-related command handlers: * OverrideDefaultTargetForDebug (50001) * SetForceOverrideExternalDeviceNameForDebug (50003) * ClearForceOverrideExternalDeviceNameForDebug (50004) - Add proper debug logging for interface creation - Update header with new function declaration - Fix missing commas in function registration array These changes improve the audio controller implementation by adding support for interface duplication and debug override functionality. The implementation maintains proper interface lifetime management using SharedFrom.
2025-02-08service/nim: implement CreateServerInterface2 and improve loggingZephyron
- Add CreateServerInterface2 implementation for NIM_ECA service - Change log level from WARNING to DEBUG for CreateServerInterface - Add descriptive log message for server interface creation - Maintain consistent interface creation pattern between both versions - Fix missing comma in function registration array These changes improve the NIM service implementation by adding support for the newer server interface creation method while making logging more appropriate for stubbed functions.
2025-02-08service/mm: add missing vector include and update copyrightZephyron
- Add missing <vector> include for std::vector usage - Add Citron copyright notice - Maintain existing include ordering This is a minor cleanup change to ensure proper header inclusion and copyright attribution.
2025-02-08service/acc: implement Nintendo Account integration and cleanupZephyron
- Add Nintendo Account related implementations: * GetNintendoAccountId * GetNintendoAccountUserResourceCache * IsLinkedWithNintendoAccount * StoreSaveDataThumbnailApplication - Improve version handling: * Add proper firmware version comments * Implement deprecated and new TrySelectUserWithoutInteraction * Update service interface versioning - Clean up code organization: * Remove redundant clang-format markers * Fix constructor formatting * Improve error handling in InitializeApplicationInfoBase * Add proper debug logging * Update copyright headers - Add proper documentation for buffer types and sizes These changes improve Nintendo Account integration support while cleaning up the codebase and improving version compatibility handling. The implementation provides stubs for network-related functionality to allow applications to proceed while proper integration is developed.
2025-02-08service/nifm: implement additional network interface functionsZephyron
- Add implementations for previously stubbed functions: * EnumerateNetworkInterfaces * EnumerateNetworkProfiles * ConfirmSystemAvailability * SetBackgroundRequestEnabled - Add proper debug logging for new implementations - Update header with new function declarations - Add Citron copyright notice - Improve response builder naming for clarity These implementations return success status with empty results to allow applications to proceed while proper network interface management is developed. Debug logging has been added to track usage of these functions.
2025-02-08service/sm: improve service manager implementationZephyron
- Reorder error codes to match numerical order - Rename RegisterClient to Initialize in service registration to match actual function name - Update function declaration order in header to match implementation - Improve QueryPointerBufferSize implementation: * Add proper documentation comment * Use constexpr for maximum transfer memory size * Use std::numeric_limits where appropriate * Improve debug logging message * Use meaningful constant name These changes improve code organization and clarity while making the service manager interface more consistent with Nintendo's official naming conventions.
2025-02-08service/set: improve settings handling and update serial numberZephyron
- Update default console serial number prefix from "YUZ" to "CIT" - Improve GetSettingsItemValueImpl template implementation: * Add proper buffer management using std::vector * Fix potential buffer overflow issues * Use clearer variable naming * Add proper size handling with actual_size * Use memcpy for safer data copying These changes improve the safety of settings handling while updating the emulator's identity to use the Citron prefix instead of yuzu's.
2025-02-08service/hid: reorganize gesture-related functionsZephyron
- Move SetGestureOutputRanges function registration to be with other gesture-related functions (next to ActivateGesture) - Move SetGestureOutputRanges implementation to be with other gesture-related implementations - Change log level from WARNING to DEBUG for SetGestureOutputRanges - Move function declaration to private section with other IPC handlers - Update function ordering to match service registration order These changes improve code organization by grouping related functionality together and maintain consistency between the interface registration and implementation ordering.
2025-02-08service: fix typo in NPNS GetStateChangeEvent function nameZephyron
Fix spelling of "GetStateChangeEvent" function name in both INpnsSystem and INpnsUser interfaces. The function was incorrectly spelled as "GetStateChangeEVent" with a capital 'V'.
2025-02-08core: improve nvdrv and buffer queue implementationsZephyron
Buffer Queue Changes: - Add assertion for buffer state in free slots - Improve error handling for buffer dequeuing - Add buffer count validation checks - Update log levels for better diagnostics NVDRV Changes: - Add host1x reference to nvhost_nvdec_common - Improve ioctl error reporting with more detailed messages - Reorder function declarations in nvhost_ctrl_gpu - Add stub for unimplemented ioctl command 0x13 - Clean up initialization of boolean flags These changes improve error handling and debugging capabilities while adding additional safety checks for buffer management. The nvdrv interface is also made more robust with better error reporting and proper hardware access patterns.
2025-02-08sockets: reorder errno values numericallyZephyron
Reorder the Errno enum values to be in ascending numerical order, moving NOMEM (12) to be between AGAIN (11) and INVAL (22). This improves readability and makes it easier to verify completeness of the error code list.
2025-02-04api_version: Update Atmosphere version and add citron copyrightZephyron
Update the Atmosphere release version minor number from 0 to 8 to match newer firmware versions. Also add copyright notice for citron Emulator Project. This change maintains compatibility with newer system versions while preserving the existing version number format.
2025-02-03kernel/svc: Refactor UnmapProcessCodeMemory validationZephyron
Improve the validation logic in UnmapProcessCodeMemory by: - Add missing size validation check at the start - Reorganize validation checks into logical groups - Simplify error handling using R_UNLESS macros - Remove redundant page table range check - Add copyright notice for Citron Emulator Project - Add ResultInvalidSize constant definition The changes make the validation code more concise and easier to follow while maintaining the same validation requirements. Error handling is now more consistent with other SVC implementations.
2025-02-01common/nvdrv: improve memory validation and error handlingZephyron
Implements several improvements to memory handling and validation: - host_memory: Add IsValidMapping() and IsDirectMappingEnabled() methods to validate memory access - host_memory: Fix virtual base offset calculation to use proper pointer arithmetic - host_memory: Add size field to track allocation size - nvhost_ctrl_gpu: Return InvalidState instead of InvalidValue for TPC mask buffer size validation - Update copyright year for citron The changes improve memory safety by adding explicit validation checks and fixing pointer arithmetic in the virtual memory implementation.
2025-02-01nvdrv: Add GetTpcMasks2 support and improve memory mapping validationZephyron
This commit makes two main changes: 1. Adds support for GetTpcMasks2 (ioctl 0x13) in nvhost_ctrl_gpu: - Implements new GetTpcMasks2 method to handle TPC mask queries - Adds IoctlGetTpcMasks structure to store mask parameters - Returns conservative single TPC configuration for compatibility 2. Enhances memory mapping validation in HostMemory: - Adds verification check after memory mapping operations - Improves error handling for direct mapped address enabling - Adds logging for mapping and direct address failures Additional changes: - Updates copyright headers to include citron Emulator Project - Improves error handling and validation in several paths - Adds debug logging for TPC mask operations This improves GPU virtualization support and memory mapping reliability.
2025-01-30service: Implement rebootless system update stubs and typesZephyron
Adds initial support for rebootless system update related functionality: - Add system archive title IDs for ApplicationBlackList, RebootlessSystemUpdateVersion, and ContentActionTable - Add NS service result codes for system update operations - Implement stubs for ISystemUpdateControl::SetupToReceiveSystemUpdate and RequestCheckLatestUpdateIncludesRebootlessUpdate - Add RebootlessSystemUpdateVersion settings type and implement GetRebootlessSystemUpdateVersion in SET service - Fix GetSettingsItemValueImpl template implementation This provides basic infrastructure for handling system updates, particularly the rebootless update feature, though actual update functionality remains stubbed.
2025-01-29kernel/svc: Implement InitialProcessIdRange and improve process exit handlingZephyron
- Replace stubbed InitialProcessIdRange implementation with proper bounds (1-0x50) - Add handle and info_sub_id validation for InitialProcessIdRange - Replace process exit ASSERT with graceful error handling and logging - Add try-catch block around system.Exit() for safer shutdown - Add atomic header inclusion for binder.h This improves system call reliability by properly implementing process ID range checks and adding safer process exit handling with proper error logging.
2025-01-28network: Add NOMEM errno handling for socket operationsZephyron
Implements support for ENOMEM (errno 12) across the network stack: - Added NOMEM to Network::Errno enum - Added NOMEM = 12 to sockets Errno enum - Added translation case in sockets_translate.cpp This is the first step towards addressing the 0.0 FPS bug that occurs when the system runs out of memory during socket operations. Previously, these operations would trigger an unimplemented assertion, causing the emulator to halt. Now the error will be properly propagated to the guest application.
2025-01-27service: Implement GPU error handling IPC commands for AMZephyron
Implements several IPC commands in IApplicationFunctions related to GPU error handling and system events: - EnableApplicationAllThreadDumpOnCrash (cmd 124) - SetDelayTimeToAbortOnGpuError (cmd 131) - TryPopFromNotificationStorageChannel (cmd 151) - SetHdcpAuthenticationActivated (cmd 170) - GetLaunchRequiredVersion (cmd 180) - UpgradeLaunchRequiredVersion (cmd 181) Also adds the LaunchRequiredVersion struct definition to the header file. These are currently stubbed implementations that log warnings when called. REFS: switchbrew.org/wiki/Applet_Manager_services#GetGpuErrorDetectedSystemEvent
2025-01-26nvnflinger: Implement reference counting for binder objectsZephyron
Implements proper reference counting for binder objects based on the official documentation. This adds both weak and strong reference counting support to the IBinder interface and its implementations (BufferQueueProducer and BufferQueueConsumer). The implementation follows the documented behavior where: - type 0 affects weak references - type 1 affects strong references - During initialization: {addval=1, type=0} followed by {addval=1, type=1} - For onFirstRef: {addval=1, type=1} - For onLastStrongRef: {addval=-1, type=1} Reference counters are implemented using std::atomic to ensure thread safety. REFS: switchbrew.org/wiki/Nvnflinger_services#AdjustRefcount
2025-01-26service: vi: Implement missing IApplicationDisplayService functionsZephyron
Implements missing functions and improves permission handling in the VI (Visual Interface) IApplicationDisplayService based on official documentation. Key changes: - Add session type enum to properly handle vi:u/vi:s/vi:m permissions - Implement GetIndirectLayerImageCropMap for handling cropped layer images - Implement GetDisplayVsyncEventForDebug for debug vsync event handling - Add proper permission checks for GetSystemDisplayService and GetManagerDisplayService - Improve AppletResourceUserId validation in OpenLayer - Clean up logging and error handling The changes follow the official documentation for permission handling: - vi:u sessions can only use GetRelayService - vi:s sessions can use everything except GetManagerDisplayService - vi:m sessions can use all commands REFS: switchbrew.org/wiki/Display_services#IApplicationDisplayService
2025-01-25Revert "core/hle: Reorganize ErrorModule enum numerically"Zephyron
This reverts commit b55be320b75d01bdc1320bc78179542b2ce10fb2.
2025-01-25core/hle: Reorganize ErrorModule enum numericallyZephyron
Reorganizes the ErrorModule enum in result.h by grouping error codes into numerical ranges with descriptive comments. This improves readability and makes it easier to: - Find specific modules by their number - See which numbers are used/unused in each range - Understand the overall distribution of module numbers Also standardizes naming conventions across modules and fixes some inconsistent casing (e.g. FS -> Fs, HDCP -> Hdcp). REFS: switchbrew.org/w/index.php?title=Error_codes
2025-01-25service: sm: Update to match official IPC interfaceZephyron
Updates the SM service implementation to better match the official "nn::sm::detail::IUserInterface" interface. Key changes include: - Replace Initialize with RegisterClient command (cmd 0) - Add DetachClient command implementation (cmd 4) - Update service name handling to use u64-encoded names - Add proper PID descriptor handling for RegisterClient/DetachClient - Add ResultNotAllowed error code - Update handler registration for both CMIF and TIPC This brings the implementation closer to the official documentation while maintaining compatibility with existing code. Refs: switchbrew.org/wiki/Services_API#sm:
2025-01-25service: mm: Refactor Memory Management service implementationZephyron
Refactors the MM (Memory Management) service implementation with improved: - Session management using a vector of Session objects instead of global vars - Type safety with proper enums and member encapsulation - Error handling with consistent patterns - Modern C++ features (std::erase_if, std::find_if, emplace_back) - Logging with detailed debug messages - Code organization and const correctness Key changes: - Add Session class with proper encapsulation - Add EventClearMode enum (Manual = 0, Auto = 1) - Update Module enum naming for consistency - Implement proper session tracking and lookup - Add detailed parameter logging - Use modern C++ algorithms for session management The implementation now properly handles multiple sessions and matches the documented nn::mmnv::IRequest interface more closely. Refs: switchbrew.org/wiki/Display_services#mm:u
2025-01-25service: mm: Implement proper parameter handling for MM serviceZephyron
Add proper type definitions and parameter handling for the Memory Management (mm:u) service based on the Switch documentation: - Add Module enum for hardware components (CPU, GPU, EMC, etc) - Add Priority and Setting type definitions as u32 - Add EventClearMode enum for initialization - Implement proper parameter handling for all IPC calls - Add detailed logging with parameter values The Module enum now properly reflects the documented hardware components: CPU, GPU, EMC, System Bus, Memory Select, and NVIDIA modules (NVDEC, NVENC, NVJPG). This makes the implementation match the documented nn::mmnv::IRequest interface. Refs: switchbrew.org/wiki/Display_services#mm:u
2025-01-21service/nvdrv: Relax GPU validation and improve error handlingZephyron
Relaxes validation checks in the NVDRV GPU service and improves error notifier handling to prevent potential hangs. Key changes: - Remove strict size validation in SetErrorNotifier - Relax GPFIFO entry count validation to only check for non-zero values - Add proper error notifier state tracking in GPU class - Improve debug logging messages The previous strict validation was causing issues with some games like ACNH. These changes maintain necessary checks while being more permissive with edge cases that don't impact functionality. Technical changes: - Store error notifier state in GPU class for future implementation - Remove upper bound check on GPFIFO entries - Simplify error notifier setup flow This should resolve hanging issues while maintaining core functionality.
2025-01-20service/nvdrv: Implement stubbed GPU functionsZephyron
Implements several previously stubbed functions in the NVDRV service: - Initialize proper transfer memory handling - Add error notifier configuration - Implement channel timeout and timeslice management - Add object context allocation and tracking - Add GPU interface stubs for new functionality The changes improve the accuracy of GPU-related operations while maintaining compatibility with the existing codebase. All functions now properly validate parameters and handle endianness correctly using _le types.
2025-01-20service-am: Handle panic conditions in SetTerminateResultZephyron
- Prevents propagation of panic conditions when setting termination results - Previously, panic error codes could trigger cascading crashes - Only stores non-error termination results while allowing successful completion - Fixes crash when applications set panic-related termination codes (0x1A80A)
2025-01-20service: vi: Remove stubbed warning from GetManagerDisplayServiceZephyron
- The GetManagerDisplayService function in IApplicationDisplayService is fully implemented, so remove the stubbed warning and change the log level to DEBUG to match its implementation status.
2025-01-15fix(sm_controller): Correct QueryPointerBufferSize implementationZephyron
- Updated the QueryPointerBufferSize function to return the correct u16 pointer buffer size. - Ensured the function logs its call at the debug level. - Used IPC::ResponseBuilder to construct the response with the correct buffer size. This change addresses the stubbed implementation and ensures compliance with the HIPC protocol.
2025-01-15fix: Implement SetGestureOutputRanges to handle unimplemented function errorZephyron
- Added the SetGestureOutputRanges function to the IHidServer class to address the unimplemented function '92' error. - This fix was discovered through log analysis, which showed a critical assertion failure in the HID service for an unknown function '92'. - The log indicated a userspace panic and backtrace, pointing to the need for implementing this function to prevent execution breaks. - Updated CMakeLists.txt to remove specific version requirements for several packages, enhancing flexibility. - Updated subproject commit references for VulkanMemoryAllocator and vcpkg. - REF: https://switchbrew.org/wiki/HID_services#ActivateGesture
2025-01-14Revert incorrect copyright attribution for non-contributed filesZephyron
- In commit b3facaa6bb30cdc39f2b7d632fef1e3bfeee7785, the copyright header was updated to include "Citron Homebrew Project" across multiple files, regardless of whether any contributions were made. - This commit removes the incorrect attribution and reverts the copyright header to its previous state. - Copyright attribution should only be added when meaningful contributions have been made to the file. - This commit ensures proper compliance with copyright standards and maintains correct attribution to the respective contributors. - Special thanks to Tachi for pointing out the need for these corrections and ensuring that proper attribution practices are followed.
2025-01-08nvdrv: Add MSVC compatibility for packed structsZephyron
Add conditional compilation directives to handle packed struct definitions differently between MSVC and other compilers. MSVC uses #pragma pack while GCC/Clang use __attribute__((packed)). This change affects: - ZBCColorEntry - ZBCDepthEntry - IoctlZbcSetTable The functionality remains the same, but ensures proper struct packing across different compiler environments.
2025-01-07kernel: Implement SystemResourceSize info type for VAMM initializationZephyron
Adds support for InfoType::SystemResourceSize (0x1C) which is required for proper initialization of the Virtual Address Memory Manager (VAMM). This implementation: 1. Adds SystemResourceSize to the InfoType enum in svc_types.h 2. Implements the GetInfo handler for SystemResourceSize in svc_info.cpp 3. Returns 512MB (0x20000000 bytes) as the system resource size 4. Adds debug logging for the SVC call The 512MB value is chosen based on typical system resource allocations needed for VAMM initialization on the Nintendo Switch. This fixes crashes in games that rely on VAMM functionality, particularly during nn::os::detail::VammManager::InitializeIfEnabled().