diff options
Diffstat (limited to 'apps/plugin.c')
-rw-r--r-- | apps/plugin.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/apps/plugin.c b/apps/plugin.c index 670770dfc6..e0766e47bf 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -809,6 +809,7 @@ static const struct plugin_api rockbox_api = { | |||
809 | onplay_show_playlist_menu, | 809 | onplay_show_playlist_menu, |
810 | queue_remove_from_head, | 810 | queue_remove_from_head, |
811 | core_set_keyremap, | 811 | core_set_keyremap, |
812 | plugin_reserve_buffer, | ||
812 | }; | 813 | }; |
813 | 814 | ||
814 | static int plugin_buffer_handle; | 815 | static int plugin_buffer_handle; |
@@ -963,6 +964,27 @@ int plugin_load(const char* plugin, const void* parameter) | |||
963 | return rc; | 964 | return rc; |
964 | } | 965 | } |
965 | 966 | ||
967 | /* For Terminate Stay Resident plugins | ||
968 | * Locks buffer_size bytes of the plugin buffer | ||
969 | * freed on plugin exit; call plugin_get_buffer first then reserve all | ||
970 | * or a portion with plugin_reserve_buffer() | ||
971 | * Returns size of buffer remaining */ | ||
972 | size_t plugin_reserve_buffer(size_t buffer_size) | ||
973 | { | ||
974 | size_t locked_size = 0; | ||
975 | |||
976 | if (current_plugin_handle) | ||
977 | { | ||
978 | locked_size = ALIGN_UP(plugin_size + buffer_size, 0x8); | ||
979 | if (locked_size > PLUGIN_BUFFER_SIZE) | ||
980 | locked_size = PLUGIN_BUFFER_SIZE; | ||
981 | |||
982 | plugin_size = locked_size; | ||
983 | } | ||
984 | |||
985 | return (PLUGIN_BUFFER_SIZE - locked_size); | ||
986 | } | ||
987 | |||
966 | /* Returns a pointer to the portion of the plugin buffer that is not already | 988 | /* Returns a pointer to the portion of the plugin buffer that is not already |
967 | being used. If no plugin is loaded, returns the entire plugin buffer */ | 989 | being used. If no plugin is loaded, returns the entire plugin buffer */ |
968 | void* plugin_get_buffer(size_t *buffer_size) | 990 | void* plugin_get_buffer(size_t *buffer_size) |