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 256 9 #define TLMI_SETTINGS_MAXLEN 512 10 #define TLMI_PWD_BUFSIZE 129 11 #define TLMI_LANG_MAXLEN 4 12 #define TLMI_INDEX_MAX 32 13 14 /* Possible error values */ 15 struct tlmi_err_codes { 16 const char *err_str; 17 int err_code; 18 }; 19 20 enum encoding_option { 21 TLMI_ENCODING_ASCII, 22 TLMI_ENCODING_SCANCODE, 23 }; 24 25 enum level_option { 26 TLMI_LEVEL_USER, 27 TLMI_LEVEL_MASTER, 28 }; 29 30 /* password configuration details */ 31 struct tlmi_pwdcfg_core { 32 uint32_t password_mode; 33 uint32_t password_state; 34 uint32_t min_length; 35 uint32_t max_length; 36 uint32_t supported_encodings; 37 uint32_t supported_keyboard; 38 }; 39 40 struct tlmi_pwdcfg_ext { 41 uint32_t hdd_user_password; 42 uint32_t hdd_master_password; 43 uint32_t nvme_user_password; 44 uint32_t nvme_master_password; 45 }; 46 47 struct tlmi_pwdcfg { 48 struct tlmi_pwdcfg_core core; 49 struct tlmi_pwdcfg_ext ext; 50 }; 51 52 /* password setting details */ 53 struct tlmi_pwd_setting { 54 struct kobject kobj; 55 bool valid; 56 char password[TLMI_PWD_BUFSIZE]; 57 const char *pwd_type; 58 const char *role; 59 int minlen; 60 int maxlen; 61 enum encoding_option encoding; 62 char kbdlang[TLMI_LANG_MAXLEN]; 63 int index; /*Used for HDD and NVME auth */ 64 enum level_option level; 65 bool cert_installed; 66 char *signature; 67 char *save_signature; 68 }; 69 70 /* Attribute setting details */ 71 struct tlmi_attr_setting { 72 struct kobject kobj; 73 int index; 74 char display_name[TLMI_SETTINGS_MAXLEN]; 75 char *possible_values; 76 }; 77 78 struct think_lmi { 79 struct wmi_device *wmi_device; 80 81 bool can_set_bios_settings; 82 bool can_get_bios_selections; 83 bool can_set_bios_password; 84 bool can_get_password_settings; 85 bool pending_changes; 86 bool can_debug_cmd; 87 bool opcode_support; 88 bool certificate_support; 89 90 struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT]; 91 struct device *class_dev; 92 struct kset *attribute_kset; 93 struct kset *authentication_kset; 94 95 struct tlmi_pwdcfg pwdcfg; 96 struct tlmi_pwd_setting *pwd_admin; 97 struct tlmi_pwd_setting *pwd_power; 98 struct tlmi_pwd_setting *pwd_system; 99 struct tlmi_pwd_setting *pwd_hdd; 100 struct tlmi_pwd_setting *pwd_nvme; 101 }; 102 103 #endif /* !_THINK_LMI_H_ */ 104