memconsole.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * memconsole.c
  4. *
  5. * Architecture-independent parts of the memory based BIOS console.
  6. *
  7. * Copyright 2017 Google Inc.
  8. */
  9. #include <linux/sysfs.h>
  10. #include <linux/kobject.h>
  11. #include <linux/module.h>
  12. #include "memconsole.h"
  13. static ssize_t memconsole_read(struct file *filp, struct kobject *kobp,
  14. struct bin_attribute *bin_attr, char *buf,
  15. loff_t pos, size_t count)
  16. {
  17. ssize_t (*memconsole_read_func)(char *, loff_t, size_t);
  18. memconsole_read_func = bin_attr->private;
  19. if (WARN_ON_ONCE(!memconsole_read_func))
  20. return -EIO;
  21. return memconsole_read_func(buf, pos, count);
  22. }
  23. static struct bin_attribute memconsole_bin_attr = {
  24. .attr = {.name = "log", .mode = 0444},
  25. .read = memconsole_read,
  26. };
  27. void memconsole_setup(ssize_t (*read_func)(char *, loff_t, size_t))
  28. {
  29. memconsole_bin_attr.private = read_func;
  30. }
  31. EXPORT_SYMBOL(memconsole_setup);
  32. int memconsole_sysfs_init(void)
  33. {
  34. return sysfs_create_bin_file(firmware_kobj, &memconsole_bin_attr);
  35. }
  36. EXPORT_SYMBOL(memconsole_sysfs_init);
  37. void memconsole_exit(void)
  38. {
  39. sysfs_remove_bin_file(firmware_kobj, &memconsole_bin_attr);
  40. }
  41. EXPORT_SYMBOL(memconsole_exit);
  42. MODULE_AUTHOR("Google, Inc.");
  43. MODULE_LICENSE("GPL");