18b80bd28SPhilippe Mathieu-Daudé /* 28b80bd28SPhilippe Mathieu-Daudé * CPU operations specific to system emulation 38b80bd28SPhilippe Mathieu-Daudé * 48b80bd28SPhilippe Mathieu-Daudé * Copyright (c) 2012 SUSE LINUX Products GmbH 58b80bd28SPhilippe Mathieu-Daudé * 68b80bd28SPhilippe Mathieu-Daudé * This work is licensed under the terms of the GNU GPL, version 2 or later. 78b80bd28SPhilippe Mathieu-Daudé * See the COPYING file in the top-level directory. 88b80bd28SPhilippe Mathieu-Daudé */ 98b80bd28SPhilippe Mathieu-Daudé 108b80bd28SPhilippe Mathieu-Daudé #ifndef SYSEMU_CPU_OPS_H 118b80bd28SPhilippe Mathieu-Daudé #define SYSEMU_CPU_OPS_H 128b80bd28SPhilippe Mathieu-Daudé 138b80bd28SPhilippe Mathieu-Daudé #include "hw/core/cpu.h" 148b80bd28SPhilippe Mathieu-Daudé 158b80bd28SPhilippe Mathieu-Daudé /* 168b80bd28SPhilippe Mathieu-Daudé * struct SysemuCPUOps: System operations specific to a CPU class 178b80bd28SPhilippe Mathieu-Daudé */ 188b80bd28SPhilippe Mathieu-Daudé typedef struct SysemuCPUOps { 19feece4d0SPhilippe Mathieu-Daudé /** 20*2b60b62eSPhilippe Mathieu-Daudé * @get_memory_mapping: Callback for obtaining the memory mappings. 21*2b60b62eSPhilippe Mathieu-Daudé */ 22*2b60b62eSPhilippe Mathieu-Daudé void (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list, 23*2b60b62eSPhilippe Mathieu-Daudé Error **errp); 24*2b60b62eSPhilippe Mathieu-Daudé /** 2508928c6dSPhilippe Mathieu-Daudé * @get_phys_page_debug: Callback for obtaining a physical address. 2608928c6dSPhilippe Mathieu-Daudé */ 2708928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr); 2808928c6dSPhilippe Mathieu-Daudé /** 2908928c6dSPhilippe Mathieu-Daudé * @get_phys_page_attrs_debug: Callback for obtaining a physical address 3008928c6dSPhilippe Mathieu-Daudé * and the associated memory transaction attributes to use for the 3108928c6dSPhilippe Mathieu-Daudé * access. 3208928c6dSPhilippe Mathieu-Daudé * CPUs which use memory transaction attributes should implement this 3308928c6dSPhilippe Mathieu-Daudé * instead of get_phys_page_debug. 3408928c6dSPhilippe Mathieu-Daudé */ 3508928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr, 3608928c6dSPhilippe Mathieu-Daudé MemTxAttrs *attrs); 3708928c6dSPhilippe Mathieu-Daudé /** 38faf39e82SPhilippe Mathieu-Daudé * @asidx_from_attrs: Callback to return the CPU AddressSpace to use for 39faf39e82SPhilippe Mathieu-Daudé * a memory access with the specified memory transaction attributes. 40faf39e82SPhilippe Mathieu-Daudé */ 41faf39e82SPhilippe Mathieu-Daudé int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs); 42faf39e82SPhilippe Mathieu-Daudé /** 4383ec01b6SPhilippe Mathieu-Daudé * @get_crash_info: Callback for reporting guest crash information in 4483ec01b6SPhilippe Mathieu-Daudé * GUEST_PANICKED events. 4583ec01b6SPhilippe Mathieu-Daudé */ 4683ec01b6SPhilippe Mathieu-Daudé GuestPanicInformation* (*get_crash_info)(CPUState *cpu); 4783ec01b6SPhilippe Mathieu-Daudé /** 48715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_note: Callback for writing a CPU-specific ELF note to a 49715e3c1aSPhilippe Mathieu-Daudé * 32-bit VM coredump. 50715e3c1aSPhilippe Mathieu-Daudé */ 51715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_note)(WriteCoreDumpFunction f, CPUState *cpu, 52715e3c1aSPhilippe Mathieu-Daudé int cpuid, void *opaque); 53715e3c1aSPhilippe Mathieu-Daudé /** 54715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_note: Callback for writing a CPU-specific ELF note to a 55715e3c1aSPhilippe Mathieu-Daudé * 64-bit VM coredump. 56715e3c1aSPhilippe Mathieu-Daudé */ 57715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu, 58715e3c1aSPhilippe Mathieu-Daudé int cpuid, void *opaque); 59715e3c1aSPhilippe Mathieu-Daudé /** 60715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_qemunote: Callback for writing a CPU- and QEMU-specific ELF 61715e3c1aSPhilippe Mathieu-Daudé * note to a 32-bit VM coredump. 62715e3c1aSPhilippe Mathieu-Daudé */ 63715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 64715e3c1aSPhilippe Mathieu-Daudé void *opaque); 65715e3c1aSPhilippe Mathieu-Daudé /** 66715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_qemunote: Callback for writing a CPU- and QEMU-specific ELF 67715e3c1aSPhilippe Mathieu-Daudé * note to a 64-bit VM coredump. 68715e3c1aSPhilippe Mathieu-Daudé */ 69715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 70715e3c1aSPhilippe Mathieu-Daudé void *opaque); 71715e3c1aSPhilippe Mathieu-Daudé /** 72da383e02SPhilippe Mathieu-Daudé * @virtio_is_big_endian: Callback to return %true if a CPU which supports 73da383e02SPhilippe Mathieu-Daudé * runtime configurable endianness is currently big-endian. 74da383e02SPhilippe Mathieu-Daudé * Non-configurable CPUs can use the default implementation of this method. 75da383e02SPhilippe Mathieu-Daudé * This method should not be used by any callers other than the pre-1.0 76da383e02SPhilippe Mathieu-Daudé * virtio devices. 77da383e02SPhilippe Mathieu-Daudé */ 78da383e02SPhilippe Mathieu-Daudé bool (*virtio_is_big_endian)(CPUState *cpu); 79da383e02SPhilippe Mathieu-Daudé 80da383e02SPhilippe Mathieu-Daudé /** 81feece4d0SPhilippe Mathieu-Daudé * @legacy_vmsd: Legacy state for migration. 82feece4d0SPhilippe Mathieu-Daudé * Do not use in new targets, use #DeviceClass::vmsd instead. 83feece4d0SPhilippe Mathieu-Daudé */ 84feece4d0SPhilippe Mathieu-Daudé const VMStateDescription *legacy_vmsd; 85feece4d0SPhilippe Mathieu-Daudé 868b80bd28SPhilippe Mathieu-Daudé } SysemuCPUOps; 878b80bd28SPhilippe Mathieu-Daudé 888b80bd28SPhilippe Mathieu-Daudé #endif /* SYSEMU_CPU_OPS_H */ 89