From 9a3400a4a667e32d1dd0b50364b083787ff63320 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Fri, 8 Aug 2014 03:23:29 -0400 Subject: [PATCH] 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 --- firmware/drivers/ata.c | 68 ------------------- firmware/kernel/thread.c | 11 +-- .../arm/olympus/mrobe-100/lcd-remote-mr100.c | 8 +-- firmware/target/arm/pp/thread-pp.c | 5 -- flash/bootbox/main.c | 3 +- 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"