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_NOUEVENT 0
  10#define FW_ACTION_UEVENT 1
  11
  12struct firmware {
  13        size_t size;
  14        const u8 *data;
  15
  16        /* firmware loader private fields */
  17        void *priv;
  18};
  19
  20struct module;
  21struct device;
  22
  23struct builtin_fw {
  24        char *name;
  25        void *data;
  26        unsigned long size;
  27};
  28
  29/* We have to play tricks here much like stringify() to get the
  30   __COUNTER__ macro to be expanded as we want it */
  31#define __fw_concat1(x, y) x##y
  32#define __fw_concat(x, y) __fw_concat1(x, y)
  33
  34#define DECLARE_BUILTIN_FIRMWARE(name, blob)                                 \
  35        DECLARE_BUILTIN_FIRMWARE_SIZE(name, &(blob), sizeof(blob))
  36
  37#define DECLARE_BUILTIN_FIRMWARE_SIZE(name, blob, size)                      \
  38        static const struct builtin_fw __fw_concat(__builtin_fw,__COUNTER__) \
  39        __used __section(".builtin_fw") = { name, blob, size }
  40
  41#if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE))
  42int request_firmware(const struct firmware **fw, const char *name,
  43                     struct device *device);
  44int firmware_request_nowarn(const struct firmware **fw, const char *name,
  45                            struct device *device);
  46int firmware_request_platform(const struct firmware **fw, const char *name,
  47                              struct device *device);
  48int request_firmware_nowait(
  49        struct module *module, bool uevent,
  50        const char *name, struct device *device, gfp_t gfp, void *context,
  51        void (*cont)(const struct firmware *fw, void *context));
  52int request_firmware_direct(const struct firmware **fw, const char *name,
  53                            struct device *device);
  54int request_firmware_into_buf(const struct firmware **firmware_p,
  55        const char *name, struct device *device, void *buf, size_t size);
  56int request_partial_firmware_into_buf(const struct firmware **firmware_p,
  57                                      const char *name, struct device *device,
  58                                      void *buf, size_t size, size_t offset);
  59
  60void release_firmware(const struct firmware *fw);
  61#else
  62static inline int request_firmware(const struct firmware **fw,
  63                                   const char *name,
  64                                   struct device *device)
  65{
  66        return -EINVAL;
  67}
  68
  69static inline int firmware_request_nowarn(const struct firmware **fw,
  70                                          const char *name,
  71                                          struct device *device)
  72{
  73        return -EINVAL;
  74}
  75
  76static inline int firmware_request_platform(const struct firmware **fw,
  77                                            const char *name,
  78                                            struct device *device)
  79{
  80        return -EINVAL;
  81}
  82
  83static inline int request_firmware_nowait(
  84        struct module *module, bool uevent,
  85        const char *name, struct device *device, gfp_t gfp, void *context,
  86        void (*cont)(const struct firmware *fw, void *context))
  87{
  88        return -EINVAL;
  89}
  90
  91static inline void release_firmware(const struct firmware *fw)
  92{
  93}
  94
  95static inline int request_firmware_direct(const struct firmware **fw,
  96                                          const char *name,
  97                                          struct device *device)
  98{
  99        return -EINVAL;
 100}
 101
 102static inline int request_firmware_into_buf(const struct firmware **firmware_p,
 103        const char *name, struct device *device, void *buf, size_t size)
 104{
 105        return -EINVAL;
 106}
 107
 108static inline int request_partial_firmware_into_buf
 109                                        (const struct firmware **firmware_p,
 110                                         const char *name,
 111                                         struct device *device,
 112                                         void *buf, size_t size, size_t offset)
 113{
 114        return -EINVAL;
 115}
 116
 117#endif
 118
 119int firmware_request_cache(struct device *device, const char *name);
 120
 121#endif
 122