summaryrefslogtreecommitdiff
path: root/firmware/ata_idle_notify.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2008-03-16 13:55:16 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2008-03-16 13:55:16 +0000
commit19c6e66c1353993659ee007a6c1792a6b0b7ba13 (patch)
tree1dd7f88282b2e543fb5b22458fcb2f3bf1c7eb80 /firmware/ata_idle_notify.c
parent478ba0afa11061a620e44cd9cc60debd955b1b33 (diff)
Implement the playback event handling as a system-wide multi-purpose event system. Unified mpeg.c and playback.c audio event handling. Converted ata_idle_notify to use the new event handling system also.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16682 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/ata_idle_notify.c')
-rw-r--r--firmware/ata_idle_notify.c61
1 files changed, 9 insertions, 52 deletions
diff --git a/firmware/ata_idle_notify.c b/firmware/ata_idle_notify.c
index 1fc6605ac6..a97c3538da 100644
--- a/firmware/ata_idle_notify.c
+++ b/firmware/ata_idle_notify.c
@@ -23,60 +23,31 @@
#include "kernel.h"
#include "string.h"
-#if USING_ATA_CALLBACK
-static ata_idle_notify ata_idle_notify_funcs[MAX_ATA_CALLBACKS];
-static int ata_callback_count = 0;
-#endif
-
-
-bool register_ata_idle_func(ata_idle_notify function)
+void register_ata_idle_func(ata_idle_notify function)
{
#if USING_ATA_CALLBACK
- int i;
- if (ata_callback_count >= MAX_ATA_CALLBACKS)
- return false;
- for (i=0; i<MAX_ATA_CALLBACKS; i++)
- {
- if (ata_idle_notify_funcs[i] == NULL)
- {
- ata_idle_notify_funcs[i] = function;
- ata_callback_count++;
- return true;
- }
- else if (ata_idle_notify_funcs[i] == function)
- return true;
- }
- return false;
+ add_event(DISK_EVENT_SPINUP, function);
#else
function(); /* just call the function now */
/* this _may_ cause problems later if the calling function
sets a variable expecting the callback to unset it, because
the callback will be run before this function exits, so before the var is set */
- return true;
#endif
}
#if USING_ATA_CALLBACK
void unregister_ata_idle_func(ata_idle_notify func, bool run)
{
- int i;
- for (i=0; i<MAX_ATA_CALLBACKS; i++)
- {
- if (ata_idle_notify_funcs[i] == func)
- {
- ata_idle_notify_funcs[i] = NULL;
- ata_callback_count--;
- if (run) func();
- }
- }
- return;
+ remove_event(DISK_EVENT_SPINUP, func);
+
+ if (run)
+ func();
}
bool call_ata_idle_notifys(bool force)
{
- int i;
static int lock_until = 0;
- ata_idle_notify function;
+
if (!force)
{
if (TIME_BEFORE(current_tick,lock_until) )
@@ -84,22 +55,8 @@ bool call_ata_idle_notifys(bool force)
}
lock_until = current_tick + 30*HZ;
- for (i = 0; i < MAX_ATA_CALLBACKS; i++)
- {
- if (ata_idle_notify_funcs[i])
- {
- function = ata_idle_notify_funcs[i];
- ata_idle_notify_funcs[i] = NULL;
- function();
- ata_callback_count--;
- }
- }
+ send_event(DISK_EVENT_SPINUP, true, NULL);
+
return true;
}
-
-void ata_idle_notify_init(void)
-{
- ata_callback_count = 0;
- memset(ata_idle_notify_funcs, 0, sizeof(ata_idle_notify_funcs));
-}
#endif