fixup kernel loading firmware
[cascardo/linux.git] / drivers / base / firmware_class.c
1 /*
2  * firmware_class.c - Multi purpose firmware loading support
3  *
4  * Copyright (c) 2003 Manuel Estrada Sainz
5  *
6  * Please see Documentation/firmware_class/ for more information.
7  *
8  */
9
10 #include <linux/capability.h>
11 #include <linux/device.h>
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/timer.h>
15 #include <linux/vmalloc.h>
16 #include <linux/interrupt.h>
17 #include <linux/bitops.h>
18 #include <linux/mutex.h>
19 #include <linux/workqueue.h>
20 #include <linux/highmem.h>
21 #include <linux/firmware.h>
22 #include <linux/slab.h>
23 #include <linux/sched.h>
24 #include <linux/file.h>
25 #include <linux/list.h>
26 #include <linux/async.h>
27 #include <linux/pm.h>
28 #include <linux/suspend.h>
29 #include <linux/syscore_ops.h>
30
31 #include <generated/utsrelease.h>
32
33 #include "base.h"
34
35 #define to_dev(obj) container_of(obj, struct device, kobj)
36
37 MODULE_AUTHOR("Manuel Estrada Sainz");
38 MODULE_DESCRIPTION("Multi purpose firmware loading support");
39 MODULE_LICENSE("GPL");
40
41 static const char *fw_path[] = {
42         "/lib/firmware/updates/" UTS_RELEASE,
43         "/lib/firmware/updates",
44         "/lib/firmware/" UTS_RELEASE,
45         "/lib/firmware"
46 };
47
48 /* Don't inline this: 'struct kstat' is biggish */
49 static noinline long fw_file_size(struct file *file)
50 {
51         struct kstat st;
52         if (vfs_getattr(file->f_path.mnt, file->f_path.dentry, &st))
53                 return -1;
54         if (!S_ISREG(st.mode))
55                 return -1;
56         if (st.size != (long)st.size)
57                 return -1;
58         return st.size;
59 }
60
61 static bool fw_read_file_contents(struct file *file, struct firmware *fw)
62 {
63         long size;
64         char *buf;
65
66         size = fw_file_size(file);
67         if (size < 0)
68                 return false;
69         buf = vmalloc(size);
70         if (!buf)
71                 return false;
72         if (kernel_read(file, 0, buf, size) != size) {
73                 vfree(buf);
74                 return false;
75         }
76         fw->data = buf;
77         fw->size = size;
78         return true;
79 }
80
81 static bool fw_get_filesystem_firmware(struct firmware *fw, const char *name)
82 {
83         int i;
84         bool success = false;
85         char *path = __getname();
86
87         for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
88                 struct file *file;
89                 snprintf(path, PATH_MAX, "%s/%s", fw_path[i], name);
90
91                 file = filp_open(path, O_RDONLY, 0);
92                 if (IS_ERR(file))
93                         continue;
94                 success = fw_read_file_contents(file, fw);
95                 fput(file);
96                 if (success)
97                         break;
98         }
99         __putname(path);
100         return success;
101 }
102
103 /* Builtin firmware support */
104
105 #ifdef CONFIG_FW_LOADER
106
107 extern struct builtin_fw __start_builtin_fw[];
108 extern struct builtin_fw __end_builtin_fw[];
109
110 static bool fw_get_builtin_firmware(struct firmware *fw, const char *name)
111 {
112         struct builtin_fw *b_fw;
113
114         for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) {
115                 if (strcmp(name, b_fw->name) == 0) {
116                         fw->size = b_fw->size;
117                         fw->data = b_fw->data;
118                         return true;
119                 }
120         }
121
122         return false;
123 }
124
125 static bool fw_is_builtin_firmware(const struct firmware *fw)
126 {
127         struct builtin_fw *b_fw;
128
129         for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++)
130                 if (fw->data == b_fw->data)
131                         return true;
132
133         return false;
134 }
135
136 #else /* Module case - no builtin firmware support */
137
138 static inline bool fw_get_builtin_firmware(struct firmware *fw, const char *name)
139 {
140         return false;
141 }
142
143 static inline bool fw_is_builtin_firmware(const struct firmware *fw)
144 {
145         return false;
146 }
147 #endif
148
149 enum {
150         FW_STATUS_LOADING,
151         FW_STATUS_DONE,
152         FW_STATUS_ABORT,
153 };
154
155 static int loading_timeout = 60;        /* In seconds */
156
157 static inline long firmware_loading_timeout(void)
158 {
159         return loading_timeout > 0 ? loading_timeout * HZ : MAX_SCHEDULE_TIMEOUT;
160 }
161
162 /* fw_lock could be moved to 'struct firmware_priv' but since it is just
163  * guarding for corner cases a global lock should be OK */
164 static DEFINE_MUTEX(fw_lock);
165
166 struct firmware_priv {
167         struct completion completion;
168         struct firmware *fw;
169         unsigned long status;
170         struct page **pages;
171         int nr_pages;
172         int page_array_size;
173         struct timer_list timeout;
174         struct device dev;
175         bool nowait;
176         char fw_id[];
177 };
178
179 static struct firmware_priv *to_firmware_priv(struct device *dev)
180 {
181         return container_of(dev, struct firmware_priv, dev);
182 }
183
184 static void fw_load_abort(struct firmware_priv *fw_priv)
185 {
186         set_bit(FW_STATUS_ABORT, &fw_priv->status);
187         wmb();
188         complete(&fw_priv->completion);
189 }
190
191 static ssize_t firmware_timeout_show(struct class *class,
192                                      struct class_attribute *attr,
193                                      char *buf)
194 {
195         return sprintf(buf, "%d\n", loading_timeout);
196 }
197
198 /**
199  * firmware_timeout_store - set number of seconds to wait for firmware
200  * @class: device class pointer
201  * @attr: device attribute pointer
202  * @buf: buffer to scan for timeout value
203  * @count: number of bytes in @buf
204  *
205  *      Sets the number of seconds to wait for the firmware.  Once
206  *      this expires an error will be returned to the driver and no
207  *      firmware will be provided.
208  *
209  *      Note: zero means 'wait forever'.
210  **/
211 static ssize_t firmware_timeout_store(struct class *class,
212                                       struct class_attribute *attr,
213                                       const char *buf, size_t count)
214 {
215         loading_timeout = simple_strtol(buf, NULL, 10);
216         if (loading_timeout < 0)
217                 loading_timeout = 0;
218
219         return count;
220 }
221
222 static struct class_attribute firmware_class_attrs[] = {
223         __ATTR(timeout, S_IWUSR | S_IRUGO,
224                 firmware_timeout_show, firmware_timeout_store),
225         __ATTR_NULL
226 };
227
228 static void fw_dev_release(struct device *dev)
229 {
230         struct firmware_priv *fw_priv = to_firmware_priv(dev);
231         int i;
232
233         for (i = 0; i < fw_priv->nr_pages; i++)
234                 __free_page(fw_priv->pages[i]);
235         kfree(fw_priv->pages);
236         kfree(fw_priv);
237
238         module_put(THIS_MODULE);
239 }
240
241 static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
242 {
243         struct firmware_priv *fw_priv = to_firmware_priv(dev);
244
245         if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->fw_id))
246                 return -ENOMEM;
247         if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
248                 return -ENOMEM;
249         if (add_uevent_var(env, "ASYNC=%d", fw_priv->nowait))
250                 return -ENOMEM;
251
252         return 0;
253 }
254
255 static struct class firmware_class = {
256         .name           = "firmware",
257         .class_attrs    = firmware_class_attrs,
258         .dev_uevent     = firmware_uevent,
259         .dev_release    = fw_dev_release,
260 };
261
262 static ssize_t firmware_loading_show(struct device *dev,
263                                      struct device_attribute *attr, char *buf)
264 {
265         struct firmware_priv *fw_priv = to_firmware_priv(dev);
266         int loading = test_bit(FW_STATUS_LOADING, &fw_priv->status);
267
268         return sprintf(buf, "%d\n", loading);
269 }
270
271 static void firmware_free_data(const struct firmware *fw)
272 {
273         int i;
274         if (fw->pages) {
275                 vunmap(fw->data);
276                 for (i = 0; i < PFN_UP(fw->size); i++)
277                         __free_page(fw->pages[i]);
278                 kfree(fw->pages);
279         /* Loaded directly? */
280         } else {
281                 vfree(fw->data);
282         }
283 }
284
285 /* Some architectures don't have PAGE_KERNEL_RO */
286 #ifndef PAGE_KERNEL_RO
287 #define PAGE_KERNEL_RO PAGE_KERNEL
288 #endif
289 /**
290  * firmware_loading_store - set value in the 'loading' control file
291  * @dev: device pointer
292  * @attr: device attribute pointer
293  * @buf: buffer to scan for loading control value
294  * @count: number of bytes in @buf
295  *
296  *      The relevant values are:
297  *
298  *       1: Start a load, discarding any previous partial load.
299  *       0: Conclude the load and hand the data to the driver code.
300  *      -1: Conclude the load with an error and discard any written data.
301  **/
302 static ssize_t firmware_loading_store(struct device *dev,
303                                       struct device_attribute *attr,
304                                       const char *buf, size_t count)
305 {
306         struct firmware_priv *fw_priv = to_firmware_priv(dev);
307         int loading = simple_strtol(buf, NULL, 10);
308         int i;
309
310         mutex_lock(&fw_lock);
311
312         if (!fw_priv->fw)
313                 goto out;
314
315         switch (loading) {
316         case 1:
317                 firmware_free_data(fw_priv->fw);
318                 memset(fw_priv->fw, 0, sizeof(struct firmware));
319                 /* If the pages are not owned by 'struct firmware' */
320                 for (i = 0; i < fw_priv->nr_pages; i++)
321                         __free_page(fw_priv->pages[i]);
322                 kfree(fw_priv->pages);
323                 fw_priv->pages = NULL;
324                 fw_priv->page_array_size = 0;
325                 fw_priv->nr_pages = 0;
326                 set_bit(FW_STATUS_LOADING, &fw_priv->status);
327                 break;
328         case 0:
329                 if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) {
330                         vunmap(fw_priv->fw->data);
331                         fw_priv->fw->data = vmap(fw_priv->pages,
332                                                  fw_priv->nr_pages,
333                                                  0, PAGE_KERNEL_RO);
334                         if (!fw_priv->fw->data) {
335                                 dev_err(dev, "%s: vmap() failed\n", __func__);
336                                 goto err;
337                         }
338                         /* Pages are now owned by 'struct firmware' */
339                         fw_priv->fw->pages = fw_priv->pages;
340                         fw_priv->pages = NULL;
341
342                         fw_priv->page_array_size = 0;
343                         fw_priv->nr_pages = 0;
344                         complete(&fw_priv->completion);
345                         clear_bit(FW_STATUS_LOADING, &fw_priv->status);
346                         break;
347                 }
348                 /* fallthrough */
349         default:
350                 dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading);
351                 /* fallthrough */
352         case -1:
353         err:
354                 fw_load_abort(fw_priv);
355                 break;
356         }
357 out:
358         mutex_unlock(&fw_lock);
359         return count;
360 }
361
362 static DEVICE_ATTR(loading, 0644, firmware_loading_show, firmware_loading_store);
363
364 static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj,
365                                   struct bin_attribute *bin_attr,
366                                   char *buffer, loff_t offset, size_t count)
367 {
368         struct device *dev = to_dev(kobj);
369         struct firmware_priv *fw_priv = to_firmware_priv(dev);
370         struct firmware *fw;
371         ssize_t ret_count;
372
373         mutex_lock(&fw_lock);
374         fw = fw_priv->fw;
375         if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
376                 ret_count = -ENODEV;
377                 goto out;
378         }
379         if (offset > fw->size) {
380                 ret_count = 0;
381                 goto out;
382         }
383         if (count > fw->size - offset)
384                 count = fw->size - offset;
385
386         ret_count = count;
387
388         while (count) {
389                 void *page_data;
390                 int page_nr = offset >> PAGE_SHIFT;
391                 int page_ofs = offset & (PAGE_SIZE-1);
392                 int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);
393
394                 page_data = kmap(fw_priv->pages[page_nr]);
395
396                 memcpy(buffer, page_data + page_ofs, page_cnt);
397
398                 kunmap(fw_priv->pages[page_nr]);
399                 buffer += page_cnt;
400                 offset += page_cnt;
401                 count -= page_cnt;
402         }
403 out:
404         mutex_unlock(&fw_lock);
405         return ret_count;
406 }
407
408 static int fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
409 {
410         int pages_needed = ALIGN(min_size, PAGE_SIZE) >> PAGE_SHIFT;
411
412         /* If the array of pages is too small, grow it... */
413         if (fw_priv->page_array_size < pages_needed) {
414                 int new_array_size = max(pages_needed,
415                                          fw_priv->page_array_size * 2);
416                 struct page **new_pages;
417
418                 new_pages = kmalloc(new_array_size * sizeof(void *),
419                                     GFP_KERNEL);
420                 if (!new_pages) {
421                         fw_load_abort(fw_priv);
422                         return -ENOMEM;
423                 }
424                 memcpy(new_pages, fw_priv->pages,
425                        fw_priv->page_array_size * sizeof(void *));
426                 memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
427                        (new_array_size - fw_priv->page_array_size));
428                 kfree(fw_priv->pages);
429                 fw_priv->pages = new_pages;
430                 fw_priv->page_array_size = new_array_size;
431         }
432
433         while (fw_priv->nr_pages < pages_needed) {
434                 fw_priv->pages[fw_priv->nr_pages] =
435                         alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
436
437                 if (!fw_priv->pages[fw_priv->nr_pages]) {
438                         fw_load_abort(fw_priv);
439                         return -ENOMEM;
440                 }
441                 fw_priv->nr_pages++;
442         }
443         return 0;
444 }
445
446 /**
447  * firmware_data_write - write method for firmware
448  * @filp: open sysfs file
449  * @kobj: kobject for the device
450  * @bin_attr: bin_attr structure
451  * @buffer: buffer being written
452  * @offset: buffer offset for write in total data store area
453  * @count: buffer size
454  *
455  *      Data written to the 'data' attribute will be later handed to
456  *      the driver as a firmware image.
457  **/
458 static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj,
459                                    struct bin_attribute *bin_attr,
460                                    char *buffer, loff_t offset, size_t count)
461 {
462         struct device *dev = to_dev(kobj);
463         struct firmware_priv *fw_priv = to_firmware_priv(dev);
464         struct firmware *fw;
465         ssize_t retval;
466
467         if (!capable(CAP_SYS_RAWIO))
468                 return -EPERM;
469
470         mutex_lock(&fw_lock);
471         fw = fw_priv->fw;
472         if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
473                 retval = -ENODEV;
474                 goto out;
475         }
476         retval = fw_realloc_buffer(fw_priv, offset + count);
477         if (retval)
478                 goto out;
479
480         retval = count;
481
482         while (count) {
483                 void *page_data;
484                 int page_nr = offset >> PAGE_SHIFT;
485                 int page_ofs = offset & (PAGE_SIZE - 1);
486                 int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);
487
488                 page_data = kmap(fw_priv->pages[page_nr]);
489
490                 memcpy(page_data + page_ofs, buffer, page_cnt);
491
492                 kunmap(fw_priv->pages[page_nr]);
493                 buffer += page_cnt;
494                 offset += page_cnt;
495                 count -= page_cnt;
496         }
497
498         fw->size = max_t(size_t, offset, fw->size);
499 out:
500         mutex_unlock(&fw_lock);
501         return retval;
502 }
503
504 static struct bin_attribute firmware_attr_data = {
505         .attr = { .name = "data", .mode = 0644 },
506         .size = 0,
507         .read = firmware_data_read,
508         .write = firmware_data_write,
509 };
510
511 static void firmware_class_timeout(u_long data)
512 {
513         struct firmware_priv *fw_priv = (struct firmware_priv *) data;
514
515         fw_load_abort(fw_priv);
516 }
517
518 static struct firmware_priv *
519 fw_create_instance(struct firmware *firmware, const char *fw_name,
520                    struct device *device, bool uevent, bool nowait)
521 {
522         struct firmware_priv *fw_priv;
523         struct device *f_dev;
524
525         fw_priv = kzalloc(sizeof(*fw_priv) + strlen(fw_name) + 1 , GFP_KERNEL);
526         if (!fw_priv) {
527                 dev_err(device, "%s: kmalloc failed\n", __func__);
528                 return ERR_PTR(-ENOMEM);
529         }
530
531         fw_priv->fw = firmware;
532         fw_priv->nowait = nowait;
533         strcpy(fw_priv->fw_id, fw_name);
534         init_completion(&fw_priv->completion);
535         setup_timer(&fw_priv->timeout,
536                     firmware_class_timeout, (u_long) fw_priv);
537
538         f_dev = &fw_priv->dev;
539
540         device_initialize(f_dev);
541         dev_set_name(f_dev, "%s", dev_name(device));
542         f_dev->parent = device;
543         f_dev->class = &firmware_class;
544
545         return fw_priv;
546 }
547
548 static struct firmware_priv *
549 _request_firmware_prepare(const struct firmware **firmware_p, const char *name,
550                           struct device *device, bool uevent, bool nowait)
551 {
552         struct firmware *firmware;
553         struct firmware_priv *fw_priv;
554
555         if (!firmware_p)
556                 return ERR_PTR(-EINVAL);
557
558         *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
559         if (!firmware) {
560                 dev_err(device, "%s: kmalloc(struct firmware) failed\n",
561                         __func__);
562                 return ERR_PTR(-ENOMEM);
563         }
564
565         if (fw_get_builtin_firmware(firmware, name)) {
566                 dev_dbg(device, "firmware: using built-in firmware %s\n", name);
567                 return NULL;
568         }
569
570         if (fw_get_filesystem_firmware(firmware, name)) {
571                 dev_dbg(device, "firmware: direct-loading firmware %s\n", name);
572                 return NULL;
573         }
574
575         fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
576         if (IS_ERR(fw_priv)) {
577                 release_firmware(firmware);
578                 *firmware_p = NULL;
579         }
580         return fw_priv;
581 }
582
583 static void _request_firmware_cleanup(const struct firmware **firmware_p)
584 {
585         release_firmware(*firmware_p);
586         *firmware_p = NULL;
587 }
588
589 static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
590                                   long timeout)
591 {
592         int retval = 0;
593         struct device *f_dev = &fw_priv->dev;
594
595         dev_set_uevent_suppress(f_dev, true);
596
597         /* Need to pin this module until class device is destroyed */
598         __module_get(THIS_MODULE);
599
600         retval = device_add(f_dev);
601         if (retval) {
602                 dev_err(f_dev, "%s: device_register failed\n", __func__);
603                 goto err_put_dev;
604         }
605
606         retval = device_create_bin_file(f_dev, &firmware_attr_data);
607         if (retval) {
608                 dev_err(f_dev, "%s: sysfs_create_bin_file failed\n", __func__);
609                 goto err_del_dev;
610         }
611
612         retval = device_create_file(f_dev, &dev_attr_loading);
613         if (retval) {
614                 dev_err(f_dev, "%s: device_create_file failed\n", __func__);
615                 goto err_del_bin_attr;
616         }
617
618         if (uevent) {
619                 dev_set_uevent_suppress(f_dev, false);
620                 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
621                 if (timeout != MAX_SCHEDULE_TIMEOUT)
622                         mod_timer(&fw_priv->timeout,
623                                   round_jiffies_up(jiffies + timeout));
624
625                 kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
626         }
627
628         wait_for_completion(&fw_priv->completion);
629
630         set_bit(FW_STATUS_DONE, &fw_priv->status);
631         del_timer_sync(&fw_priv->timeout);
632
633         mutex_lock(&fw_lock);
634         if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status))
635                 retval = -ENOENT;
636         fw_priv->fw = NULL;
637         mutex_unlock(&fw_lock);
638
639         device_remove_file(f_dev, &dev_attr_loading);
640 err_del_bin_attr:
641         device_remove_bin_file(f_dev, &firmware_attr_data);
642 err_del_dev:
643         device_del(f_dev);
644 err_put_dev:
645         put_device(f_dev);
646         return retval;
647 }
648
649 /**
650  * request_firmware: - send firmware request and wait for it
651  * @firmware_p: pointer to firmware image
652  * @name: name of firmware file
653  * @device: device for which firmware is being loaded
654  *
655  *      @firmware_p will be used to return a firmware image by the name
656  *      of @name for device @device.
657  *
658  *      Should be called from user context where sleeping is allowed.
659  *
660  *      @name will be used as $FIRMWARE in the uevent environment and
661  *      should be distinctive enough not to be confused with any other
662  *      firmware image for this or any other device.
663  **/
664 int
665 request_firmware(const struct firmware **firmware_p, const char *name,
666                  struct device *device)
667 {
668         struct firmware_priv *fw_priv;
669         int ret;
670
671         fw_priv = _request_firmware_prepare(firmware_p, name, device, true,
672                                             false);
673         if (IS_ERR_OR_NULL(fw_priv))
674                 return PTR_RET(fw_priv);
675
676         ret = usermodehelper_read_trylock();
677         if (ret) {
678                 kfree(fw_priv);
679                 dev_err(device, "firmware: %s will not be loaded\n", name);
680         } else {
681                 ret = _request_firmware_load(fw_priv, true,
682                                         firmware_loading_timeout());
683                 usermodehelper_read_unlock();
684         }
685         if (ret)
686                 _request_firmware_cleanup(firmware_p);
687
688         return ret;
689 }
690
691 /**
692  * release_firmware: - release the resource associated with a firmware image
693  * @fw: firmware resource to release
694  **/
695 void release_firmware(const struct firmware *fw)
696 {
697         if (fw) {
698                 if (!fw_is_builtin_firmware(fw))
699                         firmware_free_data(fw);
700                 kfree(fw);
701         }
702 }
703
704 /* Async support */
705 struct firmware_work {
706         struct work_struct work;
707         struct module *module;
708         const char *name;
709         struct device *device;
710         void *context;
711         void (*cont)(const struct firmware *fw, void *context);
712         bool uevent;
713 };
714
715 static void request_firmware_work_func(struct work_struct *work)
716 {
717         struct firmware_work *fw_work;
718         const struct firmware *fw;
719         struct firmware_priv *fw_priv;
720         long timeout;
721         int ret;
722
723         fw_work = container_of(work, struct firmware_work, work);
724         fw_priv = _request_firmware_prepare(&fw, fw_work->name, fw_work->device,
725                         fw_work->uevent, true);
726         if (IS_ERR_OR_NULL(fw_priv)) {
727                 ret = PTR_RET(fw_priv);
728                 goto out;
729         }
730
731         timeout = usermodehelper_read_lock_wait(firmware_loading_timeout());
732         if (timeout) {
733                 ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
734                 usermodehelper_read_unlock();
735         } else {
736                 dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
737                         fw_work->name);
738                 ret = -EAGAIN;
739         }
740         if (ret)
741                 _request_firmware_cleanup(&fw);
742
743  out:
744         fw_work->cont(fw, fw_work->context);
745
746         module_put(fw_work->module);
747         kfree(fw_work);
748 }
749
750 /**
751  * request_firmware_nowait - asynchronous version of request_firmware
752  * @module: module requesting the firmware
753  * @uevent: sends uevent to copy the firmware image if this flag
754  *      is non-zero else the firmware copy must be done manually.
755  * @name: name of firmware file
756  * @device: device for which firmware is being loaded
757  * @gfp: allocation flags
758  * @context: will be passed over to @cont, and
759  *      @fw may be %NULL if firmware request fails.
760  * @cont: function will be called asynchronously when the firmware
761  *      request is over.
762  *
763  *      Asynchronous variant of request_firmware() for user contexts where
764  *      it is not possible to sleep for long time. It can't be called
765  *      in atomic contexts.
766  **/
767 int
768 request_firmware_nowait(
769         struct module *module, bool uevent,
770         const char *name, struct device *device, gfp_t gfp, void *context,
771         void (*cont)(const struct firmware *fw, void *context))
772 {
773         struct firmware_work *fw_work;
774
775         fw_work = kzalloc(sizeof (struct firmware_work), gfp);
776         if (!fw_work)
777                 return -ENOMEM;
778
779         fw_work->module = module;
780         fw_work->name = name;
781         fw_work->device = device;
782         fw_work->context = context;
783         fw_work->cont = cont;
784         fw_work->uevent = uevent;
785
786         if (!try_module_get(module)) {
787                 kfree(fw_work);
788                 return -EFAULT;
789         }
790
791         INIT_WORK(&fw_work->work, request_firmware_work_func);
792         schedule_work(&fw_work->work);
793         return 0;
794 }
795
796 static int __init firmware_class_init(void)
797 {
798         return class_register(&firmware_class);
799 }
800
801 static void __exit firmware_class_exit(void)
802 {
803         class_unregister(&firmware_class);
804 }
805
806 fs_initcall(firmware_class_init);
807 module_exit(firmware_class_exit);
808
809 EXPORT_SYMBOL(release_firmware);
810 EXPORT_SYMBOL(request_firmware);
811 EXPORT_SYMBOL(request_firmware_nowait);