]> Git Repo - qemu.git/blob - include/qom/cpu.h
hw/i386/acpi: Add object_resolve_type_unambiguous to improve modularity
[qemu.git] / include / qom / cpu.h
1 /*
2  * QEMU CPU model
3  *
4  * Copyright (c) 2012 SUSE LINUX Products GmbH
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see
18  * <http://www.gnu.org/licenses/gpl-2.0.html>
19  */
20 #ifndef QEMU_CPU_H
21 #define QEMU_CPU_H
22
23 #include "hw/qdev-core.h"
24 #include "disas/dis-asm.h"
25 #include "exec/hwaddr.h"
26 #include "exec/memattrs.h"
27 #include "qapi/qapi-types-run-state.h"
28 #include "qemu/bitmap.h"
29 #include "qemu/rcu_queue.h"
30 #include "qemu/queue.h"
31 #include "qemu/thread.h"
32
33 typedef int (*WriteCoreDumpFunction)(const void *buf, size_t size,
34                                      void *opaque);
35
36 /**
37  * vaddr:
38  * Type wide enough to contain any #target_ulong virtual address.
39  */
40 typedef uint64_t vaddr;
41 #define VADDR_PRId PRId64
42 #define VADDR_PRIu PRIu64
43 #define VADDR_PRIo PRIo64
44 #define VADDR_PRIx PRIx64
45 #define VADDR_PRIX PRIX64
46 #define VADDR_MAX UINT64_MAX
47
48 /**
49  * SECTION:cpu
50  * @section_id: QEMU-cpu
51  * @title: CPU Class
52  * @short_description: Base class for all CPUs
53  */
54
55 #define TYPE_CPU "cpu"
56
57 /* Since this macro is used a lot in hot code paths and in conjunction with
58  * FooCPU *foo_env_get_cpu(), we deviate from usual QOM practice by using
59  * an unchecked cast.
60  */
61 #define CPU(obj) ((CPUState *)(obj))
62
63 #define CPU_CLASS(class) OBJECT_CLASS_CHECK(CPUClass, (class), TYPE_CPU)
64 #define CPU_GET_CLASS(obj) OBJECT_GET_CLASS(CPUClass, (obj), TYPE_CPU)
65
66 typedef enum MMUAccessType {
67     MMU_DATA_LOAD  = 0,
68     MMU_DATA_STORE = 1,
69     MMU_INST_FETCH = 2
70 } MMUAccessType;
71
72 typedef struct CPUWatchpoint CPUWatchpoint;
73
74 typedef void (*CPUUnassignedAccess)(CPUState *cpu, hwaddr addr,
75                                     bool is_write, bool is_exec, int opaque,
76                                     unsigned size);
77
78 struct TranslationBlock;
79
80 /**
81  * CPUClass:
82  * @class_by_name: Callback to map -cpu command line model name to an
83  * instantiatable CPU type.
84  * @parse_features: Callback to parse command line arguments.
85  * @reset: Callback to reset the #CPUState to its initial state.
86  * @reset_dump_flags: #CPUDumpFlags to use for reset logging.
87  * @has_work: Callback for checking if there is work to do.
88  * @do_interrupt: Callback for interrupt handling.
89  * @do_unassigned_access: Callback for unassigned access handling.
90  * (this is deprecated: new targets should use do_transaction_failed instead)
91  * @do_unaligned_access: Callback for unaligned access handling, if
92  * the target defines #ALIGNED_ONLY.
93  * @do_transaction_failed: Callback for handling failed memory transactions
94  * (ie bus faults or external aborts; not MMU faults)
95  * @virtio_is_big_endian: Callback to return %true if a CPU which supports
96  * runtime configurable endianness is currently big-endian. Non-configurable
97  * CPUs can use the default implementation of this method. This method should
98  * not be used by any callers other than the pre-1.0 virtio devices.
99  * @memory_rw_debug: Callback for GDB memory access.
100  * @dump_state: Callback for dumping state.
101  * @dump_statistics: Callback for dumping statistics.
102  * @get_arch_id: Callback for getting architecture-dependent CPU ID.
103  * @get_paging_enabled: Callback for inquiring whether paging is enabled.
104  * @get_memory_mapping: Callback for obtaining the memory mappings.
105  * @set_pc: Callback for setting the Program Counter register. This
106  *       should have the semantics used by the target architecture when
107  *       setting the PC from a source such as an ELF file entry point;
108  *       for example on Arm it will also set the Thumb mode bit based
109  *       on the least significant bit of the new PC value.
110  *       If the target behaviour here is anything other than "set
111  *       the PC register to the value passed in" then the target must
112  *       also implement the synchronize_from_tb hook.
113  * @synchronize_from_tb: Callback for synchronizing state from a TCG
114  *       #TranslationBlock. This is called when we abandon execution
115  *       of a TB before starting it, and must set all parts of the CPU
116  *       state which the previous TB in the chain may not have updated.
117  *       This always includes at least the program counter; some targets
118  *       will need to do more. If this hook is not implemented then the
119  *       default is to call @set_pc(tb->pc).
120  * @handle_mmu_fault: Callback for handling an MMU fault.
121  * @get_phys_page_debug: Callback for obtaining a physical address.
122  * @get_phys_page_attrs_debug: Callback for obtaining a physical address and the
123  *       associated memory transaction attributes to use for the access.
124  *       CPUs which use memory transaction attributes should implement this
125  *       instead of get_phys_page_debug.
126  * @asidx_from_attrs: Callback to return the CPU AddressSpace to use for
127  *       a memory access with the specified memory transaction attributes.
128  * @gdb_read_register: Callback for letting GDB read a register.
129  * @gdb_write_register: Callback for letting GDB write a register.
130  * @debug_check_watchpoint: Callback: return true if the architectural
131  *       watchpoint whose address has matched should really fire.
132  * @debug_excp_handler: Callback for handling debug exceptions.
133  * @write_elf64_note: Callback for writing a CPU-specific ELF note to a
134  * 64-bit VM coredump.
135  * @write_elf32_qemunote: Callback for writing a CPU- and QEMU-specific ELF
136  * note to a 32-bit VM coredump.
137  * @write_elf32_note: Callback for writing a CPU-specific ELF note to a
138  * 32-bit VM coredump.
139  * @write_elf32_qemunote: Callback for writing a CPU- and QEMU-specific ELF
140  * note to a 32-bit VM coredump.
141  * @vmsd: State description for migration.
142  * @gdb_num_core_regs: Number of core registers accessible to GDB.
143  * @gdb_core_xml_file: File name for core registers GDB XML description.
144  * @gdb_stop_before_watchpoint: Indicates whether GDB expects the CPU to stop
145  *           before the insn which triggers a watchpoint rather than after it.
146  * @gdb_arch_name: Optional callback that returns the architecture name known
147  * to GDB. The caller must free the returned string with g_free.
148  * @gdb_get_dynamic_xml: Callback to return dynamically generated XML for the
149  *   gdb stub. Returns a pointer to the XML contents for the specified XML file
150  *   or NULL if the CPU doesn't have a dynamically generated content for it.
151  * @cpu_exec_enter: Callback for cpu_exec preparation.
152  * @cpu_exec_exit: Callback for cpu_exec cleanup.
153  * @cpu_exec_interrupt: Callback for processing interrupts in cpu_exec.
154  * @disas_set_info: Setup architecture specific components of disassembly info
155  * @adjust_watchpoint_address: Perform a target-specific adjustment to an
156  * address before attempting to match it against watchpoints.
157  *
158  * Represents a CPU family or model.
159  */
160 typedef struct CPUClass {
161     /*< private >*/
162     DeviceClass parent_class;
163     /*< public >*/
164
165     ObjectClass *(*class_by_name)(const char *cpu_model);
166     void (*parse_features)(const char *typename, char *str, Error **errp);
167
168     void (*reset)(CPUState *cpu);
169     int reset_dump_flags;
170     bool (*has_work)(CPUState *cpu);
171     void (*do_interrupt)(CPUState *cpu);
172     CPUUnassignedAccess do_unassigned_access;
173     void (*do_unaligned_access)(CPUState *cpu, vaddr addr,
174                                 MMUAccessType access_type,
175                                 int mmu_idx, uintptr_t retaddr);
176     void (*do_transaction_failed)(CPUState *cpu, hwaddr physaddr, vaddr addr,
177                                   unsigned size, MMUAccessType access_type,
178                                   int mmu_idx, MemTxAttrs attrs,
179                                   MemTxResult response, uintptr_t retaddr);
180     bool (*virtio_is_big_endian)(CPUState *cpu);
181     int (*memory_rw_debug)(CPUState *cpu, vaddr addr,
182                            uint8_t *buf, int len, bool is_write);
183     void (*dump_state)(CPUState *cpu, FILE *, int flags);
184     GuestPanicInformation* (*get_crash_info)(CPUState *cpu);
185     void (*dump_statistics)(CPUState *cpu, int flags);
186     int64_t (*get_arch_id)(CPUState *cpu);
187     bool (*get_paging_enabled)(const CPUState *cpu);
188     void (*get_memory_mapping)(CPUState *cpu, MemoryMappingList *list,
189                                Error **errp);
190     void (*set_pc)(CPUState *cpu, vaddr value);
191     void (*synchronize_from_tb)(CPUState *cpu, struct TranslationBlock *tb);
192     int (*handle_mmu_fault)(CPUState *cpu, vaddr address, int size, int rw,
193                             int mmu_index);
194     hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr);
195     hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr,
196                                         MemTxAttrs *attrs);
197     int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs);
198     int (*gdb_read_register)(CPUState *cpu, uint8_t *buf, int reg);
199     int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg);
200     bool (*debug_check_watchpoint)(CPUState *cpu, CPUWatchpoint *wp);
201     void (*debug_excp_handler)(CPUState *cpu);
202
203     int (*write_elf64_note)(WriteCoreDumpFunction f, CPUState *cpu,
204                             int cpuid, void *opaque);
205     int (*write_elf64_qemunote)(WriteCoreDumpFunction f, CPUState *cpu,
206                                 void *opaque);
207     int (*write_elf32_note)(WriteCoreDumpFunction f, CPUState *cpu,
208                             int cpuid, void *opaque);
209     int (*write_elf32_qemunote)(WriteCoreDumpFunction f, CPUState *cpu,
210                                 void *opaque);
211
212     const struct VMStateDescription *vmsd;
213     const char *gdb_core_xml_file;
214     gchar * (*gdb_arch_name)(CPUState *cpu);
215     const char * (*gdb_get_dynamic_xml)(CPUState *cpu, const char *xmlname);
216     void (*cpu_exec_enter)(CPUState *cpu);
217     void (*cpu_exec_exit)(CPUState *cpu);
218     bool (*cpu_exec_interrupt)(CPUState *cpu, int interrupt_request);
219
220     void (*disas_set_info)(CPUState *cpu, disassemble_info *info);
221     vaddr (*adjust_watchpoint_address)(CPUState *cpu, vaddr addr, int len);
222     void (*tcg_initialize)(void);
223
224     /* Keep non-pointer data at the end to minimize holes.  */
225     int gdb_num_core_regs;
226     bool gdb_stop_before_watchpoint;
227 } CPUClass;
228
229 #ifdef HOST_WORDS_BIGENDIAN
230 typedef struct icount_decr_u16 {
231     uint16_t high;
232     uint16_t low;
233 } icount_decr_u16;
234 #else
235 typedef struct icount_decr_u16 {
236     uint16_t low;
237     uint16_t high;
238 } icount_decr_u16;
239 #endif
240
241 typedef struct CPUBreakpoint {
242     vaddr pc;
243     int flags; /* BP_* */
244     QTAILQ_ENTRY(CPUBreakpoint) entry;
245 } CPUBreakpoint;
246
247 struct CPUWatchpoint {
248     vaddr vaddr;
249     vaddr len;
250     vaddr hitaddr;
251     MemTxAttrs hitattrs;
252     int flags; /* BP_* */
253     QTAILQ_ENTRY(CPUWatchpoint) entry;
254 };
255
256 struct KVMState;
257 struct kvm_run;
258
259 struct hax_vcpu_state;
260
261 #define TB_JMP_CACHE_BITS 12
262 #define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
263
264 /* work queue */
265
266 /* The union type allows passing of 64 bit target pointers on 32 bit
267  * hosts in a single parameter
268  */
269 typedef union {
270     int           host_int;
271     unsigned long host_ulong;
272     void         *host_ptr;
273     vaddr         target_ptr;
274 } run_on_cpu_data;
275
276 #define RUN_ON_CPU_HOST_PTR(p)    ((run_on_cpu_data){.host_ptr = (p)})
277 #define RUN_ON_CPU_HOST_INT(i)    ((run_on_cpu_data){.host_int = (i)})
278 #define RUN_ON_CPU_HOST_ULONG(ul) ((run_on_cpu_data){.host_ulong = (ul)})
279 #define RUN_ON_CPU_TARGET_PTR(v)  ((run_on_cpu_data){.target_ptr = (v)})
280 #define RUN_ON_CPU_NULL           RUN_ON_CPU_HOST_PTR(NULL)
281
282 typedef void (*run_on_cpu_func)(CPUState *cpu, run_on_cpu_data data);
283
284 struct qemu_work_item;
285
286 #define CPU_UNSET_NUMA_NODE_ID -1
287 #define CPU_TRACE_DSTATE_MAX_EVENTS 32
288
289 /**
290  * CPUState:
291  * @cpu_index: CPU index (informative).
292  * @cluster_index: Identifies which cluster this CPU is in.
293  *   For boards which don't define clusters or for "loose" CPUs not assigned
294  *   to a cluster this will be UNASSIGNED_CLUSTER_INDEX; otherwise it will
295  *   be the same as the cluster-id property of the CPU object's TYPE_CPU_CLUSTER
296  *   QOM parent.
297  * @nr_cores: Number of cores within this CPU package.
298  * @nr_threads: Number of threads within this CPU.
299  * @running: #true if CPU is currently running (lockless).
300  * @has_waiter: #true if a CPU is currently waiting for the cpu_exec_end;
301  * valid under cpu_list_lock.
302  * @created: Indicates whether the CPU thread has been successfully created.
303  * @interrupt_request: Indicates a pending interrupt request.
304  * @halted: Nonzero if the CPU is in suspended state.
305  * @stop: Indicates a pending stop request.
306  * @stopped: Indicates the CPU has been artificially stopped.
307  * @unplug: Indicates a pending CPU unplug request.
308  * @crash_occurred: Indicates the OS reported a crash (panic) for this CPU
309  * @singlestep_enabled: Flags for single-stepping.
310  * @icount_extra: Instructions until next timer event.
311  * @icount_decr: Low 16 bits: number of cycles left, only used in icount mode.
312  * High 16 bits: Set to -1 to force TCG to stop executing linked TBs for this
313  * CPU and return to its top level loop (even in non-icount mode).
314  * This allows a single read-compare-cbranch-write sequence to test
315  * for both decrementer underflow and exceptions.
316  * @can_do_io: Nonzero if memory-mapped IO is safe. Deterministic execution
317  * requires that IO only be performed on the last instruction of a TB
318  * so that interrupts take effect immediately.
319  * @cpu_ases: Pointer to array of CPUAddressSpaces (which define the
320  *            AddressSpaces this CPU has)
321  * @num_ases: number of CPUAddressSpaces in @cpu_ases
322  * @as: Pointer to the first AddressSpace, for the convenience of targets which
323  *      only have a single AddressSpace
324  * @env_ptr: Pointer to subclass-specific CPUArchState field.
325  * @gdb_regs: Additional GDB registers.
326  * @gdb_num_regs: Number of total registers accessible to GDB.
327  * @gdb_num_g_regs: Number of registers in GDB 'g' packets.
328  * @next_cpu: Next CPU sharing TB cache.
329  * @opaque: User data.
330  * @mem_io_pc: Host Program Counter at which the memory was accessed.
331  * @mem_io_vaddr: Target virtual address at which the memory was accessed.
332  * @kvm_fd: vCPU file descriptor for KVM.
333  * @work_mutex: Lock to prevent multiple access to queued_work_*.
334  * @queued_work_first: First asynchronous work pending.
335  * @trace_dstate_delayed: Delayed changes to trace_dstate (includes all changes
336  *                        to @trace_dstate).
337  * @trace_dstate: Dynamic tracing state of events for this vCPU (bitmask).
338  * @ignore_memory_transaction_failures: Cached copy of the MachineState
339  *    flag of the same name: allows the board to suppress calling of the
340  *    CPU do_transaction_failed hook function.
341  *
342  * State of one CPU core or thread.
343  */
344 struct CPUState {
345     /*< private >*/
346     DeviceState parent_obj;
347     /*< public >*/
348
349     int nr_cores;
350     int nr_threads;
351
352     struct QemuThread *thread;
353 #ifdef _WIN32
354     HANDLE hThread;
355 #endif
356     int thread_id;
357     bool running, has_waiter;
358     struct QemuCond *halt_cond;
359     bool thread_kicked;
360     bool created;
361     bool stop;
362     bool stopped;
363     bool unplug;
364     bool crash_occurred;
365     bool exit_request;
366     uint32_t cflags_next_tb;
367     /* updates protected by BQL */
368     uint32_t interrupt_request;
369     int singlestep_enabled;
370     int64_t icount_budget;
371     int64_t icount_extra;
372     sigjmp_buf jmp_env;
373
374     QemuMutex work_mutex;
375     struct qemu_work_item *queued_work_first, *queued_work_last;
376
377     CPUAddressSpace *cpu_ases;
378     int num_ases;
379     AddressSpace *as;
380     MemoryRegion *memory;
381
382     void *env_ptr; /* CPUArchState */
383
384     /* Accessed in parallel; all accesses must be atomic */
385     struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE];
386
387     struct GDBRegisterState *gdb_regs;
388     int gdb_num_regs;
389     int gdb_num_g_regs;
390     QTAILQ_ENTRY(CPUState) node;
391
392     /* ice debug support */
393     QTAILQ_HEAD(, CPUBreakpoint) breakpoints;
394
395     QTAILQ_HEAD(, CPUWatchpoint) watchpoints;
396     CPUWatchpoint *watchpoint_hit;
397
398     void *opaque;
399
400     /* In order to avoid passing too many arguments to the MMIO helpers,
401      * we store some rarely used information in the CPU context.
402      */
403     uintptr_t mem_io_pc;
404     vaddr mem_io_vaddr;
405     /*
406      * This is only needed for the legacy cpu_unassigned_access() hook;
407      * when all targets using it have been converted to use
408      * cpu_transaction_failed() instead it can be removed.
409      */
410     MMUAccessType mem_io_access_type;
411
412     int kvm_fd;
413     struct KVMState *kvm_state;
414     struct kvm_run *kvm_run;
415
416     /* Used for events with 'vcpu' and *without* the 'disabled' properties */
417     DECLARE_BITMAP(trace_dstate_delayed, CPU_TRACE_DSTATE_MAX_EVENTS);
418     DECLARE_BITMAP(trace_dstate, CPU_TRACE_DSTATE_MAX_EVENTS);
419
420     /* TODO Move common fields from CPUArchState here. */
421     int cpu_index;
422     int cluster_index;
423     uint32_t halted;
424     uint32_t can_do_io;
425     int32_t exception_index;
426
427     /* shared by kvm, hax and hvf */
428     bool vcpu_dirty;
429
430     /* Used to keep track of an outstanding cpu throttle thread for migration
431      * autoconverge
432      */
433     bool throttle_thread_scheduled;
434
435     bool ignore_memory_transaction_failures;
436
437     /* Note that this is accessed at the start of every TB via a negative
438        offset from AREG0.  Leave this field at the end so as to make the
439        (absolute value) offset as small as possible.  This reduces code
440        size, especially for hosts without large memory offsets.  */
441     union {
442         uint32_t u32;
443         icount_decr_u16 u16;
444     } icount_decr;
445
446     struct hax_vcpu_state *hax_vcpu;
447
448     int hvf_fd;
449
450     /* track IOMMUs whose translations we've cached in the TCG TLB */
451     GArray *iommu_notifiers;
452 };
453
454 typedef QTAILQ_HEAD(CPUTailQ, CPUState) CPUTailQ;
455 extern CPUTailQ cpus;
456
457 #define first_cpu        QTAILQ_FIRST_RCU(&cpus)
458 #define CPU_NEXT(cpu)    QTAILQ_NEXT_RCU(cpu, node)
459 #define CPU_FOREACH(cpu) QTAILQ_FOREACH_RCU(cpu, &cpus, node)
460 #define CPU_FOREACH_SAFE(cpu, next_cpu) \
461     QTAILQ_FOREACH_SAFE_RCU(cpu, &cpus, node, next_cpu)
462
463 extern __thread CPUState *current_cpu;
464
465 static inline void cpu_tb_jmp_cache_clear(CPUState *cpu)
466 {
467     unsigned int i;
468
469     for (i = 0; i < TB_JMP_CACHE_SIZE; i++) {
470         atomic_set(&cpu->tb_jmp_cache[i], NULL);
471     }
472 }
473
474 /**
475  * qemu_tcg_mttcg_enabled:
476  * Check whether we are running MultiThread TCG or not.
477  *
478  * Returns: %true if we are in MTTCG mode %false otherwise.
479  */
480 extern bool mttcg_enabled;
481 #define qemu_tcg_mttcg_enabled() (mttcg_enabled)
482
483 /**
484  * cpu_paging_enabled:
485  * @cpu: The CPU whose state is to be inspected.
486  *
487  * Returns: %true if paging is enabled, %false otherwise.
488  */
489 bool cpu_paging_enabled(const CPUState *cpu);
490
491 /**
492  * cpu_get_memory_mapping:
493  * @cpu: The CPU whose memory mappings are to be obtained.
494  * @list: Where to write the memory mappings to.
495  * @errp: Pointer for reporting an #Error.
496  */
497 void cpu_get_memory_mapping(CPUState *cpu, MemoryMappingList *list,
498                             Error **errp);
499
500 /**
501  * cpu_write_elf64_note:
502  * @f: pointer to a function that writes memory to a file
503  * @cpu: The CPU whose memory is to be dumped
504  * @cpuid: ID number of the CPU
505  * @opaque: pointer to the CPUState struct
506  */
507 int cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cpu,
508                          int cpuid, void *opaque);
509
510 /**
511  * cpu_write_elf64_qemunote:
512  * @f: pointer to a function that writes memory to a file
513  * @cpu: The CPU whose memory is to be dumped
514  * @cpuid: ID number of the CPU
515  * @opaque: pointer to the CPUState struct
516  */
517 int cpu_write_elf64_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
518                              void *opaque);
519
520 /**
521  * cpu_write_elf32_note:
522  * @f: pointer to a function that writes memory to a file
523  * @cpu: The CPU whose memory is to be dumped
524  * @cpuid: ID number of the CPU
525  * @opaque: pointer to the CPUState struct
526  */
527 int cpu_write_elf32_note(WriteCoreDumpFunction f, CPUState *cpu,
528                          int cpuid, void *opaque);
529
530 /**
531  * cpu_write_elf32_qemunote:
532  * @f: pointer to a function that writes memory to a file
533  * @cpu: The CPU whose memory is to be dumped
534  * @cpuid: ID number of the CPU
535  * @opaque: pointer to the CPUState struct
536  */
537 int cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
538                              void *opaque);
539
540 /**
541  * cpu_get_crash_info:
542  * @cpu: The CPU to get crash information for
543  *
544  * Gets the previously saved crash information.
545  * Caller is responsible for freeing the data.
546  */
547 GuestPanicInformation *cpu_get_crash_info(CPUState *cpu);
548
549 /**
550  * CPUDumpFlags:
551  * @CPU_DUMP_CODE:
552  * @CPU_DUMP_FPU: dump FPU register state, not just integer
553  * @CPU_DUMP_CCOP: dump info about TCG QEMU's condition code optimization state
554  */
555 enum CPUDumpFlags {
556     CPU_DUMP_CODE = 0x00010000,
557     CPU_DUMP_FPU  = 0x00020000,
558     CPU_DUMP_CCOP = 0x00040000,
559 };
560
561 /**
562  * cpu_dump_state:
563  * @cpu: The CPU whose state is to be dumped.
564  * @f: If non-null, dump to this stream, else to current print sink.
565  *
566  * Dumps CPU state.
567  */
568 void cpu_dump_state(CPUState *cpu, FILE *f, int flags);
569
570 /**
571  * cpu_dump_statistics:
572  * @cpu: The CPU whose state is to be dumped.
573  * @flags: Flags what to dump.
574  *
575  * Dump CPU statistics to the current monitor if we have one, else to
576  * stdout.
577  */
578 void cpu_dump_statistics(CPUState *cpu, int flags);
579
580 #ifndef CONFIG_USER_ONLY
581 /**
582  * cpu_get_phys_page_attrs_debug:
583  * @cpu: The CPU to obtain the physical page address for.
584  * @addr: The virtual address.
585  * @attrs: Updated on return with the memory transaction attributes to use
586  *         for this access.
587  *
588  * Obtains the physical page corresponding to a virtual one, together
589  * with the corresponding memory transaction attributes to use for the access.
590  * Use it only for debugging because no protection checks are done.
591  *
592  * Returns: Corresponding physical page address or -1 if no page found.
593  */
594 static inline hwaddr cpu_get_phys_page_attrs_debug(CPUState *cpu, vaddr addr,
595                                                    MemTxAttrs *attrs)
596 {
597     CPUClass *cc = CPU_GET_CLASS(cpu);
598
599     if (cc->get_phys_page_attrs_debug) {
600         return cc->get_phys_page_attrs_debug(cpu, addr, attrs);
601     }
602     /* Fallback for CPUs which don't implement the _attrs_ hook */
603     *attrs = MEMTXATTRS_UNSPECIFIED;
604     return cc->get_phys_page_debug(cpu, addr);
605 }
606
607 /**
608  * cpu_get_phys_page_debug:
609  * @cpu: The CPU to obtain the physical page address for.
610  * @addr: The virtual address.
611  *
612  * Obtains the physical page corresponding to a virtual one.
613  * Use it only for debugging because no protection checks are done.
614  *
615  * Returns: Corresponding physical page address or -1 if no page found.
616  */
617 static inline hwaddr cpu_get_phys_page_debug(CPUState *cpu, vaddr addr)
618 {
619     MemTxAttrs attrs = {};
620
621     return cpu_get_phys_page_attrs_debug(cpu, addr, &attrs);
622 }
623
624 /** cpu_asidx_from_attrs:
625  * @cpu: CPU
626  * @attrs: memory transaction attributes
627  *
628  * Returns the address space index specifying the CPU AddressSpace
629  * to use for a memory access with the given transaction attributes.
630  */
631 static inline int cpu_asidx_from_attrs(CPUState *cpu, MemTxAttrs attrs)
632 {
633     CPUClass *cc = CPU_GET_CLASS(cpu);
634     int ret = 0;
635
636     if (cc->asidx_from_attrs) {
637         ret = cc->asidx_from_attrs(cpu, attrs);
638         assert(ret < cpu->num_ases && ret >= 0);
639     }
640     return ret;
641 }
642 #endif
643
644 /**
645  * cpu_list_add:
646  * @cpu: The CPU to be added to the list of CPUs.
647  */
648 void cpu_list_add(CPUState *cpu);
649
650 /**
651  * cpu_list_remove:
652  * @cpu: The CPU to be removed from the list of CPUs.
653  */
654 void cpu_list_remove(CPUState *cpu);
655
656 /**
657  * cpu_reset:
658  * @cpu: The CPU whose state is to be reset.
659  */
660 void cpu_reset(CPUState *cpu);
661
662 /**
663  * cpu_class_by_name:
664  * @typename: The CPU base type.
665  * @cpu_model: The model string without any parameters.
666  *
667  * Looks up a CPU #ObjectClass matching name @cpu_model.
668  *
669  * Returns: A #CPUClass or %NULL if not matching class is found.
670  */
671 ObjectClass *cpu_class_by_name(const char *typename, const char *cpu_model);
672
673 /**
674  * cpu_create:
675  * @typename: The CPU type.
676  *
677  * Instantiates a CPU and realizes the CPU.
678  *
679  * Returns: A #CPUState or %NULL if an error occurred.
680  */
681 CPUState *cpu_create(const char *typename);
682
683 /**
684  * parse_cpu_option:
685  * @cpu_option: The -cpu option including optional parameters.
686  *
687  * processes optional parameters and registers them as global properties
688  *
689  * Returns: type of CPU to create or prints error and terminates process
690  *          if an error occurred.
691  */
692 const char *parse_cpu_option(const char *cpu_option);
693
694 /**
695  * cpu_has_work:
696  * @cpu: The vCPU to check.
697  *
698  * Checks whether the CPU has work to do.
699  *
700  * Returns: %true if the CPU has work, %false otherwise.
701  */
702 static inline bool cpu_has_work(CPUState *cpu)
703 {
704     CPUClass *cc = CPU_GET_CLASS(cpu);
705
706     g_assert(cc->has_work);
707     return cc->has_work(cpu);
708 }
709
710 /**
711  * qemu_cpu_is_self:
712  * @cpu: The vCPU to check against.
713  *
714  * Checks whether the caller is executing on the vCPU thread.
715  *
716  * Returns: %true if called from @cpu's thread, %false otherwise.
717  */
718 bool qemu_cpu_is_self(CPUState *cpu);
719
720 /**
721  * qemu_cpu_kick:
722  * @cpu: The vCPU to kick.
723  *
724  * Kicks @cpu's thread.
725  */
726 void qemu_cpu_kick(CPUState *cpu);
727
728 /**
729  * cpu_is_stopped:
730  * @cpu: The CPU to check.
731  *
732  * Checks whether the CPU is stopped.
733  *
734  * Returns: %true if run state is not running or if artificially stopped;
735  * %false otherwise.
736  */
737 bool cpu_is_stopped(CPUState *cpu);
738
739 /**
740  * do_run_on_cpu:
741  * @cpu: The vCPU to run on.
742  * @func: The function to be executed.
743  * @data: Data to pass to the function.
744  * @mutex: Mutex to release while waiting for @func to run.
745  *
746  * Used internally in the implementation of run_on_cpu.
747  */
748 void do_run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data,
749                    QemuMutex *mutex);
750
751 /**
752  * run_on_cpu:
753  * @cpu: The vCPU to run on.
754  * @func: The function to be executed.
755  * @data: Data to pass to the function.
756  *
757  * Schedules the function @func for execution on the vCPU @cpu.
758  */
759 void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data);
760
761 /**
762  * async_run_on_cpu:
763  * @cpu: The vCPU to run on.
764  * @func: The function to be executed.
765  * @data: Data to pass to the function.
766  *
767  * Schedules the function @func for execution on the vCPU @cpu asynchronously.
768  */
769 void async_run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data);
770
771 /**
772  * async_safe_run_on_cpu:
773  * @cpu: The vCPU to run on.
774  * @func: The function to be executed.
775  * @data: Data to pass to the function.
776  *
777  * Schedules the function @func for execution on the vCPU @cpu asynchronously,
778  * while all other vCPUs are sleeping.
779  *
780  * Unlike run_on_cpu and async_run_on_cpu, the function is run outside the
781  * BQL.
782  */
783 void async_safe_run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data);
784
785 /**
786  * qemu_get_cpu:
787  * @index: The CPUState@cpu_index value of the CPU to obtain.
788  *
789  * Gets a CPU matching @index.
790  *
791  * Returns: The CPU or %NULL if there is no matching CPU.
792  */
793 CPUState *qemu_get_cpu(int index);
794
795 /**
796  * cpu_exists:
797  * @id: Guest-exposed CPU ID to lookup.
798  *
799  * Search for CPU with specified ID.
800  *
801  * Returns: %true - CPU is found, %false - CPU isn't found.
802  */
803 bool cpu_exists(int64_t id);
804
805 /**
806  * cpu_by_arch_id:
807  * @id: Guest-exposed CPU ID of the CPU to obtain.
808  *
809  * Get a CPU with matching @id.
810  *
811  * Returns: The CPU or %NULL if there is no matching CPU.
812  */
813 CPUState *cpu_by_arch_id(int64_t id);
814
815 /**
816  * cpu_throttle_set:
817  * @new_throttle_pct: Percent of sleep time. Valid range is 1 to 99.
818  *
819  * Throttles all vcpus by forcing them to sleep for the given percentage of
820  * time. A throttle_percentage of 25 corresponds to a 75% duty cycle roughly.
821  * (example: 10ms sleep for every 30ms awake).
822  *
823  * cpu_throttle_set can be called as needed to adjust new_throttle_pct.
824  * Once the throttling starts, it will remain in effect until cpu_throttle_stop
825  * is called.
826  */
827 void cpu_throttle_set(int new_throttle_pct);
828
829 /**
830  * cpu_throttle_stop:
831  *
832  * Stops the vcpu throttling started by cpu_throttle_set.
833  */
834 void cpu_throttle_stop(void);
835
836 /**
837  * cpu_throttle_active:
838  *
839  * Returns: %true if the vcpus are currently being throttled, %false otherwise.
840  */
841 bool cpu_throttle_active(void);
842
843 /**
844  * cpu_throttle_get_percentage:
845  *
846  * Returns the vcpu throttle percentage. See cpu_throttle_set for details.
847  *
848  * Returns: The throttle percentage in range 1 to 99.
849  */
850 int cpu_throttle_get_percentage(void);
851
852 #ifndef CONFIG_USER_ONLY
853
854 typedef void (*CPUInterruptHandler)(CPUState *, int);
855
856 extern CPUInterruptHandler cpu_interrupt_handler;
857
858 /**
859  * cpu_interrupt:
860  * @cpu: The CPU to set an interrupt on.
861  * @mask: The interrupts to set.
862  *
863  * Invokes the interrupt handler.
864  */
865 static inline void cpu_interrupt(CPUState *cpu, int mask)
866 {
867     cpu_interrupt_handler(cpu, mask);
868 }
869
870 #else /* USER_ONLY */
871
872 void cpu_interrupt(CPUState *cpu, int mask);
873
874 #endif /* USER_ONLY */
875
876 #ifdef NEED_CPU_H
877
878 #ifdef CONFIG_SOFTMMU
879 static inline void cpu_unassigned_access(CPUState *cpu, hwaddr addr,
880                                          bool is_write, bool is_exec,
881                                          int opaque, unsigned size)
882 {
883     CPUClass *cc = CPU_GET_CLASS(cpu);
884
885     if (cc->do_unassigned_access) {
886         cc->do_unassigned_access(cpu, addr, is_write, is_exec, opaque, size);
887     }
888 }
889
890 static inline void cpu_unaligned_access(CPUState *cpu, vaddr addr,
891                                         MMUAccessType access_type,
892                                         int mmu_idx, uintptr_t retaddr)
893 {
894     CPUClass *cc = CPU_GET_CLASS(cpu);
895
896     cc->do_unaligned_access(cpu, addr, access_type, mmu_idx, retaddr);
897 }
898
899 static inline void cpu_transaction_failed(CPUState *cpu, hwaddr physaddr,
900                                           vaddr addr, unsigned size,
901                                           MMUAccessType access_type,
902                                           int mmu_idx, MemTxAttrs attrs,
903                                           MemTxResult response,
904                                           uintptr_t retaddr)
905 {
906     CPUClass *cc = CPU_GET_CLASS(cpu);
907
908     if (!cpu->ignore_memory_transaction_failures && cc->do_transaction_failed) {
909         cc->do_transaction_failed(cpu, physaddr, addr, size, access_type,
910                                   mmu_idx, attrs, response, retaddr);
911     }
912 }
913 #endif
914
915 #endif /* NEED_CPU_H */
916
917 /**
918  * cpu_set_pc:
919  * @cpu: The CPU to set the program counter for.
920  * @addr: Program counter value.
921  *
922  * Sets the program counter for a CPU.
923  */
924 static inline void cpu_set_pc(CPUState *cpu, vaddr addr)
925 {
926     CPUClass *cc = CPU_GET_CLASS(cpu);
927
928     cc->set_pc(cpu, addr);
929 }
930
931 /**
932  * cpu_reset_interrupt:
933  * @cpu: The CPU to clear the interrupt on.
934  * @mask: The interrupt mask to clear.
935  *
936  * Resets interrupts on the vCPU @cpu.
937  */
938 void cpu_reset_interrupt(CPUState *cpu, int mask);
939
940 /**
941  * cpu_exit:
942  * @cpu: The CPU to exit.
943  *
944  * Requests the CPU @cpu to exit execution.
945  */
946 void cpu_exit(CPUState *cpu);
947
948 /**
949  * cpu_resume:
950  * @cpu: The CPU to resume.
951  *
952  * Resumes CPU, i.e. puts CPU into runnable state.
953  */
954 void cpu_resume(CPUState *cpu);
955
956 /**
957  * cpu_remove:
958  * @cpu: The CPU to remove.
959  *
960  * Requests the CPU to be removed.
961  */
962 void cpu_remove(CPUState *cpu);
963
964  /**
965  * cpu_remove_sync:
966  * @cpu: The CPU to remove.
967  *
968  * Requests the CPU to be removed and waits till it is removed.
969  */
970 void cpu_remove_sync(CPUState *cpu);
971
972 /**
973  * process_queued_cpu_work() - process all items on CPU work queue
974  * @cpu: The CPU which work queue to process.
975  */
976 void process_queued_cpu_work(CPUState *cpu);
977
978 /**
979  * cpu_exec_start:
980  * @cpu: The CPU for the current thread.
981  *
982  * Record that a CPU has started execution and can be interrupted with
983  * cpu_exit.
984  */
985 void cpu_exec_start(CPUState *cpu);
986
987 /**
988  * cpu_exec_end:
989  * @cpu: The CPU for the current thread.
990  *
991  * Record that a CPU has stopped execution and exclusive sections
992  * can be executed without interrupting it.
993  */
994 void cpu_exec_end(CPUState *cpu);
995
996 /**
997  * start_exclusive:
998  *
999  * Wait for a concurrent exclusive section to end, and then start
1000  * a section of work that is run while other CPUs are not running
1001  * between cpu_exec_start and cpu_exec_end.  CPUs that are running
1002  * cpu_exec are exited immediately.  CPUs that call cpu_exec_start
1003  * during the exclusive section go to sleep until this CPU calls
1004  * end_exclusive.
1005  */
1006 void start_exclusive(void);
1007
1008 /**
1009  * end_exclusive:
1010  *
1011  * Concludes an exclusive execution section started by start_exclusive.
1012  */
1013 void end_exclusive(void);
1014
1015 /**
1016  * qemu_init_vcpu:
1017  * @cpu: The vCPU to initialize.
1018  *
1019  * Initializes a vCPU.
1020  */
1021 void qemu_init_vcpu(CPUState *cpu);
1022
1023 #define SSTEP_ENABLE  0x1  /* Enable simulated HW single stepping */
1024 #define SSTEP_NOIRQ   0x2  /* Do not use IRQ while single stepping */
1025 #define SSTEP_NOTIMER 0x4  /* Do not Timers while single stepping */
1026
1027 /**
1028  * cpu_single_step:
1029  * @cpu: CPU to the flags for.
1030  * @enabled: Flags to enable.
1031  *
1032  * Enables or disables single-stepping for @cpu.
1033  */
1034 void cpu_single_step(CPUState *cpu, int enabled);
1035
1036 /* Breakpoint/watchpoint flags */
1037 #define BP_MEM_READ           0x01
1038 #define BP_MEM_WRITE          0x02
1039 #define BP_MEM_ACCESS         (BP_MEM_READ | BP_MEM_WRITE)
1040 #define BP_STOP_BEFORE_ACCESS 0x04
1041 /* 0x08 currently unused */
1042 #define BP_GDB                0x10
1043 #define BP_CPU                0x20
1044 #define BP_ANY                (BP_GDB | BP_CPU)
1045 #define BP_WATCHPOINT_HIT_READ 0x40
1046 #define BP_WATCHPOINT_HIT_WRITE 0x80
1047 #define BP_WATCHPOINT_HIT (BP_WATCHPOINT_HIT_READ | BP_WATCHPOINT_HIT_WRITE)
1048
1049 int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
1050                           CPUBreakpoint **breakpoint);
1051 int cpu_breakpoint_remove(CPUState *cpu, vaddr pc, int flags);
1052 void cpu_breakpoint_remove_by_ref(CPUState *cpu, CPUBreakpoint *breakpoint);
1053 void cpu_breakpoint_remove_all(CPUState *cpu, int mask);
1054
1055 /* Return true if PC matches an installed breakpoint.  */
1056 static inline bool cpu_breakpoint_test(CPUState *cpu, vaddr pc, int mask)
1057 {
1058     CPUBreakpoint *bp;
1059
1060     if (unlikely(!QTAILQ_EMPTY(&cpu->breakpoints))) {
1061         QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
1062             if (bp->pc == pc && (bp->flags & mask)) {
1063                 return true;
1064             }
1065         }
1066     }
1067     return false;
1068 }
1069
1070 int cpu_watchpoint_insert(CPUState *cpu, vaddr addr, vaddr len,
1071                           int flags, CPUWatchpoint **watchpoint);
1072 int cpu_watchpoint_remove(CPUState *cpu, vaddr addr,
1073                           vaddr len, int flags);
1074 void cpu_watchpoint_remove_by_ref(CPUState *cpu, CPUWatchpoint *watchpoint);
1075 void cpu_watchpoint_remove_all(CPUState *cpu, int mask);
1076
1077 /**
1078  * cpu_get_address_space:
1079  * @cpu: CPU to get address space from
1080  * @asidx: index identifying which address space to get
1081  *
1082  * Return the requested address space of this CPU. @asidx
1083  * specifies which address space to read.
1084  */
1085 AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx);
1086
1087 void QEMU_NORETURN cpu_abort(CPUState *cpu, const char *fmt, ...)
1088     GCC_FMT_ATTR(2, 3);
1089 extern Property cpu_common_props[];
1090 void cpu_exec_initfn(CPUState *cpu);
1091 void cpu_exec_realizefn(CPUState *cpu, Error **errp);
1092 void cpu_exec_unrealizefn(CPUState *cpu);
1093
1094 /**
1095  * target_words_bigendian:
1096  * Returns true if the (default) endianness of the target is big endian,
1097  * false otherwise. Note that in target-specific code, you can use
1098  * TARGET_WORDS_BIGENDIAN directly instead. On the other hand, common
1099  * code should normally never need to know about the endianness of the
1100  * target, so please do *not* use this function unless you know very well
1101  * what you are doing!
1102  */
1103 bool target_words_bigendian(void);
1104
1105 #ifdef NEED_CPU_H
1106
1107 #ifdef CONFIG_SOFTMMU
1108 extern const struct VMStateDescription vmstate_cpu_common;
1109 #else
1110 #define vmstate_cpu_common vmstate_dummy
1111 #endif
1112
1113 #define VMSTATE_CPU() {                                                     \
1114     .name = "parent_obj",                                                   \
1115     .size = sizeof(CPUState),                                               \
1116     .vmsd = &vmstate_cpu_common,                                            \
1117     .flags = VMS_STRUCT,                                                    \
1118     .offset = 0,                                                            \
1119 }
1120
1121 #endif /* NEED_CPU_H */
1122
1123 #define UNASSIGNED_CPU_INDEX -1
1124 #define UNASSIGNED_CLUSTER_INDEX -1
1125
1126 #endif
This page took 0.08409 seconds and 4 git commands to generate.