Commit Graph

124 Commits

Author SHA1 Message Date
Richard Hughes
029d2895bd Rename fu_udev_device_pread_full() as we broke ABI 2022-06-03 13:47:11 -05:00
Richard Hughes
5ef0ae182d Add a 'name' attribute to each FuProgress step
This allows us to print better warning strings, and in the future
would allow us to profile each operation in a meaningful way.

Also, add context to some of the progress steps as required.
2022-06-01 15:05:43 +01:00
Richard Hughes
d3d7cfa816 Add plugin quirk keys earlier in the startup process
This allows creating the silo when starting the engine with custom
plugin keys such as WacomI2cFlashBaseAddr.

If we move the plugin initialization earlier then we don't get the
HwID matches, so we really do have to split this into a 4-stage startup,
e.g. ->load(), ->init(), ->startup() and ->coldplug().
2022-05-09 11:13:52 +01:00
Sergii Dmytruk
294bd648ea trivial: plugins/superio: include prj_name in IT55's to_string
Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
2022-04-19 10:44:28 +01:00
Sergii Dmytruk
dce73cbffb plugins/superio: don't leak chiplet property of device
Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
2022-04-19 10:44:10 +01:00
Richard Hughes
b25a3a4294 superio: Fix a small memory leak in an error path 2022-04-13 15:08:12 +01:00
Sergii Dmytruk
028740204b trivial: plugins/superio: don't add same flag twice
Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
2022-04-11 15:30:23 +01:00
Richard Hughes
481301a39d trivial: Convert more things to fu_progress_step_done()
This allows the front end client to know ahead-of-time how many steps
there are going to be.
2022-04-01 21:46:04 -05:00
Richard Hughes
c4ca026294 Allow devices to build instance IDs more easily
Provide a device instance builder that allows plugins to easily
create multiple instance IDs based on parent attributes.

Also fix a lot of the instance ID orders, so that we add more generic
IDs first, and more specific IDs after.
2022-03-03 09:13:29 +00:00
Mario Limonciello
661990ed98 Convert build system to use meson tristate features
tristate features will automatically disable if dependencies marked
as required are missing.

Packagers can manually override using `auto_features`.

Link: https://mesonbuild.com/Build-options.html#features
2022-02-28 08:34:48 -06:00
Richard Hughes
758d5d8c6f Add a flag to indicate the device is signed or unsigned
Devices without either flag are unknown.
2022-02-22 19:12:06 +00:00
Richard Hughes
2e99055d1e trivial: Add some more annotations for language bindings 2022-01-03 22:46:23 +00:00
Richard Hughes
58d36dcbe5 Check the value range when parsing the quirk keys
At the moment there isn't an error if you enter something like

    CfiDeviceCmdReadId = 0×12
2021-12-09 13:09:43 +00:00
Richard Hughes
e87fc05ab9 Speed up the daemon startup by ~2% by doing dlsym much less
We were calling g_module_symbol() 2703 times, which is actually more
expensive than you'd think.

It also means the plugins are actually what we tell people they are:
A set of vfuncs that get run. The reality before that they were dlsym'd
functions that get called at pretty random times.
2021-11-09 12:02:07 +00:00
Richard Hughes
758f34548c superio: Add missing parent finalizer 2021-10-27 15:57:53 +01:00
Sean Rhodes
371339bbeb plugins/superio: Don't check 0x14 in ITE signature
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
2021-10-08 18:28:37 +01:00
Richard Hughes
08f4040fc8
superio: Continue to add the SuperIO-IT8587 instance IDs (#3796)
The GUIDs are in use by old firmware, and so of course we have to
continue adding them.

See https://github.com/fwupd/fwupd/pull/3734#issuecomment-919829988
2021-09-25 22:11:43 +01:00
Sean Rhodes
5d4e70e9cc
plugins/superio: Fix detection of IT5570 for StarBook Mk V (#3747) 2021-09-14 10:41:24 +01:00
Richard Hughes
d8d26e1f97 superio: Make the ports and timeouts specific to the DMI model
The chipset doesn't define the port like I guessed, as Tuxedo and Star
Labs both want to use a 0x5570 with different values.
2021-09-13 17:42:32 +01:00
Richard Hughes
40cd18fa97 Allow using a per-device global percentage completion
It's actually quite hard to build a front-end for fwupd at the moment
as you're never sure when the progress bar is going to zip back to 0%
and start all over again. Some plugins go 0..100% for write, others
go 0..100% for erase, then again for write, then *again* for verify.

By creating a helper object we can easily split up the progress of the
specific task, e.g. write_firmware().

We can encode at the plugin level "the erase takes 50% of the time, the
write takes 40% and the read takes 10%". This means we can have a
progressbar which goes up just once at a consistent speed.
2021-09-13 14:28:15 +01:00
Sean Rhodes
33e850dea5 plugins/{superio,flashrom}: Add GUIDs for StarBook Mk V 2021-09-09 14:26:36 -05:00
Mario Limonciello
55de39c077 trivial: reformat the whole tree to match new format 2021-08-24 11:18:40 -05:00
Richard Hughes
c1ff02f055 trivial: Make the quirk style more consistent 2021-08-23 18:10:12 +01:00
Richard Hughes
6a8f285ee2 Check the quirk format as part of precommit 2021-08-23 18:10:12 +01:00
Mario Limonciello
798d1ed3ee trivial: update markdown for pre-commit style 2021-07-18 14:42:47 -05:00
Richard Hughes
df297d3ee2 superio: Always ensure the version string is NUL terminated
Spotted by Coverity
2021-07-10 13:51:28 +01:00
Richard Hughes
f1dbd42934 superio: Fix a buffer overread when using --verbose
Spotted by Coverity
2021-07-10 13:51:28 +01:00
Richard Hughes
772f116104 superio: Hide more debugging output by default 2021-07-10 13:51:28 +01:00
Richard Hughes
d4bd5cca5a Standardize some of the device summary text
This is supposed to be 'Sentence case' with no trailing fullstop.
2021-07-09 07:07:07 +01:00
Richard Hughes
7e77eb3e41 trivial: Add the missing quirk key
This fixes a nag warning every time we rebuild the silo.
2021-07-08 16:31:07 +01:00
Sergii Dmytruk
d8a5c7968d Add support for SuperIO IT5570
Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com>
2021-06-25 19:54:47 +01:00
Richard Hughes
6e3ad475a1 superio: Rename some variables with some new knowledge 2021-06-25 19:54:47 +01:00
Richard Hughes
2f9a9b2730 superio: trivial coldplug optimization 2021-06-25 19:54:47 +01:00
Maciej Pijanowski
4b01f4b10e superio/README.md: fix typo
Signed-off-by: Maciej Pijanowski <maciej.pijanowski@3mdeb.com>
2021-06-16 12:10:17 +01:00
Mario Limonciello
73cdf067ed trivial: fixup includes for a variety of plugins 2021-06-14 10:12:45 +01:00
Richard Hughes
b333e0045c Split out a shared system context
There is a lot of code in fwupd that just assigns a shared object type to
a FuPlugin, and then for each device on that plugin assigns that same shared
object to each FuDevice.

Rather than proxy several kinds of information stores over two different levels
of abstraction create a 'context' which contains the shared *system* state
between the daemon, the plugins and the daemon.

This will allow us to hold other per-machine state in the future, for instance
the system battery level or AC state.
2021-04-01 21:11:29 +01:00
Richard Hughes
74ac5ab86d trivial: Add fu_device_remove_flag() as a proper symbol
This allows us to automatically uninhibit() like we do in fu_device_add_flag().
2021-03-31 19:19:46 +01:00
Richard Hughes
a5966f7085 trivial: Codespell fixes 2021-03-19 16:42:33 +00:00
Richard Hughes
1981c63d58 Remove FuFirmwareImage and just use FuFirmware instead
This allows us to 'nest' firmware formats, and removes a ton of duplication.

The aim here is to deprecate FuFirmwareImage -- it's almost always acting
as a 'child' FuFirmware instance, and even copies most of the vfuncs to allow
custom types. If I'm struggling to work out what should be a FuFirmware and
what should be a FuFirmwareImage then a plugin author has no hope.

For simple payloads we were adding bytes into an image and then the image into
a firmware. This gets really messy when most plugins are treating the FuFirmware
*as* the binary firmware file.

The GBytes saved in the FuFirmware would be considered the payload with the
aim of not using FuFirmwareImage in the single-image case.
2021-03-09 21:14:12 +00:00
Sean Rhodes
247f29ad47 Updated StarLabs guids 2021-03-04 17:56:43 +00:00
Richard Hughes
a6784611e4 superio: Ensure quirks are set on the new devices
Fixes a regression in 79a217a2a6
2021-03-03 18:15:16 +00:00
Richard Hughes
c81b755872 Be more strict for custom quirk keys
Rather than trying to guess typos, force each plugin to register the quirk
keys it supports, so we can show a sensible warning if required at startup on
the console.
2021-03-03 08:30:34 +00:00
Richard Hughes
7d132b728c Simplify the quirk file format
The best way of not getting something wrong is to not require it in the first
place...

All plugins now use DeviceInstanceId-style quirk matches and we can just drop
the prefix in all files. We were treating HwId=, Guid= and DeviceInstanceId= in
exactly the same way -- they're just converted to GUIDs when building the silo!
2021-03-03 08:30:34 +00:00
Richard Hughes
79a217a2a6 superio: Use DeviceInstanceIDs to merge chip quirk metadata
This means we can use the standard ->set_quirk_kv() vfunc rather than using
FuQuirks directly with a custom group.
2021-03-03 08:30:34 +00:00
Richard Hughes
b3f9841924 Support more than one protocol for a given device
Devices may want to support more than one protocol, and for some devices
(e.g. Unifying peripherals stuck in bootloader mode) you might not even be able
to query for the correct protocol anyway.
2021-03-01 16:14:36 +00:00
Richard Hughes
b13e8dae36 superio: Simplify device setup using the parent_class 2021-02-26 18:46:51 +00:00
Richard Hughes
078beafb2d Add a new internal flag to opt-in to GUID matching
It is far too easy to forget to set FWUPD_DEVICE_FLAG_NO_GUID_MATCHING for new
plugins, and without it it all works really well *until* a user has two devices
of the same type installed at the same time and then one 'disappears' for hard
to explain reasons. Typically we only need it for replug anyway!

Explicitly opt-in to this rarely-required behaviour, with the default to just
use the physical and logical IDs. Also document the update behavior for each
plugin to explain why the flag is being used.

This allows you to have two identical Unifying plugged in without one of them
being hidden from the user, at the same time allowing a HIDRAW<->USB transition
when going to and from bootloader and runtime modes.

This removes the workaround added in 99eb3f06b6.

Fixes https://github.com/fwupd/fwupd/issues/2915
2021-02-25 15:47:25 +00:00
Richard Hughes
2e1245728f Call the superclass directly from subclassed devices
This allows a device subclass to call the parent method after doing an initial
action, or even deliberately not call the *generic* parent method at all.

It also simplifies the plugins; you no longer have to remember what the plugin
is deriving from and accidentally clobber the wrong superclass method.
2021-02-18 16:18:34 +00:00
Richard Hughes
a22c13c637 Move the plugin build logic to the plugins themselves 2021-02-18 14:46:20 +00:00
Sean Rhodes
9840c54021 Adjusted superio L4 quirk 2021-02-15 22:24:40 +00:00