/** * ipa_rm_dep_graph_delete_dependency() - deleted dependency between * two nodes in graph * @graph: [in] dependency graph * @resource_name: [in] resource to delete * @depends_on_name: [in] resource to delete * * Returns: 0 on success, negative on failure * */ int ipa_rm_dep_graph_delete_dependency(struct ipa_rm_dep_graph *graph, enum ipa_rm_resource_name resource_name, enum ipa_rm_resource_name depends_on_name) { struct ipa_rm_resource *dependant = NULL; struct ipa_rm_resource *dependency = NULL; int result; if (!graph || !IPA_RM_RESORCE_IS_PROD(resource_name) || !IPA_RM_RESORCE_IS_CONS(depends_on_name)) { result = -EINVAL; goto bail; } if (ipa_rm_dep_graph_get_resource(graph, resource_name, &dependant)) { result = -EINVAL; goto bail; } if (ipa_rm_dep_graph_get_resource(graph, depends_on_name, &dependency)) { result = -EINVAL; goto bail; } result = ipa_rm_resource_delete_dependency(dependant, dependency); bail: return result; }
static int ipa_rm_dep_get_index(enum ipa_rm_resource_name resource_name) { int resource_index = IPA_RM_INDEX_INVALID; if (IPA_RM_RESORCE_IS_PROD(resource_name)) resource_index = ipa_rm_prod_index(resource_name); else if (IPA_RM_RESORCE_IS_CONS(resource_name)) resource_index = ipa_rm_cons_index(resource_name); return resource_index; }
static int ipa_rm_peers_list_get_resource_index( enum ipa_rm_resource_name resource_name) { int resource_index = IPA_RM_INDEX_INVALID; if (IPA_RM_RESORCE_IS_PROD(resource_name)) resource_index = ipa_rm_prod_index(resource_name); else if (IPA_RM_RESORCE_IS_CONS(resource_name)) { resource_index = ipa_rm_cons_index(resource_name); if (resource_index != IPA_RM_INDEX_INVALID) resource_index = resource_index - IPA_RM_RESOURCE_PROD_MAX; } return resource_index; }
int ipa_rm_notify_completion(enum ipa_rm_event event, enum ipa_rm_resource_name resource_name) { int result; if (!IPA_RM_RESORCE_IS_CONS(resource_name)) { result = -EINVAL; goto bail; } ipa_rm_wq_send_cmd(IPA_RM_WQ_RESOURCE_CB, resource_name, event, false); result = 0; bail: return result; }
/** * ipa3_rm_dep_graph_delete_dependency() - deleted dependency between * two nodes in graph * @graph: [in] dependency graph * @resource_name: [in] resource to delete * @depends_on_name: [in] resource to delete * * Returns: 0 on success, negative on failure * */ int ipa3_rm_dep_graph_delete_dependency(struct ipa3_rm_dep_graph *graph, enum ipa_rm_resource_name resource_name, enum ipa_rm_resource_name depends_on_name) { struct ipa_rm_resource *dependent = NULL; struct ipa_rm_resource *dependency = NULL; int result; if (!graph || !IPA_RM_RESORCE_IS_PROD(resource_name) || !IPA_RM_RESORCE_IS_CONS(depends_on_name)) { IPA_RM_ERR("invalid params\n"); result = -EINVAL; goto bail; } if (ipa3_rm_dep_graph_get_resource(graph, resource_name, &dependent)) { IPA_RM_ERR("%s does not exist\n", ipa3_rm_resource_str(resource_name)); result = -EINVAL; goto bail; } if (ipa3_rm_dep_graph_get_resource(graph, depends_on_name, &dependency)) { IPA_RM_ERR("%s does not exist\n", ipa3_rm_resource_str(depends_on_name)); result = -EINVAL; goto bail; } result = ipa3_rm_resource_delete_dependency(dependent, dependency); bail: IPA_RM_DBG("EXIT with %d\n", result); return result; }
/** * ipa_rm_notify_completion() - * consumer driver notification for * request_resource / release_resource operations * completion * @event: notified event * @resource_name: resource name * * Returns: 0 on success, negative on failure */ int ipa_rm_notify_completion(enum ipa_rm_event event, enum ipa_rm_resource_name resource_name) { int result; IPA_RM_DBG("event %d on %s\n", event, ipa_rm_resource_str(resource_name)); if (!IPA_RM_RESORCE_IS_CONS(resource_name)) { IPA_RM_ERR("can be called on CONS only\n"); result = -EINVAL; goto bail; } ipa_rm_wq_send_cmd(IPA_RM_WQ_RESOURCE_CB, resource_name, event, false); result = 0; bail: IPA_RM_DBG("EXIT with %d\n", result); return result; }