mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
rbcodec: Hooks for target specific functions in dsp_process loop
Use them to move tick counting, yielding and coldfire macsr handling code to a rockbox specific file. Change-Id: Id7417dc98c08a342eba45ba56b044a276e50564b Reviewed-on: http://gerrit.rockbox.org/229 Tested-by: Nils Wallménius <nils@rockbox.org> Reviewed-by: Nils Wallménius <nils@rockbox.org>
This commit is contained in:
parent
00cf2ce711
commit
dbe5e5f2df
3 changed files with 74 additions and 47 deletions
|
@ -17,6 +17,58 @@
|
|||
* {,U}INT{8,16,32,64}_{MIN,MAX} */
|
||||
#include "system.h"
|
||||
|
||||
/* Structure to record some info during processing call */
|
||||
struct dsp_loop_context
|
||||
{
|
||||
long last_yield;
|
||||
#ifdef CPU_COLDFIRE
|
||||
unsigned long old_macsr;
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline void dsp_process_start(struct dsp_loop_context *ctx)
|
||||
{
|
||||
/* At least perform one yield before starting */
|
||||
ctx->last_yield = current_tick;
|
||||
yield();
|
||||
#if defined(CPU_COLDFIRE)
|
||||
/* set emac unit for dsp processing, and save old macsr, we're running in
|
||||
codec thread context at this point, so can't clobber it */
|
||||
ctx->old_macsr = coldfire_get_macsr();
|
||||
coldfire_set_macsr(EMAC_FRACTIONAL | EMAC_SATURATE);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void dsp_process_loop(struct dsp_loop_context *ctx)
|
||||
{
|
||||
/* Yield at least once each tick */
|
||||
long tick = current_tick;
|
||||
if (TIME_AFTER(tick, ctx->last_yield))
|
||||
{
|
||||
ctx->last_yield = tick;
|
||||
yield();
|
||||
}
|
||||
}
|
||||
|
||||
static inline void dsp_process_end(struct dsp_loop_context *ctx)
|
||||
{
|
||||
#if defined(CPU_COLDFIRE)
|
||||
/* set old macsr again */
|
||||
coldfire_set_macsr(ctx->old_macsr);
|
||||
#endif
|
||||
(void)ctx;
|
||||
}
|
||||
|
||||
#define DSP_PROCESS_START() \
|
||||
struct dsp_loop_context __ctx; \
|
||||
dsp_process_start(&__ctx)
|
||||
|
||||
#define DSP_PROCESS_LOOP() \
|
||||
dsp_process_loop(&__ctx)
|
||||
|
||||
#define DSP_PROCESS_END() \
|
||||
dsp_process_end(&__ctx)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue