Speed up the daemon startup by ~2% by doing dlsym much less

We were calling g_module_symbol() 2703 times, which is actually more
expensive than you'd think.

It also means the plugins are actually what we tell people they are:
A set of vfuncs that get run. The reality before that they were dlsym'd
functions that get called at pretty random times.
This commit is contained in:
Richard Hughes 2021-11-08 10:25:48 +00:00
parent 4d63d4ad7c
commit e87fc05ab9
91 changed files with 1620 additions and 1252 deletions

View File

@ -64,7 +64,7 @@ Section "fwupd"
File "jcat-tool.exe"
File "fwupdtool.exe"
File "libfwupd-2.dll"
File "libfwupdplugin-4.dll"
File "libfwupdplugin-@FWUPD_PLUGINVER@.dll"
File "libgcab-1.0-0.dll"
File "libxmlb-2.dll"
File "libjcat-1.dll"

View File

@ -30,43 +30,53 @@ A plugin only needs to define the vfuncs that are required, and the plugin name
is taken automatically from the suffix of the `.so` file.
/*
* Copyright (C) 2017 Richard Hughes
* Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#include <fu-plugin.h>
#include <fu-plugin-vfuncs.h>
#include <fwupdplugin.h>
struct FuPluginData {
gpointer proxy;
};
void
fu_plugin_initialize (FuPlugin *plugin)
static void
fu_plugin_foo_init(FuPlugin *plugin)
{
fu_plugin_add_rule (plugin, FU_PLUGIN_RULE_RUN_BEFORE, "dfu");
fu_plugin_alloc_data (plugin, sizeof (FuPluginData));
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_BEFORE, "dfu");
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
}
void
fu_plugin_destroy (FuPlugin *plugin)
static void
fu_plugin_foo_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data (plugin);
destroy_proxy (data->proxy);
FuPluginData *data = fu_plugin_get_data(plugin);
destroy_proxy(data->proxy);
}
gboolean
fu_plugin_startup (FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_foo_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data (plugin);
data->proxy = create_proxy ();
if (data->proxy == NULL) {
g_set_error (error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED,
"failed to create proxy");
FuPluginData *data = fu_plugin_get_data(plugin);
data->proxy = create_proxy();
if(data->proxy == NULL) {
g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED,
"failed to create proxy");
return FALSE;
}
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_foo_init;
vfuncs->destroy = fu_plugin_foo_destroy;
vfuncs->startup = fu_plugin_foo_startup;
}
We have to define when our plugin is run in reference to other plugins, in this
case, making sure we run before the `dfu` plugin.
@ -81,28 +91,34 @@ The example here is all hardcoded, and a true plugin would have to
derive the details about the `FuDevice` from the hardware, for example reading
data from `sysfs` or `/dev`.
#include <fu-plugin.h>
gboolean
fu_plugin_coldplug (FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_foo_coldplug(FuPlugin *plugin, GError **error)
{
g_autoptr(FuDevice) dev = NULL;
fu_device_set_id (dev, "dummy-1:2:3");
fu_device_add_guid (dev, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e");
fu_device_set_version (dev, "1.2.3");
fu_device_get_version_lowest (dev, "1.2.2");
fu_device_get_version_bootloader (dev, "0.1.2");
fu_device_add_icon (dev, "computer");
fu_device_add_flag (dev, FWUPD_DEVICE_FLAG_UPDATABLE);
fu_plugin_device_add (plugin, dev);
fu_device_set_id(dev, "dummy-1:2:3");
fu_device_add_guid(dev, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e");
fu_device_set_version(dev, "1.2.3");
fu_device_get_version_lowest(dev, "1.2.2");
fu_device_get_version_bootloader(dev, "0.1.2");
fu_device_add_icon(dev, "computer");
fu_device_add_flag(dev, FWUPD_DEVICE_FLAG_UPDATABLE);
fu_plugin_device_add(plugin, dev);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->coldplug = fu_plugin_foo_coldplug;
}
This shows a lot of the plugin architecture in action.
Some notable points:
- The device ID (`dummy-1:2:3`) has to be unique on the system between all
- plugins, so including the plugin name as a prefix is probably a good idea.
plugins, so including the plugin name as a prefix is probably a good idea.
- The GUID value can be generated automatically using
`fu_device_add_guid(dev,"some-identifier")` but is quoted here explicitly. The
@ -144,20 +160,28 @@ ask the daemon to update the device with a suitable `.cab` file.
When this is done the daemon checks the update for compatibility with the device,
and then calls the vfuncs to update the device.
gboolean
fu_plugin_write_firmware (FuPlugin *plugin,
FuDevice *dev,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
static gboolean
fu_plugin_foo_write_firmware(FuPlugin *plugin,
FuDevice *dev,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
gsize sz = 0;
guint8 *buf = g_bytes_get_data (blob_fw, &sz);
guint8 *buf = g_bytes_get_data(blob_fw, &sz);
/* write 'buf' of size 'sz' to the hardware */
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->write_firmware = fu_plugin_foo_write_firmware;
}
It's important to note that the `blob_fw` is the binary firmware file
(e.g. `.dfu`) and **not** the `.cab` binary data.
@ -173,26 +197,34 @@ This could be something as simple as checking the system battery level is over a
certain threshold, or it could be as complicated as ensuring a vendor-specific
GPIO is asserted when specific types of hardware are updated.
gboolean
fu_plugin_prepare (FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_foo_prepare(FuPlugin *plugin, FuDevice *device, GError **error)
{
if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_REQUIRE_AC &&
!on_ac_power ()) {
g_set_error_literal (error,
FWUPD_ERROR,
FWUPD_ERROR_AC_POWER_REQUIRED,
"Cannot install update "
"when not on AC power");
if (fu_device_has_flag(device, FWUPD_DEVICE_FLAG_REQUIRE_AC && !on_ac_power()) {
g_set_error_literal(error,
FWUPD_ERROR,
FWUPD_ERROR_AC_POWER_REQUIRED,
"Cannot install update "
"when not on AC power");
return FALSE;
}
return TRUE;
}
gboolean
fu_plugin_cleanup (FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_foo_cleanup(FuPlugin *plugin, FuDevice *device, GError **error)
{
return g_file_set_contents ("/var/lib/fwupd/something",
fu_device_get_id (device), -1, error);
return g_file_set_contents("/var/lib/fwupd/something",
fu_device_get_id(device), -1, error);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->prepare = fu_plugin_foo_prepare;
vfuncs->cleanup = fu_plugin_foo_cleanup;
}
## Detaching to bootloader mode
@ -214,24 +246,24 @@ The optional vfuncs are **only** run on the plugin currently registered to
handle the device ID, although the registered plugin can change during the
attach and detach phases.
gboolean
fu_plugin_detach (FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
static gboolean
fu_plugin_foo_detach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
{
if (hardware_in_bootloader)
return TRUE;
return _device_detach(device, progress, error);
}
gboolean
fu_plugin_attach (FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
static gboolean
fu_plugin_foo_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
{
if (!hardware_in_bootloader)
return TRUE;
return _device_attach(device, progress, error);
}
gboolean
fu_plugin_reload (FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_foo_reload(FuPlugin *plugin, FuDevice *device, GError **error)
{
g_autofree gchar *version = _get_version(plugin, device, error);
if (version == NULL)
@ -240,6 +272,16 @@ attach and detach phases.
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->detach = fu_plugin_foo_detach;
vfuncs->attach = fu_plugin_foo_attach;
vfuncs->reload = fu_plugin_foo_reload;
}
## The Plugin Object Cache
The fwupd daemon provides a per-plugin cache which allows objects to be added,

View File

@ -39,10 +39,6 @@ fu_plugin_runner_startup(FuPlugin *self, GError **error) G_GNUC_WARN_UNUSED_RESU
gboolean
fu_plugin_runner_coldplug(FuPlugin *self, GError **error) G_GNUC_WARN_UNUSED_RESULT;
gboolean
fu_plugin_runner_coldplug_prepare(FuPlugin *self, GError **error) G_GNUC_WARN_UNUSED_RESULT;
gboolean
fu_plugin_runner_coldplug_cleanup(FuPlugin *self, GError **error) G_GNUC_WARN_UNUSED_RESULT;
gboolean
fu_plugin_runner_prepare(FuPlugin *self, FuDevice *device, FwupdInstallFlags flags, GError **error)
G_GNUC_WARN_UNUSED_RESULT;
gboolean

View File

@ -6,329 +6,15 @@
#pragma once
#include "fu-device.h"
#include "fu-hwids.h"
#include "fu-plugin.h"
#include "fu-quirks.h"
#include "fu-security-attrs.h"
/* for in-tree plugins only */
#ifdef FWUPD_COMPILATION
#include "fu-hash.h"
/* only until HSI is declared stable */
#include "fwupd-security-attr-private.h"
#endif
/**
* fu_plugin_init:
* @plugin: A #FuPlugin
* fu_plugin_init_vfuncs:
* @vfuncs: #FuPluginVfuncs
*
* Initializes the plugin.
* Sets up any static data structures for the plugin.
* Most plugins should call fu_plugin_set_build_hash in here.
* Initializes the plugin vfuncs.
*
* Since: 0.8.0
* Since: 1.7.2
**/
void
fu_plugin_init(FuPlugin *plugin);
/**
* fu_plugin_destroy:
* @plugin: a plugin
*
* Destroys the plugin.
* Any allocated memory should be freed here.
*
* Since: 0.8.0
**/
void
fu_plugin_destroy(FuPlugin *plugin);
/**
* fu_plugin_startup:
* @plugin: a plugin
* @error: (nullable): optional return location for an error
*
* Tries to start the plugin.
* Returns: TRUE for success or FALSE for failure.
*
* Any plugins not intended for the system or that have failure communicating
* with the device should return FALSE.
* Any allocated memory should be freed here.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error);
/**
* fu_plugin_coldplug:
* @plugin: a plugin
* @error: (nullable): optional return location for an error
*
* Probes for devices.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error);
/**
* fu_plugin_coldplug_prepare:
* @plugin: a plugin
* @error: (nullable): optional return location for an error
*
* Prepares to probe for devices.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_coldplug_prepare(FuPlugin *plugin, GError **error);
/**
* fu_plugin_coldplug_cleanup:
* @plugin: a plugin
* @error: (nullable): optional return location for an error
*
* Cleans up from probe for devices.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_coldplug_cleanup(FuPlugin *plugin, GError **error);
/**
* fu_plugin_write_firmware:
* @plugin: a plugin
* @dev: a device
* @blob_fw: a data blob
* @progress: a #FuProgress
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Updates the firmware on the device with blob_fw
*
* Since: 1.7.0
**/
gboolean
fu_plugin_write_firmware(FuPlugin *plugin,
FuDevice *dev,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error);
/**
* fu_plugin_verify:
* @plugin: a plugin
* @dev: a device
* @flags: verify flags
* @error: (nullable): optional return location for an error
*
* Verifies the firmware on the device matches the value stored in the database
*
* Since: 0.8.0
**/
gboolean
fu_plugin_verify(FuPlugin *plugin, FuDevice *dev, FuPluginVerifyFlags flags, GError **error);
/**
* fu_plugin_unlock:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Unlocks the device for writes.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_unlock(FuPlugin *plugin, FuDevice *dev, GError **error);
/**
* fu_plugin_activate:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Activates the new firmware on the device.
*
* This is intended for devices that it is not safe to immediately activate
* the firmware. It may be called at a more convenient time instead.
*
* Since: 1.2.6
**/
gboolean
fu_plugin_activate(FuPlugin *plugin, FuDevice *dev, FuProgress *progress, GError **error);
/**
* fu_plugin_clear_results:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Clears stored update results for the device.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_clear_results(FuPlugin *plugin, FuDevice *dev, GError **error);
/**
* fu_plugin_get_results:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Obtains historical update results for the device.
*
* Since: 0.8.0
**/
gboolean
fu_plugin_get_results(FuPlugin *plugin, FuDevice *dev, GError **error);
/**
* fu_plugin_attach:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Swaps the device from bootloader mode to runtime mode.
*
* Since: 1.0.2
**/
gboolean
fu_plugin_attach(FuPlugin *plugin, FuDevice *dev, FuProgress *progress, GError **error);
/**
* fu_plugin_detach:
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Swaps the device from runtime mode to bootloader mode.
*
* Since: 1.7.0
**/
gboolean
fu_plugin_detach(FuPlugin *plugin, FuDevice *dev, FuProgress *progress, GError **error);
/**
* fu_plugin_prepare:
* @plugin: a plugin
* @dev: a device
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Prepares the device to receive an update.
*
* Since: 1.7.0
**/
gboolean
fu_plugin_prepare(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error);
/**
* fu_plugin_cleanup
* @plugin: a plugin
* @dev: a device
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Cleans up the device after receiving an update.
*
* Since: 1.7.0
**/
gboolean
fu_plugin_cleanup(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error);
/**
* fu_plugin_composite_prepare
* @plugin: a plugin
* @devices: (element-type FuDevice): array of devices
* @error: (nullable): optional return location for an error
*
* Function run before updating group of composite devices.
*
* Since: 1.0.9
**/
gboolean
fu_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error);
/**
* fu_plugin_composite_cleanup
* @plugin: a plugin
* @devices: (element-type FuDevice): array of devices
* @error: (nullable): optional return location for an error
*
* Function run after updating group of composite devices.
*
* Since: 1.0.9
**/
gboolean
fu_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error);
/**
* fu_plugin_backend_device_added
* @plugin: a plugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function to run after a device is added by a backend, e.g. by USB or Udev.
*
* Since: 1.5.6
**/
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error);
/**
* fu_plugin_backend_device_changed
* @plugin: a plugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function run when the device changed.
*
* Since: 1.5.6
**/
gboolean
fu_plugin_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **error);
/**
* fu_plugin_backend_device_removed
* @plugin: a plugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function to run when device is physically removed.
*
* Since: 1.5.6
**/
gboolean
fu_plugin_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **error);
/**
* fu_plugin_device_added
* @plugin: a plugin
* @dev: a device
*
* Function run when the subclassed device has been added.
*
* Since: 1.5.0
**/
void
fu_plugin_device_added(FuPlugin *plugin, FuDevice *dev);
/**
* fu_plugin_device_created
* @plugin: a plugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Function run when the subclassed device has been created.
*
* Since: 1.4.0
**/
gboolean
fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error);
/**
* fu_plugin_device_registered
* @plugin: a plugin
* @dev: a device
*
* Function run when device registered from another plugin.
*
* Since: 0.9.7
**/
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *dev);
/**
* fu_plugin_add_security_attrs
* @plugin: a plugin
* @attrs: a security attribute
*
* Function that asks plugins to add Host Security Attributes.
*
* Since: 1.5.0
**/
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs);
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs);

View File

@ -36,7 +36,6 @@ typedef struct {
guint priority;
GPtrArray *rules[FU_PLUGIN_RULE_LAST];
GPtrArray *devices; /* (nullable) (element-type FuDevice) */
gchar *build_hash;
GHashTable *runtime_versions;
GHashTable *compile_versions;
FuContext *ctx;
@ -46,6 +45,7 @@ typedef struct {
GHashTable *report_metadata; /* (nullable): key:value */
GFileMonitor *config_monitor;
FuPluginData *data;
FuPluginVfuncs vfuncs;
} FuPluginPrivate;
enum {
@ -63,10 +63,7 @@ static guint signals[SIGNAL_LAST] = {0};
G_DEFINE_TYPE_WITH_PRIVATE(FuPlugin, fu_plugin, FWUPD_TYPE_PLUGIN)
#define GET_PRIVATE(o) (fu_plugin_get_instance_private(o))
typedef const gchar *(*FuPluginGetNameFunc)(void);
typedef void (*FuPluginInitFunc)(FuPlugin *self);
typedef gboolean (*FuPluginStartupFunc)(FuPlugin *self, GError **error);
typedef void (*FuPluginDeviceRegisterFunc)(FuPlugin *self, FuDevice *device);
typedef void (*FuPluginInitVfuncsFunc)(FuPluginVfuncs *vfuncs);
typedef gboolean (*FuPluginDeviceFunc)(FuPlugin *self, FuDevice *device, GError **error);
typedef gboolean (*FuPluginDeviceProgressFunc)(FuPlugin *self,
FuDevice *device,
@ -77,17 +74,6 @@ typedef gboolean (*FuPluginFlaggedDeviceFunc)(FuPlugin *self,
FwupdInstallFlags flags,
GError **error);
typedef gboolean (*FuPluginDeviceArrayFunc)(FuPlugin *self, GPtrArray *devices, GError **error);
typedef gboolean (*FuPluginVerifyFunc)(FuPlugin *self,
FuDevice *device,
FuPluginVerifyFlags flags,
GError **error);
typedef gboolean (*FuPluginUpdateFunc)(FuPlugin *self,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error);
typedef void (*FuPluginSecurityAttrsFunc)(FuPlugin *self, FuSecurityAttrs *attrs);
/**
* fu_plugin_is_open:
@ -139,29 +125,11 @@ fu_plugin_set_name(FuPlugin *self, const gchar *name)
fwupd_plugin_set_name(FWUPD_PLUGIN(self), name);
}
/**
* fu_plugin_set_build_hash:
* @self: a #FuPlugin
* @build_hash: a checksum
*
* Sets the plugin build hash, typically a SHA256 checksum. All plugins must
* set the correct checksum to avoid the daemon being marked as tainted.
*
* Since: 1.2.4
**/
void
fu_plugin_set_build_hash(FuPlugin *self, const gchar *build_hash)
static FuPluginVfuncs *
fu_plugin_get_vfuncs(FuPlugin *self)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
g_return_if_fail(FU_IS_PLUGIN(self));
g_return_if_fail(build_hash != NULL);
/* not changed */
if (g_strcmp0(priv->build_hash, build_hash) == 0)
return;
g_free(priv->build_hash);
priv->build_hash = g_strdup(build_hash);
return &priv->vfuncs;
}
/**
@ -177,9 +145,9 @@ fu_plugin_set_build_hash(FuPlugin *self, const gchar *build_hash)
const gchar *
fu_plugin_get_build_hash(FuPlugin *self)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_return_val_if_fail(FU_IS_PLUGIN(self), NULL);
return priv->build_hash;
return vfuncs->build_hash;
}
/**
@ -338,7 +306,8 @@ gboolean
fu_plugin_open(FuPlugin *self, const gchar *filename, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginInitFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
FuPluginInitVfuncsFunc init_vfuncs = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
g_return_val_if_fail(filename != NULL, FALSE);
@ -357,6 +326,20 @@ fu_plugin_open(FuPlugin *self, const gchar *filename, GError **error)
return FALSE;
}
/* call the vfunc setup */
g_module_symbol(priv->module, "fu_plugin_init_vfuncs", (gpointer *)&init_vfuncs);
if (init_vfuncs == NULL) {
g_set_error(error,
G_IO_ERROR,
G_IO_ERROR_FAILED,
"failed to init_vfuncs() on plugin %s",
filename);
fu_plugin_add_flag(self, FWUPD_PLUGIN_FLAG_FAILED_OPEN);
fu_plugin_add_flag(self, FWUPD_PLUGIN_FLAG_USER_WARNING);
return FALSE;
}
init_vfuncs(vfuncs);
/* set automatically */
if (fu_plugin_get_name(self) == NULL) {
g_autofree gchar *str = fu_plugin_guess_name_from_fn(filename);
@ -364,10 +347,9 @@ fu_plugin_open(FuPlugin *self, const gchar *filename, GError **error)
}
/* optional */
g_module_symbol(priv->module, "fu_plugin_init", (gpointer *)&func);
if (func != NULL) {
if (vfuncs->init != NULL) {
g_debug("init(%s)", filename);
func(self);
vfuncs->init(self);
}
return TRUE;
@ -818,7 +800,7 @@ gboolean
fu_plugin_runner_startup(FuPlugin *self, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginStartupFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autofree gchar *config_filename = fu_plugin_get_config_filename(self);
g_autoptr(GError) error_local = NULL;
g_autoptr(GFile) file = g_file_new_for_path(config_filename);
@ -827,16 +809,11 @@ fu_plugin_runner_startup(FuPlugin *self, GError **error)
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_startup", (gpointer *)&func);
if (func == NULL)
if (vfuncs->startup == NULL)
return TRUE;
g_debug("startup(%s)", fu_plugin_get_name(self));
if (!func(self, &error_local)) {
if (!vfuncs->startup(self, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in startup(%s)", fu_plugin_get_name(self));
g_set_error_literal(&error_local,
@ -871,31 +848,17 @@ fu_plugin_runner_device_generic(FuPlugin *self,
FuPluginDeviceFunc device_func,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, symbol_name, (gpointer *)&func);
if (func == NULL) {
if (device_func != NULL) {
g_debug("running superclassed %s(%s)",
symbol_name + 10,
fu_plugin_get_name(self));
return device_func(self, device, error);
}
if (device_func == NULL)
return TRUE;
}
g_debug("%s(%s)", symbol_name + 10, fu_plugin_get_name(self));
if (!func(self, device, &error_local)) {
if (!device_func(self, device, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in %s(%s)",
fu_plugin_get_name(self),
@ -923,31 +886,17 @@ fu_plugin_runner_device_generic_progress(FuPlugin *self,
FuPluginDeviceProgressFunc device_func,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceProgressFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, symbol_name, (gpointer *)&func);
if (func == NULL) {
if (device_func != NULL) {
g_debug("running superclassed %s(%s)",
symbol_name + 10,
fu_plugin_get_name(self));
return device_func(self, device, progress, error);
}
if (device_func == NULL)
return TRUE;
}
g_debug("%s(%s)", symbol_name + 10, fu_plugin_get_name(self));
if (!func(self, device, progress, &error_local)) {
if (!device_func(self, device, progress, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in %s(%s)",
fu_plugin_get_name(self),
@ -972,22 +921,16 @@ fu_plugin_runner_flagged_device_generic(FuPlugin *self,
FuDevice *device,
FwupdInstallFlags flags,
const gchar *symbol_name,
FuPluginFlaggedDeviceFunc func,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginFlaggedDeviceFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, symbol_name, (gpointer *)&func);
if (func == NULL)
return TRUE;
g_debug("%s(%s)", symbol_name + 10, fu_plugin_get_name(self));
@ -1015,22 +958,16 @@ static gboolean
fu_plugin_runner_device_array_generic(FuPlugin *self,
GPtrArray *devices,
const gchar *symbol_name,
FuPluginDeviceArrayFunc func,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceArrayFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, symbol_name, (gpointer *)&func);
if (func == NULL)
return TRUE;
g_debug("%s(%s)", symbol_name + 10, fu_plugin_get_name(self));
@ -1069,7 +1006,7 @@ gboolean
fu_plugin_runner_coldplug(FuPlugin *self, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginStartupFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
/* not enabled */
@ -1080,16 +1017,11 @@ fu_plugin_runner_coldplug(FuPlugin *self, GError **error)
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_REQUIRE_HWID))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_coldplug", (gpointer *)&func);
if (func == NULL)
if (vfuncs->coldplug == NULL)
return TRUE;
g_debug("coldplug(%s)", fu_plugin_get_name(self));
if (!func(self, &error_local)) {
if (!vfuncs->coldplug(self, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in coldplug(%s)", fu_plugin_get_name(self));
g_set_error_literal(&error_local,
@ -1115,104 +1047,6 @@ fu_plugin_runner_coldplug(FuPlugin *self, GError **error)
return TRUE;
}
/**
* fu_plugin_runner_coldplug_prepare:
* @self: a #FuPlugin
* @error: (nullable): optional return location for an error
*
* Runs the coldplug_prepare routine for the plugin
*
* Returns: #TRUE for success, #FALSE for failure
*
* Since: 0.8.0
**/
gboolean
fu_plugin_runner_coldplug_prepare(FuPlugin *self, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginStartupFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_coldplug_prepare", (gpointer *)&func);
if (func == NULL)
return TRUE;
g_debug("coldplug_prepare(%s)", fu_plugin_get_name(self));
if (!func(self, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in coldplug_prepare(%s)",
fu_plugin_get_name(self));
g_set_error_literal(&error_local,
FWUPD_ERROR,
FWUPD_ERROR_INTERNAL,
"unspecified error");
}
g_propagate_prefixed_error(error,
g_steal_pointer(&error_local),
"failed to coldplug_prepare using %s: ",
fu_plugin_get_name(self));
return FALSE;
}
return TRUE;
}
/**
* fu_plugin_runner_coldplug_cleanup:
* @self: a #FuPlugin
* @error: (nullable): optional return location for an error
*
* Runs the coldplug_cleanup routine for the plugin
*
* Returns: #TRUE for success, #FALSE for failure
*
* Since: 0.8.0
**/
gboolean
fu_plugin_runner_coldplug_cleanup(FuPlugin *self, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginStartupFunc func = NULL;
g_autoptr(GError) error_local = NULL;
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_coldplug_cleanup", (gpointer *)&func);
if (func == NULL)
return TRUE;
g_debug("coldplug_cleanup(%s)", fu_plugin_get_name(self));
if (!func(self, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in coldplug_cleanup(%s)",
fu_plugin_get_name(self));
g_set_error_literal(&error_local,
FWUPD_ERROR,
FWUPD_ERROR_INTERNAL,
"unspecified error");
}
g_propagate_prefixed_error(error,
g_steal_pointer(&error_local),
"failed to coldplug_cleanup using %s: ",
fu_plugin_get_name(self));
return FALSE;
}
return TRUE;
}
/**
* fu_plugin_runner_composite_prepare:
* @self: a #FuPlugin
@ -1228,9 +1062,11 @@ fu_plugin_runner_coldplug_cleanup(FuPlugin *self, GError **error)
gboolean
fu_plugin_runner_composite_prepare(FuPlugin *self, GPtrArray *devices, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_device_array_generic(self,
devices,
"fu_plugin_composite_prepare",
vfuncs->composite_prepare,
error);
}
@ -1249,9 +1085,11 @@ fu_plugin_runner_composite_prepare(FuPlugin *self, GPtrArray *devices, GError **
gboolean
fu_plugin_runner_composite_cleanup(FuPlugin *self, GPtrArray *devices, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_device_array_generic(self,
devices,
"fu_plugin_composite_cleanup",
vfuncs->composite_cleanup,
error);
}
@ -1271,10 +1109,12 @@ fu_plugin_runner_composite_cleanup(FuPlugin *self, GPtrArray *devices, GError **
gboolean
fu_plugin_runner_prepare(FuPlugin *self, FuDevice *device, FwupdInstallFlags flags, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_flagged_device_generic(self,
device,
flags,
"fu_plugin_prepare",
vfuncs->prepare,
error);
}
@ -1294,10 +1134,12 @@ fu_plugin_runner_prepare(FuPlugin *self, FuDevice *device, FwupdInstallFlags fla
gboolean
fu_plugin_runner_cleanup(FuPlugin *self, FuDevice *device, FwupdInstallFlags flags, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_flagged_device_generic(self,
device,
flags,
"fu_plugin_cleanup",
vfuncs->cleanup,
error);
}
@ -1317,12 +1159,14 @@ fu_plugin_runner_cleanup(FuPlugin *self, FuDevice *device, FwupdInstallFlags fla
gboolean
fu_plugin_runner_attach(FuPlugin *self, FuDevice *device, FuProgress *progress, GError **error)
{
return fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_attach",
fu_plugin_device_attach,
error);
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_attach",
vfuncs->attach != NULL ? vfuncs->attach : fu_plugin_device_attach,
error);
}
/**
@ -1341,12 +1185,14 @@ fu_plugin_runner_attach(FuPlugin *self, FuDevice *device, FuProgress *progress,
gboolean
fu_plugin_runner_detach(FuPlugin *self, FuDevice *device, FuProgress *progress, GError **error)
{
return fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_detach",
fu_plugin_device_detach,
error);
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
return fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_detach",
vfuncs->detach != NULL ? vfuncs->detach : fu_plugin_device_detach,
error);
}
/**
@ -1390,20 +1236,13 @@ fu_plugin_runner_reload(FuPlugin *self, FuDevice *device, GError **error)
void
fu_plugin_runner_add_security_attrs(FuPlugin *self, FuSecurityAttrs *attrs)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginSecurityAttrsFunc func = NULL;
const gchar *symbol_name = "fu_plugin_add_security_attrs";
/* no object loaded */
if (priv->module == NULL)
return;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
/* optional, but gets called even for disabled plugins */
g_module_symbol(priv->module, symbol_name, (gpointer *)&func);
if (func == NULL)
if (vfuncs->add_security_attrs == NULL)
return;
g_debug("%s(%s)", symbol_name + 10, fu_plugin_get_name(self));
func(self, attrs);
g_debug("add_security_attrs(%s)", fu_plugin_get_name(self));
vfuncs->add_security_attrs(self, attrs);
}
/**
@ -1620,7 +1459,7 @@ gboolean
fu_plugin_runner_backend_device_added(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -1631,13 +1470,8 @@ fu_plugin_runner_backend_device_added(FuPlugin *self, FuDevice *device, GError *
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_backend_device_added", (gpointer *)&func);
if (func == NULL) {
if (vfuncs->backend_device_added == NULL) {
if (priv->device_gtypes != NULL ||
fu_device_get_specialized_gtype(device) != G_TYPE_INVALID) {
return fu_plugin_backend_device_added(self, device, error);
@ -1649,7 +1483,7 @@ fu_plugin_runner_backend_device_added(FuPlugin *self, FuDevice *device, GError *
return FALSE;
}
g_debug("backend_device_added(%s)", fu_plugin_get_name(self));
if (!func(self, device, &error_local)) {
if (!vfuncs->backend_device_added(self, device, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in backend_device_added(%s)",
fu_plugin_get_name(self));
@ -1682,8 +1516,7 @@ fu_plugin_runner_backend_device_added(FuPlugin *self, FuDevice *device, GError *
gboolean
fu_plugin_runner_backend_device_changed(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -1694,16 +1527,11 @@ fu_plugin_runner_backend_device_changed(FuPlugin *self, FuDevice *device, GError
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_backend_device_changed", (gpointer *)&func);
if (func == NULL)
if (vfuncs->backend_device_changed == NULL)
return TRUE;
g_debug("udev_device_changed(%s)", fu_plugin_get_name(self));
if (!func(self, device, &error_local)) {
if (!vfuncs->backend_device_changed(self, device, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in udev_device_changed(%s)",
fu_plugin_get_name(self));
@ -1733,21 +1561,17 @@ fu_plugin_runner_backend_device_changed(FuPlugin *self, FuDevice *device, GError
void
fu_plugin_runner_device_added(FuPlugin *self, FuDevice *device)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceRegisterFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return;
if (priv->module == NULL)
return;
/* optional */
g_module_symbol(priv->module, "fu_plugin_device_added", (gpointer *)&func);
if (func == NULL)
if (vfuncs->device_added == NULL)
return;
g_debug("fu_plugin_device_added(%s)", fu_plugin_get_name(self));
func(self, device);
vfuncs->device_added(self, device);
}
/**
@ -1762,12 +1586,13 @@ fu_plugin_runner_device_added(FuPlugin *self, FuDevice *device)
void
fu_plugin_runner_device_removed(FuPlugin *self, FuDevice *device)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
if (!fu_plugin_runner_device_generic(self,
device,
"fu_plugin_backend_device_removed",
NULL,
vfuncs->backend_device_removed,
&error_local))
g_warning("%s", error_local->message);
}
@ -1784,20 +1609,16 @@ fu_plugin_runner_device_removed(FuPlugin *self, FuDevice *device)
void
fu_plugin_runner_device_register(FuPlugin *self, FuDevice *device)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceRegisterFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return;
if (priv->module == NULL)
return;
/* optional */
g_module_symbol(priv->module, "fu_plugin_device_registered", (gpointer *)&func);
if (func != NULL) {
if (vfuncs->device_registered != NULL) {
g_debug("fu_plugin_device_registered(%s)", fu_plugin_get_name(self));
func(self, device);
vfuncs->device_registered(self, device);
}
}
@ -1816,8 +1637,7 @@ fu_plugin_runner_device_register(FuPlugin *self, FuDevice *device)
gboolean
fu_plugin_runner_device_created(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
g_return_val_if_fail(FU_IS_DEVICE(device), FALSE);
@ -1826,15 +1646,12 @@ fu_plugin_runner_device_created(FuPlugin *self, FuDevice *device, GError **error
/* not enabled */
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_device_created", (gpointer *)&func);
if (func == NULL)
if (vfuncs->device_created == NULL)
return TRUE;
g_debug("fu_plugin_device_created(%s)", fu_plugin_get_name(self));
return func(self, device, error);
return vfuncs->device_created(self, device, error);
}
/**
@ -1858,8 +1675,7 @@ fu_plugin_runner_verify(FuPlugin *self,
FuPluginVerifyFlags flags,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginVerifyFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
GPtrArray *checksums;
g_autoptr(GError) error_local = NULL;
@ -1872,13 +1688,8 @@ fu_plugin_runner_verify(FuPlugin *self,
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_verify", (gpointer *)&func);
if (func == NULL) {
if (vfuncs->verify == NULL) {
if (!fu_device_has_flag(device, FWUPD_DEVICE_FLAG_CAN_VERIFY)) {
g_set_error(error,
FWUPD_ERROR,
@ -1895,17 +1706,18 @@ fu_plugin_runner_verify(FuPlugin *self,
g_ptr_array_set_size(checksums, 0);
/* run additional detach */
if (!fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_detach",
fu_plugin_device_detach,
error))
if (!fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_detach",
vfuncs->detach != NULL ? vfuncs->detach : fu_plugin_device_detach,
error))
return FALSE;
/* run vfunc */
g_debug("verify(%s)", fu_plugin_get_name(self));
if (!func(self, device, flags, &error_local)) {
if (!vfuncs->verify(self, device, flags, &error_local)) {
g_autoptr(GError) error_attach = NULL;
if (error_local == NULL) {
g_critical("unset plugin error in verify(%s)", fu_plugin_get_name(self));
@ -1919,12 +1731,13 @@ fu_plugin_runner_verify(FuPlugin *self,
"failed to verify using %s: ",
fu_plugin_get_name(self));
/* make the device "work" again, but don't prefix the error */
if (!fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_attach",
fu_plugin_device_attach,
&error_attach)) {
if (!fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_attach",
vfuncs->attach != NULL ? vfuncs->attach : fu_plugin_device_attach,
&error_attach)) {
g_warning("failed to attach whilst aborting verify(): %s",
error_attach->message);
}
@ -1932,12 +1745,13 @@ fu_plugin_runner_verify(FuPlugin *self,
}
/* run optional attach */
if (!fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_attach",
fu_plugin_device_attach,
error))
if (!fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_attach",
vfuncs->attach != NULL ? vfuncs->attach : fu_plugin_device_attach,
error))
return FALSE;
/* success */
@ -1960,6 +1774,7 @@ fu_plugin_runner_verify(FuPlugin *self,
gboolean
fu_plugin_runner_activate(FuPlugin *self, FuDevice *device, FuProgress *progress, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
guint64 flags;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -1979,12 +1794,13 @@ fu_plugin_runner_activate(FuPlugin *self, FuDevice *device, FuProgress *progress
}
/* run vfunc */
if (!fu_plugin_runner_device_generic_progress(self,
device,
progress,
"fu_plugin_activate",
fu_plugin_device_activate,
error))
if (!fu_plugin_runner_device_generic_progress(
self,
device,
progress,
"fu_plugin_activate",
vfuncs->activate != NULL ? vfuncs->activate : fu_plugin_device_activate,
error))
return FALSE;
/* update with correct flags */
@ -2008,6 +1824,7 @@ fu_plugin_runner_activate(FuPlugin *self, FuDevice *device, FuProgress *progress
gboolean
fu_plugin_runner_unlock(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
guint64 flags;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -2026,7 +1843,11 @@ fu_plugin_runner_unlock(FuPlugin *self, FuDevice *device, GError **error)
}
/* run vfunc */
if (!fu_plugin_runner_device_generic(self, device, "fu_plugin_unlock", NULL, error))
if (!fu_plugin_runner_device_generic(self,
device,
"fu_plugin_unlock",
vfuncs->unlock,
error))
return FALSE;
/* update with correct flags */
@ -2058,8 +1879,7 @@ fu_plugin_runner_write_firmware(FuPlugin *self,
FwupdInstallFlags flags,
GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginUpdateFunc update_func;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -2073,15 +1893,8 @@ fu_plugin_runner_write_firmware(FuPlugin *self,
return TRUE;
}
/* no object loaded */
if (priv->module == NULL) {
g_debug("module not enabled, skipping");
return TRUE;
}
/* optional */
g_module_symbol(priv->module, "fu_plugin_write_firmware", (gpointer *)&update_func);
if (update_func == NULL) {
if (vfuncs->write_firmware == NULL) {
g_debug("superclassed write_firmware(%s)", fu_plugin_get_name(self));
return fu_plugin_device_write_firmware(self,
device,
@ -2092,7 +1905,7 @@ fu_plugin_runner_write_firmware(FuPlugin *self,
}
/* online */
if (!update_func(self, device, blob_fw, progress, flags, &error_local)) {
if (!vfuncs->write_firmware(self, device, blob_fw, progress, flags, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in update(%s)", fu_plugin_get_name(self));
g_set_error_literal(&error_local,
@ -2132,8 +1945,7 @@ fu_plugin_runner_write_firmware(FuPlugin *self,
gboolean
fu_plugin_runner_clear_results(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -2144,16 +1956,11 @@ fu_plugin_runner_clear_results(FuPlugin *self, FuDevice *device, GError **error)
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_clear_results", (gpointer *)&func);
if (func == NULL)
if (vfuncs->clear_results == NULL)
return TRUE;
g_debug("clear_result(%s)", fu_plugin_get_name(self));
if (!func(self, device, &error_local)) {
if (!vfuncs->clear_results(self, device, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in clear_result(%s)",
fu_plugin_get_name(self));
@ -2186,8 +1993,7 @@ fu_plugin_runner_clear_results(FuPlugin *self, FuDevice *device, GError **error)
gboolean
fu_plugin_runner_get_results(FuPlugin *self, FuDevice *device, GError **error)
{
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginDeviceFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_autoptr(GError) error_local = NULL;
g_return_val_if_fail(FU_IS_PLUGIN(self), FALSE);
@ -2198,18 +2004,13 @@ fu_plugin_runner_get_results(FuPlugin *self, FuDevice *device, GError **error)
if (fu_plugin_has_flag(self, FWUPD_PLUGIN_FLAG_DISABLED))
return TRUE;
/* no object loaded */
if (priv->module == NULL)
return TRUE;
/* optional */
g_module_symbol(priv->module, "fu_plugin_get_results", (gpointer *)&func);
if (func == NULL) {
if (vfuncs->get_results == NULL) {
g_debug("superclassed get_results(%s)", fu_plugin_get_name(self));
return fu_plugin_device_get_results(self, device, error);
}
g_debug("get_results(%s)", fu_plugin_get_name(self));
if (!func(self, device, &error_local)) {
if (!vfuncs->get_results(self, device, &error_local)) {
if (error_local == NULL) {
g_critical("unset plugin error in get_results(%s)",
fu_plugin_get_name(self));
@ -2601,17 +2402,14 @@ fu_plugin_finalize(GObject *object)
{
FuPlugin *self = FU_PLUGIN(object);
FuPluginPrivate *priv = GET_PRIVATE(self);
FuPluginInitFunc func = NULL;
FuPluginVfuncs *vfuncs = fu_plugin_get_vfuncs(self);
g_rw_lock_clear(&priv->cache_mutex);
/* optional */
if (priv->module != NULL) {
g_module_symbol(priv->module, "fu_plugin_destroy", (gpointer *)&func);
if (func != NULL) {
g_debug("destroy(%s)", fu_plugin_get_name(self));
func(self);
}
if (vfuncs->destroy != NULL) {
g_debug("destroy(%s)", fu_plugin_get_name(self));
vfuncs->destroy(self);
}
for (guint i = 0; i < FU_PLUGIN_RULE_LAST; i++) {
@ -2634,7 +2432,6 @@ fu_plugin_finalize(GObject *object)
g_array_unref(priv->device_gtypes);
if (priv->config_monitor != NULL)
g_object_unref(priv->config_monitor);
g_free(priv->build_hash);
g_free(priv->data);
G_OBJECT_CLASS(fu_plugin_parent_class)->finalize(object);

View File

@ -18,6 +18,10 @@
#include "fu-context.h"
#include "fu-device-locker.h"
#include "fu-device.h"
#include "fu-hwids.h"
#include "fu-plugin.h"
#include "fu-quirks.h"
#include "fu-security-attrs.h"
#include "fu-usb-device.h"
//#include "fu-hid-device.h"
#ifdef HAVE_GUDEV
@ -26,6 +30,13 @@
#include <libfwupd/fwupd-common.h>
#include <libfwupd/fwupd-plugin.h>
/* for in-tree plugins only */
#ifdef FWUPD_COMPILATION
#include "fu-hash.h"
/* only until HSI is declared stable */
#include "fwupd-security-attr-private.h"
#endif
#define FU_TYPE_PLUGIN (fu_plugin_get_type())
G_DECLARE_DERIVABLE_TYPE(FuPlugin, fu_plugin, FU, PLUGIN, FwupdPlugin)
@ -61,6 +72,302 @@ typedef enum {
FU_PLUGIN_VERIFY_FLAG_LAST
} FuPluginVerifyFlags;
/**
* FuPluginVfuncs:
*
* The virtual functions that are implemented by the plugins.
**/
typedef struct {
/**
* build_hash:
*
* Sets the plugin build hash which must be set to avoid tainting the engine.
*
* Since: 1.7.2
**/
const gchar *build_hash;
/**
* init:
* @self: A #FuPlugin
*
* Initializes the plugin.
* Sets up any static data structures for the plugin.
* Most plugins should call fu_plugin_set_build_hash in here.
*
* Since: 1.7.2
**/
void (*init)(FuPlugin *self);
/**
* destroy:
* @self: a plugin
*
* Destroys the plugin.
* Any allocated memory should be freed here.
*
* Since: 1.7.2
**/
void (*destroy)(FuPlugin *self);
/**
* startup:
* @self: a #FuPlugin
* @error: (nullable): optional return location for an error
*
* Tries to start the plugin.
* Returns: TRUE for success or FALSE for failure.
*
* Any plugins not intended for the system or that have failure communicating
* with the device should return FALSE.
* Any allocated memory should be freed here.
*
* Since: 1.7.2
**/
gboolean (*startup)(FuPlugin *self, GError **error);
/**
* coldplug:
* @self: a #FuPlugin
* @error: (nullable): optional return location for an error
*
* Probes for devices.
*
* Since: 1.7.2
**/
gboolean (*coldplug)(FuPlugin *self, GError **error);
/**
* device_created
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Function run when the subclassed device has been created.
*
* Since: 1.7.2
**/
gboolean (*device_created)(FuPlugin *self, FuDevice *device, GError **error);
/**
* device_registered
* @self: a #FuPlugin
* @dev: a device
*
* Function run when device registered from another plugin.
*
* Since: 1.7.2
**/
void (*device_registered)(FuPlugin *self, FuDevice *device);
/**
* device_added
* @self: a #FuPlugin
* @dev: a device
*
* Function run when the subclassed device has been added.
*
* Since: 1.7.2
**/
void (*device_added)(FuPlugin *self, FuDevice *device);
/**
* verify:
* @self: a #FuPlugin
* @dev: a device
* @flags: verify flags
* @error: (nullable): optional return location for an error
*
* Verifies the firmware on the device matches the value stored in the database
*
* Since: 1.7.2
**/
gboolean (*verify)(FuPlugin *self,
FuDevice *device,
FuPluginVerifyFlags flags,
GError **error);
/**
* get_results:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Obtains historical update results for the device.
*
* Since: 1.7.2
**/
gboolean (*get_results)(FuPlugin *self, FuDevice *device, GError **error);
/**
* clear_results:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Clears stored update results for the device.
*
* Since: 1.7.2
**/
gboolean (*clear_results)(FuPlugin *self, FuDevice *device, GError **error);
/**
* backend_device_added
* @self: a #FuPlugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function to run after a device is added by a backend, e.g. by USB or Udev.
*
* Since: 1.7.2
**/
gboolean (*backend_device_added)(FuPlugin *self, FuDevice *device, GError **error);
/**
* backend_device_changed
* @self: a #FuPlugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function run when the device changed.
*
* Since: 1.7.2
**/
gboolean (*backend_device_changed)(FuPlugin *self, FuDevice *device, GError **error);
/**
* backend_device_removed
* @self: a #FuPlugin
* @device: a device
* @error: (nullable): optional return location for an error
*
* Function to run when device is physically removed.
*
* Since: 1.7.2
**/
gboolean (*backend_device_removed)(FuPlugin *self, FuDevice *device, GError **error);
/**
* add_security_attrs
* @self: a #FuPlugin
* @attrs: a security attribute
*
* Function that asks plugins to add Host Security Attributes.
*
* Since: 1.7.2
**/
void (*add_security_attrs)(FuPlugin *self, FuSecurityAttrs *attrs);
/**
* write_firmware:
* @self: a #FuPlugin
* @dev: a device
* @blob_fw: a data blob
* @progress: a #FuProgress
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Updates the firmware on the device with blob_fw
*
* Since: 1.7.2
**/
gboolean (*write_firmware)(FuPlugin *self,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error);
/**
* unlock:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Unlocks the device for writes.
*
* Since: 1.7.2
**/
gboolean (*unlock)(FuPlugin *self, FuDevice *device, GError **error);
/**
* activate:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Activates the new firmware on the device.
*
* This is intended for devices that it is not safe to immediately activate
* the firmware. It may be called at a more convenient time instead.
*
* Since: 1.7.2
**/
gboolean (*activate)(FuPlugin *self,
FuDevice *device,
FuProgress *progress,
GError **error);
/**
* attach:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Swaps the device from bootloader mode to runtime mode.
*
* Since: 1.7.2
**/
gboolean (*attach)(FuPlugin *self, FuDevice *device, FuProgress *progress, GError **error);
/**
* detach:
* @self: a #FuPlugin
* @dev: a device
* @error: (nullable): optional return location for an error
*
* Swaps the device from runtime mode to bootloader mode.
*
* Since: 1.7.2
**/
gboolean (*detach)(FuPlugin *self, FuDevice *device, FuProgress *progress, GError **error);
/**
* prepare:
* @self: a #FuPlugin
* @dev: a device
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Prepares the device to receive an update.
*
* Since: 1.7.2
**/
gboolean (*prepare)(FuPlugin *self,
FuDevice *device,
FwupdInstallFlags flags,
GError **error);
/**
* cleanup
* @self: a #FuPlugin
* @dev: a device
* @flags: install flags
* @error: (nullable): optional return location for an error
*
* Cleans up the device after receiving an update.
*
* Since: 1.7.2
**/
gboolean (*cleanup)(FuPlugin *self,
FuDevice *device,
FwupdInstallFlags flags,
GError **error);
/**
* composite_prepare
* @self: a #FuPlugin
* @devices: (element-type FuDevice): array of devices
* @error: (nullable): optional return location for an error
*
* Function run before updating group of composite devices.
*
* Since: 1.7.2
**/
gboolean (*composite_prepare)(FuPlugin *self, GPtrArray *devices, GError **error);
/**
* composite_cleanup
* @self: a #FuPlugin
* @devices: (element-type FuDevice): array of devices
* @error: (nullable): optional return location for an error
*
* Function run after updating group of composite devices.
*
* Since: 1.7.2
**/
gboolean (*composite_cleanup)(FuPlugin *self, GPtrArray *devices, GError **error);
/*< private >*/
gpointer padding[9];
} FuPluginVfuncs;
/**
* FuPluginRule:
* @FU_PLUGIN_RULE_CONFLICTS: The plugin conflicts with another
@ -101,8 +408,6 @@ fu_plugin_alloc_data(FuPlugin *self, gsize data_sz);
FuContext *
fu_plugin_get_context(FuPlugin *self);
void
fu_plugin_set_build_hash(FuPlugin *self, const gchar *build_hash);
void
fu_plugin_device_add(FuPlugin *self, FuDevice *device);
void
fu_plugin_device_remove(FuPlugin *self, FuDevice *device);

View File

@ -47,8 +47,6 @@ LIBFWUPDPLUGIN_0.8.0 {
fu_plugin_open;
fu_plugin_runner_clear_results;
fu_plugin_runner_coldplug;
fu_plugin_runner_coldplug_cleanup;
fu_plugin_runner_coldplug_prepare;
fu_plugin_runner_get_results;
fu_plugin_runner_startup;
fu_plugin_runner_unlock;
@ -305,7 +303,6 @@ LIBFWUPDPLUGIN_1.2.4 {
fu_common_string_append_kx;
fu_device_incorporate_from_component;
fu_plugin_get_build_hash;
fu_plugin_set_build_hash;
fu_udev_device_get_slot_depth;
local: *;
} LIBFWUPDPLUGIN_1.2.2;

View File

@ -50,7 +50,7 @@ libfwupd_lt_current = '2'
libfwupd_lt_revision = '0'
libfwupd_lt_age = '0'
libfwupd_lt_version = '@0@.@1@.@2@'.format(libfwupd_lt_current, libfwupd_lt_age, libfwupd_lt_revision)
libfwupdplugin_lt_current = '4'
libfwupdplugin_lt_current = '5'
libfwupdplugin_lt_revision = '0'
libfwupdplugin_lt_age = '0'
libfwupdplugin_lt_version = '@0@.@1@.@2@'.format(libfwupdplugin_lt_current, libfwupdplugin_lt_age, libfwupdplugin_lt_revision)

View File

@ -10,14 +10,8 @@
#include "fu-acpi-dmar.h"
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_acpi_dmar_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
g_autofree gchar *fn = NULL;
g_autofree gchar *path = NULL;
@ -60,3 +54,10 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED);
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->add_security_attrs = fu_plugin_acpi_dmar_add_security_attrs;
}

View File

@ -10,14 +10,8 @@
#include "fu-acpi-facp.h"
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_acpi_facp_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
g_autofree gchar *fn = NULL;
g_autofree gchar *path = NULL;
@ -56,3 +50,10 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED);
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->add_security_attrs = fu_plugin_acpi_facp_add_security_attrs;
}

View File

@ -13,18 +13,17 @@
#include "fu-acpi-phat-version-record.h"
#include "fu-acpi-phat.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_acpi_phat_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ACPI_PHAT);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ACPI_PHAT_HEALTH_RECORD);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ACPI_PHAT_VERSION_ELEMENT);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ACPI_PHAT_VERSION_RECORD);
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_acpi_phat_coldplug(FuPlugin *plugin, GError **error)
{
g_autofree gchar *path = NULL;
g_autofree gchar *fn = NULL;
@ -43,3 +42,11 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_add_report_metadata(plugin, "PHAT", str);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_acpi_phat_init;
vfuncs->coldplug = fu_plugin_acpi_phat_coldplug;
}

View File

@ -11,10 +11,16 @@
#include "fu-altos-device.h"
#include "fu-altos-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_altos_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_ALTOS_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ALTOS_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_altos_init;
}

View File

@ -514,14 +514,8 @@ fu_plugin_amt_create_device(FuPlugin *plugin, GError **error)
return g_steal_pointer(&dev);
}
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_amt_coldplug(FuPlugin *plugin, GError **error)
{
g_autoptr(FuDevice) dev = NULL;
dev = fu_plugin_amt_create_device(plugin, error);
@ -530,3 +524,10 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_device_add(plugin, dev);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->coldplug = fu_plugin_amt_coldplug;
}

View File

@ -11,10 +11,16 @@
#include "fu-analogix-device.h"
#include "fu-analogix-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_analogix_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_ANALOGIX_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ANALOGIX_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_analogix_init;
}

View File

@ -10,10 +10,16 @@
#include "fu-ata-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_ata_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "block");
fu_plugin_add_device_gtype(plugin, FU_TYPE_ATA_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_ata_init;
}

View File

@ -14,10 +14,9 @@
#include "fu-bcm57xx-stage1-image.h"
#include "fu-bcm57xx-stage2-image.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_bcm57xx_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "pci");
fu_plugin_add_device_gtype(plugin, FU_TYPE_BCM57XX_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_BCM57XX_FIRMWARE);
@ -26,3 +25,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_BCM57XX_STAGE2_IMAGE);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "optionrom");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_bcm57xx_init;
}

View File

@ -8,14 +8,8 @@
#include <fwupdplugin.h>
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_bios_startup(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
const gchar *vendor;
@ -29,8 +23,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_bios_coldplug(FuPlugin *plugin, GError **error)
{
g_autofree gchar *sysfsfwdir = NULL;
g_autofree gchar *esrt_path = NULL;
@ -58,3 +52,11 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_DISABLED);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->startup = fu_plugin_bios_startup;
vfuncs->coldplug = fu_plugin_bios_coldplug;
}

View File

@ -14,11 +14,10 @@
#include "fu-ccgx-hid-device.h"
#include "fu-ccgx-hpi-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_ccgx_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_CCGX_FIRMWARE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_CCGX_DMC_FIRMWARE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_CCGX_HID_DEVICE);
@ -28,3 +27,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "CcgxFlashSize");
fu_context_add_quirk_key(ctx, "CcgxImageKind");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_ccgx_init;
}

View File

@ -10,9 +10,15 @@
#include "fu-cfu-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_cfu_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_CFU_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_cfu_init;
}

View File

@ -10,9 +10,15 @@
#include "fu-colorhug-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_colorhug_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_COLORHUG_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_colorhug_init;
}

View File

@ -10,15 +10,14 @@
#include "fu-cpu-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_cpu_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_BEFORE, "msr");
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_cpu_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
g_autoptr(FuCpuDevice) dev = fu_cpu_device_new(ctx);
@ -30,3 +29,11 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_device_add(plugin, FU_DEVICE(dev));
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_cpu_init;
vfuncs->coldplug = fu_plugin_cpu_coldplug;
}

View File

@ -11,10 +11,16 @@
#include "fu-cros-ec-firmware.h"
#include "fu-cros-ec-usb-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_cros_ec_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_CROS_EC_USB_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_CROS_EC_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_cros_ec_init;
}

View File

@ -19,12 +19,11 @@
#include "fu-dell-dock-common.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_dell_dock_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_context_add_quirk_key(ctx, "DellDockBlobBuildOffset");
fu_context_add_quirk_key(ctx, "DellDockBlobMajorOffset");
fu_context_add_quirk_key(ctx, "DellDockBlobMinorOffset");
@ -130,8 +129,8 @@ fu_plugin_dell_dock_get_ec(GPtrArray *devices)
return ec_parent;
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_dell_dock_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
g_autoptr(FuDeviceLocker) locker = NULL;
g_autoptr(FuDellDockHub) hub = NULL;
@ -215,8 +214,8 @@ fu_plugin_dell_dock_separate_activation(FuPlugin *plugin)
}
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_dell_dock_device_registered(FuPlugin *plugin, FuDevice *device)
{
/* usb4 device from thunderbolt plugin */
if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") == 0 &&
@ -240,8 +239,8 @@ fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
fu_dell_dock_clone_updatable(device);
}
gboolean
fu_plugin_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_dell_dock_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **error)
{
const gchar *device_key = fu_device_get_id(device);
FuDevice *dev;
@ -263,8 +262,8 @@ fu_plugin_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **er
return TRUE;
}
gboolean
fu_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error)
static gboolean
fu_plugin_dell_dock_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error)
{
FuDevice *parent = fu_plugin_dell_dock_get_ec(devices);
const gchar *sku;
@ -277,8 +276,8 @@ fu_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error
return TRUE;
}
gboolean
fu_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error)
static gboolean
fu_plugin_dell_dock_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error)
{
FuDevice *parent = fu_plugin_dell_dock_get_ec(devices);
FuDevice *dev = NULL;
@ -327,3 +326,15 @@ fu_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_dell_dock_init;
vfuncs->device_registered = fu_plugin_dell_dock_device_registered;
vfuncs->backend_device_added = fu_plugin_dell_dock_backend_device_added;
vfuncs->backend_device_removed = fu_plugin_dell_dock_backend_device_removed;
vfuncs->composite_cleanup = fu_plugin_dell_dock_composite_cleanup;
vfuncs->composite_prepare = fu_plugin_dell_dock_composite_prepare;
}

View File

@ -87,15 +87,14 @@ fu_plugin_dell_esrt_admin_password_present(gboolean *password_present, GError **
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_dell_esrt_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "bios");
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_dell_esrt_startup(FuPlugin *plugin, GError **error)
{
gboolean capsule_disable = FALSE;
g_autofree gchar *sysfsfwdir = NULL;
@ -131,8 +130,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_unlock(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_dell_esrt_unlock(FuPlugin *plugin, FuDevice *device, GError **error)
{
gboolean password_present = FALSE;
/* check the admin password isn't set */
@ -155,8 +154,8 @@ fu_plugin_unlock(FuPlugin *plugin, FuDevice *device, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_dell_esrt_coldplug(FuPlugin *plugin, GError **error)
{
g_autoptr(FuDevice) dev = fu_device_new();
@ -179,3 +178,13 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_device_add(plugin, dev);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_dell_esrt_init;
vfuncs->startup = fu_plugin_dell_esrt_startup;
vfuncs->coldplug = fu_plugin_dell_esrt_coldplug;
vfuncs->unlock = fu_plugin_dell_esrt_unlock;
}

View File

@ -291,7 +291,7 @@ fu_plugin_dock_node(FuPlugin *plugin,
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
FwupdVersionFormat version_format = FWUPD_VERSION_FORMAT_DELL_BIOS;
@ -449,8 +449,8 @@ fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **erro
return TRUE;
}
gboolean
fu_plugin_get_results(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_dell_get_results(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
g_autoptr(GBytes) de_table = NULL;
@ -833,8 +833,8 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_dell_device_registered(FuPlugin *plugin, FuDevice *device)
{
/* thunderbolt plugin */
if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") == 0 &&
@ -858,14 +858,13 @@ fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
}
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_dell_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *data = fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
g_autofree gchar *tmp = NULL;
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
tmp = g_strdup_printf("%d.%d",
smbios_get_library_version_major(),
smbios_get_library_version_minor());
@ -890,8 +889,8 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "tpm");
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_dell_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->smi_obj->smi)
@ -899,8 +898,8 @@ fu_plugin_destroy(FuPlugin *plugin)
g_free(data->smi_obj);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_dell_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *sysfsfwdir = NULL;
@ -958,8 +957,15 @@ fu_plugin_dell_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
return fu_plugin_dell_coldplug(plugin, error);
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_dell_init;
vfuncs->destroy = fu_plugin_dell_destroy;
vfuncs->startup = fu_plugin_dell_startup;
vfuncs->coldplug = fu_plugin_dell_coldplug;
vfuncs->backend_device_added = fu_plugin_dell_backend_device_added;
vfuncs->device_registered = fu_plugin_dell_device_registered;
vfuncs->get_results = fu_plugin_dell_get_results;
}

View File

@ -28,6 +28,8 @@ fu_plugin_dell_inject_fake_data(FuPlugin *plugin,
gboolean
fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error);
gboolean
fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error);
/* These are nodes that will indicate information about
* the TPM status

View File

@ -290,7 +290,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
0x4321,
NULL,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
&error);
g_assert_false(ret);
g_clear_error(&error);
g_assert_cmpint(devices->len, ==, 0);
@ -304,7 +306,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
NULL,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
&error);
g_assert_true(ret);
g_clear_error(&error);
g_assert_cmpint(devices->len, ==, 0);
@ -339,7 +343,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
buf.buf,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), NULL);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
NULL);
g_assert_true(ret);
g_assert_cmpint(devices->len, ==, 4);
g_ptr_array_set_size(devices, 0);
@ -375,7 +381,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
buf.buf,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), NULL);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
NULL);
g_assert_true(ret);
g_assert_cmpint(devices->len, ==, 3);
g_ptr_array_set_size(devices, 0);
@ -409,7 +417,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
buf.buf,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
&error);
g_assert_true(ret);
g_assert_no_error(error);
g_assert_cmpint(devices->len, ==, 3);
@ -444,7 +454,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
buf.buf,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
&error);
g_assert_true(ret);
g_assert_no_error(error);
g_assert_cmpint(devices->len, ==, 2);
@ -473,7 +485,9 @@ fu_plugin_dell_dock_func(gconstpointer user_data)
DOCK_NIC_PID,
buf.buf,
FALSE);
ret = fu_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error);
ret = fu_plugin_dell_backend_device_added(self->plugin_dell,
FU_DEVICE(fake_usb_device),
&error);
g_assert_false(ret);
g_assert_cmpint(devices->len, ==, 0);
g_free(buf.record);

View File

@ -10,9 +10,15 @@
#include "fu-dfu-csr-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_dfu_csr_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_DFU_CSR_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_dfu_csr_init;
}

View File

@ -10,13 +10,19 @@
#include "fu-dfu-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_dfu_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_DFU_DEVICE);
fu_context_add_quirk_key(ctx, "DfuAltName");
fu_context_add_quirk_key(ctx, "DfuForceTimeout");
fu_context_add_quirk_key(ctx, "DfuForceVersion");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_dfu_init;
}

View File

@ -11,10 +11,16 @@
#include "fu-ebitdo-device.h"
#include "fu-ebitdo-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_ebitdo_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_EBITDO_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EBITDO_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_ebitdo_init;
}

View File

@ -9,10 +9,16 @@
#include "fu-elanfp-device.h"
#include "fu-elanfp-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_elanfp_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_ELANFP_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ELANFP_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_elanfp_init;
}

View File

@ -12,8 +12,8 @@
#include "fu-elantp-hid-device.h"
#include "fu-elantp-i2c-device.h"
gboolean
fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
static gboolean
fu_plugin_elantp_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
{
if (fu_device_get_specialized_gtype(dev) == FU_TYPE_ELANTP_I2C_DEVICE &&
!fu_context_has_hwid_flag(fu_plugin_get_context(plugin), "elantp-recovery")) {
@ -23,11 +23,10 @@ fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_elantp_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "i2c-dev");
fu_plugin_add_udev_subsystem(plugin, "hidraw");
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ELANTP_FIRMWARE);
@ -37,3 +36,11 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_device_gtype(plugin, FU_TYPE_ELANTP_I2C_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_ELANTP_HID_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_elantp_init;
vfuncs->device_created = fu_plugin_elantp_device_created;
}

View File

@ -10,10 +10,16 @@
#include "fu-emmc-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_emmc_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "block");
fu_plugin_add_device_gtype(plugin, FU_TYPE_EMMC_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_emmc_init;
}

View File

@ -11,10 +11,16 @@
#include "fu-ep963x-device.h"
#include "fu-ep963x-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_ep963x_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_EP963X_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EP963X_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_ep963x_init;
}

View File

@ -10,9 +10,15 @@
#include "fu-fastboot-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_fastboot_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_FASTBOOT_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_fastboot_init;
}

View File

@ -17,12 +17,11 @@
#define SELFCHECK_TRUE 1
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_flashrom_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "linux_lockdown");
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "coreboot"); /* obsoleted */
fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_REQUIRE_HWID);
@ -143,8 +142,8 @@ fu_plugin_flashrom_device_set_hwids(FuPlugin *plugin, FuDevice *device)
}
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_flashrom_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
const gchar *dmi_vendor;
@ -172,8 +171,8 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_flashrom_startup(FuPlugin *plugin, GError **error)
{
if (flashrom_init(SELFCHECK_TRUE)) {
g_set_error_literal(error,
@ -185,3 +184,12 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
flashrom_set_log_callback(fu_plugin_flashrom_debug_cb);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_flashrom_init;
vfuncs->startup = fu_plugin_flashrom_startup;
vfuncs->coldplug = fu_plugin_flashrom_coldplug;
}

View File

@ -11,10 +11,16 @@
#include "fu-fresco-pd-device.h"
#include "fu-fresco-pd-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_fresco_pd_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_FRESCO_PD_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_FRESCO_PD_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_fresco_pd_init;
}

View File

@ -11,9 +11,15 @@
#include "fu-goodixmoc-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_goodixmoc_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_GOODIXMOC_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_goodixmoc_init;
}

View File

@ -12,11 +12,17 @@
#include "fu-hailuck-kbd-device.h"
#include "fu-hailuck-kbd-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_hailuck_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_HAILUCK_KBD_FIRMWARE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_HAILUCK_BL_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_HAILUCK_KBD_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_hailuck_init;
}

View File

@ -10,11 +10,10 @@
#include "fu-intel-spi-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_intel_spi_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "pci");
fu_context_add_quirk_key(ctx, "IntelSpiKind");
fu_context_add_quirk_key(ctx, "IntelSpiBar");
@ -23,8 +22,8 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_device_gtype(plugin, FU_TYPE_INTEL_SPI_DEVICE);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_intel_spi_startup(FuPlugin *plugin, GError **error)
{
if (fu_common_kernel_locked_down()) {
g_set_error_literal(error,
@ -35,3 +34,11 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
}
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_intel_spi_init;
vfuncs->startup = fu_plugin_intel_spi_startup;
}

View File

@ -12,16 +12,15 @@ struct FuPluginData {
gboolean has_iommu;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_iommu_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "iommu");
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_iommu_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -35,8 +34,8 @@ fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **erro
return TRUE;
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_iommu_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autoptr(FwupdSecurityAttr) attr = NULL;
@ -56,3 +55,12 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_iommu_init;
vfuncs->backend_device_added = fu_plugin_iommu_backend_device_added;
vfuncs->add_security_attrs = fu_plugin_iommu_add_security_attrs;
}

View File

@ -10,19 +10,18 @@
#include "fu-jabra-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_jabra_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_JABRA_DEVICE);
fu_context_add_quirk_key(ctx, "JabraMagic");
}
/* slightly weirdly, this takes us from appIDLE back into the actual
* runtime mode where the device actually works */
gboolean
fu_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, GError **error)
static gboolean
fu_plugin_jabra_cleanup(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, GError **error)
{
GUsbDevice *usb_device;
g_autoptr(FuDeviceLocker) locker = NULL;
@ -52,3 +51,11 @@ fu_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, G
fu_device_add_flag(device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_jabra_init;
vfuncs->cleanup = fu_plugin_jabra_cleanup;
}

View File

@ -8,14 +8,8 @@
#include <fwupdplugin.h>
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_lenovo_thinklmi_startup(FuPlugin *plugin, GError **error)
{
g_autofree gchar *sysfsfwdir = NULL;
g_autofree gchar *thinklmidir = NULL;
@ -84,8 +78,8 @@ fu_plugin_lenovo_firmware_locked(gboolean *locked, GError **error)
return TRUE;
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_lenovo_thinklmi_device_registered(FuPlugin *plugin, FuDevice *device)
{
gboolean locked = FALSE;
gboolean pending = FALSE;
@ -111,3 +105,11 @@ fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
"uefi-capsule-pending-reboot",
"UEFI BIOS settings update pending reboot");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->startup = fu_plugin_lenovo_thinklmi_startup;
vfuncs->device_registered = fu_plugin_lenovo_thinklmi_device_registered;
}

View File

@ -22,15 +22,14 @@ struct FuPluginData {
FuPluginLinuxLockdown lockdown;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_linux_lockdown_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_linux_lockdown_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->file != NULL)
@ -94,8 +93,8 @@ fu_plugin_linux_lockdown_changed_cb(GFileMonitor *monitor,
fu_context_security_changed(ctx);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_linux_lockdown_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *path = NULL;
@ -115,8 +114,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_linux_lockdown_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autoptr(FwupdSecurityAttr) attr = NULL;
@ -142,3 +141,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_linux_lockdown_init;
vfuncs->destroy = fu_plugin_linux_lockdown_destroy;
vfuncs->startup = fu_plugin_linux_lockdown_startup;
vfuncs->add_security_attrs = fu_plugin_linux_lockdown_add_security_attrs;
}

View File

@ -8,14 +8,8 @@
#include <fwupdplugin.h>
void
fu_plugin_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_linux_sleep_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
gsize bufsz = 0;
g_autofree gchar *buf = NULL;
@ -45,3 +39,10 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->add_security_attrs = fu_plugin_linux_sleep_add_security_attrs;
}

View File

@ -15,15 +15,14 @@ struct FuPluginData {
GFileMonitor *monitor;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_linux_swap_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_linux_swap_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->file != NULL)
@ -46,8 +45,8 @@ fu_plugin_linux_swap_changed_cb(GFileMonitor *monitor,
fu_context_security_changed(ctx);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_linux_swap_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *fn = NULL;
@ -66,8 +65,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_linux_swap_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *data = fu_plugin_get_data(plugin);
gsize bufsz = 0;
@ -114,3 +113,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENCRYPTED);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_linux_swap_init;
vfuncs->destroy = fu_plugin_linux_swap_destroy;
vfuncs->startup = fu_plugin_linux_swap_startup;
vfuncs->add_security_attrs = fu_plugin_linux_swap_add_security_attrs;
}

View File

@ -13,15 +13,14 @@ struct FuPluginData {
GFileMonitor *monitor;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_linux_tainted_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_linux_tainted_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->file != NULL)
@ -44,8 +43,8 @@ fu_plugin_linux_tainted_changed_cb(GFileMonitor *monitor,
fu_context_security_changed(ctx);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_linux_tainted_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *fn = NULL;
@ -64,8 +63,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_linux_tainted_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *data = fu_plugin_get_data(plugin);
gsize bufsz = 0;
@ -95,3 +94,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_TAINTED);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_linux_tainted_init;
vfuncs->destroy = fu_plugin_linux_tainted_destroy;
vfuncs->startup = fu_plugin_linux_tainted_startup;
vfuncs->add_security_attrs = fu_plugin_linux_tainted_add_security_attrs;
}

View File

@ -16,15 +16,14 @@ struct FuPluginData {
gint logind_fd;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_logind_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_logind_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->logind_fd != 0)
@ -33,8 +32,8 @@ fu_plugin_destroy(FuPlugin *plugin)
g_object_unref(data->logind_proxy);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_logind_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *name_owner = NULL;
@ -64,8 +63,11 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_prepare(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, GError **error)
static gboolean
fu_plugin_logind_prepare(FuPlugin *plugin,
FuDevice *device,
FwupdInstallFlags flags,
GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autoptr(GError) error_local = NULL;
@ -110,8 +112,11 @@ fu_plugin_prepare(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, G
return TRUE;
}
gboolean
fu_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, GError **error)
static gboolean
fu_plugin_logind_cleanup(FuPlugin *plugin,
FuDevice *device,
FwupdInstallFlags flags,
GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->logind_fd == 0)
@ -122,3 +127,14 @@ fu_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FwupdInstallFlags flags, G
data->logind_fd = 0;
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_logind_init;
vfuncs->destroy = fu_plugin_logind_destroy;
vfuncs->startup = fu_plugin_logind_startup;
vfuncs->cleanup = fu_plugin_logind_cleanup;
vfuncs->prepare = fu_plugin_logind_prepare;
}

View File

@ -10,9 +10,15 @@
#include "fu-logitech-bulkcontroller-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_logitech_bulkcontroller_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_LOGITECH_BULKCONTROLLER_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_logitech_bulkcontroller_init;
}

View File

@ -15,8 +15,8 @@
#include "fu-logitech-hidpp-runtime-bolt.h"
#include "fu-logitech-hidpp-runtime-unifying.h"
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_logitech_hidpp_startup(FuPlugin *plugin, GError **error)
{
/* check the kernel has CONFIG_HIDRAW */
if (!g_file_test("/sys/class/hidraw", G_FILE_TEST_IS_DIR)) {
@ -29,11 +29,10 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_logitech_hidpp_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "hidraw");
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "unifying");
fu_plugin_add_device_gtype(plugin, FU_TYPE_UNIFYING_BOOTLOADER_NORDIC);
@ -43,3 +42,11 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_device_gtype(plugin, FU_TYPE_HIDPP_RUNTIME_BOLT);
fu_context_add_quirk_key(ctx, "LogitechHidppModelId");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_logitech_hidpp_init;
vfuncs->startup = fu_plugin_logitech_hidpp_startup;
}

View File

@ -329,8 +329,8 @@ fu_plugin_mm_name_owner_updated(FuPlugin *plugin)
fu_plugin_mm_teardown_manager(plugin);
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_mm_coldplug(FuPlugin *plugin, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
g_signal_connect_swapped(priv->manager,
@ -341,8 +341,8 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_mm_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
g_autoptr(GDBusConnection) connection = NULL;
@ -360,15 +360,14 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_mm_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_mm_destroy(FuPlugin *plugin)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -382,8 +381,8 @@ fu_plugin_destroy(FuPlugin *plugin)
g_object_unref(priv->manager);
}
gboolean
fu_plugin_detach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
static gboolean
fu_plugin_mm_detach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
g_autoptr(FuDeviceLocker) locker = NULL;
@ -419,8 +418,8 @@ fu_plugin_mm_device_attach_finished(gpointer user_data)
fu_plugin_mm_uninhibit_device(plugin);
}
gboolean
fu_plugin_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
static gboolean
fu_plugin_mm_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error)
{
g_autoptr(FuDeviceLocker) locker = NULL;
@ -444,3 +443,15 @@ fu_plugin_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GErro
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_mm_init;
vfuncs->destroy = fu_plugin_mm_destroy;
vfuncs->startup = fu_plugin_mm_startup;
vfuncs->coldplug = fu_plugin_mm_coldplug;
vfuncs->attach = fu_plugin_mm_attach;
vfuncs->detach = fu_plugin_mm_detach;
}

View File

@ -40,16 +40,15 @@ struct FuPluginData {
#define PCI_MSR_IA32_BIOS_SIGN_ID 0x8b
#define PCI_MSR_K8_SYSCFG 0xC0010010
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_msr_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "msr");
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_msr_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
guint eax = 0;
@ -80,8 +79,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuDevice *device_cpu = fu_plugin_cache_lookup(plugin, "cpu");
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -182,8 +181,8 @@ fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **erro
return TRUE;
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *dev)
static void
fu_plugin_msr_device_registered(FuPlugin *plugin, FuDevice *dev)
{
if (g_strcmp0(fu_device_get_plugin(dev), "cpu") == 0) {
fu_plugin_cache_add(plugin, "cpu", dev);
@ -289,10 +288,21 @@ fu_plugin_add_security_attr_amd_tsme_enabled(FuPlugin *plugin, FuSecurityAttrs *
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_msr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
fu_plugin_add_security_attr_dci_enabled(plugin, attrs);
fu_plugin_add_security_attr_dci_locked(plugin, attrs);
fu_plugin_add_security_attr_amd_tsme_enabled(plugin, attrs);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_msr_init;
vfuncs->startup = fu_plugin_msr_startup;
vfuncs->backend_device_added = fu_plugin_msr_backend_device_added;
vfuncs->add_security_attrs = fu_plugin_msr_add_security_attrs;
vfuncs->device_registered = fu_plugin_msr_device_registered;
}

View File

@ -10,16 +10,15 @@
#include "fu-mtd-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_mtd_init(FuPlugin *plugin)
{
fu_plugin_add_udev_subsystem(plugin, "mtd");
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_MTD_DEVICE);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_mtd_startup(FuPlugin *plugin, GError **error)
{
#ifndef HAVE_MTD_USER_H
g_set_error_literal(error,
@ -31,8 +30,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
static gboolean
fu_plugin_mtd_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
const gchar *vendor;
@ -52,3 +51,12 @@ fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_mtd_init;
vfuncs->startup = fu_plugin_mtd_startup;
vfuncs->device_created = fu_plugin_mtd_device_created;
}

View File

@ -11,9 +11,15 @@
#include "fu-nitrokey-common.h"
#include "fu-nitrokey-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_nitrokey_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_NITROKEY_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_nitrokey_init;
}

View File

@ -10,10 +10,16 @@
#include "fu-nvme-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_nvme_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "nvme");
fu_plugin_add_device_gtype(plugin, FU_TYPE_NVME_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_nvme_init;
}

View File

@ -10,11 +10,17 @@
#include "fu-optionrom-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_optionrom_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "pci");
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "udev");
fu_plugin_add_device_gtype(plugin, FU_TYPE_OPTIONROM_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_optionrom_init;
}

View File

@ -8,10 +8,16 @@
#include "fu-parade-lspcon-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_parade_lspcon_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "i2c");
fu_plugin_add_device_gtype(plugin, FU_TYPE_PARADE_LSPCON_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_parade_lspcon_init;
}

View File

@ -18,12 +18,11 @@ struct FuPluginData {
#define BCR_BLE (1 << 1)
#define BCR_SMM_BWP (1 << 5)
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_pci_bcr_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "pci");
fu_context_add_quirk_key(ctx, "PciBcrAddr");
@ -42,8 +41,8 @@ fu_plugin_pci_bcr_set_updatable(FuPlugin *plugin, FuDevice *dev)
}
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *dev)
static void
fu_plugin_pci_bcr_device_registered(FuPlugin *plugin, FuDevice *dev)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
if (g_strcmp0(fu_device_get_plugin(dev), "cpu") == 0 ||
@ -157,8 +156,8 @@ fu_plugin_add_security_attr_smm_bwp(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_LOCKED);
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_pci_bcr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
FuDevice *device_msf;
@ -203,8 +202,8 @@ fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **erro
return TRUE;
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_pci_bcr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
/* only Intel */
if (fu_common_get_cpu_vendor() != FU_CPU_VENDOR_INTEL)
@ -215,3 +214,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fu_plugin_add_security_attr_ble(plugin, attrs);
fu_plugin_add_security_attr_smm_bwp(plugin, attrs);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_pci_bcr_init;
vfuncs->add_security_attrs = fu_plugin_pci_bcr_add_security_attrs;
vfuncs->device_registered = fu_plugin_pci_bcr_device_registered;
vfuncs->backend_device_added = fu_plugin_pci_bcr_backend_device_added;
}

View File

@ -48,16 +48,15 @@ fu_mei_hfsts_to_string(FuPlugin *plugin, guint idt, GString *str)
fu_mei_hfsts6_to_string(priv->hfsts6, idt + 1, str);
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_pci_mei_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "pci");
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_pci_mei_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->pci_device != NULL)
@ -149,8 +148,8 @@ fu_mei_parse_fwvers(FuPlugin *plugin, const gchar *fwvers, GError **error)
return TRUE;
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_pci_mei_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
const gchar *fwvers;
@ -499,8 +498,8 @@ fu_plugin_add_security_attrs_mei_version(FuPlugin *plugin, FuSecurityAttrs *attr
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_pci_mei_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -515,3 +514,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fu_plugin_add_security_attrs_bootguard(plugin, attrs);
fu_plugin_add_security_attrs_mei_version(plugin, attrs);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_pci_mei_init;
vfuncs->destroy = fu_plugin_pci_mei_destroy;
vfuncs->add_security_attrs = fu_plugin_pci_mei_add_security_attrs;
vfuncs->backend_device_added = fu_plugin_pci_mei_backend_device_added;
}

View File

@ -12,12 +12,18 @@
#include "fu-pxi-firmware.h"
#include "fu-pxi-receiver-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_pixart_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "hidraw");
fu_plugin_add_device_gtype(plugin, FU_TYPE_PXI_BLE_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_PXI_RECEIVER_DEVICE);
fu_plugin_add_firmware_gtype(plugin, "pixart", FU_TYPE_PXI_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_pixart_init;
}

View File

@ -12,23 +12,24 @@ struct FuPluginData {
gchar *sysfs_path;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_platform_integrity_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "platform-integrity");
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_platform_integrity_destroy(FuPlugin *plugin)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
g_free(priv->sysfs_path);
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_platform_integrity_backend_device_added(FuPlugin *plugin,
FuDevice *device,
GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -156,8 +157,8 @@ fu_plugin_add_security_attr_smm_bwp(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_LOCKED);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_platform_integrity_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -170,3 +171,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fu_plugin_add_security_attr_ble(plugin, attrs);
fu_plugin_add_security_attr_smm_bwp(plugin, attrs);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_platform_integrity_init;
vfuncs->destroy = fu_plugin_platform_integrity_destroy;
vfuncs->backend_device_added = fu_plugin_platform_integrity_backend_device_added;
vfuncs->add_security_attrs = fu_plugin_platform_integrity_add_security_attrs;
}

View File

@ -13,10 +13,9 @@ struct FuPluginData {
GDBusProxy *proxy; /* nullable */
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_powerd_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
}
@ -57,8 +56,8 @@ fu_plugin_powerd_delete_suspend_file(GError **error)
return TRUE;
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_powerd_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->proxy != NULL)
@ -95,8 +94,8 @@ fu_plugin_powerd_proxy_changed_cb(GDBusProxy *proxy,
fu_plugin_powerd_rescan(plugin, parameters);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_powerd_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *name_owner = NULL;
@ -145,14 +144,25 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_prepare(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error)
static gboolean
fu_plugin_powerd_prepare(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error)
{
return fu_plugin_powerd_create_suspend_file(error);
}
gboolean
fu_plugin_cleanup(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error)
static gboolean
fu_plugin_powerd_cleanup(FuPlugin *plugin, FuDevice *dev, FwupdInstallFlags flags, GError **error)
{
return fu_plugin_powerd_delete_suspend_file(error);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_powerd_init;
vfuncs->destroy = fu_plugin_powerd_destroy;
vfuncs->startup = fu_plugin_powerd_startup;
vfuncs->cleanup = fu_plugin_powerd_cleanup;
vfuncs->prepare = fu_plugin_powerd_prepare;
}

View File

@ -8,14 +8,20 @@
#include "fu-realtek-mst-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_realtek_mst_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_context_add_quirk_key(ctx, "RealtekMstDpAuxName");
fu_plugin_add_udev_subsystem(plugin, "i2c");
fu_plugin_add_device_gtype(plugin, FU_TYPE_REALTEK_MST_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_realtek_mst_init;
}

View File

@ -21,8 +21,8 @@ struct FuPluginData {
FuRedfishBackend *backend;
};
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_redfish_coldplug(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autoptr(GPtrArray) devices = NULL;
@ -281,8 +281,8 @@ fu_redfish_plugin_ipmi_create_user(FuPlugin *plugin, GError **error)
}
#endif
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_redfish_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *ca_check_str = NULL;
@ -360,19 +360,28 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return fu_backend_setup(FU_BACKEND(data->backend), error);
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_redfish_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *data = fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
data->backend = fu_redfish_backend_new(ctx);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_REDFISH_SMBIOS);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_redfish_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_object_unref(data->backend);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_redfish_init;
vfuncs->destroy = fu_plugin_redfish_destroy;
vfuncs->startup = fu_plugin_redfish_startup;
vfuncs->coldplug = fu_plugin_redfish_coldplug;
}

View File

@ -11,14 +11,20 @@
#include "fu-rts54hid-device.h"
#include "fu-rts54hid-module.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_rts54hid_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_MODULE);
fu_context_add_quirk_key(ctx, "Rts54TargetAddr");
fu_context_add_quirk_key(ctx, "Rts54I2cSpeed");
fu_context_add_quirk_key(ctx, "Rts54RegisterAddrLen");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_rts54hid_init;
}

View File

@ -12,11 +12,10 @@
#include "fu-rts54hub-rtd21xx-background.h"
#include "fu-rts54hub-rtd21xx-foreground.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_rts54hub_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HUB_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HUB_RTD21XX_BACKGROUND);
fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HUB_RTD21XX_FOREGROUND);
@ -24,3 +23,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "Rts54I2cSpeed");
fu_context_add_quirk_key(ctx, "Rts54RegisterAddrLen");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_rts54hub_init;
}

View File

@ -11,10 +11,16 @@
#include "fu-solokey-device.h"
#include "fu-solokey-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_solokey_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SOLOKEY_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SOLOKEY_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_solokey_init;
}

View File

@ -11,13 +11,18 @@
#include "fu-steelseries-device.h"
#include "fu-steelseries-gamepad.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_steelseries_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_GAMEPAD);
fu_context_add_quirk_key(ctx, "SteelSeriesDeviceKind");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_steelseries_init;
}

View File

@ -74,11 +74,10 @@ fu_plugin_superio_coldplug_chipset(FuPlugin *plugin, const gchar *guid, GError *
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_superio_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_EC_IT55_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SUPERIO_IT85_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SUPERIO_IT89_DEVICE);
@ -92,8 +91,8 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "SuperioAutoloadAction");
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_superio_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
GPtrArray *hwids;
@ -114,3 +113,11 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
}
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_superio_init;
vfuncs->coldplug = fu_plugin_superio_coldplug;
}

View File

@ -11,10 +11,16 @@
#include "fu-synaptics-cape-device.h"
#include "fu-synaptics-cape-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_synaptics_cape_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_CAPE_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_CAPE_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_synaptics_cape_init;
}

View File

@ -11,11 +11,10 @@
#include "fu-synaptics-cxaudio-device.h"
#include "fu-synaptics-cxaudio-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_synaptics_cxaudio_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_CXAUDIO_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_CXAUDIO_FIRMWARE);
fu_context_add_quirk_key(ctx, "CxaudioChipIdBase");
@ -23,3 +22,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "CxaudioPatch2ValidAddr");
fu_context_add_quirk_key(ctx, "CxaudioSoftwareReset");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_synaptics_cxaudio_init;
}

View File

@ -67,8 +67,8 @@ fu_plugin_synaptics_mst_rescan_cb(gpointer user_data)
return FALSE;
}
gboolean
fu_plugin_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_synaptics_mst_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -87,8 +87,8 @@ fu_plugin_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **er
return TRUE;
}
gboolean
fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_synaptics_mst_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *priv = fu_plugin_get_data(plugin);
@ -115,13 +115,13 @@ fu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **erro
return TRUE;
}
gboolean
fu_plugin_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
static gboolean
fu_plugin_synaptics_mst_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
g_autoptr(FuDeviceLocker) locker = fu_device_locker_new(device, error);
if (locker == NULL)
@ -133,8 +133,8 @@ fu_plugin_write_firmware(FuPlugin *plugin,
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_synaptics_mst_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
@ -142,18 +142,28 @@ fu_plugin_init(FuPlugin *plugin)
/* devices added by this plugin */
priv->devices = g_ptr_array_new_with_free_func((GDestroyNotify)g_object_unref);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "drm"); /* used for uevent only */
fu_plugin_add_udev_subsystem(plugin, "drm_dp_aux_dev");
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_MST_FIRMWARE);
fu_context_add_quirk_key(ctx, "SynapticsMstDeviceKind");
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_synaptics_mst_destroy(FuPlugin *plugin)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
if (priv->drm_changed_id != 0)
g_source_remove(priv->drm_changed_id);
g_ptr_array_unref(priv->devices);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_synaptics_mst_init;
vfuncs->destroy = fu_plugin_synaptics_mst_destroy;
vfuncs->write_firmware = fu_plugin_synaptics_mst_write_firmware;
vfuncs->backend_device_added = fu_plugin_synaptics_mst_backend_device_added;
vfuncs->backend_device_changed = fu_plugin_synaptics_mst_backend_device_changed;
}

View File

@ -11,10 +11,16 @@
#include "fu-synaprom-device.h"
#include "fu-synaprom-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_synaptics_prometheus_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPROM_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPROM_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_synaptics_prometheus_init;
}

View File

@ -12,13 +12,19 @@
#include "fu-synaptics-rmi-hid-device.h"
#include "fu-synaptics-rmi-ps2-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_synaptics_rmi_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "hidraw");
fu_plugin_add_udev_subsystem(plugin, "serio");
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_RMI_HID_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_RMI_PS2_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_RMI_FIRMWARE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_synaptics_rmi_init;
}

View File

@ -11,9 +11,15 @@
#include "fu-system76-launch-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_system76_launch_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_SYSTEM76_LAUNCH_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_system76_launch_init;
}

View File

@ -9,7 +9,7 @@
#include <fwupdplugin.h>
void
fu_plugin_init(FuPlugin *plugin)
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
fu_plugin_set_build_hash(plugin, "invalid");
vfuncs->build_hash = "invalid";
}

View File

@ -10,9 +10,15 @@
#include "fu-test-ble-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_test_ble_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_TEST_BLE_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_test_ble_init;
}

View File

@ -14,16 +14,15 @@ struct FuPluginData {
guint delay_verify_ms;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_test_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
g_debug("init");
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_test_destroy(FuPlugin *plugin)
{
// FuPluginData *data = fu_plugin_get_data (plugin);
g_debug("destroy");
@ -63,8 +62,8 @@ fu_plugin_test_load_xml(FuPlugin *plugin, const gchar *xml, GError **error)
return TRUE;
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_test_startup(FuPlugin *plugin, GError **error)
{
const gchar *xml = g_getenv("FWUPD_TEST_PLUGIN_XML");
if (xml != NULL) {
@ -74,8 +73,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_test_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
g_autoptr(FuDevice) device = NULL;
@ -141,14 +140,14 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_test_device_registered(FuPlugin *plugin, FuDevice *device)
{
fu_device_set_metadata(device, "BestDevice", "/dev/urandom");
}
gboolean
fu_plugin_verify(FuPlugin *plugin, FuDevice *device, FuPluginVerifyFlags flags, GError **error)
static gboolean
fu_plugin_test_verify(FuPlugin *plugin, FuDevice *device, FuPluginVerifyFlags flags, GError **error)
{
if (g_strcmp0(fu_device_get_version(device), "1.2.2") == 0) {
fu_device_add_checksum(device, "90d0ad436d21e0687998cd2127b2411135e1f730");
@ -192,13 +191,13 @@ fu_plugin_test_get_version(GBytes *blob_fw)
return fu_common_version_from_uint32(val, FWUPD_VERSION_FORMAT_TRIPLET);
}
gboolean
fu_plugin_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
static gboolean
fu_plugin_test_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
const gchar *test = g_getenv("FWUPD_PLUGIN_TEST");
@ -272,24 +271,24 @@ fu_plugin_write_firmware(FuPlugin *plugin,
return TRUE;
}
gboolean
fu_plugin_activate(FuPlugin *plugin, FuDevice *device, FuProgress *process, GError **error)
static gboolean
fu_plugin_test_activate(FuPlugin *plugin, FuDevice *device, FuProgress *process, GError **error)
{
fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_TRIPLET);
fu_device_set_version(device, "1.2.3");
return TRUE;
}
gboolean
fu_plugin_get_results(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_test_get_results(FuPlugin *plugin, FuDevice *device, GError **error)
{
fu_device_set_update_state(device, FWUPD_UPDATE_STATE_SUCCESS);
fu_device_set_update_error(device, NULL);
return TRUE;
}
gboolean
fu_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error)
static gboolean
fu_plugin_test_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error)
{
if (g_strcmp0(g_getenv("FWUPD_PLUGIN_TEST"), "composite") == 0) {
for (guint i = 0; i < devices->len; i++) {
@ -300,8 +299,8 @@ fu_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error
return TRUE;
}
gboolean
fu_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error)
static gboolean
fu_plugin_test_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error)
{
if (g_strcmp0(g_getenv("FWUPD_PLUGIN_TEST"), "composite") == 0) {
for (guint i = 0; i < devices->len; i++) {
@ -311,3 +310,20 @@ fu_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error
}
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_test_init;
vfuncs->destroy = fu_plugin_test_destroy;
vfuncs->composite_cleanup = fu_plugin_test_composite_cleanup;
vfuncs->composite_prepare = fu_plugin_test_composite_prepare;
vfuncs->get_results = fu_plugin_test_get_results;
vfuncs->activate = fu_plugin_test_activate;
vfuncs->write_firmware = fu_plugin_test_write_firmware;
vfuncs->verify = fu_plugin_test_verify;
vfuncs->startup = fu_plugin_test_startup;
vfuncs->coldplug = fu_plugin_test_coldplug;
vfuncs->device_registered = fu_plugin_test_device_registered;
}

View File

@ -11,9 +11,15 @@
#include "fu-thelio-io-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_thelio_io_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_THELIO_IO_DEVICE);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_thelio_io_init;
}

View File

@ -25,8 +25,8 @@ fu_plugin_thunderbolt_safe_kernel(FuPlugin *plugin, GError **error)
return fu_common_check_kernel_version(minimum_kernel, error);
}
gboolean
fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
static gboolean
fu_plugin_thunderbolt_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_add_rule(plugin,
@ -36,8 +36,8 @@ fu_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error)
return TRUE;
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_thunderbolt_device_registered(FuPlugin *plugin, FuDevice *device)
{
if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") != 0)
return;
@ -52,18 +52,27 @@ fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
}
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_thunderbolt_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_udev_subsystem(plugin, "thunderbolt");
fu_plugin_add_device_gtype(plugin, FU_TYPE_THUNDERBOLT_DEVICE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_THUNDERBOLT_FIRMWARE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_THUNDERBOLT_FIRMWARE_UPDATE);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_thunderbolt_startup(FuPlugin *plugin, GError **error)
{
return fu_plugin_thunderbolt_safe_kernel(plugin, error);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_thunderbolt_init;
vfuncs->startup = fu_plugin_thunderbolt_startup;
vfuncs->device_registered = fu_plugin_thunderbolt_device_registered;
vfuncs->device_created = fu_plugin_thunderbolt_device_created;
}

View File

@ -18,18 +18,17 @@ struct FuPluginData {
GPtrArray *ev_items; /* of FuTpmEventlogItem */
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_tpm_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "tpm_eventlog"); /* old name */
fu_plugin_add_udev_subsystem(plugin, "tpm");
fu_plugin_add_device_gtype(plugin, FU_TYPE_TPM_V2_DEVICE);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_tpm_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->tpm_device != NULL)
@ -64,8 +63,8 @@ fu_plugin_tpm_set_bios_pcr0s(FuPlugin *plugin)
}
/* set the PCR0 as the device checksum */
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_tpm_device_registered(FuPlugin *plugin, FuDevice *device)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (fu_device_has_instance_id(device, "main-system-firmware")) {
@ -74,8 +73,8 @@ fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
}
}
void
fu_plugin_device_added(FuPlugin *plugin, FuDevice *dev)
static void
fu_plugin_tpm_device_added(FuPlugin *plugin, FuDevice *dev)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autoptr(GPtrArray) pcr0s = NULL;
@ -198,8 +197,8 @@ fu_plugin_tpm_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attr
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_VALID);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_tpm_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
fu_plugin_tpm_add_security_attr_version(plugin, attrs);
fu_plugin_tpm_add_security_attr_eventlog(plugin, attrs);
@ -269,8 +268,8 @@ fu_plugin_tpm_coldplug_eventlog(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_tpm_coldplug(FuPlugin *plugin, GError **error)
{
g_autoptr(GError) error_local = NULL;
@ -282,8 +281,8 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_tpm_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *sysfstpmdir = NULL;
@ -302,3 +301,16 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
/* success */
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_tpm_init;
vfuncs->destroy = fu_plugin_tpm_destroy;
vfuncs->startup = fu_plugin_tpm_startup;
vfuncs->coldplug = fu_plugin_tpm_coldplug;
vfuncs->device_added = fu_plugin_tpm_device_added;
vfuncs->device_registered = fu_plugin_tpm_device_registered;
vfuncs->add_security_attrs = fu_plugin_tpm_add_security_attrs;
}

View File

@ -25,8 +25,8 @@ struct FuPluginData {
FuBackend *backend;
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_uefi_capsule_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *data = fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
@ -38,11 +38,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "linux_lockdown");
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "acpi_phat");
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "uefi"); /* old name */
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_uefi_capsule_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->esp != NULL)
@ -51,15 +50,15 @@ fu_plugin_destroy(FuPlugin *plugin)
g_object_unref(data->bgrt);
}
gboolean
fu_plugin_clear_results(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_uefi_capsule_clear_results(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuUefiDevice *device_uefi = FU_UEFI_DEVICE(device);
return fu_uefi_device_clear_status(device_uefi, error);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_uefi_capsule_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
g_autoptr(FwupdSecurityAttr) attr = NULL;
g_autoptr(GError) error = NULL;
@ -319,13 +318,13 @@ fu_plugin_uefi_capsule_update_splash(FuPlugin *plugin, FuDevice *device, GError
return fu_plugin_uefi_capsule_write_splash_data(plugin, device, image_bmp, error);
}
gboolean
fu_plugin_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
static gboolean
fu_plugin_uefi_capsule_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
const gchar *str;
guint32 flashes_left;
@ -411,8 +410,8 @@ fu_plugin_uefi_capsule_register_proxy_device(FuPlugin *plugin, FuDevice *device)
fu_plugin_device_add(plugin, FU_DEVICE(dev));
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_uefi_capsule_device_registered(FuPlugin *plugin, FuDevice *device)
{
if (fu_device_get_metadata(device, FU_DEVICE_METADATA_UEFI_DEVICE_KIND) != NULL) {
if (fu_device_get_guid_default(device) == NULL) {
@ -519,8 +518,8 @@ fu_plugin_uefi_capsule_test_secure_boot(FuPlugin *plugin)
fu_plugin_add_report_metadata(plugin, "SecureBoot", result_str);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_capsule_startup(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *data = fu_plugin_get_data(plugin);
@ -586,8 +585,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_unlock(FuPlugin *plugin, FuDevice *device, GError **error)
static gboolean
fu_plugin_uefi_capsule_unlock(FuPlugin *plugin, FuDevice *device, GError **error)
{
FuUefiDevice *device_uefi = FU_UEFI_DEVICE(device);
FuDevice *device_alt = NULL;
@ -683,7 +682,7 @@ fu_plugin_uefi_update_state_notify_cb(GObject *object, GParamSpec *pspec, FuPlug
}
static gboolean
fu_backend_uefi_check_cod_support(GError **error)
fu_plugin_uefi_capsule_check_cod_support(GError **error)
{
gsize bufsz = 0;
guint64 value = 0;
@ -712,8 +711,8 @@ fu_backend_uefi_check_cod_support(GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
FuPluginData *data = fu_plugin_get_data(plugin);
@ -737,7 +736,7 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
/* firmware may lie */
if (!fu_plugin_get_config_value_boolean(plugin, "DisableCapsuleUpdateOnDisk")) {
g_autoptr(GError) error_cod = NULL;
if (!fu_backend_uefi_check_cod_support(&error_cod)) {
if (!fu_plugin_uefi_capsule_check_cod_support(&error_cod)) {
g_debug("not using CapsuleOnDisk support: %s", error_cod->message);
} else {
fu_uefi_backend_set_device_gtype(FU_UEFI_BACKEND(data->backend),
@ -800,3 +799,18 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_uefi_capsule_init;
vfuncs->destroy = fu_plugin_uefi_capsule_destroy;
vfuncs->clear_results = fu_plugin_uefi_capsule_clear_results;
vfuncs->add_security_attrs = fu_plugin_uefi_capsule_add_security_attrs;
vfuncs->device_registered = fu_plugin_uefi_capsule_device_registered;
vfuncs->startup = fu_plugin_uefi_capsule_startup;
vfuncs->unlock = fu_plugin_uefi_capsule_unlock;
vfuncs->coldplug = fu_plugin_uefi_capsule_coldplug;
vfuncs->write_firmware = fu_plugin_uefi_capsule_write_firmware;
}

View File

@ -10,16 +10,15 @@
#include "fu-uefi-dbx-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_uefi_dbx_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "uefi_capsule");
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EFI_SIGNATURE_LIST);
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_dbx_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
g_autoptr(FuUefiDbxDevice) device = fu_uefi_dbx_device_new(ctx);
@ -30,3 +29,11 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_device_add(plugin, FU_DEVICE(device));
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_uefi_dbx_init;
vfuncs->coldplug = fu_plugin_uefi_dbx_coldplug;
}

View File

@ -115,8 +115,8 @@ fu_plugin_uefi_pk_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_pk_coldplug(FuPlugin *plugin, GError **error)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
g_autoptr(FuFirmware) img = NULL;
@ -151,22 +151,21 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
return TRUE;
}
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_uefi_pk_init(FuPlugin *plugin)
{
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
}
void
fu_plugin_device_registered(FuPlugin *plugin, FuDevice *device)
static void
fu_plugin_uefi_pk_device_registered(FuPlugin *plugin, FuDevice *device)
{
if (fu_device_has_instance_id(device, "main-system-firmware"))
fu_plugin_cache_add(plugin, "main-system-firmware", device);
}
void
fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
static void
fu_plugin_uefi_pk_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
{
FuPluginData *priv = fu_plugin_get_data(plugin);
FuDevice *msf_device = fu_plugin_cache_lookup(plugin, "main-system-firmware");
@ -190,3 +189,13 @@ fu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs)
fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS);
fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_VALID);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_uefi_pk_init;
vfuncs->add_security_attrs = fu_plugin_uefi_pk_add_security_attrs;
vfuncs->device_registered = fu_plugin_uefi_pk_device_registered;
vfuncs->coldplug = fu_plugin_uefi_pk_coldplug;
}

View File

@ -8,17 +8,16 @@
#include <fwupdplugin.h>
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_uefi_recovery_init(FuPlugin *plugin)
{
/* make sure that UEFI plugin is ready to receive devices */
fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "uefi_capsule");
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_REQUIRE_HWID);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_recovery_startup(FuPlugin *plugin, GError **error)
{
/* are the EFI dirs set up so we can update each device */
if (!fu_efivar_supported(error))
@ -26,8 +25,8 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
return TRUE;
}
gboolean
fu_plugin_coldplug(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_uefi_recovery_coldplug(FuPlugin *plugin, GError **error)
{
FuContext *ctx = fu_plugin_get_context(plugin);
GPtrArray *hwids = fu_context_get_hwid_guids(ctx);
@ -58,3 +57,12 @@ fu_plugin_coldplug(FuPlugin *plugin, GError **error)
fu_plugin_device_register(plugin, device);
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_uefi_recovery_init;
vfuncs->coldplug = fu_plugin_uefi_recovery_coldplug;
vfuncs->startup = fu_plugin_uefi_recovery_startup;
}

View File

@ -12,15 +12,14 @@ struct FuPluginData {
GDBusProxy *proxy; /* nullable */
};
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_upower_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_alloc_data(plugin, sizeof(FuPluginData));
}
void
fu_plugin_destroy(FuPlugin *plugin)
static void
fu_plugin_upower_destroy(FuPlugin *plugin)
{
FuPluginData *data = fu_plugin_get_data(plugin);
if (data->proxy != NULL)
@ -72,8 +71,8 @@ fu_plugin_upower_proxy_changed_cb(GDBusProxy *proxy,
fu_plugin_upower_rescan(plugin);
}
gboolean
fu_plugin_startup(FuPlugin *plugin, GError **error)
static gboolean
fu_plugin_upower_startup(FuPlugin *plugin, GError **error)
{
FuPluginData *data = fu_plugin_get_data(plugin);
g_autofree gchar *name_owner = NULL;
@ -109,3 +108,12 @@ fu_plugin_startup(FuPlugin *plugin, GError **error)
/* success */
return TRUE;
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_upower_init;
vfuncs->startup = fu_plugin_upower_startup;
vfuncs->destroy = fu_plugin_upower_destroy;
}

View File

@ -13,11 +13,10 @@
#include "fu-vli-usbhub-device.h"
#include "fu-vli-usbhub-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_vli_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_VLI_USBHUB_FIRMWARE);
fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_VLI_PD_FIRMWARE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_VLI_USBHUB_DEVICE);
@ -25,3 +24,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "VliDeviceKind");
fu_context_add_quirk_key(ctx, "VliSpiAutoDetect");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_vli_init;
}

View File

@ -12,11 +12,10 @@
#include "fu-wacom-common.h"
#include "fu-wacom-emr-device.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_wacom_raw_init(FuPlugin *plugin)
{
FuContext *ctx = fu_plugin_get_context(plugin);
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_WACOM_AES_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_WACOM_EMR_DEVICE);
fu_plugin_add_udev_subsystem(plugin, "hidraw");
@ -24,3 +23,10 @@ fu_plugin_init(FuPlugin *plugin)
fu_context_add_quirk_key(ctx, "WacomI2cFlashBaseAddr");
fu_context_add_quirk_key(ctx, "WacomI2cFlashSize");
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_wacom_raw_init;
}

View File

@ -12,22 +12,21 @@
#include "fu-wac-device.h"
#include "fu-wac-firmware.h"
void
fu_plugin_init(FuPlugin *plugin)
static void
fu_plugin_wacom_usb_init(FuPlugin *plugin)
{
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_plugin_add_device_gtype(plugin, FU_TYPE_WAC_DEVICE);
fu_plugin_add_device_gtype(plugin, FU_TYPE_WAC_ANDROID_DEVICE);
fu_plugin_add_firmware_gtype(plugin, "wacom", FU_TYPE_WAC_FIRMWARE);
}
gboolean
fu_plugin_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
static gboolean
fu_plugin_wacom_usb_write_firmware(FuPlugin *plugin,
FuDevice *device,
GBytes *blob_fw,
FuProgress *progress,
FwupdInstallFlags flags,
GError **error)
{
FuDevice *parent = fu_device_get_parent(device);
g_autoptr(FuDeviceLocker) locker = NULL;
@ -36,3 +35,11 @@ fu_plugin_write_firmware(FuPlugin *plugin,
return FALSE;
return fu_device_write_firmware(device, blob_fw, progress, flags, error);
}
void
fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs)
{
vfuncs->build_hash = FU_BUILD_HASH;
vfuncs->init = fu_plugin_wacom_usb_init;
vfuncs->write_firmware = fu_plugin_wacom_usb_write_firmware;
}

View File

@ -5580,16 +5580,8 @@ fu_engine_plugins_coldplug(FuEngine *self)
GPtrArray *plugins;
g_autoptr(GString) str = g_string_new(NULL);
/* prepare */
plugins = fu_plugin_list_get_all(self->plugin_list);
for (guint i = 0; i < plugins->len; i++) {
g_autoptr(GError) error = NULL;
FuPlugin *plugin = g_ptr_array_index(plugins, i);
if (!fu_plugin_runner_coldplug_prepare(plugin, &error))
g_warning("failed to prepare coldplug: %s", error->message);
}
/* exec */
plugins = fu_plugin_list_get_all(self->plugin_list);
for (guint i = 0; i < plugins->len; i++) {
g_autoptr(GError) error = NULL;
FuPlugin *plugin = g_ptr_array_index(plugins, i);
@ -5599,14 +5591,6 @@ fu_engine_plugins_coldplug(FuEngine *self)
}
}
/* cleanup */
for (guint i = 0; i < plugins->len; i++) {
g_autoptr(GError) error = NULL;
FuPlugin *plugin = g_ptr_array_index(plugins, i);
if (!fu_plugin_runner_coldplug_cleanup(plugin, &error))
g_warning("failed to cleanup coldplug: %s", error->message);
}
/* print what we do have */
for (guint i = 0; i < plugins->len; i++) {
FuPlugin *plugin = g_ptr_array_index(plugins, i);

View File

@ -1255,7 +1255,6 @@ fu_engine_partial_hash_func(gconstpointer user_data)
/* set up dummy plugin */
fu_plugin_set_name(plugin, "test");
fu_plugin_set_build_hash(plugin, FU_BUILD_HASH);
fu_engine_add_plugin(engine, plugin);
/* add two dummy devices */