123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #ifndef __ALIGNMEM_H
- #define __ALIGNMEM_H
- #ifndef __ASSEMBLY__
- #include <asm/cache.h>
- #include <malloc.h>
- #define PAD_COUNT(s, pad) (((s) - 1) / (pad) + 1)
- #define PAD_SIZE(s, pad) (PAD_COUNT(s, pad) * pad)
- #define ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, pad) \
- char __##name[ROUND(PAD_SIZE((size) * sizeof(type), pad), align) \
- + (align - 1)]; \
- \
- type *name = (type *)ALIGN((uintptr_t)__##name, align)
- #define ALLOC_ALIGN_BUFFER(type, name, size, align) \
- ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, 1)
- #define ALLOC_CACHE_ALIGN_BUFFER_PAD(type, name, size, pad) \
- ALLOC_ALIGN_BUFFER_PAD(type, name, size, ARCH_DMA_MINALIGN, pad)
- #define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) \
- ALLOC_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
- #define DEFINE_ALIGN_BUFFER(type, name, size, align) \
- static char __##name[ALIGN(size * sizeof(type), align)] \
- __aligned(align); \
- \
- static type *name = (type *)__##name
- #define DEFINE_CACHE_ALIGN_BUFFER(type, name, size) \
- DEFINE_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
- static inline void *malloc_cache_aligned(size_t size)
- {
- return memalign(ARCH_DMA_MINALIGN, ALIGN(size, ARCH_DMA_MINALIGN));
- }
- #endif
- #endif
|