2019-08-25 00:46:40 -04:00
|
|
|
#ifndef _MACROS_H_
|
|
|
|
#define _MACROS_H_
|
|
|
|
|
2019-11-03 14:36:27 -05:00
|
|
|
#include "platform_info.h"
|
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
|
|
|
|
|
|
|
|
#define GLUE(a, b) a ## b
|
|
|
|
#define GLUE2(a, b) GLUE(a, b)
|
|
|
|
|
|
|
|
// Avoid compiler warnings for unused variables
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define UNUSED __attribute__((unused))
|
|
|
|
#else
|
|
|
|
#define UNUSED
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Static assertions
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define STATIC_ASSERT(cond, msg) _Static_assert(cond, msg)
|
|
|
|
#else
|
|
|
|
#define STATIC_ASSERT(cond, msg) typedef char GLUE2(static_assertion_failed, __LINE__)[(cond) ? 1 : -1]
|
|
|
|
#endif
|
|
|
|
|
2019-11-03 14:36:27 -05:00
|
|
|
// Align to 8-byte boundary for DMA requirements
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define ALIGNED8 __attribute__((aligned(8)))
|
|
|
|
#else
|
|
|
|
#define ALIGNED8
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Align to 16-byte boundary for audio lib requirements
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define ALIGNED16 __attribute__((aligned(16)))
|
|
|
|
#else
|
|
|
|
#define ALIGNED16
|
|
|
|
#endif
|
|
|
|
|
2019-10-05 15:08:05 -04:00
|
|
|
// convert a virtual address to physical.
|
|
|
|
#define VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t)(addr) & 0x1FFFFFFF)
|
|
|
|
|
|
|
|
// convert a physical address to virtual.
|
|
|
|
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) | 0x80000000)
|
|
|
|
|
|
|
|
// another way of converting virtual to physical
|
|
|
|
#define VIRTUAL_TO_PHYSICAL2(addr) ((u8 *)(addr) - 0x80000000U)
|
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
#endif
|