Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 1 | /* |
| 2 | * sPAPR CPU core device. |
| 3 | * |
| 4 | * Copyright (C) 2016 Bharata B Rao <bharata@linux.vnet.ibm.com> |
| 5 | * |
| 6 | * This work is licensed under the terms of the GNU GPL, version 2 or later. |
| 7 | * See the COPYING file in the top-level directory. |
| 8 | */ |
| 9 | #ifndef HW_SPAPR_CPU_CORE_H |
| 10 | #define HW_SPAPR_CPU_CORE_H |
| 11 | |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 12 | #include "hw/cpu/core.h" |
Markus Armbruster | a27bd6c | 2019-08-12 07:23:51 +0200 | [diff] [blame] | 13 | #include "hw/qdev-core.h" |
Thomas Huth | fcf5ef2 | 2016-10-11 08:56:52 +0200 | [diff] [blame] | 14 | #include "target/ppc/cpu-qom.h" |
David Gibson | 84369f6 | 2018-05-01 16:22:49 +1000 | [diff] [blame] | 15 | #include "target/ppc/cpu.h" |
Eduardo Habkost | db1015e | 2020-09-03 16:43:22 -0400 | [diff] [blame] | 16 | #include "qom/object.h" |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 17 | |
| 18 | #define TYPE_SPAPR_CPU_CORE "spapr-cpu-core" |
Eduardo Habkost | c821774a | 2020-08-31 17:07:37 -0400 | [diff] [blame] | 19 | OBJECT_DECLARE_TYPE(SpaprCpuCore, SpaprCpuCoreClass, |
Eduardo Habkost | 30b5707 | 2020-09-16 14:25:17 -0400 | [diff] [blame] | 20 | SPAPR_CPU_CORE) |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 21 | |
Igor Mammedov | 44cd95e | 2017-10-09 21:51:00 +0200 | [diff] [blame] | 22 | #define SPAPR_CPU_CORE_TYPE_NAME(model) model "-" TYPE_SPAPR_CPU_CORE |
| 23 | |
Eduardo Habkost | db1015e | 2020-09-03 16:43:22 -0400 | [diff] [blame] | 24 | struct SpaprCpuCore { |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 25 | /*< private >*/ |
| 26 | CPUCore parent_obj; |
| 27 | |
| 28 | /*< public >*/ |
Greg Kurz | 94ad93b | 2017-11-20 10:19:54 +0100 | [diff] [blame] | 29 | PowerPCCPU **threads; |
Igor Mammedov | 0b8497f | 2017-05-10 13:29:46 +0200 | [diff] [blame] | 30 | int node_id; |
David Gibson | ce2918c | 2019-03-06 15:35:37 +1100 | [diff] [blame] | 31 | bool pre_3_0_migration; /* older machine don't know about SpaprCpuState */ |
Eduardo Habkost | db1015e | 2020-09-03 16:43:22 -0400 | [diff] [blame] | 32 | }; |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 33 | |
Eduardo Habkost | db1015e | 2020-09-03 16:43:22 -0400 | [diff] [blame] | 34 | struct SpaprCpuCoreClass { |
Bharata B Rao | 7ebaf79 | 2016-09-12 13:27:20 +0530 | [diff] [blame] | 35 | DeviceClass parent_class; |
Igor Mammedov | b51d3c8 | 2017-10-09 21:51:01 +0200 | [diff] [blame] | 36 | const char *cpu_type; |
Eduardo Habkost | db1015e | 2020-09-03 16:43:22 -0400 | [diff] [blame] | 37 | }; |
Bharata B Rao | 7ebaf79 | 2016-09-12 13:27:20 +0530 | [diff] [blame] | 38 | |
Igor Mammedov | 2e9c10e | 2017-10-09 21:51:05 +0200 | [diff] [blame] | 39 | const char *spapr_get_cpu_core_type(const char *cpu_type); |
Alexey Kardashevskiy | 395a20d | 2020-03-10 16:07:31 +1100 | [diff] [blame] | 40 | void spapr_cpu_set_entry_state(PowerPCCPU *cpu, target_ulong nip, |
| 41 | target_ulong r1, target_ulong r3, |
| 42 | target_ulong r4); |
David Gibson | 84369f6 | 2018-05-01 16:22:49 +1000 | [diff] [blame] | 43 | |
David Gibson | ce2918c | 2019-03-06 15:35:37 +1100 | [diff] [blame] | 44 | typedef struct SpaprCpuState { |
David Gibson | 7388efa | 2018-06-13 16:22:18 +1000 | [diff] [blame] | 45 | uint64_t vpa_addr; |
| 46 | uint64_t slb_shadow_addr, slb_shadow_size; |
| 47 | uint64_t dtl_addr, dtl_size; |
Nicholas Piggin | 3a6e622 | 2019-07-18 13:42:12 +1000 | [diff] [blame] | 48 | bool prod; /* not migrated, only used to improve dispatch latencies */ |
Cédric Le Goater | a28b9a5 | 2019-01-17 08:53:26 +0100 | [diff] [blame] | 49 | struct ICPState *icp; |
| 50 | struct XiveTCTX *tctx; |
David Gibson | ce2918c | 2019-03-06 15:35:37 +1100 | [diff] [blame] | 51 | } SpaprCpuState; |
David Gibson | 7388efa | 2018-06-13 16:22:18 +1000 | [diff] [blame] | 52 | |
David Gibson | ce2918c | 2019-03-06 15:35:37 +1100 | [diff] [blame] | 53 | static inline SpaprCpuState *spapr_cpu_state(PowerPCCPU *cpu) |
David Gibson | 7388efa | 2018-06-13 16:22:18 +1000 | [diff] [blame] | 54 | { |
David Gibson | ce2918c | 2019-03-06 15:35:37 +1100 | [diff] [blame] | 55 | return (SpaprCpuState *)cpu->machine_data; |
David Gibson | 7388efa | 2018-06-13 16:22:18 +1000 | [diff] [blame] | 56 | } |
| 57 | |
Bharata B Rao | 3b54254 | 2016-06-10 06:29:01 +0530 | [diff] [blame] | 58 | #endif |