12.0.0: Difference between revisions

Kernel: complete 11.x -> 12.x kernel diff
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The Switch 12.0.0 system update was released on April 6, 2021 (UTC). This Switch update was released for the following regions: ALL, and CHN.
The Switch 12.0.0 system update was released on April 6, 2021 (UTC). This Switch update was released for the following regions: ALL, and CHN.


Security flaws fixed: <fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now>.
Security flaws fixed: yes.


==Change-log==
==Change-log==
Line 168: Line 168:
** KProcess::EnterUserException now sets address_key = (thread | 1) instead of thread.
** KProcess::EnterUserException now sets address_key = (thread | 1) instead of thread.
*** This makes EnterUserException no longer a kernel waiter.
*** This makes EnterUserException no longer a kernel waiter.
*** KScheduler::UpdateHighestThreads now checks if the top thread is the exception thread, and ignores the pinned thread if it is.
** All locations where KThread::m_num_kernel_waiters is changed now mark that a scheduler update is needed.
** All locations where KThread::m_num_kernel_waiters is changed now mark that a scheduler update is needed.
* KMemoryBlockManagerUpdater::Initialize has now been removed, rolled into KMemoryBlockManagerUpdater ctor.
* KMemoryBlockManagerUpdater::Initialize has now been removed, rolled into KMemoryBlockManagerUpdater ctor.
Line 224: Line 225:
====FIRM Sysmodules====
====FIRM Sysmodules====
FIRM sysmodules were updated. Specific diffs available below:
FIRM sysmodules were updated. Specific diffs available below:
=====SM=====
Sysmodule has been completely restructured/refactored/rewritten.
* No longer uses CMIF for IPC, now uses new simpler/learner IPC protocol ("tipc", probably "tiny ipc").
** TIPC is implemented on top of HIPC svcs, same as CMIF was.
** Hacky/Hardcoded CMIF shim is provided for GetServiceHandle/RegisterClient, to avoid breaking games compiled with SDK < 12.x.
* sm: now has a max sessions of 69, up from 61.
** sm:m is maximum 1, for a total of 70.
* There are now two IPC server threads, each of which processes up to 35 handles.
** The new tipc server class has logic for automatically load-balancing new sessions to the least burdened server thread.
<check back for more diffs later>
<check back for more diffs later>
===[[Bluetooth_Driver_services|bluetooth]]===
The IPC<>btstack code was rewritten. C++ objects with vfuncs are now used by commands, instead of the interface funcptr tables. Various structs/enums were updated/etc.
The funcs which were called via funcptrs from the HidMessageHandler thread for writing the various EventInfo state are now inlined.
The Adapter commands were updated, which in the process vulns were [[Switch_System_Flaws|fixed]].
[[Bluetooth_Driver_services#RespondToPinRequest|RespondToPinRequest]] now actually uses the input PIN instead of hard-coding it.
[[Bluetooth_Driver_services#StartInquiry|StartInquiry]] was updated.
System-setting "bluetooth_config!skip_boot" is now [[Bluetooth_Driver_services#IsManufacturingMode|handled]].
For more details, see [[Bluetooth_Driver_services|here]].
Support for bluetooth audio was added. Note however, that the audio-sysmodule still doesn't use the btdrv service.
===[[BTM_services|btm]]===
None of the new btdrv commands are used. [[Bluetooth_Driver_services#StartInquiry|StartInquiry]] with an user-specified service_mask is used, however it's unknown what triggers using this.


=== [[Applet_Manager_services|am]] ===
=== [[Applet_Manager_services|am]] ===