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 request_firmware_nowait(
  46        struct module *module, bool uevent,
  47        const char *name, struct device *device, gfp_t gfp, void *context,
  48        void (*cont)(const struct firmware *fw, void *context));
  49int request_firmware_direct(const struct firmware **fw, const char *name,
  50                            struct device *device);
  51int request_firmware_into_buf(const struct firmware **firmware_p,
  52        const char *name, struct device *device, void *buf, size_t size);
  53
  54void release_firmware(const struct firmware *fw);
  55#else
  56static inline int request_firmware(const struct firmware **fw,
  57                                   const char *name,
  58                                   struct device *device)
  59{
  60        return -EINVAL;
  61}
  62static inline int request_firmware_nowait(
  63        struct module *module, bool uevent,
  64        const char *name, struct device *device, gfp_t gfp, void *context,
  65        void (*cont)(const struct firmware *fw, void *context))
  66{
  67        return -EINVAL;
  68}
  69
  70static inline void release_firmware(const struct firmware *fw)
  71{
  72}
  73
  74static inline int request_firmware_direct(const struct firmware **fw,
  75                                          const char *name,
  76                                          struct device *device)
  77{
  78        return -EINVAL;
  79}
  80
  81static inline int request_firmware_into_buf(const struct firmware **firmware_p,
  82        const char *name, struct device *device, void *buf, size_t size)
  83{
  84        return -EINVAL;
  85}
  86
  87#endif
  88
  89int firmware_request_cache(struct device *device, const char *name);
  90
  91#endif
  92