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

Commit eeabfcf5 authored by Alexander Usyskin's avatar Alexander Usyskin Committed by Greg Kroah-Hartman
Browse files

mei: connection to fixed address clients from user-space



This should be used for debug only.
The feaure is gated by "allow_fixed_address" control exposed in debugfs.

Signed-off-by: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1df629ef
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -209,6 +209,12 @@ int mei_dbgfs_register(struct mei_device *dev, const char *name)
		dev_err(dev->dev, "devstate: registration failed\n");
		goto err;
	}
	f = debugfs_create_bool("allow_fixed_address", S_IRUSR | S_IWUSR, dir,
				&dev->allow_fixed_address);
	if (!f) {
		dev_err(dev->dev, "allow_fixed_address: registration failed\n");
		goto err;
	}
	dev->dbgfs_dir = dir;
	return 0;
err:
+7 −1
Original line number Diff line number Diff line
@@ -215,6 +215,11 @@ static ssize_t mei_read(struct file *file, char __user *ubuf,

	cb = mei_cl_read_cb(cl, file);
	if (!cb) {
		if (mei_cl_is_fixed_address(cl) && dev->allow_fixed_address) {
			cb = mei_cl_read_cb(cl, NULL);
			if (cb)
				goto copy_buffer;
		}
		rets = 0;
		goto out;
	}
@@ -389,7 +394,8 @@ static int mei_ioctl_connect_client(struct file *file,

	/* find ME client we're trying to connect to */
	me_cl = mei_me_cl_by_uuid(dev, &data->in_client_uuid);
	if (!me_cl || me_cl->props.fixed_address) {
	if (!me_cl ||
	    (me_cl->props.fixed_address && !dev->allow_fixed_address)) {
		dev_dbg(dev->dev, "Cannot connect to FW Client UUID = %pUl\n",
			&data->in_client_uuid);
		mei_me_cl_put(me_cl);
+4 −0
Original line number Diff line number Diff line
@@ -476,6 +476,8 @@ const char *mei_pg_state_str(enum mei_pg_state state);
 * @host_clients_map : host clients id pool
 * @me_client_index : last FW client index in enumeration
 *
 * @allow_fixed_address: allow user space to connect a fixed client
 *
 * @wd_cl       : watchdog client
 * @wd_state    : watchdog client state
 * @wd_pending  : watchdog command is pending
@@ -567,6 +569,8 @@ struct mei_device {
	DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
	unsigned long me_client_index;

	u32 allow_fixed_address;

	struct mei_cl wd_cl;
	enum mei_wd_states wd_state;
	bool wd_pending;