diff options
Diffstat (limited to 'drivers/base/firmware_loader/main.c')
-rw-r--r-- | drivers/base/firmware_loader/main.c | 57 |
1 files changed, 42 insertions, 15 deletions
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index eb34089e4299..0943e7065e0e 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c | |||
@@ -443,7 +443,7 @@ static int fw_add_devm_name(struct device *dev, const char *name) | |||
443 | #endif | 443 | #endif |
444 | 444 | ||
445 | int assign_fw(struct firmware *fw, struct device *device, | 445 | int assign_fw(struct firmware *fw, struct device *device, |
446 | unsigned int opt_flags) | 446 | enum fw_opt opt_flags) |
447 | { | 447 | { |
448 | struct fw_priv *fw_priv = fw->priv; | 448 | struct fw_priv *fw_priv = fw->priv; |
449 | int ret; | 449 | int ret; |
@@ -558,7 +558,7 @@ static void fw_abort_batch_reqs(struct firmware *fw) | |||
558 | static int | 558 | static int |
559 | _request_firmware(const struct firmware **firmware_p, const char *name, | 559 | _request_firmware(const struct firmware **firmware_p, const char *name, |
560 | struct device *device, void *buf, size_t size, | 560 | struct device *device, void *buf, size_t size, |
561 | unsigned int opt_flags) | 561 | enum fw_opt opt_flags) |
562 | { | 562 | { |
563 | struct firmware *fw = NULL; | 563 | struct firmware *fw = NULL; |
564 | int ret; | 564 | int ret; |
@@ -581,7 +581,7 @@ _request_firmware(const struct firmware **firmware_p, const char *name, | |||
581 | dev_warn(device, | 581 | dev_warn(device, |
582 | "Direct firmware load for %s failed with error %d\n", | 582 | "Direct firmware load for %s failed with error %d\n", |
583 | name, ret); | 583 | name, ret); |
584 | ret = fw_sysfs_fallback(fw, name, device, opt_flags, ret); | 584 | ret = firmware_fallback_sysfs(fw, name, device, opt_flags, ret); |
585 | } else | 585 | } else |
586 | ret = assign_fw(fw, device, opt_flags); | 586 | ret = assign_fw(fw, device, opt_flags); |
587 | 587 | ||
@@ -597,7 +597,7 @@ _request_firmware(const struct firmware **firmware_p, const char *name, | |||
597 | } | 597 | } |
598 | 598 | ||
599 | /** | 599 | /** |
600 | * request_firmware: - send firmware request and wait for it | 600 | * request_firmware() - send firmware request and wait for it |
601 | * @firmware_p: pointer to firmware image | 601 | * @firmware_p: pointer to firmware image |
602 | * @name: name of firmware file | 602 | * @name: name of firmware file |
603 | * @device: device for which firmware is being loaded | 603 | * @device: device for which firmware is being loaded |
@@ -632,7 +632,34 @@ request_firmware(const struct firmware **firmware_p, const char *name, | |||
632 | EXPORT_SYMBOL(request_firmware); | 632 | EXPORT_SYMBOL(request_firmware); |
633 | 633 | ||
634 | /** | 634 | /** |
635 | * request_firmware_direct: - load firmware directly without usermode helper | 635 | * firmware_request_nowarn() - request for an optional fw module |
636 | * @firmware: pointer to firmware image | ||
637 | * @name: name of firmware file | ||
638 | * @device: device for which firmware is being loaded | ||
639 | * | ||
640 | * This function is similar in behaviour to request_firmware(), except | ||
641 | * it doesn't produce warning messages when the file is not found. | ||
642 | * The sysfs fallback mechanism is enabled if direct filesystem lookup fails, | ||
643 | * however, however failures to find the firmware file with it are still | ||
644 | * suppressed. It is therefore up to the driver to check for the return value | ||
645 | * of this call and to decide when to inform the users of errors. | ||
646 | **/ | ||
647 | int firmware_request_nowarn(const struct firmware **firmware, const char *name, | ||
648 | struct device *device) | ||
649 | { | ||
650 | int ret; | ||
651 | |||
652 | /* Need to pin this module until return */ | ||
653 | __module_get(THIS_MODULE); | ||
654 | ret = _request_firmware(firmware, name, device, NULL, 0, | ||
655 | FW_OPT_UEVENT | FW_OPT_NO_WARN); | ||
656 | module_put(THIS_MODULE); | ||
657 | return ret; | ||
658 | } | ||
659 | EXPORT_SYMBOL_GPL(firmware_request_nowarn); | ||
660 | |||
661 | /** | ||
662 | * request_firmware_direct() - load firmware directly without usermode helper | ||
636 | * @firmware_p: pointer to firmware image | 663 | * @firmware_p: pointer to firmware image |
637 | * @name: name of firmware file | 664 | * @name: name of firmware file |
638 | * @device: device for which firmware is being loaded | 665 | * @device: device for which firmware is being loaded |
@@ -657,7 +684,7 @@ int request_firmware_direct(const struct firmware **firmware_p, | |||
657 | EXPORT_SYMBOL_GPL(request_firmware_direct); | 684 | EXPORT_SYMBOL_GPL(request_firmware_direct); |
658 | 685 | ||
659 | /** | 686 | /** |
660 | * firmware_request_cache: - cache firmware for suspend so resume can use it | 687 | * firmware_request_cache() - cache firmware for suspend so resume can use it |
661 | * @name: name of firmware file | 688 | * @name: name of firmware file |
662 | * @device: device for which firmware should be cached for | 689 | * @device: device for which firmware should be cached for |
663 | * | 690 | * |
@@ -681,7 +708,7 @@ int firmware_request_cache(struct device *device, const char *name) | |||
681 | EXPORT_SYMBOL_GPL(firmware_request_cache); | 708 | EXPORT_SYMBOL_GPL(firmware_request_cache); |
682 | 709 | ||
683 | /** | 710 | /** |
684 | * request_firmware_into_buf - load firmware into a previously allocated buffer | 711 | * request_firmware_into_buf() - load firmware into a previously allocated buffer |
685 | * @firmware_p: pointer to firmware image | 712 | * @firmware_p: pointer to firmware image |
686 | * @name: name of firmware file | 713 | * @name: name of firmware file |
687 | * @device: device for which firmware is being loaded and DMA region allocated | 714 | * @device: device for which firmware is being loaded and DMA region allocated |
@@ -713,7 +740,7 @@ request_firmware_into_buf(const struct firmware **firmware_p, const char *name, | |||
713 | EXPORT_SYMBOL(request_firmware_into_buf); | 740 | EXPORT_SYMBOL(request_firmware_into_buf); |
714 | 741 | ||
715 | /** | 742 | /** |
716 | * release_firmware: - release the resource associated with a firmware image | 743 | * release_firmware() - release the resource associated with a firmware image |
717 | * @fw: firmware resource to release | 744 | * @fw: firmware resource to release |
718 | **/ | 745 | **/ |
719 | void release_firmware(const struct firmware *fw) | 746 | void release_firmware(const struct firmware *fw) |
@@ -734,7 +761,7 @@ struct firmware_work { | |||
734 | struct device *device; | 761 | struct device *device; |
735 | void *context; | 762 | void *context; |
736 | void (*cont)(const struct firmware *fw, void *context); | 763 | void (*cont)(const struct firmware *fw, void *context); |
737 | unsigned int opt_flags; | 764 | enum fw_opt opt_flags; |
738 | }; | 765 | }; |
739 | 766 | ||
740 | static void request_firmware_work_func(struct work_struct *work) | 767 | static void request_firmware_work_func(struct work_struct *work) |
@@ -755,7 +782,7 @@ static void request_firmware_work_func(struct work_struct *work) | |||
755 | } | 782 | } |
756 | 783 | ||
757 | /** | 784 | /** |
758 | * request_firmware_nowait - asynchronous version of request_firmware | 785 | * request_firmware_nowait() - asynchronous version of request_firmware |
759 | * @module: module requesting the firmware | 786 | * @module: module requesting the firmware |
760 | * @uevent: sends uevent to copy the firmware image if this flag | 787 | * @uevent: sends uevent to copy the firmware image if this flag |
761 | * is non-zero else the firmware copy must be done manually. | 788 | * is non-zero else the firmware copy must be done manually. |
@@ -824,7 +851,7 @@ EXPORT_SYMBOL(request_firmware_nowait); | |||
824 | static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain); | 851 | static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain); |
825 | 852 | ||
826 | /** | 853 | /** |
827 | * cache_firmware - cache one firmware image in kernel memory space | 854 | * cache_firmware() - cache one firmware image in kernel memory space |
828 | * @fw_name: the firmware image name | 855 | * @fw_name: the firmware image name |
829 | * | 856 | * |
830 | * Cache firmware in kernel memory so that drivers can use it when | 857 | * Cache firmware in kernel memory so that drivers can use it when |
@@ -866,7 +893,7 @@ static struct fw_priv *lookup_fw_priv(const char *fw_name) | |||
866 | } | 893 | } |
867 | 894 | ||
868 | /** | 895 | /** |
869 | * uncache_firmware - remove one cached firmware image | 896 | * uncache_firmware() - remove one cached firmware image |
870 | * @fw_name: the firmware image name | 897 | * @fw_name: the firmware image name |
871 | * | 898 | * |
872 | * Uncache one firmware image which has been cached successfully | 899 | * Uncache one firmware image which has been cached successfully |
@@ -1042,7 +1069,7 @@ static void __device_uncache_fw_images(void) | |||
1042 | } | 1069 | } |
1043 | 1070 | ||
1044 | /** | 1071 | /** |
1045 | * device_cache_fw_images - cache devices' firmware | 1072 | * device_cache_fw_images() - cache devices' firmware |
1046 | * | 1073 | * |
1047 | * If one device called request_firmware or its nowait version | 1074 | * If one device called request_firmware or its nowait version |
1048 | * successfully before, the firmware names are recored into the | 1075 | * successfully before, the firmware names are recored into the |
@@ -1075,7 +1102,7 @@ static void device_cache_fw_images(void) | |||
1075 | } | 1102 | } |
1076 | 1103 | ||
1077 | /** | 1104 | /** |
1078 | * device_uncache_fw_images - uncache devices' firmware | 1105 | * device_uncache_fw_images() - uncache devices' firmware |
1079 | * | 1106 | * |
1080 | * uncache all firmwares which have been cached successfully | 1107 | * uncache all firmwares which have been cached successfully |
1081 | * by device_uncache_fw_images earlier | 1108 | * by device_uncache_fw_images earlier |
@@ -1092,7 +1119,7 @@ static void device_uncache_fw_images_work(struct work_struct *work) | |||
1092 | } | 1119 | } |
1093 | 1120 | ||
1094 | /** | 1121 | /** |
1095 | * device_uncache_fw_images_delay - uncache devices firmwares | 1122 | * device_uncache_fw_images_delay() - uncache devices firmwares |
1096 | * @delay: number of milliseconds to delay uncache device firmwares | 1123 | * @delay: number of milliseconds to delay uncache device firmwares |
1097 | * | 1124 | * |
1098 | * uncache all devices's firmwares which has been cached successfully | 1125 | * uncache all devices's firmwares which has been cached successfully |