symbian-qemu-0.9.1-12/qemu-symbian-svp/cache-utils.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #include "cache-utils.h"
       
     2 
       
     3 #ifdef __powerpc__
       
     4 struct qemu_cache_conf qemu_cache_conf = {
       
     5     .dcache_bsize = 16,
       
     6     .icache_bsize = 16
       
     7 };
       
     8 
       
     9 #if defined _AIX
       
    10 #include <sys/systemcfg.h>
       
    11 
       
    12 static void ppc_init_cacheline_sizes(void)
       
    13 {
       
    14     qemu_cache_conf.icache_bsize = _system_configuration.icache_line;
       
    15     qemu_cache_conf.dcache_bsize = _system_configuration.dcache_line;
       
    16 }
       
    17 
       
    18 #elif defined __linux__
       
    19 
       
    20 #define QEMU_AT_NULL        0
       
    21 #define QEMU_AT_DCACHEBSIZE 19
       
    22 #define QEMU_AT_ICACHEBSIZE 20
       
    23 
       
    24 static void ppc_init_cacheline_sizes(char **envp)
       
    25 {
       
    26     unsigned long *auxv;
       
    27 
       
    28     while (*envp++);
       
    29 
       
    30     for (auxv = (unsigned long *) envp; *auxv != QEMU_AT_NULL; auxv += 2) {
       
    31         switch (*auxv) {
       
    32         case QEMU_AT_DCACHEBSIZE: qemu_cache_conf.dcache_bsize = auxv[1]; break;
       
    33         case QEMU_AT_ICACHEBSIZE: qemu_cache_conf.icache_bsize = auxv[1]; break;
       
    34         default: break;
       
    35         }
       
    36     }
       
    37 }
       
    38 
       
    39 #elif defined __APPLE__
       
    40 #include <sys/types.h>
       
    41 #include <sys/sysctl.h>
       
    42 
       
    43 static void ppc_init_cacheline_sizes(void)
       
    44 {
       
    45     size_t len;
       
    46     unsigned cacheline;
       
    47     int name[2] = { CTL_HW, HW_CACHELINE };
       
    48 
       
    49     if (sysctl(name, 2, &cacheline, &len, NULL, 0)) {
       
    50         perror("sysctl CTL_HW HW_CACHELINE failed");
       
    51     } else {
       
    52         qemu_cache_conf.dcache_bsize = cacheline;
       
    53         qemu_cache_conf.icache_bsize = cacheline;
       
    54     }
       
    55 }
       
    56 #endif
       
    57 
       
    58 #ifdef __linux__
       
    59 void qemu_cache_utils_init(char **envp)
       
    60 {
       
    61     ppc_init_cacheline_sizes(envp);
       
    62 }
       
    63 #else
       
    64 void qemu_cache_utils_init(char **envp)
       
    65 {
       
    66     (void) envp;
       
    67     ppc_init_cacheline_sizes();
       
    68 }
       
    69 #endif
       
    70 
       
    71 #endif /* __powerpc__ */