120 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2 3#ifndef _THINK_LMI_H_4#define _THINK_LMI_H_5 6#include <linux/types.h>7 8#define TLMI_SETTINGS_COUNT 2569#define TLMI_SETTINGS_MAXLEN 51210#define TLMI_PWD_BUFSIZE 12911#define TLMI_LANG_MAXLEN 412#define TLMI_INDEX_MAX 3213 14/* Possible error values */15struct tlmi_err_codes {16 const char *err_str;17 int err_code;18};19 20enum encoding_option {21 TLMI_ENCODING_ASCII,22 TLMI_ENCODING_SCANCODE,23};24 25enum level_option {26 TLMI_LEVEL_USER,27 TLMI_LEVEL_MASTER,28};29 30/*31 * There are a limit on the number of WMI operations you can do if you use32 * the default implementation of saving on every set. This is due to a33 * limitation in EFI variable space used.34 * Have a 'bulk save' mode where you can manually trigger the save, and can35 * therefore set unlimited variables - for users that need it.36 */37enum save_mode {38 TLMI_SAVE_SINGLE,39 TLMI_SAVE_BULK,40 TLMI_SAVE_SAVE,41};42 43/* password configuration details */44struct tlmi_pwdcfg_core {45 uint32_t password_mode;46 uint32_t password_state;47 uint32_t min_length;48 uint32_t max_length;49 uint32_t supported_encodings;50 uint32_t supported_keyboard;51};52 53struct tlmi_pwdcfg_ext {54 uint32_t hdd_user_password;55 uint32_t hdd_master_password;56 uint32_t nvme_user_password;57 uint32_t nvme_master_password;58};59 60struct tlmi_pwdcfg {61 struct tlmi_pwdcfg_core core;62 struct tlmi_pwdcfg_ext ext;63};64 65/* password setting details */66struct tlmi_pwd_setting {67 struct kobject kobj;68 bool valid;69 char password[TLMI_PWD_BUFSIZE];70 const char *pwd_type;71 const char *role;72 int minlen;73 int maxlen;74 enum encoding_option encoding;75 char kbdlang[TLMI_LANG_MAXLEN];76 int index; /*Used for HDD and NVME auth */77 enum level_option level;78 bool cert_installed;79 char *signature;80 char *save_signature;81};82 83/* Attribute setting details */84struct tlmi_attr_setting {85 struct kobject kobj;86 int index;87 char display_name[TLMI_SETTINGS_MAXLEN];88 char *possible_values;89};90 91struct think_lmi {92 struct wmi_device *wmi_device;93 94 bool can_set_bios_settings;95 bool can_get_bios_selections;96 bool can_set_bios_password;97 bool can_get_password_settings;98 bool pending_changes;99 bool can_debug_cmd;100 bool opcode_support;101 bool certificate_support;102 enum save_mode save_mode;103 bool save_required;104 bool reboot_required;105 106 struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];107 struct device *class_dev;108 struct kset *attribute_kset;109 struct kset *authentication_kset;110 111 struct tlmi_pwdcfg pwdcfg;112 struct tlmi_pwd_setting *pwd_admin;113 struct tlmi_pwd_setting *pwd_power;114 struct tlmi_pwd_setting *pwd_system;115 struct tlmi_pwd_setting *pwd_hdd;116 struct tlmi_pwd_setting *pwd_nvme;117};118 119#endif /* !_THINK_LMI_H_ */120