1#ifndef LINUX_POWERPC_PERF_HV_24X7_H_
2#define LINUX_POWERPC_PERF_HV_24X7_H_
3
4#include <linux/types.h>
5
6enum hv_perf_domains {
7#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v,
8#include "hv-24x7-domains.h"
9#undef DOMAIN
10};
11
12struct hv_24x7_request {
13	/* PHYSICAL domains require enabling via phyp/hmc. */
14	__u8 performance_domain;
15	__u8 reserved[0x1];
16
17	/* bytes to read starting at @data_offset. must be a multiple of 8 */
18	__be16 data_size;
19
20	/*
21	 * byte offset within the perf domain to read from. must be 8 byte
22	 * aligned
23	 */
24	__be32 data_offset;
25
26	/*
27	 * only valid for VIRTUAL_PROCESSOR domains, ignored for others.
28	 * -1 means "current partition only"
29	 *  Enabling via phyp/hmc required for non-"-1" values. 0 forbidden
30	 *  unless requestor is 0.
31	 */
32	__be16 starting_lpar_ix;
33
34	/*
35	 * Ignored when @starting_lpar_ix == -1
36	 * Ignored when @performance_domain is not VIRTUAL_PROCESSOR_*
37	 * -1 means "infinite" or all
38	 */
39	__be16 max_num_lpars;
40
41	/* chip, core, or virtual processor based on @performance_domain */
42	__be16 starting_ix;
43	__be16 max_ix;
44} __packed;
45
46struct hv_24x7_request_buffer {
47	/* 0 - ? */
48	/* 1 - ? */
49#define HV_24X7_IF_VERSION_CURRENT 0x01
50	__u8 interface_version;
51	__u8 num_requests;
52	__u8 reserved[0xE];
53	struct hv_24x7_request requests[1];
54} __packed;
55
56struct hv_24x7_result_element {
57	__be16 lpar_ix;
58
59	/*
60	 * represents the core, chip, or virtual processor based on the
61	 * request's @performance_domain
62	 */
63	__be16 domain_ix;
64
65	/* -1 if @performance_domain does not refer to a virtual processor */
66	__be32 lpar_cfg_instance_id;
67
68	/* size = @result_element_data_size of cointaining result. */
69	__u64 element_data[1];
70} __packed;
71
72struct hv_24x7_result {
73	__u8 result_ix;
74
75	/*
76	 * 0 = not all result elements fit into the buffer, additional requests
77	 *     required
78	 * 1 = all result elements were returned
79	 */
80	__u8 results_complete;
81	__be16 num_elements_returned;
82
83	/* This is a copy of @data_size from the coresponding hv_24x7_request */
84	__be16 result_element_data_size;
85	__u8 reserved[0x2];
86
87	/* WARNING: only valid for first result element due to variable sizes
88	 *          of result elements */
89	/* struct hv_24x7_result_element[@num_elements_returned] */
90	struct hv_24x7_result_element elements[1];
91} __packed;
92
93struct hv_24x7_data_result_buffer {
94	/* See versioning for request buffer */
95	__u8 interface_version;
96
97	__u8 num_results;
98	__u8 reserved[0x1];
99	__u8 failing_request_ix;
100	__be32 detailed_rc;
101	__be64 cec_cfg_instance_id;
102	__be64 catalog_version_num;
103	__u8 reserved2[0x8];
104	/* WARNING: only valid for the first result due to variable sizes of
105	 *	    results */
106	struct hv_24x7_result results[1]; /* [@num_results] */
107} __packed;
108
109#endif
110