162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef _THINK_LMI_H_ 462306a36Sopenharmony_ci#define _THINK_LMI_H_ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/types.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define TLMI_SETTINGS_COUNT 256 962306a36Sopenharmony_ci#define TLMI_SETTINGS_MAXLEN 512 1062306a36Sopenharmony_ci#define TLMI_PWD_BUFSIZE 129 1162306a36Sopenharmony_ci#define TLMI_LANG_MAXLEN 4 1262306a36Sopenharmony_ci#define TLMI_INDEX_MAX 32 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* Possible error values */ 1562306a36Sopenharmony_cistruct tlmi_err_codes { 1662306a36Sopenharmony_ci const char *err_str; 1762306a36Sopenharmony_ci int err_code; 1862306a36Sopenharmony_ci}; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cienum encoding_option { 2162306a36Sopenharmony_ci TLMI_ENCODING_ASCII, 2262306a36Sopenharmony_ci TLMI_ENCODING_SCANCODE, 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cienum level_option { 2662306a36Sopenharmony_ci TLMI_LEVEL_USER, 2762306a36Sopenharmony_ci TLMI_LEVEL_MASTER, 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/* password configuration details */ 3162306a36Sopenharmony_cistruct tlmi_pwdcfg_core { 3262306a36Sopenharmony_ci uint32_t password_mode; 3362306a36Sopenharmony_ci uint32_t password_state; 3462306a36Sopenharmony_ci uint32_t min_length; 3562306a36Sopenharmony_ci uint32_t max_length; 3662306a36Sopenharmony_ci uint32_t supported_encodings; 3762306a36Sopenharmony_ci uint32_t supported_keyboard; 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct tlmi_pwdcfg_ext { 4162306a36Sopenharmony_ci uint32_t hdd_user_password; 4262306a36Sopenharmony_ci uint32_t hdd_master_password; 4362306a36Sopenharmony_ci uint32_t nvme_user_password; 4462306a36Sopenharmony_ci uint32_t nvme_master_password; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistruct tlmi_pwdcfg { 4862306a36Sopenharmony_ci struct tlmi_pwdcfg_core core; 4962306a36Sopenharmony_ci struct tlmi_pwdcfg_ext ext; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci/* password setting details */ 5362306a36Sopenharmony_cistruct tlmi_pwd_setting { 5462306a36Sopenharmony_ci struct kobject kobj; 5562306a36Sopenharmony_ci bool valid; 5662306a36Sopenharmony_ci char password[TLMI_PWD_BUFSIZE]; 5762306a36Sopenharmony_ci const char *pwd_type; 5862306a36Sopenharmony_ci const char *role; 5962306a36Sopenharmony_ci int minlen; 6062306a36Sopenharmony_ci int maxlen; 6162306a36Sopenharmony_ci enum encoding_option encoding; 6262306a36Sopenharmony_ci char kbdlang[TLMI_LANG_MAXLEN]; 6362306a36Sopenharmony_ci int index; /*Used for HDD and NVME auth */ 6462306a36Sopenharmony_ci enum level_option level; 6562306a36Sopenharmony_ci bool cert_installed; 6662306a36Sopenharmony_ci char *signature; 6762306a36Sopenharmony_ci char *save_signature; 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci/* Attribute setting details */ 7162306a36Sopenharmony_cistruct tlmi_attr_setting { 7262306a36Sopenharmony_ci struct kobject kobj; 7362306a36Sopenharmony_ci int index; 7462306a36Sopenharmony_ci char display_name[TLMI_SETTINGS_MAXLEN]; 7562306a36Sopenharmony_ci char *possible_values; 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistruct think_lmi { 7962306a36Sopenharmony_ci struct wmi_device *wmi_device; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci bool can_set_bios_settings; 8262306a36Sopenharmony_ci bool can_get_bios_selections; 8362306a36Sopenharmony_ci bool can_set_bios_password; 8462306a36Sopenharmony_ci bool can_get_password_settings; 8562306a36Sopenharmony_ci bool pending_changes; 8662306a36Sopenharmony_ci bool can_debug_cmd; 8762306a36Sopenharmony_ci bool opcode_support; 8862306a36Sopenharmony_ci bool certificate_support; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT]; 9162306a36Sopenharmony_ci struct device *class_dev; 9262306a36Sopenharmony_ci struct kset *attribute_kset; 9362306a36Sopenharmony_ci struct kset *authentication_kset; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci struct tlmi_pwdcfg pwdcfg; 9662306a36Sopenharmony_ci struct tlmi_pwd_setting *pwd_admin; 9762306a36Sopenharmony_ci struct tlmi_pwd_setting *pwd_power; 9862306a36Sopenharmony_ci struct tlmi_pwd_setting *pwd_system; 9962306a36Sopenharmony_ci struct tlmi_pwd_setting *pwd_hdd; 10062306a36Sopenharmony_ci struct tlmi_pwd_setting *pwd_nvme; 10162306a36Sopenharmony_ci}; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#endif /* !_THINK_LMI_H_ */ 104