Lines Matching +full:smc +full:- +full:reboot
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright(C) 2019-2021 Lenovo
7 * Original code from Thinkpad-wmi project https://github.com/iksaif/thinkpad-wmi
9 * Distributed under the GPL-2.0 license
24 #include "think-lmi.h"
37 #define LENOVO_BIOS_SETTING_GUID "51F5230E-9677-46CD-A1CF-C0B23EE34DB7"
44 * After making changes to the BIOS settings, you must reboot the computer
50 #define LENOVO_SET_BIOS_SETTINGS_GUID "98479A64-33F5-4E33-A707-8E251EBBC3A1"
59 #define LENOVO_SAVE_BIOS_SETTINGS_GUID "6A4B54EF-A5ED-4D33-9455-B0D9B48DF4B3"
68 #define LENOVO_BIOS_PASSWORD_SETTINGS_GUID "8ADB159E-1E32-455C-BC93-308A7ED98246"
73 * - BIOS settings cannot be changed at the same boot as power-on
75 * BIOS settings and POP or HDP, you must reboot the system after changing
77 * - A password cannot be set using this method when one does not already
83 #define LENOVO_SET_BIOS_PASSWORD_GUID "2651D9FD-911C-4B69-B94E-D0DED5963BD7"
92 * -> "FlashOverLAN"
93 * <- "Enabled,Disabled"
95 #define LENOVO_GET_BIOS_SELECTIONS_GUID "7364651A-132F-4FE7-ADAA-40C6C7EE2E3B"
101 #define LENOVO_DEBUG_CMD_GUID "7FF47003-3B6C-4E5E-A227-E979824A85D1"
112 #define LENOVO_OPCODE_IF_GUID "DFDDEF2C-57D4-48ce-B196-0FB787D90836"
119 * You must reboot the computer before the changes will take effect.
121 #define LENOVO_SET_BIOS_CERT_GUID "26861C9F-47E9-44C4-BD8B-DFE7FA2610FE"
128 * You must reboot the computer before the changes will take effect.
130 #define LENOVO_UPDATE_BIOS_CERT_GUID "9AA3180A-9750-41F7-B9F7-D5D3B1BAC3CE"
137 * You must reboot the computer before the changes will take effect.
139 #define LENOVO_CLEAR_BIOS_CERT_GUID "B2BC39A7-78DD-4D71-B059-A510DEC44890"
145 * You must reboot the computer before the changes will take effect.
147 #define LENOVO_CERT_TO_PASSWORD_GUID "0DE8590D-5510-4044-9621-77C227F5A70D"
155 #define LENOVO_SET_BIOS_SETTING_CERT_GUID "34A008CC-D205-4B62-9E67-31DFA8B90003"
163 #define LENOVO_SAVE_BIOS_SETTING_CERT_GUID "C050FB9D-DF5F-4606-B066-9EFC401B2551"
171 #define LENOVO_CERT_THUMBPRINT_GUID "C59119ED-1C0D-4806-A8E9-59AA318176C4"
174 #define TLMI_PAP_PWD BIT(1) /* Power-on */
182 {"Not Supported", -EOPNOTSUPP},
183 {"Invalid Parameter", -EINVAL},
184 {"Access Denied", -EACCES},
185 {"System Busy", -EBUSY},
218 return -EPERM; in tlmi_errstr_to_err()
226 obj = output->pointer; in tlmi_extract_error()
228 return -ENOMEM; in tlmi_extract_error()
229 if (obj->type != ACPI_TYPE_STRING || !obj->string.pointer) in tlmi_extract_error()
230 return -EIO; in tlmi_extract_error()
232 return tlmi_errstr_to_err(obj->string.pointer); in tlmi_extract_error()
255 return -EIO; in tlmi_simple_call()
270 if (obj->type != ACPI_TYPE_STRING || !obj->string.pointer) in tlmi_extract_output_string()
271 return -EIO; in tlmi_extract_output_string()
273 s = kstrdup(obj->string.pointer, GFP_KERNEL); in tlmi_extract_output_string()
275 return -ENOMEM; in tlmi_extract_output_string()
280 /* ------ Core interface functions ------------*/
291 return -EOPNOTSUPP; in tlmi_get_pwd_settings()
296 return -EIO; in tlmi_get_pwd_settings()
300 return -ENOMEM; in tlmi_get_pwd_settings()
301 if (obj->type != ACPI_TYPE_BUFFER || !obj->buffer.pointer) { in tlmi_get_pwd_settings()
303 return -EIO; in tlmi_get_pwd_settings()
311 if (obj->buffer.length < sizeof(struct tlmi_pwdcfg_core)) { in tlmi_get_pwd_settings()
312 pr_warn("Unknown pwdcfg buffer length %d\n", obj->buffer.length); in tlmi_get_pwd_settings()
314 return -EIO; in tlmi_get_pwd_settings()
317 copy_size = min_t(size_t, obj->buffer.length, sizeof(struct tlmi_pwdcfg)); in tlmi_get_pwd_settings()
319 memcpy(pwdcfg, obj->buffer.pointer, copy_size); in tlmi_get_pwd_settings()
322 if (WARN_ON(pwdcfg->core.max_length >= TLMI_PWD_BUFSIZE)) in tlmi_get_pwd_settings()
323 pwdcfg->core.max_length = TLMI_PWD_BUFSIZE - 1; in tlmi_get_pwd_settings()
340 return -ENOMEM; in tlmi_opcode_setting()
354 return -EIO; in tlmi_setting()
373 return -EIO; in tlmi_get_bios_selections()
377 return -ENODATA; in tlmi_get_bios_selections()
385 /* ---- Authentication sysfs --------------------------------------------------------- */
391 return sysfs_emit(buf, "%d\n", setting->pwd_enabled || setting->cert_installed); in is_enabled_show()
405 if (pwdlen && ((pwdlen < setting->minlen) || (pwdlen > setting->maxlen))) in current_password_store()
406 return -EINVAL; in current_password_store()
408 strscpy(setting->password, buf, setting->maxlen); in current_password_store()
410 strreplace(setting->password, '\n', '\0'); in current_password_store()
426 return -EPERM; in new_password_store()
429 return -EOPNOTSUPP; in new_password_store()
434 return -ENOMEM; in new_password_store()
441 if (pwdlen && ((pwdlen < setting->minlen) || (pwdlen > setting->maxlen))) { in new_password_store()
442 ret = -EINVAL; in new_password_store()
452 if (setting->level == TLMI_LEVEL_USER) in new_password_store()
453 sprintf(pwd_type, "uhdp%d", setting->index); in new_password_store()
455 sprintf(pwd_type, "mhdp%d", setting->index); in new_password_store()
457 if (setting->level == TLMI_LEVEL_USER) in new_password_store()
458 sprintf(pwd_type, "udrp%d", setting->index); in new_password_store()
460 sprintf(pwd_type, "adrp%d", setting->index); in new_password_store()
462 sprintf(pwd_type, "%s", setting->pwd_type); in new_password_store()
472 * Let BIOS figure it out - we'll get an error if operation is not permitted in new_password_store()
474 if (tlmi_priv.pwd_admin->pwd_enabled && strlen(tlmi_priv.pwd_admin->password)) { in new_password_store()
476 tlmi_priv.pwd_admin->password); in new_password_store()
480 ret = tlmi_opcode_setting("WmiOpcodePasswordCurrent01", setting->password); in new_password_store()
490 setting->pwd_type, setting->password, new_pwd, in new_password_store()
491 encoding_options[setting->encoding], setting->kbdlang); in new_password_store()
493 ret = -ENOMEM; in new_password_store()
512 return sysfs_emit(buf, "%d\n", setting->minlen); in min_password_length_show()
522 return sysfs_emit(buf, "%d\n", setting->maxlen); in max_password_length_show()
531 if (setting->cert_installed) in mechanism_show()
542 return sysfs_emit(buf, "%s\n", encoding_options[setting->encoding]); in encoding_show()
555 return -EINVAL; in encoding_store()
557 setting->encoding = i; in encoding_store()
568 return sysfs_emit(buf, "%s\n", setting->kbdlang); in kbdlang_show()
579 length = strchrnul(buf, '\n') - buf; in kbdlang_store()
581 return -EINVAL; in kbdlang_store()
583 memcpy(setting->kbdlang, buf, length); in kbdlang_store()
584 setting->kbdlang[length] = '\0'; in kbdlang_store()
595 return sysfs_emit(buf, "%s\n", setting->role); in role_show()
604 return sysfs_emit(buf, "%d\n", setting->index); in index_show()
619 return -EINVAL; in index_store()
621 setting->index = val; in index_store()
632 return sysfs_emit(buf, "%s\n", level_options[setting->level]); in level_show()
645 return -EINVAL; in level_store()
647 setting->level = i; in level_store()
655 /* Prepend with SVC or SMC if multicert supported */ in cert_command()
658 setting == tlmi_priv.pwd_admin ? "SVC" : "SMC", in cert_command()
674 return -EIO; in cert_thumbprint()
678 return -ENOMEM; in cert_thumbprint()
679 if (obj->type != ACPI_TYPE_STRING || !obj->string.pointer) { in cert_thumbprint()
681 return -EIO; in cert_thumbprint()
683 count += sysfs_emit_at(buf, count, "%s : %s\n", arg, (char *)obj->string.pointer); in cert_thumbprint()
699 if (!tlmi_priv.certificate_support || !setting->cert_installed) in certificate_thumbprint_show()
700 return -EOPNOTSUPP; in certificate_thumbprint_show()
704 /* Format: 'SVC | SMC, Thumbtype' */ in certificate_thumbprint_show()
706 setting == tlmi_priv.pwd_admin ? "SVC" : "SMC", in certificate_thumbprint_show()
713 return -ENOMEM; in certificate_thumbprint_show()
732 return -EPERM; in cert_to_password_store()
735 return -EOPNOTSUPP; in cert_to_password_store()
737 if (!setting->cert_installed) in cert_to_password_store()
738 return -EINVAL; in cert_to_password_store()
740 if (!setting->signature || !setting->signature[0]) in cert_to_password_store()
741 return -EACCES; in cert_to_password_store()
746 return -ENOMEM; in cert_to_password_store()
749 auth_str = cert_command(setting, passwd, setting->signature); in cert_to_password_store()
752 return -ENOMEM; in cert_to_password_store()
781 return -EPERM; in certificate_store()
784 return -EOPNOTSUPP; in certificate_store()
789 if (!setting->signature || !setting->signature[0]) in certificate_store()
790 return -EACCES; in certificate_store()
795 return -ENODEV; in certificate_store()
796 auth_str = cert_command(setting, serial, setting->signature); in certificate_store()
798 return -ENOMEM; in certificate_store()
809 return -ENOMEM; in certificate_store()
811 if (setting->cert_installed) { in certificate_store()
814 /* If admin account enabled - need to use its signature */ in certificate_store()
815 if (tlmi_priv.pwd_admin->pwd_enabled) in certificate_store()
816 signature = tlmi_priv.pwd_admin->signature; in certificate_store()
818 signature = setting->signature; in certificate_store()
820 /* Check if SMC and SVC already installed */ in certificate_store()
821 if ((setting == tlmi_priv.pwd_system) && tlmi_priv.pwd_admin->cert_installed) { in certificate_store()
824 signature = tlmi_priv.pwd_admin->signature; in certificate_store()
827 signature = setting->signature; in certificate_store()
835 return -EACCES; in certificate_store()
844 (!setting->pwd_enabled || !setting->password[0])) { in certificate_store()
846 return -EACCES; in certificate_store()
850 auth_str = cert_command(setting, new_cert, setting->password); in certificate_store()
854 return -ENOMEM; in certificate_store()
872 return -EPERM; in signature_store()
875 return -EOPNOTSUPP; in signature_store()
880 return -ENOMEM; in signature_store()
883 kfree(setting->signature); in signature_store()
884 setting->signature = new_signature; in signature_store()
899 return -EPERM; in save_signature_store()
902 return -EOPNOTSUPP; in save_signature_store()
907 return -ENOMEM; in save_signature_store()
910 kfree(setting->save_signature); in save_signature_store()
911 setting->save_signature = new_signature; in save_signature_store()
926 return attr->mode; in auth_attr_is_visible()
938 return attr->mode; in auth_attr_is_visible()
941 return attr->mode; in auth_attr_is_visible()
946 /* Don't display un-needed settings if opcode available */ in auth_attr_is_visible()
951 return attr->mode; in auth_attr_is_visible()
980 /* ---- Attributes sysfs --------------------------------------------------------- */
986 return sysfs_emit(buf, "%s\n", setting->display_name); in display_name_show()
995 ret = tlmi_setting(setting->wdev, setting->index, &item); in current_value_show()
999 /* validate and split from `item,value` -> `value` */ in current_value_show()
1002 ret = -EINVAL; in current_value_show()
1017 return sysfs_emit(buf, "%s\n", setting->possible_values); in possible_values_show()
1025 if (setting->possible_values) { in type_show()
1027 if (strchr(setting->possible_values, ';')) in type_show()
1044 return -EOPNOTSUPP; in current_value_store()
1047 * If we are using bulk saves a reboot should be done once save has in current_value_store()
1051 return -EPERM; in current_value_store()
1056 return -ENOMEM; in current_value_store()
1062 if (tlmi_priv.certificate_support && tlmi_priv.pwd_admin->cert_installed) { in current_value_store()
1063 if (!tlmi_priv.pwd_admin->signature || !tlmi_priv.pwd_admin->save_signature) { in current_value_store()
1064 ret = -EINVAL; in current_value_store()
1067 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name, in current_value_store()
1068 new_setting, tlmi_priv.pwd_admin->signature); in current_value_store()
1070 ret = -ENOMEM; in current_value_store()
1081 tlmi_priv.pwd_admin->save_signature); in current_value_store()
1085 * Note - this sets the variable and then the password as separate in current_value_store()
1091 if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) { in current_value_store()
1093 tlmi_priv.pwd_admin->password); in current_value_store()
1098 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name, in current_value_store()
1101 ret = -ENOMEM; in current_value_store()
1113 } else { /* old non-opcode based authentication method (deprecated) */ in current_value_store()
1114 if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) { in current_value_store()
1116 tlmi_priv.pwd_admin->password, in current_value_store()
1117 encoding_options[tlmi_priv.pwd_admin->encoding], in current_value_store()
1118 tlmi_priv.pwd_admin->kbdlang); in current_value_store()
1120 ret = -ENOMEM; in current_value_store()
1126 set_str = kasprintf(GFP_KERNEL, "%s,%s,%s", setting->name, in current_value_store()
1129 set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->name, in current_value_store()
1132 ret = -ENOMEM; in current_value_store()
1151 /* let userland know it may need to check reboot pending again */ in current_value_store()
1152 kobject_uevent(&tlmi_priv.class_dev->kobj, KOBJ_CHANGE); in current_value_store()
1176 if ((attr == &attr_possible_values.attr) && (!setting->possible_values)) in attr_is_visible()
1179 return attr->mode; in attr_is_visible()
1200 kfree(setting->possible_values); in tlmi_attr_setting_release()
1243 return -EIO; in save_settings_show()
1270 ret = -EOPNOTSUPP; in save_settings_store()
1275 ret = -ENOENT; in save_settings_store()
1279 if (tlmi_priv.certificate_support && tlmi_priv.pwd_admin->cert_installed) { in save_settings_store()
1280 if (!tlmi_priv.pwd_admin->signature || in save_settings_store()
1281 !tlmi_priv.pwd_admin->save_signature) { in save_settings_store()
1282 ret = -EINVAL; in save_settings_store()
1286 tlmi_priv.pwd_admin->save_signature); in save_settings_store()
1290 if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) { in save_settings_store()
1292 tlmi_priv.pwd_admin->password); in save_settings_store()
1297 } else { /* old non-opcode based authentication method (deprecated) */ in save_settings_store()
1298 if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) { in save_settings_store()
1300 tlmi_priv.pwd_admin->password, in save_settings_store()
1301 encoding_options[tlmi_priv.pwd_admin->encoding], in save_settings_store()
1302 tlmi_priv.pwd_admin->kbdlang); in save_settings_store()
1304 ret = -ENOMEM; in save_settings_store()
1319 /* let userland know it may need to check reboot pending again */ in save_settings_store()
1320 kobject_uevent(&tlmi_priv.class_dev->kobj, KOBJ_CHANGE); in save_settings_store()
1332 /* ---- Debug interface--------------------------------------------------------- */
1341 return -EOPNOTSUPP; in debug_cmd_store()
1346 return -ENOMEM; in debug_cmd_store()
1348 if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) { in debug_cmd_store()
1350 tlmi_priv.pwd_admin->password, in debug_cmd_store()
1351 encoding_options[tlmi_priv.pwd_admin->encoding], in debug_cmd_store()
1352 tlmi_priv.pwd_admin->kbdlang); in debug_cmd_store()
1354 ret = -ENOMEM; in debug_cmd_store()
1364 ret = -ENOMEM; in debug_cmd_store()
1374 /* let userland know it may need to check reboot pending again */ in debug_cmd_store()
1375 kobject_uevent(&tlmi_priv.class_dev->kobj, KOBJ_CHANGE); in debug_cmd_store()
1386 /* ---- Initialisation --------------------------------------------------------- */
1392 sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr); in tlmi_release_attr()
1393 sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &save_settings.attr); in tlmi_release_attr()
1396 sysfs_remove_file(&tlmi_priv.attribute_kset->kobj, &debug_cmd.attr); in tlmi_release_attr()
1398 list_for_each_entry_safe(pos, n, &tlmi_priv.attribute_kset->list, entry) in tlmi_release_attr()
1404 kfree(tlmi_priv.pwd_admin->signature); in tlmi_release_attr()
1405 kfree(tlmi_priv.pwd_admin->save_signature); in tlmi_release_attr()
1408 list_for_each_entry_safe(pos, n, &tlmi_priv.authentication_kset->list, entry) in tlmi_release_attr()
1419 return -EINVAL; in tlmi_validate_setting_name()
1423 pr_debug("Duplicate attribute name found - %s\n", name); in tlmi_validate_setting_name()
1426 return -EBUSY; in tlmi_validate_setting_name()
1444 &tlmi_priv.class_dev->kobj); in tlmi_sysfs_init()
1446 ret = -ENOMEM; in tlmi_sysfs_init()
1451 &tlmi_priv.class_dev->kobj); in tlmi_sysfs_init()
1454 ret = -ENOMEM; in tlmi_sysfs_init()
1459 /* Check if index is a valid setting - skip if it isn't */ in tlmi_sysfs_init()
1465 tlmi_priv.setting[i]->display_name) < 0) { in tlmi_sysfs_init()
1466 kfree(tlmi_priv.setting[i]->possible_values); in tlmi_sysfs_init()
1473 tlmi_priv.setting[i]->kobj.kset = tlmi_priv.attribute_kset; in tlmi_sysfs_init()
1474 ret = kobject_init_and_add(&tlmi_priv.setting[i]->kobj, &tlmi_attr_setting_ktype, in tlmi_sysfs_init()
1475 NULL, "%s", tlmi_priv.setting[i]->display_name); in tlmi_sysfs_init()
1480 ret = sysfs_create_file(&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr); in tlmi_sysfs_init()
1484 ret = sysfs_create_file(&tlmi_priv.attribute_kset->kobj, &save_settings.attr); in tlmi_sysfs_init()
1489 ret = sysfs_create_file(&tlmi_priv.attribute_kset->kobj, &debug_cmd.attr); in tlmi_sysfs_init()
1495 tlmi_priv.pwd_admin->kobj.kset = tlmi_priv.authentication_kset; in tlmi_sysfs_init()
1496 ret = kobject_init_and_add(&tlmi_priv.pwd_admin->kobj, &tlmi_pwd_setting_ktype, in tlmi_sysfs_init()
1501 tlmi_priv.pwd_power->kobj.kset = tlmi_priv.authentication_kset; in tlmi_sysfs_init()
1502 ret = kobject_init_and_add(&tlmi_priv.pwd_power->kobj, &tlmi_pwd_setting_ktype, in tlmi_sysfs_init()
1503 NULL, "%s", "Power-on"); in tlmi_sysfs_init()
1508 tlmi_priv.pwd_system->kobj.kset = tlmi_priv.authentication_kset; in tlmi_sysfs_init()
1509 ret = kobject_init_and_add(&tlmi_priv.pwd_system->kobj, &tlmi_pwd_setting_ktype, in tlmi_sysfs_init()
1514 tlmi_priv.pwd_hdd->kobj.kset = tlmi_priv.authentication_kset; in tlmi_sysfs_init()
1515 ret = kobject_init_and_add(&tlmi_priv.pwd_hdd->kobj, &tlmi_pwd_setting_ktype, in tlmi_sysfs_init()
1520 tlmi_priv.pwd_nvme->kobj.kset = tlmi_priv.authentication_kset; in tlmi_sysfs_init()
1521 ret = kobject_init_and_add(&tlmi_priv.pwd_nvme->kobj, &tlmi_pwd_setting_ktype, in tlmi_sysfs_init()
1537 /* ---- Base Driver -------------------------------------------------------- */
1547 strscpy(new_pwd->kbdlang, "us"); in tlmi_create_auth()
1548 new_pwd->encoding = TLMI_ENCODING_ASCII; in tlmi_create_auth()
1549 new_pwd->pwd_type = pwd_type; in tlmi_create_auth()
1550 new_pwd->role = pwd_role; in tlmi_create_auth()
1551 new_pwd->minlen = tlmi_priv.pwdcfg.core.min_length; in tlmi_create_auth()
1552 new_pwd->maxlen = tlmi_priv.pwdcfg.core.max_length; in tlmi_create_auth()
1553 new_pwd->index = 0; in tlmi_create_auth()
1611 ret = -ENOMEM; in tlmi_analyze()
1615 setting->wdev = wdev; in tlmi_analyze()
1616 setting->index = i; in tlmi_analyze()
1618 strscpy(setting->name, item); in tlmi_analyze()
1621 strscpy(setting->display_name, item); in tlmi_analyze()
1625 ret = tlmi_get_bios_selections(setting->name, in tlmi_analyze()
1626 &setting->possible_values); in tlmi_analyze()
1627 if (ret || !setting->possible_values) in tlmi_analyze()
1629 i, setting->display_name); in tlmi_analyze()
1639 if (!tlmi_setting(setting->wdev, setting->index, &optitem)) { in tlmi_analyze()
1645 setting->possible_values = in tlmi_analyze()
1646 kstrndup(optstart, optend - optstart, in tlmi_analyze()
1653 * firmware-attributes requires that possible_values are separated by ';' but in tlmi_analyze()
1656 if (setting->possible_values) in tlmi_analyze()
1657 strreplace(setting->possible_values, ',', ';'); in tlmi_analyze()
1669 ret = -ENOMEM; in tlmi_analyze()
1671 tlmi_priv.pwd_admin = tlmi_create_auth("pap", "bios-admin"); in tlmi_analyze()
1676 tlmi_priv.pwd_admin->pwd_enabled = true; in tlmi_analyze()
1678 tlmi_priv.pwd_power = tlmi_create_auth("pop", "power-on"); in tlmi_analyze()
1683 tlmi_priv.pwd_power->pwd_enabled = true; in tlmi_analyze()
1691 tlmi_priv.pwd_system->pwd_enabled = true; in tlmi_analyze()
1702 tlmi_priv.pwd_hdd->index = 1; in tlmi_analyze()
1703 tlmi_priv.pwd_nvme->index = 1; in tlmi_analyze()
1709 tlmi_priv.pwd_hdd->pwd_enabled = true; in tlmi_analyze()
1711 tlmi_priv.pwd_hdd->index = in tlmi_analyze()
1712 ffs(tlmi_priv.pwdcfg.ext.hdd_master_password) - 1; in tlmi_analyze()
1714 tlmi_priv.pwd_hdd->index = in tlmi_analyze()
1715 ffs(tlmi_priv.pwdcfg.ext.hdd_user_password) - 1; in tlmi_analyze()
1719 tlmi_priv.pwd_nvme->pwd_enabled = true; in tlmi_analyze()
1721 tlmi_priv.pwd_nvme->index = in tlmi_analyze()
1722 ffs(tlmi_priv.pwdcfg.ext.nvme_master_password) - 1; in tlmi_analyze()
1724 tlmi_priv.pwd_nvme->index = in tlmi_analyze()
1725 ffs(tlmi_priv.pwdcfg.ext.nvme_user_password) - 1; in tlmi_analyze()
1731 tlmi_priv.pwd_admin->cert_installed = in tlmi_analyze()
1733 tlmi_priv.pwd_system->cert_installed = in tlmi_analyze()
1741 kfree(tlmi_priv.setting[i]->possible_values); in tlmi_analyze()
1778 .name = "think-lmi",