/* SPDX-License-Identifier: BSD-3-Clause */ /* Copyright (c) 2026 Open-IOV contributors */ /* * GSP vGPU-IO Userspace RPC Emulator - Header */ #ifndef _RPC_EMULATOR_H_ #define _RPC_EMULATOR_H_ #include #include #include "libvgpu.h" #ifdef __cplusplus extern "C" { #endif /* Emulation mode control */ void rpc_emu_enable(bool enable); bool rpc_emu_is_enabled(void); /* BAR Emulation */ int rpc_emu_bar_config(uint32_t vf_id, uint64_t offset, uint64_t size); int rpc_emu_bar_force_access(uint32_t vf_id, bool enable); int rpc_emu_bar_save(uint32_t vf_id, void *buf, size_t *size); int rpc_emu_bar_restore(uint32_t vf_id, const void *buf, size_t size); int rpc_emu_bar_get_state(uint32_t vf_id, uint64_t *offset, uint64_t *size); /* WPR Emulation */ int rpc_emu_wpr_protect_write(uint32_t vf_id, uint64_t base, uint64_t size); int rpc_emu_wpr_protect_read(uint32_t vf_id, uint64_t base, uint64_t size); int rpc_emu_wpr_protect(uint32_t vf_id, uint64_t base, uint64_t size, uint32_t flags); int rpc_emu_wpr_unprotect(uint32_t vf_id, uint64_t base); int rpc_emu_wpr_set_timeout(uint32_t vf_id, uint64_t timeout_ns); int rpc_emu_wpr_check_access(uint32_t vf_id, uint64_t addr, uint32_t access_type); /* Scheduling Emulation */ int rpc_emu_schedule(uint32_t vf_id, uint64_t work_handle, uint64_t callback, uint64_t arg, uint32_t priority, uint32_t flags); int rpc_emu_yield(uint32_t vf_id); /* Notification Emulation */ typedef void (*rpc_emu_notify_cb_t)(uint32_t vf_id, uint32_t type, void *data, size_t size, void *ctx); int rpc_emu_notify_register(uint32_t vf_id, uint32_t type, rpc_emu_notify_cb_t cb, void *ctx); int rpc_emu_notify_unregister(uint32_t vf_id, uint32_t type); int rpc_emu_notify_send(uint32_t vf_id, uint32_t type, void *data, size_t size); /* Init/Fini */ int rpc_emu_init(void); void rpc_emu_fini(void); #ifdef __cplusplus } #endif #endif /* _RPC_EMULATOR_H_ */