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