~ahs3/+junk/cq-qemu

« back to all changes in this revision

Viewing changes to cache-utils.h

  • Committer: Al Stone
  • Date: 2012-02-09 01:17:20 UTC
  • Revision ID: albert.stone@canonical.com-20120209011720-tztl7ik3qayz80p4
first commit to bzr for qemu

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef QEMU_CACHE_UTILS_H
 
2
#define QEMU_CACHE_UTILS_H
 
3
 
 
4
#if defined(_ARCH_PPC)
 
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
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 */