aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
AgeCommit message (Collapse)Author
2018-12-03Merge pull request #1803 from DarkLordZach/k-able-eventbunnei
kernel: Divide Event into ReadableEvent and WritableEvent
2018-12-01Fix debug buildLioncash
A non-existent parameter was left in some formatting calls (the logging macro for which only does anything meaningful on debug builds)
2018-11-29kernel/event: Reference ReadableEvent from WritableEventZach Hilman
2018-11-29core: Port all current usages of Event to Readable/WritableEventZach Hilman
2018-11-29Merge pull request #1801 from ogniK5377/log-before-executebunnei
Changed logging to be "Log before execution", Added more error logging, all services/svc should now log on some level
2018-11-26svc: Implement svcSetResourceLimitLimitValue()Lioncash
The opposite of the getter functions, this function sets the limit value for a particular ResourceLimit resource category, with the restriction that the new limit value must be equal to or greater than the current resource value. If this is violated, then ERR_INVALID_STATE is returned. e.g. Assume: current[Events] = 10; limit[Events] = 20; a call to this service function lowering the limit value to 10 would be fine, however, attempting to lower it to 9 in this case would cause an invalid state error.
2018-11-26svc: Implement svcGetResourceLimitCurrentValue()Lioncash
This kernel service function is essentially the exact same as svcGetResourceLimitLimitValue(), with the only difference being that it retrieves the current value for a given resource category using the provided resource limit handle, rather than retrieving the limiting value of that resource limit instance. Given these are exactly the same and only differ on returned values, we can extract the existing code for svcGetResourceLimitLimitValue() to handle both values.
2018-11-26svc: Implement svcGetResourceLimitLimitValue()Lioncash
This kernel service function retrieves the maximum allowable value for a provided resource category for a given resource limit instance. Given we already have the functionality added to the resource limit instance itself, it's sufficient to just hook it up. The error scenarios for this are: 1. If an invalid resource category type is provided, then ERR_INVALID_ENUM is returned. 2. If an invalid handle is provided, then ERR_INVALID_HANDLE is returned (bad thing goes in, bad thing goes out, as one would expect). If neither of the above error cases occur, then the out parameter is provided with the maximum limit value for the given category and success is returned.
2018-11-26svc: Implement svcCreateResourceLimit()Lioncash
This function simply creates a ResourceLimit instance and attempts to create a handle for it within the current process' handle table. If the kernal fails to either create the ResourceLimit instance or create a handle for the ResourceLimit instance, it returns a failure code (OUT_OF_RESOURCE, and HANDLE_TABLE_FULL respectively). Finally, it exits by providing the output parameter with the handle value for the ResourceLimit instance and returning that it was successful. Note: We do not return OUT_OF_RESOURCE because, if yuzu runs out of available memory, then new will currently throw. We *could* allocate the kernel instance with std::nothrow, however this would be inconsistent with how all other kernel objects are currently allocated.
2018-11-27Added comment on Main memory size for more clarityDavid Marcec
2018-11-27Made svcSetHeapSize and svcCreateSharedMemory more readableDavid Marcec
2018-11-27Reworked svcs slightly, improved error messages in AM and fsp_srvDavid Marcec
2018-11-26Improved error messages for SVCsDavid Marcec
2018-11-26Changed logging to be "Log before execution", Added more error logging, all ↵David Marcec
services should now log on some level
2018-11-25svc: Return ERR_INVALID_ENUM_VALUE from svcGetInfoLuke Street
2018-11-20Merge pull request #1734 from lioncash/sharedbunnei
kernel/shared_memory: Make data members private, plus minor interface changes
2018-11-20Merge pull request #1667 from DarkLordZach/swkbdbunnei
am: Implement HLE software keyboard applet
2018-11-19kernel/resource_limit: Clean up interfaceLioncash
Cleans out the citra/3DS-specific implementation details that don't apply to the Switch. Sets the stage for implementing ResourceLimit instances properly. While we're at it, remove the erroneous checks within CreateThread() and SetThreadPriority(). While these are indeed checked in some capacity, they are not checked via a ResourceLimit instance. In the process of moving out Citra-specifics, this also replaces the system ResourceLimit instance's values with ones from the Switch.
2018-11-19kernel/shared_memory: Make Map() and Unmap() take the target process by ↵Lioncash
reference rather than as a pointer Both member functions assume the passed in target process will not be null. Instead of making this assumption implicit, we can change the functions to be references and enforce this at the type-system level.
2018-11-18Merge pull request #1728 from FearlessTobi/reset-signalMat M
svc: ResetSignal is not stubbed
2018-11-18svc: ResetSignal is not stubbedTobias
https://user-images.githubusercontent.com/20753089/48677874-b8e01c80-eb7b-11e8-8043-b99faa29022c.PNG
2018-11-18am: Deglobalize software keyboard appletZach Hilman
2018-11-18svc: Implement svcCreateTransferMemoryZach Hilman
Seems to be used and created identically to SharedMemory, so just reuse that.
2018-11-16kernel/errors: Clean up error codesLioncash
Similar to PR 1706, which cleans up the error codes for the filesystem code, but done for the kernel error codes. This removes the ErrCodes namespace and specifies the errors directly. This also fixes up any straggling lines of code that weren't using the named error codes where applicable.
2018-11-16Merge pull request #1638 from FreddyFunk/SetMemoryPermission-StubbedMat M
Implement SetMemoryPermission
2018-11-13svc: Use proper random entropy generation algorithmZach Hilman
2018-11-12svc: Return random seed for svcGetInfo RandomEntropyZach Hilman
2018-11-07svcBreak now dumps information from the debug buffer passed (#1646)David
* svcBreak now dumps information from the debug buffer passed info1 and info2 seem to somtimes hold an address to a buffer, this is usually 4 bytes or the size of the int and contains an error code. There's other circumstances where it can be something different so we hexdump these to examine them at a later date. * Addressed comments
2018-11-06Implement SetMemoryPermissionFrederic Laing
2018-11-03Stubbed SetMemoryPermissionFrederic Laing
2018-10-28core: Make System references const where applicableLioncash
2018-10-26svc: Localize the GetInfo enum class to the function itselfLioncash
Nothing from this enum is intended to be used outside of this function.
2018-10-26svc: Implement svcGetInfo command 0xF0000002Lioncash
This retrieves: if (curr_thread == handle_thread) { result = total_thread_ticks + (hardware_tick_count - last_context_switch_ticks); } else if (curr_thread == handle_thread && sub_id == current_core_index) { result = hardware_tick_count - last_context_switch_ticks; }
2018-10-24kernel/svc: Amend returned error code for invalid priorities in CreateThreadLioncash
Like with the previous change, the kernel doesn't return NOT_AUTHORIZED here. It returns INVALID_THREAD_PRIORITY.
2018-10-24kernel/svc: Move and correct returned error code for invalid thread ↵Lioncash
priorities in SetThreadPriority() All priority checks are supposed to occur before checking the validity of the thread handle, we're also not supposed to return ERR_NOT_AUTHORIZED here.
2018-10-23Merge pull request #1551 from ogniK5377/improved-svcbreakbunnei
Added break types to svcBreak
2018-10-23Merge pull request #1540 from lioncash/handlebunnei
kernel/process: Make the handle table per-process
2018-10-23Added assertion failed, reworked logging levelsDavid Marcec
2018-10-23Added break types to svcBreakDavid Marcec
There seems to be more such as type 1, and 2. Unsure what these currently are but when a game hits them we can investigate and add the rest
2018-10-20kernel/process: Make the handle table per-processLioncash
In the kernel, there isn't a singular handle table that everything gets tossed into or used, rather, each process gets its own handle table that it uses. This currently isn't an issue for us, since we only execute one process at the moment, but we may as well get this out of the way so it's not a headache later on.
2018-10-20svc: Fix vma boundary check in svcQueryMemoryLioncash
This should be comparing against the queried process' vma_map, not the current process'. The only reason this hasn't become an issue yet is we currently only handle one process being active at any time.
2018-10-19Merge pull request #1520 from lioncash/sanbunnei
svc: Add missing sanitizing checks for MapSharedMemory/UnmapSharedMemory
2018-10-18svc: Check for word alignment of addresses within ↵Lioncash
svcArbitrateLock/svcArbitrateUnlock The kernel itself checks whether or not the provided addresses are word aligned before continuing, so we should be doing the same.
2018-10-18common: Move Is4KBAligned() to alignment.hLioncash
Aligning on 4KB pages isn't a Switch-specific thing, so this can be moved to common so it can be used with other things as well.
2018-10-18svc: Add missing sanitizing checks for MapSharedMemory/UnmapSharedMemoryLioncash
Now that the changes clarifying the address spaces has been merged, we can wrap the checks that the kernel performs when mapping shared memory (and other forms of memory) into its own helper function and then use those within MapSharedMemory and UnmapSharedMemory to complete the sanitizing checks that are supposed to be done.
2018-10-17Merge pull request #1498 from lioncash/aslrbunnei
svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in svcGetInfo()
2018-10-15core_cpu: Make Cpu scheduler instances unique_ptrs instead of shared_ptrsLioncash
2018-10-14svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in ↵Lioncash
svcGetInfo() So, one thing that's puzzled me is why the kernel seemed to *not* use the direct code address ranges in some cases for some service functions. For example, in svcMapMemory, the full address space width is compared against for validity, but for svcMapSharedMemory, it compares against 0xFFE00000, 0xFF8000000, and 0x7FF8000000 as upper bounds, and uses either 0x200000 or 0x8000000 as the lower-bounds as the beginning of the compared range. Coincidentally, these exact same values are also used in svcGetInfo, and also when initializing the user address space, so this is actually retrieving the ASLR extents, not the extents of the address space in general.
2018-10-14Merge pull request #1492 from lioncash/procbunnei
svc: Implement svcGetProcessInfo
2018-10-14Stop all threads on svcBreakDavid Marcec
This should help diagnose crashes easier and prevent many users thinking that a game is still running when in fact it's just an audio thread still running(this is typically not killed when svcBreak is hit since the game expects us to do this)