mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 03:10:12 +00:00
![Paul Gortmaker](/assets/img/avatar_default.png)
The <linux/module.h> pretty much brings in the kitchen sink along with it, so it should be avoided wherever reasonably possible in terms of being included from other commonly used <linux/something.h> files, as it results in a measureable increase on compile times. The worst culprit was probably device.h since it is used everywhere. This file also had an implicit dependency/usage of mutex.h which was masked by module.h, and is also fixed here at the same time. There are over a dozen other headers that simply declare the struct instead of pulling in the whole file, so follow their lead and simply make it a few more. Most of the implicit dependencies on module.h being present by these headers pulling it in have been now weeded out, so we can finally make this change with hopefully minimal breakage. Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
#ifndef _LINUX_FIRMWARE_H
|
|
#define _LINUX_FIRMWARE_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/gfp.h>
|
|
|
|
#define FW_ACTION_NOHOTPLUG 0
|
|
#define FW_ACTION_HOTPLUG 1
|
|
|
|
struct firmware {
|
|
size_t size;
|
|
const u8 *data;
|
|
struct page **pages;
|
|
};
|
|
|
|
struct module;
|
|
struct device;
|
|
|
|
struct builtin_fw {
|
|
char *name;
|
|
void *data;
|
|
unsigned long size;
|
|
};
|
|
|
|
/* We have to play tricks here much like stringify() to get the
|
|
__COUNTER__ macro to be expanded as we want it */
|
|
#define __fw_concat1(x, y) x##y
|
|
#define __fw_concat(x, y) __fw_concat1(x, y)
|
|
|
|
#define DECLARE_BUILTIN_FIRMWARE(name, blob) \
|
|
DECLARE_BUILTIN_FIRMWARE_SIZE(name, &(blob), sizeof(blob))
|
|
|
|
#define DECLARE_BUILTIN_FIRMWARE_SIZE(name, blob, size) \
|
|
static const struct builtin_fw __fw_concat(__builtin_fw,__COUNTER__) \
|
|
__used __section(.builtin_fw) = { name, blob, size }
|
|
|
|
#if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE))
|
|
int request_firmware(const struct firmware **fw, const char *name,
|
|
struct device *device);
|
|
int request_firmware_nowait(
|
|
struct module *module, bool uevent,
|
|
const char *name, struct device *device, gfp_t gfp, void *context,
|
|
void (*cont)(const struct firmware *fw, void *context));
|
|
|
|
void release_firmware(const struct firmware *fw);
|
|
#else
|
|
static inline int request_firmware(const struct firmware **fw,
|
|
const char *name,
|
|
struct device *device)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
static inline int request_firmware_nowait(
|
|
struct module *module, bool uevent,
|
|
const char *name, struct device *device, gfp_t gfp, void *context,
|
|
void (*cont)(const struct firmware *fw, void *context))
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline void release_firmware(const struct firmware *fw)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif
|