diff --git a/frontend/drivers/platform_ctr.c b/frontend/drivers/platform_ctr.c index f93f166e44..3cccc7483e 100644 --- a/frontend/drivers/platform_ctr.c +++ b/frontend/drivers/platform_ctr.c @@ -278,5 +278,6 @@ frontend_ctx_driver_t frontend_ctx_ctr = { frontend_ctr_get_architecture, NULL, /* get_powerstate */ frontend_ctr_parse_drive_list, + NULL, /* get_mem_total */ "ctr", }; diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m index 996e1a5bf7..fb07cb50a5 100644 --- a/frontend/drivers/platform_darwin.m +++ b/frontend/drivers/platform_darwin.m @@ -681,5 +681,6 @@ frontend_ctx_driver_t frontend_ctx_darwin = { frontend_darwin_get_architecture, frontend_darwin_get_powerstate, frontend_darwin_parse_drive_list, + NULL, /* get_mem_total */ "darwin", }; diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index dccdb73d58..394fb1ded6 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -501,5 +501,6 @@ frontend_ctx_driver_t frontend_ctx_gx = { frontend_gx_get_architecture, NULL, /* get_powerstate */ frontend_gx_parse_drive_list, + NULL, /* get_mem_total */ "gx", }; diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 32efd9aac8..8760a03c06 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -1881,6 +1881,13 @@ static void frontend_linux_exitspawn(char *core_path, size_t core_path_size) } #endif +static uint32_t frontend_linux_get_mem_total(void) +{ + long pages = sysconf(_SC_PHYS_PAGES); + long page_size = sysconf(_SC_PAGE_SIZE); + return pages * page_size; +} + frontend_ctx_driver_t frontend_ctx_linux = { frontend_linux_get_env, /* environment_get */ frontend_linux_init, /* init */ @@ -1912,9 +1919,13 @@ frontend_ctx_driver_t frontend_ctx_linux = { frontend_linux_get_powerstate, #ifdef ANDROID frontend_android_parse_drive_list, /* parse_drive_list */ - "android", #else NULL, /* parse_drive_list */ - "linux", +#endif + frontend_linux_get_mem_total, +#ifdef ANDROID + "android" +#else + "linux" #endif }; diff --git a/frontend/drivers/platform_null.c b/frontend/drivers/platform_null.c index 4ecebaf8b4..3807e71fc1 100644 --- a/frontend/drivers/platform_null.c +++ b/frontend/drivers/platform_null.c @@ -35,5 +35,6 @@ frontend_ctx_driver_t frontend_ctx_null = { NULL, /* get_architecture */ NULL, /* get_powerstate */ NULL, /* parse_drive_list */ + NULL, /* get_mem_total */ "null", }; diff --git a/frontend/drivers/platform_ps3.c b/frontend/drivers/platform_ps3.c index 1863b89977..ed5292ee95 100644 --- a/frontend/drivers/platform_ps3.c +++ b/frontend/drivers/platform_ps3.c @@ -539,5 +539,6 @@ frontend_ctx_driver_t frontend_ctx_ps3 = { frontend_ps3_get_architecture, NULL, /* get_powerstate */ frontend_ps3_parse_drive_list, + NULL, /* get_mem_total */ "ps3", }; diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index cd843fc12b..94b9f008fd 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -404,6 +404,7 @@ frontend_ctx_driver_t frontend_ctx_psp = { frontend_psp_get_architecture, frontend_psp_get_powerstate, frontend_psp_parse_drive_list, + NULL, /* get_mem_total */ #ifdef VITA "vita", #else diff --git a/frontend/drivers/platform_qnx.c b/frontend/drivers/platform_qnx.c index 55a012543d..3236b56aa2 100644 --- a/frontend/drivers/platform_qnx.c +++ b/frontend/drivers/platform_qnx.c @@ -84,5 +84,6 @@ frontend_ctx_driver_t frontend_ctx_qnx = { frontend_qnx_get_architecture, NULL, /* get_powerstate */ NULL, /* parse_drive_list */ + NULL, /* get_mem_total */ "qnx", }; diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index 0bd492dab9..e874d4fb20 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -316,5 +316,6 @@ frontend_ctx_driver_t frontend_ctx_win32 = { frontend_win32_get_architecture, frontend_win32_get_powerstate, frontend_win32_parse_drive_list, + NULL, /* get_mem_total */ "win32", }; diff --git a/frontend/drivers/platform_xdk.cpp b/frontend/drivers/platform_xdk.cpp index 4b3250785c..cf89f525a2 100644 --- a/frontend/drivers/platform_xdk.cpp +++ b/frontend/drivers/platform_xdk.cpp @@ -1406,5 +1406,6 @@ frontend_ctx_driver_t frontend_ctx_xdk = { frontend_xdk_get_architecture, NULL, /* get_powerstate */ frontend_xdk_parse_drive_list, + NULL, /* get_mem_total */ "xdk", }; diff --git a/frontend/drivers/platform_xenon.c b/frontend/drivers/platform_xenon.c index d215d54414..6984a3e06e 100644 --- a/frontend/drivers/platform_xenon.c +++ b/frontend/drivers/platform_xenon.c @@ -84,5 +84,6 @@ frontend_ctx_driver_t frontend_ctx_qnx = { frontend_xenon_get_architecture, NULL, /* get_powerstate */ NULL, /* parse_drive_list */ + NULL, /* get_mem_total */ "xenon", }; diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 104ffa03a8..eff9f24cae 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -308,4 +308,12 @@ enum frontend_architecture frontend_driver_get_cpu_architecture(void) return FRONTEND_ARCH_NONE; return frontend->get_architecture(); } + +uint32_t frontend_driver_get_total_memory(void) +{ + frontend_ctx_driver_t *frontend = frontend_get_ptr(); + if (!frontend || !frontend->get_total_mem) + return 0; + return frontend->get_total_mem(); +} #endif diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index c35da1e2cc..c9b94a68d5 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -17,6 +17,7 @@ #ifndef __FRONTEND_DRIVER_H #define __FRONTEND_DRIVER_H +#include #include #include @@ -79,6 +80,7 @@ typedef struct frontend_ctx_driver enum frontend_architecture (*get_architecture)(void); enum frontend_powerstate (*get_powerstate)(int *seconds, int *percent); int (*parse_drive_list)(void*); + uint32_t (*get_total_mem)(void); const char *ident; @@ -152,6 +154,8 @@ bool frontend_driver_get_core_extension(char *s, size_t len); bool frontend_driver_get_salamander_basename(char *s, size_t len); +uint32_t frontend_driver_get_total_memory(void); + RETRO_END_DECLS #endif