linux/include/linux/firmware.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _LINUX_FIRMWARE_H
   3#define _LINUX_FIRMWARE_H
   4
   5#include <linux/types.h>
   6#include <linux/compiler.h>
   7#include <linux/gfp.h>
   8
   9#define FW_ACTION_NOHOTPLUG 0
  10#define FW_ACTION_HOTPLUG 1
  11
  12struct firmware {
  13        size_t size;
  14        const u8 *data;
  15        struct page **pages;
  16
  17        /* firmware loader private fields */
  18        void *priv;
  19};
  20
  21struct module;
  22struct device;
  23
  24struct builtin_fw {
  25        char *name;
  26        void *data;
  27        unsigned long size;
  28};
  29
  30/* We have to play tricks here much like stringify() to get the
  31   __COUNTER__ macro to be expanded as we want it */
  32#define __fw_concat1(x, y) x##y
  33#define __fw_concat(x, y) __fw_concat1(x, y)
  34
  35#define DECLARE_BUILTIN_FIRMWARE(name, blob)                                 \
  36        DECLARE_BUILTIN_FIRMWARE_SIZE(name, &(blob), sizeof(blob))
  37
  38#define DECLARE_BUILTIN_FIRMWARE_SIZE(name, blob, size)                      \
  39        static const struct builtin_fw __fw_concat(__builtin_fw,__COUNTER__) \
  40        __used __section(.builtin_fw) = { name, blob, size }
  41
  42#if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE))
  43int request_firmware(const struct firmware **fw, const char *name,
  44                     struct device *device);
  45int firmware_request_nowarn(const struct firmware **fw, const char *name,
  46                            struct device *device);
  47int request_firmware_nowait(
  48        struct module *module, bool uevent,
  49        const char *name, struct device *device, gfp_t gfp, void *context,
  50        void (*cont)(const struct firmware *fw, void *context));
  51int request_firmware_direct(const struct firmware **fw, const char *name,
  52                            struct device *device);
  53int request_firmware_into_buf(const struct firmware **firmware_p,
  54        const char *name, struct device *device, void *buf, size_t size);
  55
  56void release_firmware(const struct firmware *fw);
  57#else
  58static inline int request_firmware(const struct firmware **fw,
  59                                   const char *name,
  60                                   struct device *device)
  61{
  62        return -EINVAL;
  63}
  64
  65static inline int firmware_request_nowarn(const struct firmware **fw,
  66                                          const char *name,
  67                                          struct device *device)
  68{
  69        return -EINVAL;
  70}
  71
  72static inline int request_firmware_nowait(
  73        struct module *module, bool uevent,
  74        const char *name, struct device *device, gfp_t gfp, void *context,
  75        void (*cont)(const struct firmware *fw, void *context))
  76{
  77        return -EINVAL;
  78}
  79
  80static inline void release_firmware(const struct firmware *fw)
  81{
  82}
  83
  84static inline int request_firmware_direct(const struct firmware **fw,
  85                                          const char *name,
  86                                          struct device *device)
  87{
  88        return -EINVAL;
  89}
  90
  91static inline int request_firmware_into_buf(const struct firmware **firmware_p,
  92        const char *name, struct device *device, void *buf, size_t size)
  93{
  94        return -EINVAL;
  95}
  96
  97#endif
  98
  99int firmware_request_cache(struct device *device, const char *name);
 100
 101#endif
 102