Exemplo n.º 1
0
void cache_flush_d_inval_i(void *start, void *end)
{
#ifdef __arm__
#if defined(__BLACKBERRY_QNX__)
   msync(start, end - start, MS_SYNC | MS_CACHE_ONLY | MS_INVALIDATE_ICACHE);
#elif defined(__MACH__)
   size_t len = (char *)end - (char *)start;
   sys_dcache_flush(start, len);
   sys_icache_invalidate(start, len);
#elif defined(_3DS)
   ctr_flush_invalidate_cache();
#else
   __clear_cache(start, end);
#endif
#endif
}
Exemplo n.º 2
0
int
sys_cache_control(int function, void *start, size_t len)
{
	int	status = 0;
	
	switch( function ) {
	
	case kCacheFunctionPrepareForExecution:
		sys_icache_invalidate(start, len);
		break;
		
	case kCacheFunctionFlushDcache:
		sys_dcache_flush(start, len);
		break;
		
	default:
		status = ENOTSUP;
	}
	
	return	status;
}
Exemplo n.º 3
0
int memsync(void *start, void *end)
{
   size_t len = (char*)end - (char*)start;
#if defined(__MACH__) && defined(__arm__)
   sys_dcache_flush(start ,len);
   sys_icache_invalidate(start, len);
   return 0;
#elif defined(__arm__) && !defined(__QNX__)
   (void)len;
   __clear_cache(start, end);
   return 0;
#elif defined(HAVE_MMAN)
   return msync(start, len, MS_SYNC | MS_INVALIDATE
#ifdef __QNX__
         MS_CACHE_ONLY
#endif
         );
#else
   (void)len;
   return 0;
#endif
}
Exemplo n.º 4
0
static void __clear_cache(void *start, void *end) {
  size_t len = (char *)end - (char *)start;
  sys_dcache_flush(start, len);
  sys_icache_invalidate(start, len);
}