summaryrefslogtreecommitdiff
path: root/apps/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugin.c')
-rw-r--r--apps/plugin.c22
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
814static int plugin_buffer_handle; 815static 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 */
972size_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 */
968void* plugin_get_buffer(size_t *buffer_size) 990void* plugin_get_buffer(size_t *buffer_size)