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é 1032cad1ffSPhilippe Mathieu-Daudé #ifndef SYSTEM_CPU_OPS_H 1132cad1ffSPhilippe Mathieu-Daudé #define SYSTEM_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é /** 2072eacd62SPhilippe Mathieu-Daudé * @has_work: Callback for checking if there is work to do. 2172eacd62SPhilippe Mathieu-Daudé */ 22*d0a4ccaeSPhilippe Mathieu-Daudé bool (*has_work)(CPUState *cpu); /* MANDATORY NON-NULL */ 2372eacd62SPhilippe Mathieu-Daudé /** 242b60b62eSPhilippe Mathieu-Daudé * @get_memory_mapping: Callback for obtaining the memory mappings. 252b60b62eSPhilippe Mathieu-Daudé */ 268a5b974bSMarc-André Lureau bool (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list, 272b60b62eSPhilippe Mathieu-Daudé Error **errp); 282b60b62eSPhilippe Mathieu-Daudé /** 296bc0d6a0SPhilippe Mathieu-Daudé * @get_paging_enabled: Callback for inquiring whether paging is enabled. 306bc0d6a0SPhilippe Mathieu-Daudé */ 316bc0d6a0SPhilippe Mathieu-Daudé bool (*get_paging_enabled)(const CPUState *cpu); 326bc0d6a0SPhilippe Mathieu-Daudé /** 3308928c6dSPhilippe Mathieu-Daudé * @get_phys_page_debug: Callback for obtaining a physical address. 3408928c6dSPhilippe Mathieu-Daudé */ 3508928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr); 3608928c6dSPhilippe Mathieu-Daudé /** 3708928c6dSPhilippe Mathieu-Daudé * @get_phys_page_attrs_debug: Callback for obtaining a physical address 3808928c6dSPhilippe Mathieu-Daudé * and the associated memory transaction attributes to use for the 3908928c6dSPhilippe Mathieu-Daudé * access. 4008928c6dSPhilippe Mathieu-Daudé * CPUs which use memory transaction attributes should implement this 4108928c6dSPhilippe Mathieu-Daudé * instead of get_phys_page_debug. 4208928c6dSPhilippe Mathieu-Daudé */ 4308928c6dSPhilippe Mathieu-Daudé hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr, 4408928c6dSPhilippe Mathieu-Daudé MemTxAttrs *attrs); 4508928c6dSPhilippe Mathieu-Daudé /** 46faf39e82SPhilippe Mathieu-Daudé * @asidx_from_attrs: Callback to return the CPU AddressSpace to use for 47faf39e82SPhilippe Mathieu-Daudé * a memory access with the specified memory transaction attributes. 48faf39e82SPhilippe Mathieu-Daudé */ 49faf39e82SPhilippe Mathieu-Daudé int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs); 50faf39e82SPhilippe Mathieu-Daudé /** 5183ec01b6SPhilippe Mathieu-Daudé * @get_crash_info: Callback for reporting guest crash information in 5283ec01b6SPhilippe Mathieu-Daudé * GUEST_PANICKED events. 5383ec01b6SPhilippe Mathieu-Daudé */ 5483ec01b6SPhilippe Mathieu-Daudé GuestPanicInformation* (*get_crash_info)(CPUState *cpu); 5583ec01b6SPhilippe Mathieu-Daudé /** 56715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_note: Callback for writing a CPU-specific ELF note to a 57715e3c1aSPhilippe Mathieu-Daudé * 32-bit VM coredump. 58715e3c1aSPhilippe Mathieu-Daudé */ 59715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_note)(WriteCoreDumpFunction f, CPUState *cpu, 601af0006aSJanosch Frank int cpuid, DumpState *s); 61715e3c1aSPhilippe Mathieu-Daudé /** 62715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_note: Callback for writing a CPU-specific ELF note to a 63715e3c1aSPhilippe Mathieu-Daudé * 64-bit VM coredump. 64715e3c1aSPhilippe Mathieu-Daudé */ 65715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu, 661af0006aSJanosch Frank int cpuid, DumpState *s); 67715e3c1aSPhilippe Mathieu-Daudé /** 68715e3c1aSPhilippe Mathieu-Daudé * @write_elf32_qemunote: Callback for writing a CPU- and QEMU-specific ELF 69715e3c1aSPhilippe Mathieu-Daudé * note to a 32-bit VM coredump. 70715e3c1aSPhilippe Mathieu-Daudé */ 71715e3c1aSPhilippe Mathieu-Daudé int (*write_elf32_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 721af0006aSJanosch Frank DumpState *s); 73715e3c1aSPhilippe Mathieu-Daudé /** 74715e3c1aSPhilippe Mathieu-Daudé * @write_elf64_qemunote: Callback for writing a CPU- and QEMU-specific ELF 75715e3c1aSPhilippe Mathieu-Daudé * note to a 64-bit VM coredump. 76715e3c1aSPhilippe Mathieu-Daudé */ 77715e3c1aSPhilippe Mathieu-Daudé int (*write_elf64_qemunote)(WriteCoreDumpFunction f, CPUState *cpu, 781af0006aSJanosch Frank DumpState *s); 79715e3c1aSPhilippe Mathieu-Daudé /** 80da383e02SPhilippe Mathieu-Daudé * @virtio_is_big_endian: Callback to return %true if a CPU which supports 81da383e02SPhilippe Mathieu-Daudé * runtime configurable endianness is currently big-endian. 82da383e02SPhilippe Mathieu-Daudé * Non-configurable CPUs can use the default implementation of this method. 83da383e02SPhilippe Mathieu-Daudé * This method should not be used by any callers other than the pre-1.0 84da383e02SPhilippe Mathieu-Daudé * virtio devices. 85da383e02SPhilippe Mathieu-Daudé */ 86da383e02SPhilippe Mathieu-Daudé bool (*virtio_is_big_endian)(CPUState *cpu); 87da383e02SPhilippe Mathieu-Daudé 88da383e02SPhilippe Mathieu-Daudé /** 89feece4d0SPhilippe Mathieu-Daudé * @legacy_vmsd: Legacy state for migration. 90feece4d0SPhilippe Mathieu-Daudé * Do not use in new targets, use #DeviceClass::vmsd instead. 91feece4d0SPhilippe Mathieu-Daudé */ 92feece4d0SPhilippe Mathieu-Daudé const VMStateDescription *legacy_vmsd; 93feece4d0SPhilippe Mathieu-Daudé 948b80bd28SPhilippe Mathieu-Daudé } SysemuCPUOps; 958b80bd28SPhilippe Mathieu-Daudé 9632cad1ffSPhilippe Mathieu-Daudé #endif /* SYSTEM_CPU_OPS_H */ 97