aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/efi.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-03-16 18:05:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-16 18:05:40 -0400
commita5e6b135bdff649e4330f98e2e80dbb1984f7e77 (patch)
tree475bfb1163c59d1370fd77415255afba768f9520 /include/linux/efi.h
parent971f115a50afbe409825c9f3399d5a3b9aca4381 (diff)
parent9d90c8d9cde929cbc575098e825d7c29d9f45054 (diff)
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (50 commits) printk: do not mangle valid userspace syslog prefixes efivars: Add Documentation efivars: Expose efivars functionality to external drivers. efivars: Parameterize operations. efivars: Split out variable registration efivars: parameterize efivars efivars: Make efivars bin_attributes dynamic efivars: move efivars globals into struct efivars drivers:misc: ti-st: fix debugging code kref: Fix typo in kref documentation UIO: add PRUSS UIO driver support Fix spelling mistakes in Documentation/zh_CN/SubmittingPatches firmware: Fix unaligned memory accesses in dmi-sysfs firmware: Add documentation for /sys/firmware/dmi firmware: Expose DMI type 15 System Event Log firmware: Break out system_event_log in dmi-sysfs firmware: Basic dmi-sysfs support firmware: Add DMI entry types to the headers Driver core: convert platform_{get,set}_drvdata to static inline functions Translate linux-2.6/Documentation/magic-number.txt into Chinese ...
Diffstat (limited to 'include/linux/efi.h')
-rw-r--r--include/linux/efi.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/include/linux/efi.h b/include/linux/efi.h
index fb737bc19a8c..33fa1203024e 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -397,4 +397,41 @@ static inline void memrange_efi_to_native(u64 *addr, u64 *npages)
397 *addr &= PAGE_MASK; 397 *addr &= PAGE_MASK;
398} 398}
399 399
400#if defined(CONFIG_EFI_VARS) || defined(CONFIG_EFI_VARS_MODULE)
401/*
402 * EFI Variable support.
403 *
404 * Different firmware drivers can expose their EFI-like variables using
405 * the following.
406 */
407
408struct efivar_operations {
409 efi_get_variable_t *get_variable;
410 efi_get_next_variable_t *get_next_variable;
411 efi_set_variable_t *set_variable;
412};
413
414struct efivars {
415 /*
416 * ->lock protects two things:
417 * 1) ->list - adds, removals, reads, writes
418 * 2) ops.[gs]et_variable() calls.
419 * It must not be held when creating sysfs entries or calling kmalloc.
420 * ops.get_next_variable() is only called from register_efivars(),
421 * which is protected by the BKL, so that path is safe.
422 */
423 spinlock_t lock;
424 struct list_head list;
425 struct kset *kset;
426 struct bin_attribute *new_var, *del_var;
427 const struct efivar_operations *ops;
428};
429
430int register_efivars(struct efivars *efivars,
431 const struct efivar_operations *ops,
432 struct kobject *parent_kobj);
433void unregister_efivars(struct efivars *efivars);
434
435#endif /* CONFIG_EFI_VARS */
436
400#endif /* _LINUX_EFI_H */ 437#endif /* _LINUX_EFI_H */