Annotation of qemu/cache-utils.c, revision 1.1.1.3

1.1       root        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: 
1.1.1.2   root       60: #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
                     61: #include <errno.h>
                     62: #include <stdio.h>
                     63: #include <stdlib.h>
                     64: #include <string.h>
                     65: #include <sys/types.h>
                     66: #include <sys/sysctl.h>
                     67: 
                     68: static void ppc_init_cacheline_sizes(void)
                     69: {
                     70:     size_t len = 4;
                     71:     unsigned cacheline;
                     72: 
                     73:     if (sysctlbyname ("machdep.cacheline_size", &cacheline, &len, NULL, 0)) {
                     74:         fprintf(stderr, "sysctlbyname machdep.cacheline_size failed: %s\n",
                     75:                 strerror(errno));
                     76:         exit(1);
                     77:     }
                     78: 
                     79:     qemu_cache_conf.dcache_bsize = cacheline;
                     80:     qemu_cache_conf.icache_bsize = cacheline;
                     81: }
1.1.1.3 ! root       82: #endif
1.1.1.2   root       83: 
1.1       root       84: #ifdef __linux__
                     85: void qemu_cache_utils_init(char **envp)
                     86: {
                     87:     ppc_init_cacheline_sizes(envp);
                     88: }
                     89: #else
                     90: void qemu_cache_utils_init(char **envp)
                     91: {
                     92:     (void) envp;
                     93:     ppc_init_cacheline_sizes();
                     94: }
                     95: #endif
                     96: 
                     97: #endif /* _ARCH_PPC */

unix.superglobalmegacorp.com