diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2011-06-29 09:39:13 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2011-06-29 09:39:13 +0000 |
| commit | 5ff641fb8153e0a935317cca4330ca5ea4826c5a (patch) | |
| tree | 29c66631e6bfa3b4b837c623556a57ef0227159d | |
| parent | 40ff07140de0afa86ff3e0c29ee24e0e012f0c42 (diff) | |
| download | rockbox-5ff641fb8153e0a935317cca4330ca5ea4826c5a.zip rockbox-5ff641fb8153e0a935317cca4330ca5ea4826c5a.tar.gz rockbox-5ff641fb8153e0a935317cca4330ca5ea4826c5a.tar.bz2 rockbox-5ff641fb8153e0a935317cca4330ca5ea4826c5a.tar.xz | |
Do some adjustments to alleviate IRAM congestion on some targets from r30097. Include removing pointless IRAM declarations in pcmbuf.c because that callback code runs at a fairly relaxed pace. M5 is still the biggest problem.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30100 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/beep.c | 2 | ||||
| -rw-r--r-- | apps/pcmbuf.c | 41 | ||||
| -rw-r--r-- | firmware/export/pcm_mixer.h | 8 | ||||
| -rw-r--r-- | firmware/pcm_mixer.c | 2 |
4 files changed, 29 insertions, 24 deletions
diff --git a/apps/beep.c b/apps/beep.c index 7168472..a6244d9 100644 --- a/apps/beep.c +++ b/apps/beep.c @@ -94,7 +94,7 @@ static FORCE_INLINE void beep_generate(int count) /* Callback to generate the beep frames - also don't want inlining of call below in beep_play */ -static void __attribute__((noinline)) ICODE_ATTR +static void __attribute__((noinline)) beep_get_more(unsigned char **start, size_t *size) { int count = beep_count; diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index f2f94e3..5ef5179 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -76,18 +76,18 @@ struct chunkdesc ((bufsize) / PCMBUF_MINAVG_CHUNK) /* Size of the PCM buffer. */ -static size_t pcmbuf_size IDATA_ATTR = 0; -static char *pcmbuf_bufend IDATA_ATTR; -static char *pcmbuffer IDATA_ATTR; +static size_t pcmbuf_size = 0; +static char *pcmbuf_bufend; +static char *pcmbuffer; /* Current PCM buffer write index. */ -static size_t pcmbuffer_pos IDATA_ATTR; +static size_t pcmbuffer_pos; /* Amount pcmbuffer_pos will be increased.*/ -static size_t pcmbuffer_fillpos IDATA_ATTR; +static size_t pcmbuffer_fillpos; static struct chunkdesc *first_desc; /* Gapless playback */ -static bool track_transition IDATA_ATTR; +static bool track_transition; /* Fade effect */ static unsigned int fade_vol = MIX_AMP_UNITY; @@ -97,33 +97,33 @@ static bool soft_mode = false; #ifdef HAVE_CROSSFADE /* Crossfade buffer */ -static char *fadebuf IDATA_ATTR; +static char *fadebuf; /* Crossfade related state */ static bool crossfade_enabled; static bool crossfade_enable_request; static bool crossfade_mixmode; static bool crossfade_auto_skip; -static bool crossfade_active IDATA_ATTR; -static bool crossfade_track_change_started IDATA_ATTR; +static bool crossfade_active; +static bool crossfade_track_change_started; /* Track the current location for processing crossfade */ -static struct chunkdesc *crossfade_chunk IDATA_ATTR; -static size_t crossfade_sample IDATA_ATTR; +static struct chunkdesc *crossfade_chunk; +static size_t crossfade_sample; /* Counters for fading in new data */ -static size_t crossfade_fade_in_total IDATA_ATTR; -static size_t crossfade_fade_in_rem IDATA_ATTR; +static size_t crossfade_fade_in_total; +static size_t crossfade_fade_in_rem; #endif -static struct chunkdesc *read_chunk IDATA_ATTR; -static struct chunkdesc *read_end_chunk IDATA_ATTR; -static struct chunkdesc *write_chunk IDATA_ATTR; -static struct chunkdesc *write_end_chunk IDATA_ATTR; -static size_t last_chunksize IDATA_ATTR; +static struct chunkdesc *read_chunk; +static struct chunkdesc *read_end_chunk; +static struct chunkdesc *write_chunk; +static struct chunkdesc *write_end_chunk; +static size_t last_chunksize; -static size_t pcmbuf_unplayed_bytes IDATA_ATTR; -static size_t pcmbuf_watermark IDATA_ATTR; +static size_t pcmbuf_unplayed_bytes; +static size_t pcmbuf_watermark; static bool low_latency_mode = false; static bool flush_pcmbuf = false; @@ -635,7 +635,6 @@ bool pcmbuf_start_track_change(bool auto_skip) * buffer is empty except for uncommitted samples. Then they are committed * and sent to the PCM driver for playback. The third part performs the * operations involved in sending a new chunk to the DMA. */ -static void pcmbuf_pcm_callback(unsigned char** start, size_t* size) ICODE_ATTR; static void pcmbuf_pcm_callback(unsigned char** start, size_t* size) { { diff --git a/firmware/export/pcm_mixer.h b/firmware/export/pcm_mixer.h index 3b420e1..f430ce0 100644 --- a/firmware/export/pcm_mixer.h +++ b/firmware/export/pcm_mixer.h @@ -37,12 +37,18 @@ #if defined(CPU_COLDFIRE) || defined(CPU_PP) /* For Coldfire, it's just faster For PortalPlayer, this also avoids more expensive cache coherency */ -#define DOWNMIX_BUF_IBSS IBSS_ATTR +#define DOWNMIX_BUF_IBSS IBSS_ATTR #else /* Otherwise can't DMA from IRAM, IRAM is pointless or worse */ #define DOWNMIX_BUF_IBSS #endif +#if defined(CPU_COLDFIRE) || defined(CPU_PP) +#define MIXER_CALLBACK_ICODE ICODE_ATTR +#else +#define MIXER_CALLBACK_ICODE +#endif + /** Definitions **/ diff --git a/firmware/pcm_mixer.c b/firmware/pcm_mixer.c index e5625fb..69a43cf 100644 --- a/firmware/pcm_mixer.c +++ b/firmware/pcm_mixer.c @@ -218,7 +218,7 @@ static void mixer_pcm_callback(unsigned char **start, size_t *size) /* Buffering callback - calls sub-callbacks and mixes the data for next buffer to be sent from mixer_pcm_callback() */ -static void ICODE_ATTR mixer_buffer_callback(void) +static void MIXER_CALLBACK_ICODE mixer_buffer_callback(void) { downmix_index ^= 1; /* Next buffer */ |