firmware_class.c 44.4 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
/*
 * firmware_class.c - Multi purpose firmware loading support
 *
4
 * Copyright (c) 2003 Manuel Estrada Sainz
L
Linus Torvalds 已提交
5 6 7 8 9
 *
 * Please see Documentation/firmware_class/ for more information.
 *
 */

L
Luis R. Rodriguez 已提交
10 11
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

12
#include <linux/capability.h>
L
Linus Torvalds 已提交
13 14 15 16 17 18 19
#include <linux/device.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/vmalloc.h>
#include <linux/interrupt.h>
#include <linux/bitops.h>
20
#include <linux/mutex.h>
21
#include <linux/workqueue.h>
22
#include <linux/highmem.h>
L
Linus Torvalds 已提交
23
#include <linux/firmware.h>
24
#include <linux/slab.h>
25
#include <linux/sched.h>
26
#include <linux/file.h>
27
#include <linux/list.h>
28
#include <linux/fs.h>
29 30
#include <linux/async.h>
#include <linux/pm.h>
31
#include <linux/suspend.h>
32
#include <linux/syscore_ops.h>
33
#include <linux/reboot.h>
34
#include <linux/security.h>
35

36 37
#include <generated/utsrelease.h>

38
#include "base.h"
L
Linus Torvalds 已提交
39

40
MODULE_AUTHOR("Manuel Estrada Sainz");
L
Linus Torvalds 已提交
41 42 43
MODULE_DESCRIPTION("Multi purpose firmware loading support");
MODULE_LICENSE("GPL");

44 45 46 47 48 49 50
/* Builtin firmware support */

#ifdef CONFIG_FW_LOADER

extern struct builtin_fw __start_builtin_fw[];
extern struct builtin_fw __end_builtin_fw[];

51 52
static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
				    void *buf, size_t size)
53 54 55 56 57 58 59
{
	struct builtin_fw *b_fw;

	for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) {
		if (strcmp(name, b_fw->name) == 0) {
			fw->size = b_fw->size;
			fw->data = b_fw->data;
60 61 62

			if (buf && fw->size <= size)
				memcpy(buf, fw->data, fw->size);
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
			return true;
		}
	}

	return false;
}

static bool fw_is_builtin_firmware(const struct firmware *fw)
{
	struct builtin_fw *b_fw;

	for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++)
		if (fw->data == b_fw->data)
			return true;

	return false;
}

#else /* Module case - no builtin firmware support */

83 84 85
static inline bool fw_get_builtin_firmware(struct firmware *fw,
					   const char *name, void *buf,
					   size_t size)
86 87 88 89 90 91 92 93 94 95
{
	return false;
}

static inline bool fw_is_builtin_firmware(const struct firmware *fw)
{
	return false;
}
#endif

D
Daniel Wagner 已提交
96 97
enum fw_status {
	FW_STATUS_UNKNOWN,
L
Linus Torvalds 已提交
98 99
	FW_STATUS_LOADING,
	FW_STATUS_DONE,
D
Daniel Wagner 已提交
100
	FW_STATUS_ABORTED,
L
Linus Torvalds 已提交
101 102
};

103
static int loading_timeout = 60;	/* In seconds */
L
Linus Torvalds 已提交
104

105 106
static inline long firmware_loading_timeout(void)
{
107
	return loading_timeout > 0 ? loading_timeout * HZ : MAX_JIFFY_OFFSET;
108 109
}

D
Daniel Wagner 已提交
110 111 112 113 114 115
/*
 * Concurrent request_firmware() for the same firmware need to be
 * serialized.  struct fw_state is simple state machine which hold the
 * state of the firmware loading.
 */
struct fw_state {
116
	struct completion completion;
117
	enum fw_status status;
D
Daniel Wagner 已提交
118 119 120 121
};

static void fw_state_init(struct fw_state *fw_st)
{
122
	init_completion(&fw_st->completion);
D
Daniel Wagner 已提交
123 124 125
	fw_st->status = FW_STATUS_UNKNOWN;
}

126 127 128 129 130
static inline bool __fw_state_is_done(enum fw_status status)
{
	return status == FW_STATUS_DONE || status == FW_STATUS_ABORTED;
}

131
static int __fw_state_wait_common(struct fw_state *fw_st, long timeout)
D
Daniel Wagner 已提交
132 133 134
{
	long ret;

135
	ret = wait_for_completion_killable_timeout(&fw_st->completion, timeout);
136
	if (ret != 0 && fw_st->status == FW_STATUS_ABORTED)
D
Daniel Wagner 已提交
137
		return -ENOENT;
138 139
	if (!ret)
		return -ETIMEDOUT;
D
Daniel Wagner 已提交
140

141
	return ret < 0 ? ret : 0;
D
Daniel Wagner 已提交
142 143 144 145 146
}

static void __fw_state_set(struct fw_state *fw_st,
			   enum fw_status status)
{
147
	WRITE_ONCE(fw_st->status, status);
D
Daniel Wagner 已提交
148

149
	if (status == FW_STATUS_DONE || status == FW_STATUS_ABORTED)
150
		complete_all(&fw_st->completion);
D
Daniel Wagner 已提交
151 152 153 154 155 156
}

#define fw_state_start(fw_st)					\
	__fw_state_set(fw_st, FW_STATUS_LOADING)
#define fw_state_done(fw_st)					\
	__fw_state_set(fw_st, FW_STATUS_DONE)
157 158
#define fw_state_aborted(fw_st)					\
	__fw_state_set(fw_st, FW_STATUS_ABORTED)
D
Daniel Wagner 已提交
159 160 161
#define fw_state_wait(fw_st)					\
	__fw_state_wait_common(fw_st, MAX_SCHEDULE_TIMEOUT)

162 163 164 165 166
static int __fw_state_check(struct fw_state *fw_st, enum fw_status status)
{
	return fw_st->status == status;
}

167 168 169 170 171
#define fw_state_is_aborted(fw_st)				\
	__fw_state_check(fw_st, FW_STATUS_ABORTED)

#ifdef CONFIG_FW_LOADER_USER_HELPER

D
Daniel Wagner 已提交
172 173
#define fw_state_aborted(fw_st)					\
	__fw_state_set(fw_st, FW_STATUS_ABORTED)
174 175
#define fw_state_is_done(fw_st)					\
	__fw_state_check(fw_st, FW_STATUS_DONE)
D
Daniel Wagner 已提交
176 177 178 179 180 181 182
#define fw_state_is_loading(fw_st)				\
	__fw_state_check(fw_st, FW_STATUS_LOADING)
#define fw_state_wait_timeout(fw_st, timeout)			\
	__fw_state_wait_common(fw_st, timeout)

#endif /* CONFIG_FW_LOADER_USER_HELPER */

183 184 185
/* firmware behavior options */
#define FW_OPT_UEVENT	(1U << 0)
#define FW_OPT_NOWAIT	(1U << 1)
186
#ifdef CONFIG_FW_LOADER_USER_HELPER
187
#define FW_OPT_USERHELPER	(1U << 2)
188
#else
189 190 191 192 193 194
#define FW_OPT_USERHELPER	0
#endif
#ifdef CONFIG_FW_LOADER_USER_HELPER_FALLBACK
#define FW_OPT_FALLBACK		FW_OPT_USERHELPER
#else
#define FW_OPT_FALLBACK		0
195
#endif
196
#define FW_OPT_NO_WARN	(1U << 3)
197
#define FW_OPT_NOCACHE	(1U << 4)
198

199 200 201 202
struct firmware_cache {
	/* firmware_buf instance will be added into the below list */
	spinlock_t lock;
	struct list_head head;
203
	int state;
204

205
#ifdef CONFIG_PM_SLEEP
206 207 208 209 210 211 212 213 214 215
	/*
	 * Names of firmware images which have been cached successfully
	 * will be added into the below list so that device uncache
	 * helper can trace which firmware images have been cached
	 * before.
	 */
	spinlock_t name_lock;
	struct list_head fw_names;

	struct delayed_work work;
216 217

	struct notifier_block   pm_notify;
218
#endif
219
};
L
Linus Torvalds 已提交
220

221
struct fw_priv {
222 223 224
	struct kref ref;
	struct list_head list;
	struct firmware_cache *fwc;
D
Daniel Wagner 已提交
225
	struct fw_state fw_st;
226 227
	void *data;
	size_t size;
228
	size_t allocated_size;
229
#ifdef CONFIG_FW_LOADER_USER_HELPER
230
	bool is_paged_buf;
231
	bool need_uevent;
232 233 234
	struct page **pages;
	int nr_pages;
	int page_array_size;
235
	struct list_head pending_list;
236
#endif
237
	const char *fw_id;
238 239
};

240 241
struct fw_cache_entry {
	struct list_head list;
242
	const char *name;
243 244
};

245 246
struct fw_name_devm {
	unsigned long magic;
247
	const char *name;
248 249
};

250
#define to_fw_priv(d) container_of(d, struct fw_priv, ref)
251

252 253 254 255 256
#define	FW_LOADER_NO_CACHE	0
#define	FW_LOADER_START_CACHE	1

static int fw_cache_piggyback_on_request(const char *name);

257
/* fw_lock could be moved to 'struct fw_sysfs' but since it is just
258 259 260 261 262
 * guarding for corner cases a global lock should be OK */
static DEFINE_MUTEX(fw_lock);

static struct firmware_cache fw_cache;

263 264 265
static struct fw_priv *__allocate_fw_priv(const char *fw_name,
					  struct firmware_cache *fwc,
					  void *dbuf, size_t size)
266
{
267
	struct fw_priv *fw_priv;
268

269 270
	fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
	if (!fw_priv)
271 272
		return NULL;

273 274 275
	fw_priv->fw_id = kstrdup_const(fw_name, GFP_ATOMIC);
	if (!fw_priv->fw_id) {
		kfree(fw_priv);
276 277
		return NULL;
	}
278

279 280 281 282 283
	kref_init(&fw_priv->ref);
	fw_priv->fwc = fwc;
	fw_priv->data = dbuf;
	fw_priv->allocated_size = size;
	fw_state_init(&fw_priv->fw_st);
284
#ifdef CONFIG_FW_LOADER_USER_HELPER
285
	INIT_LIST_HEAD(&fw_priv->pending_list);
286
#endif
287

288
	pr_debug("%s: fw-%s fw_priv=%p\n", __func__, fw_name, fw_priv);
289

290
	return fw_priv;
291 292
}

293
static struct fw_priv *__lookup_fw_priv(const char *fw_name)
294
{
295
	struct fw_priv *tmp;
296 297 298 299 300 301 302 303
	struct firmware_cache *fwc = &fw_cache;

	list_for_each_entry(tmp, &fwc->head, list)
		if (!strcmp(tmp->fw_id, fw_name))
			return tmp;
	return NULL;
}

304
/* Returns 1 for batching firmware requests with the same name */
305 306 307 308
static int alloc_lookup_fw_priv(const char *fw_name,
				struct firmware_cache *fwc,
				struct fw_priv **fw_priv, void *dbuf,
				size_t size)
309
{
310
	struct fw_priv *tmp;
311 312

	spin_lock(&fwc->lock);
313
	tmp = __lookup_fw_priv(fw_name);
314 315 316
	if (tmp) {
		kref_get(&tmp->ref);
		spin_unlock(&fwc->lock);
317 318
		*fw_priv = tmp;
		pr_debug("batched request - sharing the same struct fw_priv and lookup for multiple requests\n");
319 320
		return 1;
	}
321
	tmp = __allocate_fw_priv(fw_name, fwc, dbuf, size);
322 323 324 325
	if (tmp)
		list_add(&tmp->list, &fwc->head);
	spin_unlock(&fwc->lock);

326
	*fw_priv = tmp;
327 328 329 330

	return tmp ? 0 : -ENOMEM;
}

331
static void __free_fw_priv(struct kref *ref)
332
	__releases(&fwc->lock)
333
{
334 335
	struct fw_priv *fw_priv = to_fw_priv(ref);
	struct firmware_cache *fwc = fw_priv->fwc;
336

337 338 339
	pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
		 __func__, fw_priv->fw_id, fw_priv, fw_priv->data,
		 (unsigned int)fw_priv->size);
340

341
	list_del(&fw_priv->list);
342 343
	spin_unlock(&fwc->lock);

344
#ifdef CONFIG_FW_LOADER_USER_HELPER
345
	if (fw_priv->is_paged_buf) {
346
		int i;
347 348 349 350
		vunmap(fw_priv->data);
		for (i = 0; i < fw_priv->nr_pages; i++)
			__free_page(fw_priv->pages[i]);
		vfree(fw_priv->pages);
351
	} else
352
#endif
353 354 355 356
	if (!fw_priv->allocated_size)
		vfree(fw_priv->data);
	kfree_const(fw_priv->fw_id);
	kfree(fw_priv);
357 358
}

359
static void free_fw_priv(struct fw_priv *fw_priv)
360
{
361
	struct firmware_cache *fwc = fw_priv->fwc;
362
	spin_lock(&fwc->lock);
363
	if (!kref_put(&fw_priv->ref, __free_fw_priv))
364
		spin_unlock(&fwc->lock);
365 366
}

367
/* direct firmware loading support */
368 369 370
static char fw_path_para[256];
static const char * const fw_path[] = {
	fw_path_para,
371 372 373 374 375 376
	"/lib/firmware/updates/" UTS_RELEASE,
	"/lib/firmware/updates",
	"/lib/firmware/" UTS_RELEASE,
	"/lib/firmware"
};

377 378 379 380 381 382 383 384
/*
 * Typical usage is that passing 'firmware_class.path=$CUSTOMIZED_PATH'
 * from kernel command line because firmware_class is generally built in
 * kernel instead of module.
 */
module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");

385
static int
386
fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv)
387
{
388
	loff_t size;
389
	int i, len;
390
	int rc = -ENOENT;
391
	char *path;
392 393 394 395
	enum kernel_read_file_id id = READING_FIRMWARE;
	size_t msize = INT_MAX;

	/* Already populated data member means we're loading into a buffer */
396
	if (fw_priv->data) {
397
		id = READING_FIRMWARE_PREALLOC_BUFFER;
398
		msize = fw_priv->allocated_size;
399
	}
400 401 402 403

	path = __getname();
	if (!path)
		return -ENOMEM;
404 405

	for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
406 407 408 409
		/* skip the unset customized path */
		if (!fw_path[i][0])
			continue;

410
		len = snprintf(path, PATH_MAX, "%s/%s",
411
			       fw_path[i], fw_priv->fw_id);
412 413 414 415
		if (len >= PATH_MAX) {
			rc = -ENAMETOOLONG;
			break;
		}
416

417 418 419
		fw_priv->size = 0;
		rc = kernel_read_file_from_path(path, &fw_priv->data, &size,
						msize, id);
420
		if (rc) {
421 422 423 424 425 426
			if (rc == -ENOENT)
				dev_dbg(device, "loading %s failed with error %d\n",
					 path, rc);
			else
				dev_warn(device, "loading %s failed with error %d\n",
					 path, rc);
427 428
			continue;
		}
429 430 431
		dev_dbg(device, "direct-loading %s\n", fw_priv->fw_id);
		fw_priv->size = size;
		fw_state_done(&fw_priv->fw_st);
432
		break;
433
	}
434
	__putname(path);
435

436
	return rc;
437 438
}

439 440 441 442 443 444 445 446
/* firmware holds the ownership of pages */
static void firmware_free_data(const struct firmware *fw)
{
	/* Loaded directly? */
	if (!fw->priv) {
		vfree(fw->data);
		return;
	}
447
	free_fw_priv(fw->priv);
448 449
}

450
/* store the pages buffer info firmware from buf */
451
static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
452
{
453
	fw->priv = fw_priv;
454
#ifdef CONFIG_FW_LOADER_USER_HELPER
455
	fw->pages = fw_priv->pages;
456
#endif
457 458
	fw->size = fw_priv->size;
	fw->data = fw_priv->data;
459

460 461 462
	pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
		 __func__, fw_priv->fw_id, fw_priv, fw_priv->data,
		 (unsigned int)fw_priv->size);
463 464 465 466 467 468 469 470 471 472
}

#ifdef CONFIG_PM_SLEEP
static void fw_name_devm_release(struct device *dev, void *res)
{
	struct fw_name_devm *fwn = res;

	if (fwn->magic == (unsigned long)&fw_cache)
		pr_debug("%s: fw_name-%s devm-%p released\n",
				__func__, fwn->name, res);
473
	kfree_const(fwn->name);
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503
}

static int fw_devm_match(struct device *dev, void *res,
		void *match_data)
{
	struct fw_name_devm *fwn = res;

	return (fwn->magic == (unsigned long)&fw_cache) &&
		!strcmp(fwn->name, match_data);
}

static struct fw_name_devm *fw_find_devm_name(struct device *dev,
		const char *name)
{
	struct fw_name_devm *fwn;

	fwn = devres_find(dev, fw_name_devm_release,
			  fw_devm_match, (void *)name);
	return fwn;
}

/* add firmware name into devres list */
static int fw_add_devm_name(struct device *dev, const char *name)
{
	struct fw_name_devm *fwn;

	fwn = fw_find_devm_name(dev, name);
	if (fwn)
		return 1;

504 505
	fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm),
			   GFP_KERNEL);
506 507
	if (!fwn)
		return -ENOMEM;
508 509
	fwn->name = kstrdup_const(name, GFP_KERNEL);
	if (!fwn->name) {
510
		devres_free(fwn);
511 512
		return -ENOMEM;
	}
513 514 515 516 517 518 519 520 521 522 523 524 525

	fwn->magic = (unsigned long)&fw_cache;
	devres_add(dev, fwn);

	return 0;
}
#else
static int fw_add_devm_name(struct device *dev, const char *name)
{
	return 0;
}
#endif

526 527
static int assign_fw(struct firmware *fw, struct device *device,
		     unsigned int opt_flags)
528
{
529
	struct fw_priv *fw_priv = fw->priv;
530 531

	mutex_lock(&fw_lock);
532
	if (!fw_priv->size || fw_state_is_aborted(&fw_priv->fw_st)) {
533 534 535 536 537 538 539 540 541 542 543 544 545 546
		mutex_unlock(&fw_lock);
		return -ENOENT;
	}

	/*
	 * add firmware name into devres list so that we can auto cache
	 * and uncache firmware for device.
	 *
	 * device may has been deleted already, but the problem
	 * should be fixed in devres or driver core.
	 */
	/* don't cache firmware handled without uevent */
	if (device && (opt_flags & FW_OPT_UEVENT) &&
	    !(opt_flags & FW_OPT_NOCACHE))
547
		fw_add_devm_name(device, fw_priv->fw_id);
548 549 550 551 552 553

	/*
	 * After caching firmware image is started, let it piggyback
	 * on request firmware.
	 */
	if (!(opt_flags & FW_OPT_NOCACHE) &&
554 555 556
	    fw_priv->fwc->state == FW_LOADER_START_CACHE) {
		if (fw_cache_piggyback_on_request(fw_priv->fw_id))
			kref_get(&fw_priv->ref);
557 558 559
	}

	/* pass the pages buffer to driver at the last minute */
560
	fw_set_page_data(fw_priv, fw);
561 562 563
	mutex_unlock(&fw_lock);
	return 0;
}
564 565 566 567

/*
 * user-mode helper code
 */
568
#ifdef CONFIG_FW_LOADER_USER_HELPER
569
struct fw_sysfs {
570 571
	bool nowait;
	struct device dev;
572
	struct fw_priv *fw_priv;
573 574
	struct firmware *fw;
};
575

576
static struct fw_sysfs *to_fw_sysfs(struct device *dev)
577
{
578
	return container_of(dev, struct fw_sysfs, dev);
579 580
}

581
static void __fw_load_abort(struct fw_priv *fw_priv)
L
Linus Torvalds 已提交
582
{
583 584 585 586
	/*
	 * There is a small window in which user can write to 'loading'
	 * between loading done and disappearance of 'loading'
	 */
587
	if (fw_state_is_done(&fw_priv->fw_st))
588 589
		return;

590 591
	list_del_init(&fw_priv->pending_list);
	fw_state_aborted(&fw_priv->fw_st);
L
Linus Torvalds 已提交
592 593
}

594
static void fw_load_abort(struct fw_sysfs *fw_sysfs)
595
{
596
	struct fw_priv *fw_priv = fw_sysfs->fw_priv;
597

598
	__fw_load_abort(fw_priv);
L
Linus Torvalds 已提交
599 600
}

601 602
static LIST_HEAD(pending_fw_head);

603
static void kill_pending_fw_fallback_reqs(bool only_kill_custom)
604
{
605 606
	struct fw_priv *fw_priv;
	struct fw_priv *next;
607 608

	mutex_lock(&fw_lock);
609 610 611 612
	list_for_each_entry_safe(fw_priv, next, &pending_fw_head,
				 pending_list) {
		if (!fw_priv->need_uevent || !only_kill_custom)
			 __fw_load_abort(fw_priv);
613 614 615 616
	}
	mutex_unlock(&fw_lock);
}

617 618
static ssize_t timeout_show(struct class *class, struct class_attribute *attr,
			    char *buf)
L
Linus Torvalds 已提交
619 620 621 622 623
{
	return sprintf(buf, "%d\n", loading_timeout);
}

/**
624 625
 * firmware_timeout_store - set number of seconds to wait for firmware
 * @class: device class pointer
626
 * @attr: device attribute pointer
627 628 629
 * @buf: buffer to scan for timeout value
 * @count: number of bytes in @buf
 *
L
Linus Torvalds 已提交
630
 *	Sets the number of seconds to wait for the firmware.  Once
631
 *	this expires an error will be returned to the driver and no
L
Linus Torvalds 已提交
632 633
 *	firmware will be provided.
 *
634
 *	Note: zero means 'wait forever'.
L
Linus Torvalds 已提交
635
 **/
636 637
static ssize_t timeout_store(struct class *class, struct class_attribute *attr,
			     const char *buf, size_t count)
L
Linus Torvalds 已提交
638 639
{
	loading_timeout = simple_strtol(buf, NULL, 10);
640 641
	if (loading_timeout < 0)
		loading_timeout = 0;
642

L
Linus Torvalds 已提交
643 644
	return count;
}
645
static CLASS_ATTR_RW(timeout);
L
Linus Torvalds 已提交
646

647 648 649
static struct attribute *firmware_class_attrs[] = {
	&class_attr_timeout.attr,
	NULL,
650
};
651
ATTRIBUTE_GROUPS(firmware_class);
L
Linus Torvalds 已提交
652

653 654
static void fw_dev_release(struct device *dev)
{
655
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
656

657
	kfree(fw_sysfs);
658
}
L
Linus Torvalds 已提交
659

660
static int do_firmware_uevent(struct fw_sysfs *fw_sysfs, struct kobj_uevent_env *env)
L
Linus Torvalds 已提交
661
{
662
	if (add_uevent_var(env, "FIRMWARE=%s", fw_sysfs->fw_priv->fw_id))
L
Linus Torvalds 已提交
663
		return -ENOMEM;
664
	if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
665
		return -ENOMEM;
666
	if (add_uevent_var(env, "ASYNC=%d", fw_sysfs->nowait))
667
		return -ENOMEM;
L
Linus Torvalds 已提交
668 669 670 671

	return 0;
}

672 673
static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
{
674
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
675 676 677
	int err = 0;

	mutex_lock(&fw_lock);
678
	if (fw_sysfs->fw_priv)
679
		err = do_firmware_uevent(fw_sysfs, env);
680 681 682 683
	mutex_unlock(&fw_lock);
	return err;
}

684 685
static struct class firmware_class = {
	.name		= "firmware",
686
	.class_groups	= firmware_class_groups,
687 688
	.dev_uevent	= firmware_uevent,
	.dev_release	= fw_dev_release,
689 690
};

691 692 693 694 695 696 697 698 699 700
static inline int register_sysfs_loader(void)
{
	return class_register(&firmware_class);
}

static inline void unregister_sysfs_loader(void)
{
	class_unregister(&firmware_class);
}

701 702
static ssize_t firmware_loading_show(struct device *dev,
				     struct device_attribute *attr, char *buf)
L
Linus Torvalds 已提交
703
{
704
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
705 706 707
	int loading = 0;

	mutex_lock(&fw_lock);
708 709
	if (fw_sysfs->fw_priv)
		loading = fw_state_is_loading(&fw_sysfs->fw_priv->fw_st);
710
	mutex_unlock(&fw_lock);
711

L
Linus Torvalds 已提交
712 713 714
	return sprintf(buf, "%d\n", loading);
}

715 716 717 718
/* Some architectures don't have PAGE_KERNEL_RO */
#ifndef PAGE_KERNEL_RO
#define PAGE_KERNEL_RO PAGE_KERNEL
#endif
719 720

/* one pages buffer should be mapped/unmapped only once */
721
static int map_fw_priv_pages(struct fw_priv *fw_priv)
722
{
723
	if (!fw_priv->is_paged_buf)
724 725
		return 0;

726 727 728 729
	vunmap(fw_priv->data);
	fw_priv->data = vmap(fw_priv->pages, fw_priv->nr_pages, 0,
			     PAGE_KERNEL_RO);
	if (!fw_priv->data)
730 731 732 733
		return -ENOMEM;
	return 0;
}

L
Linus Torvalds 已提交
734
/**
735
 * firmware_loading_store - set value in the 'loading' control file
736
 * @dev: device pointer
737
 * @attr: device attribute pointer
738 739 740
 * @buf: buffer to scan for loading control value
 * @count: number of bytes in @buf
 *
L
Linus Torvalds 已提交
741 742 743
 *	The relevant values are:
 *
 *	 1: Start a load, discarding any previous partial load.
744
 *	 0: Conclude the load and hand the data to the driver code.
L
Linus Torvalds 已提交
745 746
 *	-1: Conclude the load with an error and discard any written data.
 **/
747 748 749
static ssize_t firmware_loading_store(struct device *dev,
				      struct device_attribute *attr,
				      const char *buf, size_t count)
L
Linus Torvalds 已提交
750
{
751
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
752
	struct fw_priv *fw_priv;
753
	ssize_t written = count;
L
Linus Torvalds 已提交
754
	int loading = simple_strtol(buf, NULL, 10);
755
	int i;
L
Linus Torvalds 已提交
756

757
	mutex_lock(&fw_lock);
758 759
	fw_priv = fw_sysfs->fw_priv;
	if (fw_state_is_aborted(&fw_priv->fw_st))
760 761
		goto out;

L
Linus Torvalds 已提交
762 763
	switch (loading) {
	case 1:
764
		/* discarding any previous partial load */
765 766 767 768 769 770 771 772
		if (!fw_state_is_done(&fw_priv->fw_st)) {
			for (i = 0; i < fw_priv->nr_pages; i++)
				__free_page(fw_priv->pages[i]);
			vfree(fw_priv->pages);
			fw_priv->pages = NULL;
			fw_priv->page_array_size = 0;
			fw_priv->nr_pages = 0;
			fw_state_start(&fw_priv->fw_st);
773
		}
L
Linus Torvalds 已提交
774 775
		break;
	case 0:
776
		if (fw_state_is_loading(&fw_priv->fw_st)) {
777 778
			int rc;

779 780 781 782 783 784
			/*
			 * Several loading requests may be pending on
			 * one same firmware buf, so let all requests
			 * see the mapped 'buf->data' once the loading
			 * is completed.
			 * */
785
			rc = map_fw_priv_pages(fw_priv);
786
			if (rc)
787 788
				dev_err(dev, "%s: map pages failed\n",
					__func__);
789
			else
790
				rc = security_kernel_post_read_file(NULL,
791
						fw_priv->data, fw_priv->size,
792
						READING_FIRMWARE);
793 794 795 796 797

			/*
			 * Same logic as fw_load_abort, only the DONE bit
			 * is ignored and we set ABORT only on failure.
			 */
798
			list_del_init(&fw_priv->pending_list);
799
			if (rc) {
800
				fw_state_aborted(&fw_priv->fw_st);
801
				written = rc;
D
Daniel Wagner 已提交
802
			} else {
803
				fw_state_done(&fw_priv->fw_st);
804
			}
L
Linus Torvalds 已提交
805 806 807 808
			break;
		}
		/* fallthrough */
	default:
809
		dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading);
L
Linus Torvalds 已提交
810 811
		/* fallthrough */
	case -1:
812
		fw_load_abort(fw_sysfs);
L
Linus Torvalds 已提交
813 814
		break;
	}
815 816
out:
	mutex_unlock(&fw_lock);
817
	return written;
L
Linus Torvalds 已提交
818 819
}

820
static DEVICE_ATTR(loading, 0644, firmware_loading_show, firmware_loading_store);
L
Linus Torvalds 已提交
821

822
static void firmware_rw_data(struct fw_priv *fw_priv, char *buffer,
823 824 825
			   loff_t offset, size_t count, bool read)
{
	if (read)
826
		memcpy(buffer, fw_priv->data + offset, count);
827
	else
828
		memcpy(fw_priv->data + offset, buffer, count);
829 830
}

831
static void firmware_rw(struct fw_priv *fw_priv, char *buffer,
832 833 834 835 836 837 838 839
			loff_t offset, size_t count, bool read)
{
	while (count) {
		void *page_data;
		int page_nr = offset >> PAGE_SHIFT;
		int page_ofs = offset & (PAGE_SIZE-1);
		int page_cnt = min_t(size_t, PAGE_SIZE - page_ofs, count);

840
		page_data = kmap(fw_priv->pages[page_nr]);
841 842 843 844 845 846

		if (read)
			memcpy(buffer, page_data + page_ofs, page_cnt);
		else
			memcpy(page_data + page_ofs, buffer, page_cnt);

847
		kunmap(fw_priv->pages[page_nr]);
848 849 850 851 852 853
		buffer += page_cnt;
		offset += page_cnt;
		count -= page_cnt;
	}
}

854 855 856
static ssize_t firmware_data_read(struct file *filp, struct kobject *kobj,
				  struct bin_attribute *bin_attr,
				  char *buffer, loff_t offset, size_t count)
L
Linus Torvalds 已提交
857
{
858
	struct device *dev = kobj_to_dev(kobj);
859
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
860
	struct fw_priv *fw_priv;
861
	ssize_t ret_count;
L
Linus Torvalds 已提交
862

863
	mutex_lock(&fw_lock);
864 865
	fw_priv = fw_sysfs->fw_priv;
	if (!fw_priv || fw_state_is_done(&fw_priv->fw_st)) {
L
Linus Torvalds 已提交
866 867 868
		ret_count = -ENODEV;
		goto out;
	}
869
	if (offset > fw_priv->size) {
870 871 872
		ret_count = 0;
		goto out;
	}
873 874
	if (count > fw_priv->size - offset)
		count = fw_priv->size - offset;
875 876 877

	ret_count = count;

878 879
	if (fw_priv->data)
		firmware_rw_data(fw_priv, buffer, offset, count, true);
880
	else
881
		firmware_rw(fw_priv, buffer, offset, count, true);
882

L
Linus Torvalds 已提交
883
out:
884
	mutex_unlock(&fw_lock);
L
Linus Torvalds 已提交
885 886
	return ret_count;
}
887

888
static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size)
L
Linus Torvalds 已提交
889
{
890
	struct fw_priv *fw_priv= fw_sysfs->fw_priv;
891
	int pages_needed = PAGE_ALIGN(min_size) >> PAGE_SHIFT;
892 893

	/* If the array of pages is too small, grow it... */
894
	if (fw_priv->page_array_size < pages_needed) {
895
		int new_array_size = max(pages_needed,
896
					 fw_priv->page_array_size * 2);
897 898
		struct page **new_pages;

899
		new_pages = vmalloc(new_array_size * sizeof(void *));
900
		if (!new_pages) {
901
			fw_load_abort(fw_sysfs);
902 903
			return -ENOMEM;
		}
904 905 906 907 908 909 910
		memcpy(new_pages, fw_priv->pages,
		       fw_priv->page_array_size * sizeof(void *));
		memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
		       (new_array_size - fw_priv->page_array_size));
		vfree(fw_priv->pages);
		fw_priv->pages = new_pages;
		fw_priv->page_array_size = new_array_size;
911
	}
L
Linus Torvalds 已提交
912

913 914
	while (fw_priv->nr_pages < pages_needed) {
		fw_priv->pages[fw_priv->nr_pages] =
915
			alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
L
Linus Torvalds 已提交
916

917
		if (!fw_priv->pages[fw_priv->nr_pages]) {
918
			fw_load_abort(fw_sysfs);
919 920
			return -ENOMEM;
		}
921
		fw_priv->nr_pages++;
L
Linus Torvalds 已提交
922 923 924 925 926
	}
	return 0;
}

/**
927
 * firmware_data_write - write method for firmware
928
 * @filp: open sysfs file
929
 * @kobj: kobject for the device
930
 * @bin_attr: bin_attr structure
931 932 933
 * @buffer: buffer being written
 * @offset: buffer offset for write in total data store area
 * @count: buffer size
L
Linus Torvalds 已提交
934
 *
935
 *	Data written to the 'data' attribute will be later handed to
L
Linus Torvalds 已提交
936 937
 *	the driver as a firmware image.
 **/
938 939 940
static ssize_t firmware_data_write(struct file *filp, struct kobject *kobj,
				   struct bin_attribute *bin_attr,
				   char *buffer, loff_t offset, size_t count)
L
Linus Torvalds 已提交
941
{
942
	struct device *dev = kobj_to_dev(kobj);
943
	struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
944
	struct fw_priv *fw_priv;
L
Linus Torvalds 已提交
945 946 947 948
	ssize_t retval;

	if (!capable(CAP_SYS_RAWIO))
		return -EPERM;
949

950
	mutex_lock(&fw_lock);
951 952
	fw_priv = fw_sysfs->fw_priv;
	if (!fw_priv || fw_state_is_done(&fw_priv->fw_st)) {
L
Linus Torvalds 已提交
953 954 955
		retval = -ENODEV;
		goto out;
	}
956

957 958
	if (fw_priv->data) {
		if (offset + count > fw_priv->allocated_size) {
959 960 961
			retval = -ENOMEM;
			goto out;
		}
962
		firmware_rw_data(fw_priv, buffer, offset, count, false);
963 964
		retval = count;
	} else {
965
		retval = fw_realloc_pages(fw_sysfs, offset + count);
966 967
		if (retval)
			goto out;
L
Linus Torvalds 已提交
968

969
		retval = count;
970
		firmware_rw(fw_priv, buffer, offset, count, false);
971
	}
972

973
	fw_priv->size = max_t(size_t, offset + count, fw_priv->size);
L
Linus Torvalds 已提交
974
out:
975
	mutex_unlock(&fw_lock);
L
Linus Torvalds 已提交
976 977
	return retval;
}
978

979 980
static struct bin_attribute firmware_attr_data = {
	.attr = { .name = "data", .mode = 0644 },
L
Linus Torvalds 已提交
981 982 983 984 985
	.size = 0,
	.read = firmware_data_read,
	.write = firmware_data_write,
};

986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005
static struct attribute *fw_dev_attrs[] = {
	&dev_attr_loading.attr,
	NULL
};

static struct bin_attribute *fw_dev_bin_attrs[] = {
	&firmware_attr_data,
	NULL
};

static const struct attribute_group fw_dev_attr_group = {
	.attrs = fw_dev_attrs,
	.bin_attrs = fw_dev_bin_attrs,
};

static const struct attribute_group *fw_dev_attr_groups[] = {
	&fw_dev_attr_group,
	NULL
};

1006
static struct fw_sysfs *
1007
fw_create_instance(struct firmware *firmware, const char *fw_name,
1008
		   struct device *device, unsigned int opt_flags)
L
Linus Torvalds 已提交
1009
{
1010
	struct fw_sysfs *fw_sysfs;
1011
	struct device *f_dev;
L
Linus Torvalds 已提交
1012

1013 1014 1015
	fw_sysfs = kzalloc(sizeof(*fw_sysfs), GFP_KERNEL);
	if (!fw_sysfs) {
		fw_sysfs = ERR_PTR(-ENOMEM);
1016 1017 1018
		goto exit;
	}

1019 1020 1021
	fw_sysfs->nowait = !!(opt_flags & FW_OPT_NOWAIT);
	fw_sysfs->fw = firmware;
	f_dev = &fw_sysfs->dev;
1022 1023

	device_initialize(f_dev);
1024
	dev_set_name(f_dev, "%s", fw_name);
1025 1026
	f_dev->parent = device;
	f_dev->class = &firmware_class;
1027
	f_dev->groups = fw_dev_attr_groups;
1028
exit:
1029
	return fw_sysfs;
L
Linus Torvalds 已提交
1030 1031
}

1032
/* load a firmware via user helper */
1033
static int _request_firmware_load(struct fw_sysfs *fw_sysfs,
1034
				  unsigned int opt_flags, long timeout)
1035
{
1036
	int retval = 0;
1037
	struct device *f_dev = &fw_sysfs->dev;
1038
	struct fw_priv *fw_priv = fw_sysfs->fw_priv;
1039

1040
	/* fall back on userspace loading */
1041 1042
	if (!fw_priv->data)
		fw_priv->is_paged_buf = true;
1043

1044
	dev_set_uevent_suppress(f_dev, true);
1045

1046 1047 1048 1049 1050
	retval = device_add(f_dev);
	if (retval) {
		dev_err(f_dev, "%s: device_register failed\n", __func__);
		goto err_put_dev;
	}
1051

1052
	mutex_lock(&fw_lock);
1053
	list_add(&fw_priv->pending_list, &pending_fw_head);
1054 1055
	mutex_unlock(&fw_lock);

1056
	if (opt_flags & FW_OPT_UEVENT) {
1057
		fw_priv->need_uevent = true;
1058
		dev_set_uevent_suppress(f_dev, false);
1059
		dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
1060
		kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD);
1061 1062
	} else {
		timeout = MAX_JIFFY_OFFSET;
1063
	}
1064

1065
	retval = fw_state_wait_timeout(&fw_priv->fw_st, timeout);
1066
	if (retval < 0) {
1067
		mutex_lock(&fw_lock);
1068
		fw_load_abort(fw_sysfs);
1069 1070
		mutex_unlock(&fw_lock);
	}
1071

1072
	if (fw_state_is_aborted(&fw_priv->fw_st)) {
1073 1074 1075 1076
		if (retval == -ERESTARTSYS)
			retval = -EINTR;
		else
			retval = -EAGAIN;
1077
	} else if (fw_priv->is_paged_buf && !fw_priv->data)
1078
		retval = -ENOMEM;
1079

1080 1081 1082 1083
	device_del(f_dev);
err_put_dev:
	put_device(f_dev);
	return retval;
1084
}
1085 1086 1087

static int fw_load_from_user_helper(struct firmware *firmware,
				    const char *name, struct device *device,
1088
				    unsigned int opt_flags)
1089
{
1090
	struct fw_sysfs *fw_sysfs;
1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
	long timeout;
	int ret;

	timeout = firmware_loading_timeout();
	if (opt_flags & FW_OPT_NOWAIT) {
		timeout = usermodehelper_read_lock_wait(timeout);
		if (!timeout) {
			dev_dbg(device, "firmware: %s loading timed out\n",
				name);
			return -EBUSY;
		}
	} else {
		ret = usermodehelper_read_trylock();
		if (WARN_ON(ret)) {
			dev_err(device, "firmware: %s will not be loaded\n",
				name);
			return ret;
		}
	}
1110

1111 1112 1113
	fw_sysfs = fw_create_instance(firmware, name, device, opt_flags);
	if (IS_ERR(fw_sysfs)) {
		ret = PTR_ERR(fw_sysfs);
1114 1115
		goto out_unlock;
	}
1116

1117
	fw_sysfs->fw_priv = firmware->priv;
1118
	ret = _request_firmware_load(fw_sysfs, opt_flags, timeout);
1119 1120

	if (!ret)
1121
		ret = assign_fw(firmware, device, opt_flags);
1122 1123 1124 1125 1126

out_unlock:
	usermodehelper_read_unlock();

	return ret;
1127
}
1128

1129 1130 1131
#else /* CONFIG_FW_LOADER_USER_HELPER */
static inline int
fw_load_from_user_helper(struct firmware *firmware, const char *name,
1132
			 struct device *device, unsigned int opt_flags)
1133 1134 1135
{
	return -ENOENT;
}
1136

1137
static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { }
1138

1139 1140 1141 1142 1143 1144 1145 1146 1147
static inline int register_sysfs_loader(void)
{
	return 0;
}

static inline void unregister_sysfs_loader(void)
{
}

1148 1149
#endif /* CONFIG_FW_LOADER_USER_HELPER */

1150 1151 1152 1153 1154 1155
/* prepare firmware and firmware_buf structs;
 * return 0 if a firmware is already assigned, 1 if need to load one,
 * or a negative error code
 */
static int
_request_firmware_prepare(struct firmware **firmware_p, const char *name,
1156
			  struct device *device, void *dbuf, size_t size)
L
Linus Torvalds 已提交
1157 1158
{
	struct firmware *firmware;
1159
	struct fw_priv *fw_priv;
1160
	int ret;
L
Linus Torvalds 已提交
1161

1162
	*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
L
Linus Torvalds 已提交
1163
	if (!firmware) {
1164 1165
		dev_err(device, "%s: kmalloc(struct firmware) failed\n",
			__func__);
1166
		return -ENOMEM;
L
Linus Torvalds 已提交
1167 1168
	}

1169
	if (fw_get_builtin_firmware(firmware, name, dbuf, size)) {
1170
		dev_dbg(device, "using built-in %s\n", name);
1171
		return 0; /* assigned */
1172 1173
	}

1174
	ret = alloc_lookup_fw_priv(name, &fw_cache, &fw_priv, dbuf, size);
1175 1176

	/*
1177
	 * bind with 'priv' now to avoid warning in failure path
1178 1179
	 * of requesting firmware.
	 */
1180
	firmware->priv = fw_priv;
1181 1182

	if (ret > 0) {
1183
		ret = fw_state_wait(&fw_priv->fw_st);
1184
		if (!ret) {
1185
			fw_set_page_data(fw_priv, firmware);
1186 1187
			return 0; /* assigned */
		}
1188
	}
1189

1190 1191 1192 1193 1194
	if (ret < 0)
		return ret;
	return 1; /* need to load */
}

1195 1196 1197 1198 1199 1200
/*
 * Batched requests need only one wake, we need to do this step last due to the
 * fallback mechanism. The buf is protected with kref_get(), and it won't be
 * released until the last user calls release_firmware().
 *
 * Failed batched requests are possible as well, in such cases we just share
1201
 * the struct fw_priv and won't release it until all requests are woken
1202 1203 1204 1205
 * and have gone through this same path.
 */
static void fw_abort_batch_reqs(struct firmware *fw)
{
1206
	struct fw_priv *fw_priv;
1207 1208 1209 1210 1211

	/* Loaded directly? */
	if (!fw || !fw->priv)
		return;

1212 1213 1214
	fw_priv = fw->priv;
	if (!fw_state_is_aborted(&fw_priv->fw_st))
		fw_state_aborted(&fw_priv->fw_st);
1215 1216
}

1217 1218 1219
/* called from request_firmware() and request_firmware_work_func() */
static int
_request_firmware(const struct firmware **firmware_p, const char *name,
1220 1221
		  struct device *device, void *buf, size_t size,
		  unsigned int opt_flags)
1222
{
1223
	struct firmware *fw = NULL;
1224 1225 1226 1227 1228
	int ret;

	if (!firmware_p)
		return -EINVAL;

1229 1230 1231 1232
	if (!name || name[0] == '\0') {
		ret = -EINVAL;
		goto out;
	}
1233

1234
	ret = _request_firmware_prepare(&fw, name, device, buf, size);
1235 1236 1237
	if (ret <= 0) /* error or already assigned */
		goto out;

1238 1239
	ret = fw_get_filesystem_firmware(device, fw->priv);
	if (ret) {
1240
		if (!(opt_flags & FW_OPT_NO_WARN))
1241
			dev_warn(device,
1242 1243 1244
				 "Direct firmware load for %s failed with error %d\n",
				 name, ret);
		if (opt_flags & FW_OPT_USERHELPER) {
1245 1246
			dev_warn(device, "Falling back to user helper\n");
			ret = fw_load_from_user_helper(fw, name, device,
1247
						       opt_flags);
1248
		}
1249
	} else
1250
		ret = assign_fw(fw, device, opt_flags);
1251 1252 1253

 out:
	if (ret < 0) {
1254
		fw_abort_batch_reqs(fw);
1255 1256 1257 1258 1259 1260 1261 1262
		release_firmware(fw);
		fw = NULL;
	}

	*firmware_p = fw;
	return ret;
}

1263
/**
1264
 * request_firmware: - send firmware request and wait for it
1265 1266 1267 1268 1269
 * @firmware_p: pointer to firmware image
 * @name: name of firmware file
 * @device: device for which firmware is being loaded
 *
 *      @firmware_p will be used to return a firmware image by the name
1270 1271 1272 1273
 *      of @name for device @device.
 *
 *      Should be called from user context where sleeping is allowed.
 *
1274
 *      @name will be used as $FIRMWARE in the uevent environment and
1275 1276
 *      should be distinctive enough not to be confused with any other
 *      firmware image for this or any other device.
M
Ming Lei 已提交
1277 1278
 *
 *	Caller must hold the reference count of @device.
1279 1280 1281
 *
 *	The function can be called safely inside device's suspend and
 *	resume callback.
1282 1283 1284
 **/
int
request_firmware(const struct firmware **firmware_p, const char *name,
1285
		 struct device *device)
1286
{
1287 1288 1289 1290
	int ret;

	/* Need to pin this module until return */
	__module_get(THIS_MODULE);
1291
	ret = _request_firmware(firmware_p, name, device, NULL, 0,
1292
				FW_OPT_UEVENT | FW_OPT_FALLBACK);
1293 1294
	module_put(THIS_MODULE);
	return ret;
1295
}
1296
EXPORT_SYMBOL(request_firmware);
1297

1298
/**
1299
 * request_firmware_direct: - load firmware directly without usermode helper
1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312
 * @firmware_p: pointer to firmware image
 * @name: name of firmware file
 * @device: device for which firmware is being loaded
 *
 * This function works pretty much like request_firmware(), but this doesn't
 * fall back to usermode helper even if the firmware couldn't be loaded
 * directly from fs.  Hence it's useful for loading optional firmwares, which
 * aren't always present, without extra long timeouts of udev.
 **/
int request_firmware_direct(const struct firmware **firmware_p,
			    const char *name, struct device *device)
{
	int ret;
1313

1314
	__module_get(THIS_MODULE);
1315
	ret = _request_firmware(firmware_p, name, device, NULL, 0,
1316
				FW_OPT_UEVENT | FW_OPT_NO_WARN);
1317 1318 1319 1320 1321
	module_put(THIS_MODULE);
	return ret;
}
EXPORT_SYMBOL_GPL(request_firmware_direct);

1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351
/**
 * request_firmware_into_buf - load firmware into a previously allocated buffer
 * @firmware_p: pointer to firmware image
 * @name: name of firmware file
 * @device: device for which firmware is being loaded and DMA region allocated
 * @buf: address of buffer to load firmware into
 * @size: size of buffer
 *
 * This function works pretty much like request_firmware(), but it doesn't
 * allocate a buffer to hold the firmware data. Instead, the firmware
 * is loaded directly into the buffer pointed to by @buf and the @firmware_p
 * data member is pointed at @buf.
 *
 * This function doesn't cache firmware either.
 */
int
request_firmware_into_buf(const struct firmware **firmware_p, const char *name,
			  struct device *device, void *buf, size_t size)
{
	int ret;

	__module_get(THIS_MODULE);
	ret = _request_firmware(firmware_p, name, device, buf, size,
				FW_OPT_UEVENT | FW_OPT_FALLBACK |
				FW_OPT_NOCACHE);
	module_put(THIS_MODULE);
	return ret;
}
EXPORT_SYMBOL(request_firmware_into_buf);

L
Linus Torvalds 已提交
1352 1353
/**
 * release_firmware: - release the resource associated with a firmware image
1354
 * @fw: firmware resource to release
L
Linus Torvalds 已提交
1355
 **/
1356
void release_firmware(const struct firmware *fw)
L
Linus Torvalds 已提交
1357 1358
{
	if (fw) {
1359 1360
		if (!fw_is_builtin_firmware(fw))
			firmware_free_data(fw);
L
Linus Torvalds 已提交
1361 1362 1363
		kfree(fw);
	}
}
1364
EXPORT_SYMBOL(release_firmware);
L
Linus Torvalds 已提交
1365 1366 1367 1368 1369 1370 1371 1372 1373

/* Async support */
struct firmware_work {
	struct work_struct work;
	struct module *module;
	const char *name;
	struct device *device;
	void *context;
	void (*cont)(const struct firmware *fw, void *context);
1374
	unsigned int opt_flags;
L
Linus Torvalds 已提交
1375 1376
};

1377
static void request_firmware_work_func(struct work_struct *work)
L
Linus Torvalds 已提交
1378
{
1379
	struct firmware_work *fw_work;
L
Linus Torvalds 已提交
1380
	const struct firmware *fw;
1381

1382
	fw_work = container_of(work, struct firmware_work, work);
1383

1384
	_request_firmware(&fw, fw_work->name, fw_work->device, NULL, 0,
1385
			  fw_work->opt_flags);
1386
	fw_work->cont(fw, fw_work->context);
1387
	put_device(fw_work->device); /* taken in request_firmware_nowait() */
1388

L
Linus Torvalds 已提交
1389
	module_put(fw_work->module);
1390
	kfree_const(fw_work->name);
L
Linus Torvalds 已提交
1391 1392 1393 1394
	kfree(fw_work);
}

/**
1395
 * request_firmware_nowait - asynchronous version of request_firmware
1396
 * @module: module requesting the firmware
1397
 * @uevent: sends uevent to copy the firmware image if this flag
1398 1399 1400
 *	is non-zero else the firmware copy must be done manually.
 * @name: name of firmware file
 * @device: device for which firmware is being loaded
1401
 * @gfp: allocation flags
1402 1403 1404 1405
 * @context: will be passed over to @cont, and
 *	@fw may be %NULL if firmware request fails.
 * @cont: function will be called asynchronously when the firmware
 *	request is over.
L
Linus Torvalds 已提交
1406
 *
M
Ming Lei 已提交
1407 1408
 *	Caller must hold the reference count of @device.
 *
1409 1410
 *	Asynchronous variant of request_firmware() for user contexts:
 *		- sleep for as small periods as possible since it may
1411 1412 1413
 *		  increase kernel boot time of built-in device drivers
 *		  requesting firmware in their ->probe() methods, if
 *		  @gfp is GFP_KERNEL.
1414 1415
 *
 *		- can't sleep at all if @gfp is GFP_ATOMIC.
L
Linus Torvalds 已提交
1416 1417 1418
 **/
int
request_firmware_nowait(
1419
	struct module *module, bool uevent,
1420
	const char *name, struct device *device, gfp_t gfp, void *context,
L
Linus Torvalds 已提交
1421 1422
	void (*cont)(const struct firmware *fw, void *context))
{
1423
	struct firmware_work *fw_work;
L
Linus Torvalds 已提交
1424

1425
	fw_work = kzalloc(sizeof(struct firmware_work), gfp);
L
Linus Torvalds 已提交
1426 1427
	if (!fw_work)
		return -ENOMEM;
1428 1429

	fw_work->module = module;
1430
	fw_work->name = kstrdup_const(name, gfp);
1431 1432
	if (!fw_work->name) {
		kfree(fw_work);
1433
		return -ENOMEM;
1434
	}
1435 1436 1437
	fw_work->device = device;
	fw_work->context = context;
	fw_work->cont = cont;
1438
	fw_work->opt_flags = FW_OPT_NOWAIT | FW_OPT_FALLBACK |
1439
		(uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
1440

L
Linus Torvalds 已提交
1441
	if (!try_module_get(module)) {
1442
		kfree_const(fw_work->name);
L
Linus Torvalds 已提交
1443 1444 1445 1446
		kfree(fw_work);
		return -EFAULT;
	}

M
Ming Lei 已提交
1447
	get_device(fw_work->device);
1448 1449
	INIT_WORK(&fw_work->work, request_firmware_work_func);
	schedule_work(&fw_work->work);
L
Linus Torvalds 已提交
1450 1451
	return 0;
}
1452
EXPORT_SYMBOL(request_firmware_nowait);
L
Linus Torvalds 已提交
1453

1454 1455 1456
#ifdef CONFIG_PM_SLEEP
static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);

1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470
/**
 * cache_firmware - cache one firmware image in kernel memory space
 * @fw_name: the firmware image name
 *
 * Cache firmware in kernel memory so that drivers can use it when
 * system isn't ready for them to request firmware image from userspace.
 * Once it returns successfully, driver can use request_firmware or its
 * nowait version to get the cached firmware without any interacting
 * with userspace
 *
 * Return 0 if the firmware image has been cached successfully
 * Return !0 otherwise
 *
 */
1471
static int cache_firmware(const char *fw_name)
1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486
{
	int ret;
	const struct firmware *fw;

	pr_debug("%s: %s\n", __func__, fw_name);

	ret = request_firmware(&fw, fw_name, NULL);
	if (!ret)
		kfree(fw);

	pr_debug("%s: %s ret=%d\n", __func__, fw_name, ret);

	return ret;
}

1487
static struct fw_priv *lookup_fw_priv(const char *fw_name)
1488
{
1489
	struct fw_priv *tmp;
1490 1491 1492
	struct firmware_cache *fwc = &fw_cache;

	spin_lock(&fwc->lock);
1493
	tmp = __lookup_fw_priv(fw_name);
1494 1495 1496 1497 1498
	spin_unlock(&fwc->lock);

	return tmp;
}

1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509
/**
 * uncache_firmware - remove one cached firmware image
 * @fw_name: the firmware image name
 *
 * Uncache one firmware image which has been cached successfully
 * before.
 *
 * Return 0 if the firmware cache has been removed successfully
 * Return !0 otherwise
 *
 */
1510
static int uncache_firmware(const char *fw_name)
1511
{
1512
	struct fw_priv *fw_priv;
1513 1514 1515 1516
	struct firmware fw;

	pr_debug("%s: %s\n", __func__, fw_name);

1517
	if (fw_get_builtin_firmware(&fw, fw_name, NULL, 0))
1518 1519
		return 0;

1520 1521 1522
	fw_priv = lookup_fw_priv(fw_name);
	if (fw_priv) {
		free_fw_priv(fw_priv);
1523 1524 1525 1526 1527 1528
		return 0;
	}

	return -EINVAL;
}

1529 1530 1531 1532
static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
{
	struct fw_cache_entry *fce;

1533
	fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
1534 1535 1536
	if (!fce)
		goto exit;

1537 1538 1539 1540 1541 1542
	fce->name = kstrdup_const(name, GFP_ATOMIC);
	if (!fce->name) {
		kfree(fce);
		fce = NULL;
		goto exit;
	}
1543 1544 1545 1546
exit:
	return fce;
}

1547
static int __fw_entry_found(const char *name)
1548 1549 1550 1551 1552 1553
{
	struct firmware_cache *fwc = &fw_cache;
	struct fw_cache_entry *fce;

	list_for_each_entry(fce, &fwc->fw_names, list) {
		if (!strcmp(fce->name, name))
1554
			return 1;
1555
	}
1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567
	return 0;
}

static int fw_cache_piggyback_on_request(const char *name)
{
	struct firmware_cache *fwc = &fw_cache;
	struct fw_cache_entry *fce;
	int ret = 0;

	spin_lock(&fwc->name_lock);
	if (__fw_entry_found(name))
		goto found;
1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579

	fce = alloc_fw_cache_entry(name);
	if (fce) {
		ret = 1;
		list_add(&fce->list, &fwc->fw_names);
		pr_debug("%s: fw: %s\n", __func__, name);
	}
found:
	spin_unlock(&fwc->name_lock);
	return ret;
}

1580 1581
static void free_fw_cache_entry(struct fw_cache_entry *fce)
{
1582
	kfree_const(fce->name);
1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593
	kfree(fce);
}

static void __async_dev_cache_fw_image(void *fw_entry,
				       async_cookie_t cookie)
{
	struct fw_cache_entry *fce = fw_entry;
	struct firmware_cache *fwc = &fw_cache;
	int ret;

	ret = cache_firmware(fce->name);
1594 1595 1596 1597
	if (ret) {
		spin_lock(&fwc->name_lock);
		list_del(&fce->list);
		spin_unlock(&fwc->name_lock);
1598

1599 1600
		free_fw_cache_entry(fce);
	}
1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623
}

/* called with dev->devres_lock held */
static void dev_create_fw_entry(struct device *dev, void *res,
				void *data)
{
	struct fw_name_devm *fwn = res;
	const char *fw_name = fwn->name;
	struct list_head *head = data;
	struct fw_cache_entry *fce;

	fce = alloc_fw_cache_entry(fw_name);
	if (fce)
		list_add(&fce->list, head);
}

static int devm_name_match(struct device *dev, void *res,
			   void *match_data)
{
	struct fw_name_devm *fwn = res;
	return (fwn->magic == (unsigned long)match_data);
}

1624
static void dev_cache_fw_image(struct device *dev, void *data)
1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638
{
	LIST_HEAD(todo);
	struct fw_cache_entry *fce;
	struct fw_cache_entry *fce_next;
	struct firmware_cache *fwc = &fw_cache;

	devres_for_each_res(dev, fw_name_devm_release,
			    devm_name_match, &fw_cache,
			    dev_create_fw_entry, &todo);

	list_for_each_entry_safe(fce, fce_next, &todo, list) {
		list_del(&fce->list);

		spin_lock(&fwc->name_lock);
1639 1640 1641 1642 1643 1644 1645
		/* only one cache entry for one firmware */
		if (!__fw_entry_found(fce->name)) {
			list_add(&fce->list, &fwc->fw_names);
		} else {
			free_fw_cache_entry(fce);
			fce = NULL;
		}
1646 1647
		spin_unlock(&fwc->name_lock);

1648
		if (fce)
1649 1650 1651
			async_schedule_domain(__async_dev_cache_fw_image,
					      (void *)fce,
					      &fw_cache_domain);
1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687
	}
}

static void __device_uncache_fw_images(void)
{
	struct firmware_cache *fwc = &fw_cache;
	struct fw_cache_entry *fce;

	spin_lock(&fwc->name_lock);
	while (!list_empty(&fwc->fw_names)) {
		fce = list_entry(fwc->fw_names.next,
				struct fw_cache_entry, list);
		list_del(&fce->list);
		spin_unlock(&fwc->name_lock);

		uncache_firmware(fce->name);
		free_fw_cache_entry(fce);

		spin_lock(&fwc->name_lock);
	}
	spin_unlock(&fwc->name_lock);
}

/**
 * device_cache_fw_images - cache devices' firmware
 *
 * If one device called request_firmware or its nowait version
 * successfully before, the firmware names are recored into the
 * device's devres link list, so device_cache_fw_images can call
 * cache_firmware() to cache these firmwares for the device,
 * then the device driver can load its firmwares easily at
 * time when system is not ready to complete loading firmware.
 */
static void device_cache_fw_images(void)
{
	struct firmware_cache *fwc = &fw_cache;
1688
	int old_timeout;
1689 1690 1691 1692
	DEFINE_WAIT(wait);

	pr_debug("%s\n", __func__);

1693 1694 1695
	/* cancel uncache work */
	cancel_delayed_work_sync(&fwc->work);

1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706
	/*
	 * use small loading timeout for caching devices' firmware
	 * because all these firmware images have been loaded
	 * successfully at lease once, also system is ready for
	 * completing firmware loading now. The maximum size of
	 * firmware in current distributions is about 2M bytes,
	 * so 10 secs should be enough.
	 */
	old_timeout = loading_timeout;
	loading_timeout = 10;

1707 1708
	mutex_lock(&fw_lock);
	fwc->state = FW_LOADER_START_CACHE;
1709
	dpm_for_each_dev(NULL, dev_cache_fw_image);
1710
	mutex_unlock(&fw_lock);
1711 1712

	/* wait for completion of caching firmware for all devices */
1713
	async_synchronize_full_domain(&fw_cache_domain);
1714 1715

	loading_timeout = old_timeout;
1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743
}

/**
 * device_uncache_fw_images - uncache devices' firmware
 *
 * uncache all firmwares which have been cached successfully
 * by device_uncache_fw_images earlier
 */
static void device_uncache_fw_images(void)
{
	pr_debug("%s\n", __func__);
	__device_uncache_fw_images();
}

static void device_uncache_fw_images_work(struct work_struct *work)
{
	device_uncache_fw_images();
}

/**
 * device_uncache_fw_images_delay - uncache devices firmwares
 * @delay: number of milliseconds to delay uncache device firmwares
 *
 * uncache all devices's firmwares which has been cached successfully
 * by device_cache_fw_images after @delay milliseconds.
 */
static void device_uncache_fw_images_delay(unsigned long delay)
{
1744 1745
	queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
			   msecs_to_jiffies(delay));
1746 1747
}

1748 1749 1750 1751 1752 1753
static int fw_pm_notify(struct notifier_block *notify_block,
			unsigned long mode, void *unused)
{
	switch (mode) {
	case PM_HIBERNATION_PREPARE:
	case PM_SUSPEND_PREPARE:
1754
	case PM_RESTORE_PREPARE:
1755 1756 1757 1758 1759
		/*
		 * kill pending fallback requests with a custom fallback
		 * to avoid stalling suspend.
		 */
		kill_pending_fw_fallback_reqs(true);
1760 1761 1762 1763 1764 1765
		device_cache_fw_images();
		break;

	case PM_POST_SUSPEND:
	case PM_POST_HIBERNATION:
	case PM_POST_RESTORE:
1766 1767 1768 1769 1770 1771 1772 1773
		/*
		 * In case that system sleep failed and syscore_suspend is
		 * not called.
		 */
		mutex_lock(&fw_lock);
		fw_cache.state = FW_LOADER_NO_CACHE;
		mutex_unlock(&fw_lock);

1774 1775 1776 1777 1778 1779 1780
		device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
		break;
	}

	return 0;
}

1781 1782 1783 1784 1785 1786 1787 1788 1789 1790
/* stop caching firmware once syscore_suspend is reached */
static int fw_suspend(void)
{
	fw_cache.state = FW_LOADER_NO_CACHE;
	return 0;
}

static struct syscore_ops fw_syscore_ops = {
	.suspend = fw_suspend,
};
1791

1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811
static int __init register_fw_pm_ops(void)
{
	int ret;

	spin_lock_init(&fw_cache.name_lock);
	INIT_LIST_HEAD(&fw_cache.fw_names);

	INIT_DELAYED_WORK(&fw_cache.work,
			  device_uncache_fw_images_work);

	fw_cache.pm_notify.notifier_call = fw_pm_notify;
	ret = register_pm_notifier(&fw_cache.pm_notify);
	if (ret)
		return ret;

	register_syscore_ops(&fw_syscore_ops);

	return ret;
}

1812 1813 1814 1815 1816
static inline void unregister_fw_pm_ops(void)
{
	unregister_syscore_ops(&fw_syscore_ops);
	unregister_pm_notifier(&fw_cache.pm_notify);
}
1817 1818 1819 1820 1821
#else
static int fw_cache_piggyback_on_request(const char *name)
{
	return 0;
}
1822 1823 1824 1825
static inline int register_fw_pm_ops(void)
{
	return 0;
}
1826 1827 1828
static inline void unregister_fw_pm_ops(void)
{
}
1829
#endif
1830

1831 1832 1833 1834
static void __init fw_cache_init(void)
{
	spin_lock_init(&fw_cache.lock);
	INIT_LIST_HEAD(&fw_cache.head);
1835
	fw_cache.state = FW_LOADER_NO_CACHE;
1836 1837
}

1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853
static int fw_shutdown_notify(struct notifier_block *unused1,
			      unsigned long unused2, void *unused3)
{
	/*
	 * Kill all pending fallback requests to avoid both stalling shutdown,
	 * and avoid a deadlock with the usermode_lock.
	 */
	kill_pending_fw_fallback_reqs(false);

	return NOTIFY_DONE;
}

static struct notifier_block fw_shutdown_nb = {
	.notifier_call = fw_shutdown_notify,
};

1854
static int __init firmware_class_init(void)
L
Linus Torvalds 已提交
1855
{
1856 1857 1858
	int ret;

	/* No need to unfold these on exit */
1859
	fw_cache_init();
1860 1861 1862 1863 1864

	ret = register_fw_pm_ops();
	if (ret)
		return ret;

1865 1866 1867 1868
	ret = register_reboot_notifier(&fw_shutdown_nb);
	if (ret)
		goto out;

1869
	return register_sysfs_loader();
1870 1871 1872 1873

out:
	unregister_fw_pm_ops();
	return ret;
L
Linus Torvalds 已提交
1874
}
1875 1876

static void __exit firmware_class_exit(void)
L
Linus Torvalds 已提交
1877
{
1878
	unregister_fw_pm_ops();
1879
	unregister_reboot_notifier(&fw_shutdown_nb);
1880
	unregister_sysfs_loader();
L
Linus Torvalds 已提交
1881 1882
}

1883
fs_initcall(firmware_class_init);
L
Linus Torvalds 已提交
1884
module_exit(firmware_class_exit);