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"