Commit Graph

2532 Commits

Author SHA1 Message Date
Richard Hughes
fd406616f7 trivial: Create fu_device_list_replace() for future re-use 2018-08-30 16:58:01 +01:00
Richard Hughes
0f72ef2f88 trivial: Invalidate the probe if the FuDevice is closed
For DFU it is important to re-get the interfaces and list of quirks when
switching from runtime -> bootloader -> runtime.
2018-08-30 16:55:41 +01:00
Richard Hughes
838d91e4ed Add support for counterpart GUIDs
These are GUIDs that are related to the main device, but should not be used for
quirk matching. For instance, we might want to list the GUIDs for a bootloader
mode, but we don't want to import all the quirks for the bootloader when in the
runtime mode.
2018-08-30 16:55:41 +01:00
Richard Hughes
22367e7948 trivial: Refactor out functionality from a mega-method 2018-08-30 16:53:19 +01:00
Richard Hughes
50d6bd10bd trivial: Add refcounting to fu_device_open() 2018-08-29 19:12:29 +01:00
Richard Hughes
23170a8195 trivial: Set the plugin name when the GUID is added 2018-08-29 14:27:57 +01:00
Richard Hughes
97a3c9651b dfu: Set the quirk keys using the new vfunc 2018-08-29 14:27:57 +01:00
Richard Hughes
168a209a14 trivial: Add a vfunc for setting the quirk KVs in derived objects 2018-08-29 14:27:57 +01:00
Richard Hughes
163947bd5f Improve performance when reading keys from the quirk database
Rather than guessing the keys that might be present, and doing two hash lookups
for each, get the key values in one call. This is somewhat more performant, and
allows us to do clever things in the future.
2018-08-29 14:27:57 +01:00
Richard Hughes
143f656b69 Split the quirks query into a two-stage lookup
At the moment quirks are hashed with a key based on the group appended with the
key, which is sometimes made into a GUID. This is suboptimal as when a device
has many different quirk keys (e.g. Name, Summary and Flags) as we hash and
store the same key prefix each time.

Instead, use a 1st level hash to map the group (typically the GUID) to another
hash table. Then use the 2nd level hash to get the value using the key.

This does increase the query time slightly, although reduces RSS considerably --
although not by as much as you'd think as creating a GHashTable with one entry
is more RSS than just storing the string.

This representation does have one huge benefit: You can now get all the keys
of quirk entry without having to guess what they might be. This lets us do some
more efficiency gains with follow up patches.
2018-08-29 14:27:57 +01:00
Richard Hughes
83d79e2e12 trivial: Move the DfuDevice class init to the bottom of the file 2018-08-29 14:27:57 +01:00
Salud Lemus
980f2d9551 fu-engine: Don't fail get-details if compiled without GPG/PKCS7
Similar to commit 7d35278 regarding the install option with a daemon compiled without
GPG, but now, if you also have a daemon compiled without GPG, and if you have downloaded a
CAB file from LVFS and ran get-details, it would fail to display the contents
of the associated CAB file.

This allows it to still display the contents of the CAB file, and
a warning will be displayed in the logs.
2018-08-29 10:27:40 +01:00
Mario Limonciello
812ac02bac synapticsmst: Allow using a custom flag 'skip-restart'
This flag is intended for devices that the restart procedure will
be performed as part of a transactional update by an external
controller.

None of the currently supported devices need this flag.
2018-08-29 07:55:27 +01:00
Mario Limonciello
102074eeea synapticsmst: Move GUID generation into quirks
This should allow trivially adding support for new
Tesla/Leaf/Panamera devices by a quirk.
2018-08-28 15:30:21 -05:00
Richard Hughes
4937ff5499 trivial: Add a self test to test the quirk database performance 2018-08-28 20:47:09 +01:00
Richard Hughes
570f839483 trivial: Fix a tiny memory leak in the self tests 2018-08-28 20:40:50 +01:00
Mario Limonciello
7555738827 synapticsmst: Set parentage for Dell WD15/TB16/TB18 docks through quirks 2018-08-28 18:30:00 +01:00
Mario Limonciello
926da40a88 thunderbolt: Move setting parentage of TB16 into quirks 2018-08-28 18:30:00 +01:00
Richard Hughes
39a5228331 trivial: Optimize adding DFU devices we know about
Explicitly mark known-supported devices in the quirk file so that we don't have
to call fu_plugin_usb_device_added() on all USB plugins.
2018-08-28 18:30:00 +01:00
Richard Hughes
a417d6c82a trivial: Allow setting the firmware min and max sizes from quirk files 2018-08-28 18:30:00 +01:00
Richard Hughes
a62618303f trivial: Set the quirks instance on the unifying context object
This allows us to match quirks on added GUIDs.
2018-08-28 18:30:00 +01:00
Richard Hughes
bda4d81d3d trivial: Allow plugins to add virtual children from quirk files
The example here would be adding virtual i2c devices attached to an existing
USB hub device.
2018-08-28 18:30:00 +01:00
Richard Hughes
96fa7d9f49 trivial: Allow devices to set the parent GUID from a quirk entry 2018-08-28 18:30:00 +01:00
Richard Hughes
6dec401a67 Store the DeviceInstanceId as a GUID in the quirk database
This allows us to match non-DeviceID GUIDs, and also GUIDs we don't know how to
generate.

To make this fully useful, search for device quirks when GUIDs are added.
2018-08-28 18:30:00 +01:00
Mario Limonciello
30407537ff trivial: debian: Add Recommends for bolt
Newer versions of bolt provide a superior experience when using
Thunderbolt force power rather than directly using the kernel.

Pull bolt in when installing fwupd to take advantage of this.
2018-08-28 10:38:00 -05:00
Mario Limonciello
c07ce5b488 thunderbolt-power: Use bolt force power API if available
This is new support for bolt supported by
https://gitlab.freedesktop.org/bolt/bolt/merge_requests/101
2018-08-28 09:47:56 -05:00
Richard Hughes
201d0cce54 trivial: Further simplify the fake DFU runtime logic 2018-08-28 15:33:43 +01:00
Richard Hughes
245b595f45 flashrom: Do not use no-longer-exported symbols
This was compiling and passing CI as the un-implemented legacy functionality
was still exported in the header.

Remove the prototypes for the missing symbols and fix up the plugin.
2018-08-28 15:26:34 +01:00
Richard Hughes
c1163ba10d trivial: Fix up the quirk documentation now we use DeviceInstanceId 2018-08-28 15:19:31 +01:00
Richard Hughes
a0d7977968 dfu: Check the device state before assuming a fake runtime
If the device is not in APP_IDLE this doesn't make any sense.
2018-08-28 12:16:30 +01:00
Richard Hughes
04e321274a dfu: Never add a fake DFU runtime when targets already exist 2018-08-28 12:16:26 +01:00
Richard Hughes
73bf2337c1 trivial: Add fu_common_strtoull() as a shared function 2018-08-28 09:41:10 +01:00
Richard Hughes
c16554252b flashrom: Add a plugin for updating using the flashrom command line tool 2018-08-28 09:25:36 +01:00
Richard Hughes
e0fef5d1c4 trivial: Fix a potential invalid read when merging quirks 2018-08-28 09:13:41 +01:00
Richard Hughes
e274f6654b superio: Add support for the W740SU
From Thomas Krug, many thanks.
2018-08-27 09:32:49 +01:00
Richard Hughes
6bf9879189 trivial: Use the BaseboardProduct DMI match for superio
This will match more EC hardware that uses a customized BIOS.
2018-08-27 09:32:05 +01:00
Richard Hughes
cdb01590e0 nvme: Add a new plugin to update NVMe hardware 2018-08-26 19:42:28 +01:00
Richard Hughes
dd5b43f63b udev: Use the new FuUdevDevice abstraction 2018-08-26 19:42:28 +01:00
Richard Hughes
9d6e0e743b Move the GUdevClient to the core daemon
Allowing plugins to 'register' for different udev subsystems in _init() allows
us to move the client to the engine, reducing the number of wakeups considerably
for each device event. It also will reduce the amount of boilerplate code in
each plugin that uses GUdev, much like we have done for GUsb.
2018-08-26 19:42:28 +01:00
Richard Hughes
dba160be42 trivial: Allow getting the quirks of a FuUdevDevice 2018-08-26 19:42:28 +01:00
Richard Hughes
0216d83b71 Add FuUdevDevice as a derivable helper object
There are currently three plugins that use GUdev rather than libusb, and there
are several more in the works. Add a helper object so we can make the plugins
smaller and simpler, much like we already do with FuUsbDevice.
2018-08-26 19:42:28 +01:00
Richard Hughes
bb764e99a0 trivial: Add fu_device_list_get_by_platform_id() 2018-08-26 19:38:58 +01:00
Richard Hughes
95227a919d trivial: Move gudev to the core plugin deps 2018-08-26 19:38:58 +01:00
Richard Hughes
07ed2f00fa trivial: Use the new subclassed device methods
This just reduces our API surface a little, no behaviour change.
2018-08-24 21:48:59 +01:00
Richard Hughes
b37d54e22d trivial: Link in FuChunk when using fwupdtool 2018-08-24 21:39:15 +01:00
Richard Hughes
16e85aa8cf superio: Add a new plugin to enumerate EC firmware 2018-08-24 20:37:27 +01:00
Richard Hughes
98f6757fbb trivial: Add an example key for a USB device 2018-08-24 20:22:05 +01:00
Richard Hughes
1bf7ff9966 trivial: Fix a debugging typo 2018-08-24 20:21:51 +01:00
Mario Limonciello
7d35278cb6 fu-install-task: Don't fail update installation if compiled without GPG/PKCS7
Currently if you download a CAB file from LVFS and try to install it
on a daemon compiled without GPG it will fail to install since LVFS has signed
it.  You had to make an intentional decision to disable GPG.

Allow this scenario to work just as if the CAB file were unsigned, but save
a warning in the logs that it happened.
2018-08-24 19:11:00 +01:00
Richard Hughes
6d794e2de6 trivial: Fix linking when using Ubuntu 18.04
Apparently the linker complains when dlopen'ing a plugin that's linked against
the libfwupdprivate library the daemon is using. This only seems to happen when
using distro packages...
2018-08-23 17:29:31 +01:00