2020-04-19 23:04:05 +02:00
// SPDX-License-Identifier: MPL-2.0
2020-03-27 20:36:02 +01:00
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
2019-10-13 10:04:47 +02:00
# include <kernel/types/KProcess.h>
2021-03-20 17:52:08 +01:00
# include <common/trace.h>
2020-02-16 20:11:43 +01:00
# include "sm/IUserInterface.h"
2020-07-04 22:22:35 +02:00
# include "settings/ISettingsServer.h"
2020-02-16 20:25:18 +01:00
# include "settings/ISystemSettingsServer.h"
2020-02-18 12:41:22 +01:00
# include "apm/IManager.h"
2020-02-19 21:35:54 +01:00
# include "am/IApplicationProxyService.h"
# include "am/IAllSystemAppletProxiesService.h"
2022-06-04 20:11:57 +02:00
# include "audio/IAudioInManager.h"
2020-02-17 20:11:59 +01:00
# include "audio/IAudioOutManager.h"
# include "audio/IAudioRendererManager.h"
2022-05-06 09:47:49 +02:00
# include "bcat/IServiceCreator.h"
2021-07-14 16:39:17 +02:00
# include "codec/IHardwareOpusDecoderManager.h"
2020-02-17 15:50:53 +01:00
# include "fatalsrv/IService.h"
2020-02-16 20:42:32 +01:00
# include "hid/IHidServer.h"
2022-03-27 03:12:11 +02:00
# include "irs/IIrSensorServer.h"
# include "irs/iirsensor_core.h"
2020-02-16 19:42:38 +01:00
# include "timesrv/IStaticService.h"
2021-02-20 15:27:50 +01:00
# include "glue/IStaticService.h"
2021-12-13 13:26:59 +01:00
# include "glue/IWriterForSystem.h"
2023-01-09 13:36:32 +01:00
# include "glue/INotificationServicesForApplication.h"
2021-02-20 15:27:50 +01:00
# include "services/timesrv/core.h"
2020-02-16 21:05:22 +01:00
# include "fssrv/IFileSystemProxy.h"
2021-07-17 18:13:15 +02:00
# include "nvdrv/INvDrvServices.h"
# include "nvdrv/driver.h"
2021-07-04 01:51:19 +02:00
# include "hosbinder/IHOSBinderDriver.h"
# include "visrv/IApplicationRootService.h"
# include "visrv/ISystemRootService.h"
2020-03-24 21:17:31 +01:00
# include "visrv/IManagerRootService.h"
2020-07-04 22:52:07 +02:00
# include "pl/IPlatformServiceManager.h"
2021-09-30 17:12:30 +02:00
# include "pl/shared_font_core.h"
2020-07-04 21:58:16 +02:00
# include "aocsrv/IAddOnContentManager.h"
2020-07-04 22:06:58 +02:00
# include "pctl/IParentalControlServiceFactory.h"
2020-07-04 20:56:33 +02:00
# include "lm/ILogService.h"
2022-10-16 18:55:04 +02:00
# include "ldn/IUserServiceCreator.h"
2020-07-04 21:35:07 +02:00
# include "account/IAccountServiceForApplication.h"
2020-07-09 15:22:49 +02:00
# include "friends/IServiceCreator.h"
2020-07-09 15:28:26 +02:00
# include "nfp/IUserManager.h"
2020-07-09 15:31:04 +02:00
# include "nifm/IStaticService.h"
2022-05-31 23:07:01 +02:00
# include "nim/IShopServiceAccessServerInterface.h"
2020-07-09 15:35:51 +02:00
# include "socket/bsd/IClient.h"
2022-10-31 16:38:46 +01:00
# include "socket/nsd/IManager.h"
# include "socket/sfdnsres/IResolver.h"
2021-08-16 10:10:07 +02:00
# include "spl/IRandomInterface.h"
2020-07-09 15:38:18 +02:00
# include "ssl/ISslService.h"
2020-07-09 15:41:30 +02:00
# include "prepo/IPrepoService.h"
2021-05-30 19:08:18 +02:00
# include "mmnv/IRequest.h"
2022-05-11 11:12:53 +02:00
# include "bt/IBluetoothUser.h"
# include "btm/IBtmUser.h"
2022-11-04 13:13:37 +01:00
# include "capsrv/IAlbumAccessorService.h"
2022-11-04 13:15:35 +01:00
# include "capsrv/ICaptureControllerService.h"
2022-11-04 13:16:54 +01:00
# include "capsrv/IAlbumApplicationService.h"
2022-11-04 13:18:40 +01:00
# include "capsrv/IScreenShotApplicationService.h"
2022-09-29 21:22:00 +02:00
# include "ro/IRoInterface.h"
2022-11-30 17:57:52 +01:00
# include "mii/IStaticService.h"
2023-03-22 08:46:38 +01:00
# include "olsc/IOlscServiceForApplication.h"
2020-02-16 18:53:33 +01:00
# include "serviceman.h"
2019-09-24 22:54:27 +02:00
2021-02-20 15:27:50 +01:00
# define SERVICE_CASE(class, name, ...) \
2020-09-02 23:11:28 +02:00
case util : : MakeMagic < ServiceName > ( name ) : { \
2021-07-04 01:51:19 +02:00
std : : shared_ptr < BaseService > serviceObject { std : : make_shared < class > ( state , * this , # # __VA_ARGS__ ) } ; \
2020-09-02 23:11:28 +02:00
serviceMap [ util : : MakeMagic < ServiceName > ( name ) ] = serviceObject ; \
return serviceObject ; \
}
2019-11-16 21:20:08 +01:00
namespace skyline : : service {
2021-02-20 15:27:50 +01:00
struct GlobalServiceState {
timesrv : : core : : TimeServiceObject timesrv ;
2021-09-30 17:12:30 +02:00
pl : : SharedFontCore sharedFontCore ;
2022-03-27 03:12:11 +02:00
irs : : SharedIirCore sharedIirCore ;
2021-07-17 18:13:15 +02:00
nvdrv : : Driver nvdrv ;
2021-02-20 15:27:50 +01:00
2022-03-27 03:12:11 +02:00
explicit GlobalServiceState ( const DeviceState & state ) : timesrv ( state ) , sharedFontCore ( state ) , sharedIirCore ( state ) , nvdrv ( state ) { }
2021-02-20 15:27:50 +01:00
} ;
ServiceManager : : ServiceManager ( const DeviceState & state ) : state ( state ) , smUserInterface ( std : : make_shared < sm : : IUserInterface > ( state , * this ) ) , globalServiceState ( std : : make_shared < GlobalServiceState > ( state ) ) { }
2019-09-24 22:54:27 +02:00
2021-07-04 01:51:19 +02:00
std : : shared_ptr < BaseService > ServiceManager : : CreateOrGetService ( ServiceName name ) {
2020-09-26 07:17:57 +02:00
auto serviceIter { serviceMap . find ( name ) } ;
2020-03-24 21:17:31 +01:00
if ( serviceIter ! = serviceMap . end ( ) )
return ( * serviceIter ) . second ;
2020-02-16 18:53:33 +01:00
2020-09-02 23:11:28 +02:00
switch ( name ) {
SERVICE_CASE ( fatalsrv : : IService , " fatal:u " )
SERVICE_CASE ( settings : : ISettingsServer , " set " )
SERVICE_CASE ( settings : : ISystemSettingsServer , " set:sys " )
SERVICE_CASE ( apm : : IManager , " apm " )
SERVICE_CASE ( am : : IApplicationProxyService , " appletOE " )
SERVICE_CASE ( am : : IAllSystemAppletProxiesService , " appletAE " )
2022-06-04 20:11:57 +02:00
SERVICE_CASE ( audio : : IAudioInManager , " audin:u " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( audio : : IAudioOutManager , " audout:u " )
SERVICE_CASE ( audio : : IAudioRendererManager , " audren:u " )
2021-07-14 16:39:17 +02:00
SERVICE_CASE ( codec : : IHardwareOpusDecoderManager , " hwopus " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( hid : : IHidServer , " hid " )
2022-03-27 03:12:11 +02:00
SERVICE_CASE ( irs : : IIrSensorServer , " irs " , globalServiceState - > sharedIirCore )
2021-02-20 15:27:50 +01:00
SERVICE_CASE ( timesrv : : IStaticService , " time:s " , globalServiceState - > timesrv , timesrv : : constant : : StaticServiceSystemPermissions ) // Both of these would be registered after TimeServiceManager::Setup normally but we call that in the GlobalServiceState constructor so can just list them here directly
SERVICE_CASE ( timesrv : : IStaticService , " time:su " , globalServiceState - > timesrv , timesrv : : constant : : StaticServiceSystemUpdatePermissions )
2021-03-04 20:38:34 +01:00
SERVICE_CASE ( glue : : IStaticService , " time:a " , globalServiceState - > timesrv . managerServer . GetStaticServiceAsAdmin ( state , * this ) , globalServiceState - > timesrv , timesrv : : constant : : StaticServiceAdminPermissions )
SERVICE_CASE ( glue : : IStaticService , " time:r " , globalServiceState - > timesrv . managerServer . GetStaticServiceAsRepair ( state , * this ) , globalServiceState - > timesrv , timesrv : : constant : : StaticServiceRepairPermissions )
SERVICE_CASE ( glue : : IStaticService , " time:u " , globalServiceState - > timesrv . managerServer . GetStaticServiceAsUser ( state , * this ) , globalServiceState - > timesrv , timesrv : : constant : : StaticServiceUserPermissions )
2023-01-09 13:36:32 +01:00
SERVICE_CASE ( glue : : INotificationServicesForApplication , " notif:a " )
2021-12-13 13:26:59 +01:00
SERVICE_CASE ( glue : : IWriterForSystem , " ectx:w " )
SERVICE_CASE ( glue : : IWriterForSystem , " ectx:aw " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( fssrv : : IFileSystemProxy , " fsp-srv " )
2021-07-17 18:13:15 +02:00
SERVICE_CASE ( nvdrv : : INvDrvServices , " nvdrv " , globalServiceState - > nvdrv , nvdrv : : ApplicationSessionPermissions )
2021-10-16 13:59:59 +02:00
SERVICE_CASE ( nvdrv : : INvDrvServices , " nvdrv:a " , globalServiceState - > nvdrv , nvdrv : : AppletSessionPermissions )
2021-07-17 18:13:15 +02:00
SERVICE_CASE ( hosbinder : : IHOSBinderDriver , " dispdrv " , globalServiceState - > nvdrv . core . nvMap )
2021-07-04 01:51:19 +02:00
SERVICE_CASE ( visrv : : IApplicationRootService , " vi:u " )
SERVICE_CASE ( visrv : : ISystemRootService , " vi:s " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( visrv : : IManagerRootService , " vi:m " )
2021-09-30 17:12:30 +02:00
SERVICE_CASE ( pl : : IPlatformServiceManager , " pl:u " , globalServiceState - > sharedFontCore )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( aocsrv : : IAddOnContentManager , " aoc:u " )
SERVICE_CASE ( pctl : : IParentalControlServiceFactory , " pctl " )
SERVICE_CASE ( pctl : : IParentalControlServiceFactory , " pctl:a " )
SERVICE_CASE ( pctl : : IParentalControlServiceFactory , " pctl:s " )
SERVICE_CASE ( pctl : : IParentalControlServiceFactory , " pctl:r " )
SERVICE_CASE ( lm : : ILogService , " lm " )
2022-10-16 18:55:04 +02:00
SERVICE_CASE ( ldn : : IUserServiceCreator , " ldn:u " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( account : : IAccountServiceForApplication , " acc:u0 " )
2020-11-03 10:40:42 +01:00
SERVICE_CASE ( friends : : IServiceCreator , " friend:u " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( nfp : : IUserManager , " nfp:user " )
SERVICE_CASE ( nifm : : IStaticService , " nifm:u " )
SERVICE_CASE ( socket : : IClient , " bsd:u " )
2022-10-31 16:38:46 +01:00
SERVICE_CASE ( socket : : IManager , " nsd:u " )
SERVICE_CASE ( socket : : IManager , " nsd:a " )
SERVICE_CASE ( socket : : IResolver , " sfdnsres " )
2021-08-16 10:10:07 +02:00
SERVICE_CASE ( spl : : IRandomInterface , " csrng " )
2020-09-02 23:11:28 +02:00
SERVICE_CASE ( ssl : : ISslService , " ssl " )
SERVICE_CASE ( prepo : : IPrepoService , " prepo:u " )
2022-11-19 13:30:45 +01:00
SERVICE_CASE ( prepo : : IPrepoService , " prepo:a " )
2021-05-30 19:08:18 +02:00
SERVICE_CASE ( mmnv : : IRequest , " mm:u " )
2022-05-06 09:47:49 +02:00
SERVICE_CASE ( bcat : : IServiceCreator , " bcat:u " )
2022-05-11 11:12:53 +02:00
SERVICE_CASE ( bt : : IBluetoothUser , " bt " )
SERVICE_CASE ( btm : : IBtmUser , " btm:u " )
2022-11-04 13:13:37 +01:00
SERVICE_CASE ( capsrv : : IAlbumAccessorService , " caps:a " )
2022-11-04 13:15:35 +01:00
SERVICE_CASE ( capsrv : : ICaptureControllerService , " caps:c " )
2022-11-04 13:16:54 +01:00
SERVICE_CASE ( capsrv : : IAlbumApplicationService , " caps:u " )
2022-11-04 13:18:40 +01:00
SERVICE_CASE ( capsrv : : IScreenShotApplicationService , " caps:su " )
2022-05-31 23:07:01 +02:00
SERVICE_CASE ( nim : : IShopServiceAccessServerInterface , " nim:eca " )
2022-09-29 21:22:00 +02:00
SERVICE_CASE ( ro : : IRoInterface , " ldr:ro " )
2022-11-30 17:57:52 +01:00
SERVICE_CASE ( mii : : IStaticService , " mii:e " )
SERVICE_CASE ( mii : : IStaticService , " mii:u " )
2023-03-22 08:46:38 +01:00
SERVICE_CASE ( olsc : : IOlscServiceForApplication , " olsc:u " )
2019-10-16 22:23:35 +02:00
default :
2020-10-23 20:23:16 +02:00
std : : string_view nameString ( span ( reinterpret_cast < char * > ( & name ) , sizeof ( name ) ) . as_string ( true ) ) ;
throw std : : out_of_range ( fmt : : format ( " CreateService called with an unknown service name: {} " , nameString ) ) ;
2019-10-16 14:41:30 +02:00
}
2019-09-24 22:54:27 +02:00
}
2020-09-02 23:11:28 +02:00
std : : shared_ptr < BaseService > ServiceManager : : NewService ( ServiceName name , type : : KSession & session , ipc : : IpcResponse & response ) {
2022-04-25 16:00:30 +02:00
std : : scoped_lock serviceGuard { mutex } ;
2021-07-04 01:51:19 +02:00
auto serviceObject { CreateOrGetService ( name ) } ;
2020-03-25 18:59:37 +01:00
KHandle handle { } ;
2020-06-23 20:49:06 +02:00
if ( session . isDomain ) {
2020-09-29 14:46:17 +02:00
session . domains . push_back ( serviceObject ) ;
2019-09-24 22:54:27 +02:00
response . domainObjects . push_back ( session . handleIndex ) ;
2020-09-29 14:46:17 +02:00
handle = session . handleIndex + + ;
2019-10-18 12:52:38 +02:00
} else {
2020-01-01 14:11:25 +01:00
handle = state . process - > NewHandle < type : : KSession > ( serviceObject ) . handle ;
2019-10-18 12:52:38 +02:00
response . moveHandles . push_back ( handle ) ;
}
2021-11-10 23:21:43 +01:00
Logger : : Debug ( " Service has been created: \" {} \" (0x{:X}) " , serviceObject - > GetName ( ) , handle ) ;
2019-10-13 10:04:47 +02:00
return serviceObject ;
2019-09-24 22:54:27 +02:00
}
2020-09-14 16:13:36 +02:00
void ServiceManager : : RegisterService ( std : : shared_ptr < BaseService > serviceObject , type : : KSession & session , ipc : : IpcResponse & response ) { // NOLINT(performance-unnecessary-value-param)
2022-04-25 16:00:30 +02:00
std : : scoped_lock serviceGuard { mutex } ;
2020-03-25 18:59:37 +01:00
KHandle handle { } ;
2020-09-02 23:11:28 +02:00
2020-06-23 20:49:06 +02:00
if ( session . isDomain ) {
2020-09-29 14:46:17 +02:00
session . domains . push_back ( serviceObject ) ;
2019-10-16 22:23:35 +02:00
response . domainObjects . push_back ( session . handleIndex ) ;
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
handle = session . handleIndex + + ;
2019-10-18 12:52:38 +02:00
} else {
2020-01-01 14:11:25 +01:00
handle = state . process - > NewHandle < type : : KSession > ( serviceObject ) . handle ;
2019-10-18 12:52:38 +02:00
response . moveHandles . push_back ( handle ) ;
}
2020-09-02 23:11:28 +02:00
2021-11-10 23:21:43 +01:00
Logger : : Debug ( " Service has been registered: \" {} \" (0x{:X}) " , serviceObject - > GetName ( ) , handle ) ;
2019-10-16 22:23:35 +02:00
}
2020-04-22 19:02:27 +02:00
void ServiceManager : : CloseSession ( KHandle handle ) {
2022-04-25 16:00:30 +02:00
std : : scoped_lock serviceGuard { mutex } ;
2020-09-26 07:17:57 +02:00
auto session { state . process - > GetHandle < type : : KSession > ( handle ) } ;
2020-09-28 12:05:17 +02:00
if ( session - > isOpen ) {
2019-10-16 14:41:30 +02:00
if ( session - > isDomain ) {
2020-09-29 14:46:17 +02:00
for ( const auto & domainService : session - > domains )
std : : erase_if ( serviceMap , [ domainService ] ( const auto & entry ) {
return entry . second = = domainService ;
2020-09-02 23:11:28 +02:00
} ) ;
2020-02-16 18:53:33 +01:00
} else {
2020-09-02 23:11:28 +02:00
std : : erase_if ( serviceMap , [ session ] ( const auto & entry ) {
return entry . second = = session - > serviceObject ;
} ) ;
2020-02-16 18:53:33 +01:00
}
2020-09-28 12:05:17 +02:00
session - > isOpen = false ;
2019-09-24 22:54:27 +02:00
}
2020-05-28 21:27:25 +02:00
}
2019-09-24 22:54:27 +02:00
2020-04-22 19:02:27 +02:00
void ServiceManager : : SyncRequestHandler ( KHandle handle ) {
2021-03-11 19:41:12 +01:00
TRACE_EVENT ( " kernel " , " ServiceManager::SyncRequestHandler " ) ;
2020-09-26 07:17:57 +02:00
auto session { state . process - > GetHandle < type : : KSession > ( handle ) } ;
2021-11-10 23:21:43 +01:00
Logger : : Verbose ( " ----IPC Start---- " ) ;
Logger : : Verbose ( " Handle is 0x{:X} " , handle ) ;
2019-09-24 22:54:27 +02:00
2020-09-28 12:05:17 +02:00
if ( session - > isOpen ) {
2019-09-24 22:54:27 +02:00
ipc : : IpcRequest request ( session - > isDomain , state ) ;
2020-06-23 20:49:06 +02:00
ipc : : IpcResponse response ( state ) ;
2019-09-24 22:54:27 +02:00
2020-02-16 18:53:33 +01:00
switch ( request . header - > type ) {
2019-09-24 22:54:27 +02:00
case ipc : : CommandType : : Request :
case ipc : : CommandType : : RequestWithContext :
if ( session - > isDomain ) {
try {
2020-09-29 14:46:17 +02:00
auto service { session - > domains . at ( request . domain - > objectId ) } ;
if ( service = = nullptr )
throw exception ( " Domain request used an expired handle " ) ;
2020-09-28 12:05:17 +02:00
switch ( request . domain - > command ) {
2019-09-24 22:54:27 +02:00
case ipc : : DomainCommand : : SendMessage :
2020-09-03 20:43:52 +02:00
response . errorCode = service - > HandleRequest ( * session , request , response ) ;
2019-09-24 22:54:27 +02:00
break ;
2020-09-28 12:05:17 +02:00
2019-09-24 22:54:27 +02:00
case ipc : : DomainCommand : : CloseVHandle :
2020-09-02 23:11:28 +02:00
std : : erase_if ( serviceMap , [ service ] ( const auto & entry ) {
return entry . second = = service ;
} ) ;
2020-09-29 14:46:17 +02:00
session - > domains . at ( request . domain - > objectId ) . reset ( ) ;
2019-09-24 22:54:27 +02:00
break ;
}
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
} catch ( std : : out_of_range & ) {
2019-09-24 22:54:27 +02:00
throw exception ( " Invalid object ID was used with domain request " ) ;
}
2020-02-16 18:53:33 +01:00
} else {
2020-09-03 20:43:52 +02:00
response . errorCode = session - > serviceObject - > HandleRequest ( * session , request , response ) ;
2020-02-16 18:53:33 +01:00
}
2020-06-23 20:49:06 +02:00
response . WriteResponse ( session - > isDomain ) ;
2019-09-24 22:54:27 +02:00
break ;
2020-09-28 12:05:17 +02:00
2019-09-24 22:54:27 +02:00
case ipc : : CommandType : : Control :
case ipc : : CommandType : : ControlWithContext :
2021-11-10 23:21:43 +01:00
Logger : : Debug ( " Control IPC Message: 0x{:X} " , request . payload - > value ) ;
2019-09-24 22:54:27 +02:00
switch ( static_cast < ipc : : ControlCommand > ( request . payload - > value ) ) {
case ipc : : ControlCommand : : ConvertCurrentObjectToDomain :
2019-11-23 19:48:22 +01:00
response . Push ( session - > ConvertDomain ( ) ) ;
2019-09-24 22:54:27 +02:00
break ;
2020-09-28 12:05:17 +02:00
2019-09-24 22:54:27 +02:00
case ipc : : ControlCommand : : CloneCurrentObject :
case ipc : : ControlCommand : : CloneCurrentObjectEx :
2020-07-05 14:12:30 +02:00
response . moveHandles . push_back ( state . process - > InsertItem ( session ) ) ;
2019-09-24 22:54:27 +02:00
break ;
2020-09-28 12:05:17 +02:00
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
case ipc : : ControlCommand : : QueryPointerBufferSize :
2022-09-03 00:07:17 +02:00
response . Push < u32 > ( 0x8000 ) ;
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
break ;
2020-09-28 12:05:17 +02:00
2019-09-24 22:54:27 +02:00
default :
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
throw exception ( " Unknown Control Command: {} " , request . payload - > value ) ;
2019-09-24 22:54:27 +02:00
}
2020-06-23 20:49:06 +02:00
response . WriteResponse ( false ) ;
2019-09-24 22:54:27 +02:00
break ;
2020-09-28 12:05:17 +02:00
2019-09-24 22:54:27 +02:00
case ipc : : CommandType : : Close :
2022-09-03 00:01:44 +02:00
case ipc : : CommandType : : TipcCloseSession :
2021-11-10 23:21:43 +01:00
Logger : : Debug ( " Closing Session " ) ;
2019-09-24 22:54:27 +02:00
CloseSession ( handle ) ;
break ;
default :
2022-09-03 00:01:44 +02:00
// TIPC command ID is encoded in the request type
if ( request . isTipc ) {
response . errorCode = session - > serviceObject - > HandleRequest ( * session , request , response ) ;
response . WriteResponse ( session - > isDomain , true ) ;
} else {
throw exception ( " Unimplemented IPC message type: {} " , static_cast < u16 > ( request . header - > type ) ) ;
}
2019-09-24 22:54:27 +02:00
}
2020-02-16 18:53:33 +01:00
} else {
2021-11-10 23:21:43 +01:00
Logger : : Warn ( " svcSendSyncRequest called on closed handle: 0x{:X} " , handle ) ;
2020-02-16 18:53:33 +01:00
}
2021-11-10 23:21:43 +01:00
Logger : : Verbose ( " ====IPC End==== " ) ;
2019-09-24 22:54:27 +02:00
}
}