2020-12-05 13:08:24 +01:00
# include "stdafx.h"
2014-06-02 19:27:24 +02:00
# include "Emu/System.h"
2020-02-15 23:36:20 +01:00
# include "Emu/system_config.h"
2016-03-21 22:43:03 +03:00
# include "Emu/IdManager.h"
2020-02-15 23:36:20 +01:00
# include "Emu/VFS.h"
2016-03-21 22:43:03 +03:00
# include "Emu/Cell/PPUModule.h"
2014-08-24 00:40:04 +04:00
2019-11-08 18:40:46 +02:00
# include "Emu/Cell/lv2/sys_process.h"
2014-08-24 00:40:04 +04:00
# include "cellSysutil.h"
2014-03-19 16:19:35 +01:00
2016-04-27 01:27:24 +03:00
# include "Utilities/StrUtil.h"
2018-12-31 22:03:30 +03:00
# include "Utilities/lockless.h"
2020-03-04 17:08:40 +03:00
# include "Utilities/span.h"
2016-07-28 00:43:22 +03:00
2018-08-25 15:39:00 +03:00
LOG_CHANNEL ( cellSysutil ) ;
2014-01-08 23:16:13 +02:00
2019-01-04 14:45:32 +01:00
template < >
void fmt_class_string < CellSysutilError > : : format ( std : : string & out , u64 arg )
{
format_enum ( out , arg , [ ] ( auto error )
{
switch ( error )
{
STR_CASE ( CELL_SYSUTIL_ERROR_TYPE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_VALUE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_SIZE ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_NUM ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_BUSY ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_STATUS ) ;
STR_CASE ( CELL_SYSUTIL_ERROR_MEMORY ) ;
2020-09-12 09:16:35 +02:00
STR_CASE ( CELL_SYSUTIL_ERROR_3D_SUPPORT ) ;
2019-01-04 14:45:32 +01:00
}
return unknown ;
} ) ;
}
2016-07-28 00:43:22 +03:00
struct sysutil_cb_manager
{
2018-12-31 22:03:30 +03:00
struct alignas ( 8 ) registered_cb
2016-08-04 22:13:01 +03:00
{
2018-12-31 22:03:30 +03:00
vm : : ptr < CellSysutilCallback > first ;
vm : : ptr < void > second ;
} ;
2016-08-04 22:13:01 +03:00
2018-12-31 22:03:30 +03:00
atomic_t < registered_cb > callbacks [ 4 ] { } ;
2016-08-04 22:13:01 +03:00
2018-12-31 22:03:30 +03:00
lf_queue < std : : function < s32 ( ppu_thread & ) > > registered ;
2016-07-28 00:43:22 +03:00
} ;
extern void sysutil_register_cb ( std : : function < s32 ( ppu_thread & ) > & & cb )
2016-03-21 22:43:03 +03:00
{
2021-03-02 14:59:19 +03:00
auto & cbm = g_fxo - > get < sysutil_cb_manager > ( ) ;
2016-07-28 00:43:22 +03:00
2021-03-02 14:59:19 +03:00
cbm . registered . push ( std : : move ( cb ) ) ;
2016-07-28 00:43:22 +03:00
}
extern void sysutil_send_system_cmd ( u64 status , u64 param )
{
2021-03-12 10:15:24 +02:00
if ( auto cbm = g_fxo - > try_get < sysutil_cb_manager > ( ) )
2016-03-21 22:43:03 +03:00
{
2021-03-12 10:15:24 +02:00
for ( sysutil_cb_manager : : registered_cb cb : cbm - > callbacks )
2016-03-21 22:43:03 +03:00
{
if ( cb . first )
{
2021-03-12 10:15:24 +02:00
cbm - > registered . push ( [ = ] ( ppu_thread & ppu ) - > s32
2016-03-21 22:43:03 +03:00
{
// TODO: check it and find the source of the return value (void isn't equal to CELL_OK)
cb . first ( ppu , status , param , cb . second ) ;
return CELL_OK ;
} ) ;
}
}
}
}
2017-05-20 14:45:02 +03:00
template < >
void fmt_class_string < CellSysutilLang > : : format ( std : : string & out , u64 arg )
2016-03-21 22:43:03 +03:00
{
2017-05-20 14:45:02 +03:00
format_enum ( out , arg , [ ] ( CellSysutilLang value )
{
switch ( value )
{
case CELL_SYSUTIL_LANG_JAPANESE : return " Japanese " ;
case CELL_SYSUTIL_LANG_ENGLISH_US : return " English (US) " ;
case CELL_SYSUTIL_LANG_FRENCH : return " French " ;
case CELL_SYSUTIL_LANG_SPANISH : return " Spanish " ;
case CELL_SYSUTIL_LANG_GERMAN : return " German " ;
case CELL_SYSUTIL_LANG_ITALIAN : return " Italian " ;
case CELL_SYSUTIL_LANG_DUTCH : return " Dutch " ;
2020-04-07 17:10:04 +02:00
case CELL_SYSUTIL_LANG_PORTUGUESE_PT : return " Portuguese (Portugal) " ;
2017-05-20 14:45:02 +03:00
case CELL_SYSUTIL_LANG_RUSSIAN : return " Russian " ;
case CELL_SYSUTIL_LANG_KOREAN : return " Korean " ;
2020-04-07 17:10:04 +02:00
case CELL_SYSUTIL_LANG_CHINESE_T : return " Chinese (Traditional) " ;
case CELL_SYSUTIL_LANG_CHINESE_S : return " Chinese (Simplified) " ;
2017-05-20 14:45:02 +03:00
case CELL_SYSUTIL_LANG_FINNISH : return " Finnish " ;
case CELL_SYSUTIL_LANG_SWEDISH : return " Swedish " ;
case CELL_SYSUTIL_LANG_DANISH : return " Danish " ;
case CELL_SYSUTIL_LANG_NORWEGIAN : return " Norwegian " ;
case CELL_SYSUTIL_LANG_POLISH : return " Polish " ;
case CELL_SYSUTIL_LANG_ENGLISH_GB : return " English (UK) " ;
2020-04-07 17:10:04 +02:00
case CELL_SYSUTIL_LANG_PORTUGUESE_BR : return " Portuguese (Brazil) " ;
2017-05-20 14:45:02 +03:00
case CELL_SYSUTIL_LANG_TURKISH : return " Turkish " ;
}
return unknown ;
} ) ;
}
2016-03-21 22:43:03 +03:00
2020-10-30 20:54:49 +01:00
template < >
void fmt_class_string < CellSysutilLicenseArea > : : format ( std : : string & out , u64 arg )
{
format_enum ( out , arg , [ ] ( CellSysutilLicenseArea value )
{
switch ( value )
{
case CELL_SYSUTIL_LICENSE_AREA_J : return " SCEJ " ;
case CELL_SYSUTIL_LICENSE_AREA_A : return " SCEA " ;
case CELL_SYSUTIL_LICENSE_AREA_E : return " SCEE " ;
case CELL_SYSUTIL_LICENSE_AREA_H : return " SCEH " ;
case CELL_SYSUTIL_LICENSE_AREA_K : return " SCEK " ;
case CELL_SYSUTIL_LICENSE_AREA_C : return " SCH " ;
case CELL_SYSUTIL_LICENSE_AREA_OTHER : return " Other " ;
}
return unknown ;
} ) ;
}
2017-05-20 14:45:02 +03:00
template < >
2017-09-12 23:42:00 +02:00
void fmt_class_string < CellSysutilParamId > : : format ( std : : string & out , u64 arg )
2016-04-25 13:49:12 +03:00
{
2016-08-03 23:51:05 +03:00
format_enum ( out , arg , [ ] ( auto value )
2016-04-25 13:49:12 +03:00
{
2016-08-03 23:51:05 +03:00
switch ( value )
2016-05-13 16:55:34 +03:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG : return " ID_LANG " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN : return " ID_ENTER_BUTTON_ASSIGN " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT : return " ID_DATE_FORMAT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT : return " ID_TIME_FORMAT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE : return " ID_TIMEZONE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME : return " ID_SUMMERTIME " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL : return " ID_GAME_PARENTAL_LEVEL " ;
2020-09-11 17:02:25 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_LICENSE_AREA : return " ID_LICENSE_AREA " ;
2016-05-13 16:55:34 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT : return " ID_GAME_PARENTAL_LEVEL0_RESTRICT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT : return " ID_CURRENT_USER_HAS_NP_ACCOUNT " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ : return " ID_CAMERA_PLFREQ " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE : return " ID_PAD_RUMBLE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE : return " ID_KEYBOARD_TYPE " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD : return " ID_JAPANESE_KEYBOARD_ENTRY_METHOD " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD : return " ID_CHINESE_KEYBOARD_ENTRY_METHOD " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF : return " ID_PAD_AUTOOFF " ;
2019-05-10 22:36:16 -07:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_MAGNETOMETER : return " ID_MAGNETOMETER " ;
2016-05-13 16:55:34 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME : return " ID_NICKNAME " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME : return " ID_CURRENT_USERNAME " ;
2019-12-10 19:17:03 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1008 : return " ID_x1008 " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1011 : return " ID_x1011 " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1012 : return " ID_x1012 " ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1024 : return " ID_x1024 " ;
2021-04-09 21:12:47 +02:00
default : break ;
2016-05-13 16:55:34 +03:00
}
2016-08-03 23:51:05 +03:00
return unknown ;
} ) ;
}
2016-04-25 13:49:12 +03:00
2019-11-08 18:40:46 +02:00
// Common string checks used in libsysutil functions
s32 sysutil_check_name_string ( const char * src , s32 minlen , s32 maxlen )
{
s32 lastpos ;
if ( g_ps3_process_info . sdk_ver > 0x36FFFF )
{
// Limit null terminator boundary to before buffer max size
2019-12-10 19:17:03 +03:00
lastpos = std : : max ( maxlen - 1 , 0 ) ;
2019-11-08 18:40:46 +02:00
}
else
{
// Limit null terminator boundary to one after buffer max size
lastpos = maxlen ;
}
char cur = src [ 0 ] ;
if ( cur = = ' _ ' )
{
// Invalid character at start
return - 1 ;
}
2019-12-07 08:19:28 +02:00
for ( s32 index = 0 ; ; cur = src [ + + index ] )
2019-11-08 18:40:46 +02:00
{
if ( cur = = ' \0 ' | | index = = maxlen )
{
if ( minlen > index | | ( maxlen = = index & & src [ lastpos ] ) )
{
// String length is invalid
return - 2 ;
}
// OK
return 0 ;
}
if ( cur > = ' A ' & & cur < = ' Z ' )
{
continue ;
}
if ( cur > = ' 0 ' & & cur < = ' 9 ' )
{
continue ;
}
if ( cur = = ' - ' | | cur = = ' _ ' )
{
continue ;
}
// Invalid character found
return - 1 ;
}
}
2019-11-07 16:30:40 +02:00
error_code _cellSysutilGetSystemParamInt ( )
2019-04-05 20:14:01 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGetSystemParamInt ( CellSysutilParamId id , vm : : ptr < s32 > value )
2015-07-06 02:21:15 +03:00
{
2016-08-03 23:51:05 +03:00
cellSysutil . warning ( " cellSysutilGetSystemParamInt(id=0x%x(%s), value=*0x%x) " , id , id , value ) ;
2016-03-21 22:43:03 +03:00
2019-11-15 19:17:54 +02:00
if ( ! value )
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2016-03-21 22:43:03 +03:00
// TODO: load this information from config (preferably "sys/" group)
2013-08-19 02:06:11 +03:00
2017-09-12 23:42:00 +02:00
switch ( id )
2013-08-19 02:06:11 +03:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_LANG :
2017-05-20 14:45:02 +03:00
* value = g_cfg . sys . language ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN :
2020-02-15 23:36:20 +01:00
* value = static_cast < s32 > ( g_cfg . sys . enter_button_assignment . get ( ) ) ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_DATE_FORMAT :
2014-09-01 04:51:48 +04:00
* value = CELL_SYSUTIL_DATE_FMT_DDMMYYYY ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIME_FORMAT :
2014-09-01 04:51:48 +04:00
* value = CELL_SYSUTIL_TIME_FMT_CLOCK24 ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_TIMEZONE :
2015-07-06 02:21:15 +03:00
* value = 180 ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_SUMMERTIME :
2015-07-06 02:21:15 +03:00
* value = 0 ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL :
2014-09-01 04:51:48 +04:00
* value = CELL_SYSUTIL_GAME_PARENTAL_OFF ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
2020-09-11 17:02:25 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_LICENSE_AREA :
{
if ( g_ps3_process_info . sdk_ver > 0x23FFFFu )
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
extern s32 cellSysutilGetLicenseArea ( ) ;
// Identical until proved otherwise
* value = cellSysutilGetLicenseArea ( ) ;
break ;
}
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_GAME_PARENTAL_LEVEL0_RESTRICT :
2014-09-01 04:51:48 +04:00
* value = CELL_SYSUTIL_GAME_PARENTAL_LEVEL0_RESTRICT_OFF ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
2020-09-08 15:12:47 +01:00
// Report user has an NP account when np_psn_status is Fake or RPCN
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USER_HAS_NP_ACCOUNT :
2020-09-08 15:12:47 +01:00
* value = g_cfg . net . psn_status ! = np_psn_status : : disabled ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_CAMERA_PLFREQ :
2014-09-01 04:51:48 +04:00
* value = CELL_SYSUTIL_CAMERA_PLFREQ_DISABLED ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_RUMBLE :
2019-11-15 19:25:35 +02:00
* value = CELL_SYSUTIL_PAD_RUMBLE_ON ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_KEYBOARD_TYPE :
2019-08-17 16:08:47 +02:00
* value = g_cfg . sys . keyboard_type ;
2020-09-12 09:16:35 +02:00
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_JAPANESE_KEYBOARD_ENTRY_METHOD :
2020-09-12 09:16:35 +02:00
* value = CELL_SYSUTIL_KEYBOARD_ENTRY_METHOD_ROMAJI_INPUT ;
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_CHINESE_KEYBOARD_ENTRY_METHOD :
2020-09-12 09:16:35 +02:00
* value = CELL_SYSUTIL_KEYBOARD_ENTRY_METHOD_ZHUYIN_INPUT ;
break ;
2013-08-19 02:06:11 +03:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_PAD_AUTOOFF :
2020-09-12 09:16:35 +02:00
* value = CELL_SYSUTIL_PAD_AUTOOFF_OFF ;
break ;
2013-08-19 02:06:11 +03:00
2018-03-02 18:51:21 +02:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_MAGNETOMETER :
2020-09-12 09:16:35 +02:00
* value = CELL_SYSUTIL_MAGNETOMETER_OFF ;
break ;
2018-03-02 18:51:21 +02:00
2013-08-19 02:06:11 +03:00
default :
2019-11-15 19:17:54 +02:00
return CELL_SYSUTIL_ERROR_VALUE ;
2013-08-19 02:06:11 +03:00
}
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGetSystemParamString ( CellSysutilParamId id , vm : : ptr < char > buf , u32 bufsize )
2013-11-29 05:56:26 +01:00
{
2016-08-03 23:51:05 +03:00
cellSysutil . trace ( " cellSysutilGetSystemParamString(id=0x%x(%s), buf=*0x%x, bufsize=%d) " , id , id , buf , bufsize ) ;
2013-11-29 05:56:26 +01:00
2019-11-15 19:17:54 +02:00
if ( ! buf )
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2019-10-14 11:26:17 +03:00
u32 copy_size ;
std : : string param_str = " Unknown " ;
bool report_use = false ;
2014-01-14 23:03:48 +04:00
2017-09-12 23:42:00 +02:00
switch ( id )
2013-11-29 05:56:26 +01:00
{
case CELL_SYSUTIL_SYSTEMPARAM_ID_NICKNAME :
2019-10-14 11:26:17 +03:00
{
copy_size = CELL_SYSUTIL_SYSTEMPARAM_NICKNAME_SIZE ;
break ;
}
2013-11-29 05:56:26 +01:00
case CELL_SYSUTIL_SYSTEMPARAM_ID_CURRENT_USERNAME :
2019-10-14 11:26:17 +03:00
{
const fs : : file username ( vfs : : get ( fmt : : format ( " /dev_hdd0/home/%08u/localusername " , Emu . GetUsrId ( ) ) ) ) ;
2019-12-10 19:17:03 +03:00
2019-10-14 11:26:17 +03:00
if ( ! username )
{
cellSysutil . error ( " cellSysutilGetSystemParamString(): Username for user %08u doesn't exist. Did you delete the username file? " , Emu . GetUsrId ( ) ) ;
}
else
{
// Read current username
param_str = username . to_string ( ) ;
}
2013-11-29 05:56:26 +01:00
2019-10-14 11:26:17 +03:00
copy_size = CELL_SYSUTIL_SYSTEMPARAM_CURRENT_USERNAME_SIZE ;
break ;
}
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1011 : // Same as x1012
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1012 : copy_size = 0x400 ; report_use = true ; break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1024 : copy_size = 0x100 ; report_use = true ; break ;
case CELL_SYSUTIL_SYSTEMPARAM_ID_x1008 : copy_size = 0x4 ; report_use = true ; break ;
2013-11-29 05:56:26 +01:00
default :
2019-10-14 11:26:17 +03:00
{
2019-11-15 19:17:54 +02:00
return CELL_SYSUTIL_ERROR_VALUE ;
2013-11-29 05:56:26 +01:00
}
2019-10-14 11:26:17 +03:00
}
if ( bufsize ! = copy_size )
{
return CELL_SYSUTIL_ERROR_SIZE ;
}
if ( report_use )
{
cellSysutil . error ( " cellSysutilGetSystemParamString: Unknown ParamId 0x%x " , id ) ;
}
2013-11-29 05:56:26 +01:00
2020-03-04 17:08:40 +03:00
gsl : : span dst ( buf . get_ptr ( ) , copy_size ) ;
strcpy_trunc ( dst , param_str ) ;
2013-11-29 05:56:26 +01:00
return CELL_OK ;
}
2018-12-23 00:16:03 +01:00
// Note: the way we do things here is inaccurate(but maybe sufficient)
// The real function goes over a table of 0x20 entries[ event_code:u32 callback_addr:u32 ]
// Those callbacks are registered through cellSysutilRegisterCallbackDispatcher(u32 event_code, vm::ptr<void> func_addr)
// The function goes through all the callback looking for one callback associated with event 0x100, if any is found it is called with parameters r3=0x101 r4=0
// This particular CB seems to be associated with sysutil itself
// Then it checks for events on an event_queue associated with sysutil, checks if any cb is associated with that event and calls them with parameters that come from the event
2018-10-11 01:17:19 +03:00
error_code cellSysutilCheckCallback ( ppu_thread & ppu )
2014-09-11 23:18:19 +04:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . trace ( " cellSysutilCheckCallback() " ) ;
2013-11-16 23:12:30 +02:00
2021-03-02 14:59:19 +03:00
auto & cbm = g_fxo - > get < sysutil_cb_manager > ( ) ;
2016-07-28 00:43:22 +03:00
2021-03-02 14:59:19 +03:00
for ( auto & & func : cbm . registered . pop_all ( ) )
2014-02-16 01:16:35 +04:00
{
2019-01-03 18:18:31 +03:00
if ( s32 res = func ( ppu ) )
2014-09-11 23:18:19 +04:00
{
2018-12-31 22:03:30 +03:00
// Currently impossible
2018-10-11 01:17:19 +03:00
return not_an_error ( res ) ;
2014-02-16 19:23:58 +04:00
}
2016-08-04 22:13:01 +03:00
2018-10-11 01:17:19 +03:00
if ( ppu . is_stopped ( ) )
{
2021-02-13 16:50:07 +02:00
return { } ;
2018-10-11 01:17:19 +03:00
}
2014-02-16 01:16:35 +04:00
}
2014-02-01 14:17:15 +04:00
2013-11-16 23:12:30 +02:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilRegisterCallback ( s32 slot , vm : : ptr < CellSysutilCallback > func , vm : : ptr < void > userdata )
2013-11-16 23:12:30 +02:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilRegisterCallback(slot=%d, func=*0x%x, userdata=*0x%x) " , slot , func , userdata ) ;
2013-11-16 23:12:30 +02:00
2016-07-28 00:43:22 +03:00
if ( slot > = 4 )
2014-09-11 23:18:19 +04:00
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2013-11-16 23:12:30 +02:00
2021-03-02 14:59:19 +03:00
auto & cbm = g_fxo - > get < sysutil_cb_manager > ( ) ;
2016-07-28 00:43:22 +03:00
2021-03-02 14:59:19 +03:00
cbm . callbacks [ slot ] . store ( { func , userdata } ) ;
2016-07-28 00:43:22 +03:00
2013-11-16 23:12:30 +02:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilUnregisterCallback ( u32 slot )
2013-11-16 23:12:30 +02:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilUnregisterCallback(slot=%d) " , slot ) ;
2014-02-16 01:16:35 +04:00
2016-07-28 00:43:22 +03:00
if ( slot > = 4 )
2014-09-11 23:18:19 +04:00
{
return CELL_SYSUTIL_ERROR_VALUE ;
}
2013-11-16 23:12:30 +02:00
2021-03-02 14:59:19 +03:00
auto & cbm = g_fxo - > get < sysutil_cb_manager > ( ) ;
2016-07-28 00:43:22 +03:00
2021-03-02 14:59:19 +03:00
cbm . callbacks [ slot ] . store ( { } ) ;
2016-07-28 00:43:22 +03:00
2013-11-16 23:12:30 +02:00
return CELL_OK ;
}
2015-07-06 02:21:15 +03:00
bool g_bgm_playback_enabled = true ;
2014-06-09 17:35:35 +04:00
2019-11-07 16:30:40 +02:00
error_code cellSysutilEnableBgmPlayback ( )
2014-06-09 17:35:35 +04:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilEnableBgmPlayback() " ) ;
2014-06-09 17:35:35 +04:00
2014-06-27 15:11:56 +04:00
// TODO
2015-07-06 02:21:15 +03:00
g_bgm_playback_enabled = true ;
2014-06-10 00:28:52 +08:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilEnableBgmPlaybackEx ( vm : : ptr < CellSysutilBgmPlaybackExtraParam > param )
2014-06-10 00:28:52 +08:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilEnableBgmPlaybackEx(param=*0x%x) " , param ) ;
2014-06-10 00:28:52 +08:00
2014-06-27 15:11:56 +04:00
// TODO
2018-03-02 18:51:21 +02:00
g_bgm_playback_enabled = true ;
2014-06-10 00:28:52 +08:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilDisableBgmPlayback ( )
2014-06-10 00:28:52 +08:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilDisableBgmPlayback() " ) ;
2014-06-10 00:28:52 +08:00
2014-06-27 15:11:56 +04:00
// TODO
2015-07-06 02:21:15 +03:00
g_bgm_playback_enabled = false ;
2014-06-10 00:28:52 +08:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilDisableBgmPlaybackEx ( vm : : ptr < CellSysutilBgmPlaybackExtraParam > param )
2014-06-10 00:28:52 +08:00
{
2016-01-13 00:57:16 +03:00
cellSysutil . warning ( " cellSysutilDisableBgmPlaybackEx(param=*0x%x) " , param ) ;
2014-06-10 00:28:52 +08:00
2014-06-27 15:11:56 +04:00
// TODO
2015-07-06 02:21:15 +03:00
g_bgm_playback_enabled = false ;
2014-06-10 00:28:52 +08:00
2014-06-09 17:35:35 +04:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGetBgmPlaybackStatus ( vm : : ptr < CellSysutilBgmPlaybackStatus > status )
2014-04-04 00:24:28 -07:00
{
2020-08-27 21:47:04 +02:00
cellSysutil . trace ( " cellSysutilGetBgmPlaybackStatus(status=*0x%x) " , status ) ;
2014-04-04 00:24:28 -07:00
2014-06-09 17:35:35 +04:00
// TODO
2014-06-27 15:11:56 +04:00
status - > playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP ;
2015-07-06 02:21:15 +03:00
status - > enableState = g_bgm_playback_enabled ? CELL_SYSUTIL_BGMPLAYBACK_STATUS_ENABLE : CELL_SYSUTIL_BGMPLAYBACK_STATUS_DISABLE ;
2014-06-27 15:11:56 +04:00
status - > currentFadeRatio = 0 ; // current volume ratio (0%)
2014-04-04 00:24:28 -07:00
memset ( status - > contentId , 0 , sizeof ( status - > contentId ) ) ;
2014-06-27 15:11:56 +04:00
memset ( status - > reserved , 0 , sizeof ( status - > reserved ) ) ;
2014-04-04 00:24:28 -07:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGetBgmPlaybackStatus2 ( vm : : ptr < CellSysutilBgmPlaybackStatus2 > status2 )
2014-06-10 00:28:52 +08:00
{
2020-08-27 21:47:04 +02:00
cellSysutil . trace ( " cellSysutilGetBgmPlaybackStatus2(status2=*0x%x) " , status2 ) ;
2014-06-10 00:28:52 +08:00
// TODO
2014-06-27 15:11:56 +04:00
status2 - > playerState = CELL_SYSUTIL_BGMPLAYBACK_STATUS_STOP ;
memset ( status2 - > reserved , 0 , sizeof ( status2 - > reserved ) ) ;
2014-06-10 00:28:52 +08:00
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilSetBgmPlaybackExtraParam ( )
2014-04-24 22:14:40 -07:00
{
2016-03-21 22:43:03 +03:00
cellSysutil . todo ( " cellSysutilSetBgmPlaybackExtraParam() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2014-08-05 18:06:40 +04:00
2019-11-07 16:30:40 +02:00
error_code cellSysutilRegisterCallbackDispatcher ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilRegisterCallbackDispatcher() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilUnregisterCallbackDispatcher ( )
2017-02-12 21:03:08 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilUnregisterCallbackDispatcher() " ) ;
return CELL_OK ;
2017-02-12 21:03:08 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilPacketRead ( )
2017-02-12 21:03:08 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilPacketRead() " ) ;
return CELL_OK ;
2017-02-12 21:03:08 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilPacketWrite ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilPacketWrite() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilPacketBegin ( )
2017-02-12 21:03:08 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilPacketBegin() " ) ;
return CELL_OK ;
2017-02-12 21:03:08 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilPacketEnd ( )
2017-02-12 21:03:08 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilPacketEnd() " ) ;
return CELL_OK ;
2017-02-12 21:03:08 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGameDataAssignVmc ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilGameDataAssignVmc() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGameDataExit ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilGameDataExit() " ) ;
return CELL_OK ;
2014-04-24 22:14:40 -07:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGameExit_I ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilGameExit_I() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGamePowerOff_I ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilGamePowerOff_I() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilGameReboot_I ( )
2015-08-01 19:14:49 +03:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilGameReboot_I() " ) ;
return CELL_OK ;
2015-08-01 19:14:49 +03:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilSharedMemoryAlloc ( )
2017-04-05 00:12:15 +02:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilSharedMemoryAlloc() " ) ;
return CELL_OK ;
2017-04-05 00:12:15 +02:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilSharedMemoryFree ( )
2017-04-05 00:12:15 +02:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilSharedMemoryFree() " ) ;
return CELL_OK ;
2017-04-05 00:12:15 +02:00
}
2019-11-07 16:30:40 +02:00
error_code cellSysutilNotification ( )
2019-04-05 20:14:01 +02:00
{
2019-09-02 14:41:57 +03:00
cellSysutil . todo ( " cellSysutilNotification() " ) ;
return CELL_OK ;
2019-04-05 20:14:01 +02:00
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml7Element11AppendChildERS0_ ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8DocumentC1Ev ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8DocumentD1Ev ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document5ClearEv ( )
2017-07-21 17:41:11 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document5WriteEPFiPKvjPvES3_ ( )
2017-12-02 21:34:21 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document12RegisterFileEPKvjPNS_4FileE ( )
2017-12-02 21:34:21 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document13CreateElementEPKciPNS_7ElementE ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document14SetHeaderMagicEPKc ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document16CreateFromBufferEPKvjb ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN4cxml8Document18GetDocumentElementEv ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml4File7GetAddrEv ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml7Element12GetAttributeEPKcPNS_9AttributeE ( )
2017-04-05 00:12:15 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml7Element13GetFirstChildEv ( )
2017-07-21 17:41:11 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml7Element14GetNextSiblingEv ( )
2017-04-05 00:12:15 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml9Attribute6GetIntEPi ( )
2017-04-05 00:12:15 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZNK4cxml9Attribute7GetFileEPNS_4FileE ( )
2017-04-05 00:12:15 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil6SetIntERKN4cxml7ElementEPKci ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil6GetIntERKN4cxml7ElementEPKcPi ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil7SetFileERKN4cxml7ElementEPKcRKNS0_4FileE ( )
2017-12-02 21:34:21 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil8GetFloatERKN4cxml7ElementEPKcPf ( )
2017-07-21 17:41:11 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil8SetFloatERKN4cxml7ElementEPKcf ( )
2019-04-05 20:14:01 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil9GetStringERKN4cxml7ElementEPKcPS5_Pj ( )
2017-04-05 00:12:15 +02:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil9SetStringERKN4cxml7ElementEPKcS5_ ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil16CheckElementNameERKN4cxml7ElementEPKc ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil16FindChildElementERKN4cxml7ElementEPKcS5_S5_ ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN8cxmlutil7GetFileERKN4cxml7ElementEPKcPNS0_4FileE ( )
2017-01-27 02:17:31 +01:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN16sysutil_cxmlutil11FixedMemory3EndEi ( )
2017-08-12 16:32:00 -05:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN16sysutil_cxmlutil11FixedMemory5BeginEi ( )
2017-08-12 16:32:00 -05:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN16sysutil_cxmlutil11FixedMemory8AllocateEN4cxml14AllocationTypeEPvS3_jPS3_Pj ( )
2017-08-12 16:32:00 -05:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN16sysutil_cxmlutil12PacketWriter5WriteEPKvjPv ( )
2017-08-12 16:32:00 -05:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code _ZN16sysutil_cxmlutil12PacketWriterC1EiiRN4cxml8DocumentE ( )
2017-08-12 16:32:00 -05:00
{
UNIMPLEMENTED_FUNC ( cellSysutil ) ;
return CELL_OK ;
}
2019-11-07 16:30:40 +02:00
error_code cellSysutil_E1EC7B6A ( vm : : ptr < u32 > unk )
2017-02-12 21:03:08 +03:00
{
cellSysutil . todo ( " cellSysutil_E1EC7B6A(unk=*0x%x) " , unk ) ;
* unk = 0 ;
return CELL_OK ;
}
2015-01-05 02:07:46 +03:00
extern void cellSysutil_SaveData_init ( ) ;
2015-04-13 17:05:44 +03:00
extern void cellSysutil_GameData_init ( ) ;
2015-04-15 21:33:44 +03:00
extern void cellSysutil_MsgDialog_init ( ) ;
2015-07-30 04:43:03 +03:00
extern void cellSysutil_OskDialog_init ( ) ;
2015-07-31 02:11:43 +03:00
extern void cellSysutil_Storage_init ( ) ;
2015-08-01 19:14:49 +03:00
extern void cellSysutil_Sysconf_init ( ) ;
extern void cellSysutil_SysutilAvc_init ( ) ;
extern void cellSysutil_WebBrowser_init ( ) ;
extern void cellSysutil_AudioOut_init ( ) ;
extern void cellSysutil_VideoOut_init ( ) ;
2019-11-05 18:09:03 +03:00
extern void cellSysutil_SysCache_init ( ) ;
2015-01-05 02:07:46 +03:00
2016-03-21 22:43:03 +03:00
DECLARE ( ppu_module_manager : : cellSysutil ) ( " cellSysutil " , [ ] ( )
2014-09-11 23:18:19 +04:00
{
2015-04-13 17:05:44 +03:00
cellSysutil_SaveData_init ( ) ; // cellSaveData functions
cellSysutil_GameData_init ( ) ; // cellGameData, cellHddGame functions
2015-04-15 21:33:44 +03:00
cellSysutil_MsgDialog_init ( ) ; // cellMsgDialog functions
2015-07-30 04:43:03 +03:00
cellSysutil_OskDialog_init ( ) ; // cellOskDialog functions
2015-07-31 02:11:43 +03:00
cellSysutil_Storage_init ( ) ; // cellStorage functions
2015-08-01 19:14:49 +03:00
cellSysutil_Sysconf_init ( ) ; // cellSysconf functions
cellSysutil_SysutilAvc_init ( ) ; // cellSysutilAvc functions
cellSysutil_WebBrowser_init ( ) ; // cellWebBrowser, cellWebComponent functions
cellSysutil_AudioOut_init ( ) ; // cellAudioOut functions
cellSysutil_VideoOut_init ( ) ; // cellVideoOut functions
2019-11-05 18:09:03 +03:00
cellSysutil_SysCache_init ( ) ; // cellSysCache functions
2015-04-13 17:05:44 +03:00
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , _cellSysutilGetSystemParamInt ) ;
2015-02-20 16:58:40 +03:00
REG_FUNC ( cellSysutil , cellSysutilGetSystemParamInt ) ;
REG_FUNC ( cellSysutil , cellSysutilGetSystemParamString ) ;
REG_FUNC ( cellSysutil , cellSysutilCheckCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilRegisterCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilUnregisterCallback ) ;
REG_FUNC ( cellSysutil , cellSysutilGetBgmPlaybackStatus ) ;
REG_FUNC ( cellSysutil , cellSysutilGetBgmPlaybackStatus2 ) ;
REG_FUNC ( cellSysutil , cellSysutilEnableBgmPlayback ) ;
REG_FUNC ( cellSysutil , cellSysutilEnableBgmPlaybackEx ) ;
REG_FUNC ( cellSysutil , cellSysutilDisableBgmPlayback ) ;
REG_FUNC ( cellSysutil , cellSysutilDisableBgmPlaybackEx ) ;
2015-08-01 19:14:49 +03:00
REG_FUNC ( cellSysutil , cellSysutilSetBgmPlaybackExtraParam ) ;
2015-02-20 16:58:40 +03:00
2015-08-01 19:14:49 +03:00
REG_FUNC ( cellSysutil , cellSysutilRegisterCallbackDispatcher ) ;
2017-02-12 21:03:08 +03:00
REG_FUNC ( cellSysutil , cellSysutilUnregisterCallbackDispatcher ) ;
REG_FUNC ( cellSysutil , cellSysutilPacketRead ) ;
2015-08-01 19:14:49 +03:00
REG_FUNC ( cellSysutil , cellSysutilPacketWrite ) ;
2017-02-12 21:03:08 +03:00
REG_FUNC ( cellSysutil , cellSysutilPacketBegin ) ;
REG_FUNC ( cellSysutil , cellSysutilPacketEnd ) ;
2015-02-18 19:22:06 +03:00
2015-08-01 19:14:49 +03:00
REG_FUNC ( cellSysutil , cellSysutilGameDataAssignVmc ) ;
REG_FUNC ( cellSysutil , cellSysutilGameDataExit ) ;
REG_FUNC ( cellSysutil , cellSysutilGameExit_I ) ;
REG_FUNC ( cellSysutil , cellSysutilGamePowerOff_I ) ;
REG_FUNC ( cellSysutil , cellSysutilGameReboot_I ) ;
2017-01-27 02:17:31 +01:00
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , cellSysutilSharedMemoryAlloc ) ;
REG_FUNC ( cellSysutil , cellSysutilSharedMemoryFree ) ;
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , cellSysutilNotification ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml7Element11AppendChildERS0_ ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8DocumentC1Ev ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8DocumentD1Ev ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document5ClearEv ) ;
2017-12-02 21:34:21 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document5WriteEPFiPKvjPvES3_ ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document12RegisterFileEPKvjPNS_4FileE ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN4cxml8Document13CreateElementEPKciPNS_7ElementE ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document14SetHeaderMagicEPKc ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document16CreateFromBufferEPKvjb ) ;
REG_FUNC ( cellSysutil , _ZN4cxml8Document18GetDocumentElementEv ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml4File7GetAddrEv ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element12GetAttributeEPKcPNS_9AttributeE ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element13GetFirstChildEv ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZNK4cxml7Element14GetNextSiblingEv ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml9Attribute6GetIntEPi ) ;
REG_FUNC ( cellSysutil , _ZNK4cxml9Attribute7GetFileEPNS_4FileE ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil6SetIntERKN4cxml7ElementEPKci ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil6GetIntERKN4cxml7ElementEPKcPi ) ;
2017-12-02 21:34:21 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil7SetFileERKN4cxml7ElementEPKcRKNS0_4FileE ) ;
2017-07-21 17:41:11 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil8GetFloatERKN4cxml7ElementEPKcPf ) ;
2019-04-05 20:14:01 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil8SetFloatERKN4cxml7ElementEPKcf ) ;
2017-04-05 00:12:15 +02:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil9GetStringERKN4cxml7ElementEPKcPS5_Pj ) ;
2017-01-27 02:17:31 +01:00
REG_FUNC ( cellSysutil , _ZN8cxmlutil9SetStringERKN4cxml7ElementEPKcS5_ ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil16CheckElementNameERKN4cxml7ElementEPKc ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil16FindChildElementERKN4cxml7ElementEPKcS5_S5_ ) ;
REG_FUNC ( cellSysutil , _ZN8cxmlutil7GetFileERKN4cxml7ElementEPKcPNS0_4FileE ) ;
2018-03-02 18:51:21 +02:00
2017-08-12 16:32:00 -05:00
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory3EndEi ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory5BeginEi ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil11FixedMemory8AllocateEN4cxml14AllocationTypeEPvS3_jPS3_Pj ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil12PacketWriter5WriteEPKvjPv ) ;
REG_FUNC ( cellSysutil , _ZN16sysutil_cxmlutil12PacketWriterC1EiiRN4cxml8DocumentE ) ;
2018-03-02 18:51:21 +02:00
2017-02-12 21:03:08 +03:00
REG_FNID ( cellSysutil , 0xE1EC7B6A , cellSysutil_E1EC7B6A ) ;
2015-02-18 19:22:06 +03:00
} ) ;