xsk: Fix possible crash when multiple sockets are created
[sfrench/cifs-2.6.git] / drivers / platform / x86 / think-lmi.h
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 *certificate;
67         char *signature;
68         char *save_signature;
69 };
70
71 /* Attribute setting details */
72 struct tlmi_attr_setting {
73         struct kobject kobj;
74         int index;
75         char display_name[TLMI_SETTINGS_MAXLEN];
76         char *possible_values;
77 };
78
79 struct think_lmi {
80         struct wmi_device *wmi_device;
81
82         bool can_set_bios_settings;
83         bool can_get_bios_selections;
84         bool can_set_bios_password;
85         bool can_get_password_settings;
86         bool pending_changes;
87         bool can_debug_cmd;
88         bool opcode_support;
89         bool certificate_support;
90
91         struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];
92         struct device *class_dev;
93         struct kset *attribute_kset;
94         struct kset *authentication_kset;
95
96         struct tlmi_pwdcfg pwdcfg;
97         struct tlmi_pwd_setting *pwd_admin;
98         struct tlmi_pwd_setting *pwd_power;
99         struct tlmi_pwd_setting *pwd_system;
100         struct tlmi_pwd_setting *pwd_hdd;
101         struct tlmi_pwd_setting *pwd_nvme;
102 };
103
104 #endif /* !_THINK_LMI_H_ */