symbian-qemu-0.9.1-12/qemu-symbian-svp/cache-utils.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #ifndef QEMU_CACHE_UTILS_H
       
     2 #define QEMU_CACHE_UTILS_H
       
     3 
       
     4 #ifdef __powerpc__
       
     5 struct qemu_cache_conf {
       
     6     unsigned long dcache_bsize;
       
     7     unsigned long icache_bsize;
       
     8 };
       
     9 
       
    10 extern struct qemu_cache_conf qemu_cache_conf;
       
    11 
       
    12 extern void qemu_cache_utils_init(char **envp);
       
    13 
       
    14 /* mildly adjusted code from tcg-dyngen.c */
       
    15 static inline void flush_icache_range(unsigned long start, unsigned long stop)
       
    16 {
       
    17     unsigned long p, start1, stop1;
       
    18     unsigned long dsize = qemu_cache_conf.dcache_bsize;
       
    19     unsigned long isize = qemu_cache_conf.icache_bsize;
       
    20 
       
    21     start1 = start & ~(dsize - 1);
       
    22     stop1 = (stop + dsize - 1) & ~(dsize - 1);
       
    23     for (p = start1; p < stop1; p += dsize) {
       
    24         asm volatile ("dcbst 0,%0" : : "r"(p) : "memory");
       
    25     }
       
    26     asm volatile ("sync" : : : "memory");
       
    27 
       
    28     start &= start & ~(isize - 1);
       
    29     stop1 = (stop + isize - 1) & ~(isize - 1);
       
    30     for (p = start1; p < stop1; p += isize) {
       
    31         asm volatile ("icbi 0,%0" : : "r"(p) : "memory");
       
    32     }
       
    33     asm volatile ("sync" : : : "memory");
       
    34     asm volatile ("isync" : : : "memory");
       
    35 }
       
    36 
       
    37 #else
       
    38 #define qemu_cache_utils_init(envp) do { (void) (envp); } while (0)
       
    39 #endif
       
    40 
       
    41 #endif /* QEMU_CACHE_UTILS_H */