2005-04-17 02:20:36 +04:00
# ifndef _M68KNOMMU_CACHEFLUSH_H
# define _M68KNOMMU_CACHEFLUSH_H
/*
2010-11-09 06:35:55 +03:00
* ( C ) Copyright 2000 - 2010 , Greg Ungerer < gerg @ snapgear . com >
2005-04-17 02:20:36 +04:00
*/
# include <linux/mm.h>
2010-11-09 03:40:44 +03:00
# include <asm/mcfsim.h>
2005-04-17 02:20:36 +04:00
# define flush_cache_all() __flush_cache_all()
# define flush_cache_mm(mm) do { } while (0)
2006-12-12 20:14:57 +03:00
# define flush_cache_dup_mm(mm) do { } while (0)
2010-11-09 06:35:55 +03:00
# define flush_cache_range(vma, start, end) do { } while (0)
2005-09-13 05:14:08 +04:00
# define flush_cache_page(vma, vmaddr) do { } while (0)
2010-11-10 08:22:19 +03:00
# define flush_dcache_range(start, len) __flush_dcache_all()
2009-11-26 11:16:19 +03:00
# define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0
2005-04-17 02:20:36 +04:00
# define flush_dcache_page(page) do { } while (0)
# define flush_dcache_mmap_lock(mapping) do { } while (0)
# define flush_dcache_mmap_unlock(mapping) do { } while (0)
2010-11-10 08:22:19 +03:00
# define flush_icache_range(start, len) __flush_icache_all()
2005-04-17 02:20:36 +04:00
# define flush_icache_page(vma,pg) do { } while (0)
# define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
2005-09-13 05:14:08 +04:00
# define flush_cache_vmap(start, end) do { } while (0)
# define flush_cache_vunmap(start, end) do { } while (0)
2005-04-17 02:20:36 +04:00
# define copy_to_user_page(vma, page, vaddr, dst, src, len) \
memcpy ( dst , src , len )
# define copy_from_user_page(vma, page, vaddr, dst, src, len) \
memcpy ( dst , src , len )
2010-11-09 07:27:50 +03:00
void mcf_cache_push ( void ) ;
2005-11-07 07:09:50 +03:00
static inline void __flush_cache_all ( void )
2005-04-17 02:20:36 +04:00
{
2010-11-09 07:27:50 +03:00
# ifdef CACHE_PUSH
mcf_cache_push ( ) ;
# endif
2010-11-09 06:35:55 +03:00
# ifdef CACHE_INVALIDATE
2009-01-13 03:17:30 +03:00
__asm__ __volatile__ (
2010-11-09 06:35:55 +03:00
" movel %0, %%d0 \n \t "
2009-01-13 03:17:30 +03:00
" movec %%d0, %%CACR \n \t "
" nop \n \t "
2010-11-09 06:35:55 +03:00
: : " i " ( CACHE_INVALIDATE ) : " d0 " ) ;
# endif
2005-04-17 02:20:36 +04:00
}
2010-11-10 08:22:19 +03:00
/*
* Some ColdFire parts implement separate instruction and data caches ,
* on those we should just flush the appropriate cache . If we don ' t need
* to do any specific flushing then this will be optimized away .
*/
static inline void __flush_icache_all ( void )
{
# ifdef CACHE_INVALIDATEI
__asm__ __volatile__ (
" movel %0, %%d0 \n \t "
" movec %%d0, %%CACR \n \t "
" nop \n \t "
: : " i " ( CACHE_INVALIDATEI ) : " d0 " ) ;
# endif
}
static inline void __flush_dcache_all ( void )
{
# ifdef CACHE_PUSH
mcf_cache_push ( ) ;
# endif
# ifdef CACHE_INVALIDATED
__asm__ __volatile__ (
" movel %0, %%d0 \n \t "
" movec %%d0, %%CACR \n \t "
" nop \n \t "
: : " i " ( CACHE_INVALIDATED ) : " d0 " ) ;
# else
/* Flush the wrtite buffer */
__asm__ __volatile__ ( " nop " ) ;
# endif
}
2005-04-17 02:20:36 +04:00
# endif /* _M68KNOMMU_CACHEFLUSH_H */