| /* |
| * M68K specific proc functions for linux-user |
| * |
| * Copyright (c) 2026 Helge Deller |
| * |
| * SPDX-License-Identifier: GPL-2.0-or-later |
| */ |
| #ifndef M68K_TARGET_PROC_H |
| #define M68K_TARGET_PROC_H |
| |
| static int open_hardware(CPUArchState *cpu_env, int fd) |
| { |
| dprintf(fd, "Model:\t\tqemu-m68k\n"); |
| return 0; |
| } |
| #define HAVE_ARCH_PROC_HARDWARE |
| |
| |
| static int open_cpuinfo(CPUArchState *cpu_env, int fd) |
| { |
| const char *cpu, *fpu; |
| struct timespec res; |
| double freq_mhz; |
| |
| if (clock_getres(CLOCK_REALTIME, &res) == -1) { |
| res.tv_nsec = 1; |
| } |
| freq_mhz = 1000.0 / res.tv_nsec; |
| |
| if (m68k_feature(cpu_env, M68K_FEATURE_M68010)) { |
| cpu = "68010"; |
| } else if (m68k_feature(cpu_env, M68K_FEATURE_M68020)) { |
| cpu = "68020"; |
| } else if (m68k_feature(cpu_env, M68K_FEATURE_M68030)) { |
| cpu = "68030"; |
| } else if (m68k_feature(cpu_env, M68K_FEATURE_M68040)) { |
| cpu = "68040"; |
| } else if (m68k_feature(cpu_env, M68K_FEATURE_M68060)) { |
| cpu = "68060"; |
| } else { |
| cpu = "680x0"; |
| } |
| |
| if (m68k_feature(cpu_env, M68K_FEATURE_FPU)) { |
| fpu = cpu; |
| } else { |
| fpu = "none(soft float)"; |
| } |
| |
| dprintf(fd, "CPU:\t\t%s\n" |
| "MMU:\t\t%s\n" |
| "FPU:\t\t%s\n" |
| "Clocking:\t%.1fMHz\n" |
| "Model:\t\tQEMU user v" QEMU_VERSION "\n", |
| cpu, cpu, fpu, freq_mhz); |
| /* dropped BogoMips and Calibration for now */ |
| |
| return 0; |
| } |
| #define HAVE_ARCH_PROC_CPUINFO |
| |
| #endif /* M68K_TARGET_PROC_H */ |