diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/kernel/kernel/cpu.h | 28 | ||||
-rw-r--r-- | include/kernel/lowio/pervasive.h | 2 |
2 files changed, 17 insertions, 13 deletions
diff --git a/include/kernel/kernel/cpu.h b/include/kernel/kernel/cpu.h index a6f46d1..db3a5e9 100644 --- a/include/kernel/kernel/cpu.h +++ b/include/kernel/kernel/cpu.h @@ -28,6 +28,18 @@ extern "C" { asm volatile ("mcr p15, 0, %0, c13, c0, 3" :: "r" (state) : "memory"); \ } while (0) + +/** + * @brief Writeback a range of L1 dcache (without L2) + * + * @param ptr The pointer + * @param[in] len The length + * + * @return Zero on success + */ +int sceKernelCpuDcacheWritebackRange(const void *ptr, size_t len); + + /** * @brief Save process context * @@ -82,8 +94,10 @@ static inline int sceKernelCpuUnrestrictedMemcpy(void *dst, const void *src, siz asm ("mrc p15, 0, %0, c3, c0, 0" : "=r" (prev_dacr)); asm ("mcr p15, 0, %0, c3, c0, 0" :: "r" (0xFFFF0000)); - memcpy(dst, src, len); - sceKernelCpuDcacheWritebackRange((uintptr_t)dst & ~0x1F, (len + 0x1F) & ~0x1F); + for (size_t i=0; i < len; i++) { + ((char *) dst)[i] = ((char *) src)[i]; + } + sceKernelCpuDcacheWritebackRange((void *)((uintptr_t)dst & ~0x1F), (len + 0x1F) & ~0x1F); asm ("mcr p15, 0, %0, c3, c0, 0" :: "r" (prev_dacr)); return 0; @@ -113,16 +127,6 @@ int sceKernelCpuDisableInterrupts(void); int sceKernelCpuEnableInterrupts(int flags); /** - * @brief Writeback a range of L1 dcache (without L2) - * - * @param ptr The pointer - * @param[in] len The length - * - * @return Zero on success - */ -int sceKernelCpuDcacheWritebackRange(const void *ptr, size_t len); - -/** * @brief Invalidate a range of L1 dcache (without L2) * * @param ptr The pointer diff --git a/include/kernel/lowio/pervasive.h b/include/kernel/lowio/pervasive.h index ef91404..51bb72b 100644 --- a/include/kernel/lowio/pervasive.h +++ b/include/kernel/lowio/pervasive.h @@ -4,7 +4,7 @@ #include <psp2kern/types.h> #ifdef __cplusplus -"C" { +extern "C" { #endif int scePervasiveUartClockDisable(int port); |