#ifndef RVL_SDK_OS_CACHE_H
#define RVL_SDK_OS_CACHE_H
#include "common.h"
#ifdef __cplusplus
extern "C" {
#endif

#define OS_CACHE_BASE 0xE0000000
// Forward declarations
typedef struct OSContext;

void DCEnable(void);
void DCInvalidateRange(const void *buf, u32 len);
void DCFlushRange(const void *buf, u32 len);
void DCStoreRange(const void *buf, u32 len);
void DCFlushRangeNoSync(const void *buf, u32 len);
void DCStoreRangeNoSync(const void *buf, u32 len);
void DCZeroRange(const void *buf, u32 len);

void ICInvalidateRange(const void *buf, u32 len);
void ICFlashInvalidate(void);
void ICEnable(void);

void LCEnable(void);
void LCDisable(void);
void LCLoadBlocks(void *dst, const void *src, u32 len);
void LCStoreBlocks(void *dst, const void *src, u32 len);
u32 LCStoreData(void *dst, const void *src, u32 len);
u32 LCQueueLength(void);
void LCQueueWait(u32 n);

void L2Enable(void);
void L2Disable(void);
void L2GlobalInvalidate(void);

void DMAErrorHandler(u8 error, OSContext *ctx, u32 dsisr, u32 dar, ...);

void __OSCacheInit(void);

#ifdef __cplusplus
}
#endif
#endif
