diff options
Diffstat (limited to 'thermal_client.h')
-rw-r--r-- | thermal_client.h | 76 |
1 files changed, 45 insertions, 31 deletions
diff --git a/thermal_client.h b/thermal_client.h index 02e6911..e70d2ec 100644 --- a/thermal_client.h +++ b/thermal_client.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2016, 2019, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -39,48 +39,48 @@ extern "C" { /* Enum for supported fields */ enum supported_fields { - UNKNOWN_FIELD = 0x0, - DISABLE_FIELD = 0x1, - SAMPLING_FIELD = 0x2, - POLLING_DELAY_FIELD = SAMPLING_FIELD, - THRESHOLDS_FIELD = 0x4, - SET_POINT_FIELD = THRESHOLDS_FIELD, - THRESHOLDS_CLR_FIELD = 0x8, - SET_POINT_CLR_FIELD = THRESHOLDS_CLR_FIELD, - ACTION_INFO_FIELD = 0x10, - UPPER_LIMIT_FIELD = ACTION_INFO_FIELD, - LOWER_LIMIT_FIELD = 0x20, - PASSIVE_DELAY_FIELD = 0x40, - SUPPORTED_FIELD_MAX = 0x80, + UNKNOWN_FIELD = 0x0, + DISABLE_FIELD = 0x1, + SAMPLING_FIELD = 0x2, + POLLING_DELAY_FIELD = SAMPLING_FIELD, + THRESHOLDS_FIELD = 0x4, + SET_POINT_FIELD = THRESHOLDS_FIELD, + THRESHOLDS_CLR_FIELD = 0x8, + SET_POINT_CLR_FIELD = THRESHOLDS_CLR_FIELD, + ACTION_INFO_FIELD = 0x10, + UPPER_LIMIT_FIELD = ACTION_INFO_FIELD, + LOWER_LIMIT_FIELD = 0x20, + PASSIVE_DELAY_FIELD = 0x40, + SUPPORTED_FIELD_MAX = 0x80, }; enum field_data_type { - FIELD_INT = 0, - FIELD_STR, - FIELD_INT_ARR, - FIELD_ARR_STR, - FIELD_ARR_INT_ARR, - FIELD_MAX + FIELD_INT = 0, + FIELD_STR, + FIELD_INT_ARR, + FIELD_ARR_STR, + FIELD_ARR_INT_ARR, + FIELD_MAX }; struct action_info_data { - int info[MAX_ACTIONS]; - uint32_t num_actions; + int info[MAX_ACTIONS]; + uint32_t num_actions; }; struct field_data { - char *field_name; - enum field_data_type data_type; - uint32_t num_data; - void *data; + char *field_name; + enum field_data_type data_type; + uint32_t num_data; + void *data; }; struct config_instance { - char *cfg_desc; - char *algo_type; - unsigned int fields_mask; /* mask set by client to request to adjust supported fields */ - uint32_t num_fields; - struct field_data *fields; + char *cfg_desc; + char *algo_type; + unsigned int fields_mask; /* mask set by client to request to adjust supported fields */ + uint32_t num_fields; + struct field_data *fields; }; int thermal_client_config_query(char *algo_type, struct config_instance **configs); @@ -91,6 +91,20 @@ int thermal_client_register_callback(char *client_name, int (*callback)(int , vo int thermal_client_request(char *client_name, int req_data); void thermal_client_unregister_callback(int client_cb_handle); +/* APIs for bandwidth clients to send/clear bandwidth perf levels to thermal-engine */ +int thermal_bandwidth_client_request(char *client_name, int req_data); +void thermal_bandwidth_client_cancel_request(char *client_name); + +/* Inline API to combine two 15 bit bw inputs into single int variable and return the same */ +static inline int thermal_bandwidth_client_merge_input_info(int bw_score, int uc_id) +{ + if (bw_score < 0 || bw_score > 0x7fff || + uc_id < 0 || uc_id > 0x7fff) + return -1; + + return (((uc_id & 0x7fff) << 0x10) | (bw_score & 0x7fff)); +} + #ifdef __cplusplus } #endif |