brintos

brintos / linux-shallow public Read only

0
0
Text · 3.5 KiB · ac376d8 Raw
147 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __ACPI_ACPI_THERMAL_H3#define __ACPI_ACPI_THERMAL_H4 5#include <asm/ioctl.h>6 7#define ACPI_THERMAL_MAGIC 's'8 9#define ACPI_THERMAL_GET_TRT_LEN _IOR(ACPI_THERMAL_MAGIC, 1, unsigned long)10#define ACPI_THERMAL_GET_ART_LEN _IOR(ACPI_THERMAL_MAGIC, 2, unsigned long)11#define ACPI_THERMAL_GET_TRT_COUNT _IOR(ACPI_THERMAL_MAGIC, 3, unsigned long)12#define ACPI_THERMAL_GET_ART_COUNT _IOR(ACPI_THERMAL_MAGIC, 4, unsigned long)13 14#define ACPI_THERMAL_GET_TRT	_IOR(ACPI_THERMAL_MAGIC, 5, unsigned long)15#define ACPI_THERMAL_GET_ART	_IOR(ACPI_THERMAL_MAGIC, 6, unsigned long)16 17/*18 * ACPI_THERMAL_GET_PSVT_COUNT = Number of PSVT entries19 * ACPI_THERMAL_GET_PSVT_LEN = Total return data size (PSVT count x each20 * PSVT entry size)21 * ACPI_THERMAL_GET_PSVT = Get the data as an array of psvt_objects22 */23#define ACPI_THERMAL_GET_PSVT_LEN _IOR(ACPI_THERMAL_MAGIC, 7, unsigned long)24#define ACPI_THERMAL_GET_PSVT_COUNT _IOR(ACPI_THERMAL_MAGIC, 8, unsigned long)25#define ACPI_THERMAL_GET_PSVT	_IOR(ACPI_THERMAL_MAGIC, 9, unsigned long)26 27struct art {28	acpi_handle source;29	acpi_handle target;30	struct_group(data,31		u64 weight;32		u64 ac0_max;33		u64 ac1_max;34		u64 ac2_max;35		u64 ac3_max;36		u64 ac4_max;37		u64 ac5_max;38		u64 ac6_max;39		u64 ac7_max;40		u64 ac8_max;41		u64 ac9_max;42	);43} __packed;44 45struct trt {46	acpi_handle source;47	acpi_handle target;48	u64 influence;49	u64 sample_period;50	u64 reserved1;51	u64 reserved2;52	u64 reserved3;53	u64 reserved4;54} __packed;55 56#define ACPI_NR_PSVT_ELEMENTS	1257#define ACPI_PSVT_CONTROL_KNOB	758#define ACPI_LIMIT_STR_MAX_LEN	859 60struct psvt {61	acpi_handle source;62	acpi_handle target;63	u64 priority;64	u64 sample_period;65	u64 passive_temp;66	u64 source_domain;67	u64 control_knob;68	union {69		/* For limit_type = ACPI_TYPE_INTEGER */70		u64 integer;71		/* For limit_type = ACPI_TYPE_STRING */72		char string[ACPI_LIMIT_STR_MAX_LEN];73		char *str_ptr;74	} limit;75	u64 step_size;76	u64 limit_coeff;77	u64 unlimit_coeff;78	/* Spec calls this field reserved, so we borrow it for type info */79	u64 control_knob_type; /* ACPI_TYPE_STRING or ACPI_TYPE_INTEGER */80} __packed;81 82#define ACPI_NR_ART_ELEMENTS 1383/* for usrspace */84union art_object {85	struct {86		char source_device[8]; /* ACPI single name */87		char target_device[8]; /* ACPI single name */88		struct_group(data,89			u64 weight;90			u64 ac0_max_level;91			u64 ac1_max_level;92			u64 ac2_max_level;93			u64 ac3_max_level;94			u64 ac4_max_level;95			u64 ac5_max_level;96			u64 ac6_max_level;97			u64 ac7_max_level;98			u64 ac8_max_level;99			u64 ac9_max_level;100		);101	};102	u64 __data[ACPI_NR_ART_ELEMENTS];103};104 105union trt_object {106	struct {107		char source_device[8]; /* ACPI single name */108		char target_device[8]; /* ACPI single name */109		u64 influence;110		u64 sample_period;111		u64 reserved[4];112	};113	u64 __data[8];114};115 116union psvt_object {117	struct {118		char source_device[8];119		char target_device[8];120		u64 priority;121		u64 sample_period;122		u64 passive_temp;123		u64 source_domain;124		u64 control_knob;125		union {126			u64 integer;127			char string[ACPI_LIMIT_STR_MAX_LEN];128		} limit;129		u64 step_size;130		u64 limit_coeff;131		u64 unlimit_coeff;132		u64 control_knob_type;133	};134	u64 __data[ACPI_NR_PSVT_ELEMENTS];135};136 137#ifdef __KERNEL__138int acpi_thermal_rel_misc_device_add(acpi_handle handle);139int acpi_thermal_rel_misc_device_remove(acpi_handle handle);140int acpi_parse_art(acpi_handle handle, int *art_count, struct art **arts,141		bool create_dev);142int acpi_parse_trt(acpi_handle handle, int *trt_count, struct trt **trts,143		bool create_dev);144#endif145 146#endif /* __ACPI_ACPI_THERMAL_H */147