14757e2c7SHelge Deller /*
24757e2c7SHelge Deller * Alpha specific proc functions for linux-user
34757e2c7SHelge Deller *
44757e2c7SHelge Deller * SPDX-License-Identifier: GPL-2.0-or-later
54757e2c7SHelge Deller */
64757e2c7SHelge Deller #ifndef ALPHA_TARGET_PROC_H
74757e2c7SHelge Deller #define ALPHA_TARGET_PROC_H
84757e2c7SHelge Deller
open_cpuinfo(CPUArchState * cpu_env,int fd)94757e2c7SHelge Deller static int open_cpuinfo(CPUArchState *cpu_env, int fd)
104757e2c7SHelge Deller {
114757e2c7SHelge Deller int max_cpus = sysconf(_SC_NPROCESSORS_CONF);
124757e2c7SHelge Deller int num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
134757e2c7SHelge Deller unsigned long cpu_mask;
144757e2c7SHelge Deller char model[32];
154757e2c7SHelge Deller const char *p, *q;
164757e2c7SHelge Deller int t;
174757e2c7SHelge Deller
184757e2c7SHelge Deller p = object_class_get_name(OBJECT_CLASS(CPU_GET_CLASS(env_cpu(cpu_env))));
194757e2c7SHelge Deller q = strchr(p, '-');
204757e2c7SHelge Deller t = q - p;
214757e2c7SHelge Deller assert(t < sizeof(model));
224757e2c7SHelge Deller memcpy(model, p, t);
234757e2c7SHelge Deller model[t] = 0;
244757e2c7SHelge Deller
254757e2c7SHelge Deller t = sched_getaffinity(getpid(), sizeof(cpu_mask), (cpu_set_t *)&cpu_mask);
264757e2c7SHelge Deller if (t < 0) {
274757e2c7SHelge Deller if (num_cpus >= sizeof(cpu_mask) * 8) {
284757e2c7SHelge Deller cpu_mask = -1;
294757e2c7SHelge Deller } else {
304757e2c7SHelge Deller cpu_mask = (1UL << num_cpus) - 1;
314757e2c7SHelge Deller }
324757e2c7SHelge Deller }
334757e2c7SHelge Deller
344757e2c7SHelge Deller dprintf(fd,
354757e2c7SHelge Deller "cpu\t\t\t: Alpha\n"
364757e2c7SHelge Deller "cpu model\t\t: %s\n"
374757e2c7SHelge Deller "cpu variation\t\t: 0\n"
384757e2c7SHelge Deller "cpu revision\t\t: 0\n"
394757e2c7SHelge Deller "cpu serial number\t: JA00000000\n"
404757e2c7SHelge Deller "system type\t\t: QEMU\n"
414757e2c7SHelge Deller "system variation\t: QEMU_v" QEMU_VERSION "\n"
424757e2c7SHelge Deller "system revision\t\t: 0\n"
434757e2c7SHelge Deller "system serial number\t: AY00000000\n"
444757e2c7SHelge Deller "cycle frequency [Hz]\t: 250000000\n"
454757e2c7SHelge Deller "timer frequency [Hz]\t: 250.00\n"
464757e2c7SHelge Deller "page size [bytes]\t: %d\n"
474757e2c7SHelge Deller "phys. address bits\t: %d\n"
484757e2c7SHelge Deller "max. addr. space #\t: 255\n"
494757e2c7SHelge Deller "BogoMIPS\t\t: 2500.00\n"
504757e2c7SHelge Deller "kernel unaligned acc\t: 0 (pc=0,va=0)\n"
514757e2c7SHelge Deller "user unaligned acc\t: 0 (pc=0,va=0)\n"
524757e2c7SHelge Deller "platform string\t\t: AlphaServer QEMU user-mode VM\n"
534757e2c7SHelge Deller "cpus detected\t\t: %d\n"
544757e2c7SHelge Deller "cpus active\t\t: %d\n"
554757e2c7SHelge Deller "cpu active mask\t\t: %016lx\n"
564757e2c7SHelge Deller "L1 Icache\t\t: n/a\n"
574757e2c7SHelge Deller "L1 Dcache\t\t: n/a\n"
584757e2c7SHelge Deller "L2 cache\t\t: n/a\n"
594757e2c7SHelge Deller "L3 cache\t\t: n/a\n",
604757e2c7SHelge Deller model, TARGET_PAGE_SIZE, TARGET_PHYS_ADDR_SPACE_BITS,
614757e2c7SHelge Deller max_cpus, num_cpus, cpu_mask);
624757e2c7SHelge Deller
634757e2c7SHelge Deller return 0;
644757e2c7SHelge Deller }
654757e2c7SHelge Deller #define HAVE_ARCH_PROC_CPUINFO
664757e2c7SHelge Deller
674757e2c7SHelge Deller #endif /* ALPHA_TARGET_PROC_H */
68