diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2017-10-09 18:22:51 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2017-10-09 18:22:51 -0700 |
commit | d91d5a85027710c90e58022df423f37c9fc018e6 (patch) | |
tree | 7b8ba15b0fbbc4ffe784ff9ba92538bd36412538 | |
parent | 0a660bae268eb5f110470bf2f005dd45d325b24a (diff) | |
parent | 2df5b73b30f2f15a27c47624ae8d343a9869aa56 (diff) | |
download | vr-d91d5a85027710c90e58022df423f37c9fc018e6.tar.gz |
Merge 2df5b73b30f2f15a27c47624ae8d343a9869aa56 on remote branch
Change-Id: Ie4d4eb72bf44e67acdcbb3f38404fa7e8a2f255d
-rw-r--r-- | Android.mk | 10 | ||||
-rw-r--r-- | vr-845.c | 52 | ||||
-rw-r--r-- | vr.c | 87 |
3 files changed, 128 insertions, 21 deletions
@@ -17,11 +17,19 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../device/qcom/common/thermal-engine -LOCAL_MODULE := vr.msm8998 +LOCAL_MODULE := vr.$(TARGET_BOARD_PLATFORM) LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_PROPRIETARY_MODULE := true LOCAL_SRC_FILES := vr.c + +ifeq ($(call is-board-platform-in-list,msm8998), true) LOCAL_SRC_FILES += vr-8998.c +endif + +ifeq ($(call is-board-platform-in-list,sdm845), true) +LOCAL_SRC_FILES += vr-845.c +endif + LOCAL_SHARED_LIBRARIES := liblog libcutils LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS += -Wno-unused-parameter diff --git a/vr-845.c b/vr-845.c new file mode 100644 index 0000000..e1409ec --- /dev/null +++ b/vr-845.c @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017, The Linux Foundation. All rights reserved. + * Not a contribution + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "vr_int.h" + +// List thermal configs in format {name, algo_type} +// This list is manually synced with the thermal config + +#define THERMAL_CONFIG_SYNCED 1 + +#if THERMAL_CONFIG_SYNCED + +#define NUM_NON_VR_CONFIGS 4 +static thermal_algo_info_t non_vr_thermal_configs[NUM_NON_VR_CONFIGS] = + {{.config_name = "SKIN-HIGH-FLOOR", .algo_name = "ss"}, + {.config_name = "SKIN-MID-FLOOR", .algo_name = "ss"}, + {.config_name = "SKIN-LOW-FLOOR", .algo_name = "ss"}, + {.config_name = "VIRTUAL-SS-GPU-SKIN", .algo_name = "ss"}}; + +#define NUM_VR_CONFIGS 1 +static thermal_algo_info_t vr_thermal_configs[NUM_VR_CONFIGS] = + {{.config_name = "VR-EMMC", .algo_name = "monitor"}}; + +int load_thermal_cfg_info(thermal_cfg_info_t *non_vr, thermal_cfg_info_t *vr) { + if(!non_vr || !vr) + return -1; + + non_vr->num_cfgs = NUM_NON_VR_CONFIGS; + non_vr->cfgs = &non_vr_thermal_configs[0]; + + vr->num_cfgs = NUM_VR_CONFIGS; + vr->cfgs = &vr_thermal_configs[0]; + + return 0; +} + +#endif @@ -41,14 +41,14 @@ static void (*p_thermal_client_config_cleanup)(struct config_instance *, unsigne static int max_string_size = 36; static int error_state = 0; //global error state - don't do anything if set! -#define DEBUG 1 +#define DEBUG 0 static thermal_cfg_info_t non_vr_thermal_cfgs; static thermal_cfg_info_t vr_thermal_cfgs; int __attribute__ ((weak)) load_thermal_cfg_info(thermal_cfg_info_t *non_vr, thermal_cfg_info_t *vr) { - + ALOGD("Entering %s",__func__); non_vr->num_cfgs = 0; vr->num_cfgs = 0; @@ -84,6 +84,7 @@ static void log_config_instance(struct config_instance *instance ){ * Debug function for printing out all instances of "ss" and "monitor" algos */ static void query_thermal_config(){ + ALOGD("Entering %s",__func__); struct config_instance *instances; int num_configs = (*p_thermal_client_config_query)("ss", &instances); @@ -113,8 +114,8 @@ static void query_thermal_config(){ * Load the thermal client library * returns 0 on success */ -static int load_thermal_client(void) -{ +static int load_thermal_client(void){ + ALOGD("Entering %s",__func__); char *thermal_client_so = "vendor/lib64/libthermalclient.so"; dlhandle = dlopen(thermal_client_so, RTLD_NOW | RTLD_LOCAL); @@ -157,51 +158,90 @@ error_handle: } /** + * Free the config_instance as allocated in allocate_config_instance + */ +static void free_config_instance(struct config_instance *config){ + + if (config) { + if (config->fields) { + free(config->fields[0].data); + free(config->fields[0].field_name); + free(config->fields); + } + free(config->algo_type); + free(config->cfg_desc); + free(config); + } +} + +/** * Allocate a new struct config_instance for modifying the disable field */ static struct config_instance *allocate_config_instance(){ + ALOGD("Entering %s",__func__); struct config_instance *config = (struct config_instance *)malloc(sizeof(struct config_instance)); + if (!config) { + ALOGE("Unable to allocate memory for config"); + return NULL; + } memset(config, 0, sizeof(*config)); config->cfg_desc = (char *)malloc(sizeof(char) * max_string_size); + if (!config->cfg_desc) { + free_config_instance(config); + ALOGE("Unable to allocate memory for config->cfg_desc"); + return NULL; + } memset(config->cfg_desc, 0, sizeof(char)*max_string_size); config->algo_type = (char *)malloc(sizeof(char) * max_string_size); + if (!config->algo_type) { + free_config_instance(config); + ALOGE("Unable to allocate memory for config->algo_type"); + return NULL; + } memset(config->algo_type, 0, sizeof(char) * max_string_size); config->fields = (struct field_data *)malloc(sizeof(struct field_data)); + if (!config->fields) { + free_config_instance(config); + ALOGE("Unable to allocate memory for config->fields"); + return NULL; + } memset(config->fields, 0, sizeof(*config->fields)); config->fields[0].field_name = (char*)malloc(sizeof(char) * max_string_size); + if (!config->fields[0].field_name) { + free_config_instance(config); + ALOGE("Unable to allocate memory for config->fields[0].field_name"); + return NULL; + } memset(config->fields[0].field_name, 0, sizeof(char) * max_string_size); config->fields[0].data = (void*)malloc(sizeof(int)); + if (!config->fields[0].data) { + free_config_instance(config); + ALOGE("Unable to allocate memory for config->fields[0].data"); + return NULL; + } return config; } -/** - * Free the config_instance as allocated in allocate_config_instance - */ -static void free_config_instance(struct config_instance *config){ - - free(config->fields[0].data); - free(config->fields[0].field_name); - free(config->fields); - free(config->algo_type); - free(config->cfg_desc); - free(config); -} /** * disable a thermal config * returns 1 on success, anything else is a failure */ static int disable_config(char *config_name, char *algo_type){ + ALOGD("Entering %s",__func__); int result = 0; if (error_state) { return 0; } struct config_instance *config = allocate_config_instance(); + if (!config) { + return 0; + } strlcpy(config->cfg_desc, config_name, max_string_size); strlcpy(config->algo_type, algo_type, max_string_size); strlcpy(config->fields[0].field_name, "disable", max_string_size); @@ -227,11 +267,15 @@ static int disable_config(char *config_name, char *algo_type){ * returns 1 on success, anything else is failure */ static int enable_config(char *config_name, char *algo_type){ + ALOGD("Entering %s",__func__); int result = 0; if (error_state) { return 0; } struct config_instance *config = allocate_config_instance(); + if (!config) { + return 0; + } strlcpy(config->cfg_desc, config_name, max_string_size); strlcpy(config->algo_type, algo_type, max_string_size); strlcpy(config->fields[0].field_name, "disable", max_string_size); @@ -258,6 +302,7 @@ static int enable_config(char *config_name, char *algo_type){ * Attempts to clean up any outstanding thermal config state */ static void error_cleanup(){ + ALOGD("Entering %s",__func__); //disable VR configs, best-effort so ignore return values for (unsigned int i = 0; i < vr_thermal_cfgs.num_cfgs; i++) { disable_config(vr_thermal_cfgs.cfgs[i].config_name, vr_thermal_cfgs.cfgs[i].algo_name); @@ -276,6 +321,7 @@ static void error_cleanup(){ * Set global display/GPU/scheduler configuration to used for VR apps. */ static void set_vr_thermal_configuration() { + ALOGD("Entering %s",__func__); int result = 1; if (error_state) { return; @@ -313,6 +359,7 @@ error: * Reset to default global display/GPU/scheduler configuration. */ static void unset_vr_thermal_configuration() { + ALOGD("Entering %s",__func__); int result = 1; if (error_state) { return; @@ -345,8 +392,8 @@ error: return; } -static void vr_init(struct vr_module *module) -{ +static void vr_init(struct vr_module *module){ + ALOGD("Entering %s",__func__); int success = load_thermal_client(); if (success != 0) { ALOGE("failed to load thermal client"); @@ -360,8 +407,8 @@ static void vr_init(struct vr_module *module) } -static void vr_set_vr_mode(struct vr_module *module, bool enabled) -{ +static void vr_set_vr_mode(struct vr_module *module, bool enabled){ + ALOGD("Entering %s",__func__); if (enabled) { set_vr_thermal_configuration(); } else { |