aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/firmware_class/README17
-rw-r--r--Documentation/firmware_class/firmware_sample_driver.c11
-rw-r--r--drivers/base/firmware_class.c39
-rw-r--r--include/linux/firmware.h1
4 files changed, 8 insertions, 60 deletions
diff --git a/Documentation/firmware_class/README b/Documentation/firmware_class/README
index 43e836c07ae8..e9cc8bb26f7d 100644
--- a/Documentation/firmware_class/README
+++ b/Documentation/firmware_class/README
@@ -105,20 +105,3 @@
105 on the setup, so I think that the choice on what firmware to make 105 on the setup, so I think that the choice on what firmware to make
106 persistent should be left to userspace. 106 persistent should be left to userspace.
107 107
108 - Why register_firmware()+__init can be useful:
109 - For boot devices needing firmware.
110 - To make the transition easier:
111 The firmware can be declared __init and register_firmware()
112 called on module_init. Then the firmware is warranted to be
113 there even if "firmware hotplug userspace" is not there yet or
114 it doesn't yet provide the needed firmware.
115 Once the firmware is widely available in userspace, it can be
116 removed from the kernel. Or made optional (CONFIG_.*_FIRMWARE).
117
118 In either case, if firmware hotplug support is there, it can move the
119 firmware out of kernel memory into the real filesystem for later
120 usage.
121
122 Note: If persistence is implemented on top of initramfs,
123 register_firmware() may not be appropriate.
124
diff --git a/Documentation/firmware_class/firmware_sample_driver.c b/Documentation/firmware_class/firmware_sample_driver.c
index ad3edaba4533..87feccdb5c9f 100644
--- a/Documentation/firmware_class/firmware_sample_driver.c
+++ b/Documentation/firmware_class/firmware_sample_driver.c
@@ -5,8 +5,6 @@
5 * 5 *
6 * Sample code on how to use request_firmware() from drivers. 6 * Sample code on how to use request_firmware() from drivers.
7 * 7 *
8 * Note that register_firmware() is currently useless.
9 *
10 */ 8 */
11 9
12#include <linux/module.h> 10#include <linux/module.h>
@@ -17,11 +15,6 @@
17 15
18#include "linux/firmware.h" 16#include "linux/firmware.h"
19 17
20#define WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
21#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
22char __init inkernel_firmware[] = "let's say that this is firmware\n";
23#endif
24
25static struct device ghost_device = { 18static struct device ghost_device = {
26 .bus_id = "ghost0", 19 .bus_id = "ghost0",
27}; 20};
@@ -104,10 +97,6 @@ static void sample_probe_async(void)
104 97
105static int sample_init(void) 98static int sample_init(void)
106{ 99{
107#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
108 register_firmware("sample_driver_fw", inkernel_firmware,
109 sizeof(inkernel_firmware));
110#endif
111 device_initialize(&ghost_device); 100 device_initialize(&ghost_device);
112 /* since there is no real hardware insertion I just call the 101 /* since there is no real hardware insertion I just call the
113 * sample probe functions here */ 102 * sample probe functions here */
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 472318205236..0c99ae6a3407 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -86,18 +86,9 @@ firmware_timeout_store(struct class *class, const char *buf, size_t count)
86static CLASS_ATTR(timeout, 0644, firmware_timeout_show, firmware_timeout_store); 86static CLASS_ATTR(timeout, 0644, firmware_timeout_show, firmware_timeout_store);
87 87
88static void fw_class_dev_release(struct class_device *class_dev); 88static void fw_class_dev_release(struct class_device *class_dev);
89int firmware_class_uevent(struct class_device *dev, char **envp,
90 int num_envp, char *buffer, int buffer_size);
91 89
92static struct class firmware_class = { 90static int firmware_class_uevent(struct class_device *class_dev, char **envp,
93 .name = "firmware", 91 int num_envp, char *buffer, int buffer_size)
94 .uevent = firmware_class_uevent,
95 .release = fw_class_dev_release,
96};
97
98int
99firmware_class_uevent(struct class_device *class_dev, char **envp,
100 int num_envp, char *buffer, int buffer_size)
101{ 92{
102 struct firmware_priv *fw_priv = class_get_devdata(class_dev); 93 struct firmware_priv *fw_priv = class_get_devdata(class_dev);
103 int i = 0, len = 0; 94 int i = 0, len = 0;
@@ -116,6 +107,12 @@ firmware_class_uevent(struct class_device *class_dev, char **envp,
116 return 0; 107 return 0;
117} 108}
118 109
110static struct class firmware_class = {
111 .name = "firmware",
112 .uevent = firmware_class_uevent,
113 .release = fw_class_dev_release,
114};
115
119static ssize_t 116static ssize_t
120firmware_loading_show(struct class_device *class_dev, char *buf) 117firmware_loading_show(struct class_device *class_dev, char *buf)
121{ 118{
@@ -493,25 +490,6 @@ release_firmware(const struct firmware *fw)
493 } 490 }
494} 491}
495 492
496/**
497 * register_firmware: - provide a firmware image for later usage
498 * @name: name of firmware image file
499 * @data: buffer pointer for the firmware image
500 * @size: size of the data buffer area
501 *
502 * Make sure that @data will be available by requesting firmware @name.
503 *
504 * Note: This will not be possible until some kind of persistence
505 * is available.
506 **/
507void
508register_firmware(const char *name, const u8 *data, size_t size)
509{
510 /* This is meaningless without firmware caching, so until we
511 * decide if firmware caching is reasonable just leave it as a
512 * noop */
513}
514
515/* Async support */ 493/* Async support */
516struct firmware_work { 494struct firmware_work {
517 struct work_struct work; 495 struct work_struct work;
@@ -630,4 +608,3 @@ module_exit(firmware_class_exit);
630EXPORT_SYMBOL(release_firmware); 608EXPORT_SYMBOL(release_firmware);
631EXPORT_SYMBOL(request_firmware); 609EXPORT_SYMBOL(request_firmware);
632EXPORT_SYMBOL(request_firmware_nowait); 610EXPORT_SYMBOL(request_firmware_nowait);
633EXPORT_SYMBOL(register_firmware);
diff --git a/include/linux/firmware.h b/include/linux/firmware.h
index 2d716080be4a..33d8f2087b6e 100644
--- a/include/linux/firmware.h
+++ b/include/linux/firmware.h
@@ -19,5 +19,4 @@ int request_firmware_nowait(
19 void (*cont)(const struct firmware *fw, void *context)); 19 void (*cont)(const struct firmware *fw, void *context));
20 20
21void release_firmware(const struct firmware *fw); 21void release_firmware(const struct firmware *fw);
22void register_firmware(const char *name, const u8 *data, size_t size);
23#endif 22#endif