aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
AgeCommit message (Collapse)Author
2018-12-03Moved backtrace to ArmInterfaceDavid Marcec
Added to both dynarmic and unicorn
2018-12-03Print backtrace on svcBreakDavid Marcec
When we get an svcBreak we get a backtrace now
2018-12-02svc: Use the current process' handle table for retrieving the process ↵Lioncash
instance to act upon The kernel uses the handle table of the current process to retrieve the process that should be used to retrieve certain information. To someone not familiar with the kernel, this might raise the question of "Ok, sounds nice, but doesn't this make it impossible to retrieve information about the current process?". No, it doesn't, because HandleTable instances in the kernel have the notion of a "pseudo-handle", where certain values allow the kernel to lookup objects outside of a given handle table. Currently, there's only a pseudo-handle for the current process (0xFFFF8001) and a pseudo-handle for the current thread (0xFFFF8000), so to retrieve the current process, one would just pass 0xFFFF8001 into svcGetInfo. The lookup itself in the handle table would be something like: template <typename T> T* Lookup(Handle handle) { if (handle == PSEUDO_HANDLE_CURRENT_PROCESS) { return CurrentProcess(); } if (handle == PSUEDO_HANDLE_CURRENT_THREAD) { return CurrentThread(); } return static_cast<T*>(&objects[handle]); } which, as is shown, allows accessing the current process or current thread, even if those two objects aren't actually within the HandleTable instance.
2018-12-02svc: Reorganize svcGetInfo, handle more error cases for existing implemented ↵Lioncash
info categories Our implementation of svcGetInfo was slightly incorrect in that we weren't doing proper error checking everywhere. Instead, reorganize it to be similar to how the kernel seems to do it.
2018-12-02svc: Avoid performance-degrading unnecessary rescheduleZach Hilman
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-29hle_ipc: Refactor SleepClientThread to avoid ReadableEventZach Hilman
2018-11-29kernel/event: Reference ReadableEvent from WritableEventZach Hilman
2018-11-29core: Port all current usages of Event to Readable/WritableEventZach Hilman
2018-11-29hle_ipc: Use event pair for SleepClientThreadZach Hilman
2018-11-29kernel: Add named event tableZach Hilman
Used to store ReadableEvents of all events on the system.
2018-11-29kernel: Divide Event into ReadableEvent and WritableEventZach Hilman
More hardware accurate. On the actual system, there is a differentiation between the signaler and signalee, they form a client/server relationship much like ServerPort and ClientPort.
2018-11-29kernel/object: Add descriptions to ResetTypesZach 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-22scheduler: Add explanations for YieldWith and WithoutLoadBalancingZach Hilman
2018-11-21kernel/handle_table: Move private static functions into the cpp fileLioncash
These don't depend on class state, and are effectively implementation details, so they can go into the cpp file .
2018-11-21kernel/handle_table: Restrict handle table size to 1024 entriesLioncash
The previous handle table size is a holdover from Citra. The actual handle table construct on Horizon only allows for a maximum of 1024 entries.
2018-11-21kernel/handle_table: Default destructor in the cpp fileLioncash
We don't need to potentially inline the teardown logic of all of the handle instances.
2018-11-20Merge pull request #1734 from lioncash/sharedbunnei
kernel/shared_memory: Make data members private, plus minor interface changes
2018-11-20kernel/process: Move <random> include to the cpp fileLioncash
<random> isn't necesary directly within the header and can be placed in the cpp file where its needed. Avoids propagating random generation utilities via a header file.
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-19kernel/shared_memory: Add a const qualified member function overload for ↵Lioncash
GetPointer() Given this doesn't mutate instance state, we can provide a const-qualified variant as well.
2018-11-19kernel/shared_memory: Use 64-bit types for offset and size in CreateForAppletLioncash
Keeps the interface consistent with the regular Create() function.
2018-11-19kernel/shared_memory: Make GetPointer() take a std::size_t instead of a u32Lioncash
Makes the interface nicer to use in terms of 64-bit code, as it makes it less likely for one to get truncation warnings (and also makes sense in the context of the rest of the interface where 64-bit types are used for sizes and offsets
2018-11-19kernel/shared_memory: Make data members privateLioncash
Rather than allow unfettered access to the class internals, we hide all members by default and create and API that other code can operate against.
2018-11-18svc: Implement yield types 0 and -1Zach Hilman
2018-11-18Merge pull request #1620 from DarkLordZach/ldr-robunnei
ldr_ro: Complete LDR:RO implementation
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-17ldr_ro: Add error check for memory allocation failureZach Hilman
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-15Merge pull request #1687 from lioncash/deduplicationbunnei
kernel/thread: Deduplicate scheduler switching code
2018-11-15process: Make MirrorMemory take state to map new memory asZach Hilman
Credits to Subv
2018-11-14Merge pull request #1679 from DarkLordZach/deterministic-rng-2bunnei
svc: Use proper random entropy generation algorithm
2018-11-14kernel/thread: Deduplicate scheduler switching codeLioncash
The code in both places was the same verbatim, so we can extract it to a function to deduplicate the logic.