diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2007-11-08 05:17:20 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2007-11-08 05:17:20 +0000 |
commit | 57d71e4267ecf66c84173f8ff3606091187b93b1 (patch) | |
tree | 7992814f1dfbcf7c5251cad0fdc6da9a5ebb70a3 /firmware/general.c | |
parent | 194a66ef83664b0ebd23b9bea031c67c3b80f6ac (diff) | |
download | rockbox-57d71e4267ecf66c84173f8ff3606091187b93b1.tar.gz rockbox-57d71e4267ecf66c84173f8ff3606091187b93b1.zip |
Add some CACHEALIGN_* macros and a helper function to assist in aligning data and buffers on PortalPlayer processors to cache line boundaries. They're noops when PROC_NEED_CACHEALIGN isn't defined. Go safe and increase the value to 32 since I'm not sure yet if 16 is sufficient - changing that is a one-liner. Add helper to plugin API which will be needed shortly.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15523 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/general.c')
-rw-r--r-- | firmware/general.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/firmware/general.c b/firmware/general.c index 7f4348046c..cc3710c8f3 100644 --- a/firmware/general.c +++ b/firmware/general.c @@ -17,6 +17,7 @@ * ****************************************************************************/ #include <limits.h> +#include "system.h" #include "config.h" #include "general.h" @@ -75,3 +76,26 @@ int make_list_from_caps32(unsigned long src_mask, return count; } /* make_list_from_caps32 */ + +/* Only needed for cache aligning atm */ +#ifdef PROC_NEEDS_CACHEALIGN +/* Align a buffer and size to a size boundary while remaining within + * the original boundaries */ +size_t align_buffer(void **start, size_t size, size_t align) +{ + void *newstart = *start; + void *newend = newstart + size; + + /* Align the end down and the start up */ + newend = (void *)ALIGN_DOWN((intptr_t)newend, align); + newstart = (void *)ALIGN_UP((intptr_t)newstart, align); + + /* Hmmm - too small for this */ + if (newend <= newstart) + return 0; + + /* Return adjusted pointer and size */ + *start = newstart; + return newend - newstart; +} +#endif /* PROC_NEEDS_CACHEALIGN */ |