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

Commit 25ca6472 authored by Tomas Winkler's avatar Tomas Winkler Committed by Greg Kroah-Hartman
Browse files

mei: add me client remove functions



To support dynamic addition/remove we add wrappers
for removal of me clients

Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5ca2d388
Loading
Loading
Loading
Loading
+21 −1
Original line number Original line Diff line number Diff line
@@ -47,7 +47,6 @@ struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
	return NULL;
	return NULL;
}
}



/**
/**
 * mei_me_cl_by_id return index to me_clients for client_id
 * mei_me_cl_by_id return index to me_clients for client_id
 *
 *
@@ -70,6 +69,27 @@ struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id)
	return NULL;
	return NULL;
}
}


/**
 * mei_me_cl_remove - remove me client matching uuid and client_id
 *
 * @dev: the device structure
 * @uuid: me client uuid
 * @client_id: me client address
 */
void mei_me_cl_remove(struct mei_device *dev, const uuid_le *uuid, u8 client_id)
{
	struct mei_me_client *me_cl, *next;

	list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
		if (uuid_le_cmp(*uuid, me_cl->props.protocol_name) == 0 &&
		    me_cl->client_id == client_id) {
			list_del(&me_cl->list);
			kfree(me_cl);
			break;
		}
	}
}



/**
/**
 * mei_cl_cmp_id - tells if the clients are the same
 * mei_cl_cmp_id - tells if the clients are the same
+2 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,8 @@
struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
					const uuid_le *cuuid);
					const uuid_le *cuuid);
struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id);
struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id);
void mei_me_cl_remove(struct mei_device *dev,
		      const uuid_le *uuid, u8 client_id);


/*
/*
 * MEI IO Functions
 * MEI IO Functions
+15 −6
Original line number Original line Diff line number Diff line
@@ -71,21 +71,30 @@ void mei_hbm_idle(struct mei_device *dev)
}
}


/**
/**
 * mei_hbm_reset - reset hbm counters and book keeping data structurs
 * mei_me_cl_remove_all - remove all me clients
 *
 *
 * @dev: the device structure
 * @dev: the device structure
 */
 */
void mei_hbm_reset(struct mei_device *dev)
static void mei_me_cl_remove_all(struct mei_device *dev)
{
{
	struct mei_me_client *me_cl, *next;
	struct mei_me_client *me_cl, *next;

	dev->me_client_presentation_num = 0;
	dev->me_client_index = 0;

	list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
	list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
			list_del(&me_cl->list);
			list_del(&me_cl->list);
			kfree(me_cl);
			kfree(me_cl);
	}
	}
}

/**
 * mei_hbm_reset - reset hbm counters and book keeping data structurs
 *
 * @dev: the device structure
 */
void mei_hbm_reset(struct mei_device *dev)
{
	dev->me_client_presentation_num = 0;
	dev->me_client_index = 0;

	mei_me_cl_remove_all(dev);


	mei_hbm_idle(dev);
	mei_hbm_idle(dev);
}
}