13e8c4d31SAmit Kucheria /* SPDX-License-Identifier: GPL-2.0 */ 23e8c4d31SAmit Kucheria #ifndef __ACPI_ACPI_THERMAL_H 33e8c4d31SAmit Kucheria #define __ACPI_ACPI_THERMAL_H 43e8c4d31SAmit Kucheria 53e8c4d31SAmit Kucheria #include <asm/ioctl.h> 63e8c4d31SAmit Kucheria 73e8c4d31SAmit Kucheria #define ACPI_THERMAL_MAGIC 's' 83e8c4d31SAmit Kucheria 93e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_TRT_LEN _IOR(ACPI_THERMAL_MAGIC, 1, unsigned long) 103e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_ART_LEN _IOR(ACPI_THERMAL_MAGIC, 2, unsigned long) 113e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_TRT_COUNT _IOR(ACPI_THERMAL_MAGIC, 3, unsigned long) 123e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_ART_COUNT _IOR(ACPI_THERMAL_MAGIC, 4, unsigned long) 133e8c4d31SAmit Kucheria 143e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_TRT _IOR(ACPI_THERMAL_MAGIC, 5, unsigned long) 153e8c4d31SAmit Kucheria #define ACPI_THERMAL_GET_ART _IOR(ACPI_THERMAL_MAGIC, 6, unsigned long) 163e8c4d31SAmit Kucheria 17*ea197ea2SSrinivas Pandruvada /* 18*ea197ea2SSrinivas Pandruvada * ACPI_THERMAL_GET_PSVT_COUNT = Number of PSVT entries 19*ea197ea2SSrinivas Pandruvada * ACPI_THERMAL_GET_PSVT_LEN = Total return data size (PSVT count x each 20*ea197ea2SSrinivas Pandruvada * PSVT entry size) 21*ea197ea2SSrinivas Pandruvada * ACPI_THERMAL_GET_PSVT = Get the data as an array of psvt_objects 22*ea197ea2SSrinivas Pandruvada */ 23*ea197ea2SSrinivas Pandruvada #define ACPI_THERMAL_GET_PSVT_LEN _IOR(ACPI_THERMAL_MAGIC, 7, unsigned long) 24*ea197ea2SSrinivas Pandruvada #define ACPI_THERMAL_GET_PSVT_COUNT _IOR(ACPI_THERMAL_MAGIC, 8, unsigned long) 25*ea197ea2SSrinivas Pandruvada #define ACPI_THERMAL_GET_PSVT _IOR(ACPI_THERMAL_MAGIC, 9, unsigned long) 26*ea197ea2SSrinivas Pandruvada 273e8c4d31SAmit Kucheria struct art { 283e8c4d31SAmit Kucheria acpi_handle source; 293e8c4d31SAmit Kucheria acpi_handle target; 30764cedc5SKees Cook struct_group(data, 313e8c4d31SAmit Kucheria u64 weight; 323e8c4d31SAmit Kucheria u64 ac0_max; 333e8c4d31SAmit Kucheria u64 ac1_max; 343e8c4d31SAmit Kucheria u64 ac2_max; 353e8c4d31SAmit Kucheria u64 ac3_max; 363e8c4d31SAmit Kucheria u64 ac4_max; 373e8c4d31SAmit Kucheria u64 ac5_max; 383e8c4d31SAmit Kucheria u64 ac6_max; 393e8c4d31SAmit Kucheria u64 ac7_max; 403e8c4d31SAmit Kucheria u64 ac8_max; 413e8c4d31SAmit Kucheria u64 ac9_max; 42764cedc5SKees Cook ); 433e8c4d31SAmit Kucheria } __packed; 443e8c4d31SAmit Kucheria 453e8c4d31SAmit Kucheria struct trt { 463e8c4d31SAmit Kucheria acpi_handle source; 473e8c4d31SAmit Kucheria acpi_handle target; 483e8c4d31SAmit Kucheria u64 influence; 493e8c4d31SAmit Kucheria u64 sample_period; 503e8c4d31SAmit Kucheria u64 reserved1; 513e8c4d31SAmit Kucheria u64 reserved2; 523e8c4d31SAmit Kucheria u64 reserved3; 533e8c4d31SAmit Kucheria u64 reserved4; 543e8c4d31SAmit Kucheria } __packed; 553e8c4d31SAmit Kucheria 56*ea197ea2SSrinivas Pandruvada #define ACPI_NR_PSVT_ELEMENTS 12 57*ea197ea2SSrinivas Pandruvada #define ACPI_PSVT_CONTROL_KNOB 7 58*ea197ea2SSrinivas Pandruvada #define ACPI_LIMIT_STR_MAX_LEN 8 59*ea197ea2SSrinivas Pandruvada 60*ea197ea2SSrinivas Pandruvada struct psvt { 61*ea197ea2SSrinivas Pandruvada acpi_handle source; 62*ea197ea2SSrinivas Pandruvada acpi_handle target; 63*ea197ea2SSrinivas Pandruvada u64 priority; 64*ea197ea2SSrinivas Pandruvada u64 sample_period; 65*ea197ea2SSrinivas Pandruvada u64 passive_temp; 66*ea197ea2SSrinivas Pandruvada u64 source_domain; 67*ea197ea2SSrinivas Pandruvada u64 control_knob; 68*ea197ea2SSrinivas Pandruvada union { 69*ea197ea2SSrinivas Pandruvada /* For limit_type = ACPI_TYPE_INTEGER */ 70*ea197ea2SSrinivas Pandruvada u64 integer; 71*ea197ea2SSrinivas Pandruvada /* For limit_type = ACPI_TYPE_STRING */ 72*ea197ea2SSrinivas Pandruvada char string[ACPI_LIMIT_STR_MAX_LEN]; 73*ea197ea2SSrinivas Pandruvada char *str_ptr; 74*ea197ea2SSrinivas Pandruvada } limit; 75*ea197ea2SSrinivas Pandruvada u64 step_size; 76*ea197ea2SSrinivas Pandruvada u64 limit_coeff; 77*ea197ea2SSrinivas Pandruvada u64 unlimit_coeff; 78*ea197ea2SSrinivas Pandruvada /* Spec calls this field reserved, so we borrow it for type info */ 79*ea197ea2SSrinivas Pandruvada u64 control_knob_type; /* ACPI_TYPE_STRING or ACPI_TYPE_INTEGER */ 80*ea197ea2SSrinivas Pandruvada } __packed; 81*ea197ea2SSrinivas Pandruvada 823e8c4d31SAmit Kucheria #define ACPI_NR_ART_ELEMENTS 13 833e8c4d31SAmit Kucheria /* for usrspace */ 843e8c4d31SAmit Kucheria union art_object { 853e8c4d31SAmit Kucheria struct { 863e8c4d31SAmit Kucheria char source_device[8]; /* ACPI single name */ 873e8c4d31SAmit Kucheria char target_device[8]; /* ACPI single name */ 88764cedc5SKees Cook struct_group(data, 893e8c4d31SAmit Kucheria u64 weight; 903e8c4d31SAmit Kucheria u64 ac0_max_level; 913e8c4d31SAmit Kucheria u64 ac1_max_level; 923e8c4d31SAmit Kucheria u64 ac2_max_level; 933e8c4d31SAmit Kucheria u64 ac3_max_level; 943e8c4d31SAmit Kucheria u64 ac4_max_level; 953e8c4d31SAmit Kucheria u64 ac5_max_level; 963e8c4d31SAmit Kucheria u64 ac6_max_level; 973e8c4d31SAmit Kucheria u64 ac7_max_level; 983e8c4d31SAmit Kucheria u64 ac8_max_level; 993e8c4d31SAmit Kucheria u64 ac9_max_level; 100764cedc5SKees Cook ); 1013e8c4d31SAmit Kucheria }; 1023e8c4d31SAmit Kucheria u64 __data[ACPI_NR_ART_ELEMENTS]; 1033e8c4d31SAmit Kucheria }; 1043e8c4d31SAmit Kucheria 1053e8c4d31SAmit Kucheria union trt_object { 1063e8c4d31SAmit Kucheria struct { 1073e8c4d31SAmit Kucheria char source_device[8]; /* ACPI single name */ 1083e8c4d31SAmit Kucheria char target_device[8]; /* ACPI single name */ 1093e8c4d31SAmit Kucheria u64 influence; 1103e8c4d31SAmit Kucheria u64 sample_period; 1113e8c4d31SAmit Kucheria u64 reserved[4]; 1123e8c4d31SAmit Kucheria }; 1133e8c4d31SAmit Kucheria u64 __data[8]; 1143e8c4d31SAmit Kucheria }; 1153e8c4d31SAmit Kucheria 116*ea197ea2SSrinivas Pandruvada union psvt_object { 117*ea197ea2SSrinivas Pandruvada struct { 118*ea197ea2SSrinivas Pandruvada char source_device[8]; 119*ea197ea2SSrinivas Pandruvada char target_device[8]; 120*ea197ea2SSrinivas Pandruvada u64 priority; 121*ea197ea2SSrinivas Pandruvada u64 sample_period; 122*ea197ea2SSrinivas Pandruvada u64 passive_temp; 123*ea197ea2SSrinivas Pandruvada u64 source_domain; 124*ea197ea2SSrinivas Pandruvada u64 control_knob; 125*ea197ea2SSrinivas Pandruvada union { 126*ea197ea2SSrinivas Pandruvada u64 integer; 127*ea197ea2SSrinivas Pandruvada char string[ACPI_LIMIT_STR_MAX_LEN]; 128*ea197ea2SSrinivas Pandruvada } limit; 129*ea197ea2SSrinivas Pandruvada u64 step_size; 130*ea197ea2SSrinivas Pandruvada u64 limit_coeff; 131*ea197ea2SSrinivas Pandruvada u64 unlimit_coeff; 132*ea197ea2SSrinivas Pandruvada u64 control_knob_type; 133*ea197ea2SSrinivas Pandruvada }; 134*ea197ea2SSrinivas Pandruvada u64 __data[ACPI_NR_PSVT_ELEMENTS]; 135*ea197ea2SSrinivas Pandruvada }; 136*ea197ea2SSrinivas Pandruvada 1373e8c4d31SAmit Kucheria #ifdef __KERNEL__ 1383e8c4d31SAmit Kucheria int acpi_thermal_rel_misc_device_add(acpi_handle handle); 1393e8c4d31SAmit Kucheria int acpi_thermal_rel_misc_device_remove(acpi_handle handle); 1403e8c4d31SAmit Kucheria int acpi_parse_art(acpi_handle handle, int *art_count, struct art **arts, 1413e8c4d31SAmit Kucheria bool create_dev); 1423e8c4d31SAmit Kucheria int acpi_parse_trt(acpi_handle handle, int *trt_count, struct trt **trts, 1433e8c4d31SAmit Kucheria bool create_dev); 1443e8c4d31SAmit Kucheria #endif 1453e8c4d31SAmit Kucheria 1463e8c4d31SAmit Kucheria #endif /* __ACPI_ACPI_THERMAL_H */ 147