return nonstandard->set_pmqos_data(res_name, data);
}
-int pass_get_resource(struct pass *pass)
+int pass_get_resource(struct pass_resource *pass_res)
{
+ struct pass_conf_data *cdata = &pass_res->cdata;
struct pass_resource_info *info;
- int i, ret;
+ char *res_name = cdata->res_name;
+ char name[BUFF_MAX];
+ int res_type = cdata->res_type;
+ int ret;
int len;
- for (i = 0; i < pass->num_resources; i++) {
- struct pass_resource *pass_res = &pass->res[i];
- struct pass_conf_data *cdata = &pass_res->cdata;
- int res_type = cdata->res_type;
- char *res_name = cdata->res_name;
- char name[BUFF_MAX];
-
- switch (res_type) {
- case PASS_RESOURCE_CPU_ID:
- len = strlen(PASS_RESOURCE_CPU_NAME);
- strncpy(name, PASS_RESOURCE_CPU_NAME, len);
- break;
- case PASS_RESOURCE_BUS_ID:
- len = strlen(PASS_RESOURCE_BUS_NAME);
- strncpy(name, PASS_RESOURCE_BUS_NAME, len);
- break;
- case PASS_RESOURCE_GPU_ID:
- len = strlen(PASS_RESOURCE_GPU_NAME);
- strncpy(name, PASS_RESOURCE_GPU_NAME, len);
- break;
- case PASS_RESOURCE_NONSTANDARD_ID:
- len = strlen(PASS_RESOURCE_NONSTANDARD_NAME);
- strncpy(name, PASS_RESOURCE_NONSTANDARD_NAME, len);
- break;
- default:
- _E("Unsupported resource type (type: %d)\n", res_type);
- return -EINVAL;
- };
-
- name[len] = '\0';
-
- ret = pass_get_hal_info(name,
- (const struct pass_resource_info **)&info);
- if (ret < 0) {
- _E("Failed to get hal info\n");
- return -EINVAL;
- }
+ switch (res_type) {
+ case PASS_RESOURCE_CPU_ID:
+ len = strlen(PASS_RESOURCE_CPU_NAME);
+ strncpy(name, PASS_RESOURCE_CPU_NAME, len);
+ break;
+ case PASS_RESOURCE_BUS_ID:
+ len = strlen(PASS_RESOURCE_BUS_NAME);
+ strncpy(name, PASS_RESOURCE_BUS_NAME, len);
+ break;
+ case PASS_RESOURCE_GPU_ID:
+ len = strlen(PASS_RESOURCE_GPU_NAME);
+ strncpy(name, PASS_RESOURCE_GPU_NAME, len);
+ break;
+ case PASS_RESOURCE_NONSTANDARD_ID:
+ len = strlen(PASS_RESOURCE_NONSTANDARD_NAME);
+ strncpy(name, PASS_RESOURCE_NONSTANDARD_NAME, len);
+ break;
+ default:
+ _E("Unsupported resource type (type: %d)\n", res_type);
+ return -EINVAL;
+ };
- if (!info->open || !info->close) {
- _E("Failed to open %s h/w device\n", name);
- return -EPERM;
- }
+ name[len] = '\0';
+
+ ret = pass_get_hal_info(name,
+ (const struct pass_resource_info **)&info);
+ if (ret < 0) {
+ _D("Failed to get %s.so for '%s' resource\n",
+ name, res_name);
+ return -EINVAL;
+ }
- switch (res_type) {
- case PASS_RESOURCE_CPU_ID:
- ret = info->open(res_name, info,
- (struct pass_resource_common**)&pass_res->hal.cpu);
- break;
- case PASS_RESOURCE_BUS_ID:
- ret = info->open(res_name, info,
- (struct pass_resource_common**)&pass_res->hal.bus);
- break;
- case PASS_RESOURCE_GPU_ID:
- ret = info->open(res_name, info,
- (struct pass_resource_common**)&pass_res->hal.gpu);
- break;
- case PASS_RESOURCE_NONSTANDARD_ID:
- ret = info->open(res_name, info,
- (struct pass_resource_common**)&pass_res->hal.nonstandard);
- break;
- };
+ if (!info->open || !info->close) {
+ _D("Failed to get functions of %s.so for '%s' resource\n",
+ name, res_name);
+ return -EPERM;
+ }
- if (ret < 0) {
- _E("Failed to open %s h/w resource (%s)\n",
- name, res_name);
- return -EINVAL;
- }
+ switch (res_type) {
+ case PASS_RESOURCE_CPU_ID:
+ ret = info->open(res_name, info,
+ (struct pass_resource_common**)&pass_res->hal.cpu);
+ break;
+ case PASS_RESOURCE_BUS_ID:
+ ret = info->open(res_name, info,
+ (struct pass_resource_common**)&pass_res->hal.bus);
+ break;
+ case PASS_RESOURCE_GPU_ID:
+ ret = info->open(res_name, info,
+ (struct pass_resource_common**)&pass_res->hal.gpu);
+ break;
+ case PASS_RESOURCE_NONSTANDARD_ID:
+ ret = info->open(res_name, info,
+ (struct pass_resource_common**)&pass_res->hal.nonstandard);
+ break;
+ };
- _D("Complete the loading for %s h/w resource (%s)\n",
- name, res_name);
+ if (ret < 0) {
+ _D("Failed to open %s.so for '%s' resource\n",
+ name, res_name);
+ return -EINVAL;
}
return 0;
}
-int pass_put_resource(struct pass *pass)
+int pass_put_resource(struct pass_resource *pass_res)
{
+ struct pass_conf_data *cdata = &pass_res->cdata;
struct pass_resource_common *common;
struct pass_resource_info *info;
- int i, ret;
-
- for (i = 0; i < pass->num_resources; i++) {
- struct pass_resource *pass_res = &pass->res[i];
- struct pass_conf_data *cdata = &pass_res->cdata;
- char *res_name = cdata->res_name;
- int res_type = cdata->res_type;
-
- switch (res_type) {
- case PASS_RESOURCE_CPU_ID:
- common = (struct pass_resource_common*)pass_res->hal.cpu;
- info = pass_res->hal.cpu->common.info;
- ret = info->close(res_name, common);
- break;
- case PASS_RESOURCE_BUS_ID:
- common = (struct pass_resource_common*)pass_res->hal.bus;
- info = pass_res->hal.bus->common.info;
- ret = info->close(res_name, common);
- break;
- case PASS_RESOURCE_GPU_ID:
- common = (struct pass_resource_common*)pass_res->hal.gpu;
- info = pass_res->hal.gpu->common.info;
- ret = info->close(res_name, common);
- break;
- case PASS_RESOURCE_NONSTANDARD_ID:
- common = (struct pass_resource_common*)pass_res->hal.nonstandard;
- info = pass_res->hal.nonstandard->common.info;
- ret = info->close(res_name, common);
- default:
- return -EINVAL;
- };
+ char *res_name = cdata->res_name;
+ int res_type = cdata->res_type;
+ int ret;
- if (ret < 0) {
- _E("Failed to close %s h/w resource (%s)\n",
- info->name, res_name);
- return -EINVAL;
- }
+ switch (res_type) {
+ case PASS_RESOURCE_CPU_ID:
+ common = (struct pass_resource_common*)pass_res->hal.cpu;
+ info = pass_res->hal.cpu->common.info;
+ ret = info->close(res_name, common);
+ break;
+ case PASS_RESOURCE_BUS_ID:
+ common = (struct pass_resource_common*)pass_res->hal.bus;
+ info = pass_res->hal.bus->common.info;
+ ret = info->close(res_name, common);
+ break;
+ case PASS_RESOURCE_GPU_ID:
+ common = (struct pass_resource_common*)pass_res->hal.gpu;
+ info = pass_res->hal.gpu->common.info;
+ ret = info->close(res_name, common);
+ break;
+ case PASS_RESOURCE_NONSTANDARD_ID:
+ common = (struct pass_resource_common*)pass_res->hal.nonstandard;
+ info = pass_res->hal.nonstandard->common.info;
+ ret = info->close(res_name, common);
+ default:
+ return -EINVAL;
+ };
- _D("Complete the closing for %s h/w resource (%s)\n",
- info->name, res_name);
+ if (ret < 0) {
+ _D("Failed to close %s.so for '%s' resource\n",
+ info->name, res_name);
+ return -EINVAL;
}
return 0;
return ret;
}
- /* Initialize pass resources data based on parsed configuration */
- ret = pass_get_resource(&g_pass);
- if (ret < 0) {
- _E("cannot get the pass resource\n");
- return ret;
- }
-
+ /* Print the information for all h/w resources */
for (i = 0; i < g_pass.num_resources; i++) {
- struct pass_resource *pass_res = &g_pass.res[i];
- struct pass_policy *policy = &pass_res->policy;
struct pass_conf_data *cdata = &g_pass.res[i].cdata;
- policy->governor = NULL;
-
_I("Resource%d type : %d\n", i, cdata->res_type);
_I("Resource%d name : %s\n", i, cdata->res_name);
_I("Resource%d path_conf_file : %s\n", i, cdata->path_conf_file);
_I("Resource%d first cpu : %d\n\n", i, cdata->cpu);
}
+ /* Initialize pass resources data based on parsed configuration */
for (i = 0; i < g_pass.num_resources; i++) {
struct pass_resource *pass_res = &g_pass.res[i];
struct pass_policy *policy = &pass_res->policy;
+ struct pass_conf_data *cdata = &g_pass.res[i].cdata;
+
+ policy->governor = NULL;
+ ret = pass_get_resource(pass_res);
+ if (ret < -1) {
+ _E("Cannot get the pass '%s' resource (%d)\n",
+ cdata->res_name, ret);
+ return ret;
+ }
ret = pass_resource_init(policy);
if (ret < 0) {
- _E("cannot initialize the pass resource\n");
- pass_exit(NULL);
- return -EINVAL;
+ _E("Cannot initialize the pass '%s' resource (%d)\n",
+ cdata->res_name, ret);
+ return ret;
}
}
static int pass_exit_done(void)
{
- int i, ret;
+ int i, ret = 0;
for (i = 0; i < g_pass.num_resources; i++) {
struct pass_resource *pass_res = &g_pass.res[i];
struct pass_policy *policy = &pass_res->policy;
+ struct pass_conf_data *cdata = &g_pass.res[i].cdata;
ret = pass_resource_exit(policy);
if (ret < 0) {
- _E("failed to clean up the pass resource #%d\n", i);
+ _E("Cannot exit the pass '%s' resource (%d)\n",
+ cdata->res_name, ret);
goto exit;
}
- }
- ret = pass_put_resource(&g_pass);
- if (ret < 0)
- _E("cannot put the pass resource\n");
+ ret = pass_put_resource(pass_res);
+ if (ret < 0) {
+ _E("Cannot put the pass '%s' resource (%d)\n",
+ cdata->res_name, ret);
+ goto exit;
+ }
+ }
exit:
return ret;