mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-17 03:05:54 +00:00

This allows a device to identify with different streams, for instance a Lenovo laptop could have a coreboot firmware or a AMI firmware. The GUIDs would be the same, but switching firmware would only be done rarely and very carefully. Another example would be switching the Broadcom BCM57xx nework adaptors from the vendor nonfree firmware with a signed PXE image, to the free software reverse engineered driver with no PXE support (and thus no signed DXE) at all. It is expected firmware would have additional metadata something like this: ... <branch>sdcc</branch> <description> <p> This is an alternate firmware built by the community using only free software tools. </p> </description> <requires> <id compare="ge" version="1.5.0">org.freedesktop.fwupd</id> <client>switch-branch</client> </requires> ... Additionally, alternate branch firmware will not be returned for clients not setting the FWUPD_FEATURE_FLAG_SWITCH_BRANCH before the GetReleases request.
71 lines
2.2 KiB
C
71 lines
2.2 KiB
C
/*
|
|
* Copyright (C) 2016 Mario Limonciello <mario.limonciello@dell.com>
|
|
* Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1+
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <glib-object.h>
|
|
|
|
#define FU_TYPE_QUIRKS (fu_quirks_get_type ())
|
|
G_DECLARE_FINAL_TYPE (FuQuirks, fu_quirks, FU, QUIRKS, GObject)
|
|
|
|
/**
|
|
* FuQuirksLoadFlags:
|
|
* @FU_QUIRKS_LOAD_FLAG_NONE: No flags set
|
|
* @FU_QUIRKS_LOAD_FLAG_READONLY_FS: Ignore readonly filesystem errors
|
|
*
|
|
* The flags to use when loading quirks.
|
|
**/
|
|
typedef enum {
|
|
FU_QUIRKS_LOAD_FLAG_NONE = 0,
|
|
FU_QUIRKS_LOAD_FLAG_READONLY_FS = 1 << 0,
|
|
/*< private >*/
|
|
FU_QUIRKS_LOAD_FLAG_LAST
|
|
} FuQuirksLoadFlags;
|
|
|
|
typedef void (*FuQuirksIter) (FuQuirks *self,
|
|
const gchar *key,
|
|
const gchar *value,
|
|
gpointer user_data);
|
|
|
|
FuQuirks *fu_quirks_new (void);
|
|
gboolean fu_quirks_load (FuQuirks *self,
|
|
FuQuirksLoadFlags load_flags,
|
|
GError **error);
|
|
const gchar *fu_quirks_lookup_by_id (FuQuirks *self,
|
|
const gchar *group,
|
|
const gchar *key);
|
|
gboolean fu_quirks_lookup_by_id_iter (FuQuirks *self,
|
|
const gchar *group,
|
|
FuQuirksIter iter_cb,
|
|
gpointer user_data);
|
|
|
|
#define FU_QUIRKS_PLUGIN "Plugin"
|
|
#define FU_QUIRKS_FLAGS "Flags"
|
|
#define FU_QUIRKS_SUMMARY "Summary"
|
|
#define FU_QUIRKS_ICON "Icon"
|
|
#define FU_QUIRKS_NAME "Name"
|
|
#define FU_QUIRKS_BRANCH "Branch"
|
|
#define FU_QUIRKS_GUID "Guid"
|
|
#define FU_QUIRKS_COUNTERPART_GUID "CounterpartGuid"
|
|
#define FU_QUIRKS_PARENT_GUID "ParentGuid"
|
|
#define FU_QUIRKS_PROXY_GUID "ProxyGuid"
|
|
#define FU_QUIRKS_CHILDREN "Children"
|
|
#define FU_QUIRKS_VERSION "Version"
|
|
#define FU_QUIRKS_VENDOR "Vendor"
|
|
#define FU_QUIRKS_VENDOR_ID "VendorId"
|
|
#define FU_QUIRKS_FIRMWARE_SIZE_MIN "FirmwareSizeMin"
|
|
#define FU_QUIRKS_FIRMWARE_SIZE_MAX "FirmwareSizeMax"
|
|
#define FU_QUIRKS_FIRMWARE_SIZE "FirmwareSize"
|
|
#define FU_QUIRKS_INSTALL_DURATION "InstallDuration"
|
|
#define FU_QUIRKS_VERSION_FORMAT "VersionFormat"
|
|
#define FU_QUIRKS_GTYPE "GType"
|
|
#define FU_QUIRKS_PROTOCOL "Protocol"
|
|
#define FU_QUIRKS_UPDATE_MESSAGE "UpdateMessage"
|
|
#define FU_QUIRKS_UPDATE_IMAGE "UpdateImage"
|
|
#define FU_QUIRKS_PRIORITY "Priority"
|
|
#define FU_QUIRKS_REMOVE_DELAY "RemoveDelay"
|