[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH][pvops_dom0][1/4] add acpi parser related platform hypercall



Domain0 acpi parser related platform hypercall

From: Yu Ke <ke.yu@xxxxxxxxx>

This patches implements the xen_platform_op hypercall, to pass the parsed
ACPI info to hypervisor.

Signed-off-by: Yu Ke <ke.yu@xxxxxxxxx>
Signed-off-by: Tian Kevin <kevin.tian@xxxxxxxxx>
---

 include/xen/interface/platform.h |  114 ++++++++++++++++++++++++++++++++++++++
 include/xen/interface/xen.h      |    1 
 2 files changed, 115 insertions(+), 0 deletions(-)


diff --git a/include/xen/interface/platform.h b/include/xen/interface/platform.h
index 2307b0f..2f9e08e 100644
--- a/include/xen/interface/platform.h
+++ b/include/xen/interface/platform.h
@@ -199,6 +199,119 @@ struct xenpf_getidletime {
 typedef struct xenpf_getidletime xenpf_getidletime_t;
 DEFINE_GUEST_HANDLE_STRUCT(xenpf_getidletime_t);
 
+#define XENPF_set_processor_pminfo      54
+
+/* ability bits */
+#define XEN_PROCESSOR_PM_CX    1
+#define XEN_PROCESSOR_PM_PX    2
+#define XEN_PROCESSOR_PM_TX    4
+
+/* cmd type */
+#define XEN_PM_CX   0
+#define XEN_PM_PX   1
+#define XEN_PM_TX   2
+
+/* Px sub info type */
+#define XEN_PX_PCT   1
+#define XEN_PX_PSS   2
+#define XEN_PX_PPC   4
+#define XEN_PX_PSD   8
+
+struct xen_power_register {
+       uint32_t     space_id;
+       uint32_t     bit_width;
+       uint32_t     bit_offset;
+       uint32_t     access_size;
+       uint64_t     address;
+};
+
+struct xen_processor_csd {
+       uint32_t    domain;      /* domain number of one dependent group */
+       uint32_t    coord_type;  /* coordination type */
+       uint32_t    num;         /* number of processors in same domain */
+};
+typedef struct xen_processor_csd xen_processor_csd_t;
+DEFINE_GUEST_HANDLE_STRUCT(xen_processor_csd);
+
+struct xen_processor_cx {
+       struct xen_power_register  reg; /* GAS for Cx trigger register */
+       uint8_t     type;     /* cstate value, c0: 0, c1: 1, ... */
+       uint32_t    latency;  /* worst latency (ms) to enter/exit this cstate */
+       uint32_t    power;    /* average power consumption(mW) */
+       uint32_t    dpcnt;    /* number of dependency entries */
+       GUEST_HANDLE(xen_processor_csd) dp; /* NULL if no dependency */
+};
+typedef struct xen_processor_cx xen_processor_cx_t;
+DEFINE_GUEST_HANDLE_STRUCT(xen_processor_cx);
+
+struct xen_processor_flags {
+       uint32_t bm_control:1;
+       uint32_t bm_check:1;
+       uint32_t has_cst:1;
+       uint32_t power_setup_done:1;
+       uint32_t bm_rld_set:1;
+};
+
+struct xen_processor_power {
+       uint32_t count;  /* number of C state entries in array below */
+       struct xen_processor_flags flags;  /* global flags of this processor */
+       GUEST_HANDLE(xen_processor_cx) states; /* supported c states */
+};
+
+struct xen_pct_register {
+       uint8_t  descriptor;
+       uint16_t length;
+       uint8_t  space_id;
+       uint8_t  bit_width;
+       uint8_t  bit_offset;
+       uint8_t  reserved;
+       uint64_t address;
+};
+
+struct xen_processor_px {
+       uint64_t core_frequency; /* megahertz */
+       uint64_t power;      /* milliWatts */
+       uint64_t transition_latency; /* microseconds */
+       uint64_t bus_master_latency; /* microseconds */
+       uint64_t control;        /* control value */
+       uint64_t status;     /* success indicator */
+};
+typedef struct xen_processor_px xen_processor_px_t;
+DEFINE_GUEST_HANDLE_STRUCT(xen_processor_px);
+
+struct xen_psd_package {
+       uint64_t num_entries;
+       uint64_t revision;
+       uint64_t domain;
+       uint64_t coord_type;
+       uint64_t num_processors;
+};
+
+struct xen_processor_performance {
+       uint32_t flags;     /* flag for Px sub info type */
+       uint32_t platform_limit;  /* Platform limitation on freq usage */
+       struct xen_pct_register control_register;
+       struct xen_pct_register status_register;
+       uint32_t state_count;     /* total available performance states */
+       GUEST_HANDLE(xen_processor_px) states;
+       struct xen_psd_package domain_info;
+       uint32_t shared_type;     /* coordination type of this processor */
+};
+typedef struct xen_processor_performance xen_processor_performance_t;
+DEFINE_GUEST_HANDLE_STRUCT(xen_processor_performance);
+
+struct xenpf_set_processor_pminfo {
+       /* IN variables */
+       uint32_t id;    /* ACPI CPU ID */
+       uint32_t type;  /* {XEN_PM_CX, XEN_PM_PX} */
+       union {
+               struct xen_processor_power          power;/* Cx: _CST/_CSD */
+               struct xen_processor_performance    perf; /* Px: 
_PPC/_PCT/_PSS/_PSD */
+       };
+};
+typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
+DEFINE_GUEST_HANDLE_STRUCT(xenpf_set_processor_pminfo);
+
 struct xen_platform_op {
        uint32_t cmd;
        uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
@@ -213,6 +326,7 @@ struct xen_platform_op {
                struct xenpf_enter_acpi_sleep  enter_acpi_sleep;
                struct xenpf_change_freq       change_freq;
                struct xenpf_getidletime       getidletime;
+               struct xenpf_set_processor_pminfo set_pminfo;
                uint8_t                        pad[128];
        } u;
 };
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h
index 327db61..812ffd5 100644
--- a/include/xen/interface/xen.h
+++ b/include/xen/interface/xen.h
@@ -493,6 +493,7 @@ struct dom0_vga_console_info {
 /* These flags are passed in the 'flags' field of start_info_t. */
 #define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
 #define SIF_INITDOMAIN    (1<<1)  /* Is this the initial control domain? */
+#define SIF_PM_MASK       (0xFF<<8) /* reserve 1 byte for xen-pm options */
 
 typedef uint64_t cpumap_t;

Attachment: domain0-acpi-parser-related-hypercall.patch
Description: domain0-acpi-parser-related-hypercall.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.