1455a2d26SAlex Bennée /* 2455a2d26SAlex Bennée * QEMU Plugin API - user-mode only implementations 3455a2d26SAlex Bennée * 4455a2d26SAlex Bennée * This provides the APIs that have a user-mode specific 5455a2d26SAlex Bennée * implementations or are only relevant to user-mode. 6455a2d26SAlex Bennée * 7455a2d26SAlex Bennée * Copyright (C) 2017, Emilio G. Cota <cota@braap.org> 8455a2d26SAlex Bennée * Copyright (C) 2019-2025, Linaro 9455a2d26SAlex Bennée * 10455a2d26SAlex Bennée * SPDX-License-Identifier: GPL-2.0-or-later 11455a2d26SAlex Bennée */ 12455a2d26SAlex Bennée 13455a2d26SAlex Bennée #include "qemu/osdep.h" 14455a2d26SAlex Bennée #include "qemu/plugin.h" 15*1d3e745fSAlex Bennée #include "exec/log.h" 16455a2d26SAlex Bennée 17455a2d26SAlex Bennée /* 18455a2d26SAlex Bennée * Virtual Memory queries - these are all NOPs for user-mode which 19455a2d26SAlex Bennée * only ever has visibility of virtual addresses. 20455a2d26SAlex Bennée */ 21455a2d26SAlex Bennée qemu_plugin_get_hwaddr(qemu_plugin_meminfo_t info,uint64_t vaddr)22455a2d26SAlex Bennéestruct qemu_plugin_hwaddr *qemu_plugin_get_hwaddr(qemu_plugin_meminfo_t info, 23455a2d26SAlex Bennée uint64_t vaddr) 24455a2d26SAlex Bennée { 25455a2d26SAlex Bennée return NULL; 26455a2d26SAlex Bennée } 27455a2d26SAlex Bennée qemu_plugin_hwaddr_is_io(const struct qemu_plugin_hwaddr * haddr)28455a2d26SAlex Bennéebool qemu_plugin_hwaddr_is_io(const struct qemu_plugin_hwaddr *haddr) 29455a2d26SAlex Bennée { 30455a2d26SAlex Bennée return false; 31455a2d26SAlex Bennée } 32455a2d26SAlex Bennée qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr * haddr)33455a2d26SAlex Bennéeuint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr) 34455a2d26SAlex Bennée { 35455a2d26SAlex Bennée return 0; 36455a2d26SAlex Bennée } 37455a2d26SAlex Bennée qemu_plugin_hwaddr_device_name(const struct qemu_plugin_hwaddr * h)38455a2d26SAlex Bennéeconst char *qemu_plugin_hwaddr_device_name(const struct qemu_plugin_hwaddr *h) 39455a2d26SAlex Bennée { 40455a2d26SAlex Bennée return g_intern_static_string("Invalid"); 41455a2d26SAlex Bennée } 42*1d3e745fSAlex Bennée 43*1d3e745fSAlex Bennée /* 44*1d3e745fSAlex Bennée * Time control - for user mode the only real time is wall clock time 45*1d3e745fSAlex Bennée * so realistically all you can do in user mode is slow down execution 46*1d3e745fSAlex Bennée * which doesn't require the ability to mess with the clock. 47*1d3e745fSAlex Bennée */ 48*1d3e745fSAlex Bennée qemu_plugin_request_time_control(void)49*1d3e745fSAlex Bennéeconst void *qemu_plugin_request_time_control(void) 50*1d3e745fSAlex Bennée { 51*1d3e745fSAlex Bennée return NULL; 52*1d3e745fSAlex Bennée } 53*1d3e745fSAlex Bennée qemu_plugin_update_ns(const void * handle,int64_t new_time)54*1d3e745fSAlex Bennéevoid qemu_plugin_update_ns(const void *handle, int64_t new_time) 55*1d3e745fSAlex Bennée { 56*1d3e745fSAlex Bennée qemu_log_mask(LOG_UNIMP, "user-mode can't control time"); 57*1d3e745fSAlex Bennée } 58