diff --git a/apps/plugin.c b/apps/plugin.c index 66d614ec58..151cb1d04d 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -308,7 +308,6 @@ static const struct plugin_api rockbox_api = { mutex_init, mutex_lock, mutex_unlock, - align_buffer, #endif reset_poweroff_timer, diff --git a/apps/plugin.h b/apps/plugin.h index 6b198686f2..7bb1c7fc5f 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -126,12 +126,12 @@ void* plugin_get_buffer(size_t *buffer_size); #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 135 +#define PLUGIN_API_VERSION 136 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 135 +#define PLUGIN_MIN_API_VERSION 136 /* plugin return codes */ enum plugin_status { @@ -419,7 +419,6 @@ struct plugin_api { void (*mutex_init)(struct mutex *m); void (*mutex_lock)(struct mutex *m); void (*mutex_unlock)(struct mutex *m); - size_t (*align_buffer)(void **start, size_t size, size_t align); #endif void (*reset_poweroff_timer)(void); @@ -884,13 +883,5 @@ enum plugin_status plugin_start(const struct plugin_api* rockbox, const void* pa #endif /* CACHE_FUNCTION_WRAPPERS */ -#ifndef ALIGN_BUFFER_WRAPPER -#define ALIGN_BUFFER_WRAPPER(api) \ - size_t align_buffer(void **start, size_t size, size_t align) \ - { \ - return (api)->align_buffer(start, size, align); \ - } -#endif /* ALIGN_BUFFER_WRAPPER */ - #endif /* __PCTOOL__ */ #endif diff --git a/apps/plugins/lib/wrappers.h b/apps/plugins/lib/wrappers.h index 2eb4ea025e..385cd5d613 100644 --- a/apps/plugins/lib/wrappers.h +++ b/apps/plugins/lib/wrappers.h @@ -36,9 +36,6 @@ #define cpu_boost rb->cpu_boost #endif #define yield rb->yield -#if CONFIG_CODEC == SWCODEC -#define align_buffer rb->align_buffer -#endif #endif diff --git a/apps/plugins/mpegplayer/alloc.c b/apps/plugins/mpegplayer/alloc.c index c4f936ee14..6b50b8f24c 100644 --- a/apps/plugins/mpegplayer/alloc.c +++ b/apps/plugins/mpegplayer/alloc.c @@ -27,6 +27,7 @@ #include "plugin.h" #include "mpegplayer.h" +#include /* Main allocator */ static off_t mem_ptr; @@ -132,8 +133,8 @@ bool mpeg_alloc_init(unsigned char *buf, size_t mallocsize) mem_ptr = 0; /* Cache-align buffer or 4-byte align */ mallocbuf = buf; - bufsize = align_buffer(PUN_PTR(void **, &mallocbuf), - mallocsize, CACHEALIGN_UP(4)); + bufsize = mallocsize; + ALIGN_BUFFER(mallocbuf, bufsize, CACHEALIGN_UP(4)); /* Separate allocator for video */ mpeg2_mem_ptr = 0; diff --git a/apps/plugins/mpegplayer/disk_buf.c b/apps/plugins/mpegplayer/disk_buf.c index c008139356..defd8ef81d 100644 --- a/apps/plugins/mpegplayer/disk_buf.c +++ b/apps/plugins/mpegplayer/disk_buf.c @@ -22,6 +22,7 @@ ****************************************************************************/ #include "plugin.h" #include "mpegplayer.h" +#include static struct mutex disk_buf_mtx SHAREDBSS_ATTR; static struct event_queue disk_buf_queue SHAREDBSS_ATTR; @@ -859,7 +860,7 @@ bool disk_buf_init(void) return false; #ifdef PROC_NEEDS_CACHEALIGN - disk_buf.size = CACHEALIGN_BUFFER(&disk_buf.start, disk_buf.size); + CACHEALIGN_BUFFER(disk_buf.start, disk_buf.size); disk_buf.start = UNCACHED_ADDR(disk_buf.start); #endif disk_buf.size -= DISK_GUARDBUF_SIZE; diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index cb5d4edb76..0b5bb518fe 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -283,7 +283,6 @@ CONFIG_KEYPAD == SANSA_M200_PAD const struct plugin_api* rb; CACHE_FUNCTION_WRAPPERS(rb); -ALIGN_BUFFER_WRAPPER(rb); /* One thing we can do here for targets with remotes is having a display * always on the remote instead of always forcing a popup on the main display */ diff --git a/apps/plugins/pictureflow.c b/apps/plugins/pictureflow.c index 83ab1ddef0..a3552836fa 100644 --- a/apps/plugins/pictureflow.c +++ b/apps/plugins/pictureflow.c @@ -2144,8 +2144,7 @@ enum plugin_status plugin_start(const struct plugin_api *api, rb->cpu_boost(true); #endif plugin_buf = rb->plugin_get_buffer(&plugin_buf_size); - plugin_buf_size = rb->align_buffer(PUN_PTR(void**,&plugin_buf), - plugin_buf_size, 4); + ALIGN_BUFFER(plugin_buf, plugin_buf_size, 4); ret = main(); #ifdef HAVE_ADJUSTABLE_CPU_FREQ rb->cpu_boost(false); diff --git a/apps/recorder/resize.c b/apps/recorder/resize.c index 99ccc84d55..2e6c3ff266 100644 --- a/apps/recorder/resize.c +++ b/apps/recorder/resize.c @@ -31,6 +31,7 @@ * ****************************************************************************/ +#include #include #include #include @@ -616,10 +617,7 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, uint8_t sc_buf[(needed <= len || needed > MAX_SC_STACK_ALLOC) ? 0 : needed]; #endif -#if CONFIG_CODEC == SWCODEC - len = (unsigned int)align_buffer(PUN_PTR(void**, &buf), len, - sizeof(uint32_t)); -#endif + ALIGN_BUFFER(buf, len, sizeof(uint32_t)); if (needed > len) { #if MAX_SC_STACK_ALLOC diff --git a/docs/PLUGIN_API.new b/docs/PLUGIN_API.new index 1f24ac08bc..b4790e3ea6 100644 --- a/docs/PLUGIN_API.new +++ b/docs/PLUGIN_API.new @@ -39,15 +39,6 @@ bool action_userabort(int timeout) \return \description -size_t align_buffer(void **start, size_t size, size_t align) - \group kernel/ system - \conditions (CONFIG_CODEC == SWCODEC) - \param start - \param size - \param align - \return - \description - const char *appsversion \return version of the plugin API \description diff --git a/firmware/export/general.h b/firmware/export/general.h index 7bcd08da00..d1bd14558c 100644 --- a/firmware/export/general.h +++ b/firmware/export/general.h @@ -37,6 +37,4 @@ int make_list_from_caps32(unsigned long src_mask, unsigned long caps_mask, unsigned long *caps_list); -size_t align_buffer(void **start, size_t size, size_t align); - #endif /* GENERAL_H */ diff --git a/firmware/export/system.h b/firmware/export/system.h index 8ebd30ac4e..cc2a08db2e 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -110,6 +110,17 @@ int get_cpu_boost_counter(void); #define ALIGN_DOWN(n, a) ((n)/(a)*(a)) #define ALIGN_UP(n, a) ALIGN_DOWN((n)+((a)-1),a) +/* align start and end of buffer to nearest integer multiple of a */ +#define ALIGN_BUFFER(ptr,len,align) \ +{\ + uintptr_t tmp_ptr1 = (uintptr_t)ptr; \ + uintptr_t tmp_ptr2 = tmp_ptr1 + len;\ + tmp_ptr1 = ALIGN_UP(tmp_ptr1,align); \ + tmp_ptr2 = ALIGN_DOWN(tmp_ptr2,align); \ + len = tmp_ptr2 - tmp_ptr1; \ + ptr = (typeof(ptr))tmp_ptr1; \ +} + /* live endianness conversion */ #ifdef ROCKBOX_LITTLE_ENDIAN #define letoh16(x) (x) @@ -275,7 +286,7 @@ static inline uint32_t swap_odd_even32(uint32_t value) __attribute__((aligned(CACHEALIGN_UP(x)))) /* Aligns a buffer pointer and size to proper boundaries */ #define CACHEALIGN_BUFFER(start, size) \ - ({ align_buffer(PUN_PTR(void **, (start)), (size), CACHEALIGN_SIZE); }) + ALIGN_BUFFER((start), (size), CACHEALIGN_SIZE) #else /* ndef PROC_NEEDS_CACHEALIGN */ @@ -286,8 +297,7 @@ static inline uint32_t swap_odd_even32(uint32_t value) #define CACHEALIGN_UP(x) (x) #define CACHEALIGN_DOWN(x) (x) /* Make no adjustments */ -#define CACHEALIGN_BUFFER(start, size) \ - ({ (void)(start); (size); }) +#define CACHEALIGN_BUFFER(start, size) #endif /* PROC_NEEDS_CACHEALIGN */ diff --git a/firmware/general.c b/firmware/general.c index 1c2abe1256..ff6594086e 100644 --- a/firmware/general.c +++ b/firmware/general.c @@ -78,23 +78,3 @@ int make_list_from_caps32(unsigned long src_mask, return count; } /* make_list_from_caps32 */ - -/* 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; -}