X86 platform drivers
 help / color / mirror / Atom feed
From: Mark Pearson <mpearson-lenovo@squebb.ca>
To: mpearson-lenovo@squebb.ca
Cc: hdegoede@redhat.com, markgross@kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org, ilpo.jarvinen@linux.intel.com
Subject: [PATCH v4 2/8] platform/x86: think-lmi: Enable opcode support on BIOS settings
Date: Thu,  1 Jun 2023 16:05:46 -0400	[thread overview]
Message-ID: <20230601200552.4396-2-mpearson-lenovo@squebb.ca> (raw)
In-Reply-To: <20230601200552.4396-1-mpearson-lenovo@squebb.ca>

Whilst reviewing some documentation from the FW team on using WMI on
Lenovo system I noticed that we weren't using Opcode support when
changing BIOS settings in the thinkLMI driver.

We should be doing this to ensure we're future proof as the old
non-opcode mechanism has been deprecated.

Tested on X1 Carbon G10 and G11.

Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
---
Changes in v2:
 - Update comment for clearer explanation of what the driver is doing.
Changes in v3:
 - None. Version bump with rest of series.
Changes in v4:
 - Fixed code alignment as requested.
 - changed 'non opcode' to 'non-opcode'.
 - Missing space added at end of comment.
 - This patch was previously #1 and is now #2 in series.

 drivers/platform/x86/think-lmi.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c
index 6cf77bc26b05..80a5c989db03 100644
--- a/drivers/platform/x86/think-lmi.c
+++ b/drivers/platform/x86/think-lmi.c
@@ -1010,7 +1010,33 @@ static ssize_t current_value_store(struct kobject *kobj,
 				tlmi_priv.pwd_admin->save_signature);
 		if (ret)
 			goto out;
-	} else { /* Non certiifcate based authentication */
+	} else if (tlmi_priv.opcode_support) {
+		/*
+		 * If opcode support is present use that interface.
+		 * Note - this sets the variable and then the password as separate
+		 * WMI calls. Function tlmi_save_bios_settings will error if the
+		 * password is incorrect.
+		 */
+		set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
+				    new_setting);
+		if (!set_str) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		ret = tlmi_simple_call(LENOVO_SET_BIOS_SETTINGS_GUID, set_str);
+		if (ret)
+			goto out;
+
+		if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
+			ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
+						  tlmi_priv.pwd_admin->password);
+			if (ret)
+				goto out;
+		}
+
+		ret = tlmi_save_bios_settings("");
+	} else { /* old non-opcode based authentication method (deprecated) */
 		if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
 			auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
 					tlmi_priv.pwd_admin->password,
-- 
2.40.1


  reply	other threads:[~2023-06-01 20:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-01 20:05 [PATCH v4 1/8] platform/x86: think-lmi: mutex protection around multiple WMI calls Mark Pearson
2023-06-01 20:05 ` Mark Pearson [this message]
2023-06-01 20:05 ` [PATCH v4 3/8] platform/x86: think-lmi: Correct System password interface Mark Pearson
2023-06-01 20:05 ` [PATCH v4 4/8] platform/x86: think-lmi: Update password attribute comments Mark Pearson
2023-06-01 20:05 ` [PATCH v4 5/8] platform/x86: think-lmi: Update password fields to use BIT Mark Pearson
2023-06-01 20:05 ` [PATCH v4 6/8] platform/x86: think-lmi: Correct NVME password handling Mark Pearson
2023-06-01 20:05 ` [PATCH v4 7/8] platform/x86: think-lmi: Correct NVME index default Mark Pearson
2023-06-01 20:05 ` [PATCH v4 8/8] platform/x86: think-lmi: Don't display unnecessary authentication settings Mark Pearson
2023-06-02 11:12   ` Ilpo Järvinen
2023-06-02 14:58     ` Mark Pearson
2023-06-06  9:33 ` [PATCH v4 1/8] platform/x86: think-lmi: mutex protection around multiple WMI calls Hans de Goede

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230601200552.4396-2-mpearson-lenovo@squebb.ca \
    --to=mpearson-lenovo@squebb.ca \
    --cc=hdegoede@redhat.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox