File:  [Qemu by Fabrice Bellard] / qemu / cache-utils.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:51:01 2018 UTC (3 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu0125, qemu0124, qemu0123, qemu0122, qemu0121, qemu0120, qemu0111, qemu0110, qemu0105, qemu0104, qemu0103, qemu0102, qemu0101, qemu0100, HEAD
qemu 0.10.0

    1: #include "cache-utils.h"
    2: 
    3: #if defined(_ARCH_PPC)
    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 <stdio.h>
   41: #include <sys/types.h>
   42: #include <sys/sysctl.h>
   43: 
   44: static void ppc_init_cacheline_sizes(void)
   45: {
   46:     size_t len;
   47:     unsigned cacheline;
   48:     int name[2] = { CTL_HW, HW_CACHELINE };
   49: 
   50:     len = sizeof(cacheline);
   51:     if (sysctl(name, 2, &cacheline, &len, NULL, 0)) {
   52:         perror("sysctl CTL_HW HW_CACHELINE failed");
   53:     } else {
   54:         qemu_cache_conf.dcache_bsize = cacheline;
   55:         qemu_cache_conf.icache_bsize = cacheline;
   56:     }
   57: }
   58: #endif
   59: 
   60: #ifdef __linux__
   61: void qemu_cache_utils_init(char **envp)
   62: {
   63:     ppc_init_cacheline_sizes(envp);
   64: }
   65: #else
   66: void qemu_cache_utils_init(char **envp)
   67: {
   68:     (void) envp;
   69:     ppc_init_cacheline_sizes();
   70: }
   71: #endif
   72: 
   73: #endif /* _ARCH_PPC */

unix.superglobalmegacorp.com