diff options
Diffstat (limited to 'firmware/ata_idle_notify.c')
-rw-r--r-- | firmware/ata_idle_notify.c | 61 |
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 |