summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2014-08-08 03:23:29 -0400
committerMichael Sevakis <jethead71@rockbox.org>2014-08-08 03:23:29 -0400
commit9a3400a4a667e32d1dd0b50364b083787ff63320 (patch)
tree5676a100428362373b96249d2891c131f9fcf44b
parent4ea4cdfc11a87927d696d4966c6c433bd5e6bf90 (diff)
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
-rw-r--r--firmware/drivers/ata.c68
-rw-r--r--firmware/kernel/thread.c11
-rw-r--r--firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c8
-rw-r--r--firmware/target/arm/pp/thread-pp.c5
-rw-r--r--flash/bootbox/main.c3
5 files changed, 7 insertions, 88 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 4b365a50ab..355ff37900 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 5bb6eb5522..c148f6b76e 100644
--- a/firmware/kernel/thread.c
+++ b/firmware/kernel/thread.c
@@ -189,10 +189,6 @@ void switch_thread(void)
#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 @@ unsigned int wakeup_thread_(struct thread_entry **list
{
/* 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 @@ void switch_thread(void)
#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 @@ void switch_thread(void)
* 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 511a5518ff..34b114910a 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_off(void)
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 b2e7fb018d..184d243e8d 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 ff6b8374e9..ac90d60336 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"