driver core: add SPDX identifiers to all driver core files
[linux-2.6-block.git] / drivers / base / firmware_class.c
CommitLineData
989d42e8 1// SPDX-License-Identifier: GPL-2.0
1da177e4
LT
2/*
3 * firmware_class.c - Multi purpose firmware loading support
4 *
87d37a4f 5 * Copyright (c) 2003 Manuel Estrada Sainz
1da177e4
LT
6 *
7 * Please see Documentation/firmware_class/ for more information.
8 *
9 */
10
73da4b4b
LR
11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
c59ede7b 13#include <linux/capability.h>
1da177e4
LT
14#include <linux/device.h>
15#include <linux/module.h>
16#include <linux/init.h>
17#include <linux/timer.h>
18#include <linux/vmalloc.h>
19#include <linux/interrupt.h>
20#include <linux/bitops.h>
cad1e55d 21#include <linux/mutex.h>
a36cf844 22#include <linux/workqueue.h>
6e03a201 23#include <linux/highmem.h>
1da177e4 24#include <linux/firmware.h>
5a0e3ad6 25#include <linux/slab.h>
a36cf844 26#include <linux/sched.h>
abb139e7 27#include <linux/file.h>
1f2b7959 28#include <linux/list.h>
e40ba6d5 29#include <linux/fs.h>
37276a51
ML
30#include <linux/async.h>
31#include <linux/pm.h>
07646d9c 32#include <linux/suspend.h>
ac39b3ea 33#include <linux/syscore_ops.h>
fe304143 34#include <linux/reboot.h>
6593d924 35#include <linux/security.h>
37276a51 36
abb139e7
LT
37#include <generated/utsrelease.h>
38
37276a51 39#include "base.h"
1da177e4 40
87d37a4f 41MODULE_AUTHOR("Manuel Estrada Sainz");
1da177e4
LT
42MODULE_DESCRIPTION("Multi purpose firmware loading support");
43MODULE_LICENSE("GPL");
44
be8d462f
LR
45enum fw_status {
46 FW_STATUS_UNKNOWN,
47 FW_STATUS_LOADING,
48 FW_STATUS_DONE,
49 FW_STATUS_ABORTED,
50};
51
52/*
53 * Concurrent request_firmware() for the same firmware need to be
54 * serialized. struct fw_state is simple state machine which hold the
55 * state of the firmware loading.
56 */
57struct fw_state {
58 struct completion completion;
59 enum fw_status status;
60};
61
62/* firmware behavior options */
63#define FW_OPT_UEVENT (1U << 0)
64#define FW_OPT_NOWAIT (1U << 1)
be8d462f 65#define FW_OPT_USERHELPER (1U << 2)
be8d462f
LR
66#define FW_OPT_NO_WARN (1U << 3)
67#define FW_OPT_NOCACHE (1U << 4)
3f722712 68#define FW_OPT_NOFALLBACK (1U << 5)
be8d462f
LR
69
70struct firmware_cache {
71 /* firmware_buf instance will be added into the below list */
72 spinlock_t lock;
73 struct list_head head;
74 int state;
75
76#ifdef CONFIG_PM_SLEEP
77 /*
78 * Names of firmware images which have been cached successfully
79 * will be added into the below list so that device uncache
80 * helper can trace which firmware images have been cached
81 * before.
82 */
83 spinlock_t name_lock;
84 struct list_head fw_names;
85
86 struct delayed_work work;
87
88 struct notifier_block pm_notify;
89#endif
90};
91
92struct fw_priv {
93 struct kref ref;
94 struct list_head list;
95 struct firmware_cache *fwc;
96 struct fw_state fw_st;
97 void *data;
98 size_t size;
99 size_t allocated_size;
100#ifdef CONFIG_FW_LOADER_USER_HELPER
101 bool is_paged_buf;
102 bool need_uevent;
103 struct page **pages;
104 int nr_pages;
105 int page_array_size;
106 struct list_head pending_list;
107#endif
108 const char *fw_name;
109};
110
111struct fw_cache_entry {
112 struct list_head list;
113 const char *name;
114};
115
116struct fw_name_devm {
117 unsigned long magic;
118 const char *name;
119};
120
942e743b
LR
121static inline struct fw_priv *to_fw_priv(struct kref *ref)
122{
123 return container_of(ref, struct fw_priv, ref);
124}
be8d462f
LR
125
126#define FW_LOADER_NO_CACHE 0
127#define FW_LOADER_START_CACHE 1
128
129/* fw_lock could be moved to 'struct fw_sysfs' but since it is just
130 * guarding for corner cases a global lock should be OK */
131static DEFINE_MUTEX(fw_lock);
132
133static struct firmware_cache fw_cache;
134
bcb9bd18
DT
135/* Builtin firmware support */
136
137#ifdef CONFIG_FW_LOADER
138
139extern struct builtin_fw __start_builtin_fw[];
140extern struct builtin_fw __end_builtin_fw[];
141
5711ae6d
LR
142static void fw_copy_to_prealloc_buf(struct firmware *fw,
143 void *buf, size_t size)
144{
145 if (!buf || size < fw->size)
146 return;
147 memcpy(buf, fw->data, fw->size);
148}
149
a098ecd2
SB
150static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
151 void *buf, size_t size)
bcb9bd18
DT
152{
153 struct builtin_fw *b_fw;
154
155 for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) {
156 if (strcmp(name, b_fw->name) == 0) {
157 fw->size = b_fw->size;
158 fw->data = b_fw->data;
5711ae6d 159 fw_copy_to_prealloc_buf(fw, buf, size);
a098ecd2 160
bcb9bd18
DT
161 return true;
162 }
163 }
164
165 return false;
166}
167
168static bool fw_is_builtin_firmware(const struct firmware *fw)
169{
170 struct builtin_fw *b_fw;
171
172 for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++)
173 if (fw->data == b_fw->data)
174 return true;
175
176 return false;
177}
178
179#else /* Module case - no builtin firmware support */
180
a098ecd2
SB
181static inline bool fw_get_builtin_firmware(struct firmware *fw,
182 const char *name, void *buf,
183 size_t size)
bcb9bd18
DT
184{
185 return false;
186}
187
188static inline bool fw_is_builtin_firmware(const struct firmware *fw)
189{
190 return false;
191}
192#endif
193
2f65168d 194static int loading_timeout = 60; /* In seconds */
1da177e4 195
9b78c1da
RW
196static inline long firmware_loading_timeout(void)
197{
68ff2a00 198 return loading_timeout > 0 ? loading_timeout * HZ : MAX_JIFFY_OFFSET;
9b78c1da
RW
199}
200
f1b9cf39 201static void fw_state_init(struct fw_priv *fw_priv)
f52cc379 202{
f1b9cf39
LR
203 struct fw_state *fw_st = &fw_priv->fw_st;
204
e44565f6 205 init_completion(&fw_st->completion);
f52cc379
DW
206 fw_st->status = FW_STATUS_UNKNOWN;
207}
208
f1b9cf39 209static int __fw_state_wait_common(struct fw_priv *fw_priv, long timeout)
f52cc379 210{
f1b9cf39 211 struct fw_state *fw_st = &fw_priv->fw_st;
f52cc379
DW
212 long ret;
213
260d9f2f 214 ret = wait_for_completion_killable_timeout(&fw_st->completion, timeout);
5b029624 215 if (ret != 0 && fw_st->status == FW_STATUS_ABORTED)
f52cc379 216 return -ENOENT;
5d47ec02
BA
217 if (!ret)
218 return -ETIMEDOUT;
f52cc379 219
5d47ec02 220 return ret < 0 ? ret : 0;
f52cc379
DW
221}
222
f1b9cf39 223static void __fw_state_set(struct fw_priv *fw_priv,
f52cc379
DW
224 enum fw_status status)
225{
f1b9cf39
LR
226 struct fw_state *fw_st = &fw_priv->fw_st;
227
0430cafc 228 WRITE_ONCE(fw_st->status, status);
f52cc379 229
0430cafc 230 if (status == FW_STATUS_DONE || status == FW_STATUS_ABORTED)
e44565f6 231 complete_all(&fw_st->completion);
f52cc379
DW
232}
233
f1b9cf39
LR
234static inline void fw_state_start(struct fw_priv *fw_priv)
235{
236 __fw_state_set(fw_priv, FW_STATUS_LOADING);
237}
238
239static inline void fw_state_done(struct fw_priv *fw_priv)
240{
241 __fw_state_set(fw_priv, FW_STATUS_DONE);
242}
243
244static inline void fw_state_aborted(struct fw_priv *fw_priv)
245{
246 __fw_state_set(fw_priv, FW_STATUS_ABORTED);
247}
248
249static inline int fw_state_wait(struct fw_priv *fw_priv)
250{
251 return __fw_state_wait_common(fw_priv, MAX_SCHEDULE_TIMEOUT);
252}
f52cc379 253
f1b9cf39
LR
254static bool __fw_state_check(struct fw_priv *fw_priv,
255 enum fw_status status)
fab82cb3 256{
f1b9cf39
LR
257 struct fw_state *fw_st = &fw_priv->fw_st;
258
fab82cb3
DW
259 return fw_st->status == status;
260}
261
f1b9cf39
LR
262static inline bool fw_state_is_aborted(struct fw_priv *fw_priv)
263{
264 return __fw_state_check(fw_priv, FW_STATUS_ABORTED);
265}
90d41e74
LR
266
267#ifdef CONFIG_FW_LOADER_USER_HELPER
268
33a5b18d 269static inline bool fw_sysfs_done(struct fw_priv *fw_priv)
f1b9cf39
LR
270{
271 return __fw_state_check(fw_priv, FW_STATUS_DONE);
272}
273
33a5b18d 274static inline bool fw_sysfs_loading(struct fw_priv *fw_priv)
f1b9cf39
LR
275{
276 return __fw_state_check(fw_priv, FW_STATUS_LOADING);
277}
278
33a5b18d 279static inline int fw_sysfs_wait_timeout(struct fw_priv *fw_priv, long timeout)
f1b9cf39
LR
280{
281 return __fw_state_wait_common(fw_priv, timeout);
282}
f52cc379
DW
283
284#endif /* CONFIG_FW_LOADER_USER_HELPER */
285
ac39b3ea
ML
286static int fw_cache_piggyback_on_request(const char *name);
287
cd5322b7
LR
288static struct fw_priv *__allocate_fw_priv(const char *fw_name,
289 struct firmware_cache *fwc,
290 void *dbuf, size_t size)
1f2b7959 291{
cd5322b7 292 struct fw_priv *fw_priv;
1f2b7959 293
cd5322b7
LR
294 fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
295 if (!fw_priv)
e0fd9b1d
LR
296 return NULL;
297
31034f22
LR
298 fw_priv->fw_name = kstrdup_const(fw_name, GFP_ATOMIC);
299 if (!fw_priv->fw_name) {
cd5322b7 300 kfree(fw_priv);
e0fd9b1d
LR
301 return NULL;
302 }
1f2b7959 303
cd5322b7
LR
304 kref_init(&fw_priv->ref);
305 fw_priv->fwc = fwc;
306 fw_priv->data = dbuf;
307 fw_priv->allocated_size = size;
f1b9cf39 308 fw_state_init(fw_priv);
fe304143 309#ifdef CONFIG_FW_LOADER_USER_HELPER
cd5322b7 310 INIT_LIST_HEAD(&fw_priv->pending_list);
fe304143 311#endif
1f2b7959 312
cd5322b7 313 pr_debug("%s: fw-%s fw_priv=%p\n", __func__, fw_name, fw_priv);
1f2b7959 314
cd5322b7 315 return fw_priv;
1f2b7959
ML
316}
317
cd5322b7 318static struct fw_priv *__lookup_fw_priv(const char *fw_name)
2887b395 319{
cd5322b7 320 struct fw_priv *tmp;
2887b395
ML
321 struct firmware_cache *fwc = &fw_cache;
322
323 list_for_each_entry(tmp, &fwc->head, list)
31034f22 324 if (!strcmp(tmp->fw_name, fw_name))
2887b395
ML
325 return tmp;
326 return NULL;
327}
328
30172bea 329/* Returns 1 for batching firmware requests with the same name */
cd5322b7
LR
330static int alloc_lookup_fw_priv(const char *fw_name,
331 struct firmware_cache *fwc,
332 struct fw_priv **fw_priv, void *dbuf,
333 size_t size)
1f2b7959 334{
cd5322b7 335 struct fw_priv *tmp;
1f2b7959
ML
336
337 spin_lock(&fwc->lock);
cd5322b7 338 tmp = __lookup_fw_priv(fw_name);
2887b395
ML
339 if (tmp) {
340 kref_get(&tmp->ref);
341 spin_unlock(&fwc->lock);
cd5322b7
LR
342 *fw_priv = tmp;
343 pr_debug("batched request - sharing the same struct fw_priv and lookup for multiple requests\n");
2887b395
ML
344 return 1;
345 }
cd5322b7 346 tmp = __allocate_fw_priv(fw_name, fwc, dbuf, size);
1f2b7959
ML
347 if (tmp)
348 list_add(&tmp->list, &fwc->head);
349 spin_unlock(&fwc->lock);
350
cd5322b7 351 *fw_priv = tmp;
1f2b7959
ML
352
353 return tmp ? 0 : -ENOMEM;
354}
355
cd5322b7 356static void __free_fw_priv(struct kref *ref)
98233b21 357 __releases(&fwc->lock)
1f2b7959 358{
cd5322b7
LR
359 struct fw_priv *fw_priv = to_fw_priv(ref);
360 struct firmware_cache *fwc = fw_priv->fwc;
1f2b7959 361
cd5322b7 362 pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
31034f22 363 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
cd5322b7 364 (unsigned int)fw_priv->size);
1f2b7959 365
cd5322b7 366 list_del(&fw_priv->list);
1f2b7959
ML
367 spin_unlock(&fwc->lock);
368
7b1269f7 369#ifdef CONFIG_FW_LOADER_USER_HELPER
cd5322b7 370 if (fw_priv->is_paged_buf) {
7b1269f7 371 int i;
cd5322b7
LR
372 vunmap(fw_priv->data);
373 for (i = 0; i < fw_priv->nr_pages; i++)
374 __free_page(fw_priv->pages[i]);
375 vfree(fw_priv->pages);
746058f4 376 } else
7b1269f7 377#endif
cd5322b7
LR
378 if (!fw_priv->allocated_size)
379 vfree(fw_priv->data);
31034f22 380 kfree_const(fw_priv->fw_name);
cd5322b7 381 kfree(fw_priv);
1f2b7959
ML
382}
383
cd5322b7 384static void free_fw_priv(struct fw_priv *fw_priv)
1f2b7959 385{
cd5322b7 386 struct firmware_cache *fwc = fw_priv->fwc;
bd9eb7fb 387 spin_lock(&fwc->lock);
cd5322b7 388 if (!kref_put(&fw_priv->ref, __free_fw_priv))
bd9eb7fb 389 spin_unlock(&fwc->lock);
1f2b7959
ML
390}
391
746058f4 392/* direct firmware loading support */
27602842
ML
393static char fw_path_para[256];
394static const char * const fw_path[] = {
395 fw_path_para,
746058f4
ML
396 "/lib/firmware/updates/" UTS_RELEASE,
397 "/lib/firmware/updates",
398 "/lib/firmware/" UTS_RELEASE,
399 "/lib/firmware"
400};
401
27602842
ML
402/*
403 * Typical usage is that passing 'firmware_class.path=$CUSTOMIZED_PATH'
404 * from kernel command line because firmware_class is generally built in
405 * kernel instead of module.
406 */
407module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
408MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
409
a098ecd2 410static int
cd5322b7 411fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv)
746058f4 412{
e40ba6d5 413 loff_t size;
1ba4de17 414 int i, len;
3e358ac2 415 int rc = -ENOENT;
f5727b05 416 char *path;
a098ecd2
SB
417 enum kernel_read_file_id id = READING_FIRMWARE;
418 size_t msize = INT_MAX;
419
420 /* Already populated data member means we're loading into a buffer */
cd5322b7 421 if (fw_priv->data) {
a098ecd2 422 id = READING_FIRMWARE_PREALLOC_BUFFER;
cd5322b7 423 msize = fw_priv->allocated_size;
a098ecd2 424 }
f5727b05
LR
425
426 path = __getname();
427 if (!path)
428 return -ENOMEM;
746058f4
ML
429
430 for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
27602842
ML
431 /* skip the unset customized path */
432 if (!fw_path[i][0])
433 continue;
434
1ba4de17 435 len = snprintf(path, PATH_MAX, "%s/%s",
31034f22 436 fw_path[i], fw_priv->fw_name);
1ba4de17
LR
437 if (len >= PATH_MAX) {
438 rc = -ENAMETOOLONG;
439 break;
440 }
746058f4 441
cd5322b7
LR
442 fw_priv->size = 0;
443 rc = kernel_read_file_from_path(path, &fw_priv->data, &size,
444 msize, id);
4b2530d8 445 if (rc) {
8e516aa5
LR
446 if (rc == -ENOENT)
447 dev_dbg(device, "loading %s failed with error %d\n",
448 path, rc);
449 else
450 dev_warn(device, "loading %s failed with error %d\n",
451 path, rc);
4b2530d8
KC
452 continue;
453 }
31034f22 454 dev_dbg(device, "direct-loading %s\n", fw_priv->fw_name);
cd5322b7 455 fw_priv->size = size;
f1b9cf39 456 fw_state_done(fw_priv);
4b2530d8 457 break;
4e0c92d0 458 }
4b2530d8 459 __putname(path);
4e0c92d0 460
3e358ac2 461 return rc;
746058f4
ML
462}
463
7b1269f7
TI
464/* firmware holds the ownership of pages */
465static void firmware_free_data(const struct firmware *fw)
466{
467 /* Loaded directly? */
468 if (!fw->priv) {
469 vfree(fw->data);
470 return;
471 }
cd5322b7 472 free_fw_priv(fw->priv);
7b1269f7
TI
473}
474
cd7239fa 475/* store the pages buffer info firmware from buf */
cd5322b7 476static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
cd7239fa 477{
cd5322b7 478 fw->priv = fw_priv;
cd7239fa 479#ifdef CONFIG_FW_LOADER_USER_HELPER
cd5322b7 480 fw->pages = fw_priv->pages;
cd7239fa 481#endif
cd5322b7
LR
482 fw->size = fw_priv->size;
483 fw->data = fw_priv->data;
cd7239fa 484
cd5322b7 485 pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
31034f22 486 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
cd5322b7 487 (unsigned int)fw_priv->size);
cd7239fa
TI
488}
489
490#ifdef CONFIG_PM_SLEEP
491static void fw_name_devm_release(struct device *dev, void *res)
492{
493 struct fw_name_devm *fwn = res;
494
495 if (fwn->magic == (unsigned long)&fw_cache)
496 pr_debug("%s: fw_name-%s devm-%p released\n",
497 __func__, fwn->name, res);
e0fd9b1d 498 kfree_const(fwn->name);
cd7239fa
TI
499}
500
501static int fw_devm_match(struct device *dev, void *res,
502 void *match_data)
503{
504 struct fw_name_devm *fwn = res;
505
506 return (fwn->magic == (unsigned long)&fw_cache) &&
507 !strcmp(fwn->name, match_data);
508}
509
510static struct fw_name_devm *fw_find_devm_name(struct device *dev,
511 const char *name)
512{
513 struct fw_name_devm *fwn;
514
515 fwn = devres_find(dev, fw_name_devm_release,
516 fw_devm_match, (void *)name);
517 return fwn;
518}
519
520/* add firmware name into devres list */
521static int fw_add_devm_name(struct device *dev, const char *name)
522{
523 struct fw_name_devm *fwn;
524
525 fwn = fw_find_devm_name(dev, name);
526 if (fwn)
527 return 1;
528
e0fd9b1d
LR
529 fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm),
530 GFP_KERNEL);
cd7239fa
TI
531 if (!fwn)
532 return -ENOMEM;
e0fd9b1d
LR
533 fwn->name = kstrdup_const(name, GFP_KERNEL);
534 if (!fwn->name) {
a885de67 535 devres_free(fwn);
e0fd9b1d
LR
536 return -ENOMEM;
537 }
cd7239fa
TI
538
539 fwn->magic = (unsigned long)&fw_cache;
cd7239fa
TI
540 devres_add(dev, fwn);
541
542 return 0;
543}
544#else
545static int fw_add_devm_name(struct device *dev, const char *name)
546{
547 return 0;
548}
549#endif
550
cd5322b7
LR
551static int assign_fw(struct firmware *fw, struct device *device,
552 unsigned int opt_flags)
8509adca 553{
cd5322b7 554 struct fw_priv *fw_priv = fw->priv;
8509adca
LR
555
556 mutex_lock(&fw_lock);
f1b9cf39 557 if (!fw_priv->size || fw_state_is_aborted(fw_priv)) {
8509adca
LR
558 mutex_unlock(&fw_lock);
559 return -ENOENT;
560 }
561
562 /*
563 * add firmware name into devres list so that we can auto cache
564 * and uncache firmware for device.
565 *
566 * device may has been deleted already, but the problem
567 * should be fixed in devres or driver core.
568 */
569 /* don't cache firmware handled without uevent */
570 if (device && (opt_flags & FW_OPT_UEVENT) &&
571 !(opt_flags & FW_OPT_NOCACHE))
31034f22 572 fw_add_devm_name(device, fw_priv->fw_name);
8509adca
LR
573
574 /*
575 * After caching firmware image is started, let it piggyback
576 * on request firmware.
577 */
578 if (!(opt_flags & FW_OPT_NOCACHE) &&
cd5322b7 579 fw_priv->fwc->state == FW_LOADER_START_CACHE) {
31034f22 580 if (fw_cache_piggyback_on_request(fw_priv->fw_name))
cd5322b7 581 kref_get(&fw_priv->ref);
8509adca
LR
582 }
583
584 /* pass the pages buffer to driver at the last minute */
cd5322b7 585 fw_set_page_data(fw_priv, fw);
8509adca
LR
586 mutex_unlock(&fw_lock);
587 return 0;
588}
cd7239fa
TI
589
590/*
591 * user-mode helper code
592 */
7b1269f7 593#ifdef CONFIG_FW_LOADER_USER_HELPER
aa6969c9 594struct fw_sysfs {
cd7239fa
TI
595 bool nowait;
596 struct device dev;
cd5322b7 597 struct fw_priv *fw_priv;
cd7239fa
TI
598 struct firmware *fw;
599};
7b1269f7 600
aa6969c9 601static struct fw_sysfs *to_fw_sysfs(struct device *dev)
f8a4bd34 602{
aa6969c9 603 return container_of(dev, struct fw_sysfs, dev);
f8a4bd34
DT
604}
605
cd5322b7 606static void __fw_load_abort(struct fw_priv *fw_priv)
1da177e4 607{
87597936
ML
608 /*
609 * There is a small window in which user can write to 'loading'
610 * between loading done and disappearance of 'loading'
611 */
33a5b18d 612 if (fw_sysfs_done(fw_priv))
87597936
ML
613 return;
614
cd5322b7 615 list_del_init(&fw_priv->pending_list);
f1b9cf39 616 fw_state_aborted(fw_priv);
1da177e4
LT
617}
618
aa6969c9 619static void fw_load_abort(struct fw_sysfs *fw_sysfs)
7068cb07 620{
cd5322b7 621 struct fw_priv *fw_priv = fw_sysfs->fw_priv;
7068cb07 622
cd5322b7 623 __fw_load_abort(fw_priv);
1da177e4
LT
624}
625
fe304143
TI
626static LIST_HEAD(pending_fw_head);
627
c4b76893 628static void kill_pending_fw_fallback_reqs(bool only_kill_custom)
6383331d 629{
cd5322b7
LR
630 struct fw_priv *fw_priv;
631 struct fw_priv *next;
6383331d
LR
632
633 mutex_lock(&fw_lock);
cd5322b7
LR
634 list_for_each_entry_safe(fw_priv, next, &pending_fw_head,
635 pending_list) {
636 if (!fw_priv->need_uevent || !only_kill_custom)
637 __fw_load_abort(fw_priv);
6383331d
LR
638 }
639 mutex_unlock(&fw_lock);
640}
6383331d 641
14adbe53
GKH
642static ssize_t timeout_show(struct class *class, struct class_attribute *attr,
643 char *buf)
1da177e4
LT
644{
645 return sprintf(buf, "%d\n", loading_timeout);
646}
647
648/**
eb8e3179
RD
649 * firmware_timeout_store - set number of seconds to wait for firmware
650 * @class: device class pointer
e59817bf 651 * @attr: device attribute pointer
eb8e3179
RD
652 * @buf: buffer to scan for timeout value
653 * @count: number of bytes in @buf
654 *
1da177e4 655 * Sets the number of seconds to wait for the firmware. Once
eb8e3179 656 * this expires an error will be returned to the driver and no
1da177e4
LT
657 * firmware will be provided.
658 *
eb8e3179 659 * Note: zero means 'wait forever'.
1da177e4 660 **/
14adbe53
GKH
661static ssize_t timeout_store(struct class *class, struct class_attribute *attr,
662 const char *buf, size_t count)
1da177e4
LT
663{
664 loading_timeout = simple_strtol(buf, NULL, 10);
b92eac01
SG
665 if (loading_timeout < 0)
666 loading_timeout = 0;
f8a4bd34 667
1da177e4
LT
668 return count;
669}
3f214cff 670static CLASS_ATTR_RW(timeout);
1da177e4 671
3f214cff
GKH
672static struct attribute *firmware_class_attrs[] = {
673 &class_attr_timeout.attr,
674 NULL,
673fae90 675};
3f214cff 676ATTRIBUTE_GROUPS(firmware_class);
1da177e4 677
1244691c
ML
678static void fw_dev_release(struct device *dev)
679{
aa6969c9 680 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
65710cb6 681
aa6969c9 682 kfree(fw_sysfs);
673fae90 683}
1da177e4 684
aa6969c9 685static int do_firmware_uevent(struct fw_sysfs *fw_sysfs, struct kobj_uevent_env *env)
1da177e4 686{
31034f22 687 if (add_uevent_var(env, "FIRMWARE=%s", fw_sysfs->fw_priv->fw_name))
1da177e4 688 return -ENOMEM;
7eff2e7a 689 if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
6897089c 690 return -ENOMEM;
aa6969c9 691 if (add_uevent_var(env, "ASYNC=%d", fw_sysfs->nowait))
e9045f91 692 return -ENOMEM;
1da177e4
LT
693
694 return 0;
695}
696
6f957724
LT
697static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
698{
aa6969c9 699 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
6f957724
LT
700 int err = 0;
701
702 mutex_lock(&fw_lock);
cd5322b7 703 if (fw_sysfs->fw_priv)
aa6969c9 704 err = do_firmware_uevent(fw_sysfs, env);
6f957724
LT
705 mutex_unlock(&fw_lock);
706 return err;
707}
708
1b81d663
AB
709static struct class firmware_class = {
710 .name = "firmware",
3f214cff 711 .class_groups = firmware_class_groups,
e55c8790
GKH
712 .dev_uevent = firmware_uevent,
713 .dev_release = fw_dev_release,
1b81d663
AB
714};
715
6bb9cf3a
LR
716static inline int register_sysfs_loader(void)
717{
718 return class_register(&firmware_class);
719}
720
721static inline void unregister_sysfs_loader(void)
722{
723 class_unregister(&firmware_class);
724}
725
e55c8790
GKH
726static ssize_t firmware_loading_show(struct device *dev,
727 struct device_attribute *attr, char *buf)
1da177e4 728{
aa6969c9 729 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
87597936
ML
730 int loading = 0;
731
732 mutex_lock(&fw_lock);
cd5322b7 733 if (fw_sysfs->fw_priv)
33a5b18d 734 loading = fw_sysfs_loading(fw_sysfs->fw_priv);
87597936 735 mutex_unlock(&fw_lock);
f8a4bd34 736
1da177e4
LT
737 return sprintf(buf, "%d\n", loading);
738}
739
6e03a201
DW
740/* Some architectures don't have PAGE_KERNEL_RO */
741#ifndef PAGE_KERNEL_RO
742#define PAGE_KERNEL_RO PAGE_KERNEL
743#endif
253c9240
ML
744
745/* one pages buffer should be mapped/unmapped only once */
cd5322b7 746static int map_fw_priv_pages(struct fw_priv *fw_priv)
253c9240 747{
cd5322b7 748 if (!fw_priv->is_paged_buf)
746058f4
ML
749 return 0;
750
cd5322b7
LR
751 vunmap(fw_priv->data);
752 fw_priv->data = vmap(fw_priv->pages, fw_priv->nr_pages, 0,
753 PAGE_KERNEL_RO);
754 if (!fw_priv->data)
253c9240
ML
755 return -ENOMEM;
756 return 0;
757}
758
1da177e4 759/**
eb8e3179 760 * firmware_loading_store - set value in the 'loading' control file
e55c8790 761 * @dev: device pointer
af9997e4 762 * @attr: device attribute pointer
eb8e3179
RD
763 * @buf: buffer to scan for loading control value
764 * @count: number of bytes in @buf
765 *
1da177e4
LT
766 * The relevant values are:
767 *
768 * 1: Start a load, discarding any previous partial load.
eb8e3179 769 * 0: Conclude the load and hand the data to the driver code.
1da177e4
LT
770 * -1: Conclude the load with an error and discard any written data.
771 **/
e55c8790
GKH
772static ssize_t firmware_loading_store(struct device *dev,
773 struct device_attribute *attr,
774 const char *buf, size_t count)
1da177e4 775{
aa6969c9 776 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
cd5322b7 777 struct fw_priv *fw_priv;
6593d924 778 ssize_t written = count;
1da177e4 779 int loading = simple_strtol(buf, NULL, 10);
6e03a201 780 int i;
1da177e4 781
eea915bb 782 mutex_lock(&fw_lock);
cd5322b7 783 fw_priv = fw_sysfs->fw_priv;
f1b9cf39 784 if (fw_state_is_aborted(fw_priv))
eea915bb
NH
785 goto out;
786
1da177e4
LT
787 switch (loading) {
788 case 1:
65710cb6 789 /* discarding any previous partial load */
33a5b18d 790 if (!fw_sysfs_done(fw_priv)) {
cd5322b7
LR
791 for (i = 0; i < fw_priv->nr_pages; i++)
792 __free_page(fw_priv->pages[i]);
793 vfree(fw_priv->pages);
794 fw_priv->pages = NULL;
795 fw_priv->page_array_size = 0;
796 fw_priv->nr_pages = 0;
f1b9cf39 797 fw_state_start(fw_priv);
28eefa75 798 }
1da177e4
LT
799 break;
800 case 0:
33a5b18d 801 if (fw_sysfs_loading(fw_priv)) {
6593d924
KC
802 int rc;
803
253c9240
ML
804 /*
805 * Several loading requests may be pending on
806 * one same firmware buf, so let all requests
807 * see the mapped 'buf->data' once the loading
808 * is completed.
809 * */
cd5322b7 810 rc = map_fw_priv_pages(fw_priv);
6593d924 811 if (rc)
2b1278cb 812 dev_err(dev, "%s: map pages failed\n",
813 __func__);
6593d924 814 else
e40ba6d5 815 rc = security_kernel_post_read_file(NULL,
cd5322b7 816 fw_priv->data, fw_priv->size,
e40ba6d5 817 READING_FIRMWARE);
6593d924
KC
818
819 /*
820 * Same logic as fw_load_abort, only the DONE bit
821 * is ignored and we set ABORT only on failure.
822 */
cd5322b7 823 list_del_init(&fw_priv->pending_list);
6593d924 824 if (rc) {
f1b9cf39 825 fw_state_aborted(fw_priv);
6593d924 826 written = rc;
f52cc379 827 } else {
f1b9cf39 828 fw_state_done(fw_priv);
6593d924 829 }
1da177e4
LT
830 break;
831 }
832 /* fallthrough */
833 default:
266a813c 834 dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading);
1da177e4
LT
835 /* fallthrough */
836 case -1:
aa6969c9 837 fw_load_abort(fw_sysfs);
1da177e4
LT
838 break;
839 }
eea915bb
NH
840out:
841 mutex_unlock(&fw_lock);
6593d924 842 return written;
1da177e4
LT
843}
844
e55c8790 845static DEVICE_ATTR(loading, 0644, firmware_loading_show, firmware_loading_store);
1da177e4 846
cd5322b7 847static void firmware_rw_data(struct fw_priv *fw_priv, char *buffer,
a098ecd2
SB
848 loff_t offset, size_t count, bool read)
849{
850 if (read)
cd5322b7 851 memcpy(buffer, fw_priv->data + offset, count);
a098ecd2 852 else
cd5322b7 853 memcpy(fw_priv->data + offset, buffer, count);
a098ecd2
SB
854}
855
cd5322b7 856static void firmware_rw(struct fw_priv *fw_priv, char *buffer,
9ccf9811
SB
857 loff_t offset, size_t count, bool read)
858{
859 while (count) {
860 void *page_data;
861 int page_nr = offset >> PAGE_SHIFT;
862 int page_ofs = offset & (PAGE_SIZE-1);
863 int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);
864
cd5322b7 865 page_data = kmap(fw_priv->pages[page_nr]);
9ccf9811
SB
866
867 if (read)
868 memcpy(buffer, page_data + page_ofs, page_cnt);
869 else
870 memcpy(page_data + page_ofs, buffer, page_cnt);
871
cd5322b7 872 kunmap(fw_priv->pages[page_nr]);
9ccf9811
SB
873 buffer += page_cnt;
874 offset += page_cnt;
875 count -= page_cnt;
876 }
877}
878
f8a4bd34
DT
879static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj,
880 struct bin_attribute *bin_attr,
881 char *buffer, loff_t offset, size_t count)
1da177e4 882{
b0d1f807 883 struct device *dev = kobj_to_dev(kobj);
aa6969c9 884 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
cd5322b7 885 struct fw_priv *fw_priv;
f37e6617 886 ssize_t ret_count;
1da177e4 887
cad1e55d 888 mutex_lock(&fw_lock);
cd5322b7 889 fw_priv = fw_sysfs->fw_priv;
33a5b18d 890 if (!fw_priv || fw_sysfs_done(fw_priv)) {
1da177e4
LT
891 ret_count = -ENODEV;
892 goto out;
893 }
cd5322b7 894 if (offset > fw_priv->size) {
308975fa
JS
895 ret_count = 0;
896 goto out;
897 }
cd5322b7
LR
898 if (count > fw_priv->size - offset)
899 count = fw_priv->size - offset;
6e03a201
DW
900
901 ret_count = count;
902
cd5322b7
LR
903 if (fw_priv->data)
904 firmware_rw_data(fw_priv, buffer, offset, count, true);
a098ecd2 905 else
cd5322b7 906 firmware_rw(fw_priv, buffer, offset, count, true);
6e03a201 907
1da177e4 908out:
cad1e55d 909 mutex_unlock(&fw_lock);
1da177e4
LT
910 return ret_count;
911}
eb8e3179 912
cd5322b7 913static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size)
1da177e4 914{
cd5322b7 915 struct fw_priv *fw_priv= fw_sysfs->fw_priv;
a76040d8 916 int pages_needed = PAGE_ALIGN(min_size) >> PAGE_SHIFT;
6e03a201
DW
917
918 /* If the array of pages is too small, grow it... */
cd5322b7 919 if (fw_priv->page_array_size < pages_needed) {
6e03a201 920 int new_array_size = max(pages_needed,
cd5322b7 921 fw_priv->page_array_size * 2);
6e03a201
DW
922 struct page **new_pages;
923
10a3fbf1 924 new_pages = vmalloc(new_array_size * sizeof(void *));
6e03a201 925 if (!new_pages) {
aa6969c9 926 fw_load_abort(fw_sysfs);
6e03a201
DW
927 return -ENOMEM;
928 }
cd5322b7
LR
929 memcpy(new_pages, fw_priv->pages,
930 fw_priv->page_array_size * sizeof(void *));
931 memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
932 (new_array_size - fw_priv->page_array_size));
933 vfree(fw_priv->pages);
934 fw_priv->pages = new_pages;
935 fw_priv->page_array_size = new_array_size;
6e03a201 936 }
1da177e4 937
cd5322b7
LR
938 while (fw_priv->nr_pages < pages_needed) {
939 fw_priv->pages[fw_priv->nr_pages] =
6e03a201 940 alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
1da177e4 941
cd5322b7 942 if (!fw_priv->pages[fw_priv->nr_pages]) {
aa6969c9 943 fw_load_abort(fw_sysfs);
6e03a201
DW
944 return -ENOMEM;
945 }
cd5322b7 946 fw_priv->nr_pages++;
1da177e4 947 }
1da177e4
LT
948 return 0;
949}
950
951/**
eb8e3179 952 * firmware_data_write - write method for firmware
2c3c8bea 953 * @filp: open sysfs file
e55c8790 954 * @kobj: kobject for the device
42e61f4a 955 * @bin_attr: bin_attr structure
eb8e3179
RD
956 * @buffer: buffer being written
957 * @offset: buffer offset for write in total data store area
958 * @count: buffer size
1da177e4 959 *
eb8e3179 960 * Data written to the 'data' attribute will be later handed to
1da177e4
LT
961 * the driver as a firmware image.
962 **/
f8a4bd34
DT
963static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj,
964 struct bin_attribute *bin_attr,
965 char *buffer, loff_t offset, size_t count)
1da177e4 966{
b0d1f807 967 struct device *dev = kobj_to_dev(kobj);
aa6969c9 968 struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
cd5322b7 969 struct fw_priv *fw_priv;
1da177e4
LT
970 ssize_t retval;
971
972 if (!capable(CAP_SYS_RAWIO))
973 return -EPERM;
b92eac01 974
cad1e55d 975 mutex_lock(&fw_lock);
cd5322b7 976 fw_priv = fw_sysfs->fw_priv;
33a5b18d 977 if (!fw_priv || fw_sysfs_done(fw_priv)) {
1da177e4
LT
978 retval = -ENODEV;
979 goto out;
980 }
65710cb6 981
cd5322b7
LR
982 if (fw_priv->data) {
983 if (offset + count > fw_priv->allocated_size) {
a098ecd2
SB
984 retval = -ENOMEM;
985 goto out;
986 }
cd5322b7 987 firmware_rw_data(fw_priv, buffer, offset, count, false);
a098ecd2
SB
988 retval = count;
989 } else {
cd5322b7 990 retval = fw_realloc_pages(fw_sysfs, offset + count);
a098ecd2
SB
991 if (retval)
992 goto out;
1da177e4 993
a098ecd2 994 retval = count;
cd5322b7 995 firmware_rw(fw_priv, buffer, offset, count, false);
a098ecd2 996 }
6e03a201 997
cd5322b7 998 fw_priv->size = max_t(size_t, offset + count, fw_priv->size);
1da177e4 999out:
cad1e55d 1000 mutex_unlock(&fw_lock);
1da177e4
LT
1001 return retval;
1002}
eb8e3179 1003
0983ca2d
DT
1004static struct bin_attribute firmware_attr_data = {
1005 .attr = { .name = "data", .mode = 0644 },
1da177e4
LT
1006 .size = 0,
1007 .read = firmware_data_read,
1008 .write = firmware_data_write,
1009};
1010
46239902
TI
1011static struct attribute *fw_dev_attrs[] = {
1012 &dev_attr_loading.attr,
1013 NULL
1014};
1015
1016static struct bin_attribute *fw_dev_bin_attrs[] = {
1017 &firmware_attr_data,
1018 NULL
1019};
1020
1021static const struct attribute_group fw_dev_attr_group = {
1022 .attrs = fw_dev_attrs,
1023 .bin_attrs = fw_dev_bin_attrs,
1024};
1025
1026static const struct attribute_group *fw_dev_attr_groups[] = {
1027 &fw_dev_attr_group,
1028 NULL
1029};
1030
aa6969c9 1031static struct fw_sysfs *
dddb5549 1032fw_create_instance(struct firmware *firmware, const char *fw_name,
14c4bae7 1033 struct device *device, unsigned int opt_flags)
1da177e4 1034{
aa6969c9 1035 struct fw_sysfs *fw_sysfs;
f8a4bd34 1036 struct device *f_dev;
1da177e4 1037
aa6969c9
LR
1038 fw_sysfs = kzalloc(sizeof(*fw_sysfs), GFP_KERNEL);
1039 if (!fw_sysfs) {
1040 fw_sysfs = ERR_PTR(-ENOMEM);
1244691c
ML
1041 goto exit;
1042 }
1043
aa6969c9
LR
1044 fw_sysfs->nowait = !!(opt_flags & FW_OPT_NOWAIT);
1045 fw_sysfs->fw = firmware;
1046 f_dev = &fw_sysfs->dev;
f8a4bd34
DT
1047
1048 device_initialize(f_dev);
99c2aa72 1049 dev_set_name(f_dev, "%s", fw_name);
e55c8790
GKH
1050 f_dev->parent = device;
1051 f_dev->class = &firmware_class;
46239902 1052 f_dev->groups = fw_dev_attr_groups;
1244691c 1053exit:
aa6969c9 1054 return fw_sysfs;
1da177e4
LT
1055}
1056
cd7239fa 1057/* load a firmware via user helper */
aa6969c9 1058static int _request_firmware_load(struct fw_sysfs *fw_sysfs,
14c4bae7 1059 unsigned int opt_flags, long timeout)
1f2b7959 1060{
cd7239fa 1061 int retval = 0;
aa6969c9 1062 struct device *f_dev = &fw_sysfs->dev;
cd5322b7 1063 struct fw_priv *fw_priv = fw_sysfs->fw_priv;
1f2b7959 1064
cd7239fa 1065 /* fall back on userspace loading */
cd5322b7
LR
1066 if (!fw_priv->data)
1067 fw_priv->is_paged_buf = true;
1f2b7959 1068
cd7239fa 1069 dev_set_uevent_suppress(f_dev, true);
f531f05a 1070
cd7239fa
TI
1071 retval = device_add(f_dev);
1072 if (retval) {
1073 dev_err(f_dev, "%s: device_register failed\n", __func__);
1074 goto err_put_dev;
1075 }
f531f05a 1076
1eeeef15 1077 mutex_lock(&fw_lock);
cd5322b7 1078 list_add(&fw_priv->pending_list, &pending_fw_head);
1eeeef15
MB
1079 mutex_unlock(&fw_lock);
1080
14c4bae7 1081 if (opt_flags & FW_OPT_UEVENT) {
cd5322b7 1082 fw_priv->need_uevent = true;
cd7239fa 1083 dev_set_uevent_suppress(f_dev, false);
31034f22 1084 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name);
aa6969c9 1085 kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD);
68ff2a00
ML
1086 } else {
1087 timeout = MAX_JIFFY_OFFSET;
cd7239fa 1088 }
f531f05a 1089
33a5b18d 1090 retval = fw_sysfs_wait_timeout(fw_priv, timeout);
5d47ec02 1091 if (retval < 0) {
0cb64249 1092 mutex_lock(&fw_lock);
aa6969c9 1093 fw_load_abort(fw_sysfs);
0cb64249
ML
1094 mutex_unlock(&fw_lock);
1095 }
f531f05a 1096
f1b9cf39 1097 if (fw_state_is_aborted(fw_priv)) {
76098b36
LR
1098 if (retval == -ERESTARTSYS)
1099 retval = -EINTR;
1100 else
1101 retval = -EAGAIN;
cd5322b7 1102 } else if (fw_priv->is_paged_buf && !fw_priv->data)
2b1278cb 1103 retval = -ENOMEM;
f531f05a 1104
cd7239fa
TI
1105 device_del(f_dev);
1106err_put_dev:
1107 put_device(f_dev);
1108 return retval;
f531f05a 1109}
cd7239fa
TI
1110
1111static int fw_load_from_user_helper(struct firmware *firmware,
1112 const char *name, struct device *device,
06a45a93 1113 unsigned int opt_flags)
cfe016b1 1114{
aa6969c9 1115 struct fw_sysfs *fw_sysfs;
06a45a93
LR
1116 long timeout;
1117 int ret;
1118
1119 timeout = firmware_loading_timeout();
1120 if (opt_flags & FW_OPT_NOWAIT) {
1121 timeout = usermodehelper_read_lock_wait(timeout);
1122 if (!timeout) {
1123 dev_dbg(device, "firmware: %s loading timed out\n",
1124 name);
1125 return -EBUSY;
1126 }
1127 } else {
1128 ret = usermodehelper_read_trylock();
1129 if (WARN_ON(ret)) {
1130 dev_err(device, "firmware: %s will not be loaded\n",
1131 name);
1132 return ret;
1133 }
1134 }
cd7239fa 1135
aa6969c9
LR
1136 fw_sysfs = fw_create_instance(firmware, name, device, opt_flags);
1137 if (IS_ERR(fw_sysfs)) {
1138 ret = PTR_ERR(fw_sysfs);
06a45a93
LR
1139 goto out_unlock;
1140 }
cd7239fa 1141
cd5322b7 1142 fw_sysfs->fw_priv = firmware->priv;
aa6969c9 1143 ret = _request_firmware_load(fw_sysfs, opt_flags, timeout);
06a45a93
LR
1144
1145 if (!ret)
cd5322b7 1146 ret = assign_fw(firmware, device, opt_flags);
06a45a93
LR
1147
1148out_unlock:
1149 usermodehelper_read_unlock();
1150
1151 return ret;
cfe016b1 1152}
ddf1f064 1153
3f722712
LR
1154#ifdef CONFIG_FW_LOADER_USER_HELPER_FALLBACK
1155static bool fw_force_sysfs_fallback(unsigned int opt_flags)
1156{
1157 return true;
1158}
1159#else
1160static bool fw_force_sysfs_fallback(unsigned int opt_flags)
1161{
1162 if (!(opt_flags & FW_OPT_USERHELPER))
1163 return false;
1164 return true;
1165}
1166#endif
1167
1168static bool fw_run_sysfs_fallback(unsigned int opt_flags)
1169{
1170 if ((opt_flags & FW_OPT_NOFALLBACK))
1171 return false;
1172
1173 return fw_force_sysfs_fallback(opt_flags);
1174}
1175
25d39131
LR
1176static int fw_sysfs_fallback(struct firmware *fw, const char *name,
1177 struct device *device,
1178 unsigned int opt_flags,
1179 int ret)
1180{
3f722712 1181 if (!fw_run_sysfs_fallback(opt_flags))
25d39131
LR
1182 return ret;
1183
1184 dev_warn(device, "Falling back to user helper\n");
1185 return fw_load_from_user_helper(fw, name, device, opt_flags);
1186}
cd7239fa 1187#else /* CONFIG_FW_LOADER_USER_HELPER */
25d39131
LR
1188static int fw_sysfs_fallback(struct firmware *fw, const char *name,
1189 struct device *device,
1190 unsigned int opt_flags,
1191 int ret)
cd7239fa 1192{
25d39131
LR
1193 /* Keep carrying over the same error */
1194 return ret;
cd7239fa 1195}
807be03c 1196
c4b76893 1197static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { }
ddf1f064 1198
6bb9cf3a
LR
1199static inline int register_sysfs_loader(void)
1200{
1201 return 0;
1202}
1203
1204static inline void unregister_sysfs_loader(void)
1205{
1206}
1207
cd7239fa
TI
1208#endif /* CONFIG_FW_LOADER_USER_HELPER */
1209
4e0c92d0
TI
1210/* prepare firmware and firmware_buf structs;
1211 * return 0 if a firmware is already assigned, 1 if need to load one,
1212 * or a negative error code
1213 */
1214static int
1215_request_firmware_prepare(struct firmware **firmware_p, const char *name,
a098ecd2 1216 struct device *device, void *dbuf, size_t size)
1da177e4 1217{
1da177e4 1218 struct firmware *firmware;
cd5322b7 1219 struct fw_priv *fw_priv;
1f2b7959 1220 int ret;
1da177e4 1221
4aed0644 1222 *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
1da177e4 1223 if (!firmware) {
266a813c
BH
1224 dev_err(device, "%s: kmalloc(struct firmware) failed\n",
1225 __func__);
4e0c92d0 1226 return -ENOMEM;
1da177e4 1227 }
1da177e4 1228
a098ecd2 1229 if (fw_get_builtin_firmware(firmware, name, dbuf, size)) {
ed04630b 1230 dev_dbg(device, "using built-in %s\n", name);
4e0c92d0 1231 return 0; /* assigned */
5658c769
DW
1232 }
1233
cd5322b7 1234 ret = alloc_lookup_fw_priv(name, &fw_cache, &fw_priv, dbuf, size);
4e0c92d0
TI
1235
1236 /*
cd5322b7 1237 * bind with 'priv' now to avoid warning in failure path
4e0c92d0
TI
1238 * of requesting firmware.
1239 */
cd5322b7 1240 firmware->priv = fw_priv;
4e0c92d0
TI
1241
1242 if (ret > 0) {
f1b9cf39 1243 ret = fw_state_wait(fw_priv);
4e0c92d0 1244 if (!ret) {
cd5322b7 1245 fw_set_page_data(fw_priv, firmware);
4e0c92d0
TI
1246 return 0; /* assigned */
1247 }
dddb5549 1248 }
811fa400 1249
4e0c92d0
TI
1250 if (ret < 0)
1251 return ret;
1252 return 1; /* need to load */
1253}
1254
90d41e74
LR
1255/*
1256 * Batched requests need only one wake, we need to do this step last due to the
1257 * fallback mechanism. The buf is protected with kref_get(), and it won't be
1258 * released until the last user calls release_firmware().
1259 *
1260 * Failed batched requests are possible as well, in such cases we just share
cd5322b7 1261 * the struct fw_priv and won't release it until all requests are woken
90d41e74
LR
1262 * and have gone through this same path.
1263 */
1264static void fw_abort_batch_reqs(struct firmware *fw)
1265{
cd5322b7 1266 struct fw_priv *fw_priv;
90d41e74
LR
1267
1268 /* Loaded directly? */
1269 if (!fw || !fw->priv)
1270 return;
1271
cd5322b7 1272 fw_priv = fw->priv;
f1b9cf39
LR
1273 if (!fw_state_is_aborted(fw_priv))
1274 fw_state_aborted(fw_priv);
90d41e74
LR
1275}
1276
4e0c92d0
TI
1277/* called from request_firmware() and request_firmware_work_func() */
1278static int
1279_request_firmware(const struct firmware **firmware_p, const char *name,
a098ecd2
SB
1280 struct device *device, void *buf, size_t size,
1281 unsigned int opt_flags)
4e0c92d0 1282{
715780ae 1283 struct firmware *fw = NULL;
4e0c92d0
TI
1284 int ret;
1285
1286 if (!firmware_p)
1287 return -EINVAL;
1288
715780ae
BN
1289 if (!name || name[0] == '\0') {
1290 ret = -EINVAL;
1291 goto out;
1292 }
471b095d 1293
a098ecd2 1294 ret = _request_firmware_prepare(&fw, name, device, buf, size);
4e0c92d0
TI
1295 if (ret <= 0) /* error or already assigned */
1296 goto out;
1297
3e358ac2
NH
1298 ret = fw_get_filesystem_firmware(device, fw->priv);
1299 if (ret) {
c868edf4 1300 if (!(opt_flags & FW_OPT_NO_WARN))
bba3a87e 1301 dev_warn(device,
c868edf4
LR
1302 "Direct firmware load for %s failed with error %d\n",
1303 name, ret);
25d39131 1304 ret = fw_sysfs_fallback(fw, name, device, opt_flags, ret);
06a45a93 1305 } else
cd5322b7 1306 ret = assign_fw(fw, device, opt_flags);
4e0c92d0 1307
4e0c92d0
TI
1308 out:
1309 if (ret < 0) {
90d41e74 1310 fw_abort_batch_reqs(fw);
4e0c92d0
TI
1311 release_firmware(fw);
1312 fw = NULL;
1313 }
1314
1315 *firmware_p = fw;
1316 return ret;
1317}
1318
6e3eaab0 1319/**
312c004d 1320 * request_firmware: - send firmware request and wait for it
eb8e3179
RD
1321 * @firmware_p: pointer to firmware image
1322 * @name: name of firmware file
1323 * @device: device for which firmware is being loaded
1324 *
1325 * @firmware_p will be used to return a firmware image by the name
6e3eaab0
AS
1326 * of @name for device @device.
1327 *
1328 * Should be called from user context where sleeping is allowed.
1329 *
312c004d 1330 * @name will be used as $FIRMWARE in the uevent environment and
6e3eaab0
AS
1331 * should be distinctive enough not to be confused with any other
1332 * firmware image for this or any other device.
0cfc1e1e
ML
1333 *
1334 * Caller must hold the reference count of @device.
6a927857
ML
1335 *
1336 * The function can be called safely inside device's suspend and
1337 * resume callback.
6e3eaab0
AS
1338 **/
1339int
1340request_firmware(const struct firmware **firmware_p, const char *name,
ea31003c 1341 struct device *device)
6e3eaab0 1342{
d6c8aa39
ML
1343 int ret;
1344
1345 /* Need to pin this module until return */
1346 __module_get(THIS_MODULE);
a098ecd2 1347 ret = _request_firmware(firmware_p, name, device, NULL, 0,
3f722712 1348 FW_OPT_UEVENT);
d6c8aa39
ML
1349 module_put(THIS_MODULE);
1350 return ret;
6e3eaab0 1351}
f494513f 1352EXPORT_SYMBOL(request_firmware);
6e3eaab0 1353
bba3a87e 1354/**
3c1556b2 1355 * request_firmware_direct: - load firmware directly without usermode helper
bba3a87e
TI
1356 * @firmware_p: pointer to firmware image
1357 * @name: name of firmware file
1358 * @device: device for which firmware is being loaded
1359 *
1360 * This function works pretty much like request_firmware(), but this doesn't
1361 * fall back to usermode helper even if the firmware couldn't be loaded
1362 * directly from fs. Hence it's useful for loading optional firmwares, which
1363 * aren't always present, without extra long timeouts of udev.
1364 **/
1365int request_firmware_direct(const struct firmware **firmware_p,
1366 const char *name, struct device *device)
1367{
1368 int ret;
ea31003c 1369
bba3a87e 1370 __module_get(THIS_MODULE);
a098ecd2 1371 ret = _request_firmware(firmware_p, name, device, NULL, 0,
3f722712
LR
1372 FW_OPT_UEVENT | FW_OPT_NO_WARN |
1373 FW_OPT_NOFALLBACK);
bba3a87e
TI
1374 module_put(THIS_MODULE);
1375 return ret;
1376}
1377EXPORT_SYMBOL_GPL(request_firmware_direct);
bba3a87e 1378
a098ecd2
SB
1379/**
1380 * request_firmware_into_buf - load firmware into a previously allocated buffer
1381 * @firmware_p: pointer to firmware image
1382 * @name: name of firmware file
1383 * @device: device for which firmware is being loaded and DMA region allocated
1384 * @buf: address of buffer to load firmware into
1385 * @size: size of buffer
1386 *
1387 * This function works pretty much like request_firmware(), but it doesn't
1388 * allocate a buffer to hold the firmware data. Instead, the firmware
1389 * is loaded directly into the buffer pointed to by @buf and the @firmware_p
1390 * data member is pointed at @buf.
1391 *
1392 * This function doesn't cache firmware either.
1393 */
1394int
1395request_firmware_into_buf(const struct firmware **firmware_p, const char *name,
1396 struct device *device, void *buf, size_t size)
1397{
1398 int ret;
1399
1400 __module_get(THIS_MODULE);
1401 ret = _request_firmware(firmware_p, name, device, buf, size,
3f722712 1402 FW_OPT_UEVENT | FW_OPT_NOCACHE);
a098ecd2
SB
1403 module_put(THIS_MODULE);
1404 return ret;
1405}
1406EXPORT_SYMBOL(request_firmware_into_buf);
1407
1da177e4
LT
1408/**
1409 * release_firmware: - release the resource associated with a firmware image
eb8e3179 1410 * @fw: firmware resource to release
1da177e4 1411 **/
bcb9bd18 1412void release_firmware(const struct firmware *fw)
1da177e4
LT
1413{
1414 if (fw) {
bcb9bd18
DT
1415 if (!fw_is_builtin_firmware(fw))
1416 firmware_free_data(fw);
1da177e4
LT
1417 kfree(fw);
1418 }
1419}
f494513f 1420EXPORT_SYMBOL(release_firmware);
1da177e4 1421
1da177e4
LT
1422/* Async support */
1423struct firmware_work {
1424 struct work_struct work;
1425 struct module *module;
1426 const char *name;
1427 struct device *device;
1428 void *context;
1429 void (*cont)(const struct firmware *fw, void *context);
14c4bae7 1430 unsigned int opt_flags;
1da177e4
LT
1431};
1432
a36cf844 1433static void request_firmware_work_func(struct work_struct *work)
1da177e4 1434{
a36cf844 1435 struct firmware_work *fw_work;
1da177e4 1436 const struct firmware *fw;
f8a4bd34 1437
a36cf844 1438 fw_work = container_of(work, struct firmware_work, work);
811fa400 1439
a098ecd2 1440 _request_firmware(&fw, fw_work->name, fw_work->device, NULL, 0,
14c4bae7 1441 fw_work->opt_flags);
9ebfbd45 1442 fw_work->cont(fw, fw_work->context);
4e0c92d0 1443 put_device(fw_work->device); /* taken in request_firmware_nowait() */
9ebfbd45 1444
1da177e4 1445 module_put(fw_work->module);
f9692b26 1446 kfree_const(fw_work->name);
1da177e4 1447 kfree(fw_work);
1da177e4
LT
1448}
1449
1450/**
3c31f07a 1451 * request_firmware_nowait - asynchronous version of request_firmware
eb8e3179 1452 * @module: module requesting the firmware
312c004d 1453 * @uevent: sends uevent to copy the firmware image if this flag
eb8e3179
RD
1454 * is non-zero else the firmware copy must be done manually.
1455 * @name: name of firmware file
1456 * @device: device for which firmware is being loaded
9ebfbd45 1457 * @gfp: allocation flags
eb8e3179
RD
1458 * @context: will be passed over to @cont, and
1459 * @fw may be %NULL if firmware request fails.
1460 * @cont: function will be called asynchronously when the firmware
1461 * request is over.
1da177e4 1462 *
0cfc1e1e
ML
1463 * Caller must hold the reference count of @device.
1464 *
6f21a62a
ML
1465 * Asynchronous variant of request_firmware() for user contexts:
1466 * - sleep for as small periods as possible since it may
88bcef50
SF
1467 * increase kernel boot time of built-in device drivers
1468 * requesting firmware in their ->probe() methods, if
1469 * @gfp is GFP_KERNEL.
6f21a62a
ML
1470 *
1471 * - can't sleep at all if @gfp is GFP_ATOMIC.
1da177e4
LT
1472 **/
1473int
1474request_firmware_nowait(
072fc8f0 1475 struct module *module, bool uevent,
9ebfbd45 1476 const char *name, struct device *device, gfp_t gfp, void *context,
1da177e4
LT
1477 void (*cont)(const struct firmware *fw, void *context))
1478{
f8a4bd34 1479 struct firmware_work *fw_work;
1da177e4 1480
ea31003c 1481 fw_work = kzalloc(sizeof(struct firmware_work), gfp);
1da177e4
LT
1482 if (!fw_work)
1483 return -ENOMEM;
f8a4bd34
DT
1484
1485 fw_work->module = module;
f9692b26 1486 fw_work->name = kstrdup_const(name, gfp);
303cda0e
LR
1487 if (!fw_work->name) {
1488 kfree(fw_work);
f9692b26 1489 return -ENOMEM;
303cda0e 1490 }
f8a4bd34
DT
1491 fw_work->device = device;
1492 fw_work->context = context;
1493 fw_work->cont = cont;
3f722712 1494 fw_work->opt_flags = FW_OPT_NOWAIT |
5a1379e8 1495 (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
f8a4bd34 1496
1da177e4 1497 if (!try_module_get(module)) {
f9692b26 1498 kfree_const(fw_work->name);
1da177e4
LT
1499 kfree(fw_work);
1500 return -EFAULT;
1501 }
1502
0cfc1e1e 1503 get_device(fw_work->device);
a36cf844
SB
1504 INIT_WORK(&fw_work->work, request_firmware_work_func);
1505 schedule_work(&fw_work->work);
1da177e4
LT
1506 return 0;
1507}
f494513f 1508EXPORT_SYMBOL(request_firmware_nowait);
1da177e4 1509
90f89081
ML
1510#ifdef CONFIG_PM_SLEEP
1511static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
1512
2887b395
ML
1513/**
1514 * cache_firmware - cache one firmware image in kernel memory space
1515 * @fw_name: the firmware image name
1516 *
1517 * Cache firmware in kernel memory so that drivers can use it when
1518 * system isn't ready for them to request firmware image from userspace.
1519 * Once it returns successfully, driver can use request_firmware or its
1520 * nowait version to get the cached firmware without any interacting
1521 * with userspace
1522 *
1523 * Return 0 if the firmware image has been cached successfully
1524 * Return !0 otherwise
1525 *
1526 */
93232e46 1527static int cache_firmware(const char *fw_name)
2887b395
ML
1528{
1529 int ret;
1530 const struct firmware *fw;
1531
1532 pr_debug("%s: %s\n", __func__, fw_name);
1533
1534 ret = request_firmware(&fw, fw_name, NULL);
1535 if (!ret)
1536 kfree(fw);
1537
1538 pr_debug("%s: %s ret=%d\n", __func__, fw_name, ret);
1539
1540 return ret;
1541}
1542
cd5322b7 1543static struct fw_priv *lookup_fw_priv(const char *fw_name)
6a2c1234 1544{
cd5322b7 1545 struct fw_priv *tmp;
6a2c1234
ML
1546 struct firmware_cache *fwc = &fw_cache;
1547
1548 spin_lock(&fwc->lock);
cd5322b7 1549 tmp = __lookup_fw_priv(fw_name);
6a2c1234
ML
1550 spin_unlock(&fwc->lock);
1551
1552 return tmp;
1553}
1554
2887b395
ML
1555/**
1556 * uncache_firmware - remove one cached firmware image
1557 * @fw_name: the firmware image name
1558 *
1559 * Uncache one firmware image which has been cached successfully
1560 * before.
1561 *
1562 * Return 0 if the firmware cache has been removed successfully
1563 * Return !0 otherwise
1564 *
1565 */
93232e46 1566static int uncache_firmware(const char *fw_name)
2887b395 1567{
cd5322b7 1568 struct fw_priv *fw_priv;
2887b395
ML
1569 struct firmware fw;
1570
1571 pr_debug("%s: %s\n", __func__, fw_name);
1572
a098ecd2 1573 if (fw_get_builtin_firmware(&fw, fw_name, NULL, 0))
2887b395
ML
1574 return 0;
1575
cd5322b7
LR
1576 fw_priv = lookup_fw_priv(fw_name);
1577 if (fw_priv) {
1578 free_fw_priv(fw_priv);
2887b395
ML
1579 return 0;
1580 }
1581
1582 return -EINVAL;
1583}
1584
37276a51
ML
1585static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
1586{
1587 struct fw_cache_entry *fce;
1588
e0fd9b1d 1589 fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
37276a51
ML
1590 if (!fce)
1591 goto exit;
1592
e0fd9b1d
LR
1593 fce->name = kstrdup_const(name, GFP_ATOMIC);
1594 if (!fce->name) {
1595 kfree(fce);
1596 fce = NULL;
1597 goto exit;
1598 }
37276a51
ML
1599exit:
1600 return fce;
1601}
1602
373304fe 1603static int __fw_entry_found(const char *name)
ac39b3ea
ML
1604{
1605 struct firmware_cache *fwc = &fw_cache;
1606 struct fw_cache_entry *fce;
ac39b3ea 1607
ac39b3ea
ML
1608 list_for_each_entry(fce, &fwc->fw_names, list) {
1609 if (!strcmp(fce->name, name))
373304fe 1610 return 1;
ac39b3ea 1611 }
373304fe
ML
1612 return 0;
1613}
1614
1615static int fw_cache_piggyback_on_request(const char *name)
1616{
1617 struct firmware_cache *fwc = &fw_cache;
1618 struct fw_cache_entry *fce;
1619 int ret = 0;
1620
1621 spin_lock(&fwc->name_lock);
1622 if (__fw_entry_found(name))
1623 goto found;
ac39b3ea
ML
1624
1625 fce = alloc_fw_cache_entry(name);
1626 if (fce) {
1627 ret = 1;
1628 list_add(&fce->list, &fwc->fw_names);
1629 pr_debug("%s: fw: %s\n", __func__, name);
1630 }
1631found:
1632 spin_unlock(&fwc->name_lock);
1633 return ret;
1634}
1635
37276a51
ML
1636static void free_fw_cache_entry(struct fw_cache_entry *fce)
1637{
e0fd9b1d 1638 kfree_const(fce->name);
37276a51
ML
1639 kfree(fce);
1640}
1641
1642static void __async_dev_cache_fw_image(void *fw_entry,
1643 async_cookie_t cookie)
1644{
1645 struct fw_cache_entry *fce = fw_entry;
1646 struct firmware_cache *fwc = &fw_cache;
1647 int ret;
1648
1649 ret = cache_firmware(fce->name);
ac39b3ea
ML
1650 if (ret) {
1651 spin_lock(&fwc->name_lock);
1652 list_del(&fce->list);
1653 spin_unlock(&fwc->name_lock);
37276a51 1654
ac39b3ea
ML
1655 free_fw_cache_entry(fce);
1656 }
37276a51
ML
1657}
1658
1659/* called with dev->devres_lock held */
1660static void dev_create_fw_entry(struct device *dev, void *res,
1661 void *data)
1662{
1663 struct fw_name_devm *fwn = res;
1664 const char *fw_name = fwn->name;
1665 struct list_head *head = data;
1666 struct fw_cache_entry *fce;
1667
1668 fce = alloc_fw_cache_entry(fw_name);
1669 if (fce)
1670 list_add(&fce->list, head);
1671}
1672
1673static int devm_name_match(struct device *dev, void *res,
1674 void *match_data)
1675{
1676 struct fw_name_devm *fwn = res;
1677 return (fwn->magic == (unsigned long)match_data);
1678}
1679
ab6dd8e5 1680static void dev_cache_fw_image(struct device *dev, void *data)
37276a51
ML
1681{
1682 LIST_HEAD(todo);
1683 struct fw_cache_entry *fce;
1684 struct fw_cache_entry *fce_next;
1685 struct firmware_cache *fwc = &fw_cache;
1686
1687 devres_for_each_res(dev, fw_name_devm_release,
1688 devm_name_match, &fw_cache,
1689 dev_create_fw_entry, &todo);
1690
1691 list_for_each_entry_safe(fce, fce_next, &todo, list) {
1692 list_del(&fce->list);
1693
1694 spin_lock(&fwc->name_lock);
373304fe
ML
1695 /* only one cache entry for one firmware */
1696 if (!__fw_entry_found(fce->name)) {
373304fe
ML
1697 list_add(&fce->list, &fwc->fw_names);
1698 } else {
1699 free_fw_cache_entry(fce);
1700 fce = NULL;
1701 }
37276a51
ML
1702 spin_unlock(&fwc->name_lock);
1703
373304fe 1704 if (fce)
d28d3882
ML
1705 async_schedule_domain(__async_dev_cache_fw_image,
1706 (void *)fce,
1707 &fw_cache_domain);
37276a51
ML
1708 }
1709}
1710
1711static void __device_uncache_fw_images(void)
1712{
1713 struct firmware_cache *fwc = &fw_cache;
1714 struct fw_cache_entry *fce;
1715
1716 spin_lock(&fwc->name_lock);
1717 while (!list_empty(&fwc->fw_names)) {
1718 fce = list_entry(fwc->fw_names.next,
1719 struct fw_cache_entry, list);
1720 list_del(&fce->list);
1721 spin_unlock(&fwc->name_lock);
1722
1723 uncache_firmware(fce->name);
1724 free_fw_cache_entry(fce);
1725
1726 spin_lock(&fwc->name_lock);
1727 }
1728 spin_unlock(&fwc->name_lock);
1729}
1730
1731/**
1732 * device_cache_fw_images - cache devices' firmware
1733 *
1734 * If one device called request_firmware or its nowait version
1735 * successfully before, the firmware names are recored into the
1736 * device's devres link list, so device_cache_fw_images can call
1737 * cache_firmware() to cache these firmwares for the device,
1738 * then the device driver can load its firmwares easily at
1739 * time when system is not ready to complete loading firmware.
1740 */
1741static void device_cache_fw_images(void)
1742{
1743 struct firmware_cache *fwc = &fw_cache;
ffe53f6f 1744 int old_timeout;
37276a51
ML
1745 DEFINE_WAIT(wait);
1746
1747 pr_debug("%s\n", __func__);
1748
373304fe
ML
1749 /* cancel uncache work */
1750 cancel_delayed_work_sync(&fwc->work);
1751
ffe53f6f
ML
1752 /*
1753 * use small loading timeout for caching devices' firmware
1754 * because all these firmware images have been loaded
1755 * successfully at lease once, also system is ready for
1756 * completing firmware loading now. The maximum size of
1757 * firmware in current distributions is about 2M bytes,
1758 * so 10 secs should be enough.
1759 */
1760 old_timeout = loading_timeout;
1761 loading_timeout = 10;
1762
ac39b3ea
ML
1763 mutex_lock(&fw_lock);
1764 fwc->state = FW_LOADER_START_CACHE;
ab6dd8e5 1765 dpm_for_each_dev(NULL, dev_cache_fw_image);
ac39b3ea 1766 mutex_unlock(&fw_lock);
37276a51
ML
1767
1768 /* wait for completion of caching firmware for all devices */
d28d3882 1769 async_synchronize_full_domain(&fw_cache_domain);
ffe53f6f
ML
1770
1771 loading_timeout = old_timeout;
37276a51
ML
1772}
1773
1774/**
1775 * device_uncache_fw_images - uncache devices' firmware
1776 *
1777 * uncache all firmwares which have been cached successfully
1778 * by device_uncache_fw_images earlier
1779 */
1780static void device_uncache_fw_images(void)
1781{
1782 pr_debug("%s\n", __func__);
1783 __device_uncache_fw_images();
1784}
1785
1786static void device_uncache_fw_images_work(struct work_struct *work)
1787{
1788 device_uncache_fw_images();
1789}
1790
1791/**
1792 * device_uncache_fw_images_delay - uncache devices firmwares
1793 * @delay: number of milliseconds to delay uncache device firmwares
1794 *
1795 * uncache all devices's firmwares which has been cached successfully
1796 * by device_cache_fw_images after @delay milliseconds.
1797 */
1798static void device_uncache_fw_images_delay(unsigned long delay)
1799{
bce6618a
SD
1800 queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
1801 msecs_to_jiffies(delay));
37276a51
ML
1802}
1803
07646d9c
ML
1804static int fw_pm_notify(struct notifier_block *notify_block,
1805 unsigned long mode, void *unused)
1806{
1807 switch (mode) {
1808 case PM_HIBERNATION_PREPARE:
1809 case PM_SUSPEND_PREPARE:
f8d5b9e9 1810 case PM_RESTORE_PREPARE:
c4b76893
LR
1811 /*
1812 * kill pending fallback requests with a custom fallback
1813 * to avoid stalling suspend.
1814 */
1815 kill_pending_fw_fallback_reqs(true);
07646d9c
ML
1816 device_cache_fw_images();
1817 break;
1818
1819 case PM_POST_SUSPEND:
1820 case PM_POST_HIBERNATION:
1821 case PM_POST_RESTORE:
ac39b3ea
ML
1822 /*
1823 * In case that system sleep failed and syscore_suspend is
1824 * not called.
1825 */
1826 mutex_lock(&fw_lock);
1827 fw_cache.state = FW_LOADER_NO_CACHE;
1828 mutex_unlock(&fw_lock);
1829
07646d9c
ML
1830 device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
1831 break;
1832 }
1833
1834 return 0;
1835}
07646d9c 1836
ac39b3ea
ML
1837/* stop caching firmware once syscore_suspend is reached */
1838static int fw_suspend(void)
1839{
1840 fw_cache.state = FW_LOADER_NO_CACHE;
1841 return 0;
1842}
1843
1844static struct syscore_ops fw_syscore_ops = {
1845 .suspend = fw_suspend,
1846};
a67e503b 1847
59b6d859
LR
1848static int __init register_fw_pm_ops(void)
1849{
1850 int ret;
1851
1852 spin_lock_init(&fw_cache.name_lock);
1853 INIT_LIST_HEAD(&fw_cache.fw_names);
1854
1855 INIT_DELAYED_WORK(&fw_cache.work,
1856 device_uncache_fw_images_work);
1857
1858 fw_cache.pm_notify.notifier_call = fw_pm_notify;
1859 ret = register_pm_notifier(&fw_cache.pm_notify);
1860 if (ret)
1861 return ret;
1862
1863 register_syscore_ops(&fw_syscore_ops);
1864
1865 return ret;
1866}
1867
a67e503b
LR
1868static inline void unregister_fw_pm_ops(void)
1869{
1870 unregister_syscore_ops(&fw_syscore_ops);
1871 unregister_pm_notifier(&fw_cache.pm_notify);
1872}
cfe016b1
ML
1873#else
1874static int fw_cache_piggyback_on_request(const char *name)
1875{
1876 return 0;
1877}
59b6d859
LR
1878static inline int register_fw_pm_ops(void)
1879{
1880 return 0;
1881}
a67e503b
LR
1882static inline void unregister_fw_pm_ops(void)
1883{
1884}
cfe016b1 1885#endif
ac39b3ea 1886
37276a51
ML
1887static void __init fw_cache_init(void)
1888{
1889 spin_lock_init(&fw_cache.lock);
1890 INIT_LIST_HEAD(&fw_cache.head);
cfe016b1 1891 fw_cache.state = FW_LOADER_NO_CACHE;
37276a51
ML
1892}
1893
a669f04a
LR
1894static int fw_shutdown_notify(struct notifier_block *unused1,
1895 unsigned long unused2, void *unused3)
1896{
1897 /*
1898 * Kill all pending fallback requests to avoid both stalling shutdown,
1899 * and avoid a deadlock with the usermode_lock.
1900 */
1901 kill_pending_fw_fallback_reqs(false);
1902
1903 return NOTIFY_DONE;
1904}
1905
1906static struct notifier_block fw_shutdown_nb = {
1907 .notifier_call = fw_shutdown_notify,
1908};
1909
673fae90 1910static int __init firmware_class_init(void)
1da177e4 1911{
59b6d859
LR
1912 int ret;
1913
1914 /* No need to unfold these on exit */
1f2b7959 1915 fw_cache_init();
59b6d859
LR
1916
1917 ret = register_fw_pm_ops();
1918 if (ret)
1919 return ret;
1920
561a10b6
LR
1921 ret = register_reboot_notifier(&fw_shutdown_nb);
1922 if (ret)
1923 goto out;
1924
6bb9cf3a 1925 return register_sysfs_loader();
561a10b6
LR
1926
1927out:
1928 unregister_fw_pm_ops();
1929 return ret;
1da177e4 1930}
673fae90
DT
1931
1932static void __exit firmware_class_exit(void)
1da177e4 1933{
a67e503b 1934 unregister_fw_pm_ops();
fe304143 1935 unregister_reboot_notifier(&fw_shutdown_nb);
6bb9cf3a 1936 unregister_sysfs_loader();
1da177e4
LT
1937}
1938
a30a6a2c 1939fs_initcall(firmware_class_init);
1da177e4 1940module_exit(firmware_class_exit);