You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
platform/x86: think-lmi: Add WMI interface support on Lenovo platforms
For Lenovo platforms that support a WMI interface to the BIOS add support, using the firmware-attributes class, to allow users to access and modify various BIOS related settings. Signed-off-by: Mark Pearson <markpearson@lenovo.com> Link: https://lore.kernel.org/r/20210530223111.25929-3-markpearson@lenovo.com Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
committed by
Hans de Goede
parent
8a1c379c5a
commit
a40cd7ef22
@@ -197,8 +197,24 @@ Description:
|
||||
Drivers may emit a CHANGE uevent when a password is set or unset
|
||||
userspace may check it again.
|
||||
|
||||
On Dell systems, if Admin password is set, then all BIOS attributes
|
||||
On Dell and Lenovo systems, if Admin password is set, then all BIOS attributes
|
||||
require password validation.
|
||||
On Lenovo systems if you change the Admin password the new password is not active until
|
||||
the next boot.
|
||||
|
||||
Lenovo specific class extensions
|
||||
------------------------------
|
||||
|
||||
On Lenovo systems the following additional settings are available:
|
||||
|
||||
lenovo_encoding:
|
||||
The encoding method that is used. This can be either "ascii"
|
||||
or "scancode". Default is set to "ascii"
|
||||
|
||||
lenovo_kbdlang:
|
||||
The keyboard language method that is used. This is generally a
|
||||
two char code (e.g. "us", "fr", "gr") and may vary per platform.
|
||||
Default is set to "us"
|
||||
|
||||
What: /sys/class/firmware-attributes/*/attributes/pending_reboot
|
||||
Date: February 2021
|
||||
|
||||
@@ -18163,6 +18163,13 @@ W: http://thinkwiki.org/wiki/Ibm-acpi
|
||||
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
|
||||
F: drivers/platform/x86/thinkpad_acpi.c
|
||||
|
||||
THINKPAD LMI DRIVER
|
||||
M: Mark Pearson <markpearson@lenovo.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-class-firmware-attributes
|
||||
F: drivers/platform/x86/think-lmi.?
|
||||
|
||||
THUNDERBOLT DMA TRAFFIC TEST DRIVER
|
||||
M: Isaac Hazan <isaac.hazan@intel.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
|
||||
@@ -640,6 +640,17 @@ config THINKPAD_ACPI_HOTKEY_POLL
|
||||
If you are not sure, say Y here. The driver enables polling only if
|
||||
it is strictly necessary to do so.
|
||||
|
||||
config THINKPAD_LMI
|
||||
tristate "Lenovo WMI-based systems management driver"
|
||||
depends on ACPI_WMI
|
||||
select FW_ATTR_CLASS
|
||||
help
|
||||
This driver allows changing BIOS settings on Lenovo machines whose
|
||||
BIOS support the WMI interface.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called think-lmi.
|
||||
|
||||
config INTEL_ATOMISP2_LED
|
||||
tristate "Intel AtomISP2 camera LED driver"
|
||||
depends on GPIOLIB && LEDS_GPIO
|
||||
|
||||
@@ -63,6 +63,7 @@ obj-$(CONFIG_IBM_RTL) += ibm_rtl.o
|
||||
obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
|
||||
obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
|
||||
obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
|
||||
obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
|
||||
|
||||
# Intel
|
||||
obj-$(CONFIG_INTEL_ATOMISP2_LED) += intel_atomisp2_led.o
|
||||
|
||||
891
drivers/platform/x86/think-lmi.c
Normal file
891
drivers/platform/x86/think-lmi.c
Normal file
File diff suppressed because it is too large
Load Diff
81
drivers/platform/x86/think-lmi.h
Normal file
81
drivers/platform/x86/think-lmi.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#ifndef _THINK_LMI_H_
|
||||
#define _THINK_LMI_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define TLMI_SETTINGS_COUNT 256
|
||||
#define TLMI_SETTINGS_MAXLEN 512
|
||||
#define TLMI_PWD_BUFSIZE 129
|
||||
#define TLMI_PWDTYPE_MAXLEN 64
|
||||
#define TLMI_ENC_MAXLEN 64
|
||||
#define TLMI_LANG_MAXLEN 4
|
||||
#define TLMI_PWDTYPE_LEN 4
|
||||
/*
|
||||
* Longest string should be in the set command: allow size of BIOS
|
||||
* option and choice
|
||||
*/
|
||||
#define TLMI_GETSET_MAXLEN (TLMI_SETTINGS_MAXLEN + TLMI_SETTINGS_MAXLEN)
|
||||
|
||||
/* Possible error values */
|
||||
struct tlmi_err_codes {
|
||||
const char *err_str;
|
||||
int err_code;
|
||||
};
|
||||
|
||||
enum encoding_option {
|
||||
TLMI_ENCODING_ASCII,
|
||||
TLMI_ENCODING_SCANCODE,
|
||||
};
|
||||
|
||||
/* password configuration details */
|
||||
struct tlmi_pwdcfg {
|
||||
uint32_t password_mode;
|
||||
uint32_t password_state;
|
||||
uint32_t min_length;
|
||||
uint32_t max_length;
|
||||
uint32_t supported_encodings;
|
||||
uint32_t supported_keyboard;
|
||||
};
|
||||
|
||||
/* password setting details */
|
||||
struct tlmi_pwd_setting {
|
||||
struct kobject kobj;
|
||||
bool valid;
|
||||
char display_name[TLMI_PWDTYPE_MAXLEN];
|
||||
char password[TLMI_PWD_BUFSIZE];
|
||||
const char *pwd_type;
|
||||
const char *role;
|
||||
int minlen;
|
||||
int maxlen;
|
||||
enum encoding_option encoding;
|
||||
char kbdlang[TLMI_LANG_MAXLEN];
|
||||
};
|
||||
|
||||
/* Attribute setting details */
|
||||
struct tlmi_attr_setting {
|
||||
struct kobject kobj;
|
||||
int index;
|
||||
char display_name[TLMI_SETTINGS_MAXLEN];
|
||||
char *possible_values;
|
||||
};
|
||||
|
||||
struct think_lmi {
|
||||
struct wmi_device *wmi_device;
|
||||
|
||||
int settings_count;
|
||||
bool can_set_bios_settings;
|
||||
bool can_get_bios_selections;
|
||||
bool can_set_bios_password;
|
||||
bool can_get_password_settings;
|
||||
|
||||
struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];
|
||||
struct device *class_dev;
|
||||
struct kset *attribute_kset;
|
||||
struct kset *authentication_kset;
|
||||
struct tlmi_pwd_setting *pwd_admin;
|
||||
struct tlmi_pwd_setting *pwd_power;
|
||||
};
|
||||
|
||||
#endif /* !_THINK_LMI_H_ */
|
||||
Reference in New Issue
Block a user