summaryrefslogtreecommitdiffstats
path: root/include/hw/ppc/spapr.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/hw/ppc/spapr.h')
-rw-r--r--include/hw/ppc/spapr.h45
1 files changed, 24 insertions, 21 deletions
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 26ac17e641..0f5628f22e 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -54,20 +54,25 @@ typedef enum {
* Capabilities
*/
-/* These bits go in the migration stream, so they can't be reassigned */
-
/* Hardware Transactional Memory */
-#define SPAPR_CAP_HTM 0x0000000000000001ULL
-
+#define SPAPR_CAP_HTM 0x00
/* Vector Scalar Extensions */
-#define SPAPR_CAP_VSX 0x0000000000000002ULL
-
+#define SPAPR_CAP_VSX 0x01
/* Decimal Floating Point */
-#define SPAPR_CAP_DFP 0x0000000000000004ULL
+#define SPAPR_CAP_DFP 0x02
+/* Num Caps */
+#define SPAPR_CAP_NUM (SPAPR_CAP_DFP + 1)
+
+/*
+ * Capability Values
+ */
+/* Bool Caps */
+#define SPAPR_CAP_OFF 0x00
+#define SPAPR_CAP_ON 0x01
typedef struct sPAPRCapabilities sPAPRCapabilities;
struct sPAPRCapabilities {
- uint64_t mask;
+ uint8_t caps[SPAPR_CAP_NUM];
};
/**
@@ -149,9 +154,8 @@ struct sPAPRMachineState {
const char *icp_type;
- sPAPRCapabilities forced_caps, forbidden_caps;
- sPAPRCapabilities mig_forced_caps, mig_forbidden_caps;
- sPAPRCapabilities effective_caps;
+ bool cmd_line_caps[SPAPR_CAP_NUM];
+ sPAPRCapabilities def, eff, mig;
};
#define H_SUCCESS 0
@@ -749,24 +753,23 @@ int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num);
qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq);
+
+int spapr_caps_pre_load(void *opaque);
+int spapr_caps_pre_save(void *opaque);
+
/*
* Handling of optional capabilities
*/
-extern const VMStateDescription vmstate_spapr_caps;
-
-static inline sPAPRCapabilities spapr_caps(uint64_t mask)
-{
- sPAPRCapabilities caps = { mask };
- return caps;
-}
+extern const VMStateDescription vmstate_spapr_cap_htm;
+extern const VMStateDescription vmstate_spapr_cap_vsx;
+extern const VMStateDescription vmstate_spapr_cap_dfp;
-static inline bool spapr_has_cap(sPAPRMachineState *spapr, uint64_t cap)
+static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
{
- return !!(spapr->effective_caps.mask & cap);
+ return spapr->eff.caps[cap];
}
void spapr_caps_reset(sPAPRMachineState *spapr);
-void spapr_caps_validate(sPAPRMachineState *spapr, Error **errp);
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
int spapr_caps_post_migration(sPAPRMachineState *spapr);