Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47f6a9c4 authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: ipa: unify IPA RM



Unify IPA RM from ipa_v2 and ipa_v3 to common driver
under ipa folder

CRs-Fixed: 995821
Change-Id: I4a7d8c328af7cd5506b3fbbdc76b1bc5bb0de698
Acked-by: default avatarAdy Abraham <adya@qti.qualcomm.com>
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent e6cae5f9
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
obj-$(CONFIG_IPA) += ipa_v2/ ipa_clients/
obj-$(CONFIG_IPA3) += ipa_v3/ ipa_clients/
obj-$(CONFIG_IPA) += ipa_v2/ ipa_clients/ ipa_common
obj-$(CONFIG_IPA3) += ipa_v3/ ipa_clients/ ipa_common

obj-$(CONFIG_IPA) += ipa_api.o
obj-$(CONFIG_IPA3) += ipa_api.o
ipa_common += ipa_api.o ipa_rm.o ipa_rm_dependency_graph.o ipa_rm_peers_list.o ipa_rm_resource.o ipa_rm_inactivity_timer.o
+0 −333
Original line number Diff line number Diff line
@@ -1530,314 +1530,6 @@ int ipa_uc_dereg_rdyCB(void)
}
EXPORT_SYMBOL(ipa_uc_dereg_rdyCB);

/**
 * ipa_rm_create_resource() - create resource
 * @create_params: [in] parameters needed
 *                  for resource initialization
 *
 * Returns: 0 on success, negative on failure
 *
 * This function is called by IPA RM client to initialize client's resources.
 * This API should be called before any other IPA RM API on a given resource
 * name.
 *
 */
int ipa_rm_create_resource(struct ipa_rm_create_params *create_params)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_create_resource, create_params);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_create_resource);

/**
 * ipa_rm_delete_resource() - delete resource
 * @resource_name: name of resource to be deleted
 *
 * Returns: 0 on success, negative on failure
 *
 * This function is called by IPA RM client to delete client's resources.
 *
 */
int ipa_rm_delete_resource(enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_delete_resource, resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_delete_resource);

/**
 * ipa_rm_add_dependency() - create dependency
 *					between 2 resources
 * @resource_name: name of dependent resource
 * @depends_on_name: name of its dependency
 *
 * Returns: 0 on success, negative on failure
 *
 * Side effects: IPA_RM_RESORCE_GRANTED could be generated
 * in case client registered with IPA RM
 */
int ipa_rm_add_dependency(enum ipa_rm_resource_name resource_name,
			enum ipa_rm_resource_name depends_on_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_add_dependency, resource_name,
		depends_on_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_add_dependency);

/**
 * ipa_rm_delete_dependency() - create dependency
 *					between 2 resources
 * @resource_name: name of dependent resource
 * @depends_on_name: name of its dependency
 *
 * Returns: 0 on success, negative on failure
 *
 * Side effects: IPA_RM_RESORCE_GRANTED could be generated
 * in case client registered with IPA RM
 */
int ipa_rm_delete_dependency(enum ipa_rm_resource_name resource_name,
			enum ipa_rm_resource_name depends_on_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_delete_dependency, resource_name,
		depends_on_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_delete_dependency);

/**
 * ipa_rm_request_resource() - request resource
 * @resource_name: [in] name of the requested resource
 *
 * Returns: 0 on success, negative on failure
 *
 * All registered callbacks are called with IPA_RM_RESOURCE_GRANTED
 * on successful completion of this operation.
 */
int ipa_rm_request_resource(enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_request_resource, resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_request_resource);

/**
 * ipa_rm_release_resource() - release resource
 * @resource_name: [in] name of the requested resource
 *
 * Returns: 0 on success, negative on failure
 *
 * All registered callbacks are called with IPA_RM_RESOURCE_RELEASED
 * on successful completion of this operation.
 */
int ipa_rm_release_resource(enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_release_resource, resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_release_resource);

/**
 * ipa_rm_register() - register for event
 * @resource_name: resource name
 * @reg_params: [in] registration parameters
 *
 * Returns: 0 on success, negative on failure
 *
 * Registration parameters provided here should be the same
 * as provided later in  ipa_rm_deregister() call.
 */
int ipa_rm_register(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_register_params *reg_params)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_register, resource_name, reg_params);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_register);

/**
 * ipa_rm_deregister() - cancel the registration
 * @resource_name: resource name
 * @reg_params: [in] registration parameters
 *
 * Returns: 0 on success, negative on failure
 *
 * Registration parameters provided here should be the same
 * as provided in  ipa_rm_register() call.
 */
int ipa_rm_deregister(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_register_params *reg_params)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_deregister, resource_name, reg_params);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_deregister);

/**
 * ipa_rm_set_perf_profile() - set performance profile
 * @resource_name: resource name
 * @profile: [in] profile information.
 *
 * Returns: 0 on success, negative on failure
 *
 * Set resource performance profile.
 * Updates IPA driver if performance level changed.
 */
int ipa_rm_set_perf_profile(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_perf_profile *profile)
{
	int ret;

	IPA_API_DISPATCH_RETURN(
		ipa_rm_set_perf_profile,
		resource_name,
		profile);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_set_perf_profile);

/**
 * 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 ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_notify_completion, event, resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_notify_completion);

/**
* ipa_rm_inactivity_timer_init() - Init function for IPA RM
* inactivity timer. This function shall be called prior calling
* any other API of IPA RM inactivity timer.
*
* @resource_name: Resource name. @see ipa_rm.h
* @msecs: time in miliseccond, that IPA RM inactivity timer
* shall wait prior calling to ipa_rm_release_resource().
*
* Return codes:
* 0: success
* -EINVAL: invalid parameters
*/
int ipa_rm_inactivity_timer_init(enum ipa_rm_resource_name resource_name,
	unsigned long msecs)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_inactivity_timer_init, resource_name,
		msecs);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_inactivity_timer_init);

/**
* ipa_rm_inactivity_timer_destroy() - De-Init function for IPA
* RM inactivity timer.
*
* @resource_name: Resource name. @see ipa_rm.h
*
* Return codes:
* 0: success
* -EINVAL: invalid parameters
*/
int ipa_rm_inactivity_timer_destroy(enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_inactivity_timer_destroy, resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_inactivity_timer_destroy);

/**
* ipa_rm_inactivity_timer_request_resource() - Same as
* ipa_rm_request_resource(), with a difference that calling to
* this function will also cancel the inactivity timer, if
* ipa_rm_inactivity_timer_release_resource() was called earlier.
*
* @resource_name: Resource name. @see ipa_rm.h
*
* Return codes:
* 0: success
* -EINVAL: invalid parameters
*/
int ipa_rm_inactivity_timer_request_resource(
	enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_inactivity_timer_request_resource,
		resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_inactivity_timer_request_resource);

/**
* ipa_rm_inactivity_timer_release_resource() - Sets the
* inactivity timer to the timeout set by
* ipa_rm_inactivity_timer_init(). When the timeout expires, IPA
* RM inactivity timer will call to ipa_rm_release_resource().
* If a call to ipa_rm_inactivity_timer_request_resource() was
* made BEFORE the timout has expired, rge timer will be
* cancelled.
*
* @resource_name: Resource name. @see ipa_rm.h
*
* Return codes:
* 0: success
* -EINVAL: invalid parameters
*/
int ipa_rm_inactivity_timer_release_resource(
	enum ipa_rm_resource_name resource_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_inactivity_timer_release_resource,
		resource_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_inactivity_timer_release_resource);

/**
* teth_bridge_init() - Initialize the Tethering bridge driver
* @params - in/out params for USB initialization API (please look at struct
@@ -2502,31 +2194,6 @@ int ipa_disable_apps_wan_cons_deaggr(uint32_t agg_size, uint32_t agg_count)
}
EXPORT_SYMBOL(ipa_disable_apps_wan_cons_deaggr);

/**
 * ipa_rm_add_dependency_sync() - Create a dependency between 2 resources
 * in a synchronized fashion. In case a producer resource is in GRANTED state
 * and the newly added consumer resource is in RELEASED state, the consumer
 * entity will be requested and the function will block until the consumer
 * is granted.
 * @resource_name: name of dependent resource
 * @depends_on_name: name of its dependency
 *
 * Returns: 0 on success, negative on failure
 *
 * Side effects: May block. See documentation above.
 */
int ipa_rm_add_dependency_sync(enum ipa_rm_resource_name resource_name,
		enum ipa_rm_resource_name depends_on_name)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_rm_add_dependency_sync, resource_name,
		depends_on_name);

	return ret;
}
EXPORT_SYMBOL(ipa_rm_add_dependency_sync);

/**
 * ipa_get_dma_dev()- Returns ipa_ctx dma dev pointer
 *
+0 −43
Original line number Diff line number Diff line
@@ -185,45 +185,6 @@ struct ipa_api_controller {

	int (*ipa_uc_dereg_rdyCB)(void);

	int (*ipa_rm_create_resource)(
		struct ipa_rm_create_params *create_params);

	int (*ipa_rm_delete_resource)(enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_register)(enum ipa_rm_resource_name resource_name,
		struct ipa_rm_register_params *reg_params);

	int (*ipa_rm_deregister)(enum ipa_rm_resource_name resource_name,
		struct ipa_rm_register_params *reg_params);

	int (*ipa_rm_set_perf_profile)(enum ipa_rm_resource_name resource_name,
		struct ipa_rm_perf_profile *profile);

	int (*ipa_rm_add_dependency)(enum ipa_rm_resource_name resource_name,
		enum ipa_rm_resource_name depends_on_name);

	int (*ipa_rm_delete_dependency)(enum ipa_rm_resource_name resource_name,
			enum ipa_rm_resource_name depends_on_name);

	int (*ipa_rm_request_resource)(enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_release_resource)(enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_notify_completion)(enum ipa_rm_event event,
		enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_inactivity_timer_init)(enum ipa_rm_resource_name
		resource_name, unsigned long msecs);

	int (*ipa_rm_inactivity_timer_destroy)(
		enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_inactivity_timer_request_resource)(
		enum ipa_rm_resource_name resource_name);

	int (*ipa_rm_inactivity_timer_release_resource)(
				enum ipa_rm_resource_name resource_name);

	int (*teth_bridge_init)(struct teth_bridge_init_params *params);

	int (*teth_bridge_disconnect)(enum ipa_client_type client);
@@ -310,10 +271,6 @@ struct ipa_api_controller {
	int (*ipa_disable_apps_wan_cons_deaggr)(uint32_t agg_size,
						uint32_t agg_count);

	int (*ipa_rm_add_dependency_sync)(
		enum ipa_rm_resource_name resource_name,
		enum ipa_rm_resource_name depends_on_name);

	struct device *(*ipa_get_dma_dev)(void);

	int (*ipa_release_wdi_mapping)(u32 num_buffers,
+20 −19
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <linux/rndis_ipa.h>
#include <linux/ecm_ipa.h>
#include "../ipa_v3/ipa_i.h"
#include "../ipa_rm_i.h"

#define IPA_USB_RM_TIMEOUT_MSEC 10000
#define IPA_USB_DEV_READY_TIMEOUT_MSEC 10000
@@ -394,7 +395,7 @@ static bool ipa3_usb_set_state(enum ipa3_usb_state new_state, bool err_permit,
		}
		/* Notify RM that consumer is granted */
		if (rm_ctx->cons_requested) {
			ipa3_rm_notify_completion(
			ipa_rm_notify_completion(
				IPA_RM_RESOURCE_GRANTED,
				rm_ctx->cons_params.name);
			rm_ctx->cons_state = IPA_USB_CONS_GRANTED;
@@ -529,12 +530,12 @@ static void ipa3_usb_prod_notify_cb_do(enum ipa_rm_event event,
	switch (event) {
	case IPA_RM_RESOURCE_GRANTED:
		IPA_USB_DBG(":%s granted\n",
			ipa3_rm_resource_str(rm_ctx->prod_params.name));
			ipa_rm_resource_str(rm_ctx->prod_params.name));
		complete_all(&rm_ctx->prod_comp);
		break;
	case IPA_RM_RESOURCE_RELEASED:
		IPA_USB_DBG(":%s released\n",
			ipa3_rm_resource_str(rm_ctx->prod_params.name));
			ipa_rm_resource_str(rm_ctx->prod_params.name));
		complete_all(&rm_ctx->prod_comp);
		break;
	}
@@ -824,13 +825,13 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype)
		result = ipa_rm_create_resource(&rm_ctx->prod_params);
		if (result) {
			IPA_USB_ERR("Failed to create %s RM resource\n",
				ipa3_rm_resource_str(rm_ctx->prod_params.name));
				ipa_rm_resource_str(rm_ctx->prod_params.name));
			return result;
		}
		rm_ctx->prod_valid = true;
		created = true;
		IPA_USB_DBG("Created %s RM resource\n",
			ipa3_rm_resource_str(rm_ctx->prod_params.name));
			ipa_rm_resource_str(rm_ctx->prod_params.name));
	}

	/* Create CONS */
@@ -852,12 +853,12 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype)
		result = ipa_rm_create_resource(&rm_ctx->cons_params);
		if (result) {
			IPA_USB_ERR("Failed to create %s RM resource\n",
				ipa3_rm_resource_str(rm_ctx->cons_params.name));
				ipa_rm_resource_str(rm_ctx->cons_params.name));
			goto create_cons_rsc_fail;
		}
		rm_ctx->cons_valid = true;
		IPA_USB_DBG("Created %s RM resource\n",
			ipa3_rm_resource_str(rm_ctx->cons_params.name));
			ipa_rm_resource_str(rm_ctx->cons_params.name));
	}

	return 0;
@@ -1298,11 +1299,11 @@ static int ipa3_usb_request_prod(enum ipa3_usb_transport_type ttype)
	const char *rsrc_str;

	rm_ctx = &ipa3_usb_ctx->ttype_ctx[ttype].rm_ctx;
	rsrc_str = ipa3_rm_resource_str(rm_ctx->prod_params.name);
	rsrc_str = ipa_rm_resource_str(rm_ctx->prod_params.name);

	IPA_USB_DBG_LOW("requesting %s\n", rsrc_str);
	init_completion(&rm_ctx->prod_comp);
	result = ipa3_rm_request_resource(rm_ctx->prod_params.name);
	result = ipa_rm_request_resource(rm_ctx->prod_params.name);
	if (result) {
		if (result != -EINPROGRESS) {
			IPA_USB_ERR("failed to request %s: %d\n",
@@ -1328,7 +1329,7 @@ static int ipa3_usb_release_prod(enum ipa3_usb_transport_type ttype)
	const char *rsrc_str;

	rm_ctx = &ipa3_usb_ctx->ttype_ctx[ttype].rm_ctx;
	rsrc_str = ipa3_rm_resource_str(rm_ctx->prod_params.name);
	rsrc_str = ipa_rm_resource_str(rm_ctx->prod_params.name);

	IPA_USB_DBG_LOW("releasing %s\n", rsrc_str);

@@ -1408,10 +1409,10 @@ static int ipa3_usb_connect_dpl(void)
	 * is sync in order to make sure the IPA clocks are up before we
	 * continue and notify the USB driver it may continue.
	 */
	res = ipa3_rm_add_dependency_sync(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
	res = ipa_rm_add_dependency_sync(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
				    IPA_RM_RESOURCE_Q6_CONS);
	if (res < 0) {
		IPA_USB_ERR("ipa3_rm_add_dependency_sync() failed.\n");
		IPA_USB_ERR("ipa_rm_add_dependency_sync() failed.\n");
		return res;
	}

@@ -1420,11 +1421,11 @@ static int ipa3_usb_connect_dpl(void)
	 * status is connected (which can happen only later in the flow),
	 * the clocks are already up so the call doesn't need to block.
	 */
	res = ipa3_rm_add_dependency(IPA_RM_RESOURCE_Q6_PROD,
	res = ipa_rm_add_dependency(IPA_RM_RESOURCE_Q6_PROD,
				    IPA_RM_RESOURCE_USB_DPL_CONS);
	if (res < 0 && res != -EINPROGRESS) {
		IPA_USB_ERR("ipa3_rm_add_dependency() failed.\n");
		ipa3_rm_delete_dependency(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
		IPA_USB_ERR("ipa_rm_add_dependency() failed.\n");
		ipa_rm_delete_dependency(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
				IPA_RM_RESOURCE_Q6_CONS);
		return res;
	}
@@ -1590,12 +1591,12 @@ static int ipa3_usb_disconnect_dpl(void)
	int res;

	/* Remove DPL RM dependency */
	res = ipa3_rm_delete_dependency(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
	res = ipa_rm_delete_dependency(IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD,
				    IPA_RM_RESOURCE_Q6_CONS);
	if (res)
		IPA_USB_ERR("deleting DPL_DUMMY_PROD rsrc dependency fail\n");

	res = ipa3_rm_delete_dependency(IPA_RM_RESOURCE_Q6_PROD,
	res = ipa_rm_delete_dependency(IPA_RM_RESOURCE_Q6_PROD,
				 IPA_RM_RESOURCE_USB_DPL_CONS);
	if (res)
		IPA_USB_ERR("deleting DPL_CONS rsrc dependencty fail\n");
@@ -1716,7 +1717,7 @@ static int ipa3_usb_xdci_connect_internal(
		&profile);
	if (result) {
		IPA_USB_ERR("failed to set %s perf profile\n",
			ipa3_rm_resource_str(ipa3_usb_ctx->ttype_ctx[ttype].
			ipa_rm_resource_str(ipa3_usb_ctx->ttype_ctx[ttype].
				rm_ctx.prod_params.name));
		return result;
	}
@@ -1725,7 +1726,7 @@ static int ipa3_usb_xdci_connect_internal(
		&profile);
	if (result) {
		IPA_USB_ERR("failed to set %s perf profile\n",
			ipa3_rm_resource_str(ipa3_usb_ctx->ttype_ctx[ttype].
			ipa_rm_resource_str(ipa3_usb_ctx->ttype_ctx[ttype].
				rm_ctx.cons_params.name));
		return result;
	}
+41 −27
Original line number Diff line number Diff line
@@ -13,9 +13,9 @@
#include <linux/slab.h>
#include <linux/workqueue.h>
#include <linux/ipa.h>
#include "ipa_i.h"
#include "ipa_rm_dependency_graph.h"
#include "ipa_rm_i.h"
#include "ipa_common_i.h"

static const char *resource_name_to_str[IPA_RM_RESOURCE_MAX] = {
	__stringify(IPA_RM_RESOURCE_Q6_PROD),
@@ -61,7 +61,7 @@ struct ipa_rm_notify_ipa_work_type {
};

/**
 * ipa2_rm_create_resource() - create resource
 * ipa_rm_create_resource() - create resource
 * @create_params: [in] parameters needed
 *                  for resource initialization
 *
@@ -72,7 +72,7 @@ struct ipa_rm_notify_ipa_work_type {
 * name.
 *
 */
int ipa2_rm_create_resource(struct ipa_rm_create_params *create_params)
int ipa_rm_create_resource(struct ipa_rm_create_params *create_params)
{
	struct ipa_rm_resource *resource;
	unsigned long flags;
@@ -122,9 +122,10 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_create_resource);

/**
 * ipa2_rm_delete_resource() - delete resource
 * ipa_rm_delete_resource() - delete resource
 * @resource_name: name of resource to be deleted
 *
 * Returns: 0 on success, negative on failure
@@ -132,7 +133,7 @@ bail:
 * This function is called by IPA RM client to delete client's resources.
 *
 */
int ipa2_rm_delete_resource(enum ipa_rm_resource_name resource_name)
int ipa_rm_delete_resource(enum ipa_rm_resource_name resource_name)
{
	struct ipa_rm_resource *resource;
	unsigned long flags;
@@ -169,9 +170,10 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_delete_resource);

/**
 * ipa2_rm_add_dependency() - create dependency
 * ipa_rm_add_dependency() - create dependency
 *					between 2 resources
 * @resource_name: name of dependent resource
 * @depends_on_name: name of its dependency
@@ -181,7 +183,7 @@ bail:
 * Side effects: IPA_RM_RESORCE_GRANTED could be generated
 * in case client registered with IPA RM
 */
int ipa2_rm_add_dependency(enum ipa_rm_resource_name resource_name,
int ipa_rm_add_dependency(enum ipa_rm_resource_name resource_name,
			enum ipa_rm_resource_name depends_on_name)
{
	unsigned long flags;
@@ -204,9 +206,10 @@ int ipa2_rm_add_dependency(enum ipa_rm_resource_name resource_name,

	return result;
}
EXPORT_SYMBOL(ipa_rm_add_dependency);

/**
 * ipa2_rm_add_dependency_sync() - Create a dependency between 2 resources
 * ipa_rm_add_dependency_sync() - Create a dependency between 2 resources
 * in a synchronized fashion. In case a producer resource is in GRANTED state
 * and the newly added consumer resource is in RELEASED state, the consumer
 * entity will be requested and the function will block until the consumer
@@ -218,7 +221,7 @@ int ipa2_rm_add_dependency(enum ipa_rm_resource_name resource_name,
 *
 * Side effects: May block. See documentation above.
 */
int ipa2_rm_add_dependency_sync(enum ipa_rm_resource_name resource_name,
int ipa_rm_add_dependency_sync(enum ipa_rm_resource_name resource_name,
		enum ipa_rm_resource_name depends_on_name)
{
	int result;
@@ -265,9 +268,10 @@ int ipa2_rm_add_dependency_sync(enum ipa_rm_resource_name resource_name,

	return result;
}
EXPORT_SYMBOL(ipa_rm_add_dependency_sync);

/**
 * ipa2_rm_delete_dependency() - create dependency
 * ipa_rm_delete_dependency() - create dependency
 *					between 2 resources
 * @resource_name: name of dependent resource
 * @depends_on_name: name of its dependency
@@ -277,7 +281,7 @@ int ipa2_rm_add_dependency_sync(enum ipa_rm_resource_name resource_name,
 * Side effects: IPA_RM_RESORCE_GRANTED could be generated
 * in case client registered with IPA RM
 */
int ipa2_rm_delete_dependency(enum ipa_rm_resource_name resource_name,
int ipa_rm_delete_dependency(enum ipa_rm_resource_name resource_name,
			enum ipa_rm_resource_name depends_on_name)
{
	unsigned long flags;
@@ -300,9 +304,10 @@ int ipa2_rm_delete_dependency(enum ipa_rm_resource_name resource_name,

	return result;
}
EXPORT_SYMBOL(ipa_rm_delete_dependency);

/**
 * ipa2_rm_request_resource() - request resource
 * ipa_rm_request_resource() - request resource
 * @resource_name: [in] name of the requested resource
 *
 * Returns: 0 on success, negative on failure
@@ -310,7 +315,7 @@ int ipa2_rm_delete_dependency(enum ipa_rm_resource_name resource_name,
 * All registered callbacks are called with IPA_RM_RESOURCE_GRANTED
 * on successful completion of this operation.
 */
int ipa2_rm_request_resource(enum ipa_rm_resource_name resource_name)
int ipa_rm_request_resource(enum ipa_rm_resource_name resource_name)
{
	struct ipa_rm_resource *resource;
	unsigned long flags;
@@ -341,6 +346,7 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_request_resource);

void delayed_release_work_func(struct work_struct *work)
{
@@ -402,7 +408,7 @@ int ipa_rm_request_resource_with_timer(enum ipa_rm_resource_name resource_name)
		goto bail;
	}
	result = ipa_rm_resource_consumer_request(
			(struct ipa_rm_resource_cons *)resource, 0, false);
		(struct ipa_rm_resource_cons *)resource, 0, false, true);
	if (result != 0 && result != -EINPROGRESS) {
		IPA_RM_ERR("consumer request returned error %d\n", result);
		result = -EPERM;
@@ -426,8 +432,9 @@ bail:

	return result;
}

/**
 * ipa2_rm_release_resource() - release resource
 * ipa_rm_release_resource() - release resource
 * @resource_name: [in] name of the requested resource
 *
 * Returns: 0 on success, negative on failure
@@ -435,7 +442,7 @@ bail:
 * All registered callbacks are called with IPA_RM_RESOURCE_RELEASED
 * on successful completion of this operation.
 */
int ipa2_rm_release_resource(enum ipa_rm_resource_name resource_name)
int ipa_rm_release_resource(enum ipa_rm_resource_name resource_name)
{
	unsigned long flags;
	struct ipa_rm_resource *resource;
@@ -466,18 +473,19 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_release_resource);

/**
 * ipa2_rm_register() - register for event
 * ipa_rm_register() - register for event
 * @resource_name: resource name
 * @reg_params: [in] registration parameters
 *
 * Returns: 0 on success, negative on failure
 *
 * Registration parameters provided here should be the same
 * as provided later in  ipa2_rm_deregister() call.
 * as provided later in  ipa_rm_deregister() call.
 */
int ipa2_rm_register(enum ipa_rm_resource_name resource_name,
int ipa_rm_register(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_register_params *reg_params)
{
	int result;
@@ -508,18 +516,19 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_register);

/**
 * ipa2_rm_deregister() - cancel the registration
 * ipa_rm_deregister() - cancel the registration
 * @resource_name: resource name
 * @reg_params: [in] registration parameters
 *
 * Returns: 0 on success, negative on failure
 *
 * Registration parameters provided here should be the same
 * as provided in  ipa2_rm_register() call.
 * as provided in  ipa_rm_register() call.
 */
int ipa2_rm_deregister(enum ipa_rm_resource_name resource_name,
int ipa_rm_deregister(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_register_params *reg_params)
{
	int result;
@@ -549,9 +558,10 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_deregister);

/**
 * ipa2_rm_set_perf_profile() - set performance profile
 * ipa_rm_set_perf_profile() - set performance profile
 * @resource_name: resource name
 * @profile: [in] profile information.
 *
@@ -560,7 +570,7 @@ bail:
 * Set resource performance profile.
 * Updates IPA driver if performance level changed.
 */
int ipa2_rm_set_perf_profile(enum ipa_rm_resource_name resource_name,
int ipa_rm_set_perf_profile(enum ipa_rm_resource_name resource_name,
			struct ipa_rm_perf_profile *profile)
{
	int result;
@@ -573,6 +583,8 @@ int ipa2_rm_set_perf_profile(enum ipa_rm_resource_name resource_name,
	}

	IPA_RM_DBG("%s\n", ipa_rm_resource_str(resource_name));
	if (profile)
		IPA_RM_DBG("BW: %d\n", profile->max_supported_bandwidth_mbps);

	spin_lock_irqsave(&ipa_rm_ctx->ipa_rm_lock, flags);
	if (ipa_rm_dep_graph_get_resource(ipa_rm_ctx->dep_graph,
@@ -596,9 +608,10 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_set_perf_profile);

/**
 * ipa2_rm_notify_completion() -
 * ipa_rm_notify_completion() -
 *	consumer driver notification for
 *	request_resource / release_resource operations
 *	completion
@@ -607,7 +620,7 @@ bail:
 *
 * Returns: 0 on success, negative on failure
 */
int ipa2_rm_notify_completion(enum ipa_rm_event event,
int ipa_rm_notify_completion(enum ipa_rm_event event,
		enum ipa_rm_resource_name resource_name)
{
	int result;
@@ -634,6 +647,7 @@ bail:

	return result;
}
EXPORT_SYMBOL(ipa_rm_notify_completion);

static void ipa_rm_wq_handler(struct work_struct *work)
{
@@ -766,7 +780,7 @@ static void ipa_rm_wq_suspend_handler(struct work_struct *work)
 * @wq_cmd: command that should be executed
 * @resource_name: resource on which command should be executed
 * @notify_registered_only: notify only clients registered by
 *	ipa2_rm_register()
 *	ipa_rm_register()
 *
 * Returns: 0 on success, negative otherwise
 */
Loading