* used atomics for thread safety
* equeue: Save filter/ident before std:move since we access them out of the locked loop
* fixed kqueues memory leak
* clean storage objects effectively
* fixed memory leak
* fix some races
* fixed race condition
* Remove dead code from EqueueInternal::WaitForEvents
No longer necessary now that we avoid using small timers when falling back on equeue logic.
* Refactor type names
Might as well
* Properly define OrbisKernelEqueue as a handle
Most of the functions using an "OrbisKernelEqueue" call directly into kevent. Therefore, OrbisKernelEqueue should be a equeue handle.
* Clang
* Widen OrbisKernelEqueue type
On real hardware, it's some value that contains the handle, as opposed to just the handle itself.
* kqueue implementation
The easy part
* Hardware-accurate timer data
Needed to make kevent simpler for these uses.
* Move callback scheduling to EqueueInternal::AddEvent
kevent would become excessively bloated if I needed to deal with that in there.
* posix_kevent
kevent is a bit of a pain, for now I've implemented as much as libkernel actually uses for it's wrappers, and left error logs to skip behavior when necessary.
* Log calls
* Apple, why are you calling fstat on an equeue?
* Fix vblank event data
* Various logical fixes for timer events
Store timer timeouts in nanoseconds now, properly handle event "replacement", avoid employing small timers when adding events to equeues, fix stored timer data
* Clang
* Don't clear events that don't need clearing
Unless the event has the clear flag, it will be returned multiple times after triggering.
* Fix event flags
As older code suggests, the PS4 kernel does append the clear flag to various event types internally. This is visible when observing the returned event data from sceKernelWaitEqueue (or kevent, if you're feeling ambitious)
Add flag is also removed from events internally.
* Remove checks for module version_major and version_minor
Following this rule broke linking for some libraries, and introduced extra effort needed to get some homebrew running.
* Clang
* Fix rebase
* Disable libSceSsl HLE
Real hardware uses a title workaround to determine if base libSceSsl is needed. Currently, this title workaround applies to absolutely nothing.
* implementation
* add backend (WIP)
* now should be good
- fix implementation based on homebrew tests
- demote log to debug
- make squidbus happy (hopefully)
* fix moved m_name
* fix clang
* replace existing event when its same id and filter
* run timercallback after addEvent and remove useless code
* move KernelSignalRequest to the end
* clang (i hate you)
* Fix event data for VideoOut events
Fix is based on some decompilation work shared by red_prig.
* Cleanup
* Oops
* Style fixes
* Clang
* Fix libSceVideoOut event idents
Based on some decompilation work, events coming from libSceVideoOut use a separate set of values for identifiers. These values are only converted to OrbisVideoOutEventId values during calls to sceVideoOutGetEventId.
For convenience, I've placed all relevant identifiers into a enum called OrbisVideoOutInternalEventId.
Thanks to @red_prig for the tips.
* Fix?
Seems like `static_cast<u32>(hint) & 0xFF == event.ident` here, and doing those right shifts on the event.ident winds up breaking stuff.
Without this change, the if always fails because event_id was getting set to 0 instead.
* Clang
* core: Split error codes into separate files
* Reduces build times and is cleaner
* core: Bring structs and enums to codebase style
* core: More style changes
* libkernel: Cleanup some function places
* kernel: Refactor thread functions
* kernel: It builds
* kernel: Fix a bunch of bugs, kernel thread heap
* kernel: File cleanup pt1
* File cleanup pt2
* File cleanup pt3
* File cleanup pt4
* kernel: Add missing funcs
* kernel: Add basic exceptions for linux
* gnmdriver: Add workload functions
* kernel: Fix new pthreads code on macOS. (#1441)
* kernel: Downgrade edeadlk to log
* gnmdriver: Add sceGnmSubmitCommandBuffersForWorkload
* exception: Add context register population for macOS. (#1444)
* kernel: Pthread rewrite touchups for Windows
* kernel: Multiplatform thread implementation
* mutex: Remove spamming log
* pthread_spec: Make assert into a log
* pthread_spec: Zero initialize array
* Attempt to fix non-Windows builds
* hotfix: change incorrect NID for scePthreadAttrSetaffinity
* scePthreadAttrSetaffinity implementation
* Attempt to fix Linux
* windows: Address a bunch of address space problems
* address_space: Fix unmap of region surrounded by placeholders
* libs: Reduce logging
* pthread: Implement condvar with waitable atomics and sleepqueue
* sleepq: Separate and make faster
* time: Remove delay execution
* Causes high cpu usage in Tohou Luna Nights
* kernel: Cleanup files again
* pthread: Add missing include
* semaphore: Use binary_semaphore instead of condvar
* Seems more reliable
* libraries/sysmodule: log module on `sceSysmoduleIsLoaded`
* libraries/kernel: implement `scePthreadSetPrio`
---------
Co-authored-by: squidbus <175574877+squidbus@users.noreply.github.com>
Co-authored-by: Daniel R. <47796739+polybiusproxy@users.noreply.github.com>