|  | /* | 
|  | * QEMU Plugin API - user-mode only implementations | 
|  | * | 
|  | * This provides the APIs that have a user-mode specific | 
|  | * implementations or are only relevant to user-mode. | 
|  | * | 
|  | * Copyright (C) 2017, Emilio G. Cota <cota@braap.org> | 
|  | * Copyright (C) 2019-2025, Linaro | 
|  | * | 
|  | * SPDX-License-Identifier: GPL-2.0-or-later | 
|  | */ | 
|  |  | 
|  | #include "qemu/osdep.h" | 
|  | #include "qemu/plugin.h" | 
|  | #include "exec/log.h" | 
|  |  | 
|  | /* | 
|  | * Virtual Memory queries - these are all NOPs for user-mode which | 
|  | * only ever has visibility of virtual addresses. | 
|  | */ | 
|  |  | 
|  | struct qemu_plugin_hwaddr *qemu_plugin_get_hwaddr(qemu_plugin_meminfo_t info, | 
|  | uint64_t vaddr) | 
|  | { | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | bool qemu_plugin_hwaddr_is_io(const struct qemu_plugin_hwaddr *haddr) | 
|  | { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr) | 
|  | { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | const char *qemu_plugin_hwaddr_device_name(const struct qemu_plugin_hwaddr *h) | 
|  | { | 
|  | return g_intern_static_string("Invalid"); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Time control - for user mode the only real time is wall clock time | 
|  | * so realistically all you can do in user mode is slow down execution | 
|  | * which doesn't require the ability to mess with the clock. | 
|  | */ | 
|  |  | 
|  | const void *qemu_plugin_request_time_control(void) | 
|  | { | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | void qemu_plugin_update_ns(const void *handle, int64_t new_time) | 
|  | { | 
|  | qemu_log_mask(LOG_UNIMP, "user-mode can't control time"); | 
|  | } |