linux/drivers/base/firmware_class.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * firmware_class.c - Multi purpose firmware loading support
   4 *
   5 * Copyright (c) 2003 Manuel Estrada Sainz
   6 *
   7 * Please see Documentation/firmware_class/ for more information.
   8 *
   9 */
  10
  11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  12
  13#include <linux/capability.h>
  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>
  21#include <linux/mutex.h>
  22#include <linux/workqueue.h>
  23#include <linux/highmem.h>
  24#include <linux/firmware.h>
  25#include <linux/slab.h>
  26#include <linux/sched.h>
  27#include <linux/file.h>
  28#include <linux/list.h>
  29#include <linux/fs.h>
  30#include <linux/async.h>
  31#include <linux/pm.h>
  32#include <linux/suspend.h>
  33#include <linux/syscore_ops.h>
  34#include <linux/reboot.h>
  35#include <linux/security.h>
  36
  37#include <generated/utsrelease.h>
  38
  39#include "base.h"
  40
  41MODULE_AUTHOR("Manuel Estrada Sainz");
  42MODULE_DESCRIPTION("Multi purpose firmware loading support");
  43MODULE_LICENSE("GPL");
  44
  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)
  65#define FW_OPT_USERHELPER       (1U << 2)
  66#define FW_OPT_NO_WARN  (1U << 3)
  67#define FW_OPT_NOCACHE  (1U << 4)
  68#define FW_OPT_NOFALLBACK (1U << 5)
  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
 121static inline struct fw_priv *to_fw_priv(struct kref *ref)
 122{
 123        return container_of(ref, struct fw_priv, ref);
 124}
 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
 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
 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
 150static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
 151                                    void *buf, size_t size)
 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;
 159                        fw_copy_to_prealloc_buf(fw, buf, size);
 160
 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
 181static inline bool fw_get_builtin_firmware(struct firmware *fw,
 182                                           const char *name, void *buf,
 183                                           size_t size)
 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
 194static int loading_timeout = 60;        /* In seconds */
 195
 196static inline long firmware_loading_timeout(void)
 197{
 198        return loading_timeout > 0 ? loading_timeout * HZ : MAX_JIFFY_OFFSET;
 199}
 200
 201static void fw_state_init(struct fw_priv *fw_priv)
 202{
 203        struct fw_state *fw_st = &fw_priv->fw_st;
 204
 205        init_completion(&fw_st->completion);
 206        fw_st->status = FW_STATUS_UNKNOWN;
 207}
 208
 209static int __fw_state_wait_common(struct fw_priv *fw_priv, long timeout)
 210{
 211        struct fw_state *fw_st = &fw_priv->fw_st;
 212        long ret;
 213
 214        ret = wait_for_completion_killable_timeout(&fw_st->completion, timeout);
 215        if (ret != 0 && fw_st->status == FW_STATUS_ABORTED)
 216                return -ENOENT;
 217        if (!ret)
 218                return -ETIMEDOUT;
 219
 220        return ret < 0 ? ret : 0;
 221}
 222
 223static void __fw_state_set(struct fw_priv *fw_priv,
 224                           enum fw_status status)
 225{
 226        struct fw_state *fw_st = &fw_priv->fw_st;
 227
 228        WRITE_ONCE(fw_st->status, status);
 229
 230        if (status == FW_STATUS_DONE || status == FW_STATUS_ABORTED)
 231                complete_all(&fw_st->completion);
 232}
 233
 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}
 253
 254static bool __fw_state_check(struct fw_priv *fw_priv,
 255                             enum fw_status status)
 256{
 257        struct fw_state *fw_st = &fw_priv->fw_st;
 258
 259        return fw_st->status == status;
 260}
 261
 262static inline bool fw_state_is_aborted(struct fw_priv *fw_priv)
 263{
 264        return __fw_state_check(fw_priv, FW_STATUS_ABORTED);
 265}
 266
 267#ifdef CONFIG_FW_LOADER_USER_HELPER
 268
 269static inline bool fw_sysfs_done(struct fw_priv *fw_priv)
 270{
 271        return __fw_state_check(fw_priv, FW_STATUS_DONE);
 272}
 273
 274static inline bool fw_sysfs_loading(struct fw_priv *fw_priv)
 275{
 276        return __fw_state_check(fw_priv, FW_STATUS_LOADING);
 277}
 278
 279static inline int fw_sysfs_wait_timeout(struct fw_priv *fw_priv,  long timeout)
 280{
 281        return __fw_state_wait_common(fw_priv, timeout);
 282}
 283
 284#endif /* CONFIG_FW_LOADER_USER_HELPER */
 285
 286static int fw_cache_piggyback_on_request(const char *name);
 287
 288static struct fw_priv *__allocate_fw_priv(const char *fw_name,
 289                                          struct firmware_cache *fwc,
 290                                          void *dbuf, size_t size)
 291{
 292        struct fw_priv *fw_priv;
 293
 294        fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
 295        if (!fw_priv)
 296                return NULL;
 297
 298        fw_priv->fw_name = kstrdup_const(fw_name, GFP_ATOMIC);
 299        if (!fw_priv->fw_name) {
 300                kfree(fw_priv);
 301                return NULL;
 302        }
 303
 304        kref_init(&fw_priv->ref);
 305        fw_priv->fwc = fwc;
 306        fw_priv->data = dbuf;
 307        fw_priv->allocated_size = size;
 308        fw_state_init(fw_priv);
 309#ifdef CONFIG_FW_LOADER_USER_HELPER
 310        INIT_LIST_HEAD(&fw_priv->pending_list);
 311#endif
 312
 313        pr_debug("%s: fw-%s fw_priv=%p\n", __func__, fw_name, fw_priv);
 314
 315        return fw_priv;
 316}
 317
 318static struct fw_priv *__lookup_fw_priv(const char *fw_name)
 319{
 320        struct fw_priv *tmp;
 321        struct firmware_cache *fwc = &fw_cache;
 322
 323        list_for_each_entry(tmp, &fwc->head, list)
 324                if (!strcmp(tmp->fw_name, fw_name))
 325                        return tmp;
 326        return NULL;
 327}
 328
 329/* Returns 1 for batching firmware requests with the same name */
 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)
 334{
 335        struct fw_priv *tmp;
 336
 337        spin_lock(&fwc->lock);
 338        tmp = __lookup_fw_priv(fw_name);
 339        if (tmp) {
 340                kref_get(&tmp->ref);
 341                spin_unlock(&fwc->lock);
 342                *fw_priv = tmp;
 343                pr_debug("batched request - sharing the same struct fw_priv and lookup for multiple requests\n");
 344                return 1;
 345        }
 346        tmp = __allocate_fw_priv(fw_name, fwc, dbuf, size);
 347        if (tmp)
 348                list_add(&tmp->list, &fwc->head);
 349        spin_unlock(&fwc->lock);
 350
 351        *fw_priv = tmp;
 352
 353        return tmp ? 0 : -ENOMEM;
 354}
 355
 356static void __free_fw_priv(struct kref *ref)
 357        __releases(&fwc->lock)
 358{
 359        struct fw_priv *fw_priv = to_fw_priv(ref);
 360        struct firmware_cache *fwc = fw_priv->fwc;
 361
 362        pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
 363                 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
 364                 (unsigned int)fw_priv->size);
 365
 366        list_del(&fw_priv->list);
 367        spin_unlock(&fwc->lock);
 368
 369#ifdef CONFIG_FW_LOADER_USER_HELPER
 370        if (fw_priv->is_paged_buf) {
 371                int i;
 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);
 376        } else
 377#endif
 378        if (!fw_priv->allocated_size)
 379                vfree(fw_priv->data);
 380        kfree_const(fw_priv->fw_name);
 381        kfree(fw_priv);
 382}
 383
 384static void free_fw_priv(struct fw_priv *fw_priv)
 385{
 386        struct firmware_cache *fwc = fw_priv->fwc;
 387        spin_lock(&fwc->lock);
 388        if (!kref_put(&fw_priv->ref, __free_fw_priv))
 389                spin_unlock(&fwc->lock);
 390}
 391
 392/* direct firmware loading support */
 393static char fw_path_para[256];
 394static const char * const fw_path[] = {
 395        fw_path_para,
 396        "/lib/firmware/updates/" UTS_RELEASE,
 397        "/lib/firmware/updates",
 398        "/lib/firmware/" UTS_RELEASE,
 399        "/lib/firmware"
 400};
 401
 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
 410static int
 411fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv)
 412{
 413        loff_t size;
 414        int i, len;
 415        int rc = -ENOENT;
 416        char *path;
 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 */
 421        if (fw_priv->data) {
 422                id = READING_FIRMWARE_PREALLOC_BUFFER;
 423                msize = fw_priv->allocated_size;
 424        }
 425
 426        path = __getname();
 427        if (!path)
 428                return -ENOMEM;
 429
 430        for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
 431                /* skip the unset customized path */
 432                if (!fw_path[i][0])
 433                        continue;
 434
 435                len = snprintf(path, PATH_MAX, "%s/%s",
 436                               fw_path[i], fw_priv->fw_name);
 437                if (len >= PATH_MAX) {
 438                        rc = -ENAMETOOLONG;
 439                        break;
 440                }
 441
 442                fw_priv->size = 0;
 443                rc = kernel_read_file_from_path(path, &fw_priv->data, &size,
 444                                                msize, id);
 445                if (rc) {
 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);
 452                        continue;
 453                }
 454                dev_dbg(device, "direct-loading %s\n", fw_priv->fw_name);
 455                fw_priv->size = size;
 456                fw_state_done(fw_priv);
 457                break;
 458        }
 459        __putname(path);
 460
 461        return rc;
 462}
 463
 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        }
 472        free_fw_priv(fw->priv);
 473}
 474
 475/* store the pages buffer info firmware from buf */
 476static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
 477{
 478        fw->priv = fw_priv;
 479#ifdef CONFIG_FW_LOADER_USER_HELPER
 480        fw->pages = fw_priv->pages;
 481#endif
 482        fw->size = fw_priv->size;
 483        fw->data = fw_priv->data;
 484
 485        pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
 486                 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
 487                 (unsigned int)fw_priv->size);
 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);
 498        kfree_const(fwn->name);
 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
 529        fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm),
 530                           GFP_KERNEL);
 531        if (!fwn)
 532                return -ENOMEM;
 533        fwn->name = kstrdup_const(name, GFP_KERNEL);
 534        if (!fwn->name) {
 535                devres_free(fwn);
 536                return -ENOMEM;
 537        }
 538
 539        fwn->magic = (unsigned long)&fw_cache;
 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
 551static int assign_fw(struct firmware *fw, struct device *device,
 552                     unsigned int opt_flags)
 553{
 554        struct fw_priv *fw_priv = fw->priv;
 555
 556        mutex_lock(&fw_lock);
 557        if (!fw_priv->size || fw_state_is_aborted(fw_priv)) {
 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))
 572                fw_add_devm_name(device, fw_priv->fw_name);
 573
 574        /*
 575         * After caching firmware image is started, let it piggyback
 576         * on request firmware.
 577         */
 578        if (!(opt_flags & FW_OPT_NOCACHE) &&
 579            fw_priv->fwc->state == FW_LOADER_START_CACHE) {
 580                if (fw_cache_piggyback_on_request(fw_priv->fw_name))
 581                        kref_get(&fw_priv->ref);
 582        }
 583
 584        /* pass the pages buffer to driver at the last minute */
 585        fw_set_page_data(fw_priv, fw);
 586        mutex_unlock(&fw_lock);
 587        return 0;
 588}
 589
 590/*
 591 * user-mode helper code
 592 */
 593#ifdef CONFIG_FW_LOADER_USER_HELPER
 594struct fw_sysfs {
 595        bool nowait;
 596        struct device dev;
 597        struct fw_priv *fw_priv;
 598        struct firmware *fw;
 599};
 600
 601static struct fw_sysfs *to_fw_sysfs(struct device *dev)
 602{
 603        return container_of(dev, struct fw_sysfs, dev);
 604}
 605
 606static void __fw_load_abort(struct fw_priv *fw_priv)
 607{
 608        /*
 609         * There is a small window in which user can write to 'loading'
 610         * between loading done and disappearance of 'loading'
 611         */
 612        if (fw_sysfs_done(fw_priv))
 613                return;
 614
 615        list_del_init(&fw_priv->pending_list);
 616        fw_state_aborted(fw_priv);
 617}
 618
 619static void fw_load_abort(struct fw_sysfs *fw_sysfs)
 620{
 621        struct fw_priv *fw_priv = fw_sysfs->fw_priv;
 622
 623        __fw_load_abort(fw_priv);
 624}
 625
 626static LIST_HEAD(pending_fw_head);
 627
 628static void kill_pending_fw_fallback_reqs(bool only_kill_custom)
 629{
 630        struct fw_priv *fw_priv;
 631        struct fw_priv *next;
 632
 633        mutex_lock(&fw_lock);
 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);
 638        }
 639        mutex_unlock(&fw_lock);
 640}
 641
 642static ssize_t timeout_show(struct class *class, struct class_attribute *attr,
 643                            char *buf)
 644{
 645        return sprintf(buf, "%d\n", loading_timeout);
 646}
 647
 648/**
 649 * firmware_timeout_store - set number of seconds to wait for firmware
 650 * @class: device class pointer
 651 * @attr: device attribute pointer
 652 * @buf: buffer to scan for timeout value
 653 * @count: number of bytes in @buf
 654 *
 655 *      Sets the number of seconds to wait for the firmware.  Once
 656 *      this expires an error will be returned to the driver and no
 657 *      firmware will be provided.
 658 *
 659 *      Note: zero means 'wait forever'.
 660 **/
 661static ssize_t timeout_store(struct class *class, struct class_attribute *attr,
 662                             const char *buf, size_t count)
 663{
 664        loading_timeout = simple_strtol(buf, NULL, 10);
 665        if (loading_timeout < 0)
 666                loading_timeout = 0;
 667
 668        return count;
 669}
 670static CLASS_ATTR_RW(timeout);
 671
 672static struct attribute *firmware_class_attrs[] = {
 673        &class_attr_timeout.attr,
 674        NULL,
 675};
 676ATTRIBUTE_GROUPS(firmware_class);
 677
 678static void fw_dev_release(struct device *dev)
 679{
 680        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 681
 682        kfree(fw_sysfs);
 683}
 684
 685static int do_firmware_uevent(struct fw_sysfs *fw_sysfs, struct kobj_uevent_env *env)
 686{
 687        if (add_uevent_var(env, "FIRMWARE=%s", fw_sysfs->fw_priv->fw_name))
 688                return -ENOMEM;
 689        if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
 690                return -ENOMEM;
 691        if (add_uevent_var(env, "ASYNC=%d", fw_sysfs->nowait))
 692                return -ENOMEM;
 693
 694        return 0;
 695}
 696
 697static int firmware_uevent(struct device *dev, struct kobj_uevent_env *env)
 698{
 699        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 700        int err = 0;
 701
 702        mutex_lock(&fw_lock);
 703        if (fw_sysfs->fw_priv)
 704                err = do_firmware_uevent(fw_sysfs, env);
 705        mutex_unlock(&fw_lock);
 706        return err;
 707}
 708
 709static struct class firmware_class = {
 710        .name           = "firmware",
 711        .class_groups   = firmware_class_groups,
 712        .dev_uevent     = firmware_uevent,
 713        .dev_release    = fw_dev_release,
 714};
 715
 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
 726static ssize_t firmware_loading_show(struct device *dev,
 727                                     struct device_attribute *attr, char *buf)
 728{
 729        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 730        int loading = 0;
 731
 732        mutex_lock(&fw_lock);
 733        if (fw_sysfs->fw_priv)
 734                loading = fw_sysfs_loading(fw_sysfs->fw_priv);
 735        mutex_unlock(&fw_lock);
 736
 737        return sprintf(buf, "%d\n", loading);
 738}
 739
 740/* Some architectures don't have PAGE_KERNEL_RO */
 741#ifndef PAGE_KERNEL_RO
 742#define PAGE_KERNEL_RO PAGE_KERNEL
 743#endif
 744
 745/* one pages buffer should be mapped/unmapped only once */
 746static int map_fw_priv_pages(struct fw_priv *fw_priv)
 747{
 748        if (!fw_priv->is_paged_buf)
 749                return 0;
 750
 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)
 755                return -ENOMEM;
 756        return 0;
 757}
 758
 759/**
 760 * firmware_loading_store - set value in the 'loading' control file
 761 * @dev: device pointer
 762 * @attr: device attribute pointer
 763 * @buf: buffer to scan for loading control value
 764 * @count: number of bytes in @buf
 765 *
 766 *      The relevant values are:
 767 *
 768 *       1: Start a load, discarding any previous partial load.
 769 *       0: Conclude the load and hand the data to the driver code.
 770 *      -1: Conclude the load with an error and discard any written data.
 771 **/
 772static ssize_t firmware_loading_store(struct device *dev,
 773                                      struct device_attribute *attr,
 774                                      const char *buf, size_t count)
 775{
 776        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 777        struct fw_priv *fw_priv;
 778        ssize_t written = count;
 779        int loading = simple_strtol(buf, NULL, 10);
 780        int i;
 781
 782        mutex_lock(&fw_lock);
 783        fw_priv = fw_sysfs->fw_priv;
 784        if (fw_state_is_aborted(fw_priv))
 785                goto out;
 786
 787        switch (loading) {
 788        case 1:
 789                /* discarding any previous partial load */
 790                if (!fw_sysfs_done(fw_priv)) {
 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;
 797                        fw_state_start(fw_priv);
 798                }
 799                break;
 800        case 0:
 801                if (fw_sysfs_loading(fw_priv)) {
 802                        int rc;
 803
 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                         * */
 810                        rc = map_fw_priv_pages(fw_priv);
 811                        if (rc)
 812                                dev_err(dev, "%s: map pages failed\n",
 813                                        __func__);
 814                        else
 815                                rc = security_kernel_post_read_file(NULL,
 816                                                fw_priv->data, fw_priv->size,
 817                                                READING_FIRMWARE);
 818
 819                        /*
 820                         * Same logic as fw_load_abort, only the DONE bit
 821                         * is ignored and we set ABORT only on failure.
 822                         */
 823                        list_del_init(&fw_priv->pending_list);
 824                        if (rc) {
 825                                fw_state_aborted(fw_priv);
 826                                written = rc;
 827                        } else {
 828                                fw_state_done(fw_priv);
 829                        }
 830                        break;
 831                }
 832                /* fallthrough */
 833        default:
 834                dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading);
 835                /* fallthrough */
 836        case -1:
 837                fw_load_abort(fw_sysfs);
 838                break;
 839        }
 840out:
 841        mutex_unlock(&fw_lock);
 842        return written;
 843}
 844
 845static DEVICE_ATTR(loading, 0644, firmware_loading_show, firmware_loading_store);
 846
 847static void firmware_rw_data(struct fw_priv *fw_priv, char *buffer,
 848                           loff_t offset, size_t count, bool read)
 849{
 850        if (read)
 851                memcpy(buffer, fw_priv->data + offset, count);
 852        else
 853                memcpy(fw_priv->data + offset, buffer, count);
 854}
 855
 856static void firmware_rw(struct fw_priv *fw_priv, char *buffer,
 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
 865                page_data = kmap(fw_priv->pages[page_nr]);
 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
 872                kunmap(fw_priv->pages[page_nr]);
 873                buffer += page_cnt;
 874                offset += page_cnt;
 875                count -= page_cnt;
 876        }
 877}
 878
 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)
 882{
 883        struct device *dev = kobj_to_dev(kobj);
 884        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 885        struct fw_priv *fw_priv;
 886        ssize_t ret_count;
 887
 888        mutex_lock(&fw_lock);
 889        fw_priv = fw_sysfs->fw_priv;
 890        if (!fw_priv || fw_sysfs_done(fw_priv)) {
 891                ret_count = -ENODEV;
 892                goto out;
 893        }
 894        if (offset > fw_priv->size) {
 895                ret_count = 0;
 896                goto out;
 897        }
 898        if (count > fw_priv->size - offset)
 899                count = fw_priv->size - offset;
 900
 901        ret_count = count;
 902
 903        if (fw_priv->data)
 904                firmware_rw_data(fw_priv, buffer, offset, count, true);
 905        else
 906                firmware_rw(fw_priv, buffer, offset, count, true);
 907
 908out:
 909        mutex_unlock(&fw_lock);
 910        return ret_count;
 911}
 912
 913static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size)
 914{
 915        struct fw_priv *fw_priv= fw_sysfs->fw_priv;
 916        int pages_needed = PAGE_ALIGN(min_size) >> PAGE_SHIFT;
 917
 918        /* If the array of pages is too small, grow it... */
 919        if (fw_priv->page_array_size < pages_needed) {
 920                int new_array_size = max(pages_needed,
 921                                         fw_priv->page_array_size * 2);
 922                struct page **new_pages;
 923
 924                new_pages = vmalloc(new_array_size * sizeof(void *));
 925                if (!new_pages) {
 926                        fw_load_abort(fw_sysfs);
 927                        return -ENOMEM;
 928                }
 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;
 936        }
 937
 938        while (fw_priv->nr_pages < pages_needed) {
 939                fw_priv->pages[fw_priv->nr_pages] =
 940                        alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
 941
 942                if (!fw_priv->pages[fw_priv->nr_pages]) {
 943                        fw_load_abort(fw_sysfs);
 944                        return -ENOMEM;
 945                }
 946                fw_priv->nr_pages++;
 947        }
 948        return 0;
 949}
 950
 951/**
 952 * firmware_data_write - write method for firmware
 953 * @filp: open sysfs file
 954 * @kobj: kobject for the device
 955 * @bin_attr: bin_attr structure
 956 * @buffer: buffer being written
 957 * @offset: buffer offset for write in total data store area
 958 * @count: buffer size
 959 *
 960 *      Data written to the 'data' attribute will be later handed to
 961 *      the driver as a firmware image.
 962 **/
 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)
 966{
 967        struct device *dev = kobj_to_dev(kobj);
 968        struct fw_sysfs *fw_sysfs = to_fw_sysfs(dev);
 969        struct fw_priv *fw_priv;
 970        ssize_t retval;
 971
 972        if (!capable(CAP_SYS_RAWIO))
 973                return -EPERM;
 974
 975        mutex_lock(&fw_lock);
 976        fw_priv = fw_sysfs->fw_priv;
 977        if (!fw_priv || fw_sysfs_done(fw_priv)) {
 978                retval = -ENODEV;
 979                goto out;
 980        }
 981
 982        if (fw_priv->data) {
 983                if (offset + count > fw_priv->allocated_size) {
 984                        retval = -ENOMEM;
 985                        goto out;
 986                }
 987                firmware_rw_data(fw_priv, buffer, offset, count, false);
 988                retval = count;
 989        } else {
 990                retval = fw_realloc_pages(fw_sysfs, offset + count);
 991                if (retval)
 992                        goto out;
 993
 994                retval = count;
 995                firmware_rw(fw_priv, buffer, offset, count, false);
 996        }
 997
 998        fw_priv->size = max_t(size_t, offset + count, fw_priv->size);
 999out:
1000        mutex_unlock(&fw_lock);
1001        return retval;
1002}
1003
1004static struct bin_attribute firmware_attr_data = {
1005        .attr = { .name = "data", .mode = 0644 },
1006        .size = 0,
1007        .read = firmware_data_read,
1008        .write = firmware_data_write,
1009};
1010
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
1031static struct fw_sysfs *
1032fw_create_instance(struct firmware *firmware, const char *fw_name,
1033                   struct device *device, unsigned int opt_flags)
1034{
1035        struct fw_sysfs *fw_sysfs;
1036        struct device *f_dev;
1037
1038        fw_sysfs = kzalloc(sizeof(*fw_sysfs), GFP_KERNEL);
1039        if (!fw_sysfs) {
1040                fw_sysfs = ERR_PTR(-ENOMEM);
1041                goto exit;
1042        }
1043
1044        fw_sysfs->nowait = !!(opt_flags & FW_OPT_NOWAIT);
1045        fw_sysfs->fw = firmware;
1046        f_dev = &fw_sysfs->dev;
1047
1048        device_initialize(f_dev);
1049        dev_set_name(f_dev, "%s", fw_name);
1050        f_dev->parent = device;
1051        f_dev->class = &firmware_class;
1052        f_dev->groups = fw_dev_attr_groups;
1053exit:
1054        return fw_sysfs;
1055}
1056
1057/* load a firmware via user helper */
1058static int _request_firmware_load(struct fw_sysfs *fw_sysfs,
1059                                  unsigned int opt_flags, long timeout)
1060{
1061        int retval = 0;
1062        struct device *f_dev = &fw_sysfs->dev;
1063        struct fw_priv *fw_priv = fw_sysfs->fw_priv;
1064
1065        /* fall back on userspace loading */
1066        if (!fw_priv->data)
1067                fw_priv->is_paged_buf = true;
1068
1069        dev_set_uevent_suppress(f_dev, true);
1070
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        }
1076
1077        mutex_lock(&fw_lock);
1078        list_add(&fw_priv->pending_list, &pending_fw_head);
1079        mutex_unlock(&fw_lock);
1080
1081        if (opt_flags & FW_OPT_UEVENT) {
1082                fw_priv->need_uevent = true;
1083                dev_set_uevent_suppress(f_dev, false);
1084                dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name);
1085                kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD);
1086        } else {
1087                timeout = MAX_JIFFY_OFFSET;
1088        }
1089
1090        retval = fw_sysfs_wait_timeout(fw_priv, timeout);
1091        if (retval < 0) {
1092                mutex_lock(&fw_lock);
1093                fw_load_abort(fw_sysfs);
1094                mutex_unlock(&fw_lock);
1095        }
1096
1097        if (fw_state_is_aborted(fw_priv)) {
1098                if (retval == -ERESTARTSYS)
1099                        retval = -EINTR;
1100                else
1101                        retval = -EAGAIN;
1102        } else if (fw_priv->is_paged_buf && !fw_priv->data)
1103                retval = -ENOMEM;
1104
1105        device_del(f_dev);
1106err_put_dev:
1107        put_device(f_dev);
1108        return retval;
1109}
1110
1111static int fw_load_from_user_helper(struct firmware *firmware,
1112                                    const char *name, struct device *device,
1113                                    unsigned int opt_flags)
1114{
1115        struct fw_sysfs *fw_sysfs;
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        }
1135
1136        fw_sysfs = fw_create_instance(firmware, name, device, opt_flags);
1137        if (IS_ERR(fw_sysfs)) {
1138                ret = PTR_ERR(fw_sysfs);
1139                goto out_unlock;
1140        }
1141
1142        fw_sysfs->fw_priv = firmware->priv;
1143        ret = _request_firmware_load(fw_sysfs, opt_flags, timeout);
1144
1145        if (!ret)
1146                ret = assign_fw(firmware, device, opt_flags);
1147
1148out_unlock:
1149        usermodehelper_read_unlock();
1150
1151        return ret;
1152}
1153
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
1176static int fw_sysfs_fallback(struct firmware *fw, const char *name,
1177                            struct device *device,
1178                            unsigned int opt_flags,
1179                            int ret)
1180{
1181        if (!fw_run_sysfs_fallback(opt_flags))
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}
1187#else /* CONFIG_FW_LOADER_USER_HELPER */
1188static int fw_sysfs_fallback(struct firmware *fw, const char *name,
1189                             struct device *device,
1190                             unsigned int opt_flags,
1191                             int ret)
1192{
1193        /* Keep carrying over the same error */
1194        return ret;
1195}
1196
1197static inline void kill_pending_fw_fallback_reqs(bool only_kill_custom) { }
1198
1199static inline int register_sysfs_loader(void)
1200{
1201        return 0;
1202}
1203
1204static inline void unregister_sysfs_loader(void)
1205{
1206}
1207
1208#endif /* CONFIG_FW_LOADER_USER_HELPER */
1209
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,
1216                          struct device *device, void *dbuf, size_t size)
1217{
1218        struct firmware *firmware;
1219        struct fw_priv *fw_priv;
1220        int ret;
1221
1222        *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
1223        if (!firmware) {
1224                dev_err(device, "%s: kmalloc(struct firmware) failed\n",
1225                        __func__);
1226                return -ENOMEM;
1227        }
1228
1229        if (fw_get_builtin_firmware(firmware, name, dbuf, size)) {
1230                dev_dbg(device, "using built-in %s\n", name);
1231                return 0; /* assigned */
1232        }
1233
1234        ret = alloc_lookup_fw_priv(name, &fw_cache, &fw_priv, dbuf, size);
1235
1236        /*
1237         * bind with 'priv' now to avoid warning in failure path
1238         * of requesting firmware.
1239         */
1240        firmware->priv = fw_priv;
1241
1242        if (ret > 0) {
1243                ret = fw_state_wait(fw_priv);
1244                if (!ret) {
1245                        fw_set_page_data(fw_priv, firmware);
1246                        return 0; /* assigned */
1247                }
1248        }
1249
1250        if (ret < 0)
1251                return ret;
1252        return 1; /* need to load */
1253}
1254
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
1261 * the struct fw_priv and won't release it until all requests are woken
1262 * and have gone through this same path.
1263 */
1264static void fw_abort_batch_reqs(struct firmware *fw)
1265{
1266        struct fw_priv *fw_priv;
1267
1268        /* Loaded directly? */
1269        if (!fw || !fw->priv)
1270                return;
1271
1272        fw_priv = fw->priv;
1273        if (!fw_state_is_aborted(fw_priv))
1274                fw_state_aborted(fw_priv);
1275}
1276
1277/* called from request_firmware() and request_firmware_work_func() */
1278static int
1279_request_firmware(const struct firmware **firmware_p, const char *name,
1280                  struct device *device, void *buf, size_t size,
1281                  unsigned int opt_flags)
1282{
1283        struct firmware *fw = NULL;
1284        int ret;
1285
1286        if (!firmware_p)
1287                return -EINVAL;
1288
1289        if (!name || name[0] == '\0') {
1290                ret = -EINVAL;
1291                goto out;
1292        }
1293
1294        ret = _request_firmware_prepare(&fw, name, device, buf, size);
1295        if (ret <= 0) /* error or already assigned */
1296                goto out;
1297
1298        ret = fw_get_filesystem_firmware(device, fw->priv);
1299        if (ret) {
1300                if (!(opt_flags & FW_OPT_NO_WARN))
1301                        dev_warn(device,
1302                                 "Direct firmware load for %s failed with error %d\n",
1303                                 name, ret);
1304                ret = fw_sysfs_fallback(fw, name, device, opt_flags, ret);
1305        } else
1306                ret = assign_fw(fw, device, opt_flags);
1307
1308 out:
1309        if (ret < 0) {
1310                fw_abort_batch_reqs(fw);
1311                release_firmware(fw);
1312                fw = NULL;
1313        }
1314
1315        *firmware_p = fw;
1316        return ret;
1317}
1318
1319/**
1320 * request_firmware: - send firmware request and wait for it
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
1326 *      of @name for device @device.
1327 *
1328 *      Should be called from user context where sleeping is allowed.
1329 *
1330 *      @name will be used as $FIRMWARE in the uevent environment and
1331 *      should be distinctive enough not to be confused with any other
1332 *      firmware image for this or any other device.
1333 *
1334 *      Caller must hold the reference count of @device.
1335 *
1336 *      The function can be called safely inside device's suspend and
1337 *      resume callback.
1338 **/
1339int
1340request_firmware(const struct firmware **firmware_p, const char *name,
1341                 struct device *device)
1342{
1343        int ret;
1344
1345        /* Need to pin this module until return */
1346        __module_get(THIS_MODULE);
1347        ret = _request_firmware(firmware_p, name, device, NULL, 0,
1348                                FW_OPT_UEVENT);
1349        module_put(THIS_MODULE);
1350        return ret;
1351}
1352EXPORT_SYMBOL(request_firmware);
1353
1354/**
1355 * request_firmware_direct: - load firmware directly without usermode helper
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;
1369
1370        __module_get(THIS_MODULE);
1371        ret = _request_firmware(firmware_p, name, device, NULL, 0,
1372                                FW_OPT_UEVENT | FW_OPT_NO_WARN |
1373                                FW_OPT_NOFALLBACK);
1374        module_put(THIS_MODULE);
1375        return ret;
1376}
1377EXPORT_SYMBOL_GPL(request_firmware_direct);
1378
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,
1402                                FW_OPT_UEVENT | FW_OPT_NOCACHE);
1403        module_put(THIS_MODULE);
1404        return ret;
1405}
1406EXPORT_SYMBOL(request_firmware_into_buf);
1407
1408/**
1409 * release_firmware: - release the resource associated with a firmware image
1410 * @fw: firmware resource to release
1411 **/
1412void release_firmware(const struct firmware *fw)
1413{
1414        if (fw) {
1415                if (!fw_is_builtin_firmware(fw))
1416                        firmware_free_data(fw);
1417                kfree(fw);
1418        }
1419}
1420EXPORT_SYMBOL(release_firmware);
1421
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);
1430        unsigned int opt_flags;
1431};
1432
1433static void request_firmware_work_func(struct work_struct *work)
1434{
1435        struct firmware_work *fw_work;
1436        const struct firmware *fw;
1437
1438        fw_work = container_of(work, struct firmware_work, work);
1439
1440        _request_firmware(&fw, fw_work->name, fw_work->device, NULL, 0,
1441                          fw_work->opt_flags);
1442        fw_work->cont(fw, fw_work->context);
1443        put_device(fw_work->device); /* taken in request_firmware_nowait() */
1444
1445        module_put(fw_work->module);
1446        kfree_const(fw_work->name);
1447        kfree(fw_work);
1448}
1449
1450/**
1451 * request_firmware_nowait - asynchronous version of request_firmware
1452 * @module: module requesting the firmware
1453 * @uevent: sends uevent to copy the firmware image if this flag
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
1457 * @gfp: allocation flags
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.
1462 *
1463 *      Caller must hold the reference count of @device.
1464 *
1465 *      Asynchronous variant of request_firmware() for user contexts:
1466 *              - sleep for as small periods as possible since it may
1467 *                increase kernel boot time of built-in device drivers
1468 *                requesting firmware in their ->probe() methods, if
1469 *                @gfp is GFP_KERNEL.
1470 *
1471 *              - can't sleep at all if @gfp is GFP_ATOMIC.
1472 **/
1473int
1474request_firmware_nowait(
1475        struct module *module, bool uevent,
1476        const char *name, struct device *device, gfp_t gfp, void *context,
1477        void (*cont)(const struct firmware *fw, void *context))
1478{
1479        struct firmware_work *fw_work;
1480
1481        fw_work = kzalloc(sizeof(struct firmware_work), gfp);
1482        if (!fw_work)
1483                return -ENOMEM;
1484
1485        fw_work->module = module;
1486        fw_work->name = kstrdup_const(name, gfp);
1487        if (!fw_work->name) {
1488                kfree(fw_work);
1489                return -ENOMEM;
1490        }
1491        fw_work->device = device;
1492        fw_work->context = context;
1493        fw_work->cont = cont;
1494        fw_work->opt_flags = FW_OPT_NOWAIT |
1495                (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
1496
1497        if (!try_module_get(module)) {
1498                kfree_const(fw_work->name);
1499                kfree(fw_work);
1500                return -EFAULT;
1501        }
1502
1503        get_device(fw_work->device);
1504        INIT_WORK(&fw_work->work, request_firmware_work_func);
1505        schedule_work(&fw_work->work);
1506        return 0;
1507}
1508EXPORT_SYMBOL(request_firmware_nowait);
1509
1510#ifdef CONFIG_PM_SLEEP
1511static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
1512
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 */
1527static int cache_firmware(const char *fw_name)
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
1543static struct fw_priv *lookup_fw_priv(const char *fw_name)
1544{
1545        struct fw_priv *tmp;
1546        struct firmware_cache *fwc = &fw_cache;
1547
1548        spin_lock(&fwc->lock);
1549        tmp = __lookup_fw_priv(fw_name);
1550        spin_unlock(&fwc->lock);
1551
1552        return tmp;
1553}
1554
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 */
1566static int uncache_firmware(const char *fw_name)
1567{
1568        struct fw_priv *fw_priv;
1569        struct firmware fw;
1570
1571        pr_debug("%s: %s\n", __func__, fw_name);
1572
1573        if (fw_get_builtin_firmware(&fw, fw_name, NULL, 0))
1574                return 0;
1575
1576        fw_priv = lookup_fw_priv(fw_name);
1577        if (fw_priv) {
1578                free_fw_priv(fw_priv);
1579                return 0;
1580        }
1581
1582        return -EINVAL;
1583}
1584
1585static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
1586{
1587        struct fw_cache_entry *fce;
1588
1589        fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
1590        if (!fce)
1591                goto exit;
1592
1593        fce->name = kstrdup_const(name, GFP_ATOMIC);
1594        if (!fce->name) {
1595                kfree(fce);
1596                fce = NULL;
1597                goto exit;
1598        }
1599exit:
1600        return fce;
1601}
1602
1603static int __fw_entry_found(const char *name)
1604{
1605        struct firmware_cache *fwc = &fw_cache;
1606        struct fw_cache_entry *fce;
1607
1608        list_for_each_entry(fce, &fwc->fw_names, list) {
1609                if (!strcmp(fce->name, name))
1610                        return 1;
1611        }
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;
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
1636static void free_fw_cache_entry(struct fw_cache_entry *fce)
1637{
1638        kfree_const(fce->name);
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);
1650        if (ret) {
1651                spin_lock(&fwc->name_lock);
1652                list_del(&fce->list);
1653                spin_unlock(&fwc->name_lock);
1654
1655                free_fw_cache_entry(fce);
1656        }
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
1680static void dev_cache_fw_image(struct device *dev, void *data)
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);
1695                /* only one cache entry for one firmware */
1696                if (!__fw_entry_found(fce->name)) {
1697                        list_add(&fce->list, &fwc->fw_names);
1698                } else {
1699                        free_fw_cache_entry(fce);
1700                        fce = NULL;
1701                }
1702                spin_unlock(&fwc->name_lock);
1703
1704                if (fce)
1705                        async_schedule_domain(__async_dev_cache_fw_image,
1706                                              (void *)fce,
1707                                              &fw_cache_domain);
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;
1744        int old_timeout;
1745        DEFINE_WAIT(wait);
1746
1747        pr_debug("%s\n", __func__);
1748
1749        /* cancel uncache work */
1750        cancel_delayed_work_sync(&fwc->work);
1751
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
1763        mutex_lock(&fw_lock);
1764        fwc->state = FW_LOADER_START_CACHE;
1765        dpm_for_each_dev(NULL, dev_cache_fw_image);
1766        mutex_unlock(&fw_lock);
1767
1768        /* wait for completion of caching firmware for all devices */
1769        async_synchronize_full_domain(&fw_cache_domain);
1770
1771        loading_timeout = old_timeout;
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{
1800        queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
1801                           msecs_to_jiffies(delay));
1802}
1803
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:
1810        case PM_RESTORE_PREPARE:
1811                /*
1812                 * kill pending fallback requests with a custom fallback
1813                 * to avoid stalling suspend.
1814                 */
1815                kill_pending_fw_fallback_reqs(true);
1816                device_cache_fw_images();
1817                break;
1818
1819        case PM_POST_SUSPEND:
1820        case PM_POST_HIBERNATION:
1821        case PM_POST_RESTORE:
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
1830                device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
1831                break;
1832        }
1833
1834        return 0;
1835}
1836
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};
1847
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
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}
1873#else
1874static int fw_cache_piggyback_on_request(const char *name)
1875{
1876        return 0;
1877}
1878static inline int register_fw_pm_ops(void)
1879{
1880        return 0;
1881}
1882static inline void unregister_fw_pm_ops(void)
1883{
1884}
1885#endif
1886
1887static void __init fw_cache_init(void)
1888{
1889        spin_lock_init(&fw_cache.lock);
1890        INIT_LIST_HEAD(&fw_cache.head);
1891        fw_cache.state = FW_LOADER_NO_CACHE;
1892}
1893
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
1910static int __init firmware_class_init(void)
1911{
1912        int ret;
1913
1914        /* No need to unfold these on exit */
1915        fw_cache_init();
1916
1917        ret = register_fw_pm_ops();
1918        if (ret)
1919                return ret;
1920
1921        ret = register_reboot_notifier(&fw_shutdown_nb);
1922        if (ret)
1923                goto out;
1924
1925        return register_sysfs_loader();
1926
1927out:
1928        unregister_fw_pm_ops();
1929        return ret;
1930}
1931
1932static void __exit firmware_class_exit(void)
1933{
1934        unregister_fw_pm_ops();
1935        unregister_reboot_notifier(&fw_shutdown_nb);
1936        unregister_sysfs_loader();
1937}
1938
1939fs_initcall(firmware_class_init);
1940module_exit(firmware_class_exit);
1941