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é /** 202b60b62eSPhilippe Mathieu-Daudé * @get_memory_mapping: Callback for obtaining the memory mappings. 212b60b62eSPhilippe Mathieu-Daudé */ 22*8a5b974bSMarc-André Lureau bool (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list, 232b60b62eSPhilippe Mathieu-Daudé Error **errp); 242b60b62eSPhilippe Mathieu-Daudé /** 256bc0d6a0SPhilippe Mathieu-Daudé * @get_paging_enabled: Callback for inquiring whether paging is enabled. 266bc0d6a0SPhilippe Mathieu-Daudé */ 276bc0d6a0SPhilippe Mathieu-Daudé bool (*get_paging_enabled)(const CPUState *cpu); 286bc0d6a0SPhilippe Mathieu-Daudé /** 2908928c6dSPhilippe Mathieu-Daudé * @get_phys_page_debug: Callback for obtaining a physical address. 3008928c6dSPhilippe Mathieu-Daudé */ 3108928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr); 3208928c6dSPhilippe Mathieu-Daudé /** 3308928c6dSPhilippe Mathieu-Daudé * @get_phys_page_attrs_debug: Callback for obtaining a physical address 3408928c6dSPhilippe Mathieu-Daudé * and the associated memory transaction attributes to use for the 3508928c6dSPhilippe Mathieu-Daudé * access. 3608928c6dSPhilippe Mathieu-Daudé * CPUs which use memory transaction attributes should implement this 3708928c6dSPhilippe Mathieu-Daudé * instead of get_phys_page_debug. 3808928c6dSPhilippe Mathieu-Daudé */ 3908928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr, 4008928c6dSPhilippe Mathieu-Daudé MemTxAttrs *attrs); 4108928c6dSPhilippe Mathieu-Daudé /** 42faf39e82SPhilippe Mathieu-Daudé * @asidx_from_attrs: Callback to return the CPU AddressSpace to use for 43faf39e82SPhilippe Mathieu-Daudé * a memory access with the specified memory transaction attributes. 44faf39e82SPhilippe Mathieu-Daudé */ 45faf39e82SPhilippe Mathieu-Daudé int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs); 46faf39e82SPhilippe Mathieu-Daudé /** 4783ec01b6SPhilippe Mathieu-Daudé * @get_crash_info: Callback for reporting guest crash information in 4883ec01b6SPhilippe Mathieu-Daudé * GUEST_PANICKED events. 4983ec01b6SPhilippe Mathieu-Daudé */ 5083ec01b6SPhilippe Mathieu-Daudé GuestPanicInformation* (*get_crash_info)(CPUState *cpu); 5183ec01b6SPhilippe Mathieu-Daudé /** 52715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_note: Callback for writing a CPU-specific ELF note to a 53715e3c1aSPhilippe Mathieu-Daudé * 32-bit VM coredump. 54715e3c1aSPhilippe Mathieu-Daudé */ 55715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_note)(WriteCoreDumpFunction f, CPUState *cpu, 561af0006aSJanosch Frank int cpuid, DumpState *s); 57715e3c1aSPhilippe Mathieu-Daudé /** 58715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_note: Callback for writing a CPU-specific ELF note to a 59715e3c1aSPhilippe Mathieu-Daudé * 64-bit VM coredump. 60715e3c1aSPhilippe Mathieu-Daudé */ 61715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu, 621af0006aSJanosch Frank int cpuid, DumpState *s); 63715e3c1aSPhilippe Mathieu-Daudé /** 64715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_qemunote: Callback for writing a CPU- and QEMU-specific ELF 65715e3c1aSPhilippe Mathieu-Daudé * note to a 32-bit VM coredump. 66715e3c1aSPhilippe Mathieu-Daudé */ 67715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 681af0006aSJanosch Frank DumpState *s); 69715e3c1aSPhilippe Mathieu-Daudé /** 70715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_qemunote: Callback for writing a CPU- and QEMU-specific ELF 71715e3c1aSPhilippe Mathieu-Daudé * note to a 64-bit VM coredump. 72715e3c1aSPhilippe Mathieu-Daudé */ 73715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 741af0006aSJanosch Frank DumpState *s); 75715e3c1aSPhilippe Mathieu-Daudé /** 76da383e02SPhilippe Mathieu-Daudé * @virtio_is_big_endian: Callback to return %true if a CPU which supports 77da383e02SPhilippe Mathieu-Daudé * runtime configurable endianness is currently big-endian. 78da383e02SPhilippe Mathieu-Daudé * Non-configurable CPUs can use the default implementation of this method. 79da383e02SPhilippe Mathieu-Daudé * This method should not be used by any callers other than the pre-1.0 80da383e02SPhilippe Mathieu-Daudé * virtio devices. 81da383e02SPhilippe Mathieu-Daudé */ 82da383e02SPhilippe Mathieu-Daudé bool (*virtio_is_big_endian)(CPUState *cpu); 83da383e02SPhilippe Mathieu-Daudé 84da383e02SPhilippe Mathieu-Daudé /** 85feece4d0SPhilippe Mathieu-Daudé * @legacy_vmsd: Legacy state for migration. 86feece4d0SPhilippe Mathieu-Daudé * Do not use in new targets, use #DeviceClass::vmsd instead. 87feece4d0SPhilippe Mathieu-Daudé */ 88feece4d0SPhilippe Mathieu-Daudé const VMStateDescription *legacy_vmsd; 89feece4d0SPhilippe Mathieu-Daudé 908b80bd28SPhilippe Mathieu-Daudé } SysemuCPUOps; 918b80bd28SPhilippe Mathieu-Daudé 928b80bd28SPhilippe Mathieu-Daudé #endif /* SYSEMU_CPU_OPS_H */ 93