1a40cd7efSMark Pearson /* SPDX-License-Identifier: GPL-2.0-or-later */ 2a40cd7efSMark Pearson 3a40cd7efSMark Pearson #ifndef _THINK_LMI_H_ 4a40cd7efSMark Pearson #define _THINK_LMI_H_ 5a40cd7efSMark Pearson 6a40cd7efSMark Pearson #include <linux/types.h> 7a40cd7efSMark Pearson 8a40cd7efSMark Pearson #define TLMI_SETTINGS_COUNT 256 9a40cd7efSMark Pearson #define TLMI_SETTINGS_MAXLEN 512 10a40cd7efSMark Pearson #define TLMI_PWD_BUFSIZE 129 11a40cd7efSMark Pearson #define TLMI_LANG_MAXLEN 4 12a40cd7efSMark Pearson 13a40cd7efSMark Pearson /* Possible error values */ 14a40cd7efSMark Pearson struct tlmi_err_codes { 15a40cd7efSMark Pearson const char *err_str; 16a40cd7efSMark Pearson int err_code; 17a40cd7efSMark Pearson }; 18a40cd7efSMark Pearson 19a40cd7efSMark Pearson enum encoding_option { 20a40cd7efSMark Pearson TLMI_ENCODING_ASCII, 21a40cd7efSMark Pearson TLMI_ENCODING_SCANCODE, 22a40cd7efSMark Pearson }; 23a40cd7efSMark Pearson 24a40cd7efSMark Pearson /* password configuration details */ 25a40cd7efSMark Pearson struct tlmi_pwdcfg { 26a40cd7efSMark Pearson uint32_t password_mode; 27a40cd7efSMark Pearson uint32_t password_state; 28a40cd7efSMark Pearson uint32_t min_length; 29a40cd7efSMark Pearson uint32_t max_length; 30a40cd7efSMark Pearson uint32_t supported_encodings; 31a40cd7efSMark Pearson uint32_t supported_keyboard; 32a40cd7efSMark Pearson }; 33a40cd7efSMark Pearson 34a40cd7efSMark Pearson /* password setting details */ 35a40cd7efSMark Pearson struct tlmi_pwd_setting { 36a40cd7efSMark Pearson struct kobject kobj; 37a40cd7efSMark Pearson bool valid; 38a40cd7efSMark Pearson char password[TLMI_PWD_BUFSIZE]; 39a40cd7efSMark Pearson const char *pwd_type; 40a40cd7efSMark Pearson const char *role; 41a40cd7efSMark Pearson int minlen; 42a40cd7efSMark Pearson int maxlen; 43a40cd7efSMark Pearson enum encoding_option encoding; 44a40cd7efSMark Pearson char kbdlang[TLMI_LANG_MAXLEN]; 45a40cd7efSMark Pearson }; 46a40cd7efSMark Pearson 47a40cd7efSMark Pearson /* Attribute setting details */ 48a40cd7efSMark Pearson struct tlmi_attr_setting { 49a40cd7efSMark Pearson struct kobject kobj; 50a40cd7efSMark Pearson int index; 51a40cd7efSMark Pearson char display_name[TLMI_SETTINGS_MAXLEN]; 52a40cd7efSMark Pearson char *possible_values; 53a40cd7efSMark Pearson }; 54a40cd7efSMark Pearson 55a40cd7efSMark Pearson struct think_lmi { 56a40cd7efSMark Pearson struct wmi_device *wmi_device; 57a40cd7efSMark Pearson 58a40cd7efSMark Pearson int settings_count; 59a40cd7efSMark Pearson bool can_set_bios_settings; 60a40cd7efSMark Pearson bool can_get_bios_selections; 61a40cd7efSMark Pearson bool can_set_bios_password; 62a40cd7efSMark Pearson bool can_get_password_settings; 6395d42920SMark Pearson bool pending_changes; 64*f5bc0157SMark Pearson bool can_debug_cmd; 65a40cd7efSMark Pearson 66a40cd7efSMark Pearson struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT]; 67a40cd7efSMark Pearson struct device *class_dev; 68a40cd7efSMark Pearson struct kset *attribute_kset; 69a40cd7efSMark Pearson struct kset *authentication_kset; 70a40cd7efSMark Pearson struct tlmi_pwd_setting *pwd_admin; 71a40cd7efSMark Pearson struct tlmi_pwd_setting *pwd_power; 72a40cd7efSMark Pearson }; 73a40cd7efSMark Pearson 74a40cd7efSMark Pearson #endif /* !_THINK_LMI_H_ */ 75