1*4716c547Smlarkin /* $OpenBSD: arm64_vm.c,v 1.3 2024/09/21 04:12:18 mlarkin Exp $ */ 2234ee546Sdv /* 3234ee546Sdv * Copyright (c) 2024 Dave Voutila <dv@openbsd.org> 4234ee546Sdv * 5234ee546Sdv * Permission to use, copy, modify, and distribute this software for any 6234ee546Sdv * purpose with or without fee is hereby granted, provided that the above 7234ee546Sdv * copyright notice and this permission notice appear in all copies. 8234ee546Sdv * 9234ee546Sdv * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10234ee546Sdv * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11234ee546Sdv * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12234ee546Sdv * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13234ee546Sdv * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14234ee546Sdv * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15234ee546Sdv * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16234ee546Sdv */ 17234ee546Sdv #include <sys/types.h> 18234ee546Sdv 19234ee546Sdv #include "vmd.h" 20*4716c547Smlarkin #include "vmm.h" 21234ee546Sdv 22234ee546Sdv void 23234ee546Sdv create_memory_map(struct vm_create_params *vcp) 24234ee546Sdv { 25234ee546Sdv fatalx("%s: unimplemented", __func__); 26234ee546Sdv /* NOTREACHED */ 27234ee546Sdv } 28234ee546Sdv 29234ee546Sdv int 30234ee546Sdv load_firmware(struct vmd_vm *vm, struct vcpu_reg_state *vrs) 31234ee546Sdv { 32234ee546Sdv fatalx("%s: unimplemented", __func__); 33234ee546Sdv /* NOTREACHED */ 34234ee546Sdv return (-1); 35234ee546Sdv } 36234ee546Sdv 37234ee546Sdv void 38234ee546Sdv init_emulated_hw(struct vmop_create_params *vcp, int child_cdrom, 39234ee546Sdv int child_disks[][VM_MAX_BASE_PER_DISK], int *child_taps) 40234ee546Sdv { 41234ee546Sdv fatalx("%s: unimplemented", __func__); 42234ee546Sdv /* NOTREACHED */ 43234ee546Sdv } 44234ee546Sdv 45234ee546Sdv void 46234ee546Sdv restore_emulated_hw(struct vm_create_params *vcp, int fd, int *child_taps, 47234ee546Sdv int child_disks[][VM_MAX_BASE_PER_DISK], int child_cdrom) 48234ee546Sdv { 49234ee546Sdv fatalx("%s: unimplemented", __func__); 50234ee546Sdv /* NOTREACHED */ 51234ee546Sdv } 52234ee546Sdv 53234ee546Sdv void 54234ee546Sdv pause_vm_md(struct vmd_vm *vm) 55234ee546Sdv { 56234ee546Sdv fatalx("%s: unimplemented", __func__); 57234ee546Sdv /* NOTREACHED */ 58234ee546Sdv } 59234ee546Sdv 60234ee546Sdv void 61234ee546Sdv unpause_vm_md(struct vmd_vm *vm) 62234ee546Sdv { 63234ee546Sdv fatalx("%s: unimplemented", __func__); 64234ee546Sdv /* NOTREACHED */ 65234ee546Sdv } 66234ee546Sdv 67234ee546Sdv int 68234ee546Sdv dump_devs(int fd) 69234ee546Sdv { 70234ee546Sdv fatalx("%s: unimplemented", __func__); 71234ee546Sdv /* NOTREACHED */ 72234ee546Sdv return (-1); 73234ee546Sdv } 74234ee546Sdv 75234ee546Sdv int 76234ee546Sdv dump_send_header(int fd) 77234ee546Sdv { 78234ee546Sdv fatalx("%s: unimplemented", __func__); 79234ee546Sdv /* NOTREACHED */ 80234ee546Sdv return (-1); 81234ee546Sdv } 82234ee546Sdv 83234ee546Sdv void * 84234ee546Sdv hvaddr_mem(paddr_t gpa, size_t len) 85234ee546Sdv { fatalx("%s: unimplemented", __func__); 86234ee546Sdv /* NOTREACHED */ 87234ee546Sdv return (NULL); 88234ee546Sdv } 89234ee546Sdv 90234ee546Sdv int 91234ee546Sdv write_mem(paddr_t dst, const void *buf, size_t len) 92234ee546Sdv { 93234ee546Sdv fatalx("%s: unimplemented", __func__); 94234ee546Sdv /* NOTREACHED */ 95234ee546Sdv return (-1); 96234ee546Sdv } 97234ee546Sdv 98234ee546Sdv int 99234ee546Sdv read_mem(paddr_t src, void *buf, size_t len) 100234ee546Sdv { 101234ee546Sdv fatalx("%s: unimplemented", __func__); 102234ee546Sdv /* NOTREACHED */ 103234ee546Sdv return (-1); 104234ee546Sdv } 105234ee546Sdv 106234ee546Sdv int 107234ee546Sdv intr_pending(struct vmd_vm *vm) 108234ee546Sdv { 109234ee546Sdv fatalx("%s: unimplemented", __func__); 110234ee546Sdv /* NOTREACHED */ 111234ee546Sdv return (-1); 112234ee546Sdv } 113234ee546Sdv 114234ee546Sdv void 115234ee546Sdv intr_toggle_el(struct vmd_vm *vm, int irq, int val) 116234ee546Sdv { 117234ee546Sdv fatalx("%s: unimplemented", __func__); 118234ee546Sdv /* NOTREACHED */ 119234ee546Sdv } 120234ee546Sdv 121234ee546Sdv int 122234ee546Sdv intr_ack(struct vmd_vm *vm) 123234ee546Sdv { 124234ee546Sdv fatalx("%s: unimplemented", __func__); 125234ee546Sdv /* NOTREACHED */ 126234ee546Sdv return (-1); 127234ee546Sdv } 128234ee546Sdv 129234ee546Sdv void 130234ee546Sdv vcpu_assert_irq(uint32_t vm_id, uint32_t vcpu_id, int irq) 131234ee546Sdv { 132234ee546Sdv fatalx("%s: unimplemented", __func__); 133234ee546Sdv } 134234ee546Sdv 135234ee546Sdv void 136234ee546Sdv vcpu_deassert_irq(uint32_t vm_id, uint32_t vcpu_id, int irq) 137234ee546Sdv { 138234ee546Sdv fatalx("%s: unimplemented", __func__); 139234ee546Sdv } 140234ee546Sdv 141234ee546Sdv int 142234ee546Sdv vmd_check_vmh(struct vm_dump_header *vmh) 143234ee546Sdv { 144234ee546Sdv fatalx("%s: unimplemented", __func__); 145234ee546Sdv /* NOTREACHED */ 146234ee546Sdv return (-1); 147234ee546Sdv } 148234ee546Sdv 149234ee546Sdv int 150234ee546Sdv vcpu_exit(struct vm_run_params *vrp) 151234ee546Sdv { 152234ee546Sdv fatalx("%s: unimplemented", __func__); 153234ee546Sdv /* NOTREACHED */ 154234ee546Sdv return (-1); 155234ee546Sdv } 156234ee546Sdv 157234ee546Sdv uint8_t 158234ee546Sdv vcpu_exit_pci(struct vm_run_params *vrp) 159234ee546Sdv { 160234ee546Sdv fatalx("%s: unimplemented", __func__); 161234ee546Sdv /* NOTREACHED */ 162234ee546Sdv return (0xff); 163234ee546Sdv } 164f4b47ae8Sbluhm 165f4b47ae8Sbluhm void 166f4b47ae8Sbluhm set_return_data(struct vm_exit *vei, uint32_t data) 167f4b47ae8Sbluhm { 168f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 169f4b47ae8Sbluhm /* NOTREACHED */ 170f4b47ae8Sbluhm return; 171f4b47ae8Sbluhm } 172f4b47ae8Sbluhm 173f4b47ae8Sbluhm void 174f4b47ae8Sbluhm get_input_data(struct vm_exit *vei, uint32_t *data) 175f4b47ae8Sbluhm { 176f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 177f4b47ae8Sbluhm /* NOTREACHED */ 178f4b47ae8Sbluhm return; 179f4b47ae8Sbluhm } 180f4b47ae8Sbluhm 181f4b47ae8Sbluhm int 182f4b47ae8Sbluhm sev_init(struct vmd_vm *vm) 183f4b47ae8Sbluhm { 184f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 185f4b47ae8Sbluhm /* NOTREACHED */ 186f4b47ae8Sbluhm return (-1); 187f4b47ae8Sbluhm } 188f4b47ae8Sbluhm 189f4b47ae8Sbluhm int 190f4b47ae8Sbluhm sev_shutdown(struct vmd_vm *vm) 191f4b47ae8Sbluhm { 192f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 193f4b47ae8Sbluhm /* NOTREACHED */ 194f4b47ae8Sbluhm return (-1); 195f4b47ae8Sbluhm } 196f4b47ae8Sbluhm 197f4b47ae8Sbluhm int 198f4b47ae8Sbluhm sev_activate(struct vmd_vm *vm, int vcpu_id) 199f4b47ae8Sbluhm { 200f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 201f4b47ae8Sbluhm /* NOTREACHED */ 202f4b47ae8Sbluhm return (-1); 203f4b47ae8Sbluhm } 204f4b47ae8Sbluhm 205f4b47ae8Sbluhm int 206f4b47ae8Sbluhm sev_encrypt_memory(struct vmd_vm *vm) 207f4b47ae8Sbluhm { 208f4b47ae8Sbluhm fatalx("%s: unimplemented", __func__); 209f4b47ae8Sbluhm /* NOTREACHED */ 210f4b47ae8Sbluhm return (-1); 211f4b47ae8Sbluhm } 212