Lines Matching +full:attr +full:- +full:max +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-only
10 * Copyright (C) 2005-2014 Dell Inc.
23 #include "dell-smbios.h"
77 {0x0000, 19, -1}, /* diagnostics */
78 /* handled by kernel: dell-laptop */
87 u16 max; member
123 /* handled by kernel: dell-laptop */
139 case -1: /* Completed with error */ in dell_smbios_error()
140 return -EIO; in dell_smbios_error()
141 case -2: /* Function not supported */ in dell_smbios_error()
142 return -ENXIO; in dell_smbios_error()
144 return -EINVAL; in dell_smbios_error()
155 return -ENOMEM; in dell_smbios_register_device()
157 priv->device = d; in dell_smbios_register_device()
158 priv->priority = priority; in dell_smbios_register_device()
159 priv->call_fn = call_fn; in dell_smbios_register_device()
161 list_add_tail(&priv->list, &smbios_device_list); in dell_smbios_register_device()
163 dev_dbg(d, "Added device: %s\n", d->driver->name); in dell_smbios_register_device()
174 if (priv->device == d) { in dell_smbios_unregister_device()
175 list_del(&priv->list); in dell_smbios_unregister_device()
181 dev_dbg(d, "Remove device: %s\n", d->driver->name); in dell_smbios_unregister_device()
192 if (buffer->cmd_class > 30) { in dell_smbios_call_filter()
193 dev_dbg(d, "class too big: %u\n", buffer->cmd_class); in dell_smbios_call_filter()
194 return -EINVAL; in dell_smbios_call_filter()
198 if (!(da_supported_commands & (1 << buffer->cmd_class))) { in dell_smbios_call_filter()
201 return -EINVAL; in dell_smbios_call_filter()
206 if (buffer->cmd_class != call_blacklist[i].cmd_class) in dell_smbios_call_filter()
208 if (buffer->cmd_select != call_blacklist[i].cmd_select && in dell_smbios_call_filter()
209 call_blacklist[i].cmd_select != -1) in dell_smbios_call_filter()
212 buffer->cmd_class, buffer->cmd_select); in dell_smbios_call_filter()
213 return -EINVAL; in dell_smbios_call_filter()
218 if ((buffer->cmd_class == CLASS_TOKEN_READ || in dell_smbios_call_filter()
219 buffer->cmd_class == CLASS_TOKEN_WRITE) && in dell_smbios_call_filter()
220 buffer->cmd_select < 3) { in dell_smbios_call_filter()
224 return -EINVAL; in dell_smbios_call_filter()
229 if (da_tokens[i].location != buffer->input[0]) in dell_smbios_call_filter()
238 buffer->input[0]); in dell_smbios_call_filter()
239 return -EINVAL; in dell_smbios_call_filter()
244 if (!token_blacklist[i].min || !token_blacklist[i].max) in dell_smbios_call_filter()
247 t <= token_blacklist[i].max) in dell_smbios_call_filter()
248 return -EINVAL; in dell_smbios_call_filter()
253 if (!token_whitelist[i].min || !token_whitelist[i].max) in dell_smbios_call_filter()
256 t > token_whitelist[i].max) in dell_smbios_call_filter()
268 if (buffer->cmd_class != call_whitelist[i].cmd_class) in dell_smbios_call_filter()
270 if (buffer->cmd_select != call_whitelist[i].cmd_select) in dell_smbios_call_filter()
275 buffer->cmd_class, buffer->cmd_select); in dell_smbios_call_filter()
280 buffer->cmd_class, buffer->cmd_select); in dell_smbios_call_filter()
287 buffer->cmd_class, buffer->cmd_select); in dell_smbios_call_filter()
291 return -EACCES; in dell_smbios_call_filter()
303 if (!selected || priv->priority >= selected->priority) { in dell_smbios_call()
304 dev_dbg(priv->device, "Trying device ID: %d\n", priv->priority); in dell_smbios_call()
310 ret = -ENODEV; in dell_smbios_call()
311 pr_err("No dell-smbios drivers are loaded\n"); in dell_smbios_call()
315 ret = selected->call_fn(buffer); in dell_smbios_call()
327 buffer->input[0] = arg0; in dell_fill_request()
328 buffer->input[1] = arg1; in dell_fill_request()
329 buffer->input[2] = arg2; in dell_fill_request()
330 buffer->input[3] = arg3; in dell_fill_request()
339 buffer->cmd_class = class; in dell_send_request()
340 buffer->cmd_select = select; in dell_send_request()
344 return dell_smbios_error(buffer->output[0]); in dell_send_request()
396 int tokens = (dm->length-11)/sizeof(struct calling_interface_token)-1; in parse_da_table()
406 if (dm->length < 17) in parse_da_table()
409 da_supported_commands = table->supportedCmds; in parse_da_table()
419 memcpy(da_tokens+da_num_tokens, table->tokens, in parse_da_table()
448 switch (dm->type) { in find_tokens()
460 struct device_attribute *attr, char *buf) in location_show() argument
462 struct token_sysfs_data *data = container_of(attr, struct token_sysfs_data, location_attr); in location_show()
465 return -EPERM; in location_show()
467 return sysfs_emit(buf, "%08x", data->token->location); in location_show()
471 struct device_attribute *attr, char *buf) in value_show() argument
473 struct token_sysfs_data *data = container_of(attr, struct token_sysfs_data, value_attr); in value_show()
476 return -EPERM; in value_show()
478 return sysfs_emit(buf, "%08x", data->token->value); in value_show()
482 .name = "tokens"
487 .name = "dell-smbios",
500 return -ENOMEM; in build_tokens_sysfs()
520 sysfs_attr_init(&token_entries[i].location_attr.attr); in build_tokens_sysfs()
521 token_entries[i].location_attr.attr.name = location_name; in build_tokens_sysfs()
522 token_entries[i].location_attr.attr.mode = 0444; in build_tokens_sysfs()
524 token_attrs[j++] = &token_entries[i].location_attr.attr; in build_tokens_sysfs()
534 sysfs_attr_init(&token_entries[i].value_attr.attr); in build_tokens_sysfs()
535 token_entries[i].value_attr.attr.name = value_name; in build_tokens_sysfs()
536 token_entries[i].value_attr.attr.mode = 0444; in build_tokens_sysfs()
538 token_attrs[j++] = &token_entries[i].value_attr.attr; in build_tokens_sysfs()
542 ret = sysfs_create_group(&dev->dev.kobj, &smbios_attribute_group); in build_tokens_sysfs()
548 while (i--) { in build_tokens_sysfs()
549 kfree(token_entries[i].location_attr.attr.name); in build_tokens_sysfs()
550 kfree(token_entries[i].value_attr.attr.name); in build_tokens_sysfs()
556 return -ENOMEM; in build_tokens_sysfs()
563 sysfs_remove_group(&pdev->dev.kobj, in free_group()
566 kfree(token_entries[i].location_attr.attr.name); in free_group()
567 kfree(token_entries[i].value_attr.attr.name); in free_group()
580 pr_err("Unable to run on non-Dell system\n"); in dell_smbios_init()
581 return -ENODEV; in dell_smbios_init()
590 platform_device = platform_device_alloc("dell-smbios", 0); in dell_smbios_init()
592 ret = -ENOMEM; in dell_smbios_init()
609 ret = -ENODEV; in dell_smbios_init()
615 zero_duplicates(&platform_device->dev); in dell_smbios_init()