diff --git a/contrib/setup-win32.nsi.in b/contrib/setup-win32.nsi.in index 15389d716..8412940dd 100644 --- a/contrib/setup-win32.nsi.in +++ b/contrib/setup-win32.nsi.in @@ -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" diff --git a/docs/tutorial.md b/docs/tutorial.md index 947f3c9e6..502a467a2 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -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 + * + * SPDX-License-Identifier: LGPL-2.1+ */ - #include - #include + #include 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 - - 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, diff --git a/libfwupdplugin/fu-plugin-private.h b/libfwupdplugin/fu-plugin-private.h index 6257cc117..f03335b80 100644 --- a/libfwupdplugin/fu-plugin-private.h +++ b/libfwupdplugin/fu-plugin-private.h @@ -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 diff --git a/libfwupdplugin/fu-plugin-vfuncs.h b/libfwupdplugin/fu-plugin-vfuncs.h index a2a656e0e..18ac801d0 100644 --- a/libfwupdplugin/fu-plugin-vfuncs.h +++ b/libfwupdplugin/fu-plugin-vfuncs.h @@ -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); diff --git a/libfwupdplugin/fu-plugin.c b/libfwupdplugin/fu-plugin.c index fb6531706..c81b3958d 100644 --- a/libfwupdplugin/fu-plugin.c +++ b/libfwupdplugin/fu-plugin.c @@ -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); diff --git a/libfwupdplugin/fu-plugin.h b/libfwupdplugin/fu-plugin.h index 1eeb2f9b2..eeffec2eb 100644 --- a/libfwupdplugin/fu-plugin.h +++ b/libfwupdplugin/fu-plugin.h @@ -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 #include +/* 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); diff --git a/libfwupdplugin/fwupdplugin.map b/libfwupdplugin/fwupdplugin.map index ccaf65745..107dd4877 100644 --- a/libfwupdplugin/fwupdplugin.map +++ b/libfwupdplugin/fwupdplugin.map @@ -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; diff --git a/meson.build b/meson.build index c36531881..dabfc1ce7 100644 --- a/meson.build +++ b/meson.build @@ -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) diff --git a/plugins/acpi-dmar/fu-plugin-acpi-dmar.c b/plugins/acpi-dmar/fu-plugin-acpi-dmar.c index d5f04862e..ec6db323c 100644 --- a/plugins/acpi-dmar/fu-plugin-acpi-dmar.c +++ b/plugins/acpi-dmar/fu-plugin-acpi-dmar.c @@ -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; +} diff --git a/plugins/acpi-facp/fu-plugin-acpi-facp.c b/plugins/acpi-facp/fu-plugin-acpi-facp.c index 85373fb58..988f83d73 100644 --- a/plugins/acpi-facp/fu-plugin-acpi-facp.c +++ b/plugins/acpi-facp/fu-plugin-acpi-facp.c @@ -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; +} diff --git a/plugins/acpi-phat/fu-plugin-acpi-phat.c b/plugins/acpi-phat/fu-plugin-acpi-phat.c index 0d4bdc932..57382d68a 100644 --- a/plugins/acpi-phat/fu-plugin-acpi-phat.c +++ b/plugins/acpi-phat/fu-plugin-acpi-phat.c @@ -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; +} diff --git a/plugins/altos/fu-plugin-altos.c b/plugins/altos/fu-plugin-altos.c index ac70f595f..50bbfb6ff 100644 --- a/plugins/altos/fu-plugin-altos.c +++ b/plugins/altos/fu-plugin-altos.c @@ -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; +} diff --git a/plugins/amt/fu-plugin-amt.c b/plugins/amt/fu-plugin-amt.c index 4e8803650..95c6fbea4 100644 --- a/plugins/amt/fu-plugin-amt.c +++ b/plugins/amt/fu-plugin-amt.c @@ -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; +} diff --git a/plugins/analogix/fu-plugin-analogix.c b/plugins/analogix/fu-plugin-analogix.c index e1d5b8c0c..1d038bbd6 100644 --- a/plugins/analogix/fu-plugin-analogix.c +++ b/plugins/analogix/fu-plugin-analogix.c @@ -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; +} diff --git a/plugins/ata/fu-plugin-ata.c b/plugins/ata/fu-plugin-ata.c index dbd711127..783920ef2 100644 --- a/plugins/ata/fu-plugin-ata.c +++ b/plugins/ata/fu-plugin-ata.c @@ -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; +} diff --git a/plugins/bcm57xx/fu-plugin-bcm57xx.c b/plugins/bcm57xx/fu-plugin-bcm57xx.c index a7c1ab511..87ce9f255 100644 --- a/plugins/bcm57xx/fu-plugin-bcm57xx.c +++ b/plugins/bcm57xx/fu-plugin-bcm57xx.c @@ -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; +} diff --git a/plugins/bios/fu-plugin-bios.c b/plugins/bios/fu-plugin-bios.c index f8d032557..565cb9732 100644 --- a/plugins/bios/fu-plugin-bios.c +++ b/plugins/bios/fu-plugin-bios.c @@ -8,14 +8,8 @@ #include -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; +} diff --git a/plugins/ccgx/fu-plugin-ccgx.c b/plugins/ccgx/fu-plugin-ccgx.c index 4a0144a95..a3ebc2251 100644 --- a/plugins/ccgx/fu-plugin-ccgx.c +++ b/plugins/ccgx/fu-plugin-ccgx.c @@ -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; +} diff --git a/plugins/cfu/fu-plugin-cfu.c b/plugins/cfu/fu-plugin-cfu.c index f86376df4..84c6d5cfb 100644 --- a/plugins/cfu/fu-plugin-cfu.c +++ b/plugins/cfu/fu-plugin-cfu.c @@ -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; +} diff --git a/plugins/colorhug/fu-plugin-colorhug.c b/plugins/colorhug/fu-plugin-colorhug.c index 83d6a34ad..aa9931703 100644 --- a/plugins/colorhug/fu-plugin-colorhug.c +++ b/plugins/colorhug/fu-plugin-colorhug.c @@ -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; +} diff --git a/plugins/cpu/fu-plugin-cpu.c b/plugins/cpu/fu-plugin-cpu.c index 07d1267a7..0b7dc5a41 100644 --- a/plugins/cpu/fu-plugin-cpu.c +++ b/plugins/cpu/fu-plugin-cpu.c @@ -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; +} diff --git a/plugins/cros-ec/fu-plugin-cros-ec.c b/plugins/cros-ec/fu-plugin-cros-ec.c index 7bf12335d..ebb197d54 100644 --- a/plugins/cros-ec/fu-plugin-cros-ec.c +++ b/plugins/cros-ec/fu-plugin-cros-ec.c @@ -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; +} diff --git a/plugins/dell-dock/fu-plugin-dell-dock.c b/plugins/dell-dock/fu-plugin-dell-dock.c index b7fec9ca8..554a80d3a 100644 --- a/plugins/dell-dock/fu-plugin-dell-dock.c +++ b/plugins/dell-dock/fu-plugin-dell-dock.c @@ -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; +} diff --git a/plugins/dell-esrt/fu-plugin-dell-esrt.c b/plugins/dell-esrt/fu-plugin-dell-esrt.c index eac2369a0..d969ddabf 100644 --- a/plugins/dell-esrt/fu-plugin-dell-esrt.c +++ b/plugins/dell-esrt/fu-plugin-dell-esrt.c @@ -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; +} diff --git a/plugins/dell/fu-plugin-dell.c b/plugins/dell/fu-plugin-dell.c index 1055dcb20..9d506ebe7 100644 --- a/plugins/dell/fu-plugin-dell.c +++ b/plugins/dell/fu-plugin-dell.c @@ -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; } diff --git a/plugins/dell/fu-plugin-dell.h b/plugins/dell/fu-plugin-dell.h index 423111e3e..4e62218d4 100644 --- a/plugins/dell/fu-plugin-dell.h +++ b/plugins/dell/fu-plugin-dell.h @@ -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 diff --git a/plugins/dell/fu-self-test.c b/plugins/dell/fu-self-test.c index 7325161b8..1692d4470 100644 --- a/plugins/dell/fu-self-test.c +++ b/plugins/dell/fu-self-test.c @@ -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); diff --git a/plugins/dfu-csr/fu-plugin-dfu-csr.c b/plugins/dfu-csr/fu-plugin-dfu-csr.c index 918de8a04..842e67302 100644 --- a/plugins/dfu-csr/fu-plugin-dfu-csr.c +++ b/plugins/dfu-csr/fu-plugin-dfu-csr.c @@ -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; +} diff --git a/plugins/dfu/fu-plugin-dfu.c b/plugins/dfu/fu-plugin-dfu.c index c6440a83b..369697ea2 100644 --- a/plugins/dfu/fu-plugin-dfu.c +++ b/plugins/dfu/fu-plugin-dfu.c @@ -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; +} diff --git a/plugins/ebitdo/fu-plugin-ebitdo.c b/plugins/ebitdo/fu-plugin-ebitdo.c index a576f7297..5c57672c8 100644 --- a/plugins/ebitdo/fu-plugin-ebitdo.c +++ b/plugins/ebitdo/fu-plugin-ebitdo.c @@ -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; +} diff --git a/plugins/elanfp/fu-plugin-elanfp.c b/plugins/elanfp/fu-plugin-elanfp.c index 378eb8c27..30e817cf4 100644 --- a/plugins/elanfp/fu-plugin-elanfp.c +++ b/plugins/elanfp/fu-plugin-elanfp.c @@ -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; +} diff --git a/plugins/elantp/fu-plugin-elantp.c b/plugins/elantp/fu-plugin-elantp.c index 028e2bbb8..232be4caa 100644 --- a/plugins/elantp/fu-plugin-elantp.c +++ b/plugins/elantp/fu-plugin-elantp.c @@ -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; +} diff --git a/plugins/emmc/fu-plugin-emmc.c b/plugins/emmc/fu-plugin-emmc.c index 3ce4df2f1..698c18f7d 100644 --- a/plugins/emmc/fu-plugin-emmc.c +++ b/plugins/emmc/fu-plugin-emmc.c @@ -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; +} diff --git a/plugins/ep963x/fu-plugin-ep963x.c b/plugins/ep963x/fu-plugin-ep963x.c index 0d265508f..8b7868c36 100644 --- a/plugins/ep963x/fu-plugin-ep963x.c +++ b/plugins/ep963x/fu-plugin-ep963x.c @@ -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; +} diff --git a/plugins/fastboot/fu-plugin-fastboot.c b/plugins/fastboot/fu-plugin-fastboot.c index c5054794d..1ae6db6d9 100644 --- a/plugins/fastboot/fu-plugin-fastboot.c +++ b/plugins/fastboot/fu-plugin-fastboot.c @@ -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; +} diff --git a/plugins/flashrom/fu-plugin-flashrom.c b/plugins/flashrom/fu-plugin-flashrom.c index 3b9a898e8..f92345139 100644 --- a/plugins/flashrom/fu-plugin-flashrom.c +++ b/plugins/flashrom/fu-plugin-flashrom.c @@ -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; +} diff --git a/plugins/fresco-pd/fu-plugin-fresco-pd.c b/plugins/fresco-pd/fu-plugin-fresco-pd.c index 4dcee504d..09e18cd5a 100644 --- a/plugins/fresco-pd/fu-plugin-fresco-pd.c +++ b/plugins/fresco-pd/fu-plugin-fresco-pd.c @@ -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; +} diff --git a/plugins/goodix-moc/fu-plugin-goodixmoc.c b/plugins/goodix-moc/fu-plugin-goodixmoc.c index 0b2ae7568..19c0d8634 100644 --- a/plugins/goodix-moc/fu-plugin-goodixmoc.c +++ b/plugins/goodix-moc/fu-plugin-goodixmoc.c @@ -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; +} diff --git a/plugins/hailuck/fu-plugin-hailuck.c b/plugins/hailuck/fu-plugin-hailuck.c index 7e080cb93..f1fa063b0 100644 --- a/plugins/hailuck/fu-plugin-hailuck.c +++ b/plugins/hailuck/fu-plugin-hailuck.c @@ -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; +} diff --git a/plugins/intel-spi/fu-plugin-intel-spi.c b/plugins/intel-spi/fu-plugin-intel-spi.c index 373a0c2f2..a15e8b3a1 100644 --- a/plugins/intel-spi/fu-plugin-intel-spi.c +++ b/plugins/intel-spi/fu-plugin-intel-spi.c @@ -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; +} diff --git a/plugins/iommu/fu-plugin-iommu.c b/plugins/iommu/fu-plugin-iommu.c index 335e5e76c..eaaab94ef 100644 --- a/plugins/iommu/fu-plugin-iommu.c +++ b/plugins/iommu/fu-plugin-iommu.c @@ -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; +} diff --git a/plugins/jabra/fu-plugin-jabra.c b/plugins/jabra/fu-plugin-jabra.c index d4ed1ee1f..9ce4c6dc6 100644 --- a/plugins/jabra/fu-plugin-jabra.c +++ b/plugins/jabra/fu-plugin-jabra.c @@ -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; +} diff --git a/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c b/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c index 5cd479fe1..5e175b6d9 100644 --- a/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c +++ b/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c @@ -8,14 +8,8 @@ #include -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; +} diff --git a/plugins/linux-lockdown/fu-plugin-linux-lockdown.c b/plugins/linux-lockdown/fu-plugin-linux-lockdown.c index 5a8bfb0e1..3d34b3429 100644 --- a/plugins/linux-lockdown/fu-plugin-linux-lockdown.c +++ b/plugins/linux-lockdown/fu-plugin-linux-lockdown.c @@ -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; +} diff --git a/plugins/linux-sleep/fu-plugin-linux-sleep.c b/plugins/linux-sleep/fu-plugin-linux-sleep.c index 43145958e..f409cf74b 100644 --- a/plugins/linux-sleep/fu-plugin-linux-sleep.c +++ b/plugins/linux-sleep/fu-plugin-linux-sleep.c @@ -8,14 +8,8 @@ #include -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; +} diff --git a/plugins/linux-swap/fu-plugin-linux-swap.c b/plugins/linux-swap/fu-plugin-linux-swap.c index 3efc01844..2cbfe9a2e 100644 --- a/plugins/linux-swap/fu-plugin-linux-swap.c +++ b/plugins/linux-swap/fu-plugin-linux-swap.c @@ -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; +} diff --git a/plugins/linux-tainted/fu-plugin-linux-tainted.c b/plugins/linux-tainted/fu-plugin-linux-tainted.c index 55e08c7ec..c17599d33 100644 --- a/plugins/linux-tainted/fu-plugin-linux-tainted.c +++ b/plugins/linux-tainted/fu-plugin-linux-tainted.c @@ -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; +} diff --git a/plugins/logind/fu-plugin-logind.c b/plugins/logind/fu-plugin-logind.c index 0d8a90c2d..333270be5 100644 --- a/plugins/logind/fu-plugin-logind.c +++ b/plugins/logind/fu-plugin-logind.c @@ -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; +} diff --git a/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c b/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c index 01526d135..b93b745dd 100644 --- a/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c +++ b/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c @@ -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; +} diff --git a/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c b/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c index 53baaa865..79ef09e36 100644 --- a/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c +++ b/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c @@ -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; +} diff --git a/plugins/modem-manager/fu-plugin-modem-manager.c b/plugins/modem-manager/fu-plugin-modem-manager.c index 15a8364ff..abd8372ac 100644 --- a/plugins/modem-manager/fu-plugin-modem-manager.c +++ b/plugins/modem-manager/fu-plugin-modem-manager.c @@ -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; +} diff --git a/plugins/msr/fu-plugin-msr.c b/plugins/msr/fu-plugin-msr.c index 8e08f31ba..6035f95f3 100644 --- a/plugins/msr/fu-plugin-msr.c +++ b/plugins/msr/fu-plugin-msr.c @@ -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; +} diff --git a/plugins/mtd/fu-plugin-mtd.c b/plugins/mtd/fu-plugin-mtd.c index 33e477ca9..cf8010915 100644 --- a/plugins/mtd/fu-plugin-mtd.c +++ b/plugins/mtd/fu-plugin-mtd.c @@ -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; +} diff --git a/plugins/nitrokey/fu-plugin-nitrokey.c b/plugins/nitrokey/fu-plugin-nitrokey.c index f8bcfa4d3..971cfdd86 100644 --- a/plugins/nitrokey/fu-plugin-nitrokey.c +++ b/plugins/nitrokey/fu-plugin-nitrokey.c @@ -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; +} diff --git a/plugins/nvme/fu-plugin-nvme.c b/plugins/nvme/fu-plugin-nvme.c index f2e81f737..fbc5d0586 100644 --- a/plugins/nvme/fu-plugin-nvme.c +++ b/plugins/nvme/fu-plugin-nvme.c @@ -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; +} diff --git a/plugins/optionrom/fu-plugin-optionrom.c b/plugins/optionrom/fu-plugin-optionrom.c index cc4fb2225..5535ca60e 100644 --- a/plugins/optionrom/fu-plugin-optionrom.c +++ b/plugins/optionrom/fu-plugin-optionrom.c @@ -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; +} diff --git a/plugins/parade-lspcon/fu-plugin-parade-lspcon.c b/plugins/parade-lspcon/fu-plugin-parade-lspcon.c index eba26c2f1..0b6899ef0 100644 --- a/plugins/parade-lspcon/fu-plugin-parade-lspcon.c +++ b/plugins/parade-lspcon/fu-plugin-parade-lspcon.c @@ -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; +} diff --git a/plugins/pci-bcr/fu-plugin-pci-bcr.c b/plugins/pci-bcr/fu-plugin-pci-bcr.c index 62eeceac8..e1982218f 100644 --- a/plugins/pci-bcr/fu-plugin-pci-bcr.c +++ b/plugins/pci-bcr/fu-plugin-pci-bcr.c @@ -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; +} diff --git a/plugins/pci-mei/fu-plugin-pci-mei.c b/plugins/pci-mei/fu-plugin-pci-mei.c index f49aaabaa..8e2d543af 100644 --- a/plugins/pci-mei/fu-plugin-pci-mei.c +++ b/plugins/pci-mei/fu-plugin-pci-mei.c @@ -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; +} diff --git a/plugins/pixart-rf/fu-plugin-pixart-rf.c b/plugins/pixart-rf/fu-plugin-pixart-rf.c index 4461f4fa0..26cd88012 100644 --- a/plugins/pixart-rf/fu-plugin-pixart-rf.c +++ b/plugins/pixart-rf/fu-plugin-pixart-rf.c @@ -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; +} diff --git a/plugins/platform-integrity/fu-plugin-platform-integrity.c b/plugins/platform-integrity/fu-plugin-platform-integrity.c index 4172fde55..d34ac2b46 100644 --- a/plugins/platform-integrity/fu-plugin-platform-integrity.c +++ b/plugins/platform-integrity/fu-plugin-platform-integrity.c @@ -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; +} diff --git a/plugins/powerd/fu-plugin-powerd.c b/plugins/powerd/fu-plugin-powerd.c index 030437f4d..eb3e4db59 100644 --- a/plugins/powerd/fu-plugin-powerd.c +++ b/plugins/powerd/fu-plugin-powerd.c @@ -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; +} diff --git a/plugins/realtek-mst/fu-plugin-realtek-mst.c b/plugins/realtek-mst/fu-plugin-realtek-mst.c index 79a6a620f..63defe37a 100644 --- a/plugins/realtek-mst/fu-plugin-realtek-mst.c +++ b/plugins/realtek-mst/fu-plugin-realtek-mst.c @@ -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; +} diff --git a/plugins/redfish/fu-plugin-redfish.c b/plugins/redfish/fu-plugin-redfish.c index cc9781002..f11fa5302 100644 --- a/plugins/redfish/fu-plugin-redfish.c +++ b/plugins/redfish/fu-plugin-redfish.c @@ -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; +} diff --git a/plugins/rts54hid/fu-plugin-rts54hid.c b/plugins/rts54hid/fu-plugin-rts54hid.c index af3430d23..b65943160 100644 --- a/plugins/rts54hid/fu-plugin-rts54hid.c +++ b/plugins/rts54hid/fu-plugin-rts54hid.c @@ -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; +} diff --git a/plugins/rts54hub/fu-plugin-rts54hub.c b/plugins/rts54hub/fu-plugin-rts54hub.c index e52755a4e..a07a5a4f2 100644 --- a/plugins/rts54hub/fu-plugin-rts54hub.c +++ b/plugins/rts54hub/fu-plugin-rts54hub.c @@ -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; +} diff --git a/plugins/solokey/fu-plugin-solokey.c b/plugins/solokey/fu-plugin-solokey.c index 656947965..19589aadf 100644 --- a/plugins/solokey/fu-plugin-solokey.c +++ b/plugins/solokey/fu-plugin-solokey.c @@ -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; +} diff --git a/plugins/steelseries/fu-plugin-steelseries.c b/plugins/steelseries/fu-plugin-steelseries.c index 890d2e0ff..8f196b8fc 100644 --- a/plugins/steelseries/fu-plugin-steelseries.c +++ b/plugins/steelseries/fu-plugin-steelseries.c @@ -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; +} diff --git a/plugins/superio/fu-plugin-superio.c b/plugins/superio/fu-plugin-superio.c index 1135a83a6..5fb18ba66 100644 --- a/plugins/superio/fu-plugin-superio.c +++ b/plugins/superio/fu-plugin-superio.c @@ -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; +} diff --git a/plugins/synaptics-cape/fu-plugin-synaptics-cape.c b/plugins/synaptics-cape/fu-plugin-synaptics-cape.c index c6af42938..f94399166 100644 --- a/plugins/synaptics-cape/fu-plugin-synaptics-cape.c +++ b/plugins/synaptics-cape/fu-plugin-synaptics-cape.c @@ -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; +} diff --git a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c index 15ee0b76e..7c6b6859b 100644 --- a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c +++ b/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c @@ -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; +} diff --git a/plugins/synaptics-mst/fu-plugin-synaptics-mst.c b/plugins/synaptics-mst/fu-plugin-synaptics-mst.c index 296c605e0..b29de264c 100644 --- a/plugins/synaptics-mst/fu-plugin-synaptics-mst.c +++ b/plugins/synaptics-mst/fu-plugin-synaptics-mst.c @@ -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; +} diff --git a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c index ca0b6e337..0f62ac561 100644 --- a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c +++ b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c @@ -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; +} diff --git a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c b/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c index 8fe7338dc..7a3a06bde 100644 --- a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c +++ b/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c @@ -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; +} diff --git a/plugins/system76-launch/fu-plugin-system76-launch.c b/plugins/system76-launch/fu-plugin-system76-launch.c index 552032b11..21eea3e10 100644 --- a/plugins/system76-launch/fu-plugin-system76-launch.c +++ b/plugins/system76-launch/fu-plugin-system76-launch.c @@ -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; +} diff --git a/plugins/test/fu-plugin-invalid.c b/plugins/test/fu-plugin-invalid.c index a56278135..ec42f1b3d 100644 --- a/plugins/test/fu-plugin-invalid.c +++ b/plugins/test/fu-plugin-invalid.c @@ -9,7 +9,7 @@ #include void -fu_plugin_init(FuPlugin *plugin) +fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) { - fu_plugin_set_build_hash(plugin, "invalid"); + vfuncs->build_hash = "invalid"; } diff --git a/plugins/test/fu-plugin-test-ble.c b/plugins/test/fu-plugin-test-ble.c index b2ed49936..287f59371 100644 --- a/plugins/test/fu-plugin-test-ble.c +++ b/plugins/test/fu-plugin-test-ble.c @@ -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; +} diff --git a/plugins/test/fu-plugin-test.c b/plugins/test/fu-plugin-test.c index 092141c82..b9c1d1ad3 100644 --- a/plugins/test/fu-plugin-test.c +++ b/plugins/test/fu-plugin-test.c @@ -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; +} diff --git a/plugins/thelio-io/fu-plugin-thelio-io.c b/plugins/thelio-io/fu-plugin-thelio-io.c index 9910ffdbd..e97e2264e 100644 --- a/plugins/thelio-io/fu-plugin-thelio-io.c +++ b/plugins/thelio-io/fu-plugin-thelio-io.c @@ -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; +} diff --git a/plugins/thunderbolt/fu-plugin-thunderbolt.c b/plugins/thunderbolt/fu-plugin-thunderbolt.c index 7c03af763..50c7b4094 100644 --- a/plugins/thunderbolt/fu-plugin-thunderbolt.c +++ b/plugins/thunderbolt/fu-plugin-thunderbolt.c @@ -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; +} diff --git a/plugins/tpm/fu-plugin-tpm.c b/plugins/tpm/fu-plugin-tpm.c index 42b4219e4..eb96b73d6 100644 --- a/plugins/tpm/fu-plugin-tpm.c +++ b/plugins/tpm/fu-plugin-tpm.c @@ -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; +} diff --git a/plugins/uefi-capsule/fu-plugin-uefi-capsule.c b/plugins/uefi-capsule/fu-plugin-uefi-capsule.c index d84245a3c..3f28eac3d 100644 --- a/plugins/uefi-capsule/fu-plugin-uefi-capsule.c +++ b/plugins/uefi-capsule/fu-plugin-uefi-capsule.c @@ -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; +} diff --git a/plugins/uefi-dbx/fu-plugin-uefi-dbx.c b/plugins/uefi-dbx/fu-plugin-uefi-dbx.c index 6f48d4f1f..8a4431d80 100644 --- a/plugins/uefi-dbx/fu-plugin-uefi-dbx.c +++ b/plugins/uefi-dbx/fu-plugin-uefi-dbx.c @@ -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; +} diff --git a/plugins/uefi-pk/fu-plugin-uefi-pk.c b/plugins/uefi-pk/fu-plugin-uefi-pk.c index db47c37ec..6c30d92ac 100644 --- a/plugins/uefi-pk/fu-plugin-uefi-pk.c +++ b/plugins/uefi-pk/fu-plugin-uefi-pk.c @@ -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; +} diff --git a/plugins/uefi-recovery/fu-plugin-uefi-recovery.c b/plugins/uefi-recovery/fu-plugin-uefi-recovery.c index 6308f47e1..fe9cc7c37 100644 --- a/plugins/uefi-recovery/fu-plugin-uefi-recovery.c +++ b/plugins/uefi-recovery/fu-plugin-uefi-recovery.c @@ -8,17 +8,16 @@ #include -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; +} diff --git a/plugins/upower/fu-plugin-upower.c b/plugins/upower/fu-plugin-upower.c index c2d12ef8b..99d664a53 100644 --- a/plugins/upower/fu-plugin-upower.c +++ b/plugins/upower/fu-plugin-upower.c @@ -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; +} diff --git a/plugins/vli/fu-plugin-vli.c b/plugins/vli/fu-plugin-vli.c index c7dbd8dee..10f9b387e 100644 --- a/plugins/vli/fu-plugin-vli.c +++ b/plugins/vli/fu-plugin-vli.c @@ -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; +} diff --git a/plugins/wacom-raw/fu-plugin-wacom-raw.c b/plugins/wacom-raw/fu-plugin-wacom-raw.c index 5d4d3281d..c0e8ff7d2 100644 --- a/plugins/wacom-raw/fu-plugin-wacom-raw.c +++ b/plugins/wacom-raw/fu-plugin-wacom-raw.c @@ -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; +} diff --git a/plugins/wacom-usb/fu-plugin-wacom-usb.c b/plugins/wacom-usb/fu-plugin-wacom-usb.c index c7bc24dec..b10e10772 100644 --- a/plugins/wacom-usb/fu-plugin-wacom-usb.c +++ b/plugins/wacom-usb/fu-plugin-wacom-usb.c @@ -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; +} diff --git a/src/fu-engine.c b/src/fu-engine.c index fc82f045e..12beda297 100644 --- a/src/fu-engine.c +++ b/src/fu-engine.c @@ -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); diff --git a/src/fu-self-test.c b/src/fu-self-test.c index c1d2bc285..ed3122fc6 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -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 */