Fix some more straggling stuff

* HWCODEC bootloaders

* Remove references to thread structures outside the kernel. They are
private and should not be used elsewhere. The mrobe-100 is an offender
that gets squashed.

* The ata.c hack stuff for large sector disks on iPod Video gets squashed
for the same reason. I will no longer maintain it, period; please find
the real reason for its difficulties.

Change-Id: Iae1a675beac887754eb3cc59b560c941077523f5
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 4b365a5..355ff37 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -79,74 +79,6 @@
 static unsigned int ata_thread_id = 0;
 #endif
 
-#if defined(MAX_PHYS_SECTOR_SIZE) && MEMORYSIZE == 64
-/* Hack - what's the deal with 5g? */
-struct ata_lock
-{
-    struct thread_entry *thread;
-    int count;
-    volatile unsigned char locked;
-    IF_COP( struct corelock cl; )
-};
-
-static void ata_lock_init(struct ata_lock *l)
-{
-    corelock_init(&l->cl);
-    l->locked = 0;
-    l->count = 0;
-    l->thread = NULL;
-}
-
-static void ata_lock_lock(struct ata_lock *l)
-{
-    struct thread_entry * const current = thread_self_entry();
-
-    if (current == l->thread)
-    {
-        l->count++;
-        return;
-    }
-
-    corelock_lock(&l->cl);
-
-    IF_PRIO( current->skip_count = -1; )
-
-    while (l->locked != 0)
-    {
-        corelock_unlock(&l->cl);
-        switch_thread();
-        corelock_lock(&l->cl);
-    }
-
-    l->locked = 1;
-    l->thread = current;
-    corelock_unlock(&l->cl);
-}
-
-static void ata_lock_unlock(struct ata_lock *l)
-{
-    if (l->count > 0)
-    {
-        l->count--;
-        return;
-    }
-
-    corelock_lock(&l->cl);
-
-    IF_PRIO( l->thread->skip_count = 0; )
-
-    l->thread = NULL;
-    l->locked = 0;
-
-    corelock_unlock(&l->cl);
-}
-
-#define mutex           ata_lock
-#define mutex_init      ata_lock_init
-#define mutex_lock      ata_lock_lock
-#define mutex_unlock    ata_lock_unlock
-#endif /* MAX_PHYS_SECTOR_SIZE */
-
 #if defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB)
 #define ALLOW_USB_SPINDOWN
 #endif
diff --git a/firmware/kernel/thread.c b/firmware/kernel/thread.c
index 5bb6eb5..c148f6b 100644
--- a/firmware/kernel/thread.c
+++ b/firmware/kernel/thread.c
@@ -189,10 +189,6 @@
 #include "thread-pp.c"
 #endif /* CPU_PP */
 
-#ifndef IF_NO_SKIP_YIELD
-#define IF_NO_SKIP_YIELD(...)
-#endif
-
 /*
  * End Processor-specific section
  ***************************************************************************/
@@ -1014,8 +1010,7 @@
         {
             /* No PIP - just boost the thread by aging */
 #ifdef HAVE_PRIORITY_SCHEDULING
-            IF_NO_SKIP_YIELD( if (thread->skip_count != -1) )
-                thread->skip_count = thread->priority;
+            thread->skip_count = thread->priority;
 #endif /* HAVE_PRIORITY_SCHEDULING */
             remove_from_list_l(list, thread);
             core_schedule_wakeup(thread);
@@ -1303,9 +1298,8 @@
 #endif
 
 #ifdef HAVE_PRIORITY_SCHEDULING
-    IF_NO_SKIP_YIELD( if (thread->skip_count != -1) )
     /* Reset the value of thread's skip count */
-        thread->skip_count = 0;
+    thread->skip_count = 0;
 #endif
 
     for (;;)
@@ -1365,7 +1359,6 @@
                  * processes aging; they must give up the processor by going
                  * off the run list. */
                 if (LIKELY(priority <= max) ||
-                    IF_NO_SKIP_YIELD( thread->skip_count == -1 || )
                     (priority > PRIORITY_REALTIME &&
                      (diff = priority - max,
                          ++thread->skip_count > diff*diff)))
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
index 511a551..34b1149 100644
--- a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
+++ b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
@@ -500,14 +500,14 @@
 
 void lcd_remote_on(void)
 {
-    /* Only wake the remote thread if it's in the blocked state. */
-    struct thread_entry *rc_thread = thread_id_entry(remote_thread_id);
-    if (rc_thread->state == STATE_BLOCKED || (rc_status & RC_FORCE_DETECT))
+    if (semaphore_wait(&rc_thread_wakeup, 0) == OBJ_WAIT_TIMEDOUT ||
+        (rc_status & RC_FORCE_DETECT))
     {
         rc_status &= ~RC_FORCE_DETECT;
         rc_status &= ~RC_POWER_OFF;
-        semaphore_release(&rc_thread_wakeup);
     }
+
+    semaphore_release(&rc_thread_wakeup);
 }
 
 bool remote_detect(void)
diff --git a/firmware/target/arm/pp/thread-pp.c b/firmware/target/arm/pp/thread-pp.c
index b2e7fb0..184d243 100644
--- a/firmware/target/arm/pp/thread-pp.c
+++ b/firmware/target/arm/pp/thread-pp.c
@@ -21,11 +21,6 @@
  *
  ****************************************************************************/
 
-#if defined(MAX_PHYS_SECTOR_SIZE) && MEMORYSIZE == 64
-/* Support a special workaround object for large-sector disks */
-#define IF_NO_SKIP_YIELD(...) __VA_ARGS__
-#endif
-
 #if NUM_CORES == 1
 /* Single-core variants for FORCE_SINGLE_CORE */
 static inline void core_sleep(void)
diff --git a/flash/bootbox/main.c b/flash/bootbox/main.c
index ff6b837..ac90d60 100644
--- a/flash/bootbox/main.c
+++ b/flash/bootbox/main.c
@@ -29,8 +29,7 @@
 #include "cpu.h"
 #include "system.h"
 #include "lcd.h"
-#include "kernel.h"
-#include "thread.h"
+#include "../kernel-internal.h"
 #include "storage.h"
 #include "disk.h"
 #include "font.h"