aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/firmware_loader/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/firmware_loader/main.c')
-rw-r--r--drivers/base/firmware_loader/main.c57
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
445int assign_fw(struct firmware *fw, struct device *device, 445int 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)
558static int 558static 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,
632EXPORT_SYMBOL(request_firmware); 632EXPORT_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 **/
647int 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}
659EXPORT_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,
657EXPORT_SYMBOL_GPL(request_firmware_direct); 684EXPORT_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)
681EXPORT_SYMBOL_GPL(firmware_request_cache); 708EXPORT_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,
713EXPORT_SYMBOL(request_firmware_into_buf); 740EXPORT_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 **/
719void release_firmware(const struct firmware *fw) 746void 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
740static void request_firmware_work_func(struct work_struct *work) 767static 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);
824static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain); 851static 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