Lines Matching +full:entry +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0+
19 #define EFIVARS_DATE "2004-May-17"
44 ssize_t (*show) (struct efivar_entry *entry, char *buf);
45 ssize_t (*store)(struct efivar_entry *entry, const char *buf, size_t count);
50 .attr = {.name = __stringify(_name), .mode = _mode}, \
65 efivar_guid_read(struct efivar_entry *entry, char *buf) in efivar_guid_read() argument
67 struct efi_variable *var = &entry->var; in efivar_guid_read()
70 if (!entry || !buf) in efivar_guid_read()
73 efi_guid_to_str(&var->VendorGuid, str); in efivar_guid_read()
77 return str - buf; in efivar_guid_read()
81 efivar_attr_read(struct efivar_entry *entry, char *buf) in efivar_attr_read() argument
83 struct efi_variable *var = &entry->var; in efivar_attr_read()
84 unsigned long size = sizeof(var->Data); in efivar_attr_read()
88 if (!entry || !buf) in efivar_attr_read()
89 return -EINVAL; in efivar_attr_read()
91 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data); in efivar_attr_read()
92 var->DataSize = size; in efivar_attr_read()
94 return -EIO; in efivar_attr_read()
96 if (var->Attributes & EFI_VARIABLE_NON_VOLATILE) in efivar_attr_read()
98 if (var->Attributes & EFI_VARIABLE_BOOTSERVICE_ACCESS) in efivar_attr_read()
100 if (var->Attributes & EFI_VARIABLE_RUNTIME_ACCESS) in efivar_attr_read()
102 if (var->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) in efivar_attr_read()
104 if (var->Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) in efivar_attr_read()
107 if (var->Attributes & in efivar_attr_read()
111 if (var->Attributes & EFI_VARIABLE_APPEND_WRITE) in efivar_attr_read()
113 return str - buf; in efivar_attr_read()
117 efivar_size_read(struct efivar_entry *entry, char *buf) in efivar_size_read() argument
119 struct efi_variable *var = &entry->var; in efivar_size_read()
120 unsigned long size = sizeof(var->Data); in efivar_size_read()
124 if (!entry || !buf) in efivar_size_read()
125 return -EINVAL; in efivar_size_read()
127 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data); in efivar_size_read()
128 var->DataSize = size; in efivar_size_read()
130 return -EIO; in efivar_size_read()
132 str += sprintf(str, "0x%lx\n", var->DataSize); in efivar_size_read()
133 return str - buf; in efivar_size_read()
137 efivar_data_read(struct efivar_entry *entry, char *buf) in efivar_data_read() argument
139 struct efi_variable *var = &entry->var; in efivar_data_read()
140 unsigned long size = sizeof(var->Data); in efivar_data_read()
143 if (!entry || !buf) in efivar_data_read()
144 return -EINVAL; in efivar_data_read()
146 ret = efivar_entry_get(entry, &var->Attributes, &size, var->Data); in efivar_data_read()
147 var->DataSize = size; in efivar_data_read()
149 return -EIO; in efivar_data_read()
151 memcpy(buf, var->Data, var->DataSize); in efivar_data_read()
152 return var->DataSize; in efivar_data_read()
156 sanity_check(struct efi_variable *var, efi_char16_t *name, efi_guid_t vendor, in sanity_check() argument
160 * If only updating the variable data, then the name in sanity_check()
163 if (memcmp(name, var->VariableName, sizeof(var->VariableName)) || in sanity_check()
164 efi_guidcmp(vendor, var->VendorGuid)) { in sanity_check()
166 return -EINVAL; in sanity_check()
171 return -EINVAL; in sanity_check()
175 efivar_validate(vendor, name, data, size) == false) { in sanity_check()
177 return -EINVAL; in sanity_check()
186 memcpy(dst->VariableName, src->VariableName, EFI_VAR_NAME_LEN); in copy_out_compat()
187 memcpy(dst->Data, src->Data, sizeof(src->Data)); in copy_out_compat()
189 dst->VendorGuid = src->VendorGuid; in copy_out_compat()
190 dst->DataSize = src->DataSize; in copy_out_compat()
191 dst->Attributes = src->Attributes; in copy_out_compat()
199 efivar_store_raw(struct efivar_entry *entry, const char *buf, size_t count) in efivar_store_raw() argument
201 struct efi_variable *new_var, *var = &entry->var; in efivar_store_raw()
202 efi_char16_t *name; in efivar_store_raw() local
209 if (!entry || !buf) in efivar_store_raw()
210 return -EINVAL; in efivar_store_raw()
216 return -EINVAL; in efivar_store_raw()
219 attributes = compat->Attributes; in efivar_store_raw()
220 vendor = compat->VendorGuid; in efivar_store_raw()
221 name = compat->VariableName; in efivar_store_raw()
222 size = compat->DataSize; in efivar_store_raw()
223 data = compat->Data; in efivar_store_raw()
225 err = sanity_check(var, name, vendor, size, attributes, data); in efivar_store_raw()
229 copy_out_compat(&entry->var, compat); in efivar_store_raw()
232 return -EINVAL; in efivar_store_raw()
236 attributes = new_var->Attributes; in efivar_store_raw()
237 vendor = new_var->VendorGuid; in efivar_store_raw()
238 name = new_var->VariableName; in efivar_store_raw()
239 size = new_var->DataSize; in efivar_store_raw()
240 data = new_var->Data; in efivar_store_raw()
242 err = sanity_check(var, name, vendor, size, attributes, data); in efivar_store_raw()
246 memcpy(&entry->var, new_var, count); in efivar_store_raw()
249 err = efivar_entry_set(entry, attributes, size, data, NULL); in efivar_store_raw()
252 return -EIO; in efivar_store_raw()
259 efivar_show_raw(struct efivar_entry *entry, char *buf) in efivar_show_raw() argument
261 struct efi_variable *var = &entry->var; in efivar_show_raw()
263 unsigned long datasize = sizeof(var->Data); in efivar_show_raw()
267 if (!entry || !buf) in efivar_show_raw()
270 ret = efivar_entry_get(entry, &var->Attributes, &datasize, var->Data); in efivar_show_raw()
271 var->DataSize = datasize; in efivar_show_raw()
273 return -EIO; in efivar_show_raw()
279 memcpy(compat->VariableName, var->VariableName, in efivar_show_raw()
281 memcpy(compat->Data, var->Data, sizeof(compat->Data)); in efivar_show_raw()
283 compat->VendorGuid = var->VendorGuid; in efivar_show_raw()
284 compat->DataSize = var->DataSize; in efivar_show_raw()
285 compat->Attributes = var->Attributes; in efivar_show_raw()
303 ssize_t ret = -EIO; in efivar_attr_show()
306 return -EACCES; in efivar_attr_show()
308 if (efivar_attr->show) { in efivar_attr_show()
309 ret = efivar_attr->show(var, buf); in efivar_attr_show()
319 ssize_t ret = -EIO; in efivar_attr_store()
322 return -EACCES; in efivar_attr_store()
324 if (efivar_attr->store) in efivar_attr_store()
325 ret = efivar_attr->store(var, buf, count); in efivar_attr_store()
370 efi_char16_t *name; in efivar_create() local
377 return -EACCES; in efivar_create()
381 return -EINVAL; in efivar_create()
383 attributes = compat->Attributes; in efivar_create()
384 name = compat->VariableName; in efivar_create()
385 size = compat->DataSize; in efivar_create()
386 data = compat->Data; in efivar_create()
389 return -EINVAL; in efivar_create()
391 attributes = new_var->Attributes; in efivar_create()
392 name = new_var->VariableName; in efivar_create()
393 size = new_var->DataSize; in efivar_create()
394 data = new_var->Data; in efivar_create()
398 efivar_validate(new_var->VendorGuid, name, data, in efivar_create()
401 return -EINVAL; in efivar_create()
406 return -ENOMEM; in efivar_create()
409 copy_out_compat(&new_entry->var, compat); in efivar_create()
411 memcpy(&new_entry->var, new_var, sizeof(*new_var)); in efivar_create()
416 if (err == -EEXIST) in efivar_create()
417 err = -EINVAL; in efivar_create()
422 printk(KERN_WARNING "efivars: failed to create sysfs entry.\n"); in efivar_create()
438 struct efivar_entry *entry; in efivar_delete() local
439 efi_char16_t *name; in efivar_delete() local
444 return -EACCES; in efivar_delete()
448 return -EINVAL; in efivar_delete()
451 name = compat->VariableName; in efivar_delete()
452 vendor = compat->VendorGuid; in efivar_delete()
455 return -EINVAL; in efivar_delete()
457 name = del_var->VariableName; in efivar_delete()
458 vendor = del_var->VendorGuid; in efivar_delete()
462 return -EINTR; in efivar_delete()
463 entry = efivar_entry_find(name, vendor, &efivar_sysfs_list, true); in efivar_delete()
464 if (!entry) in efivar_delete()
465 err = -EINVAL; in efivar_delete()
466 else if (__efivar_entry_delete(entry)) in efivar_delete()
467 err = -EIO; in efivar_delete()
474 if (!entry->scanning) { in efivar_delete()
476 efivar_unregister(entry); in efivar_delete()
485 * efivar_create_sysfs_entry - create a new entry in sysfs
486 * @new_var: efivar entry to create
496 efi_char16_t *variable_name = new_var->var.VariableName; in efivar_create_sysfs_entry()
500 * Length of the variable bytes in UTF8, plus the '-' separator, in efivar_create_sysfs_entry()
508 return -ENOMEM; in efivar_create_sysfs_entry()
514 short_name[utf8_name_size] = '-'; in efivar_create_sysfs_entry()
515 efi_guid_to_str(&new_var->var.VendorGuid, in efivar_create_sysfs_entry()
518 new_var->kobj.kset = efivars_kset; in efivar_create_sysfs_entry()
520 ret = kobject_init_and_add(&new_var->kobj, &efivar_ktype, in efivar_create_sysfs_entry()
524 kobject_put(&new_var->kobj); in efivar_create_sysfs_entry()
528 kobject_uevent(&new_var->kobj, KOBJ_ADD); in efivar_create_sysfs_entry()
531 return -EINTR; in efivar_create_sysfs_entry()
546 return -ENOMEM; in create_efivars_bin_attributes()
548 attr->attr.name = "new_var"; in create_efivars_bin_attributes()
549 attr->attr.mode = 0200; in create_efivars_bin_attributes()
550 attr->write = efivar_create; in create_efivars_bin_attributes()
556 error = -ENOMEM; in create_efivars_bin_attributes()
559 attr->attr.name = "del_var"; in create_efivars_bin_attributes()
560 attr->attr.mode = 0200; in create_efivars_bin_attributes()
561 attr->write = efivar_delete; in create_efivars_bin_attributes()
568 error = sysfs_create_bin_file(&efivars_kset->kobj, efivars_new_var); in create_efivars_bin_attributes()
575 error = sysfs_create_bin_file(&efivars_kset->kobj, efivars_del_var); in create_efivars_bin_attributes()
579 sysfs_remove_bin_file(&efivars_kset->kobj, efivars_new_var); in create_efivars_bin_attributes()
592 static int efivars_sysfs_callback(efi_char16_t *name, efi_guid_t vendor, in efivars_sysfs_callback() argument
595 struct efivar_entry *entry; in efivars_sysfs_callback() local
597 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in efivars_sysfs_callback()
598 if (!entry) in efivars_sysfs_callback()
599 return -ENOMEM; in efivars_sysfs_callback()
601 memcpy(entry->var.VariableName, name, name_size); in efivars_sysfs_callback()
602 memcpy(&(entry->var.VendorGuid), &vendor, sizeof(efi_guid_t)); in efivars_sysfs_callback()
604 efivar_create_sysfs_entry(entry); in efivars_sysfs_callback()
609 static int efivar_sysfs_destroy(struct efivar_entry *entry, void *data) in efivar_sysfs_destroy() argument
611 int err = efivar_entry_remove(entry); in efivar_sysfs_destroy()
615 efivar_unregister(entry); in efivar_sysfs_destroy()
632 sysfs_remove_bin_file(&efivars_kset->kobj, efivars_new_var); in efivars_sysfs_exit()
634 sysfs_remove_bin_file(&efivars_kset->kobj, efivars_del_var); in efivars_sysfs_exit()
655 return -ENOMEM; in efivars_sysfs_init()