From 99002a7a1816f255ddb4560bdae8f7b6c7f16f7f Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Fri, 23 Sep 2022 15:59:11 +0100 Subject: [PATCH] Build many more plugins as builtin This reduces the plugin directory size by 2.2Mb --- contrib/fwupd.spec.in | 106 ------- docs/tutorial.md | 150 ++++++---- libfwupdplugin/fu-plugin-private.h | 2 - libfwupdplugin/fu-plugin.h | 2 + ...ugin-acpi-dmar.c => fu-acpi-dmar-plugin.c} | 24 +- plugins/acpi-dmar/fu-acpi-dmar-plugin.h | 11 + plugins/acpi-dmar/meson.build | 39 +-- ...ugin-acpi-facp.c => fu-acpi-facp-plugin.c} | 24 +- plugins/acpi-facp/fu-acpi-facp-plugin.h | 11 + plugins/acpi-facp/meson.build | 39 +-- ...ugin-acpi-ivrs.c => fu-acpi-ivrs-plugin.c} | 24 +- plugins/acpi-ivrs/fu-acpi-ivrs-plugin.h | 11 + plugins/acpi-ivrs/meson.build | 39 +-- ...ugin-acpi-phat.c => fu-acpi-phat-plugin.c} | 45 ++- plugins/acpi-phat/fu-acpi-phat-plugin.h | 11 + plugins/acpi-phat/meson.build | 42 +-- plugins/amd-pmc/fu-amd-pmc-plugin.c | 36 +++ plugins/amd-pmc/fu-amd-pmc-plugin.h | 11 + plugins/amd-pmc/fu-plugin-amd-pmc.c | 25 -- plugins/amd-pmc/meson.build | 23 +- plugins/amt/fu-amt-plugin.c | 36 +++ plugins/amt/fu-amt-plugin.h | 11 + plugins/amt/fu-plugin-amt.c | 25 -- plugins/amt/meson.build | 23 +- plugins/analogix/fu-analogix-plugin.c | 37 +++ plugins/analogix/fu-analogix-plugin.h | 11 + plugins/analogix/fu-plugin-analogix.c | 26 -- plugins/analogix/meson.build | 23 +- plugins/android-boot/fu-android-boot-plugin.c | 36 +++ plugins/android-boot/fu-android-boot-plugin.h | 11 + plugins/android-boot/fu-plugin-android-boot.c | 25 -- plugins/android-boot/meson.build | 27 +- plugins/ata/fu-ata-plugin.c | 36 +++ plugins/ata/fu-ata-plugin.h | 11 + plugins/ata/fu-plugin-ata.c | 25 -- plugins/ata/meson.build | 40 +-- ...u-plugin-bcm57xx.c => fu-bcm57xx-plugin.c} | 25 +- plugins/bcm57xx/fu-bcm57xx-plugin.h | 11 + plugins/bcm57xx/meson.build | 40 +-- .../{fu-plugin-bios.c => fu-bios-plugin.c} | 31 +- plugins/bios/fu-bios-plugin.h | 11 + plugins/bios/meson.build | 22 +- .../{fu-plugin-ccgx.c => fu-ccgx-plugin.c} | 38 ++- plugins/ccgx/fu-ccgx-plugin.h | 11 + plugins/ccgx/meson.build | 39 +-- plugins/cfu/fu-cfu-plugin.c | 35 +++ plugins/cfu/fu-cfu-plugin.h | 11 + plugins/cfu/fu-plugin-cfu.c | 24 -- plugins/cfu/meson.build | 23 +- plugins/ch341a/fu-ch341a-plugin.c | 35 +++ plugins/ch341a/fu-ch341a-plugin.h | 11 + plugins/ch341a/fu-plugin-ch341a.c | 24 -- plugins/ch341a/meson.build | 23 +- plugins/corsair/fu-corsair-bp.c | 4 +- plugins/corsair/fu-corsair-plugin.c | 40 +++ plugins/corsair/fu-corsair-plugin.h | 11 + plugins/corsair/fu-plugin-corsair.c | 33 --- plugins/corsair/meson.build | 25 +- .../cpu/{fu-plugin-cpu.c => fu-cpu-plugin.c} | 38 ++- plugins/cpu/fu-cpu-plugin.h | 11 + plugins/cpu/meson.build | 23 +- plugins/cros-ec/fu-cros-ec-plugin.c | 37 +++ plugins/cros-ec/fu-cros-ec-plugin.h | 11 + plugins/cros-ec/fu-plugin-cros-ec.c | 26 -- plugins/cros-ec/meson.build | 23 +- ...ugin-dell-dock.c => fu-dell-dock-plugin.c} | 120 ++++---- plugins/dell-dock/fu-dell-dock-plugin.h | 11 + plugins/dell-dock/meson.build | 19 +- ...ugin-dell-esrt.c => fu-dell-esrt-plugin.c} | 57 ++-- plugins/dell-esrt/fu-dell-esrt-plugin.h | 11 + plugins/dell-esrt/meson.build | 19 +- .../{fu-plugin-dell.c => fu-dell-plugin.c} | 242 ++++++++------- plugins/dell/fu-dell-plugin.h | 11 + plugins/dell/fu-plugin-dell.h | 14 +- plugins/dell/fu-self-test.c | 78 +++-- plugins/dell/meson.build | 33 +-- plugins/dfu-csr/fu-dfu-csr-plugin.c | 35 +++ plugins/dfu-csr/fu-dfu-csr-plugin.h | 11 + plugins/dfu-csr/fu-plugin-dfu-csr.c | 24 -- plugins/dfu-csr/meson.build | 14 +- plugins/dfu/fu-dfu-plugin.c | 39 +++ plugins/dfu/fu-dfu-plugin.h | 11 + plugins/dfu/fu-plugin-dfu.c | 33 --- plugins/dfu/meson.build | 66 +---- plugins/ebitdo/fu-ebitdo-plugin.c | 37 +++ plugins/ebitdo/fu-ebitdo-plugin.h | 11 + plugins/ebitdo/fu-plugin-ebitdo.c | 26 -- plugins/ebitdo/meson.build | 23 +- plugins/elanfp/fu-elanfp-plugin.c | 37 +++ plugins/elanfp/fu-elanfp-plugin.h | 11 + plugins/elanfp/fu-plugin-elanfp.c | 24 -- plugins/elanfp/meson.build | 23 +- ...{fu-plugin-elantp.c => fu-elantp-plugin.c} | 35 ++- plugins/elantp/fu-elantp-plugin.h | 11 + plugins/elantp/meson.build | 42 +-- plugins/emmc/fu-emmc-plugin.c | 36 +++ plugins/emmc/fu-emmc-plugin.h | 11 + plugins/emmc/fu-plugin-emmc.c | 25 -- plugins/emmc/meson.build | 23 +- plugins/ep963x/fu-ep963x-plugin.c | 37 +++ plugins/ep963x/fu-ep963x-plugin.h | 11 + plugins/ep963x/fu-plugin-ep963x.c | 26 -- plugins/ep963x/meson.build | 23 +- plugins/fastboot/fu-fastboot-plugin.c | 38 +++ plugins/fastboot/fu-fastboot-plugin.h | 11 + plugins/fastboot/fu-plugin-fastboot.c | 32 -- plugins/fastboot/meson.build | 23 +- plugins/flashrom/meson.build | 11 +- plugins/focalfp/fu-focalfp-plugin.c | 38 +++ plugins/focalfp/fu-focalfp-plugin.h | 11 + plugins/focalfp/fu-plugin-focalfp.c | 27 -- plugins/focalfp/meson.build | 24 +- plugins/fpc/fu-fpc-plugin.c | 35 +++ plugins/fpc/fu-fpc-plugin.h | 11 + plugins/fpc/fu-plugin-fpc.c | 2 - plugins/fpc/meson.build | 23 +- plugins/fresco-pd/fu-fresco-pd-plugin.c | 37 +++ plugins/fresco-pd/fu-fresco-pd-plugin.h | 11 + plugins/fresco-pd/fu-plugin-fresco-pd.c | 26 -- plugins/fresco-pd/meson.build | 23 +- ...u-plugin-genesys.c => fu-genesys-plugin.c} | 32 +- plugins/genesys/fu-genesys-plugin.h | 11 + plugins/genesys/meson.build | 23 +- plugins/goodix-moc/fu-goodixmoc-plugin.c | 36 +++ plugins/goodix-moc/fu-goodixmoc-plugin.h | 11 + plugins/goodix-moc/fu-plugin-goodixmoc.c | 25 -- plugins/goodix-moc/meson.build | 23 +- .../{fu-plugin-gpio.c => fu-gpio-plugin.c} | 111 +++---- plugins/gpio/fu-gpio-plugin.h | 11 + plugins/gpio/meson.build | 23 +- plugins/hailuck/fu-hailuck-plugin.c | 39 +++ plugins/hailuck/fu-hailuck-plugin.h | 11 + plugins/hailuck/fu-plugin-hailuck.c | 28 -- plugins/hailuck/meson.build | 23 +- ...ugin-intel-spi.c => fu-intel-spi-plugin.c} | 54 ++-- plugins/intel-spi/fu-intel-spi-plugin.h | 11 + plugins/intel-spi/meson.build | 23 +- plugins/intel-usb4/fu-intel-usb4-plugin.c | 35 +++ plugins/intel-usb4/fu-intel-usb4-plugin.h | 11 + plugins/intel-usb4/fu-plugin-intel-usb4.c | 22 -- plugins/intel-usb4/meson.build | 19 +- .../{fu-plugin-iommu.c => fu-iommu-plugin.c} | 63 ++-- plugins/iommu/fu-iommu-plugin.h | 11 + plugins/iommu/meson.build | 18 +- .../{fu-plugin-jabra.c => fu-jabra-plugin.c} | 45 +-- plugins/jabra/fu-jabra-plugin.h | 11 + plugins/jabra/meson.build | 23 +- plugins/kinetic-dp/fu-kinetic-dp-plugin.c | 46 +++ plugins/kinetic-dp/fu-kinetic-dp-plugin.h | 11 + ...thinklmi.c => fu-lenovo-thinklmi-plugin.c} | 35 ++- .../fu-lenovo-thinklmi-plugin.h | 15 + plugins/lenovo-thinklmi/fu-self-test.c | 32 +- plugins/lenovo-thinklmi/meson.build | 36 +-- ...-lockdown.c => fu-linux-lockdown-plugin.c} | 114 +++---- .../linux-lockdown/fu-linux-lockdown-plugin.h | 15 + plugins/linux-lockdown/meson.build | 22 +- ...-linux-sleep.c => fu-linux-sleep-plugin.c} | 23 +- plugins/linux-sleep/fu-linux-sleep-plugin.h | 11 + plugins/linux-sleep/meson.build | 22 +- ...in-linux-swap.c => fu-linux-swap-plugin.c} | 85 +++--- plugins/linux-swap/fu-linux-swap-plugin.h | 11 + plugins/linux-swap/meson.build | 39 +-- ...ux-tainted.c => fu-linux-tainted-plugin.c} | 87 +++--- .../linux-tainted/fu-linux-tainted-plugin.h | 15 + plugins/linux-tainted/meson.build | 22 +- ...{fu-plugin-logind.c => fu-logind-plugin.c} | 102 ++++--- plugins/logind/fu-logind-plugin.h | 11 + plugins/logind/meson.build | 22 +- .../fu-logitech-bulkcontroller-plugin.c | 35 +++ .../fu-logitech-bulkcontroller-plugin.h | 15 + .../fu-plugin-logitech-bulkcontroller.c | 24 -- plugins/logitech-bulkcontroller/meson.build | 22 +- ...ech-hidpp.c => fu-logitech-hidpp-plugin.c} | 37 ++- .../logitech-hidpp/fu-logitech-hidpp-plugin.h | 15 + plugins/logitech-hidpp/meson.build | 40 +-- plugins/meson.build | 4 +- plugins/migrate.py | 132 +++++++++ plugins/modem-manager/meson.build | 15 +- .../msr/{fu-plugin-msr.c => fu-msr-plugin.c} | 172 +++++------ plugins/msr/fu-msr-plugin.h | 11 + plugins/msr/meson.build | 22 +- plugins/mtd/fu-mtd-plugin.c | 51 ++++ plugins/mtd/fu-mtd-plugin.h | 11 + plugins/mtd/fu-plugin-mtd.c | 39 --- plugins/mtd/meson.build | 39 +-- plugins/nitrokey/fu-nitrokey-plugin.c | 35 +++ plugins/nitrokey/fu-nitrokey-plugin.h | 11 + plugins/nitrokey/fu-plugin-nitrokey.c | 25 -- plugins/nitrokey/meson.build | 35 +-- ...in-nordic-hid.c => fu-nordic-hid-plugin.c} | 32 +- plugins/nordic-hid/fu-nordic-hid-plugin.h | 11 + plugins/nordic-hid/meson.build | 23 +- plugins/nvme/fu-nvme-plugin.c | 36 +++ plugins/nvme/fu-nvme-plugin.h | 11 + plugins/nvme/fu-plugin-nvme.c | 25 -- plugins/nvme/meson.build | 41 +-- plugins/optionrom/fu-optionrom-plugin.c | 37 +++ plugins/optionrom/fu-optionrom-plugin.h | 11 + plugins/optionrom/fu-plugin-optionrom.c | 26 -- plugins/optionrom/meson.build | 23 +- .../parade-lspcon/fu-parade-lspcon-plugin.c | 38 +++ .../parade-lspcon/fu-parade-lspcon-plugin.h | 15 + .../parade-lspcon/fu-plugin-parade-lspcon.c | 30 -- plugins/parade-lspcon/meson.build | 23 +- ...u-plugin-pci-bcr.c => fu-pci-bcr-plugin.c} | 137 ++++----- plugins/pci-bcr/fu-pci-bcr-plugin.h | 11 + plugins/pci-bcr/meson.build | 23 +- ...u-plugin-pci-mei.c => fu-pci-mei-plugin.c} | 264 ++++++++--------- plugins/pci-mei/fu-pci-mei-plugin.h | 11 + plugins/pci-mei/meson.build | 23 +- plugins/pci-psp/fu-pci-psp-plugin.c | 36 +++ plugins/pci-psp/fu-pci-psp-plugin.h | 11 + plugins/pci-psp/fu-plugin-pci-psp.c | 25 -- plugins/pci-psp/meson.build | 23 +- ...{fu-plugin-pixart-rf.c => fu-pxi-plugin.c} | 26 +- plugins/pixart-rf/fu-pxi-plugin.h | 11 + plugins/pixart-rf/meson.build | 40 +-- ...{fu-plugin-powerd.c => fu-powerd-plugin.c} | 90 +++--- plugins/powerd/fu-powerd-plugin.h | 11 + plugins/powerd/meson.build | 22 +- plugins/realtek-mst/fu-plugin-realtek-mst.c | 31 -- plugins/realtek-mst/fu-realtek-mst-plugin.c | 39 +++ plugins/realtek-mst/fu-realtek-mst-plugin.h | 11 + plugins/realtek-mst/meson.build | 23 +- ...u-plugin-redfish.c => fu-redfish-plugin.c} | 181 +++++------ plugins/redfish/fu-redfish-plugin.h | 11 + plugins/redfish/fu-self-test.c | 27 +- plugins/redfish/meson.build | 37 +-- plugins/rts54hid/fu-plugin-rts54hid.c | 35 --- plugins/rts54hid/fu-rts54hid-plugin.c | 41 +++ plugins/rts54hid/fu-rts54hid-plugin.h | 11 + plugins/rts54hid/meson.build | 23 +- ...plugin-rts54hub.c => fu-rts54hub-plugin.c} | 36 ++- plugins/rts54hub/fu-rts54hub-plugin.h | 11 + plugins/rts54hub/meson.build | 23 +- plugins/scsi/fu-plugin-scsi.c | 25 -- plugins/scsi/fu-scsi-plugin.c | 36 +++ plugins/scsi/fu-scsi-plugin.h | 11 + plugins/scsi/meson.build | 23 +- ...-steelseries.c => fu-steelseries-plugin.c} | 25 +- plugins/steelseries/fu-steelseries-plugin.h | 11 + plugins/steelseries/meson.build | 23 +- ...u-plugin-superio.c => fu-superio-plugin.c} | 72 +++-- plugins/superio/fu-superio-plugin.h | 11 + plugins/superio/meson.build | 23 +- .../synaptics-cape/fu-plugin-synaptics-cape.c | 26 -- .../synaptics-cape/fu-synaptics-cape-plugin.c | 37 +++ .../synaptics-cape/fu-synaptics-cape-plugin.h | 15 + plugins/synaptics-cape/meson.build | 23 +- ...xaudio.c => fu-synaptics-cxaudio-plugin.c} | 38 ++- .../fu-synaptics-cxaudio-plugin.h | 15 + plugins/synaptics-cxaudio/meson.build | 23 +- plugins/synaptics-mst/fu-self-test.c | 22 +- ...aptics-mst.c => fu-synaptics-mst-plugin.c} | 99 ++++--- .../synaptics-mst/fu-synaptics-mst-plugin.h | 15 + plugins/synaptics-mst/meson.build | 35 +-- .../fu-plugin-synaptics-prometheus.c | 26 -- .../synaptics-prometheus/fu-synaprom-plugin.c | 38 +++ .../synaptics-prometheus/fu-synaprom-plugin.h | 11 + plugins/synaptics-prometheus/meson.build | 43 +-- ...aptics-rmi.c => fu-synaptics-rmi-plugin.c} | 25 +- .../synaptics-rmi/fu-synaptics-rmi-plugin.h | 15 + plugins/synaptics-rmi/meson.build | 41 +-- .../fu-plugin-system76-launch.c | 25 -- .../fu-system76-launch-plugin.c | 36 +++ .../fu-system76-launch-plugin.h | 15 + plugins/system76-launch/meson.build | 23 +- plugins/test/fu-plugin-test-ble.c | 24 -- plugins/test/fu-test-ble-plugin.c | 35 +++ plugins/test/fu-test-ble-plugin.h | 11 + .../{fu-plugin-test.c => fu-test-plugin.c} | 121 ++++---- plugins/test/fu-test-plugin.h | 11 + plugins/test/meson.build | 58 +--- plugins/thelio-io/fu-plugin-thelio-io.c | 25 -- plugins/thelio-io/fu-thelio-io-plugin.c | 36 +++ plugins/thelio-io/fu-thelio-io-plugin.h | 11 + plugins/thelio-io/meson.build | 23 +- plugins/thunderbolt/fu-self-test.c | 12 +- ...-thunderbolt.c => fu-thunderbolt-plugin.c} | 67 +++-- plugins/thunderbolt/fu-thunderbolt-plugin.h | 11 + plugins/thunderbolt/meson.build | 36 +-- plugins/tpm/fu-self-test.c | 17 +- .../tpm/{fu-plugin-tpm.c => fu-tpm-plugin.c} | 206 +++++++------ plugins/tpm/fu-tpm-plugin.h | 11 + plugins/tpm/meson.build | 39 +-- ...efi-capsule.c => fu-uefi-capsule-plugin.c} | 280 +++++++++--------- plugins/uefi-capsule/fu-uefi-capsule-plugin.h | 11 + plugins/uefi-capsule/meson.build | 49 +-- ...plugin-uefi-dbx.c => fu-uefi-dbx-plugin.c} | 41 ++- plugins/uefi-dbx/fu-uefi-dbx-plugin.h | 11 + plugins/uefi-dbx/meson.build | 57 +--- ...u-plugin-uefi-pk.c => fu-uefi-pk-plugin.c} | 75 +++-- plugins/uefi-pk/fu-uefi-pk-plugin.h | 11 + plugins/uefi-pk/meson.build | 22 +- ...i-recovery.c => fu-uefi-recovery-plugin.c} | 50 ++-- .../uefi-recovery/fu-uefi-recovery-plugin.h | 15 + plugins/uefi-recovery/meson.build | 23 +- plugins/uf2/fu-plugin-uf2.c | 27 -- plugins/uf2/fu-uf2-plugin.c | 38 +++ plugins/uf2/fu-uf2-plugin.h | 11 + plugins/uf2/meson.build | 40 +-- ...{fu-plugin-upower.c => fu-upower-plugin.c} | 102 ++++--- plugins/upower/fu-upower-plugin.h | 11 + plugins/upower/meson.build | 22 +- ...plugin-usi-dock.c => fu-usi-dock-plugin.c} | 30 +- plugins/usi-dock/fu-usi-dock-plugin.h | 11 + plugins/usi-dock/meson.build | 23 +- .../vbe/{fu-plugin-vbe.c => fu-vbe-plugin.c} | 77 ++--- plugins/vbe/fu-vbe-plugin.h | 11 + plugins/vbe/meson.build | 7 +- .../vli/{fu-plugin-vli.c => fu-vli-plugin.c} | 34 ++- plugins/vli/fu-vli-plugin.h | 11 + plugins/vli/meson.build | 40 +-- ...ugin-wacom-raw.c => fu-wacom-raw-plugin.c} | 36 ++- plugins/wacom-raw/fu-wacom-raw-plugin.h | 11 + plugins/wacom-raw/meson.build | 23 +- plugins/wacom-usb/fu-plugin-wacom-usb.c | 45 --- plugins/wacom-usb/fu-wac-plugin.c | 59 ++++ plugins/wacom-usb/fu-wac-plugin.h | 11 + plugins/wacom-usb/meson.build | 41 +-- po/POTFILES.in | 2 +- src/fu-self-test.c | 13 +- 322 files changed, 5446 insertions(+), 5077 deletions(-) rename plugins/acpi-dmar/{fu-plugin-acpi-dmar.c => fu-acpi-dmar-plugin.c} (77%) create mode 100644 plugins/acpi-dmar/fu-acpi-dmar-plugin.h rename plugins/acpi-facp/{fu-plugin-acpi-facp.c => fu-acpi-facp-plugin.c} (77%) create mode 100644 plugins/acpi-facp/fu-acpi-facp-plugin.h rename plugins/acpi-ivrs/{fu-plugin-acpi-ivrs.c => fu-acpi-ivrs-plugin.c} (77%) create mode 100644 plugins/acpi-ivrs/fu-acpi-ivrs-plugin.h rename plugins/acpi-phat/{fu-plugin-acpi-phat.c => fu-acpi-phat-plugin.c} (64%) create mode 100644 plugins/acpi-phat/fu-acpi-phat-plugin.h create mode 100644 plugins/amd-pmc/fu-amd-pmc-plugin.c create mode 100644 plugins/amd-pmc/fu-amd-pmc-plugin.h delete mode 100644 plugins/amd-pmc/fu-plugin-amd-pmc.c create mode 100644 plugins/amt/fu-amt-plugin.c create mode 100644 plugins/amt/fu-amt-plugin.h delete mode 100644 plugins/amt/fu-plugin-amt.c create mode 100644 plugins/analogix/fu-analogix-plugin.c create mode 100644 plugins/analogix/fu-analogix-plugin.h delete mode 100644 plugins/analogix/fu-plugin-analogix.c create mode 100644 plugins/android-boot/fu-android-boot-plugin.c create mode 100644 plugins/android-boot/fu-android-boot-plugin.h delete mode 100644 plugins/android-boot/fu-plugin-android-boot.c create mode 100644 plugins/ata/fu-ata-plugin.c create mode 100644 plugins/ata/fu-ata-plugin.h delete mode 100644 plugins/ata/fu-plugin-ata.c rename plugins/bcm57xx/{fu-plugin-bcm57xx.c => fu-bcm57xx-plugin.c} (62%) create mode 100644 plugins/bcm57xx/fu-bcm57xx-plugin.h rename plugins/bios/{fu-plugin-bios.c => fu-bios-plugin.c} (74%) create mode 100644 plugins/bios/fu-bios-plugin.h rename plugins/ccgx/{fu-plugin-ccgx.c => fu-ccgx-plugin.c} (64%) create mode 100644 plugins/ccgx/fu-ccgx-plugin.h create mode 100644 plugins/cfu/fu-cfu-plugin.c create mode 100644 plugins/cfu/fu-cfu-plugin.h delete mode 100644 plugins/cfu/fu-plugin-cfu.c create mode 100644 plugins/ch341a/fu-ch341a-plugin.c create mode 100644 plugins/ch341a/fu-ch341a-plugin.h delete mode 100644 plugins/ch341a/fu-plugin-ch341a.c create mode 100644 plugins/corsair/fu-corsair-plugin.c create mode 100644 plugins/corsair/fu-corsair-plugin.h delete mode 100644 plugins/corsair/fu-plugin-corsair.c rename plugins/cpu/{fu-plugin-cpu.c => fu-cpu-plugin.c} (59%) create mode 100644 plugins/cpu/fu-cpu-plugin.h create mode 100644 plugins/cros-ec/fu-cros-ec-plugin.c create mode 100644 plugins/cros-ec/fu-cros-ec-plugin.h delete mode 100644 plugins/cros-ec/fu-plugin-cros-ec.c rename plugins/dell-dock/{fu-plugin-dell-dock.c => fu-dell-dock-plugin.c} (82%) create mode 100644 plugins/dell-dock/fu-dell-dock-plugin.h rename plugins/dell-esrt/{fu-plugin-dell-esrt.c => fu-dell-esrt-plugin.c} (76%) create mode 100644 plugins/dell-esrt/fu-dell-esrt-plugin.h rename plugins/dell/{fu-plugin-dell.c => fu-dell-plugin.c} (86%) create mode 100644 plugins/dell/fu-dell-plugin.h create mode 100644 plugins/dfu-csr/fu-dfu-csr-plugin.c create mode 100644 plugins/dfu-csr/fu-dfu-csr-plugin.h delete mode 100644 plugins/dfu-csr/fu-plugin-dfu-csr.c create mode 100644 plugins/dfu/fu-dfu-plugin.c create mode 100644 plugins/dfu/fu-dfu-plugin.h delete mode 100644 plugins/dfu/fu-plugin-dfu.c create mode 100644 plugins/ebitdo/fu-ebitdo-plugin.c create mode 100644 plugins/ebitdo/fu-ebitdo-plugin.h delete mode 100644 plugins/ebitdo/fu-plugin-ebitdo.c create mode 100644 plugins/elanfp/fu-elanfp-plugin.c create mode 100644 plugins/elanfp/fu-elanfp-plugin.h delete mode 100644 plugins/elanfp/fu-plugin-elanfp.c rename plugins/elantp/{fu-plugin-elantp.c => fu-elantp-plugin.c} (62%) create mode 100644 plugins/elantp/fu-elantp-plugin.h create mode 100644 plugins/emmc/fu-emmc-plugin.c create mode 100644 plugins/emmc/fu-emmc-plugin.h delete mode 100644 plugins/emmc/fu-plugin-emmc.c create mode 100644 plugins/ep963x/fu-ep963x-plugin.c create mode 100644 plugins/ep963x/fu-ep963x-plugin.h delete mode 100644 plugins/ep963x/fu-plugin-ep963x.c create mode 100644 plugins/fastboot/fu-fastboot-plugin.c create mode 100644 plugins/fastboot/fu-fastboot-plugin.h delete mode 100644 plugins/fastboot/fu-plugin-fastboot.c create mode 100644 plugins/focalfp/fu-focalfp-plugin.c create mode 100644 plugins/focalfp/fu-focalfp-plugin.h delete mode 100644 plugins/focalfp/fu-plugin-focalfp.c create mode 100644 plugins/fpc/fu-fpc-plugin.c create mode 100644 plugins/fpc/fu-fpc-plugin.h create mode 100644 plugins/fresco-pd/fu-fresco-pd-plugin.c create mode 100644 plugins/fresco-pd/fu-fresco-pd-plugin.h delete mode 100644 plugins/fresco-pd/fu-plugin-fresco-pd.c rename plugins/genesys/{fu-plugin-genesys.c => fu-genesys-plugin.c} (65%) create mode 100644 plugins/genesys/fu-genesys-plugin.h create mode 100644 plugins/goodix-moc/fu-goodixmoc-plugin.c create mode 100644 plugins/goodix-moc/fu-goodixmoc-plugin.h delete mode 100644 plugins/goodix-moc/fu-plugin-goodixmoc.c rename plugins/gpio/{fu-plugin-gpio.c => fu-gpio-plugin.c} (61%) create mode 100644 plugins/gpio/fu-gpio-plugin.h create mode 100644 plugins/hailuck/fu-hailuck-plugin.c create mode 100644 plugins/hailuck/fu-hailuck-plugin.h delete mode 100644 plugins/hailuck/fu-plugin-hailuck.c rename plugins/intel-spi/{fu-plugin-intel-spi.c => fu-intel-spi-plugin.c} (51%) create mode 100644 plugins/intel-spi/fu-intel-spi-plugin.h create mode 100644 plugins/intel-usb4/fu-intel-usb4-plugin.c create mode 100644 plugins/intel-usb4/fu-intel-usb4-plugin.h delete mode 100644 plugins/intel-usb4/fu-plugin-intel-usb4.c rename plugins/iommu/{fu-plugin-iommu.c => fu-iommu-plugin.c} (53%) create mode 100644 plugins/iommu/fu-iommu-plugin.h rename plugins/jabra/{fu-plugin-jabra.c => fu-jabra-plugin.c} (69%) create mode 100644 plugins/jabra/fu-jabra-plugin.h create mode 100644 plugins/kinetic-dp/fu-kinetic-dp-plugin.c create mode 100644 plugins/kinetic-dp/fu-kinetic-dp-plugin.h rename plugins/lenovo-thinklmi/{fu-plugin-lenovo-thinklmi.c => fu-lenovo-thinklmi-plugin.c} (66%) create mode 100644 plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.h rename plugins/linux-lockdown/{fu-plugin-linux-lockdown.c => fu-linux-lockdown-plugin.c} (51%) create mode 100644 plugins/linux-lockdown/fu-linux-lockdown-plugin.h rename plugins/linux-sleep/{fu-plugin-linux-sleep.c => fu-linux-sleep-plugin.c} (71%) create mode 100644 plugins/linux-sleep/fu-linux-sleep-plugin.h rename plugins/linux-swap/{fu-plugin-linux-swap.c => fu-linux-swap-plugin.c} (60%) create mode 100644 plugins/linux-swap/fu-linux-swap-plugin.h rename plugins/linux-tainted/{fu-plugin-linux-tainted.c => fu-linux-tainted-plugin.c} (69%) create mode 100644 plugins/linux-tainted/fu-linux-tainted-plugin.h rename plugins/logind/{fu-plugin-logind.c => fu-logind-plugin.c} (52%) create mode 100644 plugins/logind/fu-logind-plugin.h create mode 100644 plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.c create mode 100644 plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.h delete mode 100644 plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c rename plugins/logitech-hidpp/{fu-plugin-logitech-hidpp.c => fu-logitech-hidpp-plugin.c} (62%) create mode 100644 plugins/logitech-hidpp/fu-logitech-hidpp-plugin.h create mode 100755 plugins/migrate.py rename plugins/msr/{fu-plugin-msr.c => fu-msr-plugin.c} (78%) create mode 100644 plugins/msr/fu-msr-plugin.h create mode 100644 plugins/mtd/fu-mtd-plugin.c create mode 100644 plugins/mtd/fu-mtd-plugin.h delete mode 100644 plugins/mtd/fu-plugin-mtd.c create mode 100644 plugins/nitrokey/fu-nitrokey-plugin.c create mode 100644 plugins/nitrokey/fu-nitrokey-plugin.h delete mode 100644 plugins/nitrokey/fu-plugin-nitrokey.c rename plugins/nordic-hid/{fu-plugin-nordic-hid.c => fu-nordic-hid-plugin.c} (58%) create mode 100644 plugins/nordic-hid/fu-nordic-hid-plugin.h create mode 100644 plugins/nvme/fu-nvme-plugin.c create mode 100644 plugins/nvme/fu-nvme-plugin.h delete mode 100644 plugins/nvme/fu-plugin-nvme.c create mode 100644 plugins/optionrom/fu-optionrom-plugin.c create mode 100644 plugins/optionrom/fu-optionrom-plugin.h delete mode 100644 plugins/optionrom/fu-plugin-optionrom.c create mode 100644 plugins/parade-lspcon/fu-parade-lspcon-plugin.c create mode 100644 plugins/parade-lspcon/fu-parade-lspcon-plugin.h delete mode 100644 plugins/parade-lspcon/fu-plugin-parade-lspcon.c rename plugins/pci-bcr/{fu-plugin-pci-bcr.c => fu-pci-bcr-plugin.c} (66%) create mode 100644 plugins/pci-bcr/fu-pci-bcr-plugin.h rename plugins/pci-mei/{fu-plugin-pci-mei.c => fu-pci-mei-plugin.c} (72%) create mode 100644 plugins/pci-mei/fu-pci-mei-plugin.h create mode 100644 plugins/pci-psp/fu-pci-psp-plugin.c create mode 100644 plugins/pci-psp/fu-pci-psp-plugin.h delete mode 100644 plugins/pci-psp/fu-plugin-pci-psp.c rename plugins/pixart-rf/{fu-plugin-pixart-rf.c => fu-pxi-plugin.c} (50%) create mode 100644 plugins/pixart-rf/fu-pxi-plugin.h rename plugins/powerd/{fu-plugin-powerd.c => fu-powerd-plugin.c} (63%) create mode 100644 plugins/powerd/fu-powerd-plugin.h delete mode 100644 plugins/realtek-mst/fu-plugin-realtek-mst.c create mode 100644 plugins/realtek-mst/fu-realtek-mst-plugin.c create mode 100644 plugins/realtek-mst/fu-realtek-mst-plugin.h rename plugins/redfish/{fu-plugin-redfish.c => fu-redfish-plugin.c} (76%) create mode 100644 plugins/redfish/fu-redfish-plugin.h delete mode 100644 plugins/rts54hid/fu-plugin-rts54hid.c create mode 100644 plugins/rts54hid/fu-rts54hid-plugin.c create mode 100644 plugins/rts54hid/fu-rts54hid-plugin.h rename plugins/rts54hub/{fu-plugin-rts54hub.c => fu-rts54hub-plugin.c} (55%) create mode 100644 plugins/rts54hub/fu-rts54hub-plugin.h delete mode 100644 plugins/scsi/fu-plugin-scsi.c create mode 100644 plugins/scsi/fu-scsi-plugin.c create mode 100644 plugins/scsi/fu-scsi-plugin.h rename plugins/steelseries/{fu-plugin-steelseries.c => fu-steelseries-plugin.c} (62%) create mode 100644 plugins/steelseries/fu-steelseries-plugin.h rename plugins/superio/{fu-plugin-superio.c => fu-superio-plugin.c} (78%) create mode 100644 plugins/superio/fu-superio-plugin.h delete mode 100644 plugins/synaptics-cape/fu-plugin-synaptics-cape.c create mode 100644 plugins/synaptics-cape/fu-synaptics-cape-plugin.c create mode 100644 plugins/synaptics-cape/fu-synaptics-cape-plugin.h rename plugins/synaptics-cxaudio/{fu-plugin-synaptics-cxaudio.c => fu-synaptics-cxaudio-plugin.c} (50%) create mode 100644 plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.h rename plugins/synaptics-mst/{fu-plugin-synaptics-mst.c => fu-synaptics-mst-plugin.c} (55%) create mode 100644 plugins/synaptics-mst/fu-synaptics-mst-plugin.h delete mode 100644 plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c create mode 100644 plugins/synaptics-prometheus/fu-synaprom-plugin.c create mode 100644 plugins/synaptics-prometheus/fu-synaprom-plugin.h rename plugins/synaptics-rmi/{fu-plugin-synaptics-rmi.c => fu-synaptics-rmi-plugin.c} (52%) create mode 100644 plugins/synaptics-rmi/fu-synaptics-rmi-plugin.h delete mode 100644 plugins/system76-launch/fu-plugin-system76-launch.c create mode 100644 plugins/system76-launch/fu-system76-launch-plugin.c create mode 100644 plugins/system76-launch/fu-system76-launch-plugin.h delete mode 100644 plugins/test/fu-plugin-test-ble.c create mode 100644 plugins/test/fu-test-ble-plugin.c create mode 100644 plugins/test/fu-test-ble-plugin.h rename plugins/test/{fu-plugin-test.c => fu-test-plugin.c} (76%) create mode 100644 plugins/test/fu-test-plugin.h delete mode 100644 plugins/thelio-io/fu-plugin-thelio-io.c create mode 100644 plugins/thelio-io/fu-thelio-io-plugin.c create mode 100644 plugins/thelio-io/fu-thelio-io-plugin.h rename plugins/thunderbolt/{fu-plugin-thunderbolt.c => fu-thunderbolt-plugin.c} (67%) create mode 100644 plugins/thunderbolt/fu-thunderbolt-plugin.h rename plugins/tpm/{fu-plugin-tpm.c => fu-tpm-plugin.c} (62%) create mode 100644 plugins/tpm/fu-tpm-plugin.h rename plugins/uefi-capsule/{fu-plugin-uefi-capsule.c => fu-uefi-capsule-plugin.c} (80%) create mode 100644 plugins/uefi-capsule/fu-uefi-capsule-plugin.h rename plugins/uefi-dbx/{fu-plugin-uefi-dbx.c => fu-uefi-dbx-plugin.c} (63%) create mode 100644 plugins/uefi-dbx/fu-uefi-dbx-plugin.h rename plugins/uefi-pk/{fu-plugin-uefi-pk.c => fu-uefi-pk-plugin.c} (74%) create mode 100644 plugins/uefi-pk/fu-uefi-pk-plugin.h rename plugins/uefi-recovery/{fu-plugin-uefi-recovery.c => fu-uefi-recovery-plugin.c} (66%) create mode 100644 plugins/uefi-recovery/fu-uefi-recovery-plugin.h delete mode 100644 plugins/uf2/fu-plugin-uf2.c create mode 100644 plugins/uf2/fu-uf2-plugin.c create mode 100644 plugins/uf2/fu-uf2-plugin.h rename plugins/upower/{fu-plugin-upower.c => fu-upower-plugin.c} (65%) create mode 100644 plugins/upower/fu-upower-plugin.h rename plugins/usi-dock/{fu-plugin-usi-dock.c => fu-usi-dock-plugin.c} (56%) create mode 100644 plugins/usi-dock/fu-usi-dock-plugin.h rename plugins/vbe/{fu-plugin-vbe.c => fu-vbe-plugin.c} (68%) create mode 100644 plugins/vbe/fu-vbe-plugin.h rename plugins/vli/{fu-plugin-vli.c => fu-vli-plugin.c} (58%) create mode 100644 plugins/vli/fu-vli-plugin.h rename plugins/wacom-raw/{fu-plugin-wacom-raw.c => fu-wacom-raw-plugin.c} (53%) create mode 100644 plugins/wacom-raw/fu-wacom-raw-plugin.h delete mode 100644 plugins/wacom-usb/fu-plugin-wacom-usb.c create mode 100644 plugins/wacom-usb/fu-wac-plugin.c create mode 100644 plugins/wacom-usb/fu-wac-plugin.h diff --git a/contrib/fwupd.spec.in b/contrib/fwupd.spec.in index 84a6318aa..4fd606093 100644 --- a/contrib/fwupd.spec.in +++ b/contrib/fwupd.spec.in @@ -427,115 +427,9 @@ done %{_libdir}/fwupd-%{fwupdplugin_version}/libfwupdpluginbuiltin.so %{_libdir}/fwupd-%{fwupdplugin_version}/libfwupdplugin.so %{_libdir}/fwupd-%{fwupdplugin_version}/libfwupdutil.so -%ifarch i686 x86_64 -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_acpi_facp.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_acpi_phat.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_amt.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_analogix.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_android_boot.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_ata.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_bcm57xx.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_cfu.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_ccgx.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_ch341a.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_corsair.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_cros_ec.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_cpu.so -%if 0%{?have_dell} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_dell.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_dell_esrt.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_dell_dock.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_dfu.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_dfu_csr.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_ebitdo.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_elantp.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_elanfp.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_emmc.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_ep963x.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_fastboot.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_focalfp.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_fpc.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_fresco_pd.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_genesys.so -%if 0%{?have_gpio} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_gpio.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_hailuck.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_intel_usb4.so -%ifarch i686 x86_64 -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_iommu.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_jabra.so -%if 0%{?have_uefi} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_lenovo_thinklmi.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_linux_lockdown.so -%ifarch i686 x86_64 -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_linux_sleep.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_linux_swap.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_linux_tainted.so -%if 0%{?have_msr} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_acpi_dmar.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_acpi_ivrs.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_msr.so -%endif -%ifarch i686 x86_64 -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_amd_pmc.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_pci_psp.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_mtd.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_nitrokey.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_nordic_hid.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_nvme.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_optionrom.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_parade_lspcon.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_pci_bcr.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_pci_mei.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_pixart_rf.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_realtek_mst.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_redfish.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_rts54hid.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_rts54hub.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_scsi.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_steelseries.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_superio.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_synaptics_mst.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_synaptics_cape.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_synaptics_cxaudio.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_synaptics_prometheus.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_synaptics_rmi.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_system76_launch.so %if 0%{?enable_dummy} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_test.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_test_ble.so %{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_invalid.so %endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_thelio_io.so -%if 0%{?have_thunderbolt} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_thunderbolt.so -%endif -%if 0%{?have_uefi} -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_tpm.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_bios.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_uefi_capsule.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_uefi_dbx.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_uefi_pk.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_uefi_recovery.so -%endif -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_usi_dock.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_vbe.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_logind.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_logitech_bulkcontroller.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_logitech_hidpp.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_uf2.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_upower.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_vli.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_wacom_raw.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_wacom_usb.so -%{_libdir}/fwupd-%{fwupdplugin_version}/libfu_plugin_goodixmoc.so %ghost %{_localstatedir}/lib/fwupd/gnupg %if 0%{?have_modem_manager} diff --git a/docs/tutorial.md b/docs/tutorial.md index e83e9c201..aba4cd42e 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -4,7 +4,7 @@ title: Plugin Tutorial ## Introduction -At the heart of fwupd is a plugin loader that gets run at startup, when devices +At the heart of fwupd are plugins that gets run at startup, when devices get hotplugged and when updates are done. The idea is we have lots of small plugins that each do one thing, and are ordered by dependencies against each other at runtime. @@ -16,51 +16,48 @@ There are broadly 3 types of plugin methods: - **Mechanism**: Upload binary data into a specific hardware device. - **Policy**: Control the system when updates are happening, e.g. preventing the user from powering-off. -- **Helpers**: Providing more metadata about devices, for instance handling -- device quirks. - -In general, building things out-of-tree isn't something that we think is a very -good idea; the API and ABI *internal* to fwupd is still changing and there's a -huge benefit to getting plugins upstream where they can undergo review and be -ported as the API adapts. -For this reason we don't install the plugin headers onto the system, although -you can of course just install the `.so` binary file manually. +- **Helpers**: Providing more metadata about devices, for instance handling device quirks. 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. +is taken automatically from the GType. - /* - * Copyright (C) 2017 Richard Hughes + /* fu-foo-plugin.h + * + * Copyright (C) 2022 Richard Hughes * * SPDX-License-Identifier: LGPL-2.1+ */ + #pragma once + #include - struct FuPluginData { + G_DECLARE_FINAL_TYPE(FuFooPlugin, fu_foo_plugin, FU, FOO_PLUGIN, FuPlugin) + + /* fu-foo-plugin.c + * + * Copyright (C) Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + + #include "config.h" + + #include "fu-foo-plugin.h" + + struct _FuFooPlugin { + FuPlugin parent_instance; gpointer proxy; }; - 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)); - } - - static void - fu_plugin_foo_destroy(FuPlugin *plugin) - { - FuPluginData *data = fu_plugin_get_data(plugin); - destroy_proxy(data->proxy); - } + G_DEFINE_TYPE(FuFooPlugin, fu_foo_plugin, FU_TYPE_PLUGIN) static gboolean - fu_plugin_foo_startup(FuPlugin *plugin, FuProgress *progress, GError **error) + fu_foo_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { FuPluginData *data = fu_plugin_get_data(plugin); - data->proxy = create_proxy(); - if(data->proxy == NULL) { + self->proxy = create_proxy(); + if(self->proxy == NULL) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "failed to create proxy"); return FALSE; @@ -68,13 +65,36 @@ is taken automatically from the suffix of the `.so` file. return TRUE; } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_init(FuFooPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_foo_init; - vfuncs->destroy = fu_plugin_foo_destroy; - vfuncs->startup = fu_plugin_foo_startup; + } + + static void + fu_foo_constructed(GObject *obj) + { + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_BEFORE, "dfu"); + } + + static void + fu_foo_finalize(GObject *obj) + { + FuFooPlugin *self = FU_FOO_PLUGIN(obj); + destroy_proxy(self->proxy); + G_OBJECT_CLASS(fu_foo_plugin_parent_class)->finalize(obj); + } + + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) + { + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_foo_constructed; + object_class->finalize = fu_foo_finalize; + plugin_class->startup = fu_foo_plugin_startup; } We have to define when our plugin is run in reference to other plugins, in this @@ -92,7 +112,7 @@ derive the details about the `FuDevice` from the hardware, for example reading data from `sysfs` or `/dev`. static gboolean - fu_plugin_foo_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) + fu_foo_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { g_autoptr(FuDevice) dev = NULL; fu_device_set_id(dev, "dummy-1:2:3"); @@ -106,11 +126,11 @@ data from `sysfs` or `/dev`. return TRUE; } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) { … - vfuncs->coldplug = fu_plugin_foo_coldplug; + plugin_class->coldplug = fu_foo_plugin_coldplug; … } @@ -161,7 +181,7 @@ When this is done the daemon checks the update for compatibility with the device and then calls the vfuncs to update the device. static gboolean - fu_plugin_foo_write_firmware(FuPlugin *plugin, + fu_foo_plugin_write_firmware(FuPlugin *plugin, FuDevice *dev, GBytes *blob_fw, FuProgress *progress, @@ -174,11 +194,11 @@ and then calls the vfuncs to update the device. return TRUE; } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) { … - vfuncs->write_firmware = fu_plugin_foo_write_firmware; + plugin_class->write_firmware = fu_foo_plugin_write_firmware; … } @@ -198,7 +218,7 @@ certain threshold, or it could be as complicated as ensuring a vendor-specific GPIO is asserted when specific types of hardware are updated. static gboolean - fu_plugin_foo_prepare(FuPlugin *plugin, FuDevice *device, GError **error) + fu_foo_plugin_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, @@ -212,18 +232,18 @@ GPIO is asserted when specific types of hardware are updated. } static gboolean - fu_plugin_foo_cleanup(FuPlugin *plugin, FuDevice *device, GError **error) + fu_foo_plugin_cleanup(FuPlugin *plugin, FuDevice *device, GError **error) { return g_file_set_contents("/var/lib/fwupd/something", fu_device_get_id(device), -1, error); } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) { … - vfuncs->prepare = fu_plugin_foo_prepare; - vfuncs->cleanup = fu_plugin_foo_cleanup; + plugin_class->prepare = fu_foo_plugin_prepare; + plugin_class->cleanup = fu_foo_plugin_cleanup; … } @@ -247,7 +267,7 @@ handle the device ID, although the registered plugin can change during the attach and detach phases. static gboolean - fu_plugin_foo_detach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error) + fu_foo_plugin_detach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error) { if (hardware_in_bootloader) return TRUE; @@ -255,7 +275,7 @@ attach and detach phases. } static gboolean - fu_plugin_foo_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error) + fu_foo_plugin_attach(FuPlugin *plugin, FuDevice *device, FuProgress *progress, GError **error) { if (!hardware_in_bootloader) return TRUE; @@ -263,7 +283,7 @@ attach and detach phases. } static gboolean - fu_plugin_foo_reload(FuPlugin *plugin, FuDevice *device, GError **error) + fu_foo_plugin_reload(FuPlugin *plugin, FuDevice *device, GError **error) { g_autofree gchar *version = _get_version(plugin, device, error); if (version == NULL) @@ -272,13 +292,13 @@ attach and detach phases. return TRUE; } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) { … - vfuncs->detach = fu_plugin_foo_detach; - vfuncs->attach = fu_plugin_foo_attach; - vfuncs->reload = fu_plugin_foo_reload; + plugin_class->detach = fu_foo_plugin_detach; + plugin_class->attach = fu_foo_plugin_attach; + plugin_class->reload = fu_foo_plugin_reload; … } @@ -438,24 +458,24 @@ backend (USB or BlueZ). ### Creating a new plugin -The bare minimum a plugin should have is a `fu_plugin_init` function that +The bare minimum a plugin should have is a `constructed` function that defines the plugin characteristics such as the device type and firmware type handled by it, the build hash and any plugin-specific quirk keys that can be used for the plugin. - void - fu_plugin_steelseries_init(FuPlugin *plugin) + static void + fu_foo_plugin_constructed(GObject *obj) { + FuPlugin *plugin = FU_PLUGIN(obj); FuContext *ctx = fu_plugin_get_context(plugin); fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_MOUSE); fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_GAMEPAD); } - void - fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) + static void + fu_foo_plugin_class_init(FuFooPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_steelseries_init; + plugin_class->init = fu_foo_plugin_constructed; } ### Creating a new device type diff --git a/libfwupdplugin/fu-plugin-private.h b/libfwupdplugin/fu-plugin-private.h index 0428b88a3..85223a72c 100644 --- a/libfwupdplugin/fu-plugin-private.h +++ b/libfwupdplugin/fu-plugin-private.h @@ -26,8 +26,6 @@ guint fu_plugin_get_priority(FuPlugin *self); void fu_plugin_set_priority(FuPlugin *self, guint priority); -void -fu_plugin_set_name(FuPlugin *self, const gchar *name); gchar * fu_plugin_to_string(FuPlugin *self); void diff --git a/libfwupdplugin/fu-plugin.h b/libfwupdplugin/fu-plugin.h index 6d5a5da9f..04f0e74cb 100644 --- a/libfwupdplugin/fu-plugin.h +++ b/libfwupdplugin/fu-plugin.h @@ -424,6 +424,8 @@ typedef struct FuPluginData FuPluginData; /* for plugins to use */ const gchar * fu_plugin_get_name(FuPlugin *self); +void +fu_plugin_set_name(FuPlugin *self, const gchar *name); FuPluginData * fu_plugin_get_data(FuPlugin *self); FuPluginData * diff --git a/plugins/acpi-dmar/fu-plugin-acpi-dmar.c b/plugins/acpi-dmar/fu-acpi-dmar-plugin.c similarity index 77% rename from plugins/acpi-dmar/fu-plugin-acpi-dmar.c rename to plugins/acpi-dmar/fu-acpi-dmar-plugin.c index 71f6458ee..5ef60aec9 100644 --- a/plugins/acpi-dmar/fu-plugin-acpi-dmar.c +++ b/plugins/acpi-dmar/fu-acpi-dmar-plugin.c @@ -6,12 +6,17 @@ #include "config.h" -#include - +#include "fu-acpi-dmar-plugin.h" #include "fu-acpi-dmar.h" +struct _FuAcpiDmarPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAcpiDmarPlugin, fu_acpi_dmar_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_acpi_dmar_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_acpi_dmar_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { g_autofree gchar *fn = NULL; g_autofree gchar *path = NULL; @@ -55,9 +60,14 @@ fu_plugin_acpi_dmar_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_acpi_dmar_plugin_init(FuAcpiDmarPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->add_security_attrs = fu_plugin_acpi_dmar_add_security_attrs; +} + +static void +fu_acpi_dmar_plugin_class_init(FuAcpiDmarPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->add_security_attrs = fu_acpi_dmar_plugin_add_security_attrs; } diff --git a/plugins/acpi-dmar/fu-acpi-dmar-plugin.h b/plugins/acpi-dmar/fu-acpi-dmar-plugin.h new file mode 100644 index 000000000..99e4bda4a --- /dev/null +++ b/plugins/acpi-dmar/fu-acpi-dmar-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAcpiDmarPlugin, fu_acpi_dmar_plugin, FU, ACPI_DMAR_PLUGIN, FuPlugin) diff --git a/plugins/acpi-dmar/meson.build b/plugins/acpi-dmar/meson.build index 5e4398d3d..600ed0292 100644 --- a/plugins/acpi-dmar/meson.build +++ b/plugins/acpi-dmar/meson.build @@ -1,28 +1,17 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginAcpiDmar"'] -shared_module('fu_plugin_acpi_dmar', - fu_hash, +plugin_builtin_acpi_dmar = static_library('fu_plugin_acpi_dmar', sources: [ - 'fu-plugin-acpi-dmar.c', + 'fu-acpi-dmar-plugin.c', 'fu-acpi-dmar.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_acpi_dmar if get_option('tests') env = environment() @@ -30,22 +19,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'acpi-dmar-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-acpi-dmar.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_acpi_dmar, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/acpi-facp/fu-plugin-acpi-facp.c b/plugins/acpi-facp/fu-acpi-facp-plugin.c similarity index 77% rename from plugins/acpi-facp/fu-plugin-acpi-facp.c rename to plugins/acpi-facp/fu-acpi-facp-plugin.c index b977608e5..8d317fc65 100644 --- a/plugins/acpi-facp/fu-plugin-acpi-facp.c +++ b/plugins/acpi-facp/fu-acpi-facp-plugin.c @@ -6,12 +6,17 @@ #include "config.h" -#include - +#include "fu-acpi-facp-plugin.h" #include "fu-acpi-facp.h" +struct _FuAcpiFacpPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAcpiFacpPlugin, fu_acpi_facp_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_acpi_facp_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_acpi_facp_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { g_autofree gchar *fn = NULL; g_autofree gchar *path = NULL; @@ -55,9 +60,14 @@ fu_plugin_acpi_facp_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_acpi_facp_plugin_init(FuAcpiFacpPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->add_security_attrs = fu_plugin_acpi_facp_add_security_attrs; +} + +static void +fu_acpi_facp_plugin_class_init(FuAcpiFacpPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->add_security_attrs = fu_acpi_facp_plugin_add_security_attrs; } diff --git a/plugins/acpi-facp/fu-acpi-facp-plugin.h b/plugins/acpi-facp/fu-acpi-facp-plugin.h new file mode 100644 index 000000000..6f29ae373 --- /dev/null +++ b/plugins/acpi-facp/fu-acpi-facp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAcpiFacpPlugin, fu_acpi_facp_plugin, FU, ACPI_FACP_PLUGIN, FuPlugin) diff --git a/plugins/acpi-facp/meson.build b/plugins/acpi-facp/meson.build index 17cc7f095..fd7bc1fcc 100644 --- a/plugins/acpi-facp/meson.build +++ b/plugins/acpi-facp/meson.build @@ -1,28 +1,17 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginAcpiFacp"'] -shared_module('fu_plugin_acpi_facp', - fu_hash, +plugin_builtin_acpi_facp = static_library('fu_plugin_acpi_facp', sources: [ - 'fu-plugin-acpi-facp.c', + 'fu-acpi-facp-plugin.c', 'fu-acpi-facp.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_acpi_facp if get_option('tests') env = environment() @@ -30,22 +19,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'acpi-facp-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-acpi-facp.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_acpi_facp, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/acpi-ivrs/fu-plugin-acpi-ivrs.c b/plugins/acpi-ivrs/fu-acpi-ivrs-plugin.c similarity index 77% rename from plugins/acpi-ivrs/fu-plugin-acpi-ivrs.c rename to plugins/acpi-ivrs/fu-acpi-ivrs-plugin.c index 167542f51..604386e79 100644 --- a/plugins/acpi-ivrs/fu-plugin-acpi-ivrs.c +++ b/plugins/acpi-ivrs/fu-acpi-ivrs-plugin.c @@ -7,12 +7,17 @@ #include "config.h" -#include - +#include "fu-acpi-ivrs-plugin.h" #include "fu-acpi-ivrs.h" +struct _FuAcpiIvrsPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAcpiIvrsPlugin, fu_acpi_ivrs_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_acpi_ivrs_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_acpi_ivrs_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { g_autofree gchar *fn = NULL; g_autofree gchar *path = NULL; @@ -56,9 +61,14 @@ fu_plugin_acpi_ivrs_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_acpi_ivrs_plugin_init(FuAcpiIvrsPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->add_security_attrs = fu_plugin_acpi_ivrs_add_security_attrs; +} + +static void +fu_acpi_ivrs_plugin_class_init(FuAcpiIvrsPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->add_security_attrs = fu_acpi_ivrs_plugin_add_security_attrs; } diff --git a/plugins/acpi-ivrs/fu-acpi-ivrs-plugin.h b/plugins/acpi-ivrs/fu-acpi-ivrs-plugin.h new file mode 100644 index 000000000..d6f554748 --- /dev/null +++ b/plugins/acpi-ivrs/fu-acpi-ivrs-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAcpiIvrsPlugin, fu_acpi_ivrs_plugin, FU, ACPI_IVRS_PLUGIN, FuPlugin) diff --git a/plugins/acpi-ivrs/meson.build b/plugins/acpi-ivrs/meson.build index 3e2a4f030..3031d7d1e 100644 --- a/plugins/acpi-ivrs/meson.build +++ b/plugins/acpi-ivrs/meson.build @@ -1,28 +1,17 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginAcpiIvrs"'] -shared_module('fu_plugin_acpi_ivrs', - fu_hash, +plugin_builtin_acpi_ivrs = static_library('fu_plugin_acpi_ivrs', sources: [ - 'fu-plugin-acpi-ivrs.c', + 'fu-acpi-ivrs-plugin.c', 'fu-acpi-ivrs.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_acpi_ivrs if get_option('tests') env = environment() @@ -30,22 +19,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'acpi-ivrs-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-acpi-ivrs.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_acpi_ivrs, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/acpi-phat/fu-plugin-acpi-phat.c b/plugins/acpi-phat/fu-acpi-phat-plugin.c similarity index 64% rename from plugins/acpi-phat/fu-plugin-acpi-phat.c rename to plugins/acpi-phat/fu-acpi-phat-plugin.c index a0dee367a..fa359db20 100644 --- a/plugins/acpi-phat/fu-plugin-acpi-phat.c +++ b/plugins/acpi-phat/fu-acpi-phat-plugin.c @@ -6,24 +6,20 @@ #include "config.h" -#include - #include "fu-acpi-phat-health-record.h" +#include "fu-acpi-phat-plugin.h" #include "fu-acpi-phat-version-element.h" #include "fu-acpi-phat-version-record.h" #include "fu-acpi-phat.h" -static void -fu_plugin_acpi_phat_init(FuPlugin *plugin) -{ - 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); -} +struct _FuAcpiPhatPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAcpiPhatPlugin, fu_acpi_phat_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_acpi_phat_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_acpi_phat_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { g_autofree gchar *path = NULL; g_autofree gchar *fn = NULL; @@ -43,10 +39,27 @@ fu_plugin_acpi_phat_coldplug(FuPlugin *plugin, FuProgress *progress, GError **er return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_acpi_phat_plugin_init(FuAcpiPhatPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_acpi_phat_init; - vfuncs->coldplug = fu_plugin_acpi_phat_coldplug; +} + +static void +fu_acpi_phat_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + 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); +} + +static void +fu_acpi_phat_plugin_class_init(FuAcpiPhatPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_acpi_phat_plugin_constructed; + plugin_class->coldplug = fu_acpi_phat_plugin_coldplug; } diff --git a/plugins/acpi-phat/fu-acpi-phat-plugin.h b/plugins/acpi-phat/fu-acpi-phat-plugin.h new file mode 100644 index 000000000..7bce94a82 --- /dev/null +++ b/plugins/acpi-phat/fu-acpi-phat-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAcpiPhatPlugin, fu_acpi_phat_plugin, FU, ACPI_PHAT_PLUGIN, FuPlugin) diff --git a/plugins/acpi-phat/meson.build b/plugins/acpi-phat/meson.build index 6329d997e..b37f5ef9c 100644 --- a/plugins/acpi-phat/meson.build +++ b/plugins/acpi-phat/meson.build @@ -1,31 +1,20 @@ if get_option('plugin_acpi_phat').disable_auto_if(host_machine.system() != 'linux').allowed() cargs = ['-DG_LOG_DOMAIN="FuPluginAcpiPhat"'] -shared_module('fu_plugin_acpi_phat', - fu_hash, +plugin_builtin_acpi_phat = static_library('fu_plugin_acpi_phat', sources: [ - 'fu-plugin-acpi-phat.c', + 'fu-acpi-phat-plugin.c', 'fu-acpi-phat.c', # fuzzing 'fu-acpi-phat-health-record.c', # fuzzing 'fu-acpi-phat-version-element.c', # fuzzing 'fu-acpi-phat-version-record.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_acpi_phat if get_option('tests') env = environment() @@ -33,25 +22,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'acpi-phat-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-acpi-phat.c', - 'fu-acpi-phat-health-record.c', - 'fu-acpi-phat-version-element.c', - 'fu-acpi-phat-version-record.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_acpi_phat, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/amd-pmc/fu-amd-pmc-plugin.c b/plugins/amd-pmc/fu-amd-pmc-plugin.c new file mode 100644 index 000000000..506c5a5bc --- /dev/null +++ b/plugins/amd-pmc/fu-amd-pmc-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 Advanced Micro Devices Inc. + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-amd-pmc-device.h" +#include "fu-amd-pmc-plugin.h" + +struct _FuAmdPmcPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAmdPmcPlugin, fu_amd_pmc_plugin, FU_TYPE_PLUGIN) + +static void +fu_amd_pmc_plugin_init(FuAmdPmcPlugin *self) +{ +} + +static void +fu_amd_pmc_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "platform"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_AMD_PMC_DEVICE); +} + +static void +fu_amd_pmc_plugin_class_init(FuAmdPmcPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_amd_pmc_plugin_constructed; +} diff --git a/plugins/amd-pmc/fu-amd-pmc-plugin.h b/plugins/amd-pmc/fu-amd-pmc-plugin.h new file mode 100644 index 000000000..0ffd345d2 --- /dev/null +++ b/plugins/amd-pmc/fu-amd-pmc-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAmdPmcPlugin, fu_amd_pmc_plugin, FU, AMD_PMC_PLUGIN, FuPlugin) diff --git a/plugins/amd-pmc/fu-plugin-amd-pmc.c b/plugins/amd-pmc/fu-plugin-amd-pmc.c deleted file mode 100644 index 2a1920a5c..000000000 --- a/plugins/amd-pmc/fu-plugin-amd-pmc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 Advanced Micro Devices Inc. - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-amd-pmc-device.h" - -static void -fu_plugin_amd_pmc_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "platform"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_AMD_PMC_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_amd_pmc_init; -} diff --git a/plugins/amd-pmc/meson.build b/plugins/amd-pmc/meson.build index e0c51496b..2a6a30b91 100644 --- a/plugins/amd-pmc/meson.build +++ b/plugins/amd-pmc/meson.build @@ -2,27 +2,14 @@ if gudev.found() and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginAmdPmc"'] plugin_quirks += files('amd-pmc.quirk') - -shared_module('fu_plugin_amd_pmc', - fu_hash, +plugin_builtins += static_library('fu_plugin_amd_pmc', sources: [ - 'fu-plugin-amd-pmc.c', + 'fu-amd-pmc-plugin.c', 'fu-amd-pmc-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/amt/fu-amt-plugin.c b/plugins/amt/fu-amt-plugin.c new file mode 100644 index 000000000..e9de8ef67 --- /dev/null +++ b/plugins/amt/fu-amt-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-amt-device.h" +#include "fu-amt-plugin.h" + +struct _FuAmtPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAmtPlugin, fu_amt_plugin, FU_TYPE_PLUGIN) + +static void +fu_amt_plugin_init(FuAmtPlugin *self) +{ +} + +static void +fu_amt_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "mei"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_AMT_DEVICE); +} + +static void +fu_amt_plugin_class_init(FuAmtPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_amt_plugin_constructed; +} diff --git a/plugins/amt/fu-amt-plugin.h b/plugins/amt/fu-amt-plugin.h new file mode 100644 index 000000000..cb82b077b --- /dev/null +++ b/plugins/amt/fu-amt-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAmtPlugin, fu_amt_plugin, FU, AMT_PLUGIN, FuPlugin) diff --git a/plugins/amt/fu-plugin-amt.c b/plugins/amt/fu-plugin-amt.c deleted file mode 100644 index adb2985d1..000000000 --- a/plugins/amt/fu-plugin-amt.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-amt-device.h" - -static void -fu_plugin_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "mei"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_AMT_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->init = fu_plugin_init; - vfuncs->build_hash = FU_BUILD_HASH; -} diff --git a/plugins/amt/meson.build b/plugins/amt/meson.build index 491d0a77a..c5b36fbcb 100644 --- a/plugins/amt/meson.build +++ b/plugins/amt/meson.build @@ -2,27 +2,14 @@ if get_option('plugin_amt').disable_auto_if(host_machine.system() != 'linux').al cargs = ['-DG_LOG_DOMAIN="FuPluginAmt"'] plugin_quirks += files('amt.quirk') - -shared_module('fu_plugin_amt', - fu_hash, +plugin_builtins += static_library('fu_plugin_amt', sources: [ - 'fu-plugin-amt.c', + 'fu-amt-plugin.c', 'fu-amt-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/analogix/fu-analogix-plugin.c b/plugins/analogix/fu-analogix-plugin.c new file mode 100644 index 000000000..aa8ad797a --- /dev/null +++ b/plugins/analogix/fu-analogix-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2021 Xiaotian Cui + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-analogix-device.h" +#include "fu-analogix-firmware.h" +#include "fu-analogix-plugin.h" + +struct _FuAnalogixPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAnalogixPlugin, fu_analogix_plugin, FU_TYPE_PLUGIN) + +static void +fu_analogix_plugin_init(FuAnalogixPlugin *self) +{ +} + +static void +fu_analogix_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_ANALOGIX_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ANALOGIX_FIRMWARE); +} + +static void +fu_analogix_plugin_class_init(FuAnalogixPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_analogix_plugin_constructed; +} diff --git a/plugins/analogix/fu-analogix-plugin.h b/plugins/analogix/fu-analogix-plugin.h new file mode 100644 index 000000000..0c1b9837c --- /dev/null +++ b/plugins/analogix/fu-analogix-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAnalogixPlugin, fu_analogix_plugin, FU, ANALOGIX_PLUGIN, FuPlugin) diff --git a/plugins/analogix/fu-plugin-analogix.c b/plugins/analogix/fu-plugin-analogix.c deleted file mode 100644 index 1d038bbd6..000000000 --- a/plugins/analogix/fu-plugin-analogix.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2021 Xiaotian Cui - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-analogix-device.h" -#include "fu-analogix-firmware.h" - -static void -fu_plugin_analogix_init(FuPlugin *plugin) -{ - 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/analogix/meson.build b/plugins/analogix/meson.build index f9fba4c51..279c0a73b 100644 --- a/plugins/analogix/meson.build +++ b/plugins/analogix/meson.build @@ -2,29 +2,16 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginAnalogix"'] plugin_quirks += files('analogix.quirk') - -shared_module('fu_plugin_analogix', - fu_hash, +plugin_builtins += static_library('fu_plugin_analogix', sources: [ - 'fu-plugin-analogix.c', + 'fu-analogix-plugin.c', 'fu-analogix-device.c', 'fu-analogix-common.c', 'fu-analogix-firmware.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/android-boot/fu-android-boot-plugin.c b/plugins/android-boot/fu-android-boot-plugin.c new file mode 100644 index 000000000..2eeda5c5d --- /dev/null +++ b/plugins/android-boot/fu-android-boot-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 Dylan Van Assche + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-android-boot-device.h" +#include "fu-android-boot-plugin.h" + +struct _FuAndroidBootPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAndroidBootPlugin, fu_android_boot_plugin, FU_TYPE_PLUGIN) + +static void +fu_android_boot_plugin_init(FuAndroidBootPlugin *self) +{ +} + +static void +fu_android_boot_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_ANDROID_BOOT_DEVICE); + fu_plugin_add_udev_subsystem(plugin, "block"); +} + +static void +fu_android_boot_plugin_class_init(FuAndroidBootPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_android_boot_plugin_constructed; +} diff --git a/plugins/android-boot/fu-android-boot-plugin.h b/plugins/android-boot/fu-android-boot-plugin.h new file mode 100644 index 000000000..f7b5805b9 --- /dev/null +++ b/plugins/android-boot/fu-android-boot-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAndroidBootPlugin, fu_android_boot_plugin, FU, ANDROID_BOOT_PLUGIN, FuPlugin) diff --git a/plugins/android-boot/fu-plugin-android-boot.c b/plugins/android-boot/fu-plugin-android-boot.c deleted file mode 100644 index f5b8f5639..000000000 --- a/plugins/android-boot/fu-plugin-android-boot.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 Dylan Van Assche - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-android-boot-device.h" - -static void -fu_plugin_android_boot_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_ANDROID_BOOT_DEVICE); - fu_plugin_add_udev_subsystem(plugin, "block"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_android_boot_init; -} diff --git a/plugins/android-boot/meson.build b/plugins/android-boot/meson.build index e206c22e6..c38ad2911 100644 --- a/plugins/android-boot/meson.build +++ b/plugins/android-boot/meson.build @@ -3,27 +3,14 @@ if get_option('plugin_android_boot').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginAndroidBoot"'] plugin_quirks += files('android-boot.quirk') - -shared_module('fu_plugin_android_boot', - fu_hash, - sources : [ - 'fu-plugin-android-boot.c', +plugin_builtins += static_library('fu_plugin_android_boot', + sources: [ + 'fu-android-boot-plugin.c', 'fu-android-boot-device.c', ], - include_directories : [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install : true, - install_dir: plugin_dir, - link_with : [ - fwupd, - fwupdplugin, - ], - c_args : cargs, - dependencies : [ - plugin_deps, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, + c_args: cargs, + dependencies: plugin_deps, ) endif diff --git a/plugins/ata/fu-ata-plugin.c b/plugins/ata/fu-ata-plugin.c new file mode 100644 index 000000000..439457f35 --- /dev/null +++ b/plugins/ata/fu-ata-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-ata-device.h" +#include "fu-ata-plugin.h" + +struct _FuAtaPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuAtaPlugin, fu_ata_plugin, FU_TYPE_PLUGIN) + +static void +fu_ata_plugin_init(FuAtaPlugin *self) +{ +} + +static void +fu_ata_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "block"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_ATA_DEVICE); +} + +static void +fu_ata_plugin_class_init(FuAtaPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_ata_plugin_constructed; +} diff --git a/plugins/ata/fu-ata-plugin.h b/plugins/ata/fu-ata-plugin.h new file mode 100644 index 000000000..327245220 --- /dev/null +++ b/plugins/ata/fu-ata-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuAtaPlugin, fu_ata_plugin, FU, ATA_PLUGIN, FuPlugin) diff --git a/plugins/ata/fu-plugin-ata.c b/plugins/ata/fu-plugin-ata.c deleted file mode 100644 index 783920ef2..000000000 --- a/plugins/ata/fu-plugin-ata.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-ata-device.h" - -static void -fu_plugin_ata_init(FuPlugin *plugin) -{ - 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/ata/meson.build b/plugins/ata/meson.build index 5e2c5f795..25538a392 100644 --- a/plugins/ata/meson.build +++ b/plugins/ata/meson.build @@ -2,32 +2,20 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginAta"'] plugin_quirks += files('ata.quirk') - -shared_module('fu_plugin_ata', - fu_hash, +plugin_builtin_ata = static_library('fu_plugin_ata', sources: [ - 'fu-plugin-ata.c', + 'fu-ata-plugin.c', 'fu-ata-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_ata if get_option('tests') env = environment() @@ -36,22 +24,14 @@ if get_option('tests') env.set('FWUPD_DATADIR_QUIRKS', meson.current_source_dir()) e = executable( 'ata-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-ata-device.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_ata, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/bcm57xx/fu-plugin-bcm57xx.c b/plugins/bcm57xx/fu-bcm57xx-plugin.c similarity index 62% rename from plugins/bcm57xx/fu-plugin-bcm57xx.c rename to plugins/bcm57xx/fu-bcm57xx-plugin.c index 87ce9f255..e5fd6180c 100644 --- a/plugins/bcm57xx/fu-plugin-bcm57xx.c +++ b/plugins/bcm57xx/fu-bcm57xx-plugin.c @@ -6,17 +6,28 @@ #include "config.h" -#include - #include "fu-bcm57xx-device.h" #include "fu-bcm57xx-dict-image.h" #include "fu-bcm57xx-firmware.h" +#include "fu-bcm57xx-plugin.h" #include "fu-bcm57xx-stage1-image.h" #include "fu-bcm57xx-stage2-image.h" +struct _FuBcm57XxPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuBcm57XxPlugin, fu_bcm57xx_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_bcm57xx_init(FuPlugin *plugin) +fu_bcm57xx_plugin_init(FuBcm57XxPlugin *self) { +} + +static void +fu_bcm57xx_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); 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,9 +37,9 @@ fu_plugin_bcm57xx_init(FuPlugin *plugin) fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "optionrom"); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_bcm57xx_plugin_class_init(FuBcm57XxPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_bcm57xx_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_bcm57xx_plugin_constructed; } diff --git a/plugins/bcm57xx/fu-bcm57xx-plugin.h b/plugins/bcm57xx/fu-bcm57xx-plugin.h new file mode 100644 index 000000000..bc1379e16 --- /dev/null +++ b/plugins/bcm57xx/fu-bcm57xx-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuBcm57XxPlugin, fu_bcm57xx_plugin, FU, BCM57XX_PLUGIN, FuPlugin) diff --git a/plugins/bcm57xx/meson.build b/plugins/bcm57xx/meson.build index 8a2408bc9..ad1ae2906 100644 --- a/plugins/bcm57xx/meson.build +++ b/plugins/bcm57xx/meson.build @@ -3,11 +3,9 @@ if get_option('plugin_bcm57xx').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginBcm57xx"'] plugin_quirks += files('bcm57xx.quirk') - -shared_module('fu_plugin_bcm57xx', - fu_hash, +plugin_builtin_bcm57xx = static_library('fu_plugin_bcm57xx', sources: [ - 'fu-plugin-bcm57xx.c', + 'fu-bcm57xx-plugin.c', 'fu-bcm57xx-common.c', # fuzzing 'fu-bcm57xx-device.c', 'fu-bcm57xx-dict-image.c', # fuzzing @@ -16,23 +14,15 @@ shared_module('fu_plugin_bcm57xx', 'fu-bcm57xx-stage1-image.c', # fuzzing 'fu-bcm57xx-stage2-image.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, valgrind, ], ) +plugin_builtins += plugin_builtin_bcm57xx if get_option('tests') install_data(['tests/bcm57xx.builder.xml'], @@ -42,26 +32,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'bcm57xx-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-bcm57xx-common.c', - 'fu-bcm57xx-dict-image.c', - 'fu-bcm57xx-firmware.c', - 'fu-bcm57xx-stage1-image.c', - 'fu-bcm57xx-stage2-image.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_bcm57xx, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/bios/fu-plugin-bios.c b/plugins/bios/fu-bios-plugin.c similarity index 74% rename from plugins/bios/fu-plugin-bios.c rename to plugins/bios/fu-bios-plugin.c index bd9b3113f..474a3bec4 100644 --- a/plugins/bios/fu-plugin-bios.c +++ b/plugins/bios/fu-bios-plugin.c @@ -6,10 +6,16 @@ #include "config.h" -#include +#include "fu-bios-plugin.h" + +struct _FuBiosPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuBiosPlugin, fu_bios_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_bios_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_bios_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); const gchar *vendor; @@ -24,7 +30,7 @@ fu_plugin_bios_startup(FuPlugin *plugin, FuProgress *progress, GError **error) } static gboolean -fu_plugin_bios_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_bios_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { g_autofree gchar *sysfsfwdir = NULL; g_autofree gchar *esrt_path = NULL; @@ -54,7 +60,7 @@ fu_plugin_bios_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) } static void -fu_plugin_bios_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_bios_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -70,11 +76,16 @@ fu_plugin_bios_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_bios_plugin_init(FuBiosPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->startup = fu_plugin_bios_startup; - vfuncs->coldplug = fu_plugin_bios_coldplug; - vfuncs->add_security_attrs = fu_plugin_bios_add_security_attrs; +} + +static void +fu_bios_plugin_class_init(FuBiosPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->startup = fu_bios_plugin_startup; + plugin_class->coldplug = fu_bios_plugin_coldplug; + plugin_class->add_security_attrs = fu_bios_plugin_add_security_attrs; } diff --git a/plugins/bios/fu-bios-plugin.h b/plugins/bios/fu-bios-plugin.h new file mode 100644 index 000000000..562b4f9ef --- /dev/null +++ b/plugins/bios/fu-bios-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuBiosPlugin, fu_bios_plugin, FU, BIOS_PLUGIN, FuPlugin) diff --git a/plugins/bios/meson.build b/plugins/bios/meson.build index cb305d99e..6d8c93343 100644 --- a/plugins/bios/meson.build +++ b/plugins/bios/meson.build @@ -1,25 +1,13 @@ if get_option('plugin_uefi_capsule').disable_auto_if(host_machine.system() != 'linux').allowed() cargs = ['-DG_LOG_DOMAIN="FuPluginBios"'] -shared_module('fu_plugin_bios', - fu_hash, +plugin_builtins += static_library('fu_plugin_bios', sources: [ - 'fu-plugin-bios.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-bios-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/ccgx/fu-plugin-ccgx.c b/plugins/ccgx/fu-ccgx-plugin.c similarity index 64% rename from plugins/ccgx/fu-plugin-ccgx.c rename to plugins/ccgx/fu-ccgx-plugin.c index 1a68198e1..076454dc8 100644 --- a/plugins/ccgx/fu-plugin-ccgx.c +++ b/plugins/ccgx/fu-ccgx-plugin.c @@ -6,17 +6,33 @@ #include "config.h" -#include - #include "fu-ccgx-dmc-device.h" #include "fu-ccgx-dmc-firmware.h" #include "fu-ccgx-firmware.h" #include "fu-ccgx-hid-device.h" #include "fu-ccgx-hpi-device.h" +#include "fu-ccgx-plugin.h" + +struct _FuCcgxPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCcgxPlugin, fu_ccgx_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_ccgx_init(FuPlugin *plugin) +fu_ccgx_plugin_init(FuCcgxPlugin *self) { +} + +static void +fu_ccgx_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "CcgxFlashRowSize"); + fu_context_add_quirk_key(ctx, "CcgxFlashSize"); + fu_context_add_quirk_key(ctx, "CcgxImageKind"); + fu_context_add_quirk_key(ctx, "CcgxDmcTriggerCode"); 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); @@ -25,18 +41,8 @@ fu_plugin_ccgx_init(FuPlugin *plugin) } static void -fu_plugin_ccgx_load(FuContext *ctx) +fu_ccgx_plugin_class_init(FuCcgxPluginClass *klass) { - fu_context_add_quirk_key(ctx, "CcgxFlashRowSize"); - fu_context_add_quirk_key(ctx, "CcgxFlashSize"); - fu_context_add_quirk_key(ctx, "CcgxImageKind"); - fu_context_add_quirk_key(ctx, "CcgxDmcTriggerCode"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_ccgx_load; - vfuncs->init = fu_plugin_ccgx_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_ccgx_plugin_constructed; } diff --git a/plugins/ccgx/fu-ccgx-plugin.h b/plugins/ccgx/fu-ccgx-plugin.h new file mode 100644 index 000000000..18fc112f2 --- /dev/null +++ b/plugins/ccgx/fu-ccgx-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCcgxPlugin, fu_ccgx_plugin, FU, CCGX_PLUGIN, FuPlugin) diff --git a/plugins/ccgx/meson.build b/plugins/ccgx/meson.build index 5fa608712..8a4eec800 100644 --- a/plugins/ccgx/meson.build +++ b/plugins/ccgx/meson.build @@ -5,11 +5,9 @@ plugin_quirks += files([ 'ccgx-ids.quirk', 'ccgx.quirk', ]) - -shared_module('fu_plugin_ccgx', - fu_hash, +plugin_builtin_ccgx = static_library('fu_plugin_ccgx', sources: [ - 'fu-plugin-ccgx.c', + 'fu-ccgx-plugin.c', 'fu-ccgx-common.c', # fuzzing 'fu-ccgx-firmware.c', # fuzzing 'fu-ccgx-hid-device.c', @@ -19,23 +17,15 @@ shared_module('fu_plugin_ccgx', 'fu-ccgx-dmc-firmware.c', # fuzzing 'fu-ccgx-dmc-common.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, gudev, ], ) +plugin_builtins += plugin_builtin_ccgx endif if get_option('tests') @@ -46,25 +36,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'ccgx-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-ccgx-common.c', - 'fu-ccgx-firmware.c', - 'fu-ccgx-dmc-common.c', - 'fu-ccgx-dmc-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_ccgx, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/cfu/fu-cfu-plugin.c b/plugins/cfu/fu-cfu-plugin.c new file mode 100644 index 000000000..847471b0c --- /dev/null +++ b/plugins/cfu/fu-cfu-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-cfu-device.h" +#include "fu-cfu-plugin.h" + +struct _FuCfuPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCfuPlugin, fu_cfu_plugin, FU_TYPE_PLUGIN) + +static void +fu_cfu_plugin_init(FuCfuPlugin *self) +{ +} + +static void +fu_cfu_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_CFU_DEVICE); +} + +static void +fu_cfu_plugin_class_init(FuCfuPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_cfu_plugin_constructed; +} diff --git a/plugins/cfu/fu-cfu-plugin.h b/plugins/cfu/fu-cfu-plugin.h new file mode 100644 index 000000000..acbe48f37 --- /dev/null +++ b/plugins/cfu/fu-cfu-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCfuPlugin, fu_cfu_plugin, FU, CFU_PLUGIN, FuPlugin) diff --git a/plugins/cfu/fu-plugin-cfu.c b/plugins/cfu/fu-plugin-cfu.c deleted file mode 100644 index 84c6d5cfb..000000000 --- a/plugins/cfu/fu-plugin-cfu.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2021 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-cfu-device.h" - -static void -fu_plugin_cfu_init(FuPlugin *plugin) -{ - 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/cfu/meson.build b/plugins/cfu/meson.build index f0f14f0a3..02aa05e40 100644 --- a/plugins/cfu/meson.build +++ b/plugins/cfu/meson.build @@ -3,28 +3,15 @@ if get_option('plugin_cfu').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginCfu"'] plugin_quirks += files('cfu.quirk') - -shared_module('fu_plugin_cfu', - fu_hash, +plugin_builtins += static_library('fu_plugin_cfu', sources: [ 'fu-cfu-device.c', 'fu-cfu-module.c', - 'fu-plugin-cfu.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-cfu-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/ch341a/fu-ch341a-plugin.c b/plugins/ch341a/fu-ch341a-plugin.c new file mode 100644 index 000000000..394bf352f --- /dev/null +++ b/plugins/ch341a/fu-ch341a-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-ch341a-device.h" +#include "fu-ch341a-plugin.h" + +struct _FuCh341APlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCh341APlugin, fu_ch341a_plugin, FU_TYPE_PLUGIN) + +static void +fu_ch341a_plugin_init(FuCh341APlugin *self) +{ +} + +static void +fu_ch341a_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_CH341A_DEVICE); +} + +static void +fu_ch341a_plugin_class_init(FuCh341APluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_ch341a_plugin_constructed; +} diff --git a/plugins/ch341a/fu-ch341a-plugin.h b/plugins/ch341a/fu-ch341a-plugin.h new file mode 100644 index 000000000..5ed9a3936 --- /dev/null +++ b/plugins/ch341a/fu-ch341a-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCh341APlugin, fu_ch341a_plugin, FU, CH341A_PLUGIN, FuPlugin) diff --git a/plugins/ch341a/fu-plugin-ch341a.c b/plugins/ch341a/fu-plugin-ch341a.c deleted file mode 100644 index 558d061db..000000000 --- a/plugins/ch341a/fu-plugin-ch341a.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2022 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-ch341a-device.h" - -static void -fu_plugin_ch341a_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_CH341A_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_ch341a_init; -} diff --git a/plugins/ch341a/meson.build b/plugins/ch341a/meson.build index 07651c405..8060c44ab 100644 --- a/plugins/ch341a/meson.build +++ b/plugins/ch341a/meson.build @@ -2,28 +2,15 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginCh341a"'] plugin_quirks += files('ch341a.quirk') - -shared_module('fu_plugin_ch341a', - fu_hash, +plugin_builtins += static_library('fu_plugin_ch341a', sources: [ 'fu-ch341a-cfi-device.c', 'fu-ch341a-device.c', - 'fu-plugin-ch341a.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-ch341a-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/corsair/fu-corsair-bp.c b/plugins/corsair/fu-corsair-bp.c index be6b908ad..cab7b5e9a 100644 --- a/plugins/corsair/fu-corsair-bp.c +++ b/plugins/corsair/fu-corsair-bp.c @@ -61,7 +61,7 @@ fu_corsair_bp_command(FuCorsairBp *self, data[CORSAIR_OFFSET_CMD_DESTINATION] = self->destination; - fu_dump_raw(G_LOG_DOMAIN, "corsair: command", data, self->cmd_write_size); + fu_dump_raw("FuPluginCorsair", "command", data, self->cmd_write_size); ret = g_usb_device_interrupt_transfer(usb_device, self->epout, @@ -110,7 +110,7 @@ fu_corsair_bp_command(FuCorsairBp *self, return FALSE; } - fu_dump_raw(G_LOG_DOMAIN, "corsair: response", data, self->cmd_write_size); + fu_dump_raw("FuPluginCorsair", "response", data, self->cmd_write_size); if (data[CORSAIR_OFFSET_CMD_STATUS] != 0) { g_set_error(error, diff --git a/plugins/corsair/fu-corsair-plugin.c b/plugins/corsair/fu-corsair-plugin.c new file mode 100644 index 000000000..36bc93dc4 --- /dev/null +++ b/plugins/corsair/fu-corsair-plugin.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 Andrii Dushko + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-corsair-device.h" +#include "fu-corsair-plugin.h" + +struct _FuCorsairPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCorsairPlugin, fu_corsair_plugin, FU_TYPE_PLUGIN) + +static void +fu_corsair_plugin_init(FuCorsairPlugin *self) +{ +} + +static void +fu_corsair_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "CorsairDeviceKind"); + fu_context_add_quirk_key(ctx, "CorsairVendorInterfaceId"); + fu_context_add_quirk_key(ctx, "CorsairSubdeviceId"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_CORSAIR_DEVICE); +} + +static void +fu_corsair_plugin_class_init(FuCorsairPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_corsair_plugin_constructed; +} diff --git a/plugins/corsair/fu-corsair-plugin.h b/plugins/corsair/fu-corsair-plugin.h new file mode 100644 index 000000000..93e0075ce --- /dev/null +++ b/plugins/corsair/fu-corsair-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCorsairPlugin, fu_corsair_plugin, FU, CORSAIR_PLUGIN, FuPlugin) diff --git a/plugins/corsair/fu-plugin-corsair.c b/plugins/corsair/fu-plugin-corsair.c deleted file mode 100644 index 2f3b9489f..000000000 --- a/plugins/corsair/fu-plugin-corsair.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2022 Andrii Dushko - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-corsair-device.h" - -static void -fu_plugin_corsair_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_CORSAIR_DEVICE); -} - -static void -fu_plugin_corsair_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "CorsairDeviceKind"); - fu_context_add_quirk_key(ctx, "CorsairVendorInterfaceId"); - fu_context_add_quirk_key(ctx, "CorsairSubdeviceId"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_corsair_load; - vfuncs->init = fu_plugin_corsair_init; -} diff --git a/plugins/corsair/meson.build b/plugins/corsair/meson.build index 4267a1509..349abb4d7 100644 --- a/plugins/corsair/meson.build +++ b/plugins/corsair/meson.build @@ -1,30 +1,17 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginCorsair"'] -plugin_quirks += files('corsair.quirk') - -shared_module('fu_plugin_corsair', - fu_hash, +plugin_quirks += join_paths(meson.current_source_dir(), 'corsair.quirk') +plugin_builtins += static_library('fu_plugin_corsair', sources: [ - 'fu-plugin-corsair.c', + 'fu-corsair-plugin.c', 'fu-corsair-common.c', 'fu-corsair-device.c', 'fu-corsair-bp.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/cpu/fu-plugin-cpu.c b/plugins/cpu/fu-cpu-plugin.c similarity index 59% rename from plugins/cpu/fu-plugin-cpu.c rename to plugins/cpu/fu-cpu-plugin.c index 180d99f84..c73ae67c9 100644 --- a/plugins/cpu/fu-plugin-cpu.c +++ b/plugins/cpu/fu-cpu-plugin.c @@ -6,18 +6,17 @@ #include "config.h" -#include - #include "fu-cpu-device.h" +#include "fu-cpu-plugin.h" -static void -fu_plugin_cpu_init(FuPlugin *plugin) -{ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_BEFORE, "msr"); -} +struct _FuCpuPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCpuPlugin, fu_cpu_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_cpu_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_cpu_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); g_autoptr(FuCpuDevice) dev = fu_cpu_device_new(ctx); @@ -40,10 +39,23 @@ fu_plugin_cpu_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_cpu_plugin_init(FuCpuPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_cpu_init; - vfuncs->coldplug = fu_plugin_cpu_coldplug; +} + +static void +fu_cpu_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_BEFORE, "msr"); +} + +static void +fu_cpu_plugin_class_init(FuCpuPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_cpu_plugin_constructed; + plugin_class->coldplug = fu_cpu_plugin_coldplug; } diff --git a/plugins/cpu/fu-cpu-plugin.h b/plugins/cpu/fu-cpu-plugin.h new file mode 100644 index 000000000..9bacde01a --- /dev/null +++ b/plugins/cpu/fu-cpu-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCpuPlugin, fu_cpu_plugin, FU, CPU_PLUGIN, FuPlugin) diff --git a/plugins/cpu/meson.build b/plugins/cpu/meson.build index 649207054..537e16a8a 100644 --- a/plugins/cpu/meson.build +++ b/plugins/cpu/meson.build @@ -3,28 +3,15 @@ if get_option('plugin_cpu').disable_auto_if(host_machine.system() != 'linux').re cargs = ['-DG_LOG_DOMAIN="FuPluginCpu"'] plugin_quirks += files('cpu.quirk') - -shared_module('fu_plugin_cpu', - fu_hash, +plugin_builtins += static_library('fu_plugin_cpu', sources: [ - 'fu-plugin-cpu.c', + 'fu-cpu-plugin.c', 'fu-cpu-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) code = ''' diff --git a/plugins/cros-ec/fu-cros-ec-plugin.c b/plugins/cros-ec/fu-cros-ec-plugin.c new file mode 100644 index 000000000..ee0b06e18 --- /dev/null +++ b/plugins/cros-ec/fu-cros-ec-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 Benson Leung + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-cros-ec-firmware.h" +#include "fu-cros-ec-plugin.h" +#include "fu-cros-ec-usb-device.h" + +struct _FuCrosEcPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuCrosEcPlugin, fu_cros_ec_plugin, FU_TYPE_PLUGIN) + +static void +fu_cros_ec_plugin_init(FuCrosEcPlugin *self) +{ +} + +static void +fu_cros_ec_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_CROS_EC_USB_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_CROS_EC_FIRMWARE); +} + +static void +fu_cros_ec_plugin_class_init(FuCrosEcPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_cros_ec_plugin_constructed; +} diff --git a/plugins/cros-ec/fu-cros-ec-plugin.h b/plugins/cros-ec/fu-cros-ec-plugin.h new file mode 100644 index 000000000..4e48222e4 --- /dev/null +++ b/plugins/cros-ec/fu-cros-ec-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuCrosEcPlugin, fu_cros_ec_plugin, FU, CROS_EC_PLUGIN, FuPlugin) diff --git a/plugins/cros-ec/fu-plugin-cros-ec.c b/plugins/cros-ec/fu-plugin-cros-ec.c deleted file mode 100644 index ebb197d54..000000000 --- a/plugins/cros-ec/fu-plugin-cros-ec.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2020 Benson Leung - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-cros-ec-firmware.h" -#include "fu-cros-ec-usb-device.h" - -static void -fu_plugin_cros_ec_init(FuPlugin *plugin) -{ - 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/cros-ec/meson.build b/plugins/cros-ec/meson.build index 56a97676a..a8aa53f6e 100644 --- a/plugins/cros-ec/meson.build +++ b/plugins/cros-ec/meson.build @@ -2,29 +2,16 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginCrosEc"'] plugin_quirks += files('cros-ec.quirk') - -shared_module('fu_plugin_cros_ec', - fu_hash, +plugin_builtins += static_library('fu_plugin_cros_ec', sources: [ - 'fu-plugin-cros-ec.c', + 'fu-cros-ec-plugin.c', 'fu-cros-ec-usb-device.c', 'fu-cros-ec-common.c', # fuzzing 'fu-cros-ec-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/dell-dock/fu-plugin-dell-dock.c b/plugins/dell-dock/fu-dell-dock-plugin.c similarity index 82% rename from plugins/dell-dock/fu-plugin-dell-dock.c rename to plugins/dell-dock/fu-dell-dock-plugin.c index 2e24c5af7..5166d5032 100644 --- a/plugins/dell-dock/fu-plugin-dell-dock.c +++ b/plugins/dell-dock/fu-dell-dock-plugin.c @@ -15,39 +15,17 @@ #include "config.h" -#include - #include "fu-dell-dock-common.h" +#include "fu-dell-dock-plugin.h" -static void -fu_plugin_dell_dock_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "DellDockBlobBuildOffset"); - fu_context_add_quirk_key(ctx, "DellDockBlobMajorOffset"); - fu_context_add_quirk_key(ctx, "DellDockBlobMinorOffset"); - fu_context_add_quirk_key(ctx, "DellDockBlobVersionOffset"); - fu_context_add_quirk_key(ctx, "DellDockBoardMin"); - fu_context_add_quirk_key(ctx, "DellDockHubVersionLowest"); - fu_context_add_quirk_key(ctx, "DellDockInstallDurationI2C"); - fu_context_add_quirk_key(ctx, "DellDockUnlockTarget"); - fu_context_add_quirk_key(ctx, "DellDockVersionLowest"); -} +struct _FuDellDockPlugin { + FuPlugin parent_instance; +}; -static void -fu_plugin_dell_dock_init(FuPlugin *plugin) -{ - /* allow these to be built by quirks */ - fu_plugin_add_device_gtype(plugin, FU_TYPE_DELL_DOCK_STATUS); - fu_plugin_add_device_gtype(plugin, FU_TYPE_DELL_DOCK_MST); - -#ifndef _WIN32 - /* currently slower performance, but more reliable in corner cases */ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "synaptics_mst"); -#endif -} +G_DEFINE_TYPE(FuDellDockPlugin, fu_dell_dock_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_dell_dock_create_node(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_dock_plugin_create_node(FuPlugin *plugin, FuDevice *device, GError **error) { g_autoptr(FuDeviceLocker) locker = NULL; @@ -61,7 +39,7 @@ fu_plugin_dell_dock_create_node(FuPlugin *plugin, FuDevice *device, GError **err } static gboolean -fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) +fu_dell_dock_plugin_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) { const gchar *instance_id_mst; const gchar *instance_id_status; @@ -74,7 +52,7 @@ fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) /* create ec endpoint */ ec_device = fu_dell_dock_ec_new(proxy); - if (!fu_plugin_dell_dock_create_node(plugin, FU_DEVICE(ec_device), error)) + if (!fu_dell_dock_plugin_create_node(plugin, FU_DEVICE(ec_device), error)) return FALSE; /* create mst endpoint */ @@ -89,7 +67,7 @@ fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) if (!fu_device_probe(FU_DEVICE(mst_device), error)) return FALSE; fu_device_add_child(FU_DEVICE(ec_device), FU_DEVICE(mst_device)); - if (!fu_plugin_dell_dock_create_node(plugin, FU_DEVICE(mst_device), error)) + if (!fu_dell_dock_plugin_create_node(plugin, FU_DEVICE(mst_device), error)) return FALSE; /* create package version endpoint */ @@ -104,7 +82,7 @@ fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) fu_device_add_guid(FU_DEVICE(status_device), fwupd_guid_hash_string(instance_guid_status)); fu_device_add_child(FU_DEVICE(ec_device), FU_DEVICE(status_device)); fu_device_add_instance_id(FU_DEVICE(status_device), instance_id_status); - if (!fu_plugin_dell_dock_create_node(plugin, FU_DEVICE(status_device), error)) + if (!fu_dell_dock_plugin_create_node(plugin, FU_DEVICE(status_device), error)) return FALSE; /* create TBT endpoint if Thunderbolt SKU and Thunderbolt link inactive */ @@ -114,7 +92,7 @@ fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) fwupd_guid_hash_string(DELL_DOCK_TBT_INSTANCE_ID); fu_device_add_guid(FU_DEVICE(tbt_device), instance_guid_tbt); fu_device_add_child(FU_DEVICE(ec_device), FU_DEVICE(tbt_device)); - if (!fu_plugin_dell_dock_create_node(plugin, FU_DEVICE(tbt_device), error)) + if (!fu_dell_dock_plugin_create_node(plugin, FU_DEVICE(tbt_device), error)) return FALSE; } @@ -123,7 +101,7 @@ fu_plugin_dell_dock_probe(FuPlugin *plugin, FuDevice *proxy, GError **error) /* prefer to use EC if in the transaction and parent if it is not */ static FuDevice * -fu_plugin_dell_dock_get_ec(GPtrArray *devices) +fu_dell_dock_plugin_get_ec(GPtrArray *devices) { FuDevice *ec_parent = NULL; for (gint i = devices->len - 1; i >= 0; i--) { @@ -140,7 +118,7 @@ fu_plugin_dell_dock_get_ec(GPtrArray *devices) } static gboolean -fu_plugin_dell_dock_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_dock_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { g_autoptr(FuDeviceLocker) locker = NULL; g_autoptr(FuDellDockHub) hub = NULL; @@ -161,13 +139,13 @@ fu_plugin_dell_dock_backend_device_added(FuPlugin *plugin, FuDevice *device, GEr /* probe extend devices under Usb3.1 Gen 2 Hub */ if (fu_device_has_private_flag(FU_DEVICE(hub), FU_DELL_DOCK_HUB_FLAG_HAS_BRIDGE)) { - if (!fu_plugin_dell_dock_probe(plugin, FU_DEVICE(hub), error)) + if (!fu_dell_dock_plugin_probe(plugin, FU_DEVICE(hub), error)) return FALSE; } /* process hub devices if ec device is added */ devices = fu_plugin_get_devices(plugin); - ec_device = fu_plugin_dell_dock_get_ec(devices); + ec_device = fu_dell_dock_plugin_get_ec(devices); if (ec_device == NULL) { fu_plugin_cache_add(plugin, hub_cache_key, FU_DEVICE(hub)); return TRUE; @@ -196,7 +174,7 @@ fu_plugin_dell_dock_backend_device_added(FuPlugin *plugin, FuDevice *device, GEr } static void -fu_plugin_dell_dock_separate_activation(FuPlugin *plugin) +fu_dell_dock_plugin_separate_activation(FuPlugin *plugin) { FuDevice *device_ec = fu_plugin_cache_lookup(plugin, "ec"); FuDevice *device_usb4 = fu_plugin_cache_lookup(plugin, "usb4"); @@ -215,7 +193,7 @@ fu_plugin_dell_dock_separate_activation(FuPlugin *plugin) } static void -fu_plugin_dell_dock_device_registered(FuPlugin *plugin, FuDevice *device) +fu_dell_dock_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { /* dell dock delays the activation so skips device restart */ if (fu_device_has_guid(device, DELL_DOCK_TBT_INSTANCE_ID)) { @@ -240,11 +218,11 @@ fu_plugin_dell_dock_device_registered(FuPlugin *plugin, FuDevice *device) } /* online activation is mutually exclusive between usb4 and ec */ - fu_plugin_dell_dock_separate_activation(plugin); + fu_dell_dock_plugin_separate_activation(plugin); } static gboolean -fu_plugin_dell_dock_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_dock_plugin_backend_device_removed(FuPlugin *plugin, FuDevice *device, GError **error) { const gchar *device_key = fu_device_get_id(device); FuDevice *dev; @@ -267,9 +245,9 @@ fu_plugin_dell_dock_backend_device_removed(FuPlugin *plugin, FuDevice *device, G } static gboolean -fu_plugin_dell_dock_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_dell_dock_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error) { - FuDevice *parent = fu_plugin_dell_dock_get_ec(devices); + FuDevice *parent = fu_dell_dock_plugin_get_ec(devices); const gchar *sku; if (parent == NULL) return TRUE; @@ -281,9 +259,9 @@ fu_plugin_dell_dock_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GErr } static gboolean -fu_plugin_dell_dock_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_dell_dock_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error) { - FuDevice *parent = fu_plugin_dell_dock_get_ec(devices); + FuDevice *parent = fu_dell_dock_plugin_get_ec(devices); FuDevice *dev = NULL; g_autoptr(FuDeviceLocker) locker = NULL; gboolean needs_activation = FALSE; @@ -309,7 +287,7 @@ fu_plugin_dell_dock_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GErr } } /* separate activation flag between usb4 and ec device */ - fu_plugin_dell_dock_separate_activation(plugin); + fu_dell_dock_plugin_separate_activation(plugin); locker = fu_device_locker_new(parent, error); if (locker == NULL) @@ -331,15 +309,45 @@ fu_plugin_dell_dock_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GErr return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_dell_dock_plugin_init(FuDellDockPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_dell_dock_load; - 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; +} + +static void +fu_dell_dock_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "DellDockBlobBuildOffset"); + fu_context_add_quirk_key(ctx, "DellDockBlobMajorOffset"); + fu_context_add_quirk_key(ctx, "DellDockBlobMinorOffset"); + fu_context_add_quirk_key(ctx, "DellDockBlobVersionOffset"); + fu_context_add_quirk_key(ctx, "DellDockBoardMin"); + fu_context_add_quirk_key(ctx, "DellDockHubVersionLowest"); + fu_context_add_quirk_key(ctx, "DellDockInstallDurationI2C"); + fu_context_add_quirk_key(ctx, "DellDockUnlockTarget"); + fu_context_add_quirk_key(ctx, "DellDockVersionLowest"); + + /* allow these to be built by quirks */ + fu_plugin_add_device_gtype(plugin, FU_TYPE_DELL_DOCK_STATUS); + fu_plugin_add_device_gtype(plugin, FU_TYPE_DELL_DOCK_MST); + +#ifndef _WIN32 + /* currently slower performance, but more reliable in corner cases */ + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "synaptics_mst"); +#endif +} + +static void +fu_dell_dock_plugin_class_init(FuDellDockPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_dell_dock_plugin_constructed; + plugin_class->device_registered = fu_dell_dock_plugin_device_registered; + plugin_class->backend_device_added = fu_dell_dock_plugin_backend_device_added; + plugin_class->backend_device_removed = fu_dell_dock_plugin_backend_device_removed; + plugin_class->composite_cleanup = fu_dell_dock_plugin_composite_cleanup; + plugin_class->composite_prepare = fu_dell_dock_plugin_composite_prepare; } diff --git a/plugins/dell-dock/fu-dell-dock-plugin.h b/plugins/dell-dock/fu-dell-dock-plugin.h new file mode 100644 index 000000000..0c7eb7785 --- /dev/null +++ b/plugins/dell-dock/fu-dell-dock-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuDellDockPlugin, fu_dell_dock_plugin, FU, DELL_DOCK_PLUGIN, FuPlugin) diff --git a/plugins/dell-dock/meson.build b/plugins/dell-dock/meson.build index 4a100a4de..c2b089656 100644 --- a/plugins/dell-dock/meson.build +++ b/plugins/dell-dock/meson.build @@ -2,11 +2,9 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginDellDock"'] plugin_quirks += files('dell-dock.quirk') - -shared_module('fu_plugin_dell_dock', - fu_hash, +plugin_builtins += static_library('fu_plugin_dell_dock', sources: [ - 'fu-plugin-dell-dock.c', + 'fu-dell-dock-plugin.c', 'fu-dell-dock-common.c', 'fu-dell-dock-hid.c', 'fu-dell-dock-status.c', @@ -15,17 +13,8 @@ shared_module('fu_plugin_dell_dock', 'fu-dell-dock-i2c-tbt.c', 'fu-dell-dock-i2c-mst.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, diff --git a/plugins/dell-esrt/fu-plugin-dell-esrt.c b/plugins/dell-esrt/fu-dell-esrt-plugin.c similarity index 76% rename from plugins/dell-esrt/fu-plugin-dell-esrt.c rename to plugins/dell-esrt/fu-dell-esrt-plugin.c index 58b098886..0e8bfff86 100644 --- a/plugins/dell-esrt/fu-plugin-dell-esrt.c +++ b/plugins/dell-esrt/fu-dell-esrt-plugin.c @@ -7,14 +7,20 @@ #include "config.h" -#include - #include #include #include #include #include +#include "fu-dell-esrt-plugin.h" + +struct _FuDellEsrtPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuDellEsrtPlugin, fu_dell_esrt_plugin, FU_TYPE_PLUGIN) + /* allowed smbios class/select commands */ #define CLASS_ADMIN_PROP 10 #define SELECT_ADMIN_PROP 3 @@ -28,7 +34,7 @@ #define DELL_ADMIN_INSTALLED 0 static gboolean -fu_plugin_dell_esrt_query_token(guint16 token, gboolean *value, GError **error) +fu_dell_esrt_plugin_query_token(guint16 token, gboolean *value, GError **error) { if (!token_is_bool(token)) { g_set_error(error, @@ -45,7 +51,7 @@ fu_plugin_dell_esrt_query_token(guint16 token, gboolean *value, GError **error) } static gboolean -fu_plugin_dell_esrt_activate_token(guint16 token, GError **error) +fu_dell_esrt_plugin_activate_token(guint16 token, GError **error) { token_activate(token); if (token_is_active(token) < 0) { @@ -61,7 +67,7 @@ fu_plugin_dell_esrt_activate_token(guint16 token, GError **error) } static gboolean -fu_plugin_dell_esrt_admin_password_present(gboolean *password_present, GError **error) +fu_dell_esrt_plugin_admin_password_present(gboolean *password_present, GError **error) { guint32 args[4] = { @@ -87,14 +93,8 @@ fu_plugin_dell_esrt_admin_password_present(gboolean *password_present, GError ** return TRUE; } -static void -fu_plugin_dell_esrt_init(FuPlugin *plugin) -{ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "bios"); -} - static gboolean -fu_plugin_dell_esrt_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_dell_esrt_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { gboolean capsule_disable = FALSE; g_autofree gchar *sysfsfwdir = NULL; @@ -112,11 +112,11 @@ fu_plugin_dell_esrt_startup(FuPlugin *plugin, FuProgress *progress, GError **err } /* is the capsule functionality disabled */ - if (!fu_plugin_dell_esrt_query_token(CAPSULE_DIS_TOKEN, &capsule_disable, error)) + if (!fu_dell_esrt_plugin_query_token(CAPSULE_DIS_TOKEN, &capsule_disable, error)) return FALSE; if (!capsule_disable) { gboolean capsule_enable = FALSE; - if (!fu_plugin_dell_esrt_query_token(CAPSULE_EN_TOKEN, &capsule_enable, error)) + if (!fu_dell_esrt_plugin_query_token(CAPSULE_EN_TOKEN, &capsule_enable, error)) return FALSE; if (capsule_enable) { g_set_error_literal(error, @@ -131,11 +131,11 @@ fu_plugin_dell_esrt_startup(FuPlugin *plugin, FuProgress *progress, GError **err } static gboolean -fu_plugin_dell_esrt_unlock(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_esrt_plugin_unlock(FuPlugin *plugin, FuDevice *device, GError **error) { gboolean password_present = FALSE; /* check the admin password isn't set */ - if (!fu_plugin_dell_esrt_admin_password_present(&password_present, error)) + if (!fu_dell_esrt_plugin_admin_password_present(&password_present, error)) return FALSE; if (password_present) { const gchar *err_string = "Cannot be unlocked automatically as admin password set"; @@ -145,9 +145,9 @@ fu_plugin_dell_esrt_unlock(FuPlugin *plugin, FuDevice *device, GError **error) } /* disabled in BIOS, but supported to be enabled via tool */ - if (!fu_plugin_dell_esrt_query_token(CAPSULE_EN_TOKEN, NULL, error)) + if (!fu_dell_esrt_plugin_query_token(CAPSULE_EN_TOKEN, NULL, error)) return FALSE; - if (!fu_plugin_dell_esrt_activate_token(CAPSULE_EN_TOKEN, error)) + if (!fu_dell_esrt_plugin_activate_token(CAPSULE_EN_TOKEN, error)) return FALSE; fu_device_set_update_error(device, NULL); @@ -155,7 +155,7 @@ fu_plugin_dell_esrt_unlock(FuPlugin *plugin, FuDevice *device, GError **error) } static gboolean -fu_plugin_dell_esrt_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_dell_esrt_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { g_autoptr(FuDevice) dev = fu_device_new(NULL); @@ -179,12 +179,17 @@ fu_plugin_dell_esrt_coldplug(FuPlugin *plugin, FuProgress *progress, GError **er return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_dell_esrt_plugin_init(FuDellEsrtPlugin *self) { - 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; + fu_plugin_add_rule(FU_PLUGIN(self), FU_PLUGIN_RULE_BETTER_THAN, "bios"); +} + +static void +fu_dell_esrt_plugin_class_init(FuDellEsrtPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->startup = fu_dell_esrt_plugin_startup; + plugin_class->coldplug = fu_dell_esrt_plugin_coldplug; + plugin_class->unlock = fu_dell_esrt_plugin_unlock; } diff --git a/plugins/dell-esrt/fu-dell-esrt-plugin.h b/plugins/dell-esrt/fu-dell-esrt-plugin.h new file mode 100644 index 000000000..4ed82d10f --- /dev/null +++ b/plugins/dell-esrt/fu-dell-esrt-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuDellEsrtPlugin, fu_dell_esrt_plugin, FU, DELL_ESRT_PLUGIN, FuPlugin) diff --git a/plugins/dell-esrt/meson.build b/plugins/dell-esrt/meson.build index 67bd3b9d9..88c039f85 100644 --- a/plugins/dell-esrt/meson.build +++ b/plugins/dell-esrt/meson.build @@ -4,26 +4,15 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginDellEsrt"'] install_data(['metadata.xml'], install_dir: join_paths(datadir, 'fwupd', 'remotes.d', 'dell-esrt') ) - -shared_module('fu_plugin_dell_esrt', - fu_hash, +plugin_builtins += static_library('fu_plugin_dell_esrt', sources: [ - 'fu-plugin-dell-esrt.c', + 'fu-dell-esrt-plugin.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, ], - link_with: [ - fwupd, - fwupdplugin, - ], + link_with: plugin_libs, dependencies: [ plugin_deps, libsmbios_c, diff --git a/plugins/dell/fu-plugin-dell.c b/plugins/dell/fu-dell-plugin.c similarity index 86% rename from plugins/dell/fu-plugin-dell.c rename to plugins/dell/fu-dell-plugin.c index e643aa7b7..9f88ee1b9 100644 --- a/plugins/dell/fu-plugin-dell.c +++ b/plugins/dell/fu-dell-plugin.c @@ -7,8 +7,6 @@ #include "config.h" -#include - #include #include #include @@ -16,8 +14,20 @@ #include #include +#include "fu-dell-plugin.h" #include "fu-plugin-dell.h" +struct _FuDellPlugin { + FuPlugin parent_instance; + FuDellSmiObj *smi_obj; + guint16 fake_vid; + guint16 fake_pid; + gboolean can_switch_modes; + gboolean capsule_supported; +}; + +G_DEFINE_TYPE(FuDellPlugin, fu_dell_plugin, FU_TYPE_PLUGIN) + /* These are used to indicate the status of a previous DELL flash */ #define DELL_SUCCESS 0x0000 #define DELL_CONSISTENCY_FAIL 0x0001 @@ -112,14 +122,14 @@ static guint8 enclosure_allowlist[] = {0x03, /* desktop */ static guint16 fu_dell_get_system_id(FuPlugin *plugin) { + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); const gchar *system_id_str = NULL; guint16 system_id = 0; gchar *endptr = NULL; /* don't care for test suite */ - if (priv->smi_obj->fake_smbios) + if (self->smi_obj->fake_smbios) return 0; system_id_str = fu_context_get_hwid_value(ctx, FU_HWIDS_KEY_PRODUCT_SKU); @@ -179,7 +189,7 @@ fu_dell_supported(FuPlugin *plugin) } static gboolean -fu_plugin_dell_match_dock_component(const gchar *query_str, +fu_dell_plugin_match_dock_component(const gchar *query_str, const gchar **guid_out, const gchar **name_out) { @@ -207,31 +217,29 @@ fu_plugin_dell_match_dock_component(const gchar *query_str, } void -fu_plugin_dell_inject_fake_data(FuPlugin *plugin, +fu_dell_plugin_inject_fake_data(FuPlugin *plugin, guint32 *output, guint16 vid, guint16 pid, guint8 *buf, gboolean can_switch_modes) { - FuPluginData *priv = fu_plugin_get_data(plugin); - - if (!priv->smi_obj->fake_smbios) + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); + if (!self->smi_obj->fake_smbios) return; for (guint i = 0; i < 4; i++) - priv->smi_obj->output[i] = output[i]; - priv->fake_vid = vid; - priv->fake_pid = pid; - priv->smi_obj->fake_buffer = buf; - priv->can_switch_modes = TRUE; + self->smi_obj->output[i] = output[i]; + self->fake_vid = vid; + self->fake_pid = pid; + self->smi_obj->fake_buffer = buf; + self->can_switch_modes = TRUE; } static gboolean -fu_plugin_dell_capsule_supported(FuPlugin *plugin) +fu_dell_plugin_capsule_supported(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); - - return priv->smi_obj->fake_smbios || priv->capsule_supported; + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); + return self->smi_obj->fake_smbios || self->capsule_supported; } static gboolean @@ -278,7 +286,7 @@ fu_plugin_dock_node(FuPlugin *plugin, fu_device_set_version_format(dev, version_format); if (version != NULL) { fu_device_set_version(dev, version); - if (fu_plugin_dell_capsule_supported(plugin)) { + if (fu_dell_plugin_capsule_supported(plugin)) { fu_device_add_flag(dev, FWUPD_DEVICE_FLAG_UPDATABLE); fu_device_add_flag(dev, FWUPD_DEVICE_FLAG_NEEDS_REBOOT); } @@ -289,9 +297,9 @@ fu_plugin_dock_node(FuPlugin *plugin, } gboolean -fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); FwupdVersionFormat version_format = FWUPD_VERSION_FORMAT_DELL_BIOS; guint16 pid; guint16 vid; @@ -315,13 +323,13 @@ fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError * /* don't look up immediately if a dock is connected as that would mean a SMI on every USB device that showed up on the system */ - if (!priv->smi_obj->fake_smbios) { + if (!self->smi_obj->fake_smbios) { vid = fu_usb_device_get_vid(FU_USB_DEVICE(device)); pid = fu_usb_device_get_pid(FU_USB_DEVICE(device)); platform = fu_device_get_physical_id(FU_DEVICE(device)); } else { - vid = priv->fake_vid; - pid = priv->fake_pid; + vid = self->fake_vid; + pid = self->fake_pid; platform = "fake"; } @@ -337,7 +345,7 @@ fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError * } buf.buf = NULL; - if (!fu_dell_query_dock(priv->smi_obj, &buf)) { + if (!fu_dell_query_dock(self->smi_obj, &buf)) { g_debug("no dock detected"); return TRUE; } @@ -382,7 +390,7 @@ fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError * "invalid dock component request"); return FALSE; } - if (!fu_plugin_dell_match_dock_component(query_str + 6, + if (!fu_dell_plugin_match_dock_component(query_str + 6, &component_guid, &component_name)) { g_set_error(error, @@ -451,7 +459,7 @@ fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError * } static gboolean -fu_plugin_dell_get_results(FuPlugin *plugin, FuDevice *device, GError **error) +fu_dell_plugin_get_results(FuPlugin *plugin, FuDevice *device, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); g_autoptr(GBytes) de_table = NULL; @@ -545,7 +553,7 @@ Esys_Finalize_autoptr_cleanup(ESYS_CONTEXT *esys_context) G_DEFINE_AUTOPTR_CLEANUP_FUNC(ESYS_CONTEXT, Esys_Finalize_autoptr_cleanup) static gchar * -fu_plugin_dell_get_tpm_capability(ESYS_CONTEXT *ctx, guint32 query) +fu_dell_plugin_get_tpm_capability(ESYS_CONTEXT *ctx, guint32 query) { TSS2_RC rc; guint32 val; @@ -588,7 +596,7 @@ fu_plugin_dell_get_tpm_capability(ESYS_CONTEXT *ctx, guint32 query) } static gboolean -fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) +fu_dell_plugin_add_tpm_model(FuDevice *dev, GError **error) { TSS2_RC rc; const gchar *base = "DELL-TPM"; @@ -622,7 +630,7 @@ fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) } /* lookup guaranteed details from TPM */ - family = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_FAMILY_INDICATOR); + family = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_FAMILY_INDICATOR); if (family == NULL) { g_set_error_literal(error, G_IO_ERROR, @@ -630,7 +638,7 @@ fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) "failed to read TPM family"); return FALSE; } - manufacturer = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_MANUFACTURER); + manufacturer = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_MANUFACTURER); if (manufacturer == NULL) { g_set_error_literal(error, G_IO_ERROR, @@ -638,7 +646,7 @@ fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) "failed to read TPM manufacturer"); return FALSE; } - vendor1 = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_1); + vendor1 = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_1); if (vendor1 == NULL) { g_set_error_literal(error, G_IO_ERROR, @@ -649,9 +657,9 @@ fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) fu_device_set_metadata(dev, "TpmFamily", family); /* these are not guaranteed by spec and may be NULL */ - vendor2 = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_2); - vendor3 = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_3); - vendor4 = fu_plugin_dell_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_4); + vendor2 = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_2); + vendor3 = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_3); + vendor4 = fu_dell_plugin_get_tpm_capability(ctx, TPM2_PT_VENDOR_STRING_4); /* add GUIDs to daemon */ v1 = g_strjoin("-", base, family, manufacturer, vendor1, NULL); @@ -667,10 +675,10 @@ fu_plugin_dell_add_tpm_model(FuDevice *dev, GError **error) } gboolean -fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) +fu_dell_plugin_detect_tpm(FuPlugin *plugin, GError **error) { + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); const gchar *tpm_mode; const gchar *tpm_mode_alt; guint16 system_id = 0; @@ -688,12 +696,12 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) g_autoptr(FuDevice) dev = NULL; g_autoptr(GError) error_tss = NULL; - fu_dell_clear_smi(priv->smi_obj); - out = (struct tpm_status *)priv->smi_obj->output; + fu_dell_clear_smi(self->smi_obj); + out = (struct tpm_status *)self->smi_obj->output; /* execute TPM Status Query */ - priv->smi_obj->input[0] = DACI_FLASH_ARG_TPM; - if (!fu_dell_execute_simple_smi(priv->smi_obj, + self->smi_obj->input[0] = DACI_FLASH_ARG_TPM; + if (!fu_dell_execute_simple_smi(self->smi_obj, DACI_FLASH_INTERFACE_CLASS, DACI_FLASH_INTERFACE_SELECT)) return FALSE; @@ -707,7 +715,7 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) /* HW version is output in second /input/ arg * it may be relevant as next gen TPM is enabled */ - g_debug("TPM HW version: 0x%x", priv->smi_obj->input[1]); + g_debug("TPM HW version: 0x%x", self->smi_obj->input[1]); g_debug("TPM Status: 0x%x", out->status); /* test TPM enabled (Bit 0) */ @@ -729,8 +737,8 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) } system_id = fu_dell_get_system_id(plugin); - if (priv->smi_obj->fake_smbios) - can_switch_modes = priv->can_switch_modes; + if (self->smi_obj->fake_smbios) + can_switch_modes = self->can_switch_modes; else if (system_id == 0) return FALSE; @@ -773,7 +781,7 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) fu_device_add_icon(dev, "computer"); fu_device_set_metadata(dev, FU_DEVICE_METADATA_UEFI_DEVICE_KIND, "dell-tpm-firmware"); if ((out->status & TPM_OWN_MASK) == 0 && out->flashes_left > 0) { - if (fu_plugin_dell_capsule_supported(plugin)) { + if (fu_dell_plugin_capsule_supported(plugin)) { fu_device_add_flag(dev, FWUPD_DEVICE_FLAG_UPDATABLE); fu_device_add_flag(dev, FWUPD_DEVICE_FLAG_NEEDS_REBOOT); } @@ -782,7 +790,7 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) fu_device_set_update_error(dev, "Updating disabled due to TPM ownership"); } /* build GUIDs from TSS strings */ - if (!fu_plugin_dell_add_tpm_model(dev, &error_tss)) + if (!fu_dell_plugin_add_tpm_model(dev, &error_tss)) g_debug("could not build instances: %s", error_tss->message); if (!fu_device_setup(dev, error)) @@ -832,7 +840,7 @@ fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error) } static void -fu_plugin_dell_device_registered(FuPlugin *plugin, FuDevice *device) +fu_dell_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { /* thunderbolt plugin */ if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") == 0 && @@ -857,65 +865,21 @@ fu_plugin_dell_device_registered(FuPlugin *plugin, FuDevice *device) } static void -fu_plugin_dell_load(FuContext *ctx) +fu_dell_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - g_autofree gchar *tmp = NULL; - - tmp = g_strdup_printf("%d.%d", - smbios_get_library_version_major(), - smbios_get_library_version_minor()); - fu_context_add_runtime_version(ctx, "com.dell.libsmbios", tmp); - g_debug("Using libsmbios %s", tmp); -} - -static void -fu_plugin_dell_init(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - - priv->smi_obj = g_malloc0(sizeof(FuDellSmiObj)); - if (g_getenv("FWUPD_DELL_VERBOSE") != NULL) - (void)g_setenv("LIBSMBIOS_C_DEBUG_OUTPUT_ALL", "1", TRUE); - else - (void)g_setenv("TSS2_LOG", "esys+none,tcti+none", FALSE); - if (fu_dell_supported(plugin)) - priv->smi_obj->smi = dell_smi_factory(DELL_SMI_DEFAULTS); - priv->smi_obj->fake_smbios = FALSE; - if (g_getenv("FWUPD_DELL_FAKE_SMBIOS") != NULL) - priv->smi_obj->fake_smbios = TRUE; - - /* make sure that UEFI plugin is ready to receive devices */ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "uefi_capsule"); - - /* our TPM device is upgradable! */ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "tpm"); -} - -static void -fu_plugin_dell_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_kb(str, idt, "CanSwitchModes", priv->can_switch_modes); - fu_string_append_kb(str, idt, "CapsuleSupported", priv->capsule_supported); -} - -static void -fu_plugin_dell_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->smi_obj->smi) - dell_smi_obj_free(priv->smi_obj->smi); - g_free(priv->smi_obj); + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); + fu_string_append_kb(str, idt, "CanSwitchModes", self->can_switch_modes); + fu_string_append_kb(str, idt, "CapsuleSupported", self->capsule_supported); } static gboolean -fu_plugin_dell_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_dell_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); g_autofree gchar *sysfsfwdir = NULL; g_autofree gchar *esrtdir = NULL; - if (priv->smi_obj->fake_smbios) { + if (self->smi_obj->fake_smbios) { g_debug("Called with fake SMBIOS implementation. " "We're ignoring test for SBMIOS table and ESRT. " "Individual calls will need to be properly staged."); @@ -930,7 +894,7 @@ fu_plugin_dell_startup(FuPlugin *plugin, FuProgress *progress, GError **error) return FALSE; } - if (priv->smi_obj->smi == NULL) { + if (self->smi_obj->smi == NULL) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, @@ -946,10 +910,10 @@ fu_plugin_dell_startup(FuPlugin *plugin, FuProgress *progress, GError **error) sysfsfwdir = fu_path_from_kind(FU_PATH_KIND_SYSFSDIR_FW); esrtdir = g_build_filename(sysfsfwdir, "efi", "esrt", NULL); if (g_file_test(esrtdir, G_FILE_TEST_EXISTS)) - priv->capsule_supported = TRUE; + self->capsule_supported = TRUE; /* capsules not supported */ - if (!fu_plugin_dell_capsule_supported(plugin)) { + if (!fu_dell_plugin_capsule_supported(plugin)) { fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_USER_WARNING); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_CLEAR_UPDATABLE); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_CAPSULES_UNSUPPORTED); @@ -959,25 +923,73 @@ fu_plugin_dell_startup(FuPlugin *plugin, FuProgress *progress, GError **error) } static gboolean -fu_plugin_dell_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_dell_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { /* look for switchable TPM */ - if (!fu_plugin_dell_detect_tpm(plugin, error)) + if (!fu_dell_plugin_detect_tpm(plugin, error)) g_debug("No switchable TPM detected"); return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_dell_plugin_init(FuDellPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_dell_load; - vfuncs->init = fu_plugin_dell_init; - vfuncs->destroy = fu_plugin_dell_destroy; - vfuncs->to_string = fu_plugin_dell_to_string; - 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; + self->smi_obj = g_malloc0(sizeof(FuDellSmiObj)); + if (g_getenv("FWUPD_DELL_VERBOSE") != NULL) + (void)g_setenv("LIBSMBIOS_C_DEBUG_OUTPUT_ALL", "1", TRUE); + else + (void)g_setenv("TSS2_LOG", "esys+none,tcti+none", FALSE); +} + +static void +fu_dell_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + FuDellPlugin *self = FU_DELL_PLUGIN(plugin); + g_autofree gchar *tmp = NULL; + + tmp = g_strdup_printf("%d.%d", + smbios_get_library_version_major(), + smbios_get_library_version_minor()); + fu_context_add_runtime_version(ctx, "com.dell.libsmbios", tmp); + g_debug("Using libsmbios %s", tmp); + + if (fu_dell_supported(plugin)) + self->smi_obj->smi = dell_smi_factory(DELL_SMI_DEFAULTS); + self->smi_obj->fake_smbios = FALSE; + if (g_getenv("FWUPD_DELL_FAKE_SMBIOS") != NULL) + self->smi_obj->fake_smbios = TRUE; + + /* make sure that UEFI plugin is ready to receive devices */ + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "uefi_capsule"); + + /* our TPM device is upgradable! */ + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_BETTER_THAN, "tpm"); +} + +static void +fu_dell_finalize(GObject *obj) +{ + FuDellPlugin *self = FU_DELL_PLUGIN(obj); + if (self->smi_obj->smi) + dell_smi_obj_free(self->smi_obj->smi); + g_free(self->smi_obj); + G_OBJECT_CLASS(fu_dell_plugin_parent_class)->finalize(obj); +} + +static void +fu_dell_plugin_class_init(FuDellPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_dell_plugin_constructed; + object_class->finalize = fu_dell_finalize; + plugin_class->to_string = fu_dell_plugin_to_string; + plugin_class->startup = fu_dell_plugin_startup; + plugin_class->coldplug = fu_dell_plugin_coldplug; + plugin_class->backend_device_added = fu_dell_plugin_backend_device_added; + plugin_class->device_registered = fu_dell_plugin_device_registered; + plugin_class->get_results = fu_dell_plugin_get_results; } diff --git a/plugins/dell/fu-dell-plugin.h b/plugins/dell/fu-dell-plugin.h new file mode 100644 index 000000000..605b0eb8f --- /dev/null +++ b/plugins/dell/fu-dell-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuDellPlugin, fu_dell_plugin, FU, DELL_PLUGIN, FuPlugin) diff --git a/plugins/dell/fu-plugin-dell.h b/plugins/dell/fu-plugin-dell.h index 4e62218d4..a3f839ba7 100644 --- a/plugins/dell/fu-plugin-dell.h +++ b/plugins/dell/fu-plugin-dell.h @@ -10,16 +10,8 @@ #include "fu-dell-smi.h" -struct FuPluginData { - FuDellSmiObj *smi_obj; - guint16 fake_vid; - guint16 fake_pid; - gboolean can_switch_modes; - gboolean capsule_supported; -}; - void -fu_plugin_dell_inject_fake_data(FuPlugin *plugin, +fu_dell_plugin_inject_fake_data(FuPlugin *plugin, guint32 *output, guint16 vid, guint16 pid, @@ -27,9 +19,9 @@ fu_plugin_dell_inject_fake_data(FuPlugin *plugin, gboolean can_switch_modes); gboolean -fu_plugin_dell_detect_tpm(FuPlugin *plugin, GError **error); +fu_dell_plugin_detect_tpm(FuPlugin *plugin, GError **error); gboolean -fu_plugin_dell_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error); +fu_dell_plugin_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 9e60d8484..3306abb01 100644 --- a/plugins/dell/fu-self-test.c +++ b/plugins/dell/fu-self-test.c @@ -11,7 +11,9 @@ #include #include +#include "../uefi-capsule/fu-uefi-capsule-plugin.h" #include "fu-context-private.h" +#include "fu-dell-plugin.h" #include "fu-device-private.h" #include "fu-plugin-dell.h" #include "fu-plugin-private.h" @@ -66,7 +68,7 @@ fu_engine_plugin_device_register_cb(FuPlugin *plugin_dell, FuDevice *device, gpo } static void -fu_plugin_dell_tpm_func(gconstpointer user_data) +fu_dell_plugin_tpm_func(gconstpointer user_data) { FuTest *self = (FuTest *)user_data; FuDevice *device_v12; @@ -108,8 +110,8 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) /* inject fake data (no TPM) */ tpm_out.ret = -2; - fu_plugin_dell_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, FALSE); - ret = fu_plugin_dell_detect_tpm(self->plugin_dell, &error); + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, FALSE); + ret = fu_dell_plugin_detect_tpm(self->plugin_dell, &error); g_assert_no_error(error); g_assert_false(ret); g_assert_cmpint(devices->len, ==, 0); @@ -124,8 +126,8 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) tpm_out.fw_version = 0; tpm_out.status = TPM_EN_MASK | (TPM_1_2_MODE << 8); tpm_out.flashes_left = 0; - fu_plugin_dell_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); - ret = fu_plugin_dell_detect_tpm(self->plugin_dell, &error); + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); + ret = fu_dell_plugin_detect_tpm(self->plugin_dell, &error); g_assert_true(ret); g_assert_cmpint(devices->len, ==, 2); @@ -156,8 +158,8 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) */ tpm_out.status = TPM_EN_MASK | TPM_OWN_MASK | (TPM_1_2_MODE << 8); tpm_out.flashes_left = 125; - fu_plugin_dell_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); - ret = fu_plugin_dell_detect_tpm(self->plugin_dell, &error); + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); + ret = fu_dell_plugin_detect_tpm(self->plugin_dell, &error); g_assert_no_error(error); g_assert_true(ret); @@ -185,8 +187,8 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) */ tpm_out.status = TPM_EN_MASK | (TPM_1_2_MODE << 8); tpm_out.flashes_left = 125; - fu_plugin_dell_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); - ret = fu_plugin_dell_detect_tpm(self->plugin_dell, &error); + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); + ret = fu_dell_plugin_detect_tpm(self->plugin_dell, &error); g_assert_no_error(error); g_assert_true(ret); @@ -218,8 +220,8 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) */ tpm_out.status = TPM_EN_MASK | (TPM_2_0_MODE << 8); tpm_out.flashes_left = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); - ret = fu_plugin_dell_detect_tpm(self->plugin_dell, &error); + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&tpm_out, 0, 0, NULL, TRUE); + ret = fu_dell_plugin_detect_tpm(self->plugin_dell, &error); g_assert_no_error(error); g_assert_true(ret); @@ -264,7 +266,7 @@ fu_plugin_dell_tpm_func(gconstpointer user_data) } static void -fu_plugin_dell_dock_func(gconstpointer user_data) +fu_dell_plugin_dock_func(gconstpointer user_data) { FuTest *self = (FuTest *)user_data; gboolean ret; @@ -289,13 +291,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) self->plugin_uefi_capsule); /* make sure bad device doesn't trigger this */ - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, 0x1234, 0x4321, NULL, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error); g_assert_false(ret); @@ -305,13 +307,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) /* inject a USB receiver matching correct VID/PID */ out[0] = 0; out[1] = 0; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, NULL, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error); g_assert_true(ret); @@ -342,13 +344,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) 44); out[0] = 0; out[1] = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, buf.buf, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), NULL); g_assert_true(ret); @@ -380,13 +382,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) 44); out[0] = 0; out[1] = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, buf.buf, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), NULL); g_assert_true(ret); @@ -416,13 +418,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) 43); out[0] = 0; out[1] = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, buf.buf, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error); g_assert_no_error(error); @@ -453,13 +455,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) 43); out[0] = 0; out[1] = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, buf.buf, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error); g_assert_no_error(error); @@ -484,13 +486,13 @@ fu_plugin_dell_dock_func(gconstpointer user_data) 43); out[0] = 0; out[1] = 1; - fu_plugin_dell_inject_fake_data(self->plugin_dell, + fu_dell_plugin_inject_fake_data(self->plugin_dell, (guint32 *)&out, DOCK_NIC_VID, DOCK_NIC_PID, buf.buf, FALSE); - ret = fu_plugin_dell_backend_device_added(self->plugin_dell, + ret = fu_dell_plugin_backend_device_added(self->plugin_dell, FU_DEVICE(fake_usb_device), &error); g_assert_false(ret); @@ -509,33 +511,19 @@ fu_test_self_init(FuTest *self) g_autoptr(FuContext) ctx = fu_context_new(); g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(GError) error = NULL; - g_autofree gchar *pluginfn_uefi = NULL; - g_autofree gchar *pluginfn_dell = NULL; /* do not save silo */ ret = fu_context_load_quirks(ctx, FU_QUIRKS_LOAD_FLAG_NO_CACHE, &error); g_assert_no_error(error); g_assert_true(ret); - self->plugin_uefi_capsule = fu_plugin_new(ctx); - pluginfn_uefi = g_test_build_filename(G_TEST_BUILT, - "..", - "uefi-capsule", - "libfu_plugin_uefi_capsule." G_MODULE_SUFFIX, - NULL); - ret = fu_plugin_open(self->plugin_uefi_capsule, pluginfn_uefi, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin_uefi_capsule = + fu_plugin_new_from_gtype(fu_uefi_capsule_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(self->plugin_uefi_capsule, progress, &error); g_assert_no_error(error); g_assert_true(ret); - self->plugin_dell = fu_plugin_new(ctx); - pluginfn_dell = - g_test_build_filename(G_TEST_BUILT, "libfu_plugin_dell." G_MODULE_SUFFIX, NULL); - ret = fu_plugin_open(self->plugin_dell, pluginfn_dell, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin_dell = fu_plugin_new_from_gtype(fu_dell_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(self->plugin_dell, progress, &error); g_assert_no_error(error); g_assert_true(ret); @@ -583,7 +571,7 @@ main(int argc, char **argv) /* tests go here */ fu_test_self_init(self); - g_test_add_data_func("/fwupd/plugin{dell:tpm}", self, fu_plugin_dell_tpm_func); - g_test_add_data_func("/fwupd/plugin{dell:dock}", self, fu_plugin_dell_dock_func); + g_test_add_data_func("/fwupd/plugin{dell:tpm}", self, fu_dell_plugin_tpm_func); + g_test_add_data_func("/fwupd/plugin{dell:dock}", self, fu_dell_plugin_dock_func); return g_test_run(); } diff --git a/plugins/dell/meson.build b/plugins/dell/meson.build index 9ad1a914e..0bf27c6b1 100644 --- a/plugins/dell/meson.build +++ b/plugins/dell/meson.build @@ -9,23 +9,13 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginDell"'] plugin_quirks += files('dell.quirk') -shared_module('fu_plugin_dell', - fu_hash, +plugin_builtin_dell = static_library('fu_plugin_dell', sources: [ - 'fu-plugin-dell.c', + 'fu-dell-plugin.c', 'fu-dell-smi.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: [ cargs, ], @@ -35,6 +25,7 @@ shared_module('fu_plugin_dell', tpm2tss_dell, ], ) +plugin_builtins += plugin_builtin_dell if get_option('tests') env = environment() @@ -43,17 +34,10 @@ if get_option('tests') env.set('FWUPD_LOCALSTATEDIR', '/tmp/fwupd-self-test/var') e = executable( 'dell-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-dell-smi.c', - 'fu-plugin-dell.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, libsmbios_c, @@ -61,8 +45,9 @@ if get_option('tests') tpm2tss_dell, ], link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_uefi_capsule, + plugin_builtin_dell, ], c_args: [ cargs, diff --git a/plugins/dfu-csr/fu-dfu-csr-plugin.c b/plugins/dfu-csr/fu-dfu-csr-plugin.c new file mode 100644 index 000000000..dc990c280 --- /dev/null +++ b/plugins/dfu-csr/fu-dfu-csr-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2017 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-dfu-csr-device.h" +#include "fu-dfu-csr-plugin.h" + +struct _FuDfuCsrPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuDfuCsrPlugin, fu_dfu_csr_plugin, FU_TYPE_PLUGIN) + +static void +fu_dfu_csr_plugin_init(FuDfuCsrPlugin *self) +{ +} + +static void +fu_dfu_csr_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_DFU_CSR_DEVICE); +} + +static void +fu_dfu_csr_plugin_class_init(FuDfuCsrPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_dfu_csr_plugin_constructed; +} diff --git a/plugins/dfu-csr/fu-dfu-csr-plugin.h b/plugins/dfu-csr/fu-dfu-csr-plugin.h new file mode 100644 index 000000000..0fcee899d --- /dev/null +++ b/plugins/dfu-csr/fu-dfu-csr-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuDfuCsrPlugin, fu_dfu_csr_plugin, FU, DFU_CSR_PLUGIN, FuPlugin) diff --git a/plugins/dfu-csr/fu-plugin-dfu-csr.c b/plugins/dfu-csr/fu-plugin-dfu-csr.c deleted file mode 100644 index 842e67302..000000000 --- a/plugins/dfu-csr/fu-plugin-dfu-csr.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2017 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-dfu-csr-device.h" - -static void -fu_plugin_dfu_csr_init(FuPlugin *plugin) -{ - 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-csr/meson.build b/plugins/dfu-csr/meson.build index f50769c86..5c65b3364 100644 --- a/plugins/dfu-csr/meson.build +++ b/plugins/dfu-csr/meson.build @@ -2,12 +2,10 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginDfuCsr"'] plugin_quirks += files('dfu-csr.quirk') - -shared_module('fu_plugin_dfu_csr', - fu_hash, +plugin_builtins += static_library('fu_plugin_dfu_csr', sources: [ 'fu-dfu-csr-device.c', - 'fu-plugin-dfu-csr.c', + 'fu-dfu-csr-plugin.c', ], include_directories: [ root_incdir, @@ -15,15 +13,11 @@ shared_module('fu_plugin_dfu_csr', fwupdplugin_incdir, plugindfu_incdir, ], - install: true, - install_dir: plugin_dir, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, link_with: [ fwupdplugin, - dfu, + plugin_builtin_dfu, ], ) endif diff --git a/plugins/dfu/fu-dfu-plugin.c b/plugins/dfu/fu-dfu-plugin.c new file mode 100644 index 000000000..1b199f96f --- /dev/null +++ b/plugins/dfu/fu-dfu-plugin.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2016 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-dfu-device.h" +#include "fu-dfu-plugin.h" + +struct _FuDfuPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuDfuPlugin, fu_dfu_plugin, FU_TYPE_PLUGIN) + +static void +fu_dfu_plugin_init(FuDfuPlugin *self) +{ +} + +static void +fu_dfu_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "DfuAltName"); + fu_context_add_quirk_key(ctx, "DfuForceTimeout"); + fu_context_add_quirk_key(ctx, "DfuForceVersion"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_DFU_DEVICE); +} + +static void +fu_dfu_plugin_class_init(FuDfuPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_dfu_plugin_constructed; +} diff --git a/plugins/dfu/fu-dfu-plugin.h b/plugins/dfu/fu-dfu-plugin.h new file mode 100644 index 000000000..92b3399ee --- /dev/null +++ b/plugins/dfu/fu-dfu-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuDfuPlugin, fu_dfu_plugin, FU, DFU_PLUGIN, FuPlugin) diff --git a/plugins/dfu/fu-plugin-dfu.c b/plugins/dfu/fu-plugin-dfu.c deleted file mode 100644 index 00cc4e1e0..000000000 --- a/plugins/dfu/fu-plugin-dfu.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2016 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-dfu-device.h" - -static void -fu_plugin_dfu_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_DFU_DEVICE); -} - -static void -fu_plugin_dfu_load(FuContext *ctx) -{ - 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->load = fu_plugin_dfu_load; - vfuncs->init = fu_plugin_dfu_init; -} diff --git a/plugins/dfu/meson.build b/plugins/dfu/meson.build index 459d92a9e..d6e31faf5 100644 --- a/plugins/dfu/meson.build +++ b/plugins/dfu/meson.build @@ -3,10 +3,9 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginDfu"'] plugin_quirks += files('dfu.quirk') -dfu = static_library( - 'dfu', - fu_hash, +plugin_builtin_dfu = static_library('fu_plugin_dfu', sources: [ + 'fu-dfu-plugin.c', 'fu-dfu-common.c', 'fu-dfu-device.c', 'fu-dfu-sector.c', @@ -14,63 +13,26 @@ dfu = static_library( 'fu-dfu-target-stm.c', 'fu-dfu-target-avr.c', ], - dependencies: [ - plugin_deps, - libm, - ], - link_with: [ - fwupd, - fwupdplugin, - ], - c_args: cargs, - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], -) - -shared_module('fu_plugin_dfu', - fu_hash, - sources: [ - 'fu-plugin-dfu.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, dependencies: [ plugin_deps, libm, ], - link_with: [ - fwupd, - fwupdplugin, - dfu, - ], + link_with: plugin_libs, ) +plugin_builtins += plugin_builtin_dfu if get_option('compat_cli') fu_dfu_tool = executable( 'dfu-tool', - fu_hash, sources: [ 'fu-dfu-tool.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, - ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - dfu, + plugin_builtin_dfu, fwupd, fwupdplugin, ], @@ -96,23 +58,17 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'fu-dfu-self-test', - fu_hash, sources: [ 'fu-dfu-self-test.c' ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, libm, ], link_with: [ - dfu, - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_dfu, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/ebitdo/fu-ebitdo-plugin.c b/plugins/ebitdo/fu-ebitdo-plugin.c new file mode 100644 index 000000000..7e071ca12 --- /dev/null +++ b/plugins/ebitdo/fu-ebitdo-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2016 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-ebitdo-device.h" +#include "fu-ebitdo-firmware.h" +#include "fu-ebitdo-plugin.h" + +struct _FuEbitdoPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuEbitdoPlugin, fu_ebitdo_plugin, FU_TYPE_PLUGIN) + +static void +fu_ebitdo_plugin_init(FuEbitdoPlugin *self) +{ +} + +static void +fu_ebitdo_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_EBITDO_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EBITDO_FIRMWARE); +} + +static void +fu_ebitdo_plugin_class_init(FuEbitdoPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_ebitdo_plugin_constructed; +} diff --git a/plugins/ebitdo/fu-ebitdo-plugin.h b/plugins/ebitdo/fu-ebitdo-plugin.h new file mode 100644 index 000000000..6c6244bbc --- /dev/null +++ b/plugins/ebitdo/fu-ebitdo-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuEbitdoPlugin, fu_ebitdo_plugin, FU, EBITDO_PLUGIN, FuPlugin) diff --git a/plugins/ebitdo/fu-plugin-ebitdo.c b/plugins/ebitdo/fu-plugin-ebitdo.c deleted file mode 100644 index 5c57672c8..000000000 --- a/plugins/ebitdo/fu-plugin-ebitdo.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2016 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-ebitdo-device.h" -#include "fu-ebitdo-firmware.h" - -static void -fu_plugin_ebitdo_init(FuPlugin *plugin) -{ - 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/ebitdo/meson.build b/plugins/ebitdo/meson.build index c32cf1c89..de65a50a9 100644 --- a/plugins/ebitdo/meson.build +++ b/plugins/ebitdo/meson.build @@ -2,29 +2,16 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginEbitdo"'] plugin_quirks += files('ebitdo.quirk') - -shared_module('fu_plugin_ebitdo', - fu_hash, +plugin_builtins += static_library('fu_plugin_ebitdo', sources: [ - 'fu-plugin-ebitdo.c', + 'fu-ebitdo-plugin.c', 'fu-ebitdo-common.c', 'fu-ebitdo-device.c', 'fu-ebitdo-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/elanfp/fu-elanfp-plugin.c b/plugins/elanfp/fu-elanfp-plugin.c new file mode 100644 index 000000000..84c9f766a --- /dev/null +++ b/plugins/elanfp/fu-elanfp-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2021 + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-elanfp-device.h" +#include "fu-elanfp-firmware.h" +#include "fu-elanfp-plugin.h" + +struct _FuElanfpPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuElanfpPlugin, fu_elanfp_plugin, FU_TYPE_PLUGIN) + +static void +fu_elanfp_plugin_init(FuElanfpPlugin *self) +{ +} + +static void +fu_elanfp_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_ELANFP_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_ELANFP_FIRMWARE); +} + +static void +fu_elanfp_plugin_class_init(FuElanfpPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_elanfp_plugin_constructed; +} diff --git a/plugins/elanfp/fu-elanfp-plugin.h b/plugins/elanfp/fu-elanfp-plugin.h new file mode 100644 index 000000000..c7ca2f1f4 --- /dev/null +++ b/plugins/elanfp/fu-elanfp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuElanfpPlugin, fu_elanfp_plugin, FU, ELANFP_PLUGIN, FuPlugin) diff --git a/plugins/elanfp/fu-plugin-elanfp.c b/plugins/elanfp/fu-plugin-elanfp.c deleted file mode 100644 index 30e817cf4..000000000 --- a/plugins/elanfp/fu-plugin-elanfp.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2021 - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include "fu-elanfp-device.h" -#include "fu-elanfp-firmware.h" - -static void -fu_plugin_elanfp_init(FuPlugin *plugin) -{ - 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/elanfp/meson.build b/plugins/elanfp/meson.build index b105ee9f6..55dc8b0a9 100644 --- a/plugins/elanfp/meson.build +++ b/plugins/elanfp/meson.build @@ -2,28 +2,15 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginElanfp"'] plugin_quirks += files('elanfp.quirk') - -shared_module('fu_plugin_elanfp', - fu_hash, +plugin_builtins += static_library('fu_plugin_elanfp', sources: [ - 'fu-plugin-elanfp.c', + 'fu-elanfp-plugin.c', 'fu-elanfp-device.c', 'fu-elanfp-firmware.c' # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/elantp/fu-plugin-elantp.c b/plugins/elantp/fu-elantp-plugin.c similarity index 62% rename from plugins/elantp/fu-plugin-elantp.c rename to plugins/elantp/fu-elantp-plugin.c index fcc1cece5..d5397d8a4 100644 --- a/plugins/elantp/fu-plugin-elantp.c +++ b/plugins/elantp/fu-elantp-plugin.c @@ -6,14 +6,19 @@ #include "config.h" -#include - #include "fu-elantp-firmware.h" #include "fu-elantp-hid-device.h" #include "fu-elantp-i2c-device.h" +#include "fu-elantp-plugin.h" + +struct _FuElantpPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuElantpPlugin, fu_elantp_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_elantp_device_created(FuPlugin *plugin, FuDevice *dev, GError **error) +fu_elantp_plugin_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") && @@ -25,16 +30,18 @@ fu_plugin_elantp_device_created(FuPlugin *plugin, FuDevice *dev, GError **error) } static void -fu_plugin_elantp_load(FuContext *ctx) +fu_elantp_plugin_init(FuElantpPlugin *self) { - fu_context_add_quirk_key(ctx, "ElantpI2cTargetAddress"); - fu_context_add_quirk_key(ctx, "ElantpIapPassword"); - fu_context_add_quirk_key(ctx, "ElantpIcPageCount"); } static void -fu_plugin_elantp_init(FuPlugin *plugin) +fu_elantp_plugin_constructed(GObject *obj) { + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "ElantpI2cTargetAddress"); + fu_context_add_quirk_key(ctx, "ElantpIapPassword"); + fu_context_add_quirk_key(ctx, "ElantpIcPageCount"); fu_plugin_add_udev_subsystem(plugin, "i2c"); fu_plugin_add_udev_subsystem(plugin, "i2c-dev"); fu_plugin_add_udev_subsystem(plugin, "hidraw"); @@ -43,11 +50,11 @@ fu_plugin_elantp_init(FuPlugin *plugin) fu_plugin_add_device_gtype(plugin, FU_TYPE_ELANTP_HID_DEVICE); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_elantp_plugin_class_init(FuElantpPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_elantp_load; - vfuncs->init = fu_plugin_elantp_init; - vfuncs->device_created = fu_plugin_elantp_device_created; + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_elantp_plugin_constructed; + plugin_class->device_created = fu_elantp_plugin_device_created; } diff --git a/plugins/elantp/fu-elantp-plugin.h b/plugins/elantp/fu-elantp-plugin.h new file mode 100644 index 000000000..dbfca9c29 --- /dev/null +++ b/plugins/elantp/fu-elantp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuElantpPlugin, fu_elantp_plugin, FU, ELANTP_PLUGIN, FuPlugin) diff --git a/plugins/elantp/meson.build b/plugins/elantp/meson.build index 95f5b2249..037cd1d0d 100644 --- a/plugins/elantp/meson.build +++ b/plugins/elantp/meson.build @@ -2,35 +2,22 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginElantp"'] plugin_quirks += files('elantp.quirk') - -shared_module('fu_plugin_elantp', - fu_hash, +plugin_builtin_elantp = static_library('fu_plugin_elantp', sources: [ - 'fu-plugin-elantp.c', + 'fu-elantp-plugin.c', 'fu-elantp-firmware.c', # fuzzing 'fu-elantp-hid-device.c', 'fu-elantp-i2c-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) -endif +plugin_builtins += plugin_builtin_elantp if get_option('tests') install_data(['tests/elantp.builder.xml'], @@ -40,22 +27,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'elantp-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-elantp-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_elantp, ], install: true, install_rpath: plugin_dir, @@ -63,3 +42,4 @@ if get_option('tests') ) test('elantp-self-test', e, env: env) endif +endif diff --git a/plugins/emmc/fu-emmc-plugin.c b/plugins/emmc/fu-emmc-plugin.c new file mode 100644 index 000000000..51f4f2c1a --- /dev/null +++ b/plugins/emmc/fu-emmc-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Mario Limonciello + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-emmc-device.h" +#include "fu-emmc-plugin.h" + +struct _FuEmmcPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuEmmcPlugin, fu_emmc_plugin, FU_TYPE_PLUGIN) + +static void +fu_emmc_plugin_init(FuEmmcPlugin *self) +{ +} + +static void +fu_emmc_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "block"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_EMMC_DEVICE); +} + +static void +fu_emmc_plugin_class_init(FuEmmcPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_emmc_plugin_constructed; +} diff --git a/plugins/emmc/fu-emmc-plugin.h b/plugins/emmc/fu-emmc-plugin.h new file mode 100644 index 000000000..e306f9d7d --- /dev/null +++ b/plugins/emmc/fu-emmc-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuEmmcPlugin, fu_emmc_plugin, FU, EMMC_PLUGIN, FuPlugin) diff --git a/plugins/emmc/fu-plugin-emmc.c b/plugins/emmc/fu-plugin-emmc.c deleted file mode 100644 index 698c18f7d..000000000 --- a/plugins/emmc/fu-plugin-emmc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 Mario Limonciello - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-emmc-device.h" - -static void -fu_plugin_emmc_init(FuPlugin *plugin) -{ - 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/emmc/meson.build b/plugins/emmc/meson.build index aa48765be..6555182b9 100644 --- a/plugins/emmc/meson.build +++ b/plugins/emmc/meson.build @@ -4,27 +4,14 @@ if get_option('plugin_emmc').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginEmmc"'] plugin_quirks += files('emmc.quirk') - -shared_module('fu_plugin_emmc', - fu_hash, +plugin_builtins += static_library('fu_plugin_emmc', sources: [ - 'fu-plugin-emmc.c', + 'fu-emmc-plugin.c', 'fu-emmc-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/ep963x/fu-ep963x-plugin.c b/plugins/ep963x/fu-ep963x-plugin.c new file mode 100644 index 000000000..0bcfd712f --- /dev/null +++ b/plugins/ep963x/fu-ep963x-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-ep963x-device.h" +#include "fu-ep963x-firmware.h" +#include "fu-ep963x-plugin.h" + +struct _FuEp963XPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuEp963XPlugin, fu_ep963x_plugin, FU_TYPE_PLUGIN) + +static void +fu_ep963x_plugin_init(FuEp963XPlugin *self) +{ +} + +static void +fu_ep963x_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_EP963X_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EP963X_FIRMWARE); +} + +static void +fu_ep963x_plugin_class_init(FuEp963XPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_ep963x_plugin_constructed; +} diff --git a/plugins/ep963x/fu-ep963x-plugin.h b/plugins/ep963x/fu-ep963x-plugin.h new file mode 100644 index 000000000..c436f899a --- /dev/null +++ b/plugins/ep963x/fu-ep963x-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuEp963XPlugin, fu_ep963x_plugin, FU, EP963X_PLUGIN, FuPlugin) diff --git a/plugins/ep963x/fu-plugin-ep963x.c b/plugins/ep963x/fu-plugin-ep963x.c deleted file mode 100644 index 8b7868c36..000000000 --- a/plugins/ep963x/fu-plugin-ep963x.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2020 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-ep963x-device.h" -#include "fu-ep963x-firmware.h" - -static void -fu_plugin_ep963x_init(FuPlugin *plugin) -{ - 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/ep963x/meson.build b/plugins/ep963x/meson.build index 571428626..a9727a440 100644 --- a/plugins/ep963x/meson.build +++ b/plugins/ep963x/meson.build @@ -2,29 +2,16 @@ if get_option('plugin_ep963x').disable_auto_if(host_machine.system() != 'linux') cargs = ['-DG_LOG_DOMAIN="FuPluginEp963x"'] plugin_quirks += files('ep963x.quirk') - -shared_module('fu_plugin_ep963x', - fu_hash, +plugin_builtins += static_library('fu_plugin_ep963x', sources: [ 'fu-ep963x-common.c', 'fu-ep963x-device.c', 'fu-ep963x-firmware.c', - 'fu-plugin-ep963x.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-ep963x-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/fastboot/fu-fastboot-plugin.c b/plugins/fastboot/fu-fastboot-plugin.c new file mode 100644 index 000000000..f4f661019 --- /dev/null +++ b/plugins/fastboot/fu-fastboot-plugin.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) FIXMEFIXMEFIXMEFIXMEFIXME2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-fastboot-device.h" +#include "fu-fastboot-plugin.h" + +struct _FuFastbootPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuFastbootPlugin, fu_fastboot_plugin, FU_TYPE_PLUGIN) + +static void +fu_fastboot_plugin_init(FuFastbootPlugin *self) +{ +} + +static void +fu_fastboot_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "FastbootBlockSize"); + fu_context_add_quirk_key(ctx, "FastbootOperationDelay"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_FASTBOOT_DEVICE); +} + +static void +fu_fastboot_plugin_class_init(FuFastbootPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_fastboot_plugin_constructed; +} diff --git a/plugins/fastboot/fu-fastboot-plugin.h b/plugins/fastboot/fu-fastboot-plugin.h new file mode 100644 index 000000000..bc015c385 --- /dev/null +++ b/plugins/fastboot/fu-fastboot-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuFastbootPlugin, fu_fastboot_plugin, FU, FASTBOOT_PLUGIN, FuPlugin) diff --git a/plugins/fastboot/fu-plugin-fastboot.c b/plugins/fastboot/fu-plugin-fastboot.c deleted file mode 100644 index 98049d939..000000000 --- a/plugins/fastboot/fu-plugin-fastboot.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2018 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-fastboot-device.h" - -static void -fu_plugin_fastboot_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "FastbootBlockSize"); - fu_context_add_quirk_key(ctx, "FastbootOperationDelay"); -} - -static void -fu_plugin_fastboot_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_FASTBOOT_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_fastboot_load; - vfuncs->init = fu_plugin_fastboot_init; -} diff --git a/plugins/fastboot/meson.build b/plugins/fastboot/meson.build index 2e6c7b09b..d25aa2cdc 100644 --- a/plugins/fastboot/meson.build +++ b/plugins/fastboot/meson.build @@ -3,27 +3,14 @@ if get_option('plugin_fastboot').require(gusb.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginFastboot"'] plugin_quirks += files('fastboot.quirk') - -shared_module('fu_plugin_fastboot', - fu_hash, +plugin_builtins += static_library('fu_plugin_fastboot', sources: [ - 'fu-plugin-fastboot.c', + 'fu-fastboot-plugin.c', 'fu-fastboot-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/flashrom/meson.build b/plugins/flashrom/meson.build index 1aff69cdd..91ea8675f 100644 --- a/plugins/flashrom/meson.build +++ b/plugins/flashrom/meson.build @@ -11,17 +11,10 @@ shared_module('fu_plugin_flashrom', 'fu-plugin-flashrom.c', 'fu-flashrom-cmos.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, install: true, install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + link_with: plugin_libs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', diff --git a/plugins/focalfp/fu-focalfp-plugin.c b/plugins/focalfp/fu-focalfp-plugin.c new file mode 100644 index 000000000..369c504c7 --- /dev/null +++ b/plugins/focalfp/fu-focalfp-plugin.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Shihwei Huang + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-focalfp-firmware.h" +#include "fu-focalfp-hid-device.h" +#include "fu-focalfp-plugin.h" + +struct _FuFocalfpPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuFocalfpPlugin, fu_focalfp_plugin, FU_TYPE_PLUGIN) + +static void +fu_focalfp_plugin_init(FuFocalfpPlugin *self) +{ +} + +static void +fu_focalfp_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "hidraw"); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_FOCALFP_FIRMWARE); + fu_plugin_add_device_gtype(plugin, FU_TYPE_FOCALFP_HID_DEVICE); +} + +static void +fu_focalfp_plugin_class_init(FuFocalfpPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_focalfp_plugin_constructed; +} diff --git a/plugins/focalfp/fu-focalfp-plugin.h b/plugins/focalfp/fu-focalfp-plugin.h new file mode 100644 index 000000000..b895f6c7c --- /dev/null +++ b/plugins/focalfp/fu-focalfp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuFocalfpPlugin, fu_focalfp_plugin, FU, FOCALFP_PLUGIN, FuPlugin) diff --git a/plugins/focalfp/fu-plugin-focalfp.c b/plugins/focalfp/fu-plugin-focalfp.c deleted file mode 100644 index 0f90291a0..000000000 --- a/plugins/focalfp/fu-plugin-focalfp.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2022 Shihwei Huang - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-focalfp-firmware.h" -#include "fu-focalfp-hid-device.h" - -static void -fu_plugin_focalfp_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "hidraw"); - fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_FOCALFP_FIRMWARE); - fu_plugin_add_device_gtype(plugin, FU_TYPE_FOCALFP_HID_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_focalfp_init; -} diff --git a/plugins/focalfp/meson.build b/plugins/focalfp/meson.build index b1c6abe28..565845643 100644 --- a/plugins/focalfp/meson.build +++ b/plugins/focalfp/meson.build @@ -2,31 +2,17 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginFocalfp"'] plugin_quirks += files('focalfp.quirk') - -shared_module('fu_plugin_focalfp', - fu_hash, +plugin_builtins += static_library('fu_plugin_focalfp', sources: [ - 'fu-plugin-focalfp.c', + 'fu-focalfp-plugin.c', 'fu-focalfp-firmware.c', 'fu-focalfp-hid-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, - '-DLOCALSTATEDIR="' + localstatedir + '"', - ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, ], + link_with: plugin_libs, + dependencies: plugin_deps, ) endif diff --git a/plugins/fpc/fu-fpc-plugin.c b/plugins/fpc/fu-fpc-plugin.c new file mode 100644 index 000000000..987280cdb --- /dev/null +++ b/plugins/fpc/fu-fpc-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2022 Haowei Lo + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-fpc-device.h" +#include "fu-fpc-plugin.h" + +struct _FuFpcPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuFpcPlugin, fu_fpc_plugin, FU_TYPE_PLUGIN) + +static void +fu_fpc_plugin_init(FuFpcPlugin *self) +{ +} + +static void +fu_fpc_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_FPC_DEVICE); +} + +static void +fu_fpc_plugin_class_init(FuFpcPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_fpc_constructed; +} diff --git a/plugins/fpc/fu-fpc-plugin.h b/plugins/fpc/fu-fpc-plugin.h new file mode 100644 index 000000000..8679754e0 --- /dev/null +++ b/plugins/fpc/fu-fpc-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuFpcPlugin, fu_fpc_plugin, FU, FPC_PLUGIN, FuPlugin) diff --git a/plugins/fpc/fu-plugin-fpc.c b/plugins/fpc/fu-plugin-fpc.c index 0d8399ac4..740742524 100644 --- a/plugins/fpc/fu-plugin-fpc.c +++ b/plugins/fpc/fu-plugin-fpc.c @@ -1,5 +1,4 @@ /* - * Copyright (C) 2022 Haowei Lo * * SPDX-License-Identifier: LGPL-2.1+ */ @@ -13,7 +12,6 @@ static void fu_plugin_fpc_init(FuPlugin *plugin) { - fu_plugin_add_device_gtype(plugin, FU_TYPE_FPC_DEVICE); } void diff --git a/plugins/fpc/meson.build b/plugins/fpc/meson.build index 8da4afbf8..21c8660bc 100644 --- a/plugins/fpc/meson.build +++ b/plugins/fpc/meson.build @@ -2,27 +2,14 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginFpc"'] plugin_quirks += join_paths(meson.current_source_dir(), 'fpc.quirk') - -shared_module('fu_plugin_fpc', - fu_hash, +plugin_builtins += static_library('fu_plugin_fpc', sources: [ 'fu-fpc-device.c', - 'fu-plugin-fpc.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-fpc-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/fresco-pd/fu-fresco-pd-plugin.c b/plugins/fresco-pd/fu-fresco-pd-plugin.c new file mode 100644 index 000000000..1b15971ed --- /dev/null +++ b/plugins/fresco-pd/fu-fresco-pd-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2020 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-fresco-pd-device.h" +#include "fu-fresco-pd-firmware.h" +#include "fu-fresco-pd-plugin.h" + +struct _FuFrescoPdPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuFrescoPdPlugin, fu_fresco_pd_plugin, FU_TYPE_PLUGIN) + +static void +fu_fresco_pd_plugin_init(FuFrescoPdPlugin *self) +{ +} + +static void +fu_fresco_pd_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_FRESCO_PD_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_FRESCO_PD_FIRMWARE); +} + +static void +fu_fresco_pd_plugin_class_init(FuFrescoPdPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_fresco_pd_plugin_constructed; +} diff --git a/plugins/fresco-pd/fu-fresco-pd-plugin.h b/plugins/fresco-pd/fu-fresco-pd-plugin.h new file mode 100644 index 000000000..3d08f447f --- /dev/null +++ b/plugins/fresco-pd/fu-fresco-pd-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuFrescoPdPlugin, fu_fresco_pd_plugin, FU, FRESCO_PD_PLUGIN, FuPlugin) diff --git a/plugins/fresco-pd/fu-plugin-fresco-pd.c b/plugins/fresco-pd/fu-plugin-fresco-pd.c deleted file mode 100644 index 09e18cd5a..000000000 --- a/plugins/fresco-pd/fu-plugin-fresco-pd.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2020 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-fresco-pd-device.h" -#include "fu-fresco-pd-firmware.h" - -static void -fu_plugin_fresco_pd_init(FuPlugin *plugin) -{ - 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/fresco-pd/meson.build b/plugins/fresco-pd/meson.build index 6d4fc3791..489e19081 100644 --- a/plugins/fresco-pd/meson.build +++ b/plugins/fresco-pd/meson.build @@ -2,29 +2,16 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginFrescoPd"'] plugin_quirks += files('fresco-pd.quirk') - -shared_module('fu_plugin_fresco_pd', - fu_hash, +plugin_builtins += static_library('fu_plugin_fresco_pd', sources: [ - 'fu-plugin-fresco-pd.c', + 'fu-fresco-pd-plugin.c', 'fu-fresco-pd-common.c', 'fu-fresco-pd-device.c', 'fu-fresco-pd-firmware.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/genesys/fu-plugin-genesys.c b/plugins/genesys/fu-genesys-plugin.c similarity index 65% rename from plugins/genesys/fu-plugin-genesys.c rename to plugins/genesys/fu-genesys-plugin.c index a44a64eef..211007d8b 100644 --- a/plugins/genesys/fu-plugin-genesys.c +++ b/plugins/genesys/fu-genesys-plugin.c @@ -6,15 +6,27 @@ #include "config.h" -#include - +#include "fu-genesys-plugin.h" #include "fu-genesys-scaler-firmware.h" #include "fu-genesys-usbhub-device.h" #include "fu-genesys-usbhub-firmware.h" +struct _FuGenesysPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuGenesysPlugin, fu_genesys_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_genesys_load(FuContext *ctx) +fu_genesys_plugin_init(FuGenesysPlugin *self) { +} + +static void +fu_genesys_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); fu_context_add_quirk_key(ctx, "GenesysScalerCfiFlashId"); fu_context_add_quirk_key(ctx, "GenesysScalerGpioOutputRegister"); fu_context_add_quirk_key(ctx, "GenesysScalerGpioEnableRegister"); @@ -22,20 +34,14 @@ fu_plugin_genesys_load(FuContext *ctx) fu_context_add_quirk_key(ctx, "GenesysUsbhubReadRequest"); fu_context_add_quirk_key(ctx, "GenesysUsbhubSwitchRequest"); fu_context_add_quirk_key(ctx, "GenesysUsbhubWriteRequest"); -} - -static void -fu_plugin_genesys_init(FuPlugin *plugin) -{ fu_plugin_add_device_gtype(plugin, FU_TYPE_GENESYS_USBHUB_DEVICE); fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_GENESYS_USBHUB_FIRMWARE); fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_GENESYS_SCALER_FIRMWARE); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_genesys_plugin_class_init(FuGenesysPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_genesys_load; - vfuncs->init = fu_plugin_genesys_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_genesys_plugin_constructed; } diff --git a/plugins/genesys/fu-genesys-plugin.h b/plugins/genesys/fu-genesys-plugin.h new file mode 100644 index 000000000..dff7810cc --- /dev/null +++ b/plugins/genesys/fu-genesys-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuGenesysPlugin, fu_genesys_plugin, FU, GENESYS_PLUGIN, FuPlugin) diff --git a/plugins/genesys/meson.build b/plugins/genesys/meson.build index c79e2785c..2d5c6e026 100644 --- a/plugins/genesys/meson.build +++ b/plugins/genesys/meson.build @@ -2,30 +2,17 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginGenesys"'] plugin_quirks += files('genesys.quirk') - -shared_module('fu_plugin_genesys', - fu_hash, +plugin_builtins += static_library('fu_plugin_genesys', sources: [ 'fu-genesys-scaler-firmware.c', # fuzzing 'fu-genesys-usbhub-firmware.c', # fuzzing 'fu-genesys-scaler-device.c', 'fu-genesys-usbhub-device.c', - 'fu-plugin-genesys.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-genesys-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/goodix-moc/fu-goodixmoc-plugin.c b/plugins/goodix-moc/fu-goodixmoc-plugin.c new file mode 100644 index 000000000..5c38c1a18 --- /dev/null +++ b/plugins/goodix-moc/fu-goodixmoc-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2015 Richard Hughes + * Copyright (C) 2020 boger wang + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-goodixmoc-device.h" +#include "fu-goodixmoc-plugin.h" + +struct _FuGoodixMocPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuGoodixMocPlugin, fu_goodixmoc_plugin, FU_TYPE_PLUGIN) + +static void +fu_goodixmoc_plugin_init(FuGoodixMocPlugin *self) +{ +} + +static void +fu_goodixmoc_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_GOODIXMOC_DEVICE); +} + +static void +fu_goodixmoc_plugin_class_init(FuGoodixMocPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_goodixmoc_plugin_constructed; +} diff --git a/plugins/goodix-moc/fu-goodixmoc-plugin.h b/plugins/goodix-moc/fu-goodixmoc-plugin.h new file mode 100644 index 000000000..b254a253d --- /dev/null +++ b/plugins/goodix-moc/fu-goodixmoc-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuGoodixMocPlugin, fu_goodixmoc_plugin, FU, GOODIXMOC_PLUGIN, FuPlugin) diff --git a/plugins/goodix-moc/fu-plugin-goodixmoc.c b/plugins/goodix-moc/fu-plugin-goodixmoc.c deleted file mode 100644 index 19c0d8634..000000000 --- a/plugins/goodix-moc/fu-plugin-goodixmoc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2015 Richard Hughes - * Copyright (C) 2020 boger wang - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-goodixmoc-device.h" - -static void -fu_plugin_goodixmoc_init(FuPlugin *plugin) -{ - 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/goodix-moc/meson.build b/plugins/goodix-moc/meson.build index 11642b776..820566a1f 100644 --- a/plugins/goodix-moc/meson.build +++ b/plugins/goodix-moc/meson.build @@ -2,27 +2,14 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginGoodixMoc"'] plugin_quirks += files('goodixmoc.quirk') - -shared_module('fu_plugin_goodixmoc', - fu_hash, +plugin_builtins += static_library('fu_plugin_goodixmoc', sources: [ 'fu-goodixmoc-device.c', - 'fu-plugin-goodixmoc.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-goodixmoc-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/gpio/fu-plugin-gpio.c b/plugins/gpio/fu-gpio-plugin.c similarity index 61% rename from plugins/gpio/fu-plugin-gpio.c rename to plugins/gpio/fu-gpio-plugin.c index 0c8ecd150..337a88604 100644 --- a/plugins/gpio/fu-plugin-gpio.c +++ b/plugins/gpio/fu-gpio-plugin.c @@ -6,49 +6,29 @@ #include "config.h" -#include - #include "fu-gpio-device.h" +#include "fu-gpio-plugin.h" -struct FuPluginData { +struct _FuGpioPlugin { + FuPlugin parent_instance; GPtrArray *current_logical_ids; /* element-type: utf-8 */ }; -static void -fu_plugin_gpio_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "GpioForUpdate"); -} +G_DEFINE_TYPE(FuGpioPlugin, fu_gpio_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_gpio_init(FuPlugin *plugin) +fu_gpio_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - priv->current_logical_ids = g_ptr_array_new_with_free_func(g_free); - fu_plugin_add_udev_subsystem(plugin, "gpio"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_GPIO_DEVICE); -} - -static void -fu_plugin_gpio_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - g_ptr_array_unref(priv->current_logical_ids); -} - -static void -fu_plugin_gpio_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - for (guint i = 0; i < priv->current_logical_ids->len; i++) { - const gchar *current_logical_id = g_ptr_array_index(priv->current_logical_ids, i); + FuGpioPlugin *self = FU_GPIO_PLUGIN(plugin); + for (guint i = 0; i < self->current_logical_ids->len; i++) { + const gchar *current_logical_id = g_ptr_array_index(self->current_logical_ids, i); g_autofree gchar *title = g_strdup_printf("CurrentLogicalId[0x%02x]", i); fu_string_append(str, idt, title, current_logical_id); } } static gboolean -fu_plugin_gpio_parse_level(const gchar *str, gboolean *ret, GError **error) +fu_gpio_plugin_parse_level(const gchar *str, gboolean *ret, GError **error) { if (g_strcmp0(str, "high") == 0) { *ret = TRUE; @@ -67,11 +47,11 @@ fu_plugin_gpio_parse_level(const gchar *str, gboolean *ret, GError **error) } static gboolean -fu_plugin_gpio_process_quirk(FuPlugin *self, const gchar *str, GError **error) +fu_gpio_plugin_process_quirk(FuPlugin *plugin, const gchar *str, GError **error) { - FuPluginData *priv = fu_plugin_get_data(self); - gboolean value = FALSE; + FuGpioPlugin *self = FU_GPIO_PLUGIN(plugin); FuDevice *device_tmp; + gboolean value = FALSE; g_auto(GStrv) split = g_strsplit(str, ",", -1); g_autoptr(FuDeviceLocker) locker = NULL; @@ -84,9 +64,9 @@ fu_plugin_gpio_process_quirk(FuPlugin *self, const gchar *str, GError **error) str); return FALSE; } - if (!fu_plugin_gpio_parse_level(split[2], &value, error)) + if (!fu_gpio_plugin_parse_level(split[2], &value, error)) return FALSE; - device_tmp = fu_plugin_cache_lookup(self, split[0]); + device_tmp = fu_plugin_cache_lookup(plugin, split[0]); if (device_tmp == NULL) { g_set_error(error, FWUPD_ERROR, @@ -104,12 +84,12 @@ fu_plugin_gpio_process_quirk(FuPlugin *self, const gchar *str, GError **error) } /* success */ - g_ptr_array_add(priv->current_logical_ids, g_strdup(fu_device_get_logical_id(device_tmp))); + g_ptr_array_add(self->current_logical_ids, g_strdup(fu_device_get_logical_id(device_tmp))); return TRUE; } static gboolean -fu_plugin_gpio_prepare(FuPlugin *self, +fu_gpio_plugin_prepare(FuPlugin *self, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, @@ -124,33 +104,33 @@ fu_plugin_gpio_prepare(FuPlugin *self, "GpioForUpdate"); if (str == NULL) continue; - if (!fu_plugin_gpio_process_quirk(self, str, error)) + if (!fu_gpio_plugin_process_quirk(self, str, error)) return FALSE; } return TRUE; } static gboolean -fu_plugin_gpio_cleanup(FuPlugin *self, +fu_gpio_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - FuPluginData *priv = fu_plugin_get_data(self); + FuGpioPlugin *self = FU_GPIO_PLUGIN(plugin); g_autoptr(GPtrArray) current_logical_ids = NULL; /* deep copy to local to clear transaction array */ current_logical_ids = - g_ptr_array_copy(priv->current_logical_ids, (GCopyFunc)g_strdup, NULL); - g_ptr_array_set_size(priv->current_logical_ids, 0); + g_ptr_array_copy(self->current_logical_ids, (GCopyFunc)g_strdup, NULL); + g_ptr_array_set_size(self->current_logical_ids, 0); /* close the fds we opened during ->prepare */ for (guint i = 0; i < current_logical_ids->len; i++) { FuDevice *device_tmp; const gchar *current_logical_id = g_ptr_array_index(current_logical_ids, i); - device_tmp = fu_plugin_cache_lookup(self, current_logical_id); + device_tmp = fu_plugin_cache_lookup(plugin, current_logical_id); if (device_tmp == NULL) { g_set_error(error, FWUPD_ERROR, @@ -170,20 +150,45 @@ fu_plugin_gpio_cleanup(FuPlugin *self, } static void -fu_plugin_gpio_device_added(FuPlugin *self, FuDevice *device) +fu_gpio_plugin_device_added(FuPlugin *self, FuDevice *device) { fu_plugin_cache_add(self, fu_device_get_logical_id(device), device); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_gpio_plugin_init(FuGpioPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_gpio_load; - vfuncs->init = fu_plugin_gpio_init; - vfuncs->destroy = fu_plugin_gpio_destroy; - vfuncs->to_string = fu_plugin_gpio_to_string; - vfuncs->prepare = fu_plugin_gpio_prepare; - vfuncs->cleanup = fu_plugin_gpio_cleanup; - vfuncs->device_added = fu_plugin_gpio_device_added; + self->current_logical_ids = g_ptr_array_new_with_free_func(g_free); +} + +static void +fu_gpio_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "GpioForUpdate"); + fu_plugin_add_udev_subsystem(plugin, "gpio"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_GPIO_DEVICE); +} + +static void +fu_gpio_finalize(GObject *obj) +{ + FuGpioPlugin *self = FU_GPIO_PLUGIN(obj); + g_ptr_array_unref(self->current_logical_ids); + G_OBJECT_CLASS(fu_gpio_plugin_parent_class)->finalize(obj); +} + +static void +fu_gpio_plugin_class_init(FuGpioPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_gpio_plugin_constructed; + object_class->finalize = fu_gpio_finalize; + plugin_class->to_string = fu_gpio_plugin_to_string; + plugin_class->prepare = fu_gpio_plugin_prepare; + plugin_class->cleanup = fu_gpio_plugin_cleanup; + plugin_class->device_added = fu_gpio_plugin_device_added; } diff --git a/plugins/gpio/fu-gpio-plugin.h b/plugins/gpio/fu-gpio-plugin.h new file mode 100644 index 000000000..a3c0b3bb6 --- /dev/null +++ b/plugins/gpio/fu-gpio-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuGpioPlugin, fu_gpio_plugin, FU, GPIO_PLUGIN, FuPlugin) diff --git a/plugins/gpio/meson.build b/plugins/gpio/meson.build index ecad6487d..63b7b47a2 100644 --- a/plugins/gpio/meson.build +++ b/plugins/gpio/meson.build @@ -4,30 +4,17 @@ if gpio_header and gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginGpio"'] plugin_quirks += files('gpio.quirk') - -shared_module('fu_plugin_gpio', - fu_hash, +plugin_builtins += static_library('fu_plugin_gpio', sources: [ - 'fu-plugin-gpio.c', + 'fu-gpio-plugin.c', 'fu-gpio-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) endif diff --git a/plugins/hailuck/fu-hailuck-plugin.c b/plugins/hailuck/fu-hailuck-plugin.c new file mode 100644 index 000000000..4fdbf0ef3 --- /dev/null +++ b/plugins/hailuck/fu-hailuck-plugin.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2020 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-hailuck-bl-device.h" +#include "fu-hailuck-kbd-device.h" +#include "fu-hailuck-kbd-firmware.h" +#include "fu-hailuck-plugin.h" + +struct _FuHailuckPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuHailuckPlugin, fu_hailuck_plugin, FU_TYPE_PLUGIN) + +static void +fu_hailuck_plugin_init(FuHailuckPlugin *self) +{ +} + +static void +fu_hailuck_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + 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); +} + +static void +fu_hailuck_plugin_class_init(FuHailuckPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_hailuck_plugin_constructed; +} diff --git a/plugins/hailuck/fu-hailuck-plugin.h b/plugins/hailuck/fu-hailuck-plugin.h new file mode 100644 index 000000000..5e3693353 --- /dev/null +++ b/plugins/hailuck/fu-hailuck-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuHailuckPlugin, fu_hailuck_plugin, FU, HAILUCK_PLUGIN, FuPlugin) diff --git a/plugins/hailuck/fu-plugin-hailuck.c b/plugins/hailuck/fu-plugin-hailuck.c deleted file mode 100644 index f1fa063b0..000000000 --- a/plugins/hailuck/fu-plugin-hailuck.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2020 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-hailuck-bl-device.h" -#include "fu-hailuck-kbd-device.h" -#include "fu-hailuck-kbd-firmware.h" - -static void -fu_plugin_hailuck_init(FuPlugin *plugin) -{ - 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/hailuck/meson.build b/plugins/hailuck/meson.build index e42fc48e7..13274e20d 100644 --- a/plugins/hailuck/meson.build +++ b/plugins/hailuck/meson.build @@ -2,31 +2,18 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginNovatek"'] plugin_quirks += files('hailuck.quirk') - -shared_module('fu_plugin_hailuck', - fu_hash, +plugin_builtins += static_library('fu_plugin_hailuck', sources: [ 'fu-hailuck-common.c', 'fu-hailuck-bl-device.c', 'fu-hailuck-kbd-device.c', 'fu-hailuck-kbd-firmware.c', # fuzzing 'fu-hailuck-tp-device.c', - 'fu-plugin-hailuck.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-hailuck-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/intel-spi/fu-plugin-intel-spi.c b/plugins/intel-spi/fu-intel-spi-plugin.c similarity index 51% rename from plugins/intel-spi/fu-plugin-intel-spi.c rename to plugins/intel-spi/fu-intel-spi-plugin.c index 0ec93a5f5..39f6ed2e3 100644 --- a/plugins/intel-spi/fu-plugin-intel-spi.c +++ b/plugins/intel-spi/fu-intel-spi-plugin.c @@ -6,28 +6,17 @@ #include "config.h" -#include - #include "fu-intel-spi-device.h" +#include "fu-intel-spi-plugin.h" -static void -fu_plugin_intel_spi_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "IntelSpiKind"); - fu_context_add_quirk_key(ctx, "IntelSpiBar"); - fu_context_add_quirk_key(ctx, "IntelSpiBarProxy"); - fu_context_add_quirk_key(ctx, "IntelSpiBiosCntl"); -} +struct _FuIntelSpiPlugin { + FuPlugin parent_instance; +}; -static void -fu_plugin_intel_spi_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "pci"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_INTEL_SPI_DEVICE); -} +G_DEFINE_TYPE(FuIntelSpiPlugin, fu_intel_spi_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_intel_spi_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_intel_spi_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { if (fu_kernel_locked_down()) { g_set_error_literal(error, @@ -39,11 +28,30 @@ fu_plugin_intel_spi_startup(FuPlugin *plugin, FuProgress *progress, GError **err return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_intel_spi_plugin_init(FuIntelSpiPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_intel_spi_load; - vfuncs->init = fu_plugin_intel_spi_init; - vfuncs->startup = fu_plugin_intel_spi_startup; +} + +static void +fu_intel_spi_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "IntelSpiKind"); + fu_context_add_quirk_key(ctx, "IntelSpiBar"); + fu_context_add_quirk_key(ctx, "IntelSpiBarProxy"); + fu_context_add_quirk_key(ctx, "IntelSpiBiosCntl"); + fu_plugin_add_udev_subsystem(plugin, "pci"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_INTEL_SPI_DEVICE); +} + +static void +fu_intel_spi_plugin_class_init(FuIntelSpiPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_intel_spi_plugin_constructed; + plugin_class->startup = fu_intel_spi_plugin_startup; } diff --git a/plugins/intel-spi/fu-intel-spi-plugin.h b/plugins/intel-spi/fu-intel-spi-plugin.h new file mode 100644 index 000000000..33f72df91 --- /dev/null +++ b/plugins/intel-spi/fu-intel-spi-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuIntelSpiPlugin, fu_intel_spi_plugin, FU, INTEL_SPI_PLUGIN, FuPlugin) diff --git a/plugins/intel-spi/meson.build b/plugins/intel-spi/meson.build index ee6f241bc..9900752ca 100644 --- a/plugins/intel-spi/meson.build +++ b/plugins/intel-spi/meson.build @@ -8,30 +8,17 @@ endif cargs = ['-DG_LOG_DOMAIN="FuPluginIntelSpi"'] plugin_quirks += files('intel-spi.quirk') - -shared_module('fu_plugin_intel_spi', - fu_hash, +plugin_builtins += static_library('fu_plugin_intel_spi', sources: [ 'fu-ifd-device.c', 'fu-intel-spi-common.c', 'fu-intel-spi-device.c', 'fu-pci-device.c', - 'fu-plugin-intel-spi.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-intel-spi-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/intel-usb4/fu-intel-usb4-plugin.c b/plugins/intel-usb4/fu-intel-usb4-plugin.c new file mode 100644 index 000000000..6c7022904 --- /dev/null +++ b/plugins/intel-usb4/fu-intel-usb4-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-intel-usb4-device.h" +#include "fu-intel-usb4-plugin.h" + +struct _FuIntelUsb4Plugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuIntelUsb4Plugin, fu_intel_usb4_plugin, FU_TYPE_PLUGIN) + +static void +fu_intel_usb4_plugin_init(FuIntelUsb4Plugin *self) +{ +} + +static void +fu_intel_usb4_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_INTEL_USB4_DEVICE); +} + +static void +fu_intel_usb4_plugin_class_init(FuIntelUsb4PluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_intel_usb4_plugin_constructed; +} diff --git a/plugins/intel-usb4/fu-intel-usb4-plugin.h b/plugins/intel-usb4/fu-intel-usb4-plugin.h new file mode 100644 index 000000000..c6a7c3202 --- /dev/null +++ b/plugins/intel-usb4/fu-intel-usb4-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuIntelUsb4Plugin, fu_intel_usb4_plugin, FU, INTEL_USB4_PLUGIN, FuPlugin) diff --git a/plugins/intel-usb4/fu-plugin-intel-usb4.c b/plugins/intel-usb4/fu-plugin-intel-usb4.c deleted file mode 100644 index c0bf473cc..000000000 --- a/plugins/intel-usb4/fu-plugin-intel-usb4.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2022 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include "fu-intel-usb4-device.h" - -static void -fu_plugin_intel_usb4_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_INTEL_USB4_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_intel_usb4_init; -} diff --git a/plugins/intel-usb4/meson.build b/plugins/intel-usb4/meson.build index 9ee9a73ee..2bd2503b7 100644 --- a/plugins/intel-usb4/meson.build +++ b/plugins/intel-usb4/meson.build @@ -2,24 +2,13 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginIntelUsb4"'] plugin_quirks += files('intel-usb4.quirk') - -shared_module('fu_plugin_intel_usb4', - fu_hash, +plugin_builtins += static_library('fu_plugin_intel_usb4', sources: [ 'fu-intel-usb4-device.c', - 'fu-plugin-intel-usb4.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-intel-usb4-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, diff --git a/plugins/iommu/fu-plugin-iommu.c b/plugins/iommu/fu-iommu-plugin.c similarity index 53% rename from plugins/iommu/fu-plugin-iommu.c rename to plugins/iommu/fu-iommu-plugin.c index b987b9b85..043a5e5b3 100644 --- a/plugins/iommu/fu-plugin-iommu.c +++ b/plugins/iommu/fu-iommu-plugin.c @@ -6,61 +6,52 @@ #include "config.h" -#include +#include "fu-iommu-plugin.h" -struct FuPluginData { +struct _FuIommuPlugin { + FuPlugin parent_instance; gboolean has_iommu; }; -static void -fu_plugin_iommu_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - fu_plugin_add_udev_subsystem(plugin, "iommu"); -} +G_DEFINE_TYPE(FuIommuPlugin, fu_iommu_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_iommu_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_iommu_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_kb(str, idt, "HasIommu", priv->has_iommu); + FuIommuPlugin *self = FU_IOMMU_PLUGIN(plugin); + fu_string_append_kb(str, idt, "HasIommu", self->has_iommu); } static gboolean -fu_plugin_iommu_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_iommu_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuIommuPlugin *self = FU_IOMMU_PLUGIN(plugin); /* interesting device? */ if (!FU_IS_UDEV_DEVICE(device)) return TRUE; if (g_strcmp0(fu_udev_device_get_subsystem(FU_UDEV_DEVICE(device)), "iommu") != 0) return TRUE; - priv->has_iommu = TRUE; + self->has_iommu = TRUE; return TRUE; } static void -fu_plugin_iommu_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_iommu_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuIommuPlugin *self = FU_IOMMU_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_IOMMU); fu_security_attrs_append(attrs, attr); - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - fu_security_attr_add_bios_target_value(attr, "AmdVt", "enable"); fu_security_attr_add_bios_target_value(attr, "IOMMU", "enable"); fu_security_attr_add_bios_target_value(attr, "VtForDirectIo", "enable"); - if (!priv->has_iommu) { + if (!self->has_iommu) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); @@ -72,12 +63,26 @@ fu_plugin_iommu_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_iommu_plugin_init(FuIommuPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_iommu_init; - vfuncs->to_string = fu_plugin_iommu_to_string; - vfuncs->backend_device_added = fu_plugin_iommu_backend_device_added; - vfuncs->add_security_attrs = fu_plugin_iommu_add_security_attrs; +} + +static void +fu_iommu_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "iommu"); +} + +static void +fu_iommu_plugin_class_init(FuIommuPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_iommu_plugin_constructed; + plugin_class->to_string = fu_iommu_plugin_to_string; + plugin_class->backend_device_added = fu_iommu_plugin_backend_device_added; + plugin_class->add_security_attrs = fu_iommu_plugin_add_security_attrs; } diff --git a/plugins/iommu/fu-iommu-plugin.h b/plugins/iommu/fu-iommu-plugin.h new file mode 100644 index 000000000..1ae061b43 --- /dev/null +++ b/plugins/iommu/fu-iommu-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuIommuPlugin, fu_iommu_plugin, FU, IOMMU_PLUGIN, FuPlugin) diff --git a/plugins/iommu/meson.build b/plugins/iommu/meson.build index 68d82b23e..8f6d226ee 100644 --- a/plugins/iommu/meson.build +++ b/plugins/iommu/meson.build @@ -2,26 +2,16 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginIommu"'] plugin_quirks += files('iommu.quirk') - -shared_module('fu_plugin_iommu', - fu_hash, +plugin_builtins += static_library('fu_plugin_iommu', sources: [ - 'fu-plugin-iommu.c', + 'fu-iommu-plugin.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, link_with: [ fwupdplugin, fwupd, ], c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/jabra/fu-plugin-jabra.c b/plugins/jabra/fu-jabra-plugin.c similarity index 69% rename from plugins/jabra/fu-plugin-jabra.c rename to plugins/jabra/fu-jabra-plugin.c index 903fa236f..4eeb0547a 100644 --- a/plugins/jabra/fu-plugin-jabra.c +++ b/plugins/jabra/fu-jabra-plugin.c @@ -6,26 +6,19 @@ #include "config.h" -#include - #include "fu-jabra-device.h" +#include "fu-jabra-plugin.h" -static void -fu_plugin_jabra_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_JABRA_DEVICE); -} +struct _FuJabraPlugin { + FuPlugin parent_instance; +}; -static void -fu_plugin_jabra_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "JabraMagic"); -} +G_DEFINE_TYPE(FuJabraPlugin, fu_jabra_plugin, FU_TYPE_PLUGIN) /* slightly weirdly, this takes us from appIDLE back into the actual * runtime mode where the device actually works */ static gboolean -fu_plugin_jabra_cleanup(FuPlugin *plugin, +fu_jabra_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, @@ -59,11 +52,25 @@ fu_plugin_jabra_cleanup(FuPlugin *plugin, return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_jabra_plugin_init(FuJabraPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_jabra_load; - vfuncs->init = fu_plugin_jabra_init; - vfuncs->cleanup = fu_plugin_jabra_cleanup; +} + +static void +fu_jabra_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "JabraMagic"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_JABRA_DEVICE); +} + +static void +fu_jabra_plugin_class_init(FuJabraPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_jabra_plugin_constructed; + plugin_class->cleanup = fu_jabra_plugin_cleanup; } diff --git a/plugins/jabra/fu-jabra-plugin.h b/plugins/jabra/fu-jabra-plugin.h new file mode 100644 index 000000000..11839cf41 --- /dev/null +++ b/plugins/jabra/fu-jabra-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuJabraPlugin, fu_jabra_plugin, FU, JABRA_PLUGIN, FuPlugin) diff --git a/plugins/jabra/meson.build b/plugins/jabra/meson.build index 7d8852af7..f48a76208 100644 --- a/plugins/jabra/meson.build +++ b/plugins/jabra/meson.build @@ -2,27 +2,14 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginJabra"'] plugin_quirks += files('jabra.quirk') - -shared_module('fu_plugin_jabra', - fu_hash, +plugin_builtins += static_library('fu_plugin_jabra', sources: [ - 'fu-plugin-jabra.c', + 'fu-jabra-plugin.c', 'fu-jabra-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/kinetic-dp/fu-kinetic-dp-plugin.c b/plugins/kinetic-dp/fu-kinetic-dp-plugin.c new file mode 100644 index 000000000..e9bea3edb --- /dev/null +++ b/plugins/kinetic-dp/fu-kinetic-dp-plugin.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) FIXMEFIXMEFIXMEFIXMEFIXME + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-kinetic-dp-device.h" +#include "fu-kinetic-dp-plugin.h" + +struct _FuKineticDpPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuKineticDpPlugin, fu_kinetic_dp_plugin, FU_TYPE_PLUGIN) + +static void +fu_kinetic_dp_plugin_init(FuKineticDpPlugin *self) +{ +} + +static void +fu_kinetic_dp_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(FU_PLUGIN(self)); +} + +static void +fu_kinetic_dp_finalize(GObject *obj) +{ + FuKineticDpPlugin *self = FU_KINETIC_DP_PLUGIN(obj); + G_OBJECT_CLASS(fu_kinetic_dp_plugin_parent_class)->finalize(obj); +} + +static void +fu_kinetic_dp_plugin_class_init(FuKineticDpPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_kinetic_dp_plugin_constructed; + object_class->finalize = fu_kinetic_dp_finalize; + plugin_class->startup = fu_kinetic_dp_plugin_startup; +} diff --git a/plugins/kinetic-dp/fu-kinetic-dp-plugin.h b/plugins/kinetic-dp/fu-kinetic-dp-plugin.h new file mode 100644 index 000000000..41de2996e --- /dev/null +++ b/plugins/kinetic-dp/fu-kinetic-dp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuKineticDpPlugin, fu_kinetic_dp_plugin, FU, KINETIC_DP_PLUGIN, FuPlugin) diff --git a/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c b/plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.c similarity index 66% rename from plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c rename to plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.c index a1127d6a9..789c7ae02 100644 --- a/plugins/lenovo-thinklmi/fu-plugin-lenovo-thinklmi.c +++ b/plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.c @@ -6,13 +6,19 @@ #include "config.h" -#include +#include "fu-lenovo-thinklmi-plugin.h" + +struct _FuLenovoThinklmiPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuLenovoThinklmiPlugin, fu_lenovo_thinklmi_plugin, FU_TYPE_PLUGIN) #define SLEEP_MODE "com.thinklmi.SleepState" #define BOOT_ORDER_LOCK "com.thinklmi.BootOrderLock" static gboolean -fu_plugin_lenovo_thinklmi_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_lenovo_thinklmi_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { const gchar *hwid = fu_context_get_hwid_value(fu_plugin_get_context(plugin), FU_HWIDS_KEY_MANUFACTURER); @@ -28,7 +34,7 @@ fu_plugin_lenovo_thinklmi_startup(FuPlugin *plugin, FuProgress *progress, GError } static void -fu_plugin_lenovo_thinklmi_cpu_registered(FuContext *ctx, FuDevice *device) +fu_lenovo_thinklmi_plugin_cpu_registered(FuContext *ctx, FuDevice *device) { /* Ryzen 6000 doesn't support S3 even if the BIOS offers it */ if (fu_device_has_instance_id(device, "CPUID\\PRO_0&FAM_19&MOD_44")) { @@ -42,7 +48,7 @@ fu_plugin_lenovo_thinklmi_cpu_registered(FuContext *ctx, FuDevice *device) } static void -fu_plugin_lenovo_thinklmi_uefi_capsule_registered(FuContext *ctx, FuDevice *device) +fu_lenovo_thinklmi_plugin_uefi_capsule_registered(FuContext *ctx, FuDevice *device) { FwupdBiosSetting *attr; @@ -67,20 +73,25 @@ fu_plugin_lenovo_thinklmi_uefi_capsule_registered(FuContext *ctx, FuDevice *devi } static void -fu_plugin_lenovo_thinklmi_device_registered(FuPlugin *plugin, FuDevice *device) +fu_lenovo_thinklmi_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { if (g_strcmp0(fu_device_get_plugin(device), "uefi_capsule") == 0) { - fu_plugin_lenovo_thinklmi_uefi_capsule_registered(fu_plugin_get_context(plugin), + fu_lenovo_thinklmi_plugin_uefi_capsule_registered(fu_plugin_get_context(plugin), device); } else if (g_strcmp0(fu_device_get_plugin(device), "cpu") == 0) { - fu_plugin_lenovo_thinklmi_cpu_registered(fu_plugin_get_context(plugin), device); + fu_lenovo_thinklmi_plugin_cpu_registered(fu_plugin_get_context(plugin), device); } } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_lenovo_thinklmi_plugin_init(FuLenovoThinklmiPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->startup = fu_plugin_lenovo_thinklmi_startup; - vfuncs->device_registered = fu_plugin_lenovo_thinklmi_device_registered; +} + +static void +fu_lenovo_thinklmi_plugin_class_init(FuLenovoThinklmiPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->startup = fu_lenovo_thinklmi_plugin_startup; + plugin_class->device_registered = fu_lenovo_thinklmi_plugin_device_registered; } diff --git a/plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.h b/plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.h new file mode 100644 index 000000000..a2bf7f533 --- /dev/null +++ b/plugins/lenovo-thinklmi/fu-lenovo-thinklmi-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLenovoThinklmiPlugin, + fu_lenovo_thinklmi_plugin, + FU, + LENOVO_THINKLMI_PLUGIN, + FuPlugin) diff --git a/plugins/lenovo-thinklmi/fu-self-test.c b/plugins/lenovo-thinklmi/fu-self-test.c index 784b88119..55635d1b4 100644 --- a/plugins/lenovo-thinklmi/fu-self-test.c +++ b/plugins/lenovo-thinklmi/fu-self-test.c @@ -11,9 +11,11 @@ #include #include +#include "../uefi-capsule/fu-uefi-capsule-plugin.h" #include "fu-bios-settings-private.h" #include "fu-context-private.h" #include "fu-device-private.h" +#include "fu-lenovo-thinklmi-plugin.h" #include "fu-plugin-private.h" typedef struct { @@ -36,8 +38,6 @@ fu_test_self_init(FuTest *self, GError **error_global) g_autoptr(FuContext) ctx = fu_context_new(); g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(GError) error = NULL; - g_autofree gchar *pluginfn_uefi = NULL; - g_autofree gchar *pluginfn_lenovo = NULL; g_test_expect_message("FuBiosSettings", G_LOG_LEVEL_WARNING, "*KERNEL*BUG*"); @@ -54,34 +54,14 @@ fu_test_self_init(FuTest *self, GError **error_global) g_assert_true(ret); g_test_assert_expected_messages(); - self->plugin_uefi_capsule = fu_plugin_new(ctx); - pluginfn_uefi = g_test_build_filename(G_TEST_BUILT, - "..", - "uefi-capsule", - "libfu_plugin_uefi_capsule." G_MODULE_SUFFIX, - NULL); - if (!g_file_test(pluginfn_uefi, G_FILE_TEST_EXISTS)) { - g_set_error(error_global, - G_IO_ERROR, - G_IO_ERROR_NOT_FOUND, - "%s was not found", - pluginfn_uefi); - return FALSE; - } - ret = fu_plugin_open(self->plugin_uefi_capsule, pluginfn_uefi, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin_uefi_capsule = + fu_plugin_new_from_gtype(fu_uefi_capsule_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(self->plugin_uefi_capsule, progress, &error); g_assert_no_error(error); g_assert_true(ret); - self->plugin_lenovo_thinklmi = fu_plugin_new(ctx); - pluginfn_lenovo = g_test_build_filename(G_TEST_BUILT, - "libfu_plugin_lenovo_thinklmi." G_MODULE_SUFFIX, - NULL); - ret = fu_plugin_open(self->plugin_lenovo_thinklmi, pluginfn_lenovo, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin_lenovo_thinklmi = + fu_plugin_new_from_gtype(fu_lenovo_thinklmi_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(self->plugin_lenovo_thinklmi, progress, &error); g_assert_no_error(error); g_assert_true(ret); diff --git a/plugins/lenovo-thinklmi/meson.build b/plugins/lenovo-thinklmi/meson.build index f8e12fee6..af4535e5e 100644 --- a/plugins/lenovo-thinklmi/meson.build +++ b/plugins/lenovo-thinklmi/meson.build @@ -2,29 +2,18 @@ if get_option('plugin_uefi_capsule').disable_auto_if(host_machine.system() != 'l cargs = ['-DG_LOG_DOMAIN="FuPluginLenovoThinkLmi"'] -shared_module('fu_plugin_lenovo_thinklmi', - fu_hash, +plugin_builtin_lenovo_thinklmi = static_library('fu_plugin_lenovo_thinklmi', sources: [ - 'fu-plugin-lenovo-thinklmi.c', + 'fu-lenovo-thinklmi-plugin.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) +plugin_libs += plugin_builtin_lenovo_thinklmi if get_option('tests') env = environment() @@ -33,21 +22,16 @@ if get_option('tests') env.set('FWUPD_LOCALSTATEDIR', '/tmp/fwupd-self-test/var') e = executable( 'lenovo-thinklmi-self-test', - fu_hash, sources: [ 'fu-self-test.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, - ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ fwupd, fwupdplugin, + plugin_builtin_lenovo_thinklmi, + plugin_builtin_uefi_capsule, ], c_args: [ cargs, diff --git a/plugins/linux-lockdown/fu-plugin-linux-lockdown.c b/plugins/linux-lockdown/fu-linux-lockdown-plugin.c similarity index 51% rename from plugins/linux-lockdown/fu-plugin-linux-lockdown.c rename to plugins/linux-lockdown/fu-linux-lockdown-plugin.c index c7895d0ff..5081915cb 100644 --- a/plugins/linux-lockdown/fu-plugin-linux-lockdown.c +++ b/plugins/linux-lockdown/fu-linux-lockdown-plugin.c @@ -6,7 +6,7 @@ #include "config.h" -#include +#include "fu-linux-lockdown-plugin.h" typedef enum { FU_PLUGIN_LINUX_LOCKDOWN_UNKNOWN, @@ -16,32 +16,17 @@ typedef enum { FU_PLUGIN_LINUX_LOCKDOWN_CONFIDENTIALITY, } FuPluginLinuxLockdown; -struct FuPluginData { +struct _FuLinuxLockdownPlugin { + FuPlugin parent_instance; GFile *file; GFileMonitor *monitor; FuPluginLinuxLockdown lockdown; }; -static void -fu_plugin_linux_lockdown_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} - -static void -fu_plugin_linux_lockdown_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->file != NULL) - g_object_unref(priv->file); - if (priv->monitor != NULL) { - g_file_monitor_cancel(priv->monitor); - g_object_unref(priv->monitor); - } -} +G_DEFINE_TYPE(FuLinuxLockdownPlugin, fu_linux_lockdown_plugin, FU_TYPE_PLUGIN) static const gchar * -fu_plugin_linux_lockdown_to_string(FuPluginLinuxLockdown lockdown) +fu_linux_lockdown_plugin_to_string(FuPluginLinuxLockdown lockdown) { if (lockdown == FU_PLUGIN_LINUX_LOCKDOWN_NONE) return "none"; @@ -55,33 +40,33 @@ fu_plugin_linux_lockdown_to_string(FuPluginLinuxLockdown lockdown) } static void -fu_plugin_linux_lockdown_rescan(FuPlugin *plugin) +fu_linux_lockdown_plugin_rescan(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxLockdownPlugin *self = FU_LINUX_LOCKDOWN_PLUGIN(plugin); gsize bufsz = 0; g_autofree gchar *buf = NULL; /* load file */ - if (!g_file_load_contents(priv->file, NULL, &buf, &bufsz, NULL, NULL)) { - priv->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_INVALID; + if (!g_file_load_contents(self->file, NULL, &buf, &bufsz, NULL, NULL)) { + self->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_INVALID; } else if (g_strstr_len(buf, bufsz, "[none]") != NULL) { - priv->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_NONE; + self->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_NONE; } else if (g_strstr_len(buf, bufsz, "[integrity]") != NULL) { - priv->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_INTEGRITY; + self->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_INTEGRITY; } else if (g_strstr_len(buf, bufsz, "[confidentiality]") != NULL) { - priv->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_CONFIDENTIALITY; + self->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_CONFIDENTIALITY; } else { - priv->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_UNKNOWN; + self->lockdown = FU_PLUGIN_LINUX_LOCKDOWN_UNKNOWN; } /* update metadata */ fu_plugin_add_report_metadata(plugin, "LinuxLockdown", - fu_plugin_linux_lockdown_to_string(priv->lockdown)); + fu_linux_lockdown_plugin_to_string(self->lockdown)); } static void -fu_plugin_linux_lockdown_changed_cb(GFileMonitor *monitor, +fu_linux_lockdown_plugin_changed_cb(GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, @@ -89,14 +74,14 @@ fu_plugin_linux_lockdown_changed_cb(GFileMonitor *monitor, { FuPlugin *plugin = FU_PLUGIN(user_data); FuContext *ctx = fu_plugin_get_context(plugin); - fu_plugin_linux_lockdown_rescan(plugin); + fu_linux_lockdown_plugin_rescan(plugin); fu_context_security_changed(ctx); } static gboolean -fu_plugin_linux_lockdown_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_linux_lockdown_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxLockdownPlugin *self = FU_LINUX_LOCKDOWN_PLUGIN(plugin); g_autofree gchar *path = NULL; g_autofree gchar *fn = NULL; @@ -109,22 +94,22 @@ fu_plugin_linux_lockdown_startup(FuPlugin *plugin, FuProgress *progress, GError "Kernel doesn't offer lockdown support."); return FALSE; } - priv->file = g_file_new_for_path(fn); - priv->monitor = g_file_monitor(priv->file, G_FILE_MONITOR_NONE, NULL, error); - if (priv->monitor == NULL) + self->file = g_file_new_for_path(fn); + self->monitor = g_file_monitor(self->file, G_FILE_MONITOR_NONE, NULL, error); + if (self->monitor == NULL) return FALSE; - g_signal_connect(G_FILE_MONITOR(priv->monitor), + g_signal_connect(G_FILE_MONITOR(self->monitor), "changed", - G_CALLBACK(fu_plugin_linux_lockdown_changed_cb), + G_CALLBACK(fu_linux_lockdown_plugin_changed_cb), plugin); - fu_plugin_linux_lockdown_rescan(plugin); + fu_linux_lockdown_plugin_rescan(plugin); return TRUE; } static void -fu_plugin_linux_lockdown_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_linux_lockdown_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxLockdownPlugin *self = FU_LINUX_LOCKDOWN_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ @@ -132,17 +117,17 @@ fu_plugin_linux_lockdown_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *a fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_RUNTIME_ISSUE); fu_security_attrs_append(attrs, attr); - if (priv == NULL || priv->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_UNKNOWN) { + if (self->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_UNKNOWN) { fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); return; } /* load file */ - if (priv->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_INVALID) { + if (self->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_INVALID) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); return; } - if (priv->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_NONE) { + if (self->lockdown == FU_PLUGIN_LINUX_LOCKDOWN_NONE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_OS); return; @@ -154,19 +139,38 @@ fu_plugin_linux_lockdown_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *a } static void -fu_plugin_linux_lockdown_to_string2(FuPlugin *plugin, guint idt, GString *str) +fu_linux_lockdown_plugin_to_string2(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append(str, idt, "Lockdown", fu_plugin_linux_lockdown_to_string(priv->lockdown)); + FuLinuxLockdownPlugin *self = FU_LINUX_LOCKDOWN_PLUGIN(plugin); + fu_string_append(str, idt, "Lockdown", fu_linux_lockdown_plugin_to_string(self->lockdown)); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_linux_lockdown_plugin_init(FuLinuxLockdownPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_linux_lockdown_init; - vfuncs->destroy = fu_plugin_linux_lockdown_destroy; - vfuncs->to_string = fu_plugin_linux_lockdown_to_string2; - vfuncs->startup = fu_plugin_linux_lockdown_startup; - vfuncs->add_security_attrs = fu_plugin_linux_lockdown_add_security_attrs; +} + +static void +fu_linux_lockdown_finalize(GObject *obj) +{ + FuLinuxLockdownPlugin *self = FU_LINUX_LOCKDOWN_PLUGIN(obj); + if (self->file != NULL) + g_object_unref(self->file); + if (self->monitor != NULL) { + g_file_monitor_cancel(self->monitor); + g_object_unref(self->monitor); + } + G_OBJECT_CLASS(fu_linux_lockdown_plugin_parent_class)->finalize(obj); +} + +static void +fu_linux_lockdown_plugin_class_init(FuLinuxLockdownPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_linux_lockdown_finalize; + plugin_class->to_string = fu_linux_lockdown_plugin_to_string2; + plugin_class->startup = fu_linux_lockdown_plugin_startup; + plugin_class->add_security_attrs = fu_linux_lockdown_plugin_add_security_attrs; } diff --git a/plugins/linux-lockdown/fu-linux-lockdown-plugin.h b/plugins/linux-lockdown/fu-linux-lockdown-plugin.h new file mode 100644 index 000000000..b62657638 --- /dev/null +++ b/plugins/linux-lockdown/fu-linux-lockdown-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLinuxLockdownPlugin, + fu_linux_lockdown_plugin, + FU, + LINUX_LOCKDOWN_PLUGIN, + FuPlugin) diff --git a/plugins/linux-lockdown/meson.build b/plugins/linux-lockdown/meson.build index 00427b825..0a6d26be0 100644 --- a/plugins/linux-lockdown/meson.build +++ b/plugins/linux-lockdown/meson.build @@ -1,25 +1,13 @@ if hsi cargs = ['-DG_LOG_DOMAIN="FuPluginLinuxLockdown"'] -shared_module('fu_plugin_linux_lockdown', - fu_hash, +plugin_builtins += static_library('fu_plugin_linux_lockdown', sources: [ - 'fu-plugin-linux-lockdown.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-linux-lockdown-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/linux-sleep/fu-plugin-linux-sleep.c b/plugins/linux-sleep/fu-linux-sleep-plugin.c similarity index 71% rename from plugins/linux-sleep/fu-plugin-linux-sleep.c rename to plugins/linux-sleep/fu-linux-sleep-plugin.c index a79301611..7fb78c9b7 100644 --- a/plugins/linux-sleep/fu-plugin-linux-sleep.c +++ b/plugins/linux-sleep/fu-linux-sleep-plugin.c @@ -6,10 +6,16 @@ #include "config.h" -#include +#include "fu-linux-sleep-plugin.h" + +struct _FuLinuxSleepPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuLinuxSleepPlugin, fu_linux_sleep_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_linux_sleep_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_linux_sleep_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { gsize bufsz = 0; g_autofree gchar *buf = NULL; @@ -40,9 +46,14 @@ fu_plugin_linux_sleep_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attr fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_linux_sleep_plugin_init(FuLinuxSleepPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->add_security_attrs = fu_plugin_linux_sleep_add_security_attrs; +} + +static void +fu_linux_sleep_plugin_class_init(FuLinuxSleepPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->add_security_attrs = fu_linux_sleep_plugin_add_security_attrs; } diff --git a/plugins/linux-sleep/fu-linux-sleep-plugin.h b/plugins/linux-sleep/fu-linux-sleep-plugin.h new file mode 100644 index 000000000..807838965 --- /dev/null +++ b/plugins/linux-sleep/fu-linux-sleep-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLinuxSleepPlugin, fu_linux_sleep_plugin, FU, LINUX_SLEEP_PLUGIN, FuPlugin) diff --git a/plugins/linux-sleep/meson.build b/plugins/linux-sleep/meson.build index e0fad0e32..d509f27d6 100644 --- a/plugins/linux-sleep/meson.build +++ b/plugins/linux-sleep/meson.build @@ -1,25 +1,13 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginLinuxSleep"'] -shared_module('fu_plugin_linux_sleep', - fu_hash, +plugin_builtins += static_library('fu_plugin_linux_sleep', sources: [ - 'fu-plugin-linux-sleep.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-linux-sleep-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/linux-swap/fu-plugin-linux-swap.c b/plugins/linux-swap/fu-linux-swap-plugin.c similarity index 60% rename from plugins/linux-swap/fu-plugin-linux-swap.c rename to plugins/linux-swap/fu-linux-swap-plugin.c index b98c3b288..03134b1ae 100644 --- a/plugins/linux-swap/fu-plugin-linux-swap.c +++ b/plugins/linux-swap/fu-linux-swap-plugin.c @@ -6,35 +6,19 @@ #include "config.h" -#include - +#include "fu-linux-swap-plugin.h" #include "fu-linux-swap.h" -struct FuPluginData { +struct _FuLinuxSwapPlugin { + FuPlugin parent_instance; GFile *file; GFileMonitor *monitor; }; -static void -fu_plugin_linux_swap_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} +G_DEFINE_TYPE(FuLinuxSwapPlugin, fu_linux_swap_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_linux_swap_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->file != NULL) - g_object_unref(priv->file); - if (priv->monitor != NULL) { - g_file_monitor_cancel(priv->monitor); - g_object_unref(priv->monitor); - } -} - -static void -fu_plugin_linux_swap_changed_cb(GFileMonitor *monitor, +fu_linux_swap_plugin_changed_cb(GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, @@ -46,9 +30,9 @@ fu_plugin_linux_swap_changed_cb(GFileMonitor *monitor, } static gboolean -fu_plugin_linux_swap_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_linux_swap_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxSwapPlugin *self = FU_LINUX_SWAP_PLUGIN(plugin); g_autofree gchar *fn = NULL; g_autofree gchar *procfs = NULL; @@ -61,28 +45,28 @@ fu_plugin_linux_swap_startup(FuPlugin *plugin, FuProgress *progress, GError **er "Kernel doesn't offer swap support."); return FALSE; } - priv->file = g_file_new_for_path(fn); - priv->monitor = g_file_monitor(priv->file, G_FILE_MONITOR_NONE, NULL, error); - if (priv->monitor == NULL) + self->file = g_file_new_for_path(fn); + self->monitor = g_file_monitor(self->file, G_FILE_MONITOR_NONE, NULL, error); + if (self->monitor == NULL) return FALSE; - g_signal_connect(G_FILE_MONITOR(priv->monitor), + g_signal_connect(G_FILE_MONITOR(self->monitor), "changed", - G_CALLBACK(fu_plugin_linux_swap_changed_cb), + G_CALLBACK(fu_linux_swap_plugin_changed_cb), plugin); return TRUE; } static void -fu_plugin_linux_swap_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_linux_swap_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxSwapPlugin *self = FU_LINUX_SWAP_PLUGIN(plugin); gsize bufsz = 0; g_autofree gchar *buf = NULL; g_autoptr(FuLinuxSwap) swap = NULL; g_autoptr(FwupdSecurityAttr) attr = NULL; g_autoptr(GError) error_local = NULL; - if (priv == NULL || priv->file == NULL) + if (self->file == NULL) return; /* create attr */ @@ -91,15 +75,15 @@ fu_plugin_linux_swap_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs fu_security_attrs_append(attrs, attr); /* load list of swaps */ - if (!g_file_load_contents(priv->file, NULL, &buf, &bufsz, NULL, &error_local)) { - g_autofree gchar *fn = g_file_get_path(priv->file); + if (!g_file_load_contents(self->file, NULL, &buf, &bufsz, NULL, &error_local)) { + g_autofree gchar *fn = g_file_get_path(self->file); g_warning("could not open %s: %s", fn, error_local->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); return; } swap = fu_linux_swap_new(buf, bufsz, &error_local); if (swap == NULL) { - g_autofree gchar *fn = g_file_get_path(priv->file); + g_autofree gchar *fn = g_file_get_path(self->file); g_warning("could not parse %s: %s", fn, error_local->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); return; @@ -124,12 +108,31 @@ fu_plugin_linux_swap_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENCRYPTED); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_linux_swap_plugin_init(FuLinuxSwapPlugin *self) { - 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; +} + +static void +fu_linux_swap_finalize(GObject *obj) +{ + FuLinuxSwapPlugin *self = FU_LINUX_SWAP_PLUGIN(obj); + if (self->file != NULL) + g_object_unref(self->file); + if (self->monitor != NULL) { + g_file_monitor_cancel(self->monitor); + g_object_unref(self->monitor); + } + G_OBJECT_CLASS(fu_linux_swap_plugin_parent_class)->finalize(obj); +} + +static void +fu_linux_swap_plugin_class_init(FuLinuxSwapPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_linux_swap_finalize; + plugin_class->startup = fu_linux_swap_plugin_startup; + plugin_class->add_security_attrs = fu_linux_swap_plugin_add_security_attrs; } diff --git a/plugins/linux-swap/fu-linux-swap-plugin.h b/plugins/linux-swap/fu-linux-swap-plugin.h new file mode 100644 index 000000000..499c679bf --- /dev/null +++ b/plugins/linux-swap/fu-linux-swap-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLinuxSwapPlugin, fu_linux_swap_plugin, FU, LINUX_SWAP_PLUGIN, FuPlugin) diff --git a/plugins/linux-swap/meson.build b/plugins/linux-swap/meson.build index 644a8359c..457a72f9c 100644 --- a/plugins/linux-swap/meson.build +++ b/plugins/linux-swap/meson.build @@ -1,48 +1,29 @@ if hsi cargs = ['-DG_LOG_DOMAIN="FuPluginLinuxSwap"'] -shared_module('fu_plugin_linux_swap', - fu_hash, +plugin_builtin_linux_swap = static_library('fu_plugin_linux_swap', sources: [ - 'fu-plugin-linux-swap.c', + 'fu-linux-swap-plugin.c', 'fu-linux-swap.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_linux_swap if get_option('tests') e = executable( 'linux-swap-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-linux-swap.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_linux_swap, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/linux-tainted/fu-plugin-linux-tainted.c b/plugins/linux-tainted/fu-linux-tainted-plugin.c similarity index 69% rename from plugins/linux-tainted/fu-plugin-linux-tainted.c rename to plugins/linux-tainted/fu-linux-tainted-plugin.c index ace6719ef..573899616 100644 --- a/plugins/linux-tainted/fu-plugin-linux-tainted.c +++ b/plugins/linux-tainted/fu-linux-tainted-plugin.c @@ -6,13 +6,16 @@ #include "config.h" -#include +#include "fu-linux-tainted-plugin.h" -struct FuPluginData { +struct _FuLinuxTaintedPlugin { + FuPlugin parent_instance; GFile *file; GFileMonitor *monitor; }; +G_DEFINE_TYPE(FuLinuxTaintedPlugin, fu_linux_tainted_plugin, FU_TYPE_PLUGIN) + #define KERNEL_TAINT_FLAG_PROPRIETARY_MODULE (1 << 0) #define KERNEL_TAINT_FLAG_MODULE_FORCE_LOAD (1 << 1) #define KERNEL_TAINT_FLAG_KERNEL_OUT_OF_SPEC (1 << 2) @@ -34,25 +37,7 @@ struct FuPluginData { #define KERNEL_TAINT_FLAG_IN_KERNEL_TEST (1 << 18) static void -fu_plugin_linux_tainted_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} - -static void -fu_plugin_linux_tainted_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->file != NULL) - g_object_unref(priv->file); - if (priv->monitor != NULL) { - g_file_monitor_cancel(priv->monitor); - g_object_unref(priv->monitor); - } -} - -static void -fu_plugin_linux_tainted_changed_cb(GFileMonitor *monitor, +fu_linux_tainted_plugin_changed_cb(GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, @@ -64,29 +49,29 @@ fu_plugin_linux_tainted_changed_cb(GFileMonitor *monitor, } static gboolean -fu_plugin_linux_tainted_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_linux_tainted_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxTaintedPlugin *self = FU_LINUX_TAINTED_PLUGIN(plugin); g_autofree gchar *fn = NULL; g_autofree gchar *procfs = NULL; procfs = fu_path_from_kind(FU_PATH_KIND_PROCFS); fn = g_build_filename(procfs, "sys", "kernel", "tainted", NULL); - priv->file = g_file_new_for_path(fn); - priv->monitor = g_file_monitor(priv->file, G_FILE_MONITOR_NONE, NULL, error); - if (priv->monitor == NULL) + self->file = g_file_new_for_path(fn); + self->monitor = g_file_monitor(self->file, G_FILE_MONITOR_NONE, NULL, error); + if (self->monitor == NULL) return FALSE; - g_signal_connect(G_FILE_MONITOR(priv->monitor), + g_signal_connect(G_FILE_MONITOR(self->monitor), "changed", - G_CALLBACK(fu_plugin_linux_tainted_changed_cb), + G_CALLBACK(fu_linux_tainted_plugin_changed_cb), plugin); return TRUE; } static void -fu_plugin_linux_tainted_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_linux_tainted_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLinuxTaintedPlugin *self = FU_LINUX_TAINTED_PLUGIN(plugin); gsize bufsz = 0; guint64 value = 0; g_autofree gchar *buf = NULL; @@ -99,14 +84,9 @@ fu_plugin_linux_tainted_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *at fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_RUNTIME_ISSUE); fu_security_attrs_append(attrs, attr); - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* load file */ - if (!g_file_load_contents(priv->file, NULL, &buf, &bufsz, NULL, &error_local)) { - g_autofree gchar *fn = g_file_get_path(priv->file); + if (!g_file_load_contents(self->file, NULL, &buf, &bufsz, NULL, &error_local)) { + g_autofree gchar *fn = g_file_get_path(self->file); g_warning("could not open %s: %s", fn, error_local->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); return; @@ -139,12 +119,31 @@ fu_plugin_linux_tainted_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *at fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_TAINTED); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_linux_tainted_plugin_init(FuLinuxTaintedPlugin *self) { - 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; +} + +static void +fu_linux_tainted_finalize(GObject *obj) +{ + FuLinuxTaintedPlugin *self = FU_LINUX_TAINTED_PLUGIN(obj); + if (self->file != NULL) + g_object_unref(self->file); + if (self->monitor != NULL) { + g_file_monitor_cancel(self->monitor); + g_object_unref(self->monitor); + } + G_OBJECT_CLASS(fu_linux_tainted_plugin_parent_class)->finalize(obj); +} + +static void +fu_linux_tainted_plugin_class_init(FuLinuxTaintedPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_linux_tainted_finalize; + plugin_class->startup = fu_linux_tainted_plugin_startup; + plugin_class->add_security_attrs = fu_linux_tainted_plugin_add_security_attrs; } diff --git a/plugins/linux-tainted/fu-linux-tainted-plugin.h b/plugins/linux-tainted/fu-linux-tainted-plugin.h new file mode 100644 index 000000000..eff6818e6 --- /dev/null +++ b/plugins/linux-tainted/fu-linux-tainted-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLinuxTaintedPlugin, + fu_linux_tainted_plugin, + FU, + LINUX_TAINTED_PLUGIN, + FuPlugin) diff --git a/plugins/linux-tainted/meson.build b/plugins/linux-tainted/meson.build index 5026824af..3796410e6 100644 --- a/plugins/linux-tainted/meson.build +++ b/plugins/linux-tainted/meson.build @@ -1,25 +1,13 @@ if hsi cargs = ['-DG_LOG_DOMAIN="FuPluginLinuxTainted"'] -shared_module('fu_plugin_linux_tainted', - fu_hash, +plugin_builtins += static_library('fu_plugin_linux_tainted', sources: [ - 'fu-plugin-linux-tainted.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-linux-tainted-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/logind/fu-plugin-logind.c b/plugins/logind/fu-logind-plugin.c similarity index 52% rename from plugins/logind/fu-plugin-logind.c rename to plugins/logind/fu-logind-plugin.c index b1620c0c6..cd9b8f1de 100644 --- a/plugins/logind/fu-plugin-logind.c +++ b/plugins/logind/fu-logind-plugin.c @@ -6,46 +6,33 @@ #include "config.h" -#include - #include #include -struct FuPluginData { +#include "fu-logind-plugin.h" + +struct _FuLogindPlugin { + FuPlugin parent_instance; GDBusProxy *logind_proxy; gint logind_fd; }; -static void -fu_plugin_logind_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} +G_DEFINE_TYPE(FuLogindPlugin, fu_logind_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_logind_destroy(FuPlugin *plugin) +fu_logind_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->logind_fd != 0) - g_close(priv->logind_fd, NULL); - if (priv->logind_proxy != NULL) - g_object_unref(priv->logind_proxy); -} - -static void -fu_plugin_logind_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_kx(str, idt, "LogindFd", priv->logind_fd); + FuLogindPlugin *self = FU_LOGIND_PLUGIN(plugin); + fu_string_append_kx(str, idt, "LogindFd", self->logind_fd); } static gboolean -fu_plugin_logind_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_logind_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLogindPlugin *self = FU_LOGIND_PLUGIN(plugin); g_autofree gchar *name_owner = NULL; - priv->logind_proxy = g_dbus_proxy_new_for_bus_sync( + self->logind_proxy = g_dbus_proxy_new_for_bus_sync( G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, @@ -54,30 +41,30 @@ fu_plugin_logind_startup(FuPlugin *plugin, FuProgress *progress, GError **error) "org.freedesktop.login1.Manager", NULL, error); - if (priv->logind_proxy == NULL) { + if (self->logind_proxy == NULL) { g_prefix_error(error, "failed to connect to logind: "); return FALSE; } - name_owner = g_dbus_proxy_get_name_owner(priv->logind_proxy); + name_owner = g_dbus_proxy_get_name_owner(self->logind_proxy); if (name_owner == NULL) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "no owner for %s", - g_dbus_proxy_get_name(priv->logind_proxy)); + g_dbus_proxy_get_name(self->logind_proxy)); return FALSE; } return TRUE; } static gboolean -fu_plugin_logind_prepare(FuPlugin *plugin, +fu_logind_plugin_prepare(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuLogindPlugin *self = FU_LOGIND_PLUGIN(plugin); g_autoptr(GError) error_local = NULL; g_autoptr(GUnixFDList) out_fd_list = NULL; g_autoptr(GVariant) res = NULL; @@ -85,18 +72,18 @@ fu_plugin_logind_prepare(FuPlugin *plugin, "handle-hibernate-key:handle-lid-switch"; /* already inhibited */ - if (priv->logind_fd != 0) + if (self->logind_fd != 0) return TRUE; /* not yet connected */ - if (priv->logind_proxy == NULL) { + if (self->logind_proxy == NULL) { g_warning("no logind connection to use"); return TRUE; } /* block shutdown and idle */ res = g_dbus_proxy_call_with_unix_fd_list_sync( - priv->logind_proxy, + self->logind_proxy, "Inhibit", g_variant_new("(ssss)", what, PACKAGE_NAME, "Firmware Update in Progress", "block"), G_DBUS_CALL_FLAGS_NONE, @@ -115,36 +102,53 @@ fu_plugin_logind_prepare(FuPlugin *plugin, g_warning("invalid response from logind"); return TRUE; } - priv->logind_fd = g_unix_fd_list_get(out_fd_list, 0, NULL); - g_debug("opened logind fd %i", priv->logind_fd); + self->logind_fd = g_unix_fd_list_get(out_fd_list, 0, NULL); + g_debug("opened logind fd %i", self->logind_fd); return TRUE; } static gboolean -fu_plugin_logind_cleanup(FuPlugin *plugin, +fu_logind_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->logind_fd == 0) + FuLogindPlugin *self = FU_LOGIND_PLUGIN(plugin); + if (self->logind_fd == 0) return TRUE; - g_debug("closed logind fd %i", priv->logind_fd); - if (!g_close(priv->logind_fd, error)) + g_debug("closed logind fd %i", self->logind_fd); + if (!g_close(self->logind_fd, error)) return FALSE; - priv->logind_fd = 0; + self->logind_fd = 0; return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_logind_plugin_init(FuLogindPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_logind_init; - vfuncs->destroy = fu_plugin_logind_destroy; - vfuncs->to_string = fu_plugin_logind_to_string; - vfuncs->startup = fu_plugin_logind_startup; - vfuncs->cleanup = fu_plugin_logind_cleanup; - vfuncs->prepare = fu_plugin_logind_prepare; +} + +static void +fu_logind_finalize(GObject *obj) +{ + FuLogindPlugin *self = FU_LOGIND_PLUGIN(obj); + if (self->logind_fd != 0) + g_close(self->logind_fd, NULL); + if (self->logind_proxy != NULL) + g_object_unref(self->logind_proxy); + G_OBJECT_CLASS(fu_logind_plugin_parent_class)->finalize(obj); +} + +static void +fu_logind_plugin_class_init(FuLogindPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_logind_finalize; + plugin_class->to_string = fu_logind_plugin_to_string; + plugin_class->startup = fu_logind_plugin_startup; + plugin_class->cleanup = fu_logind_plugin_cleanup; + plugin_class->prepare = fu_logind_plugin_prepare; } diff --git a/plugins/logind/fu-logind-plugin.h b/plugins/logind/fu-logind-plugin.h new file mode 100644 index 000000000..8f576a2d5 --- /dev/null +++ b/plugins/logind/fu-logind-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLogindPlugin, fu_logind_plugin, FU, LOGIND_PLUGIN, FuPlugin) diff --git a/plugins/logind/meson.build b/plugins/logind/meson.build index ebf65e46d..22a8bfdcb 100644 --- a/plugins/logind/meson.build +++ b/plugins/logind/meson.build @@ -1,25 +1,13 @@ if libsystemd.found() or elogind.found() cargs = ['-DG_LOG_DOMAIN="FuPluginLogind"'] -shared_module('fu_plugin_logind', - fu_hash, +plugin_builtins += static_library('fu_plugin_logind', sources: [ - 'fu-plugin-logind.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-logind-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.c b/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.c new file mode 100644 index 000000000..804a875d5 --- /dev/null +++ b/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 1999-2021 Logitech, Inc. + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-logitech-bulkcontroller-device.h" +#include "fu-logitech-bulkcontroller-plugin.h" + +struct _FuLogitechBulkcontrollerPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuLogitechBulkcontrollerPlugin, fu_logitech_bulkcontroller_plugin, FU_TYPE_PLUGIN) + +static void +fu_logitech_bulkcontroller_plugin_init(FuLogitechBulkcontrollerPlugin *self) +{ +} + +static void +fu_logitech_bulkcontroller_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_LOGITECH_BULKCONTROLLER_DEVICE); +} + +static void +fu_logitech_bulkcontroller_plugin_class_init(FuLogitechBulkcontrollerPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_logitech_bulkcontroller_plugin_constructed; +} diff --git a/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.h b/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.h new file mode 100644 index 000000000..1d8a66f61 --- /dev/null +++ b/plugins/logitech-bulkcontroller/fu-logitech-bulkcontroller-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLogitechBulkcontrollerPlugin, + fu_logitech_bulkcontroller_plugin, + FU, + LOGITECH_BULKCONTROLLER_PLUGIN, + FuPlugin) diff --git a/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c b/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c deleted file mode 100644 index b93b745dd..000000000 --- a/plugins/logitech-bulkcontroller/fu-plugin-logitech-bulkcontroller.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 1999-2021 Logitech, Inc. - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-logitech-bulkcontroller-device.h" - -static void -fu_plugin_logitech_bulkcontroller_init(FuPlugin *plugin) -{ - 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-bulkcontroller/meson.build b/plugins/logitech-bulkcontroller/meson.build index 6aaef8191..1adec88d3 100644 --- a/plugins/logitech-bulkcontroller/meson.build +++ b/plugins/logitech-bulkcontroller/meson.build @@ -5,28 +5,16 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginLogitechBulkController"'] plugin_quirks += files('logitech-bulkcontroller.quirk') subdir('proto') -shared_module('fu_plugin_logitech_bulkcontroller', - fu_hash, +plugin_builtins += static_library('fu_plugin_logitech_bulkcontroller', sources: [ generated, 'fu-logitech-bulkcontroller-common.c', 'fu-logitech-bulkcontroller-device.c', - 'fu-plugin-logitech-bulkcontroller.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-logitech-bulkcontroller-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c b/plugins/logitech-hidpp/fu-logitech-hidpp-plugin.c similarity index 62% rename from plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c rename to plugins/logitech-hidpp/fu-logitech-hidpp-plugin.c index d484db420..613f7c266 100644 --- a/plugins/logitech-hidpp/fu-plugin-logitech-hidpp.c +++ b/plugins/logitech-hidpp/fu-logitech-hidpp-plugin.c @@ -6,17 +6,22 @@ #include "config.h" -#include - #include "fu-logitech-hidpp-bootloader-nordic.h" #include "fu-logitech-hidpp-bootloader-texas.h" #include "fu-logitech-hidpp-common.h" #include "fu-logitech-hidpp-device.h" +#include "fu-logitech-hidpp-plugin.h" #include "fu-logitech-hidpp-runtime-bolt.h" #include "fu-logitech-hidpp-runtime-unifying.h" +struct _FuLogitechHidppPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuLogitechHidppPlugin, fu_logitech_hidpp_plugin, FU_TYPE_PLUGIN) + static gboolean -fu_plugin_logitech_hidpp_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_logitech_hidpp_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { /* check the kernel has CONFIG_HIDRAW */ if (!g_file_test("/sys/class/hidraw", G_FILE_TEST_IS_DIR)) { @@ -30,8 +35,16 @@ fu_plugin_logitech_hidpp_startup(FuPlugin *plugin, FuProgress *progress, GError } static void -fu_plugin_logitech_hidpp_init(FuPlugin *plugin) +fu_logitech_hidpp_plugin_init(FuLogitechHidppPlugin *self) { +} + +static void +fu_logitech_hidpp_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "LogitechHidppModelId"); 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); @@ -42,16 +55,10 @@ fu_plugin_logitech_hidpp_init(FuPlugin *plugin) } static void -fu_plugin_logitech_hidpp_load(FuContext *ctx) +fu_logitech_hidpp_plugin_class_init(FuLogitechHidppPluginClass *klass) { - fu_context_add_quirk_key(ctx, "LogitechHidppModelId"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_logitech_hidpp_load; - vfuncs->init = fu_plugin_logitech_hidpp_init; - vfuncs->startup = fu_plugin_logitech_hidpp_startup; + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_logitech_hidpp_plugin_constructed; + plugin_class->startup = fu_logitech_hidpp_plugin_startup; } diff --git a/plugins/logitech-hidpp/fu-logitech-hidpp-plugin.h b/plugins/logitech-hidpp/fu-logitech-hidpp-plugin.h new file mode 100644 index 000000000..5876ced80 --- /dev/null +++ b/plugins/logitech-hidpp/fu-logitech-hidpp-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuLogitechHidppPlugin, + fu_logitech_hidpp_plugin, + FU, + LOGITECH_HIDPP_PLUGIN, + FuPlugin) diff --git a/plugins/logitech-hidpp/meson.build b/plugins/logitech-hidpp/meson.build index 6743fa259..7b47afd5e 100644 --- a/plugins/logitech-hidpp/meson.build +++ b/plugins/logitech-hidpp/meson.build @@ -2,11 +2,9 @@ if gudev.found() and gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginLogitechHidPp"'] plugin_quirks += files('logitech-hidpp.quirk') - -shared_module('fu_plugin_logitech_hidpp', - fu_hash, +plugin_builtin_logitech_hidpp = static_library('fu_plugin_logitech_hidpp', sources: [ - 'fu-plugin-logitech-hidpp.c', + 'fu-logitech-hidpp-plugin.c', 'fu-logitech-hidpp-bootloader.c', 'fu-logitech-hidpp-bootloader-nordic.c', 'fu-logitech-hidpp-bootloader-texas.c', @@ -19,42 +17,24 @@ shared_module('fu_plugin_logitech_hidpp', 'fu-logitech-hidpp-runtime-bolt.c', 'fu-logitech-hidpp-radio.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_logitech_hidpp if get_option('tests') e = executable( 'logitech-hidpp-self-test', - fu_hash, sources: [ 'fu-logitech-hidpp-self-test.c', - 'fu-logitech-hidpp-common.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_logitech_hidpp, ], c_args: cargs, ) diff --git a/plugins/meson.build b/plugins/meson.build index e68e5231c..703b20c43 100644 --- a/plugins/meson.build +++ b/plugins/meson.build @@ -12,6 +12,9 @@ plugin_deps = [ protobufc, ] +# this is used by lenovo-thinklmi and dell +subdir('uefi-capsule') + subdir('acpi-dmar') subdir('acpi-facp') subdir('acpi-ivrs') @@ -91,7 +94,6 @@ subdir('test') subdir('thelio-io') subdir('thunderbolt') subdir('tpm') -subdir('uefi-capsule') subdir('uefi-dbx') subdir('uefi-pk') subdir('uefi-recovery') diff --git a/plugins/migrate.py b/plugins/migrate.py new file mode 100755 index 000000000..227623ccd --- /dev/null +++ b/plugins/migrate.py @@ -0,0 +1,132 @@ +#!/usr/bin/python3 +# +# Copyright (C) 2022 Richard Hughes +# +# SPDX-License-Identifier: LGPL-2.1+ +# +# pylint: disable=invalid-name,missing-docstring,consider-using-f-string + +import glob +import os +import sys +import subprocess + + +def _convert(plugin_namespace: str, inp: str) -> str: + + template_snake = plugin_namespace.replace("-", "_") + template_camel = "".join(part.title() for part in plugin_namespace.split("-")) + template_upper = template_snake.upper() + + return ( + inp.replace("xxx", template_snake) + .replace( + "fu_plugin_{}_".format(template_snake), + "fu_{}_plugin_".format(template_snake), + ) + .replace("plugin_class", "plugin_class") + .replace("Xxx", template_camel) + .replace("XXX", template_upper) + ) + + +templateh = """/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuXxxPlugin, fu_xxx_plugin, FU, XXX_PLUGIN, FuPlugin) +""" + +templatec = """/* + * Copyright (C) FIXMEFIXMEFIXMEFIXMEFIXME + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-xxx-device.h" +#include "fu-xxx-plugin.h" + +struct _FuXxxPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuXxxPlugin, fu_xxx_plugin, FU_TYPE_PLUGIN) + +static void +fu_xxx_plugin_init(FuXxxPlugin *self) +{ +} + +static void +fu_xxx_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); +} + +static void +fu_xxx_finalize(GObject *obj) +{ + FuXxxPlugin *self = FU_XXX_PLUGIN(obj); + G_OBJECT_CLASS(fu_xxx_plugin_parent_class)->finalize(obj); +} + +static void +fu_xxx_plugin_class_init(FuXxxPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_xxx_constructed; + object_class->finalize = fu_xxx_finalize; + plugin_class->startup = fu_xxx_plugin_startup; +} +""" + +if len(sys.argv) > 1: + plugins = sys.argv[1:] +else: + plugins = sorted(glob.iglob("*")) + +for dirname in plugins: + + basename = dirname.replace("/", "") + if not os.path.isdir(basename): + continue + + plugin_namespace = { + "pixart-rf": "pxi", + "synaptics-prometheus": "synaprom", + "wacom-usb": "wac", + "goodix-moc": "goodixmoc", + }.get(basename, basename) + + newfnc = os.path.join(basename, "fu-{}-plugin.c".format(plugin_namespace)) + newfnh = os.path.join(basename, "fu-{}-plugin.h".format(plugin_namespace)) + + if not os.path.exists(newfnh): + with open(newfnh, "w") as f: + f.write(_convert(plugin_namespace, templateh)) + if not os.path.exists(newfnc): + with open(newfnc, "w") as f: + f.write(_convert(plugin_namespace, templatec)) + subprocess.run( + [ + "geany", + newfnc, + os.path.join(basename, "fu-plugin-{}.c".format(plugin_namespace)), + ] + ) + else: + with open(newfnc, "r") as f: + data = f.read() + with open(newfnc, "w") as f: + f.write(_convert(plugin_namespace, data)) diff --git a/plugins/modem-manager/meson.build b/plugins/modem-manager/meson.build index 2c0e724a8..f7e6f7591 100644 --- a/plugins/modem-manager/meson.build +++ b/plugins/modem-manager/meson.build @@ -24,20 +24,11 @@ shared_module('fu_plugin_modem_manager', 'fu-sahara-loader.c', 'fu-mm-utils.c' ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, install: true, install_dir: plugin_dir, - c_args: [ - cargs, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + c_args: cargs, + link_with: plugin_libs, dependencies: [ plugin_deps, libmm_glib, diff --git a/plugins/msr/fu-plugin-msr.c b/plugins/msr/fu-msr-plugin.c similarity index 78% rename from plugins/msr/fu-plugin-msr.c rename to plugins/msr/fu-msr-plugin.c index a412e0334..c3e2568e6 100644 --- a/plugins/msr/fu-plugin-msr.c +++ b/plugins/msr/fu-msr-plugin.c @@ -6,10 +6,10 @@ #include "config.h" -#include - #include +#include "fu-msr-plugin.h" + typedef union { guint32 data; struct { @@ -53,7 +53,8 @@ typedef union { } __attribute__((packed)) fields; } FuMsrAMD64Sev; -struct FuPluginData { +struct _FuMsrPlugin { + FuPlugin parent_instance; gboolean ia32_debug_supported; gboolean ia32_tme_supported; FuMsrIa32Debug ia32_debug; @@ -64,6 +65,8 @@ struct FuPluginData { FuMsrAMD64Sev amd64_sev; }; +G_DEFINE_TYPE(FuMsrPlugin, fu_msr_plugin, FU_TYPE_PLUGIN) + #define PCI_MSR_IA32_DEBUG_INTERFACE 0xc80 #define PCI_MSR_IA32_TME_ACTIVATION 0x982 #define PCI_MSR_IA32_BIOS_SIGN_ID 0x8b @@ -71,62 +74,55 @@ struct FuPluginData { #define PCI_MSR_AMD64_SEV 0xC0010131 static void -fu_plugin_msr_init(FuPlugin *plugin) +fu_msr_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - fu_plugin_add_udev_subsystem(plugin, "msr"); -} - -static void -fu_plugin_msr_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->ia32_debug_supported) { + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); + if (self->ia32_debug_supported) { fu_string_append_kb(str, idt, "Ia32DebugInterfaceEnabled", - priv->ia32_debug.fields.enabled); + self->ia32_debug.fields.enabled); fu_string_append_kb(str, idt, "Ia32DebugInterfaceLocked", - priv->ia32_debug.fields.locked); + self->ia32_debug.fields.locked); fu_string_append_kb(str, idt, "Ia32DebugInterfaceDebugOccurred", - priv->ia32_debug.fields.debug_occurred); + self->ia32_debug.fields.debug_occurred); } - if (priv->ia32_tme_supported) { + if (self->ia32_tme_supported) { fu_string_append_kb(str, idt, "Ia32TmeActivateLockRo", - priv->ia32_tme_activation.fields.lock_ro); + self->ia32_tme_activation.fields.lock_ro); fu_string_append_kb(str, idt, "Ia32TmeActivateEnable", - priv->ia32_tme_activation.fields.enable); + self->ia32_tme_activation.fields.enable); fu_string_append_kb(str, idt, "Ia32TmeActivateBypassEnable", - priv->ia32_tme_activation.fields.bypass_enable); + self->ia32_tme_activation.fields.bypass_enable); } - if (priv->amd64_syscfg_supported) { + if (self->amd64_syscfg_supported) { fu_string_append_kb(str, idt, "Amd64SyscfgSmeIsEnabled", - priv->amd64_syscfg.fields.sme_is_enabled); + self->amd64_syscfg.fields.sme_is_enabled); } - if (priv->amd64_sev_supported) { + if (self->amd64_sev_supported) { fu_string_append_kb(str, idt, "Amd64SevIsEnabled", - priv->amd64_sev.fields.sev_is_enabled); + self->amd64_sev.fields.sev_is_enabled); } } static gboolean -fu_plugin_msr_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_msr_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); guint eax = 0; guint ebx = 0; guint ecx = 0; @@ -143,10 +139,10 @@ fu_plugin_msr_startup(FuPlugin *plugin, FuProgress *progress, GError **error) if (fu_cpu_get_vendor() == FU_CPU_VENDOR_INTEL) { if (!fu_cpuid(0x01, NULL, NULL, &ecx, NULL, error)) return FALSE; - priv->ia32_debug_supported = ((ecx >> 11) & 0x1) > 0; + self->ia32_debug_supported = ((ecx >> 11) & 0x1) > 0; if (!fu_cpuid(0x07, NULL, NULL, &ecx, NULL, error)) return FALSE; - priv->ia32_tme_supported = ((ecx >> 13) & 0x1) > 0; + self->ia32_tme_supported = ((ecx >> 13) & 0x1) > 0; } /* indicates support for SME and SEV */ @@ -154,18 +150,18 @@ fu_plugin_msr_startup(FuPlugin *plugin, FuProgress *progress, GError **error) if (!fu_cpuid(0x8000001f, &eax, &ebx, NULL, NULL, error)) return FALSE; g_debug("SME/SEV check MSR: eax 0%x, ebx 0%x", eax, ebx); - priv->amd64_syscfg_supported = ((eax >> 0) & 0x1) > 0; - priv->amd64_sev_supported = ((eax >> 1) & 0x1) > 0; + self->amd64_syscfg_supported = ((eax >> 0) & 0x1) > 0; + self->amd64_sev_supported = ((eax >> 1) & 0x1) > 0; } return TRUE; } static gboolean -fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_msr_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); FuDevice *device_cpu = fu_plugin_cache_lookup(plugin, "cpu"); - FuPluginData *priv = fu_plugin_get_data(plugin); guint8 buf[8] = {0x0}; g_autoptr(FuDeviceLocker) locker = NULL; g_autofree gchar *basename = NULL; @@ -188,7 +184,7 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** return FALSE; /* grab Intel MSR */ - if (priv->ia32_debug_supported) { + if (self->ia32_debug_supported) { if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_MSR_IA32_DEBUG_INTERFACE, buf, @@ -200,12 +196,12 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** if (!fu_memread_uint32_safe(buf, sizeof(buf), 0x0, - &priv->ia32_debug.data, + &self->ia32_debug.data, G_LITTLE_ENDIAN, error)) return FALSE; } - if (priv->ia32_tme_supported) { + if (self->ia32_tme_supported) { if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_MSR_IA32_TME_ACTIVATION, buf, @@ -217,14 +213,14 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** if (!fu_memread_uint64_safe(buf, sizeof(buf), 0x0, - &priv->ia32_tme_activation.data, + &self->ia32_tme_activation.data, G_LITTLE_ENDIAN, error)) return FALSE; } /* grab AMD MSRs */ - if (priv->amd64_syscfg_supported) { + if (self->amd64_syscfg_supported) { if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_MSR_AMD64_SYSCFG, buf, @@ -236,12 +232,12 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** if (!fu_memread_uint32_safe(buf, sizeof(buf), 0x0, - &priv->amd64_syscfg.data, + &self->amd64_syscfg.data, G_LITTLE_ENDIAN, error)) return FALSE; } - if (priv->amd64_sev_supported) { + if (self->amd64_sev_supported) { if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_MSR_AMD64_SEV, buf, @@ -253,7 +249,7 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** if (!fu_memread_uint32_safe(buf, sizeof(buf), 0x0, - &priv->amd64_sev.data, + &self->amd64_sev.data, G_LITTLE_ENDIAN, error)) return FALSE; @@ -298,7 +294,7 @@ fu_plugin_msr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError ** } static void -fu_plugin_msr_device_registered(FuPlugin *plugin, FuDevice *dev) +fu_msr_plugin_device_registered(FuPlugin *plugin, FuDevice *dev) { if (g_strcmp0(fu_device_get_plugin(dev), "cpu") == 0) { fu_plugin_cache_add(plugin, "cpu", dev); @@ -309,7 +305,7 @@ fu_plugin_msr_device_registered(FuPlugin *plugin, FuDevice *dev) static void fu_plugin_add_security_attr_dci_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); FuDevice *device = fu_plugin_cache_lookup(plugin, "cpu"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -323,19 +319,13 @@ fu_plugin_add_security_attr_dci_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs fwupd_security_attr_add_guids(attr, fu_device_get_guids(device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* check fields */ - if (!priv->ia32_debug_supported) { + if (!self->ia32_debug_supported) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); return; } - if (priv->ia32_debug.fields.enabled) { + if (self->ia32_debug.fields.enabled) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -349,7 +339,7 @@ fu_plugin_add_security_attr_dci_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs static void fu_plugin_add_security_attr_intel_tme_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* this MSR is only valid for a subset of Intel CPUs */ @@ -363,30 +353,24 @@ fu_plugin_add_security_attr_intel_tme_enabled(FuPlugin *plugin, FuSecurityAttrs fu_security_attrs_append(attrs, attr); } - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* check fields */ - if (!priv->ia32_tme_supported) { + if (!self->ia32_tme_supported) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } - if (!priv->ia32_tme_activation.fields.enable) { + if (!self->ia32_tme_activation.fields.enable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); fwupd_security_attr_remove_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); return; } - if (priv->ia32_tme_activation.fields.bypass_enable) { + if (self->ia32_tme_activation.fields.bypass_enable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENCRYPTED); fwupd_security_attr_remove_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); return; } - if (!priv->ia32_tme_activation.fields.lock_ro) { + if (!self->ia32_tme_activation.fields.lock_ro) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_LOCKED); fwupd_security_attr_remove_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); @@ -397,7 +381,7 @@ fu_plugin_add_security_attr_intel_tme_enabled(FuPlugin *plugin, FuSecurityAttrs static void fu_plugin_add_security_attr_dci_locked(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); FuDevice *device = fu_plugin_cache_lookup(plugin, "cpu"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -411,19 +395,13 @@ fu_plugin_add_security_attr_dci_locked(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_guids(attr, fu_device_get_guids(device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* check fields */ - if (!priv->ia32_debug_supported) { + if (!self->ia32_debug_supported) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); return; } - if (!priv->ia32_debug.fields.locked) { + if (!self->ia32_debug.fields.locked) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_LOCKED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -435,7 +413,7 @@ fu_plugin_add_security_attr_dci_locked(FuPlugin *plugin, FuSecurityAttrs *attrs) } static gboolean -fu_plugin_msr_safe_kernel_for_sme(FuPlugin *plugin, GError **error) +fu_msr_plugin_safe_kernel_for_sme(FuPlugin *plugin, GError **error) { g_autofree gchar *min = fu_plugin_get_config_value(plugin, "MinimumSmeKernelVersion"); @@ -447,7 +425,7 @@ fu_plugin_msr_safe_kernel_for_sme(FuPlugin *plugin, GError **error) } static gboolean -fu_plugin_msr_kernel_enabled_sme(GError **error) +fu_msr_plugin_kernel_enabled_sme(GError **error) { g_autofree gchar *buf = NULL; gsize bufsz = 0; @@ -471,7 +449,7 @@ fu_plugin_msr_kernel_enabled_sme(GError **error) static void fu_plugin_add_security_attr_amd_sme_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuMsrPlugin *self = FU_MSR_PLUGIN(plugin); FuDevice *device = fu_plugin_cache_lookup(plugin, "cpu"); g_autoptr(FwupdSecurityAttr) attr = NULL; g_autoptr(GError) error_local = NULL; @@ -486,32 +464,26 @@ fu_plugin_add_security_attr_amd_sme_enabled(FuPlugin *plugin, FuSecurityAttrs *a fwupd_security_attr_add_guids(attr, fu_device_get_guids(device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* check fields */ - if (!priv->amd64_syscfg_supported) { + if (!self->amd64_syscfg_supported) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } - if (!priv->amd64_syscfg.fields.sme_is_enabled) { + if (!self->amd64_syscfg.fields.sme_is_enabled) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENCRYPTED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; } - if (!fu_plugin_msr_safe_kernel_for_sme(plugin, &error_local)) { + if (!fu_msr_plugin_safe_kernel_for_sme(plugin, &error_local)) { g_debug("Unable to properly detect SME: %s", error_local->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_UNKNOWN); return; } - if (!(fu_plugin_msr_kernel_enabled_sme(&error_local))) { + if (!(fu_msr_plugin_kernel_enabled_sme(&error_local))) { g_debug("%s", error_local->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENCRYPTED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_OS); @@ -525,7 +497,7 @@ fu_plugin_add_security_attr_amd_sme_enabled(FuPlugin *plugin, FuSecurityAttrs *a } static void -fu_plugin_msr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_msr_plugin_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); @@ -533,14 +505,28 @@ fu_plugin_msr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fu_plugin_add_security_attr_intel_tme_enabled(plugin, attrs); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_msr_plugin_init(FuMsrPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_msr_init; - vfuncs->to_string = fu_plugin_msr_to_string; - 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; +} + +static void +fu_msr_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "msr"); +} + +static void +fu_msr_plugin_class_init(FuMsrPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_msr_plugin_constructed; + plugin_class->to_string = fu_msr_plugin_to_string; + plugin_class->startup = fu_msr_plugin_startup; + plugin_class->backend_device_added = fu_msr_plugin_backend_device_added; + plugin_class->add_security_attrs = fu_msr_plugin_add_security_attrs; + plugin_class->device_registered = fu_msr_plugin_device_registered; } diff --git a/plugins/msr/fu-msr-plugin.h b/plugins/msr/fu-msr-plugin.h new file mode 100644 index 000000000..f283e832a --- /dev/null +++ b/plugins/msr/fu-msr-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuMsrPlugin, fu_msr_plugin, FU, MSR_PLUGIN, FuPlugin) diff --git a/plugins/msr/meson.build b/plugins/msr/meson.build index 8a57a54e0..23ec5ec82 100644 --- a/plugins/msr/meson.build +++ b/plugins/msr/meson.build @@ -12,25 +12,13 @@ endif install_data(['msr.conf'], install_dir: join_paths(sysconfdir, 'fwupd') ) -shared_module('fu_plugin_msr', - fu_hash, +plugin_builtins += static_library('fu_plugin_msr', sources: [ - 'fu-plugin-msr.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-msr-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/mtd/fu-mtd-plugin.c b/plugins/mtd/fu-mtd-plugin.c new file mode 100644 index 000000000..43091d128 --- /dev/null +++ b/plugins/mtd/fu-mtd-plugin.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2021 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-mtd-device.h" +#include "fu-mtd-plugin.h" + +struct _FuMtdPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuMtdPlugin, fu_mtd_plugin, FU_TYPE_PLUGIN) + +static gboolean +fu_mtd_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +{ +#ifndef HAVE_MTD_USER_H + g_set_error_literal(error, + FWUPD_ERROR, + FWUPD_ERROR_NOT_SUPPORTED, + "Not compiled with mtd support"); + return FALSE; +#endif + return TRUE; +} + +static void +fu_mtd_plugin_init(FuMtdPlugin *self) +{ +} + +static void +fu_mtd_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "mtd"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_MTD_DEVICE); +} + +static void +fu_mtd_plugin_class_init(FuMtdPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_mtd_plugin_constructed; + plugin_class->startup = fu_mtd_plugin_startup; +} diff --git a/plugins/mtd/fu-mtd-plugin.h b/plugins/mtd/fu-mtd-plugin.h new file mode 100644 index 000000000..d097010f8 --- /dev/null +++ b/plugins/mtd/fu-mtd-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuMtdPlugin, fu_mtd_plugin, FU, MTD_PLUGIN, FuPlugin) diff --git a/plugins/mtd/fu-plugin-mtd.c b/plugins/mtd/fu-plugin-mtd.c deleted file mode 100644 index a4d67430a..000000000 --- a/plugins/mtd/fu-plugin-mtd.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2021 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-mtd-device.h" - -static void -fu_plugin_mtd_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "mtd"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_MTD_DEVICE); -} - -static gboolean -fu_plugin_mtd_startup(FuPlugin *plugin, FuProgress *progress, GError **error) -{ -#ifndef HAVE_MTD_USER_H - g_set_error_literal(error, - FWUPD_ERROR, - FWUPD_ERROR_NOT_SUPPORTED, - "Not compiled with mtd support"); - return FALSE; -#endif - 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; -} diff --git a/plugins/mtd/meson.build b/plugins/mtd/meson.build index 72fb625ec..bec9cb739 100644 --- a/plugins/mtd/meson.build +++ b/plugins/mtd/meson.build @@ -2,49 +2,30 @@ if get_option('plugin_mtd').disable_auto_if(host_machine.system() != 'linux').al cargs = ['-DG_LOG_DOMAIN="FuPluginMtd"'] plugin_quirks += files('mtd.quirk') - -shared_module('fu_plugin_mtd', - fu_hash, +plugin_builtin_mtd = static_library('fu_plugin_mtd', sources: [ - 'fu-plugin-mtd.c', + 'fu-mtd-plugin.c', 'fu-mtd-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_mtd if get_option('tests') e = executable( 'mtd-self-test', sources: [ 'fu-self-test.c', - 'fu-mtd-device.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_mtd, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/nitrokey/fu-nitrokey-plugin.c b/plugins/nitrokey/fu-nitrokey-plugin.c new file mode 100644 index 000000000..53c76ad01 --- /dev/null +++ b/plugins/nitrokey/fu-nitrokey-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2017 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-nitrokey-device.h" +#include "fu-nitrokey-plugin.h" + +struct _FuNitrokeyPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuNitrokeyPlugin, fu_nitrokey_plugin, FU_TYPE_PLUGIN) + +static void +fu_nitrokey_plugin_init(FuNitrokeyPlugin *self) +{ +} + +static void +fu_nitrokey_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_NITROKEY_DEVICE); +} + +static void +fu_nitrokey_plugin_class_init(FuNitrokeyPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_nitrokey_plugin_constructed; +} diff --git a/plugins/nitrokey/fu-nitrokey-plugin.h b/plugins/nitrokey/fu-nitrokey-plugin.h new file mode 100644 index 000000000..9394de94e --- /dev/null +++ b/plugins/nitrokey/fu-nitrokey-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuNitrokeyPlugin, fu_nitrokey_plugin, FU, NITROKEY_PLUGIN, FuPlugin) diff --git a/plugins/nitrokey/fu-plugin-nitrokey.c b/plugins/nitrokey/fu-plugin-nitrokey.c deleted file mode 100644 index 971cfdd86..000000000 --- a/plugins/nitrokey/fu-plugin-nitrokey.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2017 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-nitrokey-common.h" -#include "fu-nitrokey-device.h" - -static void -fu_plugin_nitrokey_init(FuPlugin *plugin) -{ - 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/nitrokey/meson.build b/plugins/nitrokey/meson.build index d65c70faa..be25aa0de 100644 --- a/plugins/nitrokey/meson.build +++ b/plugins/nitrokey/meson.build @@ -2,50 +2,33 @@ if get_option('plugin_nitrokey').disable_auto_if(host_machine.system() != 'linux cargs = ['-DG_LOG_DOMAIN="FuPluginNitrokey"'] plugin_quirks += files('nitrokey.quirk') - -shared_module('fu_plugin_nitrokey', - fu_hash, +plugin_builtin_nitrokey = static_library('fu_plugin_nitrokey', sources: [ 'fu-nitrokey-device.c', 'fu-nitrokey-common.c', - 'fu-plugin-nitrokey.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-nitrokey-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_nitrokey if get_option('tests') e = executable( 'nitrokey-self-test', - fu_hash, sources: [ - 'fu-nitrokey-common.c', 'fu-self-test.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, valgrind, ], link_with: [ - fwupdplugin, + plugin_libs, + plugin_builtin_nitrokey, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/nordic-hid/fu-plugin-nordic-hid.c b/plugins/nordic-hid/fu-nordic-hid-plugin.c similarity index 58% rename from plugins/nordic-hid/fu-plugin-nordic-hid.c rename to plugins/nordic-hid/fu-nordic-hid-plugin.c index abe8c2789..de87c2a76 100644 --- a/plugins/nordic-hid/fu-plugin-nordic-hid.c +++ b/plugins/nordic-hid/fu-nordic-hid-plugin.c @@ -6,16 +6,29 @@ #include "config.h" -#include - #include "fu-nordic-hid-archive.h" #include "fu-nordic-hid-cfg-channel.h" #include "fu-nordic-hid-firmware-b0.h" #include "fu-nordic-hid-firmware-mcuboot.h" +#include "fu-nordic-hid-plugin.h" + +struct _FuNordicHidPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuNordicHidPlugin, fu_nordic_hid_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_nordic_hid_init(FuPlugin *plugin) +fu_nordic_hid_plugin_init(FuNordicHidPlugin *self) { +} + +static void +fu_nordic_hid_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "NordicHidBootloader"); fu_plugin_add_udev_subsystem(plugin, "hidraw"); fu_plugin_add_device_gtype(plugin, FU_TYPE_NORDIC_HID_CFG_CHANNEL); fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_NORDIC_HID_ARCHIVE); @@ -24,15 +37,8 @@ fu_plugin_nordic_hid_init(FuPlugin *plugin) } static void -fu_plugin_nordic_hid_load(FuContext *ctx) +fu_nordic_hid_plugin_class_init(FuNordicHidPluginClass *klass) { - fu_context_add_quirk_key(ctx, "NordicHidBootloader"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_nordic_hid_load; - vfuncs->init = fu_plugin_nordic_hid_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_nordic_hid_plugin_constructed; } diff --git a/plugins/nordic-hid/fu-nordic-hid-plugin.h b/plugins/nordic-hid/fu-nordic-hid-plugin.h new file mode 100644 index 000000000..9aabaecea --- /dev/null +++ b/plugins/nordic-hid/fu-nordic-hid-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuNordicHidPlugin, fu_nordic_hid_plugin, FU, NORDIC_HID_PLUGIN, FuPlugin) diff --git a/plugins/nordic-hid/meson.build b/plugins/nordic-hid/meson.build index 09b169cdb..b33a61551 100644 --- a/plugins/nordic-hid/meson.build +++ b/plugins/nordic-hid/meson.build @@ -2,31 +2,18 @@ if gudev.found() and gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginNordicHid"'] plugin_quirks += files('nordic-hid.quirk') - -shared_module('fu_plugin_nordic_hid', - fu_hash, +plugin_builtins += static_library('fu_plugin_nordic_hid', sources: [ - 'fu-plugin-nordic-hid.c', + 'fu-nordic-hid-plugin.c', 'fu-nordic-hid-cfg-channel.c', 'fu-nordic-hid-firmware.c', 'fu-nordic-hid-firmware-b0.c', 'fu-nordic-hid-firmware-mcuboot.c', 'fu-nordic-hid-archive.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/nvme/fu-nvme-plugin.c b/plugins/nvme/fu-nvme-plugin.c new file mode 100644 index 000000000..ef136f713 --- /dev/null +++ b/plugins/nvme/fu-nvme-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-nvme-device.h" +#include "fu-nvme-plugin.h" + +struct _FuNvmePlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuNvmePlugin, fu_nvme_plugin, FU_TYPE_PLUGIN) + +static void +fu_nvme_plugin_init(FuNvmePlugin *self) +{ +} + +static void +fu_nvme_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "nvme"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_NVME_DEVICE); +} + +static void +fu_nvme_plugin_class_init(FuNvmePluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_nvme_plugin_constructed; +} diff --git a/plugins/nvme/fu-nvme-plugin.h b/plugins/nvme/fu-nvme-plugin.h new file mode 100644 index 000000000..05d22a8cd --- /dev/null +++ b/plugins/nvme/fu-nvme-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuNvmePlugin, fu_nvme_plugin, FU, NVME_PLUGIN, FuPlugin) diff --git a/plugins/nvme/fu-plugin-nvme.c b/plugins/nvme/fu-plugin-nvme.c deleted file mode 100644 index fbc5d0586..000000000 --- a/plugins/nvme/fu-plugin-nvme.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2018 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-nvme-device.h" - -static void -fu_plugin_nvme_init(FuPlugin *plugin) -{ - 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/nvme/meson.build b/plugins/nvme/meson.build index cec5e0181..7259ceda5 100644 --- a/plugins/nvme/meson.build +++ b/plugins/nvme/meson.build @@ -6,33 +6,21 @@ if nvme_header and \ cargs = ['-DG_LOG_DOMAIN="FuPluginNvme"'] plugin_quirks += files('nvme.quirk') - -shared_module('fu_plugin_nvme', - fu_hash, +plugin_builtin_nvme = static_library('fu_plugin_nvme', sources: [ - 'fu-plugin-nvme.c', + 'fu-nvme-plugin.c', 'fu-nvme-common.c', 'fu-nvme-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_nvme if get_option('tests') env = environment() @@ -41,23 +29,14 @@ if get_option('tests') env.set('FWUPD_DATADIR_QUIRKS', meson.current_source_dir()) e = executable( 'nvme-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-nvme-common.c', - 'fu-nvme-device.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_nvme, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/optionrom/fu-optionrom-plugin.c b/plugins/optionrom/fu-optionrom-plugin.c new file mode 100644 index 000000000..7aa6b8979 --- /dev/null +++ b/plugins/optionrom/fu-optionrom-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2015-2016 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-optionrom-device.h" +#include "fu-optionrom-plugin.h" + +struct _FuOptionromPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuOptionromPlugin, fu_optionrom_plugin, FU_TYPE_PLUGIN) + +static void +fu_optionrom_plugin_init(FuOptionromPlugin *self) +{ +} + +static void +fu_optionrom_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + 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); +} + +static void +fu_optionrom_plugin_class_init(FuOptionromPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_optionrom_plugin_constructed; +} diff --git a/plugins/optionrom/fu-optionrom-plugin.h b/plugins/optionrom/fu-optionrom-plugin.h new file mode 100644 index 000000000..7ba9f80b1 --- /dev/null +++ b/plugins/optionrom/fu-optionrom-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuOptionromPlugin, fu_optionrom_plugin, FU, OPTIONROM_PLUGIN, FuPlugin) diff --git a/plugins/optionrom/fu-plugin-optionrom.c b/plugins/optionrom/fu-plugin-optionrom.c deleted file mode 100644 index 5535ca60e..000000000 --- a/plugins/optionrom/fu-plugin-optionrom.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2015-2016 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-optionrom-device.h" - -static void -fu_plugin_optionrom_init(FuPlugin *plugin) -{ - 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/optionrom/meson.build b/plugins/optionrom/meson.build index 91cc85e7f..0026f24c2 100644 --- a/plugins/optionrom/meson.build +++ b/plugins/optionrom/meson.build @@ -2,27 +2,14 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginOptionrom"'] plugin_quirks += files('optionrom.quirk') - -shared_module('fu_plugin_optionrom', - fu_hash, +plugin_builtins += static_library('fu_plugin_optionrom', sources: [ - 'fu-plugin-optionrom.c', + 'fu-optionrom-plugin.c', 'fu-optionrom-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/parade-lspcon/fu-parade-lspcon-plugin.c b/plugins/parade-lspcon/fu-parade-lspcon-plugin.c new file mode 100644 index 000000000..06e934076 --- /dev/null +++ b/plugins/parade-lspcon/fu-parade-lspcon-plugin.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 Peter Marheine + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-parade-lspcon-device.h" +#include "fu-parade-lspcon-plugin.h" + +struct _FuParadeLspconPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuParadeLspconPlugin, fu_parade_lspcon_plugin, FU_TYPE_PLUGIN) + +static void +fu_parade_lspcon_plugin_init(FuParadeLspconPlugin *self) +{ +} + +static void +fu_parade_lspcon_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "ParadeLspconAuxDeviceName"); + fu_plugin_add_udev_subsystem(plugin, "i2c"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_PARADE_LSPCON_DEVICE); +} + +static void +fu_parade_lspcon_plugin_class_init(FuParadeLspconPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_parade_lspcon_plugin_constructed; +} diff --git a/plugins/parade-lspcon/fu-parade-lspcon-plugin.h b/plugins/parade-lspcon/fu-parade-lspcon-plugin.h new file mode 100644 index 000000000..1682fec25 --- /dev/null +++ b/plugins/parade-lspcon/fu-parade-lspcon-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuParadeLspconPlugin, + fu_parade_lspcon_plugin, + FU, + PARADE_LSPCON_PLUGIN, + FuPlugin) diff --git a/plugins/parade-lspcon/fu-plugin-parade-lspcon.c b/plugins/parade-lspcon/fu-plugin-parade-lspcon.c deleted file mode 100644 index f135e6546..000000000 --- a/plugins/parade-lspcon/fu-plugin-parade-lspcon.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2021 Peter Marheine - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include "fu-parade-lspcon-device.h" - -static void -fu_plugin_parade_lspcon_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "ParadeLspconAuxDeviceName"); -} - -static void -fu_plugin_parade_lspcon_init(FuPlugin *plugin) -{ - 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->load = fu_plugin_parade_lspcon_load; - vfuncs->init = fu_plugin_parade_lspcon_init; -} diff --git a/plugins/parade-lspcon/meson.build b/plugins/parade-lspcon/meson.build index 5130ad7d3..dae891179 100644 --- a/plugins/parade-lspcon/meson.build +++ b/plugins/parade-lspcon/meson.build @@ -4,30 +4,17 @@ if get_option('plugin_parade_lspcon').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginParadeLspcon"'] plugin_quirks += files('parade-lspcon.quirk') - -shared_module('fu_plugin_parade_lspcon', - fu_hash, +plugin_builtins += static_library('fu_plugin_parade_lspcon', sources: [ 'fu-parade-lspcon-device.c', - 'fu-plugin-parade-lspcon.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-parade-lspcon-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/pci-bcr/fu-plugin-pci-bcr.c b/plugins/pci-bcr/fu-pci-bcr-plugin.c similarity index 66% rename from plugins/pci-bcr/fu-plugin-pci-bcr.c rename to plugins/pci-bcr/fu-pci-bcr-plugin.c index 3b2405e70..201decfd9 100644 --- a/plugins/pci-bcr/fu-plugin-pci-bcr.c +++ b/plugins/pci-bcr/fu-pci-bcr-plugin.c @@ -6,48 +6,35 @@ #include "config.h" -#include +#include "fu-pci-bcr-plugin.h" -struct FuPluginData { +struct _FuPciBcrPlugin { + FuPlugin parent_instance; gboolean has_device; guint8 bcr_addr; guint8 bcr; }; +G_DEFINE_TYPE(FuPciBcrPlugin, fu_pci_bcr_plugin, FU_TYPE_PLUGIN) + #define BCR_WPD (1 << 0) #define BCR_BLE (1 << 1) #define BCR_SMM_BWP (1 << 5) static void -fu_plugin_pci_bcr_load(FuContext *ctx) +fu_pci_bcr_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - fu_context_add_quirk_key(ctx, "PciBcrAddr"); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); + fu_string_append_kb(str, idt, "HasDevice", self->has_device); + fu_string_append_kx(str, idt, "BcrAddr", self->bcr_addr); + fu_string_append_kx(str, idt, "Bcr", self->bcr); } static void -fu_plugin_pci_bcr_init(FuPlugin *plugin) +fu_pci_bcr_plugin_set_updatable(FuPlugin *plugin, FuDevice *dev) { - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - fu_plugin_add_udev_subsystem(plugin, "pci"); - - /* this is true except for some Atoms */ - priv->bcr_addr = 0xdc; -} - -static void -fu_plugin_pci_bcr_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_kb(str, idt, "HasDevice", priv->has_device); - fu_string_append_kx(str, idt, "BcrAddr", priv->bcr_addr); - fu_string_append_kx(str, idt, "Bcr", priv->bcr); -} - -static void -fu_plugin_pci_bcr_set_updatable(FuPlugin *plugin, FuDevice *dev) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if ((priv->bcr & BCR_WPD) == 0 && (priv->bcr & BCR_BLE) > 0) { + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); + if ((self->bcr & BCR_WPD) == 0 && (self->bcr & BCR_BLE) > 0) { fu_device_inhibit(dev, "bcr-locked", "BIOS locked"); } else { fu_device_uninhibit(dev, "bcr-locked"); @@ -55,22 +42,22 @@ fu_plugin_pci_bcr_set_updatable(FuPlugin *plugin, FuDevice *dev) } static void -fu_plugin_pci_bcr_device_registered(FuPlugin *plugin, FuDevice *dev) +fu_pci_bcr_plugin_device_registered(FuPlugin *plugin, FuDevice *dev) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); if (g_strcmp0(fu_device_get_plugin(dev), "cpu") == 0 || g_strcmp0(fu_device_get_plugin(dev), "flashrom") == 0) { guint tmp = fu_device_get_metadata_integer(dev, "PciBcrAddr"); - if (tmp != G_MAXUINT && priv->bcr_addr != tmp) { - g_debug("overriding BCR addr from 0x%02x to 0x%02x", priv->bcr_addr, tmp); - priv->bcr_addr = tmp; + if (tmp != G_MAXUINT && self->bcr_addr != tmp) { + g_debug("overriding BCR addr from 0x%02x to 0x%02x", self->bcr_addr, tmp); + self->bcr_addr = tmp; } } if (g_strcmp0(fu_device_get_plugin(dev), "flashrom") == 0 && fu_device_has_instance_id(dev, "main-system-firmware")) { /* PCI\VEN_8086 added first */ - if (priv->has_device) { - fu_plugin_pci_bcr_set_updatable(plugin, dev); + if (self->has_device) { + fu_pci_bcr_plugin_set_updatable(plugin, dev); return; } fu_plugin_cache_add(plugin, "main-system-firmware", dev); @@ -80,7 +67,7 @@ fu_plugin_pci_bcr_device_registered(FuPlugin *plugin, FuDevice *dev) static void fu_plugin_add_security_attr_bioswe(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); FuDevice *msf_device = fu_plugin_cache_lookup(plugin, "main-system-firmware"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -90,20 +77,14 @@ fu_plugin_add_security_attr_bioswe(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_guids(attr, fu_device_get_guids(msf_device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (!priv->has_device) { + if (!self->has_device) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* load file */ - if ((priv->bcr & BCR_WPD) == 1) { + if ((self->bcr & BCR_WPD) == 1) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_ENABLED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -117,7 +98,7 @@ fu_plugin_add_security_attr_bioswe(FuPlugin *plugin, FuSecurityAttrs *attrs) static void fu_plugin_add_security_attr_ble(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); FuDevice *msf_device = fu_plugin_cache_lookup(plugin, "main-system-firmware"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -127,20 +108,14 @@ fu_plugin_add_security_attr_ble(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_guids(attr, fu_device_get_guids(msf_device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (!priv->has_device) { + if (!self->has_device) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* load file */ - if ((priv->bcr & BCR_BLE) == 0) { + if ((self->bcr & BCR_BLE) == 0) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); return; } @@ -153,7 +128,7 @@ fu_plugin_add_security_attr_ble(FuPlugin *plugin, FuSecurityAttrs *attrs) static void fu_plugin_add_security_attr_smm_bwp(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); FuDevice *msf_device = fu_plugin_cache_lookup(plugin, "main-system-firmware"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -163,20 +138,14 @@ fu_plugin_add_security_attr_smm_bwp(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_guids(attr, fu_device_get_guids(msf_device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (!priv->has_device) { + if (!self->has_device) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* load file */ - if ((priv->bcr & BCR_SMM_BWP) == 0) { + if ((self->bcr & BCR_SMM_BWP) == 0) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_LOCKED); return; } @@ -187,14 +156,14 @@ fu_plugin_add_security_attr_smm_bwp(FuPlugin *plugin, FuSecurityAttrs *attrs) } static gboolean -fu_plugin_pci_bcr_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_pci_bcr_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciBcrPlugin *self = FU_PCI_BCR_PLUGIN(plugin); FuDevice *device_msf; g_autoptr(FuDeviceLocker) locker = NULL; /* not supported */ - if (priv->bcr_addr == 0x0) { + if (self->bcr_addr == 0x0) { g_set_error_literal(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, @@ -217,7 +186,7 @@ fu_plugin_pci_bcr_backend_device_added(FuPlugin *plugin, FuDevice *device, GErro return FALSE; /* grab BIOS Control Register */ - if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), priv->bcr_addr, &priv->bcr, 1, error)) { + if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), self->bcr_addr, &self->bcr, 1, error)) { g_prefix_error(error, "could not read BCR: "); return FALSE; } @@ -225,15 +194,15 @@ fu_plugin_pci_bcr_backend_device_added(FuPlugin *plugin, FuDevice *device, GErro /* main-system-firmware device added first, probably from flashrom */ device_msf = fu_plugin_cache_lookup(plugin, "main-system-firmware"); if (device_msf != NULL) - fu_plugin_pci_bcr_set_updatable(plugin, device_msf); + fu_pci_bcr_plugin_set_updatable(plugin, device_msf); /* success */ - priv->has_device = TRUE; + self->has_device = TRUE; return TRUE; } static void -fu_plugin_pci_bcr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_pci_bcr_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { /* only Intel */ if (fu_cpu_get_vendor() != FU_CPU_VENDOR_INTEL) @@ -245,14 +214,30 @@ fu_plugin_pci_bcr_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fu_plugin_add_security_attr_smm_bwp(plugin, attrs); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_pci_bcr_plugin_init(FuPciBcrPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_pci_bcr_load; - vfuncs->init = fu_plugin_pci_bcr_init; - vfuncs->to_string = fu_plugin_pci_bcr_to_string; - 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; + /* this is true except for some Atoms */ + self->bcr_addr = 0xdc; +} + +static void +fu_pci_bcr_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "PciBcrAddr"); + fu_plugin_add_udev_subsystem(plugin, "pci"); +} + +static void +fu_pci_bcr_plugin_class_init(FuPciBcrPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_pci_bcr_plugin_constructed; + plugin_class->to_string = fu_pci_bcr_plugin_to_string; + plugin_class->add_security_attrs = fu_pci_bcr_plugin_add_security_attrs; + plugin_class->device_registered = fu_pci_bcr_plugin_device_registered; + plugin_class->backend_device_added = fu_pci_bcr_plugin_backend_device_added; } diff --git a/plugins/pci-bcr/fu-pci-bcr-plugin.h b/plugins/pci-bcr/fu-pci-bcr-plugin.h new file mode 100644 index 000000000..4d5a8bddd --- /dev/null +++ b/plugins/pci-bcr/fu-pci-bcr-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuPciBcrPlugin, fu_pci_bcr_plugin, FU, PCI_BCR_PLUGIN, FuPlugin) diff --git a/plugins/pci-bcr/meson.build b/plugins/pci-bcr/meson.build index 8948cdb54..d24da517e 100644 --- a/plugins/pci-bcr/meson.build +++ b/plugins/pci-bcr/meson.build @@ -2,26 +2,13 @@ if hsi cargs = ['-DG_LOG_DOMAIN="FuPluginPciBcr"'] plugin_quirks += files('pci-bcr.quirk') - -shared_module('fu_plugin_pci_bcr', - fu_hash, +plugin_builtins += static_library('fu_plugin_pci_bcr', sources: [ - 'fu-plugin-pci-bcr.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-pci-bcr-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/pci-mei/fu-plugin-pci-mei.c b/plugins/pci-mei/fu-pci-mei-plugin.c similarity index 72% rename from plugins/pci-mei/fu-plugin-pci-mei.c rename to plugins/pci-mei/fu-pci-mei-plugin.c index f844bd359..37171ba49 100644 --- a/plugins/pci-mei/fu-plugin-pci-mei.c +++ b/plugins/pci-mei/fu-pci-mei-plugin.c @@ -6,11 +6,11 @@ #include "config.h" -#include - #include "fu-mei-common.h" +#include "fu-pci-mei-plugin.h" -struct FuPluginData { +struct _FuPciMeiPlugin { + FuPlugin parent_instance; FuDevice *pci_device; FuMeiHfsts1 hfsts1; FuMeiHfsts2 hfsts2; @@ -23,6 +23,8 @@ struct FuPluginData { FuMeiIssue issue; }; +G_DEFINE_TYPE(FuPciMeiPlugin, fu_pci_mei_plugin, FU_TYPE_PLUGIN) + #define PCI_CFG_HFS_1 0x40 #define PCI_CFG_HFS_2 0x48 #define PCI_CFG_HFS_3 0x60 @@ -31,46 +33,31 @@ struct FuPluginData { #define PCI_CFG_HFS_6 0x6c static void -fu_plugin_pci_mei_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_pci_mei_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); fu_string_append(str, idt, "HFSTS1", NULL); - fu_mei_hfsts1_to_string(priv->hfsts1, idt + 1, str); + fu_mei_hfsts1_to_string(self->hfsts1, idt + 1, str); fu_string_append(str, idt, "HFSTS2", NULL); - fu_mei_hfsts2_to_string(priv->hfsts2, idt + 1, str); + fu_mei_hfsts2_to_string(self->hfsts2, idt + 1, str); fu_string_append(str, idt, "HFSTS3", NULL); - fu_mei_hfsts3_to_string(priv->hfsts3, idt + 1, str); + fu_mei_hfsts3_to_string(self->hfsts3, idt + 1, str); fu_string_append(str, idt, "HFSTS4", NULL); - fu_mei_hfsts4_to_string(priv->hfsts4, idt + 1, str); + fu_mei_hfsts4_to_string(self->hfsts4, idt + 1, str); fu_string_append(str, idt, "HFSTS5", NULL); - fu_mei_hfsts5_to_string(priv->hfsts5, idt + 1, str); + fu_mei_hfsts5_to_string(self->hfsts5, idt + 1, str); fu_string_append(str, idt, "HFSTS6", NULL); - fu_mei_hfsts6_to_string(priv->hfsts6, idt + 1, str); -} - -static void -fu_plugin_pci_mei_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - fu_plugin_add_udev_subsystem(plugin, "pci"); -} - -static void -fu_plugin_pci_mei_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->pci_device != NULL) - g_object_unref(priv->pci_device); + fu_mei_hfsts6_to_string(self->hfsts6, idt + 1, str); } static FuMeiFamily fu_mei_detect_family(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); - guint8 ver = priv->vers.major; + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); + guint8 ver = self->vers.major; if (ver == 1 || ver == 2) { - if (priv->hfsts1.fields.operation_mode == 0xf) + if (self->hfsts1.fields.operation_mode == 0xf) return FU_MEI_FAMILY_SPS; return FU_MEI_FAMILY_TXE; } @@ -86,7 +73,7 @@ fu_mei_detect_family(FuPlugin *plugin) static gboolean fu_mei_parse_fwvers(FuPlugin *plugin, const gchar *fwvers, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); guint64 tmp64 = 0; g_auto(GStrv) lines = NULL; g_auto(GStrv) sections = NULL; @@ -119,7 +106,7 @@ fu_mei_parse_fwvers(FuPlugin *plugin, const gchar *fwvers, GError **error) g_prefix_error(error, "failed to process platform version %s: ", sections[0]); return FALSE; } - priv->vers.platform = tmp64; + self->vers.platform = tmp64; split = g_strsplit(sections[1], ".", -1); if (g_strv_length(split) != 4) { g_set_error(error, @@ -134,46 +121,46 @@ fu_mei_parse_fwvers(FuPlugin *plugin, const gchar *fwvers, GError **error) g_prefix_error(error, "failed to process major version %s: ", split[0]); return FALSE; } - priv->vers.major = tmp64; + self->vers.major = tmp64; if (!fu_strtoull(split[1], &tmp64, 0, G_MAXUINT8, error)) { g_prefix_error(error, "failed to process minor version %s: ", split[1]); return FALSE; } - priv->vers.minor = tmp64; + self->vers.minor = tmp64; if (!fu_strtoull(split[2], &tmp64, 0, G_MAXUINT8, error)) { g_prefix_error(error, "failed to process hotfix version %s: ", split[2]); return FALSE; } - priv->vers.hotfix = tmp64; + self->vers.hotfix = tmp64; if (!fu_strtoull(split[3], &tmp64, 0, G_MAXUINT16, error)) { g_prefix_error(error, "failed to process buildno version %s: ", split[3]); return FALSE; } - priv->vers.buildno = tmp64; + self->vers.buildno = tmp64; /* check the AMT version for issues using the data from: * https://downloadcenter.intel.com/download/28632 */ - priv->family = fu_mei_detect_family(plugin); - if (priv->family == FU_MEI_FAMILY_CSME) - priv->issue = fu_mei_common_is_csme_vulnerable(&priv->vers); - else if (priv->family == FU_MEI_FAMILY_TXE) - priv->issue = fu_mei_common_is_txe_vulnerable(&priv->vers); - else if (priv->family == FU_MEI_FAMILY_SPS) - priv->issue = fu_mei_common_is_sps_vulnerable(&priv->vers); + self->family = fu_mei_detect_family(plugin); + if (self->family == FU_MEI_FAMILY_CSME) + self->issue = fu_mei_common_is_csme_vulnerable(&self->vers); + else if (self->family == FU_MEI_FAMILY_TXE) + self->issue = fu_mei_common_is_txe_vulnerable(&self->vers); + else if (self->family == FU_MEI_FAMILY_SPS) + self->issue = fu_mei_common_is_sps_vulnerable(&self->vers); if (g_getenv("FWUPD_MEI_VERBOSE") != NULL) { g_debug("%s version parsed as %u.%u.%u", - fu_mei_common_family_to_string(priv->family), - priv->vers.major, - priv->vers.minor, - priv->vers.hotfix); + fu_mei_common_family_to_string(self->family), + self->vers.major, + self->vers.minor, + self->vers.hotfix); } return TRUE; } static gboolean -fu_plugin_pci_mei_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_pci_mei_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); const gchar *fwvers; guint8 buf[4] = {0x0}; g_autoptr(FuDeviceLocker) locker = NULL; @@ -197,33 +184,33 @@ fu_plugin_pci_mei_backend_device_added(FuPlugin *plugin, FuDevice *device, GErro g_prefix_error(error, "could not read HFS1: "); return FALSE; } - priv->hfsts1.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + self->hfsts1.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_CFG_HFS_2, buf, sizeof(buf), error)) { g_prefix_error(error, "could not read HFS2: "); return FALSE; } - priv->hfsts2.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + self->hfsts2.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_CFG_HFS_3, buf, sizeof(buf), error)) { g_prefix_error(error, "could not read HFS3: "); return FALSE; } - priv->hfsts3.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + self->hfsts3.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_CFG_HFS_4, buf, sizeof(buf), error)) { g_prefix_error(error, "could not read HFS4: "); return FALSE; } - priv->hfsts4.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + self->hfsts4.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_CFG_HFS_5, buf, sizeof(buf), error)) { g_prefix_error(error, "could not read HFS5: "); return FALSE; } - priv->hfsts5.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + self->hfsts5.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); if (!fu_udev_device_pread(FU_UDEV_DEVICE(device), PCI_CFG_HFS_6, buf, sizeof(buf), error)) { g_prefix_error(error, "could not read HFS6: "); return FALSE; } - priv->hfsts6.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); - g_set_object(&priv->pci_device, device); + self->hfsts6.data = fu_memread_uint32(buf, G_LITTLE_ENDIAN); + g_set_object(&self->pci_device, device); /* check firmware version */ fwvers = fu_udev_device_get_sysfs_attr(FU_UDEV_DEVICE(device), "mei/mei0/fw_ver", NULL); @@ -239,21 +226,15 @@ fu_plugin_pci_mei_backend_device_added(FuPlugin *plugin, FuDevice *device, GErro static void fu_plugin_add_security_attrs_manufacturing_mode(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_MEI_MANUFACTURING_MODE); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } @@ -261,8 +242,8 @@ fu_plugin_add_security_attrs_manufacturing_mode(FuPlugin *plugin, FuSecurityAttr /* Manufacturing Mode */ fwupd_security_attr_add_metadata(attr, "kind", - fu_mei_common_family_to_string(priv->family)); - if (priv->hfsts1.fields.mfg_mode) { + fu_mei_common_family_to_string(self->family)); + if (self->hfsts1.fields.mfg_mode) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_LOCKED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -276,21 +257,15 @@ fu_plugin_add_security_attrs_manufacturing_mode(FuPlugin *plugin, FuSecurityAttr static void fu_plugin_add_security_attrs_override_strap(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_MEI_OVERRIDE_STRAP); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } @@ -298,8 +273,8 @@ fu_plugin_add_security_attrs_override_strap(FuPlugin *plugin, FuSecurityAttrs *a /* Flash Descriptor Security Override Strap */ fwupd_security_attr_add_metadata(attr, "kind", - fu_mei_common_family_to_string(priv->family)); - if (priv->hfsts1.fields.operation_mode == ME_HFS_MODE_OVER_JMPR) { + fu_mei_common_family_to_string(self->family)); + if (self->hfsts1.fields.operation_mode == ME_HFS_MODE_OVER_JMPR) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_LOCKED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -313,33 +288,27 @@ fu_plugin_add_security_attrs_override_strap(FuPlugin *plugin, FuSecurityAttrs *a static void fu_plugin_add_security_attrs_bootguard_enabled(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_INTEL_BOOTGUARD_ENABLED); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* not supported */ - if (priv->family == FU_MEI_FAMILY_TXE) { + if (self->family == FU_MEI_FAMILY_TXE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } /* disabled at runtime? */ - if (priv->hfsts6.fields.boot_guard_disable) { + if (self->hfsts6.fields.boot_guard_disable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -353,39 +322,33 @@ fu_plugin_add_security_attrs_bootguard_enabled(FuPlugin *plugin, FuSecurityAttrs static void fu_plugin_add_security_attrs_bootguard_verified(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_INTEL_BOOTGUARD_VERIFIED); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* not supported */ - if (priv->family == FU_MEI_FAMILY_TXE) { + if (self->family == FU_MEI_FAMILY_TXE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } /* actively disabled */ - if (priv->hfsts6.fields.boot_guard_disable) { + if (self->hfsts6.fields.boot_guard_disable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); return; } /* measured boot is not sufficient, verified is required */ - if (!priv->hfsts6.fields.verified_boot) { + if (!self->hfsts6.fields.verified_boot) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -399,39 +362,33 @@ fu_plugin_add_security_attrs_bootguard_verified(FuPlugin *plugin, FuSecurityAttr static void fu_plugin_add_security_attrs_bootguard_acm(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_INTEL_BOOTGUARD_ACM); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* not supported */ - if (priv->family == FU_MEI_FAMILY_TXE) { + if (self->family == FU_MEI_FAMILY_TXE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } /* actively disabled */ - if (priv->hfsts6.fields.boot_guard_disable) { + if (self->hfsts6.fields.boot_guard_disable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); return; } /* ACM protection required */ - if (!priv->hfsts6.fields.force_boot_guard_acm) { + if (!self->hfsts6.fields.force_boot_guard_acm) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -445,39 +402,33 @@ fu_plugin_add_security_attrs_bootguard_acm(FuPlugin *plugin, FuSecurityAttrs *at static void fu_plugin_add_security_attrs_bootguard_policy(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_INTEL_BOOTGUARD_POLICY); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* not supported */ - if (priv->family == FU_MEI_FAMILY_TXE) { + if (self->family == FU_MEI_FAMILY_TXE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } /* actively disabled */ - if (priv->hfsts6.fields.boot_guard_disable) { + if (self->hfsts6.fields.boot_guard_disable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); return; } /* policy must be to immediately shutdown */ - if (priv->hfsts6.fields.error_enforce_policy != ME_HFS_ENFORCEMENT_POLICY_SHUTDOWN_NOW) { + if (self->hfsts6.fields.error_enforce_policy != ME_HFS_ENFORCEMENT_POLICY_SHUTDOWN_NOW) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -491,39 +442,33 @@ fu_plugin_add_security_attrs_bootguard_policy(FuPlugin *plugin, FuSecurityAttrs static void fu_plugin_add_security_attrs_bootguard_otp(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_INTEL_BOOTGUARD_OTP); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* no device */ - if (priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* not supported */ - if (priv->family == FU_MEI_FAMILY_TXE) { + if (self->family == FU_MEI_FAMILY_TXE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_SUPPORTED); return; } /* actively disabled */ - if (priv->hfsts6.fields.boot_guard_disable) { + if (self->hfsts6.fields.boot_guard_disable) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); return; } /* ensure vendor set the FPF OTP fuse */ - if (!priv->hfsts6.fields.fpf_soc_lock) { + if (!self->hfsts6.fields.fpf_soc_lock) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -547,7 +492,7 @@ fu_plugin_add_security_attrs_bootguard(FuPlugin *plugin, FuSecurityAttrs *attrs) static void fu_plugin_add_security_attrs_mei_version(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(plugin); g_autofree gchar *version = NULL; g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -556,29 +501,29 @@ fu_plugin_add_security_attrs_mei_version(FuPlugin *plugin, FuSecurityAttrs *attr fu_security_attrs_append(attrs, attr); /* not enabled */ - if (priv == NULL || priv->pci_device == NULL) { + if (self->pci_device == NULL) { fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); return; } /* format version as string */ version = g_strdup_printf("%u:%u.%u.%u.%u", - priv->vers.platform, - priv->vers.major, - priv->vers.minor, - priv->vers.hotfix, - priv->vers.buildno); - if (priv->issue == FU_MEI_ISSUE_UNKNOWN) { + self->vers.platform, + self->vers.major, + self->vers.minor, + self->vers.hotfix, + self->vers.buildno); + if (self->issue == FU_MEI_ISSUE_UNKNOWN) { g_warning("ME family not supported for %s", version); return; } fwupd_security_attr_add_metadata(attr, "version", version); fwupd_security_attr_add_metadata(attr, "kind", - fu_mei_common_family_to_string(priv->family)); + fu_mei_common_family_to_string(self->family)); /* Flash Descriptor Security Override Strap */ - if (priv->issue == FU_MEI_ISSUE_VULNERABLE) { + if (self->issue == FU_MEI_ISSUE_VULNERABLE) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); return; @@ -590,7 +535,7 @@ fu_plugin_add_security_attrs_mei_version(FuPlugin *plugin, FuSecurityAttrs *attr } static void -fu_plugin_pci_mei_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_pci_mei_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { /* only Intel */ if (fu_cpu_get_vendor() != FU_CPU_VENDOR_INTEL) @@ -602,13 +547,36 @@ fu_plugin_pci_mei_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fu_plugin_add_security_attrs_mei_version(plugin, attrs); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_pci_mei_plugin_init(FuPciMeiPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_pci_mei_init; - vfuncs->destroy = fu_plugin_pci_mei_destroy; - vfuncs->to_string = fu_plugin_pci_mei_to_string; - vfuncs->add_security_attrs = fu_plugin_pci_mei_add_security_attrs; - vfuncs->backend_device_added = fu_plugin_pci_mei_backend_device_added; +} + +static void +fu_pci_mei_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "pci"); +} + +static void +fu_pci_mei_finalize(GObject *obj) +{ + FuPciMeiPlugin *self = FU_PCI_MEI_PLUGIN(obj); + if (self->pci_device != NULL) + g_object_unref(self->pci_device); + G_OBJECT_CLASS(fu_pci_mei_plugin_parent_class)->finalize(obj); +} + +static void +fu_pci_mei_plugin_class_init(FuPciMeiPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_pci_mei_plugin_constructed; + object_class->finalize = fu_pci_mei_finalize; + plugin_class->to_string = fu_pci_mei_plugin_to_string; + plugin_class->add_security_attrs = fu_pci_mei_plugin_add_security_attrs; + plugin_class->backend_device_added = fu_pci_mei_plugin_backend_device_added; } diff --git a/plugins/pci-mei/fu-pci-mei-plugin.h b/plugins/pci-mei/fu-pci-mei-plugin.h new file mode 100644 index 000000000..1e15f152b --- /dev/null +++ b/plugins/pci-mei/fu-pci-mei-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuPciMeiPlugin, fu_pci_mei_plugin, FU, PCI_MEI_PLUGIN, FuPlugin) diff --git a/plugins/pci-mei/meson.build b/plugins/pci-mei/meson.build index e2744e277..ee9f7b55f 100644 --- a/plugins/pci-mei/meson.build +++ b/plugins/pci-mei/meson.build @@ -2,27 +2,14 @@ if hsi cargs = ['-DG_LOG_DOMAIN="FuPluginPciMei"'] plugin_quirks += files('pci-mei.quirk') - -shared_module('fu_plugin_pci_mei', - fu_hash, +plugin_builtins += static_library('fu_plugin_pci_mei', sources: [ - 'fu-plugin-pci-mei.c', + 'fu-pci-mei-plugin.c', 'fu-mei-common.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/pci-psp/fu-pci-psp-plugin.c b/plugins/pci-psp/fu-pci-psp-plugin.c new file mode 100644 index 000000000..aa871a57f --- /dev/null +++ b/plugins/pci-psp/fu-pci-psp-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 Advanced Micro Devices Inc. + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-pci-psp-device.h" +#include "fu-pci-psp-plugin.h" + +struct _FuPciPspPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuPciPspPlugin, fu_pci_psp_plugin, FU_TYPE_PLUGIN) + +static void +fu_pci_psp_plugin_init(FuPciPspPlugin *self) +{ +} + +static void +fu_pci_psp_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "pci"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_PCI_PSP_DEVICE); +} + +static void +fu_pci_psp_plugin_class_init(FuPciPspPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_pci_psp_plugin_constructed; +} diff --git a/plugins/pci-psp/fu-pci-psp-plugin.h b/plugins/pci-psp/fu-pci-psp-plugin.h new file mode 100644 index 000000000..aa67ead59 --- /dev/null +++ b/plugins/pci-psp/fu-pci-psp-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuPciPspPlugin, fu_pci_psp_plugin, FU, PCI_PSP_PLUGIN, FuPlugin) diff --git a/plugins/pci-psp/fu-plugin-pci-psp.c b/plugins/pci-psp/fu-plugin-pci-psp.c deleted file mode 100644 index 9628beae2..000000000 --- a/plugins/pci-psp/fu-plugin-pci-psp.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 Advanced Micro Devices Inc. - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-pci-psp-device.h" - -static void -fu_plugin_pci_psp_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "pci"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_PCI_PSP_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_pci_psp_init; -} diff --git a/plugins/pci-psp/meson.build b/plugins/pci-psp/meson.build index 77d3628b6..193dfbdba 100644 --- a/plugins/pci-psp/meson.build +++ b/plugins/pci-psp/meson.build @@ -2,27 +2,14 @@ if hsi and (host_cpu == 'x86' or host_cpu == 'x86_64') cargs = ['-DG_LOG_DOMAIN="FuPluginPciPsp"'] plugin_quirks += files('pci-psp.quirk') - -shared_module('fu_plugin_pci_psp', - fu_hash, +plugin_builtins += static_library('fu_plugin_pci_psp', sources: [ - 'fu-plugin-pci-psp.c', + 'fu-pci-psp-plugin.c', 'fu-pci-psp-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/pixart-rf/fu-plugin-pixart-rf.c b/plugins/pixart-rf/fu-pxi-plugin.c similarity index 50% rename from plugins/pixart-rf/fu-plugin-pixart-rf.c rename to plugins/pixart-rf/fu-pxi-plugin.c index 26cd88012..c5018410a 100644 --- a/plugins/pixart-rf/fu-plugin-pixart-rf.c +++ b/plugins/pixart-rf/fu-pxi-plugin.c @@ -6,24 +6,36 @@ #include "config.h" -#include - #include "fu-pxi-ble-device.h" #include "fu-pxi-firmware.h" +#include "fu-pxi-plugin.h" #include "fu-pxi-receiver-device.h" +struct _FuPxiPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuPxiPlugin, fu_pxi_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_pixart_init(FuPlugin *plugin) +fu_pxi_plugin_init(FuPxiPlugin *self) { +} + +static void +fu_pxi_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_set_name(plugin, "pixart_rf"); 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) +static void +fu_pxi_plugin_class_init(FuPxiPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_pixart_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_pxi_plugin_constructed; } diff --git a/plugins/pixart-rf/fu-pxi-plugin.h b/plugins/pixart-rf/fu-pxi-plugin.h new file mode 100644 index 000000000..636923d99 --- /dev/null +++ b/plugins/pixart-rf/fu-pxi-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuPxiPlugin, fu_pxi_plugin, FU, PXI_PLUGIN, FuPlugin) diff --git a/plugins/pixart-rf/meson.build b/plugins/pixart-rf/meson.build index cdb839b8e..4627ad167 100644 --- a/plugins/pixart-rf/meson.build +++ b/plugins/pixart-rf/meson.build @@ -2,33 +2,21 @@ if get_option('plugin_pixart_rf').disable_auto_if(host_machine.system() != 'linu cargs = ['-DG_LOG_DOMAIN="FuPluginPixartRf"'] plugin_quirks += files('pixart-rf.quirk') - -shared_module('fu_plugin_pixart_rf', - fu_hash, +plugin_builtin_pxi = static_library('fu_plugin_pxi', sources: [ - 'fu-plugin-pixart-rf.c', + 'fu-pxi-plugin.c', 'fu-pxi-common.c', 'fu-pxi-ble-device.c', 'fu-pxi-receiver-device.c', 'fu-pxi-wireless-device.c', 'fu-pxi-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + dependencies: plugin_deps, + link_with: plugin_libs, ) +plugin_builtins += plugin_builtin_pxi if get_option('tests') install_data(['tests/pixart.builder.xml'], @@ -38,22 +26,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'pxi-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-pxi-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_pxi, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/powerd/fu-plugin-powerd.c b/plugins/powerd/fu-powerd-plugin.c similarity index 63% rename from plugins/powerd/fu-plugin-powerd.c rename to plugins/powerd/fu-powerd-plugin.c index 92df52507..dc110cc81 100644 --- a/plugins/powerd/fu-plugin-powerd.c +++ b/plugins/powerd/fu-powerd-plugin.c @@ -7,20 +7,17 @@ #include "config.h" -#include +#include "fu-powerd-plugin.h" -struct FuPluginData { +struct _FuPowerdPlugin { + FuPlugin parent_instance; GDBusProxy *proxy; /* nullable */ }; -static void -fu_plugin_powerd_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} +G_DEFINE_TYPE(FuPowerdPlugin, fu_powerd_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_powerd_create_suspend_file(GError **error) +fu_powerd_plugin_create_suspend_file(GError **error) { g_autofree gchar *lockdir = NULL; g_autofree gchar *inhibitsuspend_filename = NULL; @@ -37,7 +34,7 @@ fu_plugin_powerd_create_suspend_file(GError **error) } static gboolean -fu_plugin_powerd_delete_suspend_file(GError **error) +fu_powerd_plugin_delete_suspend_file(GError **error) { g_autoptr(GError) local_error = NULL; g_autofree gchar *lockdir = NULL; @@ -57,15 +54,7 @@ fu_plugin_powerd_delete_suspend_file(GError **error) } static void -fu_plugin_powerd_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->proxy != NULL) - g_object_unref(priv->proxy); -} - -static void -fu_plugin_powerd_rescan(FuPlugin *plugin, GVariant *parameters) +fu_powerd_plugin_rescan(FuPlugin *plugin, GVariant *parameters) { FuContext *ctx = fu_plugin_get_context(plugin); guint32 power_type; @@ -83,7 +72,7 @@ fu_plugin_powerd_rescan(FuPlugin *plugin, GVariant *parameters) } static void -fu_plugin_powerd_proxy_changed_cb(GDBusProxy *proxy, +fu_powerd_plugin_proxy_changed_cb(GDBusProxy *proxy, const gchar *sender_name, const gchar *signal_name, GVariant *parameters, @@ -91,20 +80,20 @@ fu_plugin_powerd_proxy_changed_cb(GDBusProxy *proxy, { if (!g_str_equal(signal_name, "BatteryStatePoll")) return; - fu_plugin_powerd_rescan(plugin, parameters); + fu_powerd_plugin_rescan(plugin, parameters); } static gboolean -fu_plugin_powerd_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_powerd_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuPowerdPlugin *self = FU_POWERD_PLUGIN(plugin); g_autofree gchar *name_owner = NULL; - if (!fu_plugin_powerd_delete_suspend_file(error)) + if (!fu_powerd_plugin_delete_suspend_file(error)) return FALSE; /* establish proxy for method call to powerd */ - priv->proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, + self->proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.chromium.PowerManager", @@ -113,22 +102,22 @@ fu_plugin_powerd_startup(FuPlugin *plugin, FuProgress *progress, GError **error) NULL, error); - if (priv->proxy == NULL) { + if (self->proxy == NULL) { g_prefix_error(error, "failed to connect to powerd: "); return FALSE; } - name_owner = g_dbus_proxy_get_name_owner(priv->proxy); + name_owner = g_dbus_proxy_get_name_owner(self->proxy); if (name_owner == NULL) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "no service that owns the name for %s", - g_dbus_proxy_get_name(priv->proxy)); + g_dbus_proxy_get_name(self->proxy)); return FALSE; } - fu_plugin_powerd_rescan(plugin, - g_dbus_proxy_call_sync(priv->proxy, + fu_powerd_plugin_rescan(plugin, + g_dbus_proxy_call_sync(self->proxy, "GetBatteryState", NULL, G_DBUS_CALL_FLAGS_NONE, @@ -136,41 +125,56 @@ fu_plugin_powerd_startup(FuPlugin *plugin, FuProgress *progress, GError **error) NULL, G_SOURCE_REMOVE)); - g_signal_connect(G_DBUS_PROXY(priv->proxy), + g_signal_connect(G_DBUS_PROXY(self->proxy), "g-signal", - G_CALLBACK(fu_plugin_powerd_proxy_changed_cb), + G_CALLBACK(fu_powerd_plugin_proxy_changed_cb), plugin); return TRUE; } static gboolean -fu_plugin_powerd_prepare(FuPlugin *plugin, +fu_powerd_plugin_prepare(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - return fu_plugin_powerd_create_suspend_file(error); + return fu_powerd_plugin_create_suspend_file(error); } static gboolean -fu_plugin_powerd_cleanup(FuPlugin *plugin, +fu_powerd_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - return fu_plugin_powerd_delete_suspend_file(error); + return fu_powerd_plugin_delete_suspend_file(error); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_powerd_plugin_init(FuPowerdPlugin *self) { - 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; +} + +static void +fu_powerd_finalize(GObject *obj) +{ + FuPowerdPlugin *self = FU_POWERD_PLUGIN(obj); + if (self->proxy != NULL) + g_object_unref(self->proxy); + G_OBJECT_CLASS(fu_powerd_plugin_parent_class)->finalize(obj); +} + +static void +fu_powerd_plugin_class_init(FuPowerdPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_powerd_finalize; + plugin_class->startup = fu_powerd_plugin_startup; + plugin_class->cleanup = fu_powerd_plugin_cleanup; + plugin_class->prepare = fu_powerd_plugin_prepare; } diff --git a/plugins/powerd/fu-powerd-plugin.h b/plugins/powerd/fu-powerd-plugin.h new file mode 100644 index 000000000..be4d37dba --- /dev/null +++ b/plugins/powerd/fu-powerd-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuPowerdPlugin, fu_powerd_plugin, FU, POWERD_PLUGIN, FuPlugin) diff --git a/plugins/powerd/meson.build b/plugins/powerd/meson.build index e3229d3fe..186ee887c 100644 --- a/plugins/powerd/meson.build +++ b/plugins/powerd/meson.build @@ -2,26 +2,14 @@ if get_option('plugin_powerd').disable_auto_if(host_machine.system() != 'linux') error_message: 'gio 2.58 or later needed for powerd').allowed() cargs = ['-DG_LOG_DOMAIN="FuPluginPowerd"'] -shared_module('fu_plugin_powerd', - fu_hash, +plugin_builtins += static_library('fu_plugin_powerd', sources: [ - 'fu-plugin-powerd.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-powerd-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/realtek-mst/fu-plugin-realtek-mst.c b/plugins/realtek-mst/fu-plugin-realtek-mst.c deleted file mode 100644 index 8a35a2224..000000000 --- a/plugins/realtek-mst/fu-plugin-realtek-mst.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2021 Peter Marheine - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include "fu-realtek-mst-device.h" - -static void -fu_plugin_realtek_mst_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "RealtekMstDpAuxName"); - fu_context_add_quirk_key(ctx, "RealtekMstDrmCardKernelName"); -} - -static void -fu_plugin_realtek_mst_init(FuPlugin *plugin) -{ - 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->load = fu_plugin_realtek_mst_load; - vfuncs->init = fu_plugin_realtek_mst_init; -} diff --git a/plugins/realtek-mst/fu-realtek-mst-plugin.c b/plugins/realtek-mst/fu-realtek-mst-plugin.c new file mode 100644 index 000000000..e535ef44c --- /dev/null +++ b/plugins/realtek-mst/fu-realtek-mst-plugin.c @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2021 Peter Marheine + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-realtek-mst-device.h" +#include "fu-realtek-mst-plugin.h" + +struct _FuRealtekMstPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuRealtekMstPlugin, fu_realtek_mst_plugin, FU_TYPE_PLUGIN) + +static void +fu_realtek_mst_plugin_init(FuRealtekMstPlugin *self) +{ +} + +static void +fu_realtek_mst_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "RealtekMstDpAuxName"); + fu_context_add_quirk_key(ctx, "RealtekMstDrmCardKernelName"); + fu_plugin_add_udev_subsystem(plugin, "i2c"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_REALTEK_MST_DEVICE); +} + +static void +fu_realtek_mst_plugin_class_init(FuRealtekMstPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_realtek_mst_plugin_constructed; +} diff --git a/plugins/realtek-mst/fu-realtek-mst-plugin.h b/plugins/realtek-mst/fu-realtek-mst-plugin.h new file mode 100644 index 000000000..0ff9ac804 --- /dev/null +++ b/plugins/realtek-mst/fu-realtek-mst-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuRealtekMstPlugin, fu_realtek_mst_plugin, FU, REALTEK_MST_PLUGIN, FuPlugin) diff --git a/plugins/realtek-mst/meson.build b/plugins/realtek-mst/meson.build index 4b510b9a9..6beec9023 100644 --- a/plugins/realtek-mst/meson.build +++ b/plugins/realtek-mst/meson.build @@ -3,30 +3,17 @@ if get_option('plugin_realtek_mst').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginRealtekMst"'] plugin_quirks += files('realtek-mst.quirk') - -shared_module('fu_plugin_realtek_mst', - fu_hash, +plugin_builtins += static_library('fu_plugin_realtek_mst', sources: [ 'fu-realtek-mst-device.c', - 'fu-plugin-realtek-mst.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-realtek-mst-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/redfish/fu-plugin-redfish.c b/plugins/redfish/fu-redfish-plugin.c similarity index 76% rename from plugins/redfish/fu-plugin-redfish.c rename to plugins/redfish/fu-redfish-plugin.c index 7004ceb67..cfd39007b 100644 --- a/plugins/redfish/fu-plugin-redfish.c +++ b/plugins/redfish/fu-redfish-plugin.c @@ -6,8 +6,6 @@ #include "config.h" -#include - #ifdef HAVE_LINUX_IPMI_H #include "fu-ipmi-device.h" #endif @@ -16,22 +14,26 @@ #include "fu-redfish-common.h" #include "fu-redfish-device.h" #include "fu-redfish-network.h" +#include "fu-redfish-plugin.h" #include "fu-redfish-smbios.h" #define FU_REDFISH_PLUGIN_CLEANUP_RETRIES_DELAY 10 /* seconds */ -struct FuPluginData { +struct _FuRedfishPlugin { + FuPlugin parent_instance; FuRedfishBackend *backend; FuRedfishSmbios *smbios; /* nullable */ }; +G_DEFINE_TYPE(FuRedfishPlugin, fu_redfish_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_redfish_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_redfish_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_backend_add_string(FU_BACKEND(priv->backend), idt, str); - if (priv->smbios != NULL) { - g_autofree gchar *smbios = fu_firmware_to_string(FU_FIRMWARE(priv->smbios)); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); + fu_backend_add_string(FU_BACKEND(self->backend), idt, str); + if (self->smbios != NULL) { + g_autofree gchar *smbios = fu_firmware_to_string(FU_FIRMWARE(self->smbios)); fu_string_append(str, idt, "Smbios", smbios); } } @@ -51,9 +53,9 @@ fu_common_generate_password(guint length) } static gboolean -fu_plugin_redfish_change_expired(FuPlugin *plugin, GError **error) +fu_redfish_plugin_change_expired(FuPlugin *plugin, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); g_autofree gchar *password_new = fu_common_generate_password(15); g_autofree gchar *uri = NULL; g_autoptr(FuRedfishRequest) request = NULL; @@ -68,7 +70,7 @@ fu_plugin_redfish_change_expired(FuPlugin *plugin, GError **error) } /* now use Redfish to change the temporary password to the actual password */ - request = fu_redfish_backend_request_new(priv->backend); + request = fu_redfish_backend_request_new(self->backend); json_builder_begin_object(builder); json_builder_set_member_name(builder, "Password"); json_builder_add_string_value(builder, password_new); @@ -80,26 +82,26 @@ fu_plugin_redfish_change_expired(FuPlugin *plugin, GError **error) FU_REDFISH_REQUEST_PERFORM_FLAG_LOAD_JSON, error)) return FALSE; - fu_redfish_backend_set_password(priv->backend, password_new); + fu_redfish_backend_set_password(self->backend, password_new); /* success */ return fu_plugin_set_config_value(plugin, "Password", password_new, error); } static gboolean -fu_plugin_redfish_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_redfish_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); g_autoptr(GPtrArray) devices = NULL; g_autoptr(GError) error_local = NULL; /* get the list of devices */ - if (!fu_backend_coldplug(FU_BACKEND(priv->backend), progress, &error_local)) { + if (!fu_backend_coldplug(FU_BACKEND(self->backend), progress, &error_local)) { /* did the user password expire? */ if (g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_AUTH_EXPIRED)) { - if (!fu_plugin_redfish_change_expired(plugin, error)) + if (!fu_redfish_plugin_change_expired(plugin, error)) return FALSE; - if (!fu_backend_coldplug(FU_BACKEND(priv->backend), progress, error)) { + if (!fu_backend_coldplug(FU_BACKEND(self->backend), progress, error)) { fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_AUTH_REQUIRED); return FALSE; } @@ -108,7 +110,7 @@ fu_plugin_redfish_coldplug(FuPlugin *plugin, FuProgress *progress, GError **erro return FALSE; } } - devices = fu_backend_get_devices(FU_BACKEND(priv->backend)); + devices = fu_backend_get_devices(FU_BACKEND(self->backend)); for (guint i = 0; i < devices->len; i++) { FuDevice *device = g_ptr_array_index(devices, i); if (fu_context_has_hwid_flag(fu_plugin_get_context(plugin), "reset-required")) @@ -127,7 +129,7 @@ fu_plugin_redfish_coldplug(FuPlugin *plugin, FuProgress *progress, GError **erro static gboolean fu_redfish_plugin_discover_uefi_credentials(FuPlugin *plugin, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); gsize bufsz = 0; guint32 indications = 0x0; g_autofree gchar *userpass_safe = NULL; @@ -172,15 +174,15 @@ fu_redfish_plugin_discover_uefi_credentials(FuPlugin *plugin, GError **error) userpass_safe); return FALSE; } - fu_redfish_backend_set_username(priv->backend, split[0]); - fu_redfish_backend_set_password(priv->backend, split[1]); + fu_redfish_backend_set_username(self->backend, split[0]); + fu_redfish_backend_set_password(self->backend, split[1]); return TRUE; } static gboolean fu_redfish_plugin_discover_smbios_table(FuPlugin *plugin, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); const gchar *smbios_data_fn; g_autoptr(FuRedfishSmbios) smbios = fu_redfish_smbios_new(); @@ -206,27 +208,26 @@ fu_redfish_plugin_discover_smbios_table(FuPlugin *plugin, GError **error) } /* success */ - g_set_object(&priv->smbios, smbios); + g_set_object(&self->smbios, smbios); return TRUE; } static gboolean -fu_redfish_plugin_autoconnect_network_device(FuPlugin *plugin, GError **error) +fu_redfish_plugin_autoconnect_network_device(FuRedfishPlugin *self, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); g_autofree gchar *hostname = NULL; g_autoptr(FuRedfishNetworkDevice) device = NULL; /* we have no data */ - if (priv->smbios == NULL) + if (self->smbios == NULL) return TRUE; /* get IP, falling back to hostname, then MAC, then VID:PID */ - hostname = g_strdup(fu_redfish_smbios_get_ip_addr(priv->smbios)); + hostname = g_strdup(fu_redfish_smbios_get_ip_addr(self->smbios)); if (hostname == NULL) - hostname = g_strdup(fu_redfish_smbios_get_hostname(priv->smbios)); + hostname = g_strdup(fu_redfish_smbios_get_hostname(self->smbios)); if (device == NULL) { - const gchar *mac_addr = fu_redfish_smbios_get_mac_addr(priv->smbios); + const gchar *mac_addr = fu_redfish_smbios_get_mac_addr(self->smbios); if (mac_addr != NULL) { g_autoptr(GError) error_network = NULL; device = fu_redfish_network_device_for_mac_addr(mac_addr, &error_network); @@ -235,8 +236,8 @@ fu_redfish_plugin_autoconnect_network_device(FuPlugin *plugin, GError **error) } } if (device == NULL) { - guint16 vid = fu_redfish_smbios_get_vid(priv->smbios); - guint16 pid = fu_redfish_smbios_get_pid(priv->smbios); + guint16 vid = fu_redfish_smbios_get_vid(self->smbios); + guint16 pid = fu_redfish_smbios_get_pid(self->smbios); if (vid != 0x0 && pid != 0x0) { g_autoptr(GError) error_network = NULL; device = fu_redfish_network_device_for_vid_pid(vid, pid, &error_network); @@ -269,8 +270,8 @@ fu_redfish_plugin_autoconnect_network_device(FuPlugin *plugin, GError **error) g_set_error_literal(error, FWUPD_ERROR, FWUPD_ERROR_INVALID_FILE, "no hostname"); return FALSE; } - fu_redfish_backend_set_hostname(priv->backend, hostname); - fu_redfish_backend_set_port(priv->backend, fu_redfish_smbios_get_port(priv->smbios)); + fu_redfish_backend_set_hostname(self->backend, hostname); + fu_redfish_backend_set_port(self->backend, fu_redfish_smbios_get_port(self->smbios)); return TRUE; } @@ -279,7 +280,7 @@ fu_redfish_plugin_autoconnect_network_device(FuPlugin *plugin, GError **error) static gboolean fu_redfish_plugin_ipmi_create_user(FuPlugin *plugin, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); const gchar *username_fwupd = "fwupd"; guint8 user_id = G_MAXUINT8; g_autofree gchar *password_new = fu_common_generate_password(15); @@ -329,14 +330,14 @@ fu_redfish_plugin_ipmi_create_user(FuPlugin *plugin, GError **error) return FALSE; if (!fu_ipmi_device_set_user_password(device, user_id, password_tmp, error)) return FALSE; - fu_redfish_backend_set_username(priv->backend, username_fwupd); - fu_redfish_backend_set_password(priv->backend, password_tmp); + fu_redfish_backend_set_username(self->backend, username_fwupd); + fu_redfish_backend_set_password(self->backend, password_tmp); /* wait for Redfish to sync */ g_usleep(2 * G_USEC_PER_SEC); /* now use Redfish to change the temporary password to the actual password */ - request = fu_redfish_backend_request_new(priv->backend); + request = fu_redfish_backend_request_new(self->backend); uri = g_strdup_printf("/redfish/v1/AccountService/Accounts/%u", (guint)user_id - 1); json_builder_begin_object(builder); json_builder_set_member_name(builder, "Password"); @@ -349,7 +350,7 @@ fu_redfish_plugin_ipmi_create_user(FuPlugin *plugin, GError **error) FU_REDFISH_REQUEST_PERFORM_FLAG_LOAD_JSON, error)) return FALSE; - fu_redfish_backend_set_password(priv->backend, password_new); + fu_redfish_backend_set_password(self->backend, password_new); /* success */ if (!fu_plugin_set_config_value(plugin, "UserUri", uri, error)) @@ -364,9 +365,9 @@ fu_redfish_plugin_ipmi_create_user(FuPlugin *plugin, GError **error) #endif static gboolean -fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_redfish_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); g_autofree gchar *ca_check_str = NULL; g_autofree gchar *password = NULL; g_autofree gchar *redfish_uri = NULL; @@ -376,7 +377,7 @@ fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error /* optional */ if (!fu_redfish_plugin_discover_smbios_table(plugin, error)) return FALSE; - if (!fu_redfish_plugin_autoconnect_network_device(plugin, error)) + if (!fu_redfish_plugin_autoconnect_network_device(self, error)) return FALSE; if (!fu_redfish_plugin_discover_uefi_credentials(plugin, &error_uefi)) { g_debug("failed to get username and password automatically: %s", @@ -391,11 +392,11 @@ fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error guint64 port = 0; if (g_str_has_prefix(redfish_uri, "https://")) { - fu_redfish_backend_set_https(priv->backend, TRUE); + fu_redfish_backend_set_https(self->backend, TRUE); ip_str = redfish_uri + strlen("https://"); port = 443; } else if (g_str_has_prefix(redfish_uri, "http://")) { - fu_redfish_backend_set_https(priv->backend, FALSE); + fu_redfish_backend_set_https(self->backend, FALSE); ip_str = redfish_uri + strlen("http://"); port = 80; } else { @@ -407,7 +408,7 @@ fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error } split = g_strsplit(ip_str, ":", 2); - fu_redfish_backend_set_hostname(priv->backend, split[0]); + fu_redfish_backend_set_hostname(self->backend, split[0]); if (g_strv_length(split) > 1) port = g_ascii_strtoull(split[1], NULL, 10); if (port == 0 || port == G_MAXUINT64) { @@ -417,25 +418,25 @@ fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error "no valid port specified"); return FALSE; } - fu_redfish_backend_set_port(priv->backend, port); + fu_redfish_backend_set_port(self->backend, port); } username = fu_plugin_get_config_value(plugin, "Username"); if (username != NULL) - fu_redfish_backend_set_username(priv->backend, username); + fu_redfish_backend_set_username(self->backend, username); password = fu_plugin_get_config_value(plugin, "Password"); if (password != NULL) - fu_redfish_backend_set_password(priv->backend, password); + fu_redfish_backend_set_password(self->backend, password); ca_check_str = fu_plugin_get_config_value(plugin, "CACheck"); if (ca_check_str != NULL) { gboolean ca_check = fu_plugin_get_config_value_boolean(plugin, "CACheck"); - fu_redfish_backend_set_cacheck(priv->backend, ca_check); + fu_redfish_backend_set_cacheck(self->backend, ca_check); } if (fu_context_has_hwid_flag(fu_plugin_get_context(plugin), "wildcard-targets")) - fu_redfish_backend_set_wildcard_targets(priv->backend, TRUE); + fu_redfish_backend_set_wildcard_targets(self->backend, TRUE); #ifdef HAVE_LINUX_IPMI_H /* we got neither a type 42 entry or config value, lets try IPMI */ - if (fu_redfish_backend_get_username(priv->backend) == NULL) { + if (fu_redfish_backend_get_username(self->backend) == NULL) { if (!fu_context_has_hwid_flag(fu_plugin_get_context(plugin), "ipmi-create-user")) { g_set_error_literal(error, FWUPD_ERROR, @@ -452,43 +453,42 @@ fu_plugin_redfish_startup(FuPlugin *plugin, FuProgress *progress, GError **error } #endif - return fu_backend_setup(FU_BACKEND(priv->backend), progress, error); + return fu_backend_setup(FU_BACKEND(self->backend), progress, error); } static gboolean -fu_plugin_redfish_cleanup_setup_cb(FuDevice *device, gpointer user_data, GError **error) +fu_redfish_plugin_cleanup_setup_cb(FuDevice *device, gpointer user_data, GError **error) { - FuPlugin *self = FU_PLUGIN(user_data); - FuPluginData *priv = fu_plugin_get_data(self); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(user_data); FuProgress *progress = fu_progress_new(G_STRLOC); - /* the network adaptor might not autoconnect when coming back */ + /* the network adaptor might not auto-connect when coming back */ if (!fu_redfish_plugin_autoconnect_network_device(self, error)) return FALSE; - return fu_backend_setup(FU_BACKEND(priv->backend), progress, error); + return fu_backend_setup(FU_BACKEND(self->backend), progress, error); } static gboolean -fu_plugin_redfish_cleanup_coldplug_cb(FuDevice *device, gpointer user_data, GError **error) +fu_redfish_plugin_cleanup_coldplug_cb(FuDevice *device, gpointer user_data, GError **error) { - FuPlugin *self = FU_PLUGIN(user_data); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(user_data); FuProgress *progress = fu_progress_new(G_STRLOC); if (!fu_redfish_plugin_autoconnect_network_device(self, error)) return FALSE; - return fu_plugin_redfish_coldplug(self, progress, error); + return fu_redfish_plugin_coldplug(FU_PLUGIN(self), progress, error); } static gboolean -fu_plugin_redfish_cleanup(FuPlugin *self, +fu_redfish_plugin_cleanup(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - FuPluginData *priv = fu_plugin_get_data(self); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); guint64 reset_timeout = 0; g_autofree gchar *restart_timeout_str = NULL; - g_autoptr(FuRedfishRequest) request = fu_redfish_backend_request_new(priv->backend); + g_autoptr(FuRedfishRequest) request = fu_redfish_backend_request_new(self->backend); g_autoptr(JsonBuilder) builder = json_builder_new(); g_autoptr(GPtrArray) devices = NULL; @@ -521,14 +521,14 @@ fu_plugin_redfish_cleanup(FuPlugin *self, fu_progress_step_done(progress); /* remove all the devices */ - devices = fu_backend_get_devices(FU_BACKEND(priv->backend)); + devices = fu_backend_get_devices(FU_BACKEND(self->backend)); for (guint i = 0; i < devices->len; i++) { FuDevice *device_tmp = g_ptr_array_index(devices, i); - fu_backend_device_removed(FU_BACKEND(priv->backend), device_tmp); + fu_backend_device_removed(FU_BACKEND(self->backend), device_tmp); } /* work around manager bugs... */ - fu_backend_invalidate(FU_BACKEND(priv->backend)); + fu_backend_invalidate(FU_BACKEND(self->backend)); if (fu_redfish_device_get_reset_pre_delay(FU_REDFISH_DEVICE(device)) > 0) { fu_progress_sleep(fu_progress_get_child(progress), fu_redfish_device_get_reset_pre_delay(FU_REDFISH_DEVICE(device))); @@ -536,7 +536,7 @@ fu_plugin_redfish_cleanup(FuPlugin *self, fu_progress_step_done(progress); /* read the config file to work out how long to wait */ - restart_timeout_str = fu_plugin_get_config_value(self, "ManagerResetTimeout"); + restart_timeout_str = fu_plugin_get_config_value(plugin, "ManagerResetTimeout"); if (restart_timeout_str != NULL) fu_strtoull(restart_timeout_str, &reset_timeout, 1, 86400, NULL); if (reset_timeout == 0) { @@ -546,7 +546,7 @@ fu_plugin_redfish_cleanup(FuPlugin *self, /* wait for the BMC to come back */ if (!fu_device_retry_full(device, - fu_plugin_redfish_cleanup_setup_cb, + fu_redfish_plugin_cleanup_setup_cb, reset_timeout / FU_REDFISH_PLUGIN_CLEANUP_RETRIES_DELAY, FU_REDFISH_PLUGIN_CLEANUP_RETRIES_DELAY * 1000, self, @@ -566,7 +566,7 @@ fu_plugin_redfish_cleanup(FuPlugin *self, /* get the new list of devices */ if (!fu_device_retry_full(device, - fu_plugin_redfish_cleanup_coldplug_cb, + fu_redfish_plugin_cleanup_coldplug_cb, reset_timeout / FU_REDFISH_PLUGIN_CLEANUP_RETRIES_DELAY, FU_REDFISH_PLUGIN_CLEANUP_RETRIES_DELAY * 1000, self, @@ -581,40 +581,43 @@ fu_plugin_redfish_cleanup(FuPlugin *self, } static void -fu_plugin_redfish_load(FuContext *ctx) +fu_redfish_plugin_init(FuRedfishPlugin *self) { - fu_context_add_quirk_key(ctx, "RedfishResetPreDelay"); - fu_context_add_quirk_key(ctx, "RedfishResetPostDelay"); } static void -fu_plugin_redfish_init(FuPlugin *plugin) +fu_redfish_plugin_constructed(GObject *obj) { + FuPlugin *plugin = FU_PLUGIN(obj); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - priv->backend = fu_redfish_backend_new(ctx); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(plugin); + fu_context_add_quirk_key(ctx, "RedfishResetPreDelay"); + fu_context_add_quirk_key(ctx, "RedfishResetPostDelay"); + self->backend = fu_redfish_backend_new(ctx); fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_REDFISH_SMBIOS); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_SECURE_CONFIG); } static void -fu_plugin_redfish_destroy(FuPlugin *plugin) +fu_redfish_finalize(GObject *obj) { - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->smbios != NULL) - g_object_unref(priv->smbios); - g_object_unref(priv->backend); + FuRedfishPlugin *self = FU_REDFISH_PLUGIN(obj); + if (self->smbios != NULL) + g_object_unref(self->smbios); + g_object_unref(self->backend); + G_OBJECT_CLASS(fu_redfish_plugin_parent_class)->finalize(obj); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_redfish_plugin_class_init(FuRedfishPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_redfish_load; - vfuncs->init = fu_plugin_redfish_init; - vfuncs->destroy = fu_plugin_redfish_destroy; - vfuncs->to_string = fu_plugin_redfish_to_string; - vfuncs->startup = fu_plugin_redfish_startup; - vfuncs->coldplug = fu_plugin_redfish_coldplug; - vfuncs->cleanup = fu_plugin_redfish_cleanup; + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_redfish_plugin_constructed; + object_class->finalize = fu_redfish_finalize; + plugin_class->to_string = fu_redfish_plugin_to_string; + plugin_class->startup = fu_redfish_plugin_startup; + plugin_class->coldplug = fu_redfish_plugin_coldplug; + plugin_class->cleanup = fu_redfish_plugin_cleanup; } diff --git a/plugins/redfish/fu-redfish-plugin.h b/plugins/redfish/fu-redfish-plugin.h new file mode 100644 index 000000000..ce4378ffb --- /dev/null +++ b/plugins/redfish/fu-redfish-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuRedfishPlugin, fu_redfish_plugin, FU, REDFISH_PLUGIN, FuPlugin) diff --git a/plugins/redfish/fu-self-test.c b/plugins/redfish/fu-self-test.c index 31ffc3f3e..8c53b8a12 100644 --- a/plugins/redfish/fu-self-test.c +++ b/plugins/redfish/fu-self-test.c @@ -16,20 +16,12 @@ #include "fu-plugin-private.h" #include "fu-redfish-common.h" #include "fu-redfish-network.h" +#include "fu-redfish-plugin.h" typedef struct { FuPlugin *plugin; } FuTest; -static gboolean -fu_test_is_installed_test(void) -{ - const gchar *builddir = g_getenv("G_TEST_BUILDDIR"); - if (builddir == NULL) - return FALSE; - return g_str_has_prefix(builddir, FWUPD_PREFIX); -} - static void fu_test_self_init(FuTest *self) { @@ -37,7 +29,6 @@ fu_test_self_init(FuTest *self) g_autoptr(FuContext) ctx = fu_context_new(); g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(GError) error = NULL; - g_autofree gchar *pluginfn = NULL; ret = fu_context_load_quirks(ctx, FU_QUIRKS_LOAD_FLAG_NO_CACHE | FU_QUIRKS_LOAD_FLAG_NO_VERIFY, @@ -45,21 +36,7 @@ fu_test_self_init(FuTest *self) g_assert_no_error(error); g_assert_true(ret); - self->plugin = fu_plugin_new(ctx); - - /* running as an installed test */ - if (fu_test_is_installed_test()) { - g_autofree gchar *plugindir = fu_path_from_kind(FU_PATH_KIND_PLUGINDIR_PKG); - pluginfn = - g_build_filename(plugindir, "libfu_plugin_redfish." G_MODULE_SUFFIX, NULL); - } else { - pluginfn = g_test_build_filename(G_TEST_BUILT, - "libfu_plugin_redfish." G_MODULE_SUFFIX, - NULL); - } - ret = fu_plugin_open(self->plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin = fu_plugin_new_from_gtype(fu_redfish_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(self->plugin, progress, &error); if (g_error_matches(error, FWUPD_ERROR, FWUPD_ERROR_INVALID_FILE)) { g_test_skip("no redfish.py running"); diff --git a/plugins/redfish/meson.build b/plugins/redfish/meson.build index bcd0facb3..51710363f 100644 --- a/plugins/redfish/meson.build +++ b/plugins/redfish/meson.build @@ -9,10 +9,9 @@ if have_linux_ipmi ipmi_src += 'fu-ipmi-device.c' endif -shared_module('fu_plugin_redfish', - fu_hash, +plugin_builtin_redfish = static_library('fu_plugin_redfish', sources: [ - 'fu-plugin-redfish.c', + 'fu-redfish-plugin.c', 'fu-redfish-backend.c', 'fu-redfish-common.c', # fuzzing 'fu-redfish-device.c', @@ -24,23 +23,15 @@ shared_module('fu_plugin_redfish', 'fu-redfish-smbios.c', # fuzzing ipmi_src, ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, libcurl, ], ) +plugin_libs += plugin_builtin_redfish install_data(['redfish.conf'], install_dir: join_paths(sysconfdir, 'fwupd'), @@ -62,25 +53,10 @@ if get_option('tests') env.set('FWUPD_LOCALSTATEDIR', '/tmp/fwupd-self-test/var') e = executable( 'redfish-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-redfish-backend.c', - 'fu-redfish-common.c', - 'fu-redfish-device.c', - 'fu-redfish-legacy-device.c', - 'fu-redfish-multipart-device.c', - 'fu-redfish-network.c', - 'fu-redfish-network-device.c', - 'fu-redfish-request.c', - 'fu-redfish-smbios.c', - ipmi_src, - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, c_args: cargs, dependencies: [ plugin_deps, @@ -89,6 +65,7 @@ if get_option('tests') link_with: [ fwupd, fwupdplugin, + plugin_builtin_redfish, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/rts54hid/fu-plugin-rts54hid.c b/plugins/rts54hid/fu-plugin-rts54hid.c deleted file mode 100644 index 028f3a6fa..000000000 --- a/plugins/rts54hid/fu-plugin-rts54hid.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2018 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-rts54hid-device.h" -#include "fu-rts54hid-module.h" - -static void -fu_plugin_rts54hid_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_DEVICE); - fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_MODULE); -} - -static void -fu_plugin_rts54hid_load(FuContext *ctx) -{ - 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->load = fu_plugin_rts54hid_load; - vfuncs->init = fu_plugin_rts54hid_init; -} diff --git a/plugins/rts54hid/fu-rts54hid-plugin.c b/plugins/rts54hid/fu-rts54hid-plugin.c new file mode 100644 index 000000000..6db468677 --- /dev/null +++ b/plugins/rts54hid/fu-rts54hid-plugin.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2018 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-rts54hid-device.h" +#include "fu-rts54hid-module.h" +#include "fu-rts54hid-plugin.h" + +struct _FuRts54HidPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuRts54HidPlugin, fu_rts54hid_plugin, FU_TYPE_PLUGIN) + +static void +fu_rts54hid_plugin_init(FuRts54HidPlugin *self) +{ +} + +static void +fu_rts54hid_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "Rts54TargetAddr"); + fu_context_add_quirk_key(ctx, "Rts54I2cSpeed"); + fu_context_add_quirk_key(ctx, "Rts54RegisterAddrLen"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_DEVICE); + fu_plugin_add_device_gtype(plugin, FU_TYPE_RTS54HID_MODULE); +} + +static void +fu_rts54hid_plugin_class_init(FuRts54HidPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_rts54hid_plugin_constructed; +} diff --git a/plugins/rts54hid/fu-rts54hid-plugin.h b/plugins/rts54hid/fu-rts54hid-plugin.h new file mode 100644 index 000000000..7c2b2614e --- /dev/null +++ b/plugins/rts54hid/fu-rts54hid-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuRts54HidPlugin, fu_rts54hid_plugin, FU, RTS54HID_PLUGIN, FuPlugin) diff --git a/plugins/rts54hid/meson.build b/plugins/rts54hid/meson.build index e208c4f33..8c9bccb46 100644 --- a/plugins/rts54hid/meson.build +++ b/plugins/rts54hid/meson.build @@ -2,28 +2,15 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginRts54Hid"'] plugin_quirks += files('rts54hid.quirk') - -shared_module('fu_plugin_rts54hid', - fu_hash, +plugin_builtins += static_library('fu_plugin_rts54hid', sources: [ 'fu-rts54hid-device.c', 'fu-rts54hid-module.c', - 'fu-plugin-rts54hid.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-rts54hid-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/rts54hub/fu-plugin-rts54hub.c b/plugins/rts54hub/fu-rts54hub-plugin.c similarity index 55% rename from plugins/rts54hub/fu-plugin-rts54hub.c rename to plugins/rts54hub/fu-rts54hub-plugin.c index 9c6bbcb91..0418e0582 100644 --- a/plugins/rts54hub/fu-plugin-rts54hub.c +++ b/plugins/rts54hub/fu-rts54hub-plugin.c @@ -6,32 +6,38 @@ #include "config.h" -#include - #include "fu-rts54hub-device.h" +#include "fu-rts54hub-plugin.h" #include "fu-rts54hub-rtd21xx-background.h" #include "fu-rts54hub-rtd21xx-foreground.h" +struct _FuRts54HubPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuRts54HubPlugin, fu_rts54hub_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_rts54hub_init(FuPlugin *plugin) +fu_rts54hub_plugin_init(FuRts54HubPlugin *self) { +} + +static void +fu_rts54hub_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "Rts54TargetAddr"); + fu_context_add_quirk_key(ctx, "Rts54I2cSpeed"); + fu_context_add_quirk_key(ctx, "Rts54RegisterAddrLen"); 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); } static void -fu_plugin_rts54hub_load(FuContext *ctx) +fu_rts54hub_plugin_class_init(FuRts54HubPluginClass *klass) { - 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->load = fu_plugin_rts54hub_load; - vfuncs->init = fu_plugin_rts54hub_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_rts54hub_plugin_constructed; } diff --git a/plugins/rts54hub/fu-rts54hub-plugin.h b/plugins/rts54hub/fu-rts54hub-plugin.h new file mode 100644 index 000000000..f78b9e792 --- /dev/null +++ b/plugins/rts54hub/fu-rts54hub-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuRts54HubPlugin, fu_rts54hub_plugin, FU, RTS54HUB_PLUGIN, FuPlugin) diff --git a/plugins/rts54hub/meson.build b/plugins/rts54hub/meson.build index f68e5f382..a1a3e800b 100644 --- a/plugins/rts54hub/meson.build +++ b/plugins/rts54hub/meson.build @@ -2,30 +2,17 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginRts54Hub"'] plugin_quirks += files('rts54hub.quirk') - -shared_module('fu_plugin_rts54hub', - fu_hash, +plugin_builtins += static_library('fu_plugin_rts54hub', sources: [ 'fu-rts54hub-device.c', 'fu-rts54hub-rtd21xx-device.c', 'fu-rts54hub-rtd21xx-background.c', 'fu-rts54hub-rtd21xx-foreground.c', - 'fu-plugin-rts54hub.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-rts54hub-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/scsi/fu-plugin-scsi.c b/plugins/scsi/fu-plugin-scsi.c deleted file mode 100644 index ac6d5fed2..000000000 --- a/plugins/scsi/fu-plugin-scsi.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2022 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-scsi-device.h" - -static void -fu_plugin_scsi_init(FuPlugin *plugin) -{ - fu_plugin_add_udev_subsystem(plugin, "block"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_SCSI_DEVICE); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_scsi_init; -} diff --git a/plugins/scsi/fu-scsi-plugin.c b/plugins/scsi/fu-scsi-plugin.c new file mode 100644 index 000000000..4e3b14947 --- /dev/null +++ b/plugins/scsi/fu-scsi-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-scsi-device.h" +#include "fu-scsi-plugin.h" + +struct _FuScsiPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuScsiPlugin, fu_scsi_plugin, FU_TYPE_PLUGIN) + +static void +fu_scsi_plugin_init(FuScsiPlugin *self) +{ +} + +static void +fu_scsi_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "block"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_SCSI_DEVICE); +} + +static void +fu_scsi_plugin_class_init(FuScsiPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_scsi_plugin_constructed; +} diff --git a/plugins/scsi/fu-scsi-plugin.h b/plugins/scsi/fu-scsi-plugin.h new file mode 100644 index 000000000..fa20e67c8 --- /dev/null +++ b/plugins/scsi/fu-scsi-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuScsiPlugin, fu_scsi_plugin, FU, SCSI_PLUGIN, FuPlugin) diff --git a/plugins/scsi/meson.build b/plugins/scsi/meson.build index a4f821ea0..1dfe8f01f 100644 --- a/plugins/scsi/meson.build +++ b/plugins/scsi/meson.build @@ -3,30 +3,17 @@ if get_option('plugin_scsi').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginScsi"'] plugin_quirks += files('scsi.quirk') - -shared_module('fu_plugin_scsi', - fu_hash, +plugin_builtins += static_library('fu_plugin_scsi', sources: [ - 'fu-plugin-scsi.c', + 'fu-scsi-plugin.c', 'fu-scsi-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, '-DLOCALSTATEDIR="' + localstatedir + '"', ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) endif diff --git a/plugins/steelseries/fu-plugin-steelseries.c b/plugins/steelseries/fu-steelseries-plugin.c similarity index 62% rename from plugins/steelseries/fu-plugin-steelseries.c rename to plugins/steelseries/fu-steelseries-plugin.c index 6d08db31d..2c3211511 100644 --- a/plugins/steelseries/fu-plugin-steelseries.c +++ b/plugins/steelseries/fu-steelseries-plugin.c @@ -7,18 +7,29 @@ #include "config.h" -#include - #include "fu-steelseries-fizz-hid.h" #include "fu-steelseries-fizz-tunnel.h" #include "fu-steelseries-fizz.h" #include "fu-steelseries-gamepad.h" #include "fu-steelseries-mouse.h" +#include "fu-steelseries-plugin.h" #include "fu-steelseries-sonic.h" +struct _FuSteelseriesPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSteelseriesPlugin, fu_steelseries_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_steelseries_init(FuPlugin *plugin) +fu_steelseries_plugin_init(FuSteelseriesPlugin *self) { +} + +static void +fu_steelseries_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_FIZZ); fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_FIZZ_HID); fu_plugin_add_device_gtype(plugin, FU_TYPE_STEELSERIES_FIZZ_TUNNEL); @@ -28,9 +39,9 @@ fu_plugin_steelseries_init(FuPlugin *plugin) fu_plugin_add_udev_subsystem(plugin, "hidraw"); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_steelseries_plugin_class_init(FuSteelseriesPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_steelseries_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_steelseries_plugin_constructed; } diff --git a/plugins/steelseries/fu-steelseries-plugin.h b/plugins/steelseries/fu-steelseries-plugin.h new file mode 100644 index 000000000..f8cc68a9b --- /dev/null +++ b/plugins/steelseries/fu-steelseries-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSteelseriesPlugin, fu_steelseries_plugin, FU, STEELSERIES_PLUGIN, FuPlugin) diff --git a/plugins/steelseries/meson.build b/plugins/steelseries/meson.build index 14c67901f..b723a49c4 100644 --- a/plugins/steelseries/meson.build +++ b/plugins/steelseries/meson.build @@ -2,11 +2,9 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSteelSeries"'] plugin_quirks += files('steelseries.quirk') - -shared_module('fu_plugin_steelseries', - fu_hash, +plugin_builtins += static_library('fu_plugin_steelseries', sources: [ - 'fu-plugin-steelseries.c', + 'fu-steelseries-plugin.c', 'fu-steelseries-device.c', 'fu-steelseries-firmware.c', 'fu-steelseries-fizz-hid.c', @@ -16,20 +14,9 @@ shared_module('fu_plugin_steelseries', 'fu-steelseries-gamepad.c', 'fu-steelseries-sonic.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/superio/fu-plugin-superio.c b/plugins/superio/fu-superio-plugin.c similarity index 78% rename from plugins/superio/fu-plugin-superio.c rename to plugins/superio/fu-superio-plugin.c index f8665781b..99ca43a01 100644 --- a/plugins/superio/fu-plugin-superio.c +++ b/plugins/superio/fu-superio-plugin.c @@ -7,16 +7,21 @@ #include "config.h" -#include - #include "fu-superio-it55-device.h" #include "fu-superio-it85-device.h" #include "fu-superio-it89-device.h" +#include "fu-superio-plugin.h" + +struct _FuSuperioPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSuperioPlugin, fu_superio_plugin, FU_TYPE_PLUGIN) #define FU_QUIRKS_SUPERIO_GTYPE "SuperioGType" static gboolean -fu_plugin_superio_coldplug_chipset(FuPlugin *plugin, const gchar *guid, GError **error) +fu_superio_plugin_coldplug_chipset(FuPlugin *plugin, const gchar *guid, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); const gchar *dmi_vendor; @@ -74,29 +79,8 @@ fu_plugin_superio_coldplug_chipset(FuPlugin *plugin, const gchar *guid, GError * return TRUE; } -static void -fu_plugin_superio_init(FuPlugin *plugin) -{ - 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); - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "linux_lockdown"); -} - -static void -fu_plugin_superio_load(FuContext *ctx) -{ - fu_context_add_quirk_key(ctx, "SuperioGType"); - fu_context_add_quirk_key(ctx, "SuperioId"); - fu_context_add_quirk_key(ctx, "SuperioPort"); - fu_context_add_quirk_key(ctx, "SuperioControlPort"); - fu_context_add_quirk_key(ctx, "SuperioDataPort"); - fu_context_add_quirk_key(ctx, "SuperioTimeout"); - fu_context_add_quirk_key(ctx, "SuperioAutoloadAction"); -} - static gboolean -fu_plugin_superio_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_superio_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); GPtrArray *hwids; @@ -112,17 +96,41 @@ fu_plugin_superio_coldplug(FuPlugin *plugin, FuProgress *progress, GError **erro hwids = fu_context_get_hwid_guids(ctx); for (guint i = 0; i < hwids->len; i++) { const gchar *guid = g_ptr_array_index(hwids, i); - if (!fu_plugin_superio_coldplug_chipset(plugin, guid, error)) + if (!fu_superio_plugin_coldplug_chipset(plugin, guid, error)) return FALSE; } return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_superio_plugin_init(FuSuperioPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_superio_load; - vfuncs->init = fu_plugin_superio_init; - vfuncs->coldplug = fu_plugin_superio_coldplug; +} + +static void +fu_superio_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "SuperioGType"); + fu_context_add_quirk_key(ctx, "SuperioId"); + fu_context_add_quirk_key(ctx, "SuperioPort"); + fu_context_add_quirk_key(ctx, "SuperioControlPort"); + fu_context_add_quirk_key(ctx, "SuperioDataPort"); + fu_context_add_quirk_key(ctx, "SuperioTimeout"); + fu_context_add_quirk_key(ctx, "SuperioAutoloadAction"); + 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); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "linux_lockdown"); +} + +static void +fu_superio_plugin_class_init(FuSuperioPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_superio_plugin_constructed; + plugin_class->coldplug = fu_superio_plugin_coldplug; } diff --git a/plugins/superio/fu-superio-plugin.h b/plugins/superio/fu-superio-plugin.h new file mode 100644 index 000000000..a581e57c7 --- /dev/null +++ b/plugins/superio/fu-superio-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSuperioPlugin, fu_superio_plugin, FU, SUPERIO_PLUGIN, FuPlugin) diff --git a/plugins/superio/meson.build b/plugins/superio/meson.build index 5104baae3..986bcb5d8 100644 --- a/plugins/superio/meson.build +++ b/plugins/superio/meson.build @@ -2,31 +2,18 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSuperio"'] plugin_quirks += files('superio.quirk') - -shared_module('fu_plugin_superio', - fu_hash, +plugin_builtins += static_library('fu_plugin_superio', sources: [ - 'fu-plugin-superio.c', + 'fu-superio-plugin.c', 'fu-superio-device.c', 'fu-superio-it55-device.c', 'fu-superio-it85-device.c', 'fu-superio-it89-device.c', 'fu-superio-common.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/synaptics-cape/fu-plugin-synaptics-cape.c b/plugins/synaptics-cape/fu-plugin-synaptics-cape.c deleted file mode 100644 index f94399166..000000000 --- a/plugins/synaptics-cape/fu-plugin-synaptics-cape.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2021 Synaptics Incorporated - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-synaptics-cape-device.h" -#include "fu-synaptics-cape-firmware.h" - -static void -fu_plugin_synaptics_cape_init(FuPlugin *plugin) -{ - 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-cape/fu-synaptics-cape-plugin.c b/plugins/synaptics-cape/fu-synaptics-cape-plugin.c new file mode 100644 index 000000000..df8e1cb30 --- /dev/null +++ b/plugins/synaptics-cape/fu-synaptics-cape-plugin.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2021 Synaptics Incorporated + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-synaptics-cape-device.h" +#include "fu-synaptics-cape-firmware.h" +#include "fu-synaptics-cape-plugin.h" + +struct _FuSynapticsCapePlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSynapticsCapePlugin, fu_synaptics_cape_plugin, FU_TYPE_PLUGIN) + +static void +fu_synaptics_cape_plugin_init(FuSynapticsCapePlugin *self) +{ +} + +static void +fu_synaptics_cape_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_CAPE_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_CAPE_FIRMWARE); +} + +static void +fu_synaptics_cape_plugin_class_init(FuSynapticsCapePluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_synaptics_cape_plugin_constructed; +} diff --git a/plugins/synaptics-cape/fu-synaptics-cape-plugin.h b/plugins/synaptics-cape/fu-synaptics-cape-plugin.h new file mode 100644 index 000000000..3e8ef1144 --- /dev/null +++ b/plugins/synaptics-cape/fu-synaptics-cape-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSynapticsCapePlugin, + fu_synaptics_cape_plugin, + FU, + SYNAPTICS_CAPE_PLUGIN, + FuPlugin) diff --git a/plugins/synaptics-cape/meson.build b/plugins/synaptics-cape/meson.build index c1a6e8873..d8f574a6d 100644 --- a/plugins/synaptics-cape/meson.build +++ b/plugins/synaptics-cape/meson.build @@ -2,28 +2,15 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSynapticsCape"'] plugin_quirks += files('synaptics-cape.quirk') - -shared_module('fu_plugin_synaptics_cape', - fu_hash, +plugin_builtins += static_library('fu_plugin_synaptics_cape', sources: [ - 'fu-plugin-synaptics-cape.c', + 'fu-synaptics-cape-plugin.c', 'fu-synaptics-cape-device.c', 'fu-synaptics-cape-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.c similarity index 50% rename from plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c rename to plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.c index 40904d54d..98c195299 100644 --- a/plugins/synaptics-cxaudio/fu-plugin-synaptics-cxaudio.c +++ b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.c @@ -6,31 +6,37 @@ #include "config.h" -#include - #include "fu-synaptics-cxaudio-device.h" #include "fu-synaptics-cxaudio-firmware.h" +#include "fu-synaptics-cxaudio-plugin.h" + +struct _FuSynapticsCxaudioPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSynapticsCxaudioPlugin, fu_synaptics_cxaudio_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_synaptics_cxaudio_init(FuPlugin *plugin) +fu_synaptics_cxaudio_plugin_init(FuSynapticsCxaudioPlugin *self) { +} + +static void +fu_synaptics_cxaudio_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "CxaudioChipIdBase"); + fu_context_add_quirk_key(ctx, "CxaudioPatch1ValidAddr"); + fu_context_add_quirk_key(ctx, "CxaudioPatch2ValidAddr"); + fu_context_add_quirk_key(ctx, "CxaudioSoftwareReset"); fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPTICS_CXAUDIO_DEVICE); fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_CXAUDIO_FIRMWARE); } static void -fu_plugin_synaptics_cxaudio_load(FuContext *ctx) +fu_synaptics_cxaudio_plugin_class_init(FuSynapticsCxaudioPluginClass *klass) { - fu_context_add_quirk_key(ctx, "CxaudioChipIdBase"); - fu_context_add_quirk_key(ctx, "CxaudioPatch1ValidAddr"); - 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->load = fu_plugin_synaptics_cxaudio_load; - vfuncs->init = fu_plugin_synaptics_cxaudio_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_synaptics_cxaudio_plugin_constructed; } diff --git a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.h b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.h new file mode 100644 index 000000000..dfdc46ef8 --- /dev/null +++ b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSynapticsCxaudioPlugin, + fu_synaptics_cxaudio_plugin, + FU, + SYNAPTICS_CXAUDIO_PLUGIN, + FuPlugin) diff --git a/plugins/synaptics-cxaudio/meson.build b/plugins/synaptics-cxaudio/meson.build index 7f6891211..47d4b1b6d 100644 --- a/plugins/synaptics-cxaudio/meson.build +++ b/plugins/synaptics-cxaudio/meson.build @@ -2,28 +2,15 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSynapticsCxaudio"'] plugin_quirks += files('synaptics-cxaudio.quirk') - -shared_module('fu_plugin_synaptics_cxaudio', - fu_hash, +plugin_builtins += static_library('fu_plugin_synaptics_cxaudio', sources: [ - 'fu-plugin-synaptics-cxaudio.c', + 'fu-synaptics-cxaudio-plugin.c', 'fu-synaptics-cxaudio-device.c', 'fu-synaptics-cxaudio-firmware.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/synaptics-mst/fu-self-test.c b/plugins/synaptics-mst/fu-self-test.c index 888004583..1010e996b 100644 --- a/plugins/synaptics-mst/fu-self-test.c +++ b/plugins/synaptics-mst/fu-self-test.c @@ -14,6 +14,7 @@ #include "fu-context-private.h" #include "fu-plugin-private.h" #include "fu-synaptics-mst-firmware.h" +#include "fu-synaptics-mst-plugin.h" static void _plugin_device_added_cb(FuPlugin *plugin, FuDevice *device, gpointer user_data) @@ -68,28 +69,22 @@ fu_plugin_synaptics_mst_none_func(void) gboolean ret; const gchar *ci = g_getenv("CI_NETWORK"); g_autoptr(FuContext) ctx = fu_context_new(); - g_autoptr(FuPlugin) plugin = fu_plugin_new(ctx); + g_autoptr(FuPlugin) plugin = NULL; g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(GError) error = NULL; g_autoptr(GPtrArray) devices = g_ptr_array_new_with_free_func((GDestroyNotify)g_object_unref); - g_autofree gchar *pluginfn = NULL; g_autofree gchar *filename = NULL; ret = fu_context_load_quirks(ctx, FU_QUIRKS_LOAD_FLAG_NO_CACHE, &error); g_assert_no_error(error); g_assert_true(ret); + plugin = fu_plugin_new_from_gtype(fu_synaptics_mst_plugin_get_type(), ctx); g_signal_connect(FU_PLUGIN(plugin), "device-added", G_CALLBACK(_plugin_device_added_cb), &devices); - pluginfn = g_test_build_filename(G_TEST_BUILT, - "libfu_plugin_synaptics_mst." G_MODULE_SUFFIX, - NULL); - ret = fu_plugin_open(plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); ret = fu_plugin_runner_startup(plugin, progress, &error); if (!ret && g_error_matches(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) { g_test_skip("Skipping tests due to unsupported configuration"); @@ -115,27 +110,22 @@ fu_plugin_synaptics_mst_tb16_func(void) const gchar *ci = g_getenv("CI_NETWORK"); g_autoptr(FuContext) ctx = fu_context_new(); g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); - g_autoptr(FuPlugin) plugin = fu_plugin_new(ctx); + g_autoptr(FuPlugin) plugin = NULL; g_autoptr(GError) error = NULL; g_autoptr(GPtrArray) devices = g_ptr_array_new_with_free_func((GDestroyNotify)g_object_unref); - g_autofree gchar *pluginfn = NULL; g_autofree gchar *filename = NULL; ret = fu_context_load_quirks(ctx, FU_QUIRKS_LOAD_FLAG_NO_CACHE, &error); g_assert_no_error(error); g_assert_true(ret); + plugin = fu_plugin_new_from_gtype(fu_synaptics_mst_plugin_get_type(), ctx); g_signal_connect(FU_PLUGIN(plugin), "device-added", G_CALLBACK(_plugin_device_added_cb), &devices); - pluginfn = g_test_build_filename(G_TEST_BUILT, - "libfu_plugin_synaptics_mst." G_MODULE_SUFFIX, - NULL); - ret = fu_plugin_open(plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); + ret = fu_plugin_runner_startup(plugin, progress, &error); if (!ret && g_error_matches(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) { g_test_skip("Skipping tests due to unsupported configuration"); diff --git a/plugins/synaptics-mst/fu-plugin-synaptics-mst.c b/plugins/synaptics-mst/fu-synaptics-mst-plugin.c similarity index 55% rename from plugins/synaptics-mst/fu-plugin-synaptics-mst.c rename to plugins/synaptics-mst/fu-synaptics-mst-plugin.c index 677eb6651..1c7759365 100644 --- a/plugins/synaptics-mst/fu-plugin-synaptics-mst.c +++ b/plugins/synaptics-mst/fu-synaptics-mst-plugin.c @@ -8,21 +8,23 @@ #include "config.h" -#include - #include "fu-synaptics-mst-common.h" #include "fu-synaptics-mst-device.h" #include "fu-synaptics-mst-firmware.h" +#include "fu-synaptics-mst-plugin.h" #define FU_SYNAPTICS_MST_DRM_REPLUG_DELAY 5 /* s */ -struct FuPluginData { +struct _FuSynapticsMstPlugin { + FuPlugin parent_instance; GPtrArray *devices; guint drm_changed_id; }; +G_DEFINE_TYPE(FuSynapticsMstPlugin, fu_synaptics_mst_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_synaptics_mst_device_rescan(FuPlugin *plugin, FuDevice *device) +fu_synaptics_mst_plugin_device_rescan(FuSynapticsMstPlugin *self, FuDevice *device) { g_autoptr(FuDeviceLocker) locker = NULL; g_autoptr(GError) error_local = NULL; @@ -40,37 +42,35 @@ fu_plugin_synaptics_mst_device_rescan(FuPlugin *plugin, FuDevice *device) fu_device_get_logical_id(device), error_local->message); if (fu_device_has_flag(device, FWUPD_DEVICE_FLAG_REGISTERED)) - fu_plugin_device_remove(plugin, device); + fu_plugin_device_remove(FU_PLUGIN(self), device); } else { - fu_plugin_device_add(plugin, device); + fu_plugin_device_add(FU_PLUGIN(self), device); } } /* reprobe all existing devices added by this plugin */ static void -fu_plugin_synaptics_mst_rescan(FuPlugin *plugin) +fu_synaptics_mst_plugin_rescan(FuSynapticsMstPlugin *self) { - FuPluginData *priv = fu_plugin_get_data(plugin); - for (guint i = 0; i < priv->devices->len; i++) { - FuDevice *device = FU_DEVICE(g_ptr_array_index(priv->devices, i)); - fu_plugin_synaptics_mst_device_rescan(plugin, device); + for (guint i = 0; i < self->devices->len; i++) { + FuDevice *device = FU_DEVICE(g_ptr_array_index(self->devices, i)); + fu_synaptics_mst_plugin_device_rescan(self, device); } } static gboolean -fu_plugin_synaptics_mst_rescan_cb(gpointer user_data) +fu_synaptics_mst_plugin_rescan_cb(gpointer user_data) { - FuPlugin *plugin = FU_PLUGIN(user_data); - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_plugin_synaptics_mst_rescan(plugin); - priv->drm_changed_id = 0; + FuSynapticsMstPlugin *self = FU_SYNAPTICS_MST_PLUGIN(user_data); + fu_synaptics_mst_plugin_rescan(self); + self->drm_changed_id = 0; return FALSE; } static gboolean -fu_plugin_synaptics_mst_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **error) +fu_synaptics_mst_plugin_backend_device_changed(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuSynapticsMstPlugin *self = FU_SYNAPTICS_MST_PLUGIN(plugin); /* interesting device? */ if (!FU_IS_UDEV_DEVICE(device)) @@ -79,19 +79,19 @@ fu_plugin_synaptics_mst_backend_device_changed(FuPlugin *plugin, FuDevice *devic return TRUE; /* recoldplug all drm_dp_aux_dev devices after a *long* delay */ - if (priv->drm_changed_id != 0) - g_source_remove(priv->drm_changed_id); - priv->drm_changed_id = g_timeout_add_seconds(FU_SYNAPTICS_MST_DRM_REPLUG_DELAY, - fu_plugin_synaptics_mst_rescan_cb, + if (self->drm_changed_id != 0) + g_source_remove(self->drm_changed_id); + self->drm_changed_id = g_timeout_add_seconds(FU_SYNAPTICS_MST_DRM_REPLUG_DELAY, + fu_synaptics_mst_plugin_rescan_cb, plugin); return TRUE; } static gboolean -fu_plugin_synaptics_mst_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) +fu_synaptics_mst_plugin_backend_device_added(FuPlugin *plugin, FuDevice *device, GError **error) { + FuSynapticsMstPlugin *self = FU_SYNAPTICS_MST_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); g_autoptr(FuDeviceLocker) locker = NULL; g_autoptr(FuSynapticsMstDevice) dev = NULL; @@ -110,13 +110,13 @@ fu_plugin_synaptics_mst_backend_device_added(FuPlugin *plugin, FuDevice *device, fu_context_get_hwid_value(ctx, FU_HWIDS_KEY_PRODUCT_SKU)); /* this might fail if there is nothing connected */ - fu_plugin_synaptics_mst_device_rescan(plugin, FU_DEVICE(dev)); - g_ptr_array_add(priv->devices, g_steal_pointer(&dev)); + fu_synaptics_mst_plugin_device_rescan(self, FU_DEVICE(dev)); + g_ptr_array_add(self->devices, g_steal_pointer(&dev)); return TRUE; } static gboolean -fu_plugin_synaptics_mst_write_firmware(FuPlugin *plugin, +fu_synaptics_mst_plugin_write_firmware(FuPlugin *plugin, FuDevice *device, GBytes *blob_fw, FuProgress *progress, @@ -134,41 +134,42 @@ fu_plugin_synaptics_mst_write_firmware(FuPlugin *plugin, } static void -fu_plugin_synaptics_mst_init(FuPlugin *plugin) +fu_synaptics_mst_plugin_init(FuSynapticsMstPlugin *self) { - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - /* devices added by this plugin */ - priv->devices = g_ptr_array_new_with_free_func((GDestroyNotify)g_object_unref); + self->devices = g_ptr_array_new_with_free_func((GDestroyNotify)g_object_unref); +} +static void +fu_synaptics_mst_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "SynapticsMstDeviceKind"); 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); } static void -fu_plugin_synaptics_mst_load(FuContext *ctx) +fu_synaptics_mst_finalize(GObject *obj) { - fu_context_add_quirk_key(ctx, "SynapticsMstDeviceKind"); + FuSynapticsMstPlugin *self = FU_SYNAPTICS_MST_PLUGIN(obj); + if (self->drm_changed_id != 0) + g_source_remove(self->drm_changed_id); + g_ptr_array_unref(self->devices); + G_OBJECT_CLASS(fu_synaptics_mst_plugin_parent_class)->finalize(obj); } static void -fu_plugin_synaptics_mst_destroy(FuPlugin *plugin) +fu_synaptics_mst_plugin_class_init(FuSynapticsMstPluginClass *klass) { - 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); -} + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->load = fu_plugin_synaptics_mst_load; - 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; + object_class->constructed = fu_synaptics_mst_plugin_constructed; + object_class->finalize = fu_synaptics_mst_finalize; + plugin_class->write_firmware = fu_synaptics_mst_plugin_write_firmware; + plugin_class->backend_device_added = fu_synaptics_mst_plugin_backend_device_added; + plugin_class->backend_device_changed = fu_synaptics_mst_plugin_backend_device_changed; } diff --git a/plugins/synaptics-mst/fu-synaptics-mst-plugin.h b/plugins/synaptics-mst/fu-synaptics-mst-plugin.h new file mode 100644 index 000000000..1800baba2 --- /dev/null +++ b/plugins/synaptics-mst/fu-synaptics-mst-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSynapticsMstPlugin, + fu_synaptics_mst_plugin, + FU, + SYNAPTICS_MST_PLUGIN, + FuPlugin) diff --git a/plugins/synaptics-mst/meson.build b/plugins/synaptics-mst/meson.build index 3bf72c161..29ec7e810 100644 --- a/plugins/synaptics-mst/meson.build +++ b/plugins/synaptics-mst/meson.build @@ -4,33 +4,22 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginSynapticsMST"'] plugin_quirks += files('synaptics-mst.quirk') -shared_module('fu_plugin_synaptics_mst', - fu_hash, +plugin_builtin_synaptics_mst = static_library('fu_plugin_synaptics_mst', sources: [ - 'fu-plugin-synaptics-mst.c', + 'fu-synaptics-mst-plugin.c', 'fu-synaptics-mst-common.c', 'fu-synaptics-mst-connection.c', 'fu-synaptics-mst-device.c', 'fu-synaptics-mst-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: [ cargs, ], - link_with: [ - fwupd, - fwupdplugin, - ], - dependencies: [ - plugin_deps, - ], + link_with: plugin_libs, + dependencies: plugin_deps, ) +plugin_libs += plugin_builtin_synaptics_mst if get_option('tests') install_data(['tests/synaptics-mst.builder.xml'], @@ -42,19 +31,10 @@ if get_option('tests') env.set('FWUPD_DATADIR_QUIRKS', meson.current_source_dir()) e = executable( 'synaptics-mst-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-synaptics-mst-common.c', - 'fu-synaptics-mst-connection.c', - 'fu-synaptics-mst-device.c', - 'fu-synaptics-mst-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, valgrind, @@ -62,6 +42,7 @@ if get_option('tests') link_with: [ fwupd, fwupdplugin, + plugin_builtin_synaptics_mst, ], c_args: [ cargs, diff --git a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c b/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c deleted file mode 100644 index 0f62ac561..000000000 --- a/plugins/synaptics-prometheus/fu-plugin-synaptics-prometheus.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2016 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-synaprom-device.h" -#include "fu-synaprom-firmware.h" - -static void -fu_plugin_synaptics_prometheus_init(FuPlugin *plugin) -{ - 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-prometheus/fu-synaprom-plugin.c b/plugins/synaptics-prometheus/fu-synaprom-plugin.c new file mode 100644 index 000000000..c144096ec --- /dev/null +++ b/plugins/synaptics-prometheus/fu-synaprom-plugin.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-synaprom-device.h" +#include "fu-synaprom-firmware.h" +#include "fu-synaprom-plugin.h" + +struct _FuSynapromPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSynapromPlugin, fu_synaprom_plugin, FU_TYPE_PLUGIN) + +static void +fu_synaprom_plugin_init(FuSynapromPlugin *self) +{ +} + +static void +fu_synaprom_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_set_name(plugin, "synaptics_prometheus"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_SYNAPROM_DEVICE); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPROM_FIRMWARE); +} + +static void +fu_synaprom_plugin_class_init(FuSynapromPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_synaprom_plugin_constructed; +} diff --git a/plugins/synaptics-prometheus/fu-synaprom-plugin.h b/plugins/synaptics-prometheus/fu-synaprom-plugin.h new file mode 100644 index 000000000..276cba393 --- /dev/null +++ b/plugins/synaptics-prometheus/fu-synaprom-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSynapromPlugin, fu_synaprom_plugin, FU, SYNAPROM_PLUGIN, FuPlugin) diff --git a/plugins/synaptics-prometheus/meson.build b/plugins/synaptics-prometheus/meson.build index 9be1487b1..7579e75ca 100644 --- a/plugins/synaptics-prometheus/meson.build +++ b/plugins/synaptics-prometheus/meson.build @@ -2,32 +2,20 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSynapticsPrometheus"'] plugin_quirks += files('synaptics-prometheus.quirk') - -shared_module('fu_plugin_synaptics_prometheus', - fu_hash, +plugin_builtin_synaprom = static_library('fu_plugin_synaprom', sources: [ - 'fu-plugin-synaptics-prometheus.c', + 'fu-synaprom-plugin.c', 'fu-synaprom-common.c', 'fu-synaprom-config.c', 'fu-synaprom-device.c', 'fu-synaprom-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_synaprom if get_option('tests') install_data(['tests/synaptics-prometheus.builder.xml'], @@ -37,25 +25,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'synaptics-prometheus-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-synaprom-common.c', - 'fu-synaprom-config.c', - 'fu-synaprom-device.c', - 'fu-synaprom-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_synaprom, ], c_args: cargs, install: true, diff --git a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c b/plugins/synaptics-rmi/fu-synaptics-rmi-plugin.c similarity index 52% rename from plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c rename to plugins/synaptics-rmi/fu-synaptics-rmi-plugin.c index 7a3a06bde..610f61b5a 100644 --- a/plugins/synaptics-rmi/fu-plugin-synaptics-rmi.c +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-plugin.c @@ -6,15 +6,26 @@ #include "config.h" -#include - #include "fu-synaptics-rmi-firmware.h" #include "fu-synaptics-rmi-hid-device.h" +#include "fu-synaptics-rmi-plugin.h" #include "fu-synaptics-rmi-ps2-device.h" +struct _FuSynapticsRmiPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSynapticsRmiPlugin, fu_synaptics_rmi_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_synaptics_rmi_init(FuPlugin *plugin) +fu_synaptics_rmi_plugin_init(FuSynapticsRmiPlugin *self) { +} + +static void +fu_synaptics_rmi_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); 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); @@ -22,9 +33,9 @@ fu_plugin_synaptics_rmi_init(FuPlugin *plugin) fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_SYNAPTICS_RMI_FIRMWARE); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_synaptics_rmi_plugin_class_init(FuSynapticsRmiPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_synaptics_rmi_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_synaptics_rmi_plugin_constructed; } diff --git a/plugins/synaptics-rmi/fu-synaptics-rmi-plugin.h b/plugins/synaptics-rmi/fu-synaptics-rmi-plugin.h new file mode 100644 index 000000000..a280fa502 --- /dev/null +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSynapticsRmiPlugin, + fu_synaptics_rmi_plugin, + FU, + SYNAPTICS_RMI_PLUGIN, + FuPlugin) diff --git a/plugins/synaptics-rmi/meson.build b/plugins/synaptics-rmi/meson.build index d17945457..55448fb76 100644 --- a/plugins/synaptics-rmi/meson.build +++ b/plugins/synaptics-rmi/meson.build @@ -5,11 +5,9 @@ if get_option('plugin_synaptics_rmi').require(gnutls.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginSynapticsRmi"'] plugin_quirks += files('synaptics-rmi.quirk') - -shared_module('fu_plugin_synaptics_rmi', - fu_hash, +plugin_builtin_synaptics_rmi = static_library('fu_plugin_synaptics_rmi', sources: [ - 'fu-plugin-synaptics-rmi.c', + 'fu-synaptics-rmi-plugin.c', 'fu-synaptics-rmi-common.c', # fuzzing 'fu-synaptics-rmi-device.c', 'fu-synaptics-rmi-hid-device.c', @@ -19,22 +17,12 @@ shared_module('fu_plugin_synaptics_rmi', 'fu-synaptics-rmi-v7-device.c', 'fu-synaptics-rmi-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + dependencies: plugin_deps, + link_with: plugin_libs, ) +plugin_builtins += plugin_builtin_synaptics_rmi if get_option('tests') install_data(['tests/synaptics-rmi-0x.builder.xml','tests/synaptics-rmi-10.builder.xml'], @@ -44,23 +32,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'synaptics-rmi-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-synaptics-rmi-common.c', - 'fu-synaptics-rmi-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_synaptics_rmi, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/system76-launch/fu-plugin-system76-launch.c b/plugins/system76-launch/fu-plugin-system76-launch.c deleted file mode 100644 index 21eea3e10..000000000 --- a/plugins/system76-launch/fu-plugin-system76-launch.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 Richard Hughes - * Copyright (C) 2021 Jeremy Soller - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-system76-launch-device.h" - -static void -fu_plugin_system76_launch_init(FuPlugin *plugin) -{ - 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/system76-launch/fu-system76-launch-plugin.c b/plugins/system76-launch/fu-system76-launch-plugin.c new file mode 100644 index 000000000..1857feb05 --- /dev/null +++ b/plugins/system76-launch/fu-system76-launch-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Richard Hughes + * Copyright (C) 2021 Jeremy Soller + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-system76-launch-device.h" +#include "fu-system76-launch-plugin.h" + +struct _FuSystem76LaunchPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuSystem76LaunchPlugin, fu_system76_launch_plugin, FU_TYPE_PLUGIN) + +static void +fu_system76_launch_plugin_init(FuSystem76LaunchPlugin *self) +{ +} + +static void +fu_system76_launch_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_SYSTEM76_LAUNCH_DEVICE); +} + +static void +fu_system76_launch_plugin_class_init(FuSystem76LaunchPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_system76_launch_plugin_constructed; +} diff --git a/plugins/system76-launch/fu-system76-launch-plugin.h b/plugins/system76-launch/fu-system76-launch-plugin.h new file mode 100644 index 000000000..e489b4329 --- /dev/null +++ b/plugins/system76-launch/fu-system76-launch-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuSystem76LaunchPlugin, + fu_system76_launch_plugin, + FU, + SYSTEM76_LAUNCH_PLUGIN, + FuPlugin) diff --git a/plugins/system76-launch/meson.build b/plugins/system76-launch/meson.build index e5bb6de7b..4e194aebc 100644 --- a/plugins/system76-launch/meson.build +++ b/plugins/system76-launch/meson.build @@ -2,27 +2,14 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginSystem76Launch"'] plugin_quirks += files('system76-launch.quirk') - -shared_module('fu_plugin_system76_launch', - fu_hash, +plugin_builtins += static_library('fu_plugin_system76_launch', sources: [ - 'fu-plugin-system76-launch.c', + 'fu-system76-launch-plugin.c', 'fu-system76-launch-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/test/fu-plugin-test-ble.c b/plugins/test/fu-plugin-test-ble.c deleted file mode 100644 index 287f59371..000000000 --- a/plugins/test/fu-plugin-test-ble.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2021 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-test-ble-device.h" - -static void -fu_plugin_test_ble_init(FuPlugin *plugin) -{ - 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-test-ble-plugin.c b/plugins/test/fu-test-ble-plugin.c new file mode 100644 index 000000000..58b557a51 --- /dev/null +++ b/plugins/test/fu-test-ble-plugin.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-test-ble-device.h" +#include "fu-test-ble-plugin.h" + +struct _FuTestBlePlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuTestBlePlugin, fu_test_ble_plugin, FU_TYPE_PLUGIN) + +static void +fu_test_ble_plugin_init(FuTestBlePlugin *self) +{ +} + +static void +fu_xxx_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_TEST_BLE_DEVICE); +} + +static void +fu_test_ble_plugin_class_init(FuTestBlePluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_xxx_plugin_constructed; +} diff --git a/plugins/test/fu-test-ble-plugin.h b/plugins/test/fu-test-ble-plugin.h new file mode 100644 index 000000000..7f2796c97 --- /dev/null +++ b/plugins/test/fu-test-ble-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuTestBlePlugin, fu_test_ble_plugin, FU, TEST_BLE_PLUGIN, FuPlugin) diff --git a/plugins/test/fu-plugin-test.c b/plugins/test/fu-test-plugin.c similarity index 76% rename from plugins/test/fu-plugin-test.c rename to plugins/test/fu-test-plugin.c index 0c3f035de..4dedcade0 100644 --- a/plugins/test/fu-plugin-test.c +++ b/plugins/test/fu-test-plugin.c @@ -6,41 +6,30 @@ #include "config.h" -#include +#include "fu-test-plugin.h" -struct FuPluginData { +struct _FuTestPlugin { + FuPlugin parent_instance; guint delay_decompress_ms; guint delay_write_ms; guint delay_verify_ms; }; -static void -fu_plugin_test_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - g_debug("init"); -} +G_DEFINE_TYPE(FuTestPlugin, fu_test_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_test_destroy(FuPlugin *plugin) +fu_test_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - // FuPluginData *priv = fu_plugin_get_data (plugin); - g_debug("destroy"); -} - -static void -fu_plugin_test_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_ku(str, idt, "DelayDecompressMs", priv->delay_decompress_ms); - fu_string_append_ku(str, idt, "DelayWriteMs", priv->delay_write_ms); - fu_string_append_ku(str, idt, "DelayVerifyMs", priv->delay_verify_ms); + FuTestPlugin *self = FU_TEST_PLUGIN(plugin); + fu_string_append_ku(str, idt, "DelayDecompressMs", self->delay_decompress_ms); + fu_string_append_ku(str, idt, "DelayWriteMs", self->delay_write_ms); + fu_string_append_ku(str, idt, "DelayVerifyMs", self->delay_verify_ms); } static gboolean -fu_plugin_test_load_xml(FuPlugin *plugin, const gchar *xml, GError **error) +fu_test_plugin_load_xml(FuPlugin *plugin, const gchar *xml, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTestPlugin *self = FU_TEST_PLUGIN(plugin); g_autoptr(XbBuilder) builder = xb_builder_new(); g_autoptr(XbBuilderSource) source = xb_builder_source_new(); g_autoptr(XbNode) delay_decompress_ms = NULL; @@ -59,31 +48,31 @@ fu_plugin_test_load_xml(FuPlugin *plugin, const gchar *xml, GError **error) /* parse markup */ delay_decompress_ms = xb_silo_query_first(silo, "config/delay_decompress_ms", NULL); if (delay_decompress_ms != NULL) - priv->delay_decompress_ms = xb_node_get_text_as_uint(delay_decompress_ms); + self->delay_decompress_ms = xb_node_get_text_as_uint(delay_decompress_ms); delay_write_ms = xb_silo_query_first(silo, "config/delay_write_ms", NULL); if (delay_write_ms != NULL) - priv->delay_write_ms = xb_node_get_text_as_uint(delay_write_ms); + self->delay_write_ms = xb_node_get_text_as_uint(delay_write_ms); delay_verify_ms = xb_silo_query_first(silo, "config/delay_verify_ms", NULL); if (delay_verify_ms != NULL) - priv->delay_verify_ms = xb_node_get_text_as_uint(delay_verify_ms); + self->delay_verify_ms = xb_node_get_text_as_uint(delay_verify_ms); /* success */ return TRUE; } static gboolean -fu_plugin_test_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_test_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { const gchar *xml = g_getenv("FWUPD_TEST_PLUGIN_XML"); if (xml != NULL) { - if (!fu_plugin_test_load_xml(plugin, xml, error)) + if (!fu_test_plugin_load_xml(plugin, xml, error)) return FALSE; } return TRUE; } static gboolean -fu_plugin_test_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_test_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); g_autoptr(FuDevice) device = NULL; @@ -153,13 +142,13 @@ fu_plugin_test_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) } static void -fu_plugin_test_device_registered(FuPlugin *plugin, FuDevice *device) +fu_test_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { fu_device_set_metadata(device, "BestDevice", "/dev/urandom"); } static gboolean -fu_plugin_test_verify(FuPlugin *plugin, +fu_test_plugin_verify(FuPlugin *plugin, FuDevice *device, FuProgress *progress, FuPluginVerifyFlags flags, @@ -195,7 +184,7 @@ fu_plugin_test_verify(FuPlugin *plugin, } static gchar * -fu_plugin_test_get_version(GBytes *blob_fw) +fu_test_plugin_get_version(GBytes *blob_fw) { const gchar *str = g_bytes_get_data(blob_fw, NULL); guint64 val = 0; @@ -213,14 +202,14 @@ fu_plugin_test_get_version(GBytes *blob_fw) } static gboolean -fu_plugin_test_write_firmware(FuPlugin *plugin, +fu_test_plugin_write_firmware(FuPlugin *plugin, FuDevice *device, GBytes *blob_fw, FuProgress *progress, FwupdInstallFlags flags, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTestPlugin *self = FU_TEST_PLUGIN(plugin); const gchar *test = g_getenv("FWUPD_PLUGIN_TEST"); gboolean requires_activation = g_strcmp0(test, "requires-activation") == 0; gboolean requires_reboot = g_strcmp0(test, "requires-reboot") == 0; @@ -232,19 +221,19 @@ fu_plugin_test_write_firmware(FuPlugin *plugin, return FALSE; } fu_progress_set_status(progress, FWUPD_STATUS_DECOMPRESSING); - for (guint i = 0; i <= priv->delay_decompress_ms; i++) { + for (guint i = 0; i <= self->delay_decompress_ms; i++) { g_usleep(1000); - fu_progress_set_percentage_full(progress, i, priv->delay_decompress_ms); + fu_progress_set_percentage_full(progress, i, self->delay_decompress_ms); } fu_progress_set_status(progress, FWUPD_STATUS_DEVICE_WRITE); - for (guint i = 0; i <= priv->delay_write_ms; i++) { + for (guint i = 0; i <= self->delay_write_ms; i++) { g_usleep(1000); - fu_progress_set_percentage_full(progress, i, priv->delay_write_ms); + fu_progress_set_percentage_full(progress, i, self->delay_write_ms); } fu_progress_set_status(progress, FWUPD_STATUS_DEVICE_VERIFY); - for (guint i = 0; i <= priv->delay_verify_ms; i++) { + for (guint i = 0; i <= self->delay_verify_ms; i++) { g_usleep(1000); - fu_progress_set_percentage_full(progress, i, priv->delay_verify_ms); + fu_progress_set_percentage_full(progress, i, self->delay_verify_ms); } /* composite test, upgrade composite devices */ @@ -265,7 +254,7 @@ fu_plugin_test_write_firmware(FuPlugin *plugin, } else if (requires_reboot) { fu_device_add_flag(device, FWUPD_DEVICE_FLAG_NEEDS_REBOOT); } else { - g_autofree gchar *ver = fu_plugin_test_get_version(blob_fw); + g_autofree gchar *ver = fu_test_plugin_get_version(blob_fw); fu_device_set_version_format(device, FWUPD_VERSION_FORMAT_TRIPLET); if (ver != NULL) { fu_device_set_version(device, ver); @@ -293,7 +282,7 @@ fu_plugin_test_write_firmware(FuPlugin *plugin, } static gboolean -fu_plugin_test_activate(FuPlugin *plugin, FuDevice *device, FuProgress *process, GError **error) +fu_test_plugin_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"); @@ -301,7 +290,7 @@ fu_plugin_test_activate(FuPlugin *plugin, FuDevice *device, FuProgress *process, } static gboolean -fu_plugin_test_get_results(FuPlugin *plugin, FuDevice *device, GError **error) +fu_test_plugin_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); @@ -309,7 +298,7 @@ fu_plugin_test_get_results(FuPlugin *plugin, FuDevice *device, GError **error) } static gboolean -fu_plugin_test_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_test_plugin_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++) { @@ -321,7 +310,7 @@ fu_plugin_test_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError ** } static gboolean -fu_plugin_test_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_test_plugin_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++) { @@ -332,20 +321,34 @@ fu_plugin_test_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError ** return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_test_plugin_init(FuTestPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_test_init; - vfuncs->destroy = fu_plugin_test_destroy; - vfuncs->to_string = fu_plugin_test_to_string; - 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; + g_debug("init"); +} + +static void +fu_test_finalize(GObject *obj) +{ + g_debug("destroy"); + G_OBJECT_CLASS(fu_test_plugin_parent_class)->finalize(obj); +} + +static void +fu_test_plugin_class_init(FuTestPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_test_finalize; + plugin_class->to_string = fu_test_plugin_to_string; + plugin_class->composite_cleanup = fu_test_plugin_composite_cleanup; + plugin_class->composite_prepare = fu_test_plugin_composite_prepare; + plugin_class->get_results = fu_test_plugin_get_results; + plugin_class->activate = fu_test_plugin_activate; + plugin_class->write_firmware = fu_test_plugin_write_firmware; + plugin_class->verify = fu_test_plugin_verify; + plugin_class->startup = fu_test_plugin_startup; + plugin_class->coldplug = fu_test_plugin_coldplug; + plugin_class->device_registered = fu_test_plugin_device_registered; } diff --git a/plugins/test/fu-test-plugin.h b/plugins/test/fu-test-plugin.h new file mode 100644 index 000000000..34481ca0d --- /dev/null +++ b/plugins/test/fu-test-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuTestPlugin, fu_test_plugin, FU, TEST_PLUGIN, FuPlugin) diff --git a/plugins/test/meson.build b/plugins/test/meson.build index 52b080c77..731654e2a 100644 --- a/plugins/test/meson.build +++ b/plugins/test/meson.build @@ -9,26 +9,14 @@ if bluez.allowed() plugin_quirks += files('test-ble.quirk') endif -shared_module('fu_plugin_test', - fu_hash, +plugin_builtins += static_library('fu_plugin_test', sources: [ - 'fu-plugin-test.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: install_dummy, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-test-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) shared_module('fu_plugin_invalid', @@ -36,43 +24,23 @@ shared_module('fu_plugin_invalid', sources: [ 'fu-plugin-invalid.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, install: install_dummy, install_dir: plugin_dir, - link_with: [ - fwupdplugin, - ], + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) if bluez.allowed() -shared_module('fu_plugin_test_ble', - fu_hash, +plugin_builtins += static_library('fu_plugin_test_ble', sources: [ - 'fu-plugin-test-ble.c', + 'fu-test-ble-plugin.c', 'fu-test-ble-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: install_dummy, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/thelio-io/fu-plugin-thelio-io.c b/plugins/thelio-io/fu-plugin-thelio-io.c deleted file mode 100644 index e97e2264e..000000000 --- a/plugins/thelio-io/fu-plugin-thelio-io.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 Richard Hughes - * Copyright (C) 2019 Jeremy Soller - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-thelio-io-device.h" - -static void -fu_plugin_thelio_io_init(FuPlugin *plugin) -{ - 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/thelio-io/fu-thelio-io-plugin.c b/plugins/thelio-io/fu-thelio-io-plugin.c new file mode 100644 index 000000000..979d6b5a5 --- /dev/null +++ b/plugins/thelio-io/fu-thelio-io-plugin.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 Richard Hughes + * Copyright (C) 2019 Jeremy Soller + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-thelio-io-device.h" +#include "fu-thelio-io-plugin.h" + +struct _FuThelioIoPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuThelioIoPlugin, fu_thelio_io_plugin, FU_TYPE_PLUGIN) + +static void +fu_thelio_io_plugin_init(FuThelioIoPlugin *self) +{ +} + +static void +fu_thelio_io_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_THELIO_IO_DEVICE); +} + +static void +fu_thelio_io_plugin_class_init(FuThelioIoPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_thelio_io_plugin_constructed; +} diff --git a/plugins/thelio-io/fu-thelio-io-plugin.h b/plugins/thelio-io/fu-thelio-io-plugin.h new file mode 100644 index 000000000..32552f737 --- /dev/null +++ b/plugins/thelio-io/fu-thelio-io-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuThelioIoPlugin, fu_thelio_io_plugin, FU, THELIO_IO_PLUGIN, FuPlugin) diff --git a/plugins/thelio-io/meson.build b/plugins/thelio-io/meson.build index 8028b2cd9..0ae892860 100644 --- a/plugins/thelio-io/meson.build +++ b/plugins/thelio-io/meson.build @@ -2,27 +2,14 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginThelioIo"'] plugin_quirks += files('thelio-io.quirk') - -shared_module('fu_plugin_thelio_io', - fu_hash, +plugin_builtins += static_library('fu_plugin_thelio_io', sources: [ - 'fu-plugin-thelio-io.c', + 'fu-thelio-io-plugin.c', 'fu-thelio-io-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/thunderbolt/fu-self-test.c b/plugins/thunderbolt/fu-self-test.c index a0b6fac06..e507e6126 100644 --- a/plugins/thunderbolt/fu-self-test.c +++ b/plugins/thunderbolt/fu-self-test.c @@ -22,6 +22,7 @@ #include "fu-context-private.h" #include "fu-plugin-private.h" +#include "fu-thunderbolt-plugin.h" #include "fu-udev-device-private.h" static gchar * @@ -916,7 +917,6 @@ test_set_up(ThunderboltTest *tt, gconstpointer params) { TestFlags flags = GPOINTER_TO_UINT(params); gboolean ret; - g_autofree gchar *pluginfn = NULL; g_autofree gchar *sysfs = NULL; g_autoptr(GError) error = NULL; g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); @@ -935,16 +935,10 @@ test_set_up(ThunderboltTest *tt, gconstpointer params) sysfs = umockdev_testbed_get_sys_dir(tt->bed); g_debug("mock sysfs at %s", sysfs); - tt->plugin = fu_plugin_new(tt->ctx); + tt->plugin = fu_plugin_new_from_gtype(fu_thunderbolt_plugin_get_type(), tt->ctx); + g_assert_nonnull(tt->plugin); - pluginfn = - g_test_build_filename(G_TEST_BUILT, "libfu_plugin_thunderbolt." G_MODULE_SUFFIX, NULL); - ret = fu_plugin_open(tt->plugin, pluginfn, &error); - - g_assert_no_error(error); - g_assert_true(ret); - ret = fu_plugin_runner_startup(tt->plugin, progress, &error); g_assert_no_error(error); g_assert_true(ret); diff --git a/plugins/thunderbolt/fu-plugin-thunderbolt.c b/plugins/thunderbolt/fu-thunderbolt-plugin.c similarity index 67% rename from plugins/thunderbolt/fu-plugin-thunderbolt.c rename to plugins/thunderbolt/fu-thunderbolt-plugin.c index 9b4f7a2ca..2fdd09645 100644 --- a/plugins/thunderbolt/fu-plugin-thunderbolt.c +++ b/plugins/thunderbolt/fu-thunderbolt-plugin.c @@ -6,18 +6,23 @@ #include "config.h" -#include - #include "fu-thunderbolt-common.h" #include "fu-thunderbolt-controller.h" +#include "fu-thunderbolt-plugin.h" #include "fu-thunderbolt-retimer.h" +struct _FuThunderboltPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuThunderboltPlugin, fu_thunderbolt_plugin, FU_TYPE_PLUGIN) + /*5 seconds sleep until retimer is available \ after nvm update*/ #define FU_THUNDERBOLT_RETIMER_CLEANUP_DELAY 5000000 static gboolean -fu_plugin_thunderbolt_safe_kernel(FuPlugin *plugin, GError **error) +fu_thunderbolt_plugin_safe_kernel(FuPlugin *plugin, GError **error) { g_autofree gchar *minimum_kernel = NULL; @@ -30,7 +35,7 @@ fu_plugin_thunderbolt_safe_kernel(FuPlugin *plugin, GError **error) } static gboolean -fu_plugin_thunderbolt_device_created(FuPlugin *plugin, FuDevice *dev, GError **error) +fu_thunderbolt_plugin_device_created(FuPlugin *plugin, FuDevice *dev, GError **error) { fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_INHIBITS_IDLE, @@ -41,7 +46,7 @@ fu_plugin_thunderbolt_device_created(FuPlugin *plugin, FuDevice *dev, GError **e } static void -fu_plugin_thunderbolt_device_registered(FuPlugin *plugin, FuDevice *device) +fu_thunderbolt_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") != 0) return; @@ -56,22 +61,14 @@ fu_plugin_thunderbolt_device_registered(FuPlugin *plugin, FuDevice *device) } } -static void -fu_plugin_thunderbolt_init(FuPlugin *plugin) +static gboolean +fu_thunderbolt_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - fu_plugin_add_udev_subsystem(plugin, "thunderbolt"); - fu_plugin_add_device_gtype(plugin, FU_TYPE_THUNDERBOLT_CONTROLLER); - fu_plugin_add_device_gtype(plugin, FU_TYPE_THUNDERBOLT_RETIMER); + return fu_thunderbolt_plugin_safe_kernel(plugin, error); } static gboolean -fu_plugin_thunderbolt_startup(FuPlugin *plugin, FuProgress *progress, GError **error) -{ - return fu_plugin_thunderbolt_safe_kernel(plugin, error); -} - -static gboolean -fu_plugin_thunderbolt_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_thunderbolt_plugin_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GError **error) { for (guint i = 0; i < devices->len; i++) { FuDevice *dev = g_ptr_array_index(devices, i); @@ -85,7 +82,7 @@ fu_plugin_thunderbolt_composite_prepare(FuPlugin *plugin, GPtrArray *devices, GE } static gboolean -fu_plugin_thunderbolt_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error) +fu_thunderbolt_plugin_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GError **error) { for (guint i = 0; i < devices->len; i++) { FuDevice *dev = g_ptr_array_index(devices, i); @@ -99,14 +96,30 @@ fu_plugin_thunderbolt_composite_cleanup(FuPlugin *plugin, GPtrArray *devices, GE return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_thunderbolt_plugin_init(FuThunderboltPlugin *self) { - 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; - vfuncs->composite_prepare = fu_plugin_thunderbolt_composite_prepare; - vfuncs->composite_cleanup = fu_plugin_thunderbolt_composite_cleanup; +} + +static void +fu_thunderbolt_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_udev_subsystem(plugin, "thunderbolt"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_THUNDERBOLT_CONTROLLER); + fu_plugin_add_device_gtype(plugin, FU_TYPE_THUNDERBOLT_RETIMER); +} + +static void +fu_thunderbolt_plugin_class_init(FuThunderboltPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_thunderbolt_plugin_constructed; + plugin_class->startup = fu_thunderbolt_plugin_startup; + plugin_class->device_registered = fu_thunderbolt_plugin_device_registered; + plugin_class->device_created = fu_thunderbolt_plugin_device_created; + plugin_class->composite_prepare = fu_thunderbolt_plugin_composite_prepare; + plugin_class->composite_cleanup = fu_thunderbolt_plugin_composite_cleanup; } diff --git a/plugins/thunderbolt/fu-thunderbolt-plugin.h b/plugins/thunderbolt/fu-thunderbolt-plugin.h new file mode 100644 index 000000000..dba722a60 --- /dev/null +++ b/plugins/thunderbolt/fu-thunderbolt-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuThunderboltPlugin, fu_thunderbolt_plugin, FU, THUNDERBOLT_PLUGIN, FuPlugin) diff --git a/plugins/thunderbolt/meson.build b/plugins/thunderbolt/meson.build index 146f435c4..b213dafed 100644 --- a/plugins/thunderbolt/meson.build +++ b/plugins/thunderbolt/meson.build @@ -3,31 +3,20 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginThunderbolt"'] plugin_quirks += files('thunderbolt.quirk') -fu_plugin_thunderbolt = shared_module('fu_plugin_thunderbolt', - fu_hash, +plugin_builtin_thunderbolt = static_library('fu_plugin_thunderbolt', sources: [ - 'fu-plugin-thunderbolt.c', + 'fu-thunderbolt-plugin.c', 'fu-thunderbolt-common.c', 'fu-thunderbolt-device.c', 'fu-thunderbolt-retimer.c', 'fu-thunderbolt-controller.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_libs += plugin_builtin_thunderbolt install_data(['thunderbolt.conf'], install_dir: join_paths(sysconfdir, 'fwupd') @@ -41,20 +30,10 @@ if get_option('tests') and run_sanitize_unsafe_tests and umockdev.found() and gi env.set('FWUPD_DATADIR_QUIRKS', meson.current_source_dir()) e = executable( 'thunderbolt-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-plugin-thunderbolt.c', - 'fu-thunderbolt-common.c', - 'fu-thunderbolt-device.c', - 'fu-thunderbolt-retimer.c', - 'fu-thunderbolt-controller.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, dependencies: [ gudev, plugin_deps, @@ -63,6 +42,7 @@ if get_option('tests') and run_sanitize_unsafe_tests and umockdev.found() and gi link_with: [ fwupd, fwupdplugin, + plugin_builtin_thunderbolt, ], c_args: cargs ) diff --git a/plugins/tpm/fu-self-test.c b/plugins/tpm/fu-self-test.c index 483f0b920..6b11e9819 100644 --- a/plugins/tpm/fu-self-test.c +++ b/plugins/tpm/fu-self-test.c @@ -13,6 +13,7 @@ #include "fu-security-attrs-private.h" #include "fu-tpm-eventlog-common.h" #include "fu-tpm-eventlog-parser.h" +#include "fu-tpm-plugin.h" #include "fu-tpm-v1-device.h" #include "fu-tpm-v2-device.h" @@ -22,9 +23,8 @@ fu_tpm_device_1_2_func(void) FuTpmDevice *device; GPtrArray *devices; gboolean ret; - g_autofree gchar *pluginfn = NULL; g_autoptr(FuContext) ctx = fu_context_new(); - g_autoptr(FuPlugin) plugin = fu_plugin_new(ctx); + g_autoptr(FuPlugin) plugin = NULL; g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(FuSecurityAttrs) attrs = fu_security_attrs_new(); g_autoptr(FwupdSecurityAttr) attr0 = NULL; @@ -39,10 +39,7 @@ fu_tpm_device_1_2_func(void) g_assert_true(ret); /* load the plugin */ - pluginfn = g_test_build_filename(G_TEST_BUILT, "libfu_plugin_tpm." G_MODULE_SUFFIX, NULL); - ret = fu_plugin_open(plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); + plugin = fu_plugin_new_from_gtype(fu_tpm_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(plugin, progress, &error); g_assert_no_error(error); g_assert_true(ret); @@ -191,11 +188,10 @@ static void fu_tpm_empty_pcr_func(void) { gboolean ret; - g_autofree gchar *pluginfn = NULL; g_autofree gchar *testdatadir = NULL; g_auto(GStrv) environ_old = NULL; g_autoptr(FuContext) ctx = fu_context_new(); - g_autoptr(FuPlugin) plugin = fu_plugin_new(ctx); + g_autoptr(FuPlugin) plugin = NULL; g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC); g_autoptr(FuSecurityAttrs) attrs = fu_security_attrs_new(); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -212,10 +208,7 @@ fu_tpm_empty_pcr_func(void) (void)g_setenv("FWUPD_SYSFSTPMDIR", testdatadir, TRUE); /* load the plugin */ - pluginfn = g_test_build_filename(G_TEST_BUILT, "libfu_plugin_tpm." G_MODULE_SUFFIX, NULL); - ret = fu_plugin_open(plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); + plugin = fu_plugin_new_from_gtype(fu_tpm_plugin_get_type(), ctx); ret = fu_plugin_runner_startup(plugin, progress, &error); g_assert_no_error(error); g_assert_true(ret); diff --git a/plugins/tpm/fu-plugin-tpm.c b/plugins/tpm/fu-tpm-plugin.c similarity index 62% rename from plugins/tpm/fu-plugin-tpm.c rename to plugins/tpm/fu-tpm-plugin.c index e57d6efd7..c0be3bc2c 100644 --- a/plugins/tpm/fu-plugin-tpm.c +++ b/plugins/tpm/fu-tpm-plugin.c @@ -6,98 +6,79 @@ #include "config.h" -#include - #include "fu-tpm-eventlog-parser.h" +#include "fu-tpm-plugin.h" #include "fu-tpm-v1-device.h" #include "fu-tpm-v2-device.h" -struct FuPluginData { +struct _FuTpmPlugin { + FuPlugin parent_instance; FuTpmDevice *tpm_device; FuDevice *bios_device; GPtrArray *ev_items; /* of FuTpmEventlogItem */ }; +G_DEFINE_TYPE(FuTpmPlugin, fu_tpm_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_tpm_init(FuPlugin *plugin) +fu_tpm_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - 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); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); + if (self->tpm_device != NULL) + fu_string_append(str, idt, "TpmDevice", fu_device_get_id(self->tpm_device)); + if (self->bios_device != NULL) + fu_string_append(str, idt, "BiosDevice", fu_device_get_id(self->bios_device)); } static void -fu_plugin_tpm_destroy(FuPlugin *plugin) +fu_tpm_plugin_set_bios_pcr0s(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->tpm_device != NULL) - g_object_unref(priv->tpm_device); - if (priv->bios_device != NULL) - g_object_unref(priv->bios_device); - if (priv->ev_items != NULL) - g_ptr_array_unref(priv->ev_items); -} - -static void -fu_plugin_tpm_to_string(FuPlugin *plugin, guint idt, GString *str) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->tpm_device != NULL) - fu_string_append(str, idt, "TpmDevice", fu_device_get_id(priv->tpm_device)); - if (priv->bios_device != NULL) - fu_string_append(str, idt, "BiosDevice", fu_device_get_id(priv->bios_device)); -} - -static void -fu_plugin_tpm_set_bios_pcr0s(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); g_autoptr(GPtrArray) pcr0s = NULL; - if (priv->tpm_device == NULL) + if (self->tpm_device == NULL) return; - if (priv->bios_device == NULL) + if (self->bios_device == NULL) return; /* add all the PCR0s */ - pcr0s = fu_tpm_device_get_checksums(priv->tpm_device, 0); + pcr0s = fu_tpm_device_get_checksums(self->tpm_device, 0); if (pcr0s->len == 0) return; for (guint i = 0; i < pcr0s->len; i++) { const gchar *checksum = g_ptr_array_index(pcr0s, i); - fu_device_add_checksum(priv->bios_device, checksum); + fu_device_add_checksum(self->bios_device, checksum); } - fu_device_add_flag(priv->bios_device, FWUPD_DEVICE_FLAG_CAN_VERIFY); + fu_device_add_flag(self->bios_device, FWUPD_DEVICE_FLAG_CAN_VERIFY); } /* set the PCR0 as the device checksum */ static void -fu_plugin_tpm_device_registered(FuPlugin *plugin, FuDevice *device) +fu_tpm_plugin_device_registered(FuPlugin *plugin, FuDevice *device) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); if (fu_device_has_instance_id(device, "main-system-firmware")) { - g_set_object(&priv->bios_device, device); - fu_plugin_tpm_set_bios_pcr0s(plugin); + g_set_object(&self->bios_device, device); + fu_tpm_plugin_set_bios_pcr0s(plugin); } } static void -fu_plugin_tpm_device_added(FuPlugin *plugin, FuDevice *dev) +fu_tpm_plugin_device_added(FuPlugin *plugin, FuDevice *dev) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); g_autoptr(GPtrArray) pcr0s = NULL; - g_set_object(&priv->tpm_device, FU_TPM_DEVICE(dev)); + g_set_object(&self->tpm_device, FU_TPM_DEVICE(dev)); fu_plugin_add_report_metadata(plugin, "TpmFamily", fu_tpm_device_get_family(FU_TPM_DEVICE(dev))); /* ensure */ - fu_plugin_tpm_set_bios_pcr0s(plugin); + fu_tpm_plugin_set_bios_pcr0s(plugin); /* add extra plugin metadata */ - pcr0s = fu_tpm_device_get_checksums(priv->tpm_device, 0); + pcr0s = fu_tpm_device_get_checksums(self->tpm_device, 0); for (guint i = 0; i < pcr0s->len; i++) { const gchar *csum = g_ptr_array_index(pcr0s, i); GChecksumType csum_type = fwupd_checksum_guess_kind(csum); @@ -113,9 +94,9 @@ fu_plugin_tpm_device_added(FuPlugin *plugin, FuDevice *dev) } static void -fu_plugin_tpm_add_security_attr_version(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_tpm_plugin_add_security_attr_version(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* create attr */ @@ -123,26 +104,26 @@ fu_plugin_tpm_add_security_attr_version(FuPlugin *plugin, FuSecurityAttrs *attrs fu_security_attrs_append(attrs, attr); /* check exists, and in v2.0 mode */ - if (priv->tpm_device == NULL) { + if (self->tpm_device == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } - if (g_strcmp0(fu_tpm_device_get_family(priv->tpm_device), "2.0") != 0) { + if (g_strcmp0(fu_tpm_device_get_family(self->tpm_device), "2.0") != 0) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_ENABLED); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); return; } /* success */ - fwupd_security_attr_add_guids(attr, fu_device_get_guids(FU_DEVICE(priv->tpm_device))); + fwupd_security_attr_add_guids(attr, fu_device_get_guids(FU_DEVICE(self->tpm_device))); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_SUCCESS); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_FOUND); } static void -fu_plugin_tpm_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_tpm_plugin_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); gboolean reconstructed = TRUE; g_autoptr(FwupdSecurityAttr) attr = NULL; g_autoptr(GError) error = NULL; @@ -150,22 +131,22 @@ fu_plugin_tpm_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attr g_autoptr(GPtrArray) pcr0s_real = NULL; /* no TPM device */ - if (priv->tpm_device == NULL) + if (self->tpm_device == NULL) return; /* create attr */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_TPM_RECONSTRUCTION_PCR0); - fwupd_security_attr_add_guids(attr, fu_device_get_guids(priv->tpm_device)); + fwupd_security_attr_add_guids(attr, fu_device_get_guids(self->tpm_device)); fu_security_attrs_append(attrs, attr); /* check reconstructed to PCR0 */ - if (priv->ev_items == NULL) { + if (self->ev_items == NULL) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_FOUND); return; } /* calculate from the eventlog */ - pcr0s_calc = fu_tpm_eventlog_calc_checksums(priv->ev_items, 0, &error); + pcr0s_calc = fu_tpm_eventlog_calc_checksums(self->ev_items, 0, &error); if (pcr0s_calc == NULL) { g_warning("failed to get eventlog reconstruction: %s", error->message); fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); @@ -174,7 +155,7 @@ fu_plugin_tpm_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attr } /* compare against the real PCR0s */ - pcr0s_real = fu_tpm_device_get_checksums(priv->tpm_device, 0); + pcr0s_real = fu_tpm_device_get_checksums(self->tpm_device, 0); for (guint i = 0; i < pcr0s_real->len; i++) { const gchar *checksum = g_ptr_array_index(pcr0s_real, i); reconstructed = FALSE; @@ -205,23 +186,23 @@ fu_plugin_tpm_add_security_attr_eventlog(FuPlugin *plugin, FuSecurityAttrs *attr } static void -fu_plugin_tpm_add_security_attr_empty(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_tpm_plugin_add_security_attr_empty(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); g_autoptr(FwupdSecurityAttr) attr = NULL; /* no TPM device */ - if (priv->tpm_device == NULL) + if (self->tpm_device == NULL) return; /* add attributes */ attr = fu_plugin_security_attr_new(plugin, FWUPD_SECURITY_ATTR_ID_TPM_EMPTY_PCR); - fwupd_security_attr_add_guids(attr, fu_device_get_guids(priv->tpm_device)); + fwupd_security_attr_add_guids(attr, fu_device_get_guids(self->tpm_device)); fu_security_attrs_append(attrs, attr); /* check PCRs 0 through 7 for empty checksums */ for (guint pcr = 0; pcr <= 7; pcr++) { - g_autoptr(GPtrArray) checksums = fu_tpm_device_get_checksums(priv->tpm_device, pcr); + g_autoptr(GPtrArray) checksums = fu_tpm_device_get_checksums(self->tpm_device, pcr); for (guint i = 0; i < checksums->len; i++) { const gchar *checksum = g_ptr_array_index(checksums, i); gboolean empty = TRUE; @@ -248,24 +229,24 @@ fu_plugin_tpm_add_security_attr_empty(FuPlugin *plugin, FuSecurityAttrs *attrs) } static void -fu_plugin_tpm_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_tpm_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { if (fu_plugin_has_flag(plugin, FWUPD_PLUGIN_FLAG_DISABLED)) return; - fu_plugin_tpm_add_security_attr_version(plugin, attrs); - fu_plugin_tpm_add_security_attr_eventlog(plugin, attrs); - fu_plugin_tpm_add_security_attr_empty(plugin, attrs); + fu_tpm_plugin_add_security_attr_version(plugin, attrs); + fu_tpm_plugin_add_security_attr_eventlog(plugin, attrs); + fu_tpm_plugin_add_security_attr_empty(plugin, attrs); } static gchar * -fu_plugin_tpm_eventlog_report_metadata(FuPlugin *plugin) +fu_tpm_plugin_eventlog_report_metadata(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); GString *str = g_string_new(""); g_autoptr(GPtrArray) pcrs = NULL; - for (guint i = 0; i < priv->ev_items->len; i++) { - FuTpmEventlogItem *item = g_ptr_array_index(priv->ev_items, i); + for (guint i = 0; i < self->ev_items->len; i++) { + FuTpmEventlogItem *item = g_ptr_array_index(self->ev_items, i); g_autofree gchar *blobstr = NULL; g_autofree gchar *checksum = NULL; @@ -283,7 +264,7 @@ fu_plugin_tpm_eventlog_report_metadata(FuPlugin *plugin) g_string_append_printf(str, " [%s]", blobstr); g_string_append(str, "\n"); } - pcrs = fu_tpm_eventlog_calc_checksums(priv->ev_items, 0, NULL); + pcrs = fu_tpm_eventlog_calc_checksums(self->ev_items, 0, NULL); if (pcrs != NULL) { for (guint j = 0; j < pcrs->len; j++) { const gchar *csum = g_ptr_array_index(pcrs, j); @@ -296,9 +277,9 @@ fu_plugin_tpm_eventlog_report_metadata(FuPlugin *plugin) } static gboolean -fu_plugin_tpm_coldplug_eventlog(FuPlugin *plugin, GError **error) +fu_tpm_plugin_coldplug_eventlog(FuPlugin *plugin, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); gsize bufsz = 0; const gchar *fn = "/sys/kernel/security/tpm0/binary_bios_measurements"; g_autofree gchar *str = NULL; @@ -319,24 +300,24 @@ fu_plugin_tpm_coldplug_eventlog(FuPlugin *plugin, GError **error) fn); return FALSE; } - priv->ev_items = + self->ev_items = fu_tpm_eventlog_parser_new(buf, bufsz, FU_TPM_EVENTLOG_PARSER_FLAG_NONE, error); - if (priv->ev_items == NULL) + if (self->ev_items == NULL) return FALSE; /* add optional report metadata */ - str = fu_plugin_tpm_eventlog_report_metadata(plugin); + str = fu_tpm_plugin_eventlog_report_metadata(plugin); fu_plugin_add_report_metadata(plugin, "TpmEventLog", str); return TRUE; } static gboolean -fu_plugin_tpm_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_tpm_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { g_autoptr(GError) error_local = NULL; /* best effort */ - if (!fu_plugin_tpm_coldplug_eventlog(plugin, &error_local)) + if (!fu_tpm_plugin_coldplug_eventlog(plugin, &error_local)) g_warning("failed to load eventlog: %s", error_local->message); /* success */ @@ -344,9 +325,9 @@ fu_plugin_tpm_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) } static gboolean -fu_plugin_tpm_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_tpm_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuTpmPlugin *self = FU_TPM_PLUGIN(plugin); g_autofree gchar *sysfstpmdir = NULL; g_autofree gchar *fn_pcrs = NULL; @@ -354,28 +335,59 @@ fu_plugin_tpm_startup(FuPlugin *plugin, FuProgress *progress, GError **error) sysfstpmdir = fu_path_from_kind(FU_PATH_KIND_SYSFSDIR_TPM); fn_pcrs = g_build_filename(sysfstpmdir, "tpm0", "pcrs", NULL); if (g_file_test(fn_pcrs, G_FILE_TEST_EXISTS) && g_getenv("FWUPD_FORCE_TPM2") == NULL) { - priv->tpm_device = fu_tpm_v1_device_new(fu_plugin_get_context(plugin)); - g_object_set(priv->tpm_device, "device-file", fn_pcrs, NULL); - fu_device_set_physical_id(FU_DEVICE(priv->tpm_device), "tpm"); - if (!fu_device_probe(FU_DEVICE(priv->tpm_device), error)) + self->tpm_device = fu_tpm_v1_device_new(fu_plugin_get_context(plugin)); + g_object_set(self->tpm_device, "device-file", fn_pcrs, NULL); + fu_device_set_physical_id(FU_DEVICE(self->tpm_device), "tpm"); + if (!fu_device_probe(FU_DEVICE(self->tpm_device), error)) return FALSE; - fu_plugin_device_add(plugin, FU_DEVICE(priv->tpm_device)); + fu_plugin_device_add(plugin, FU_DEVICE(self->tpm_device)); } /* success */ return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_tpm_plugin_init(FuTpmPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_tpm_init; - vfuncs->destroy = fu_plugin_tpm_destroy; - vfuncs->to_string = fu_plugin_tpm_to_string; - 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; +} + +static void +fu_tpm_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + + /* old name */ + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_CONFLICTS, "tpm_eventlog"); + fu_plugin_add_udev_subsystem(plugin, "tpm"); + fu_plugin_add_device_gtype(plugin, FU_TYPE_TPM_V2_DEVICE); +} + +static void +fu_tpm_finalize(GObject *obj) +{ + FuTpmPlugin *self = FU_TPM_PLUGIN(obj); + if (self->tpm_device != NULL) + g_object_unref(self->tpm_device); + if (self->bios_device != NULL) + g_object_unref(self->bios_device); + if (self->ev_items != NULL) + g_ptr_array_unref(self->ev_items); + G_OBJECT_CLASS(fu_tpm_plugin_parent_class)->finalize(obj); +} + +static void +fu_tpm_plugin_class_init(FuTpmPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_tpm_plugin_constructed; + object_class->finalize = fu_tpm_finalize; + plugin_class->to_string = fu_tpm_plugin_to_string; + plugin_class->startup = fu_tpm_plugin_startup; + plugin_class->coldplug = fu_tpm_plugin_coldplug; + plugin_class->device_added = fu_tpm_plugin_device_added; + plugin_class->device_registered = fu_tpm_plugin_device_registered; + plugin_class->add_security_attrs = fu_tpm_plugin_add_security_attrs; } diff --git a/plugins/tpm/fu-tpm-plugin.h b/plugins/tpm/fu-tpm-plugin.h new file mode 100644 index 000000000..02e6c26f2 --- /dev/null +++ b/plugins/tpm/fu-tpm-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuTpmPlugin, fu_tpm_plugin, FU, TPM_PLUGIN, FuPlugin) diff --git a/plugins/tpm/meson.build b/plugins/tpm/meson.build index b5500dc7f..fcbfccf26 100644 --- a/plugins/tpm/meson.build +++ b/plugins/tpm/meson.build @@ -8,23 +8,16 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginTpm"'] plugin_quirks += files('tpm.quirk') -plugin_tpm = shared_module('fu_plugin_tpm', - fu_hash, +plugin_builtin_tpm = static_library('fu_plugin_tpm', sources: [ - 'fu-plugin-tpm.c', + 'fu-tpm-plugin.c', 'fu-tpm-device.c', 'fu-tpm-v1-device.c', 'fu-tpm-v2-device.c', 'fu-tpm-eventlog-common.c', 'fu-tpm-eventlog-parser.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, link_with: [ fwupdplugin, fwupd, @@ -35,6 +28,7 @@ plugin_tpm = shared_module('fu_plugin_tpm', tpm2tss_tpm, ], ) +plugin_libs += plugin_builtin_tpm if get_option('tests') env = environment() @@ -43,20 +37,10 @@ if get_option('tests') env.set('FWUPD_LOCALSTATEDIR', '/tmp/fwupd-self-test/var') e = executable( 'tpm-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-tpm-device.c', - 'fu-tpm-v1-device.c', - 'fu-tpm-v2-device.c', - 'fu-tpm-eventlog-common.c', - 'fu-tpm-eventlog-parser.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, tpm2tss_tpm, @@ -64,6 +48,7 @@ if get_option('tests') link_with: [ fwupd, fwupdplugin, + plugin_builtin_tpm, ], c_args: cargs ) @@ -72,25 +57,17 @@ endif executable( 'fwupdtpmevlog', - fu_hash, sources: [ 'fu-tpm-eventlog.c', 'fu-tpm-eventlog-common.c', 'fu-tpm-eventlog-parser.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, tpm2tss_tpm, ], - link_with: [ - fwupd, - fwupdplugin, - ], + link_with: plugin_libs, ) endif diff --git a/plugins/uefi-capsule/fu-plugin-uefi-capsule.c b/plugins/uefi-capsule/fu-uefi-capsule-plugin.c similarity index 80% rename from plugins/uefi-capsule/fu-plugin-uefi-capsule.c rename to plugins/uefi-capsule/fu-uefi-capsule-plugin.c index f37cf595e..3e3bd7028 100644 --- a/plugins/uefi-capsule/fu-plugin-uefi-capsule.c +++ b/plugins/uefi-capsule/fu-uefi-capsule-plugin.c @@ -7,19 +7,19 @@ #include "config.h" -#include - #include #include #include "fu-uefi-backend.h" #include "fu-uefi-bgrt.h" #include "fu-uefi-bootmgr.h" +#include "fu-uefi-capsule-plugin.h" #include "fu-uefi-cod-device.h" #include "fu-uefi-common.h" #include "fu-uefi-grub-device.h" -struct FuPluginData { +struct _FuUefiCapsulePlugin { + FuPlugin parent_instance; FuUefiBgrt *bgrt; FuVolume *esp; FuBackend *backend; @@ -27,24 +27,25 @@ struct FuPluginData { GFileMonitor *fwupd_efi_monitor; }; +G_DEFINE_TYPE(FuUefiCapsulePlugin, fu_uefi_capsule_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_uefi_capsule_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_uefi_capsule_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_backend_add_string(priv->backend, idt, str); - if (priv->bgrt != NULL) { + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); + fu_backend_add_string(self->backend, idt, str); + if (self->bgrt != NULL) { fu_string_append_kb(str, idt, "BgrtSupported", - fu_uefi_bgrt_get_supported(priv->bgrt)); + fu_uefi_bgrt_get_supported(self->bgrt)); } } static gboolean -fu_plugin_uefi_capsule_fwupd_efi_parse(FuPlugin *plugin, GError **error) +fu_uefi_capsule_plugin_fwupd_efi_parse(FuUefiCapsulePlugin *self, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); - FuContext *ctx = fu_plugin_get_context(plugin); + FuContext *ctx = fu_plugin_get_context(FU_PLUGIN(self)); const guint8 needle[] = "f\0w\0u\0p\0d\0-\0e\0f\0i\0 \0v\0e\0r\0s\0i\0o\0n\0 "; gsize bufsz = 0; gsize offset = 0; @@ -53,10 +54,10 @@ fu_plugin_uefi_capsule_fwupd_efi_parse(FuPlugin *plugin, GError **error) g_autofree gchar *version = NULL; /* find the UTF-16 version string */ - if (!g_file_load_contents(priv->fwupd_efi_file, NULL, &buf, &bufsz, NULL, error)) + if (!g_file_load_contents(self->fwupd_efi_file, NULL, &buf, &bufsz, NULL, error)) return FALSE; if (!fu_memmem_safe((const guint8 *)buf, bufsz, needle, sizeof(needle), &offset, error)) { - g_autofree gchar *fn = g_file_get_path(priv->fwupd_efi_file); + g_autofree gchar *fn = g_file_get_path(self->fwupd_efi_file); g_prefix_error(error, "searching %s: ", fn); return FALSE; } @@ -75,7 +76,7 @@ fu_plugin_uefi_capsule_fwupd_efi_parse(FuPlugin *plugin, GError **error) /* convert to UTF-8 */ version = g_utf16_to_utf8(version_tmp, -1, NULL, NULL, error); if (version == NULL) { - g_autofree gchar *fn = g_file_get_path(priv->fwupd_efi_file); + g_autofree gchar *fn = g_file_get_path(self->fwupd_efi_file); g_prefix_error(error, "converting %s: ", fn); return FALSE; } @@ -86,17 +87,17 @@ fu_plugin_uefi_capsule_fwupd_efi_parse(FuPlugin *plugin, GError **error) } static void -fu_plugin_uefi_capsule_fwupd_efi_changed_cb(GFileMonitor *monitor, +fu_uefi_capsule_plugin_fwupd_efi_changed_cb(GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, gpointer user_data) { - FuPlugin *plugin = FU_PLUGIN(user_data); - FuContext *ctx = fu_plugin_get_context(plugin); + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(user_data); + FuContext *ctx = fu_plugin_get_context(FU_PLUGIN(self)); g_autoptr(GError) error_local = NULL; - if (!fu_plugin_uefi_capsule_fwupd_efi_parse(plugin, &error_local)) { + if (!fu_uefi_capsule_plugin_fwupd_efi_parse(self, &error_local)) { fu_context_add_runtime_version(ctx, "org.freedesktop.fwupd-efi", "1.0"); g_warning("failed to get new fwupd efi runtime version: %s", error_local->message); return; @@ -104,78 +105,40 @@ fu_plugin_uefi_capsule_fwupd_efi_changed_cb(GFileMonitor *monitor, } static gboolean -fu_plugin_uefi_capsule_fwupd_efi_probe(FuPlugin *plugin, GError **error) +fu_uefi_capsule_plugin_fwupd_efi_probe(FuUefiCapsulePlugin *self, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); - FuContext *ctx = fu_plugin_get_context(plugin); + FuContext *ctx = fu_plugin_get_context(FU_PLUGIN(self)); g_autofree gchar *fn = NULL; /* find the app binary */ fn = fu_uefi_get_built_app_path(error); if (fn == NULL) return FALSE; - priv->fwupd_efi_file = g_file_new_for_path(fn); - priv->fwupd_efi_monitor = - g_file_monitor_file(priv->fwupd_efi_file, G_FILE_MONITOR_NONE, NULL, error); - if (priv->fwupd_efi_monitor == NULL) + self->fwupd_efi_file = g_file_new_for_path(fn); + self->fwupd_efi_monitor = + g_file_monitor_file(self->fwupd_efi_file, G_FILE_MONITOR_NONE, NULL, error); + if (self->fwupd_efi_monitor == NULL) return FALSE; - g_signal_connect(G_FILE_MONITOR(priv->fwupd_efi_monitor), + g_signal_connect(G_FILE_MONITOR(self->fwupd_efi_monitor), "changed", - G_CALLBACK(fu_plugin_uefi_capsule_fwupd_efi_changed_cb), - plugin); - if (!fu_plugin_uefi_capsule_fwupd_efi_parse(plugin, error)) { + G_CALLBACK(fu_uefi_capsule_plugin_fwupd_efi_changed_cb), + self); + if (!fu_uefi_capsule_plugin_fwupd_efi_parse(self, error)) { fu_context_add_runtime_version(ctx, "org.freedesktop.fwupd-efi", "1.0"); return FALSE; } return TRUE; } -static void -fu_plugin_uefi_capsule_init(FuPlugin *plugin) -{ - FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); - g_autoptr(GError) error_local = NULL; - - priv->backend = fu_uefi_backend_new(ctx); - priv->bgrt = fu_uefi_bgrt_new(); - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "upower"); - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "tpm"); - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "dell"); - 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 */ - - /* add a requirement on the fwupd-efi version -- which can change */ - if (!fu_plugin_uefi_capsule_fwupd_efi_probe(plugin, &error_local)) - g_debug("failed to get fwupd-efi runtime version: %s", error_local->message); -} - -static void -fu_plugin_uefi_capsule_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->esp != NULL) - g_object_unref(priv->esp); - if (priv->fwupd_efi_file != NULL) - g_object_unref(priv->fwupd_efi_file); - if (priv->fwupd_efi_monitor != NULL) { - g_file_monitor_cancel(priv->fwupd_efi_monitor); - g_object_unref(priv->fwupd_efi_monitor); - } - g_object_unref(priv->backend); - g_object_unref(priv->bgrt); -} - static gboolean -fu_plugin_uefi_capsule_clear_results(FuPlugin *plugin, FuDevice *device, GError **error) +fu_uefi_capsule_plugin_clear_results(FuPlugin *plugin, FuDevice *device, GError **error) { FuUefiDevice *device_uefi = FU_UEFI_DEVICE(device); return fu_uefi_device_clear_status(device_uefi, error); } static void -fu_plugin_uefi_capsule_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_uefi_capsule_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { g_autoptr(FwupdSecurityAttr) attr = NULL; g_autoptr(GError) error = NULL; @@ -203,7 +166,7 @@ fu_plugin_uefi_capsule_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *att } static GBytes * -fu_plugin_uefi_capsule_get_splash_data(guint width, guint height, GError **error) +fu_uefi_capsule_plugin_get_splash_data(guint width, guint height, GError **error) { const gchar *const *langs = g_get_language_names(); g_autofree gchar *datadir_pkg = NULL; @@ -249,12 +212,11 @@ fu_plugin_uefi_capsule_get_splash_data(guint width, guint height, GError **error } static gboolean -fu_plugin_uefi_capsule_write_splash_data(FuPlugin *plugin, +fu_uefi_capsule_plugin_write_splash_data(FuUefiCapsulePlugin *self, FuDevice *device, GBytes *blob, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); guint32 screen_x, screen_y; gsize buf_size = g_bytes_get_size(blob); gssize size; @@ -286,7 +248,7 @@ fu_plugin_uefi_capsule_write_splash_data(FuPlugin *plugin, } /* save to a predicatable filename */ - esp_path = fu_volume_get_mount_point(priv->esp); + esp_path = fu_volume_get_mount_point(self->esp); directory = fu_uefi_get_esp_path_for_os(device, esp_path); basename = g_strdup_printf("fwupd-%s.cap", FU_EFIVAR_GUID_UX_CAPSULE); fn = g_build_filename(directory, "fw", basename, NULL); @@ -310,11 +272,11 @@ fu_plugin_uefi_capsule_write_splash_data(FuPlugin *plugin, header.image_type = 0; header.reserved = 0; header.x_offset = (screen_x / 2) - (width / 2); - if (screen_y == fu_uefi_bgrt_get_height(priv->bgrt)) { + if (screen_y == fu_uefi_bgrt_get_height(self->bgrt)) { header.y_offset = (gdouble)screen_y * 0.8f; } else { header.y_offset = - fu_uefi_bgrt_get_yoffset(priv->bgrt) + fu_uefi_bgrt_get_height(priv->bgrt); + fu_uefi_bgrt_get_yoffset(self->bgrt) + fu_uefi_bgrt_get_height(self->bgrt); }; /* header, payload and image has to add to zero */ @@ -347,9 +309,9 @@ fu_plugin_uefi_capsule_write_splash_data(FuPlugin *plugin, } static gboolean -fu_plugin_uefi_capsule_update_splash(FuPlugin *plugin, FuDevice *device, GError **error) +fu_uefi_capsule_plugin_update_splash(FuPlugin *plugin, FuDevice *device, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); guint best_idx = G_MAXUINT; guint32 lowest_border_pixels = G_MAXUINT; guint32 screen_height = 768; @@ -376,7 +338,7 @@ fu_plugin_uefi_capsule_update_splash(FuPlugin *plugin, FuDevice *device, GError } /* get the boot graphics resource table data */ - if (!fu_uefi_bgrt_get_supported(priv->bgrt)) { + if (!fu_uefi_bgrt_get_supported(self->bgrt)) { g_set_error_literal(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, @@ -415,18 +377,18 @@ fu_plugin_uefi_capsule_update_splash(FuPlugin *plugin, FuDevice *device, GError } /* get the raw data */ - image_bmp = fu_plugin_uefi_capsule_get_splash_data(sizes[best_idx].width, + image_bmp = fu_uefi_capsule_plugin_get_splash_data(sizes[best_idx].width, sizes[best_idx].height, error); if (image_bmp == NULL) return FALSE; /* perform the upload */ - return fu_plugin_uefi_capsule_write_splash_data(plugin, device, image_bmp, error); + return fu_uefi_capsule_plugin_write_splash_data(self, device, image_bmp, error); } static gboolean -fu_plugin_uefi_capsule_write_firmware(FuPlugin *plugin, +fu_uefi_capsule_plugin_write_firmware(FuPlugin *plugin, FuDevice *device, GBytes *blob_fw, FuProgress *progress, @@ -463,7 +425,7 @@ fu_plugin_uefi_capsule_write_firmware(FuPlugin *plugin, /* perform the update */ fu_progress_set_status(progress, FWUPD_STATUS_SCHEDULING); - if (!fu_plugin_uefi_capsule_update_splash(plugin, device, &error_splash)) { + if (!fu_uefi_capsule_plugin_update_splash(plugin, device, &error_splash)) { g_debug("failed to upload UEFI UX capsule text: %s", error_splash->message); } @@ -471,7 +433,7 @@ fu_plugin_uefi_capsule_write_firmware(FuPlugin *plugin, } static void -fu_plugin_uefi_capsule_load_config(FuPlugin *plugin, FuDevice *device) +fu_uefi_capsule_plugin_load_config(FuPlugin *plugin, FuDevice *device) { gboolean disable_shim; gboolean fallback_removable_path; @@ -501,7 +463,7 @@ fu_plugin_uefi_capsule_load_config(FuPlugin *plugin, FuDevice *device) } static FuVolume * -fu_plugin_uefi_capsule_get_default_esp(FuPlugin *plugin, GError **error) +fu_uefi_capsule_plugin_get_default_esp(FuPlugin *plugin, GError **error) { g_autoptr(GPtrArray) esp_volumes = NULL; esp_volumes = fu_context_get_esp_volumes(fu_plugin_get_context(plugin), error); @@ -523,28 +485,28 @@ fu_plugin_uefi_capsule_get_default_esp(FuPlugin *plugin, GError **error) } static void -fu_plugin_uefi_capsule_register_proxy_device(FuPlugin *plugin, FuDevice *device) +fu_uefi_capsule_plugin_register_proxy_device(FuPlugin *plugin, FuDevice *device) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); g_autoptr(FuUefiDevice) dev = NULL; g_autoptr(GError) error_local = NULL; /* load all configuration variables */ - dev = fu_uefi_backend_device_new_from_dev(FU_UEFI_BACKEND(priv->backend), device); - fu_plugin_uefi_capsule_load_config(plugin, FU_DEVICE(dev)); - if (priv->esp == NULL) - priv->esp = fu_plugin_uefi_capsule_get_default_esp(plugin, &error_local); - if (priv->esp == NULL) { + dev = fu_uefi_backend_device_new_from_dev(FU_UEFI_BACKEND(self->backend), device); + fu_uefi_capsule_plugin_load_config(plugin, FU_DEVICE(dev)); + if (self->esp == NULL) + self->esp = fu_uefi_capsule_plugin_get_default_esp(plugin, &error_local); + if (self->esp == NULL) { fu_device_inhibit(device, "no-esp", error_local->message); } else { - fu_uefi_device_set_esp(dev, priv->esp); + fu_uefi_device_set_esp(dev, self->esp); fu_device_uninhibit(device, "no-esp"); } fu_plugin_device_add(plugin, FU_DEVICE(dev)); } static void -fu_plugin_uefi_capsule_device_registered(FuPlugin *plugin, FuDevice *device) +fu_uefi_capsule_plugin_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) { @@ -552,12 +514,12 @@ fu_plugin_uefi_capsule_device_registered(FuPlugin *plugin, FuDevice *device) g_warning("cannot create proxy device as no GUID: %s", dbg); return; } - fu_plugin_uefi_capsule_register_proxy_device(plugin, device); + fu_uefi_capsule_plugin_register_proxy_device(plugin, device); } } static const gchar * -fu_plugin_uefi_capsule_uefi_type_to_string(FuUefiDeviceKind device_kind) +fu_uefi_capsule_plugin_uefi_type_to_string(FuUefiDeviceKind device_kind) { if (device_kind == FU_UEFI_DEVICE_KIND_UNKNOWN) return "Unknown Firmware"; @@ -573,19 +535,19 @@ fu_plugin_uefi_capsule_uefi_type_to_string(FuUefiDeviceKind device_kind) } static gchar * -fu_plugin_uefi_capsule_get_name_for_type(FuPlugin *plugin, FuUefiDeviceKind device_kind) +fu_uefi_capsule_plugin_get_name_for_type(FuPlugin *plugin, FuUefiDeviceKind device_kind) { GString *display_name; /* set Display Name prefix for capsules that are not PCI cards */ - display_name = g_string_new(fu_plugin_uefi_capsule_uefi_type_to_string(device_kind)); + display_name = g_string_new(fu_uefi_capsule_plugin_uefi_type_to_string(device_kind)); if (device_kind == FU_UEFI_DEVICE_KIND_DEVICE_FIRMWARE) g_string_prepend(display_name, "UEFI "); return g_string_free(display_name, FALSE); } static gboolean -fu_plugin_uefi_capsule_coldplug_device(FuPlugin *plugin, FuUefiDevice *dev, GError **error) +fu_uefi_capsule_plugin_coldplug_device(FuPlugin *plugin, FuUefiDevice *dev, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); FuUefiDeviceKind device_kind; @@ -614,7 +576,7 @@ fu_plugin_uefi_capsule_coldplug_device(FuPlugin *plugin, FuUefiDevice *dev, GErr device_kind = fu_uefi_device_get_kind(dev); if (fu_device_get_name(FU_DEVICE(dev)) == NULL) { g_autofree gchar *name = NULL; - name = fu_plugin_uefi_capsule_get_name_for_type(plugin, device_kind); + name = fu_uefi_capsule_plugin_get_name_for_type(plugin, device_kind); if (name != NULL) fu_device_set_name(FU_DEVICE(dev), name); if (device_kind != FU_UEFI_DEVICE_KIND_SYSTEM_FIRMWARE) { @@ -645,7 +607,7 @@ fu_plugin_uefi_capsule_coldplug_device(FuPlugin *plugin, FuUefiDevice *dev, GErr } static void -fu_plugin_uefi_capsule_test_secure_boot(FuPlugin *plugin) +fu_uefi_capsule_plugin_test_secure_boot(FuPlugin *plugin) { const gchar *result_str = "Disabled"; if (fu_efivar_secure_boot_enabled(NULL)) @@ -654,10 +616,10 @@ fu_plugin_uefi_capsule_test_secure_boot(FuPlugin *plugin) } static gboolean -fu_plugin_uefi_capsule_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_capsule_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); guint64 nvram_total; g_autofree gchar *esp_path = NULL; g_autofree gchar *nvram_total_str = NULL; @@ -677,12 +639,12 @@ fu_plugin_uefi_capsule_startup(FuPlugin *plugin, FuProgress *progress, GError ** /* use GRUB to load updates */ if (fu_plugin_get_config_value_boolean(plugin, "EnableGrubChainLoad")) { - fu_uefi_backend_set_device_gtype(FU_UEFI_BACKEND(priv->backend), + fu_uefi_backend_set_device_gtype(FU_UEFI_BACKEND(self->backend), FU_TYPE_UEFI_GRUB_DEVICE); } /* check we can use this backend */ - if (!fu_backend_setup(priv->backend, progress, &error_local)) { + if (!fu_backend_setup(self->backend, progress, &error_local)) { if (g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_WRITE)) { fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_EFIVAR_NOT_MOUNTED); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_CLEAR_UPDATABLE); @@ -704,8 +666,8 @@ fu_plugin_uefi_capsule_startup(FuPlugin *plugin, FuProgress *progress, GError ** /* override the default ESP path */ esp_path = fu_plugin_get_config_value(plugin, "OverrideESPMountPoint"); if (esp_path != NULL) { - priv->esp = fu_volume_new_esp_for_path(esp_path, error); - if (priv->esp == NULL) { + self->esp = fu_volume_new_esp_for_path(esp_path, error); + if (self->esp == NULL) { g_prefix_error(error, "invalid OverrideESPMountPoint=%s " "specified in config: ", @@ -720,7 +682,7 @@ fu_plugin_uefi_capsule_startup(FuPlugin *plugin, FuProgress *progress, GError ** } static gboolean -fu_plugin_uefi_capsule_unlock(FuPlugin *plugin, FuDevice *device, GError **error) +fu_uefi_capsule_plugin_unlock(FuPlugin *plugin, FuDevice *device, GError **error) { FuUefiDevice *device_uefi = FU_UEFI_DEVICE(device); FuDevice *device_alt = NULL; @@ -816,7 +778,7 @@ fu_plugin_uefi_update_state_notify_cb(GObject *object, GParamSpec *pspec, FuPlug } static gboolean -fu_plugin_uefi_capsule_check_cod_support(FuPlugin *plugin, GError **error) +fu_uefi_capsule_plugin_check_cod_support(FuPlugin *plugin, GError **error) { gsize bufsz = 0; guint64 value = 0; @@ -862,9 +824,9 @@ fu_plugin_uefi_capsule_check_cod_support(FuPlugin *plugin, GError **error) } static gboolean -fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_capsule_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); const gchar *str; gboolean has_fde = FALSE; g_autoptr(GError) error_udisks2 = NULL; @@ -881,9 +843,9 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * fu_progress_add_step(progress, FWUPD_STATUS_LOADING, 26, "add-devices"); fu_progress_add_step(progress, FWUPD_STATUS_LOADING, 1, "setup-bgrt"); - if (priv->esp == NULL) { - priv->esp = fu_plugin_uefi_capsule_get_default_esp(plugin, &error_udisks2); - if (priv->esp == NULL) { + if (self->esp == NULL) { + self->esp = fu_uefi_capsule_plugin_get_default_esp(plugin, &error_udisks2); + if (self->esp == NULL) { fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_ESP_NOT_FOUND); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_CLEAR_UPDATABLE); fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_USER_WARNING); @@ -895,10 +857,10 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * /* firmware may lie */ if (!fu_plugin_get_config_value_boolean(plugin, "DisableCapsuleUpdateOnDisk")) { g_autoptr(GError) error_cod = NULL; - if (!fu_plugin_uefi_capsule_check_cod_support(plugin, &error_cod)) { + if (!fu_uefi_capsule_plugin_check_cod_support(plugin, &error_cod)) { g_debug("not using CapsuleOnDisk support: %s", error_cod->message); } else { - fu_uefi_backend_set_device_gtype(FU_UEFI_BACKEND(priv->backend), + fu_uefi_backend_set_device_gtype(FU_UEFI_BACKEND(self->backend), FU_TYPE_UEFI_COD_DEVICE); } } @@ -912,17 +874,17 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * fu_progress_step_done(progress); /* add each device */ - if (!fu_backend_coldplug(priv->backend, fu_progress_get_child(progress), error)) + if (!fu_backend_coldplug(self->backend, fu_progress_get_child(progress), error)) return FALSE; fu_progress_step_done(progress); - devices = fu_backend_get_devices(priv->backend); + devices = fu_backend_get_devices(self->backend); for (guint i = 0; i < devices->len; i++) { FuUefiDevice *dev = g_ptr_array_index(devices, i); g_autoptr(GError) error_device = NULL; - if (priv->esp != NULL) - fu_uefi_device_set_esp(dev, priv->esp); - if (!fu_plugin_uefi_capsule_coldplug_device(plugin, dev, &error_device)) { + if (self->esp != NULL) + fu_uefi_device_set_esp(dev, self->esp); + if (!fu_uefi_capsule_plugin_coldplug_device(plugin, dev, &error_device)) { if (g_error_matches(error_device, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) { g_warning("skipping device that failed coldplug: %s", error_device->message); @@ -939,7 +901,7 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * fu_device_add_flag(FU_DEVICE(dev), FWUPD_DEVICE_FLAG_AFFECTS_FDE); /* load all configuration variables */ - fu_plugin_uefi_capsule_load_config(plugin, FU_DEVICE(dev)); + fu_uefi_capsule_plugin_load_config(plugin, FU_DEVICE(dev)); /* watch in case we set needs-reboot in the engine */ g_signal_connect(FU_DEVICE(dev), @@ -952,10 +914,10 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * fu_progress_step_done(progress); /* for debugging problems later */ - fu_plugin_uefi_capsule_test_secure_boot(plugin); - if (!fu_uefi_bgrt_setup(priv->bgrt, &error_local)) + fu_uefi_capsule_plugin_test_secure_boot(plugin); + if (!fu_uefi_bgrt_setup(self->bgrt, &error_local)) g_debug("BGRT setup failed: %s", error_local->message); - str = fu_uefi_bgrt_get_supported(priv->bgrt) ? "Enabled" : "Disabled"; + str = fu_uefi_bgrt_get_supported(self->bgrt) ? "Enabled" : "Disabled"; g_debug("UX Capsule support : %s", str); fu_plugin_add_report_metadata(plugin, "UEFIUXCapsule", str); fu_progress_step_done(progress); @@ -963,18 +925,64 @@ fu_plugin_uefi_capsule_coldplug(FuPlugin *plugin, FuProgress *progress, GError * return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_uefi_capsule_plugin_init(FuUefiCapsulePlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_uefi_capsule_init; - vfuncs->destroy = fu_plugin_uefi_capsule_destroy; - vfuncs->to_string = fu_plugin_uefi_capsule_to_string; - 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; + self->bgrt = fu_uefi_bgrt_new(); +} + +static void +fu_uefi_capsule_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(plugin); + g_autoptr(GError) error_local = NULL; + + self->backend = fu_uefi_backend_new(ctx); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "upower"); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "tpm"); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "dell"); + 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 */ + + /* add a requirement on the fwupd-efi version -- which can change */ + if (!fu_uefi_capsule_plugin_fwupd_efi_probe(self, &error_local)) + g_debug("failed to get fwupd-efi runtime version: %s", error_local->message); +} + +static void +fu_uefi_capsule_finalize(GObject *obj) +{ + FuUefiCapsulePlugin *self = FU_UEFI_CAPSULE_PLUGIN(obj); + if (self->esp != NULL) + g_object_unref(self->esp); + if (self->fwupd_efi_file != NULL) + g_object_unref(self->fwupd_efi_file); + if (self->fwupd_efi_monitor != NULL) { + g_file_monitor_cancel(self->fwupd_efi_monitor); + g_object_unref(self->fwupd_efi_monitor); + } + g_object_unref(self->backend); + g_object_unref(self->bgrt); + G_OBJECT_CLASS(fu_uefi_capsule_plugin_parent_class)->finalize(obj); +} + +static void +fu_uefi_capsule_plugin_class_init(FuUefiCapsulePluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_uefi_capsule_plugin_constructed; + object_class->finalize = fu_uefi_capsule_finalize; + plugin_class->to_string = fu_uefi_capsule_plugin_to_string; + plugin_class->clear_results = fu_uefi_capsule_plugin_clear_results; + plugin_class->add_security_attrs = fu_uefi_capsule_plugin_add_security_attrs; + plugin_class->device_registered = fu_uefi_capsule_plugin_device_registered; + plugin_class->startup = fu_uefi_capsule_plugin_startup; + plugin_class->unlock = fu_uefi_capsule_plugin_unlock; + plugin_class->coldplug = fu_uefi_capsule_plugin_coldplug; + plugin_class->write_firmware = fu_uefi_capsule_plugin_write_firmware; } diff --git a/plugins/uefi-capsule/fu-uefi-capsule-plugin.h b/plugins/uefi-capsule/fu-uefi-capsule-plugin.h new file mode 100644 index 000000000..6042241d2 --- /dev/null +++ b/plugins/uefi-capsule/fu-uefi-capsule-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUefiCapsulePlugin, fu_uefi_capsule_plugin, FU, UEFI_CAPSULE_PLUGIN, FuPlugin) diff --git a/plugins/uefi-capsule/meson.build b/plugins/uefi-capsule/meson.build index 42667e155..f06a3c2be 100644 --- a/plugins/uefi-capsule/meson.build +++ b/plugins/uefi-capsule/meson.build @@ -28,10 +28,9 @@ else error('no ESRT support for @0@'.format(host_machine.system())) endif -shared_module('fu_plugin_uefi_capsule', - fu_hash, +plugin_builtin_uefi_capsule = static_library('fu_plugin_uefi_capsule', sources: [ - 'fu-plugin-uefi-capsule.c', + 'fu-uefi-capsule-plugin.c', 'fu-uefi-bgrt.c', 'fu-uefi-bootmgr.c', 'fu-uefi-common.c', @@ -43,17 +42,8 @@ shared_module('fu_plugin_uefi_capsule', 'fu-uefi-update-info.c', backend_srcs, ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, dependencies: [ plugin_deps, @@ -61,11 +51,11 @@ shared_module('fu_plugin_uefi_capsule', efiboot, ], ) +plugin_libs += plugin_builtin_uefi_capsule if get_option('compat_cli') fwupdate = executable( 'fwupdate', - fu_hash, sources: [ 'fu-uefi-tool.c', 'fu-uefi-bgrt.c', @@ -79,20 +69,13 @@ fwupdate = executable( 'fu-uefi-update-info.c', backend_srcs, ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, platform_deps, efiboot, ], - link_with: [ - fwupd, - fwupdplugin, - ], + link_with: plugin_libs, install: true, install_dir: bindir, c_args: cargs, @@ -150,25 +133,10 @@ if get_option('tests') env.set('FWUPD_LOCALSTATEDIR', '/tmp/fwupd-self-test/var') e = executable( 'uefi-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-uefi-bgrt.c', - 'fu-uefi-bootmgr.c', - 'fu-uefi-common.c', - 'fu-uefi-device.c', - 'fu-uefi-cod-device.c', - 'fu-uefi-nvram-device.c', - 'fu-uefi-grub-device.c', - 'fu-uefi-devpath.c', - 'fu-uefi-update-info.c', - backend_srcs, - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, ], + include_directories: plugin_incdirs, dependencies: [ plugin_deps, platform_deps, @@ -177,6 +145,7 @@ if get_option('tests') link_with: [ fwupd, fwupdplugin, + plugin_builtin_uefi_capsule, ], c_args: cargs ) diff --git a/plugins/uefi-dbx/fu-plugin-uefi-dbx.c b/plugins/uefi-dbx/fu-uefi-dbx-plugin.c similarity index 63% rename from plugins/uefi-dbx/fu-plugin-uefi-dbx.c rename to plugins/uefi-dbx/fu-uefi-dbx-plugin.c index 29bfa14b7..cb1fdec3b 100644 --- a/plugins/uefi-dbx/fu-plugin-uefi-dbx.c +++ b/plugins/uefi-dbx/fu-uefi-dbx-plugin.c @@ -6,19 +6,17 @@ #include "config.h" -#include - #include "fu-uefi-dbx-device.h" +#include "fu-uefi-dbx-plugin.h" -static void -fu_plugin_uefi_dbx_init(FuPlugin *plugin) -{ - fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "uefi_capsule"); - fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EFI_SIGNATURE_LIST); -} +struct _FuUefiDbxPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuUefiDbxPlugin, fu_uefi_dbx_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_uefi_dbx_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_dbx_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); g_autoptr(FuUefiDbxDevice) device = fu_uefi_dbx_device_new(ctx); @@ -45,10 +43,25 @@ fu_plugin_uefi_dbx_coldplug(FuPlugin *plugin, FuProgress *progress, GError **err return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_uefi_dbx_plugin_init(FuUefiDbxPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_uefi_dbx_init; - vfuncs->coldplug = fu_plugin_uefi_dbx_coldplug; +} + +static void +fu_uefi_dbx_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_METADATA_SOURCE, "uefi_capsule"); + fu_plugin_add_firmware_gtype(plugin, NULL, FU_TYPE_EFI_SIGNATURE_LIST); +} + +static void +fu_uefi_dbx_plugin_class_init(FuUefiDbxPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_uefi_dbx_plugin_constructed; + plugin_class->coldplug = fu_uefi_dbx_plugin_coldplug; } diff --git a/plugins/uefi-dbx/fu-uefi-dbx-plugin.h b/plugins/uefi-dbx/fu-uefi-dbx-plugin.h new file mode 100644 index 000000000..793f7bae6 --- /dev/null +++ b/plugins/uefi-dbx/fu-uefi-dbx-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUefiDbxPlugin, fu_uefi_dbx_plugin, FU, UEFI_DBX_PLUGIN, FuPlugin) diff --git a/plugins/uefi-dbx/meson.build b/plugins/uefi-dbx/meson.build index fc766547e..ed574c6ab 100644 --- a/plugins/uefi-dbx/meson.build +++ b/plugins/uefi-dbx/meson.build @@ -2,31 +2,19 @@ if efiboot.found() and efivar.found() cargs = ['-DG_LOG_DOMAIN="FuPluginUefiDbx"'] plugin_quirks += files('uefi-dbx.quirk') - -shared_module('fu_plugin_uefi_dbx', - fu_hash, +plugin_builtin_uefi_dbx = static_library('fu_plugin_uefi_dbx', sources: [ - 'fu-plugin-uefi-dbx.c', + 'fu-uefi-dbx-plugin.c', 'fu-uefi-dbx-common.c', 'fu-uefi-dbx-device.c', 'fu-efi-image.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_uefi_dbx if get_option('tests') env = environment() @@ -34,23 +22,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'uefi-dbx-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-uefi-dbx-common.c', - 'fu-efi-image.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_uefi_dbx, ], c_args: cargs, install: true, @@ -62,24 +41,14 @@ endif dbxtool = executable( 'dbxtool', - fu_hash, sources: [ 'fu-dbxtool.c', 'fu-uefi-dbx-common.c', 'fu-efi-image.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, + link_with: plugin_libs, install: true, install_dir: bindir, c_args: cargs, diff --git a/plugins/uefi-pk/fu-plugin-uefi-pk.c b/plugins/uefi-pk/fu-uefi-pk-plugin.c similarity index 74% rename from plugins/uefi-pk/fu-plugin-uefi-pk.c rename to plugins/uefi-pk/fu-uefi-pk-plugin.c index f026f3178..2fe50cdbe 100644 --- a/plugins/uefi-pk/fu-plugin-uefi-pk.c +++ b/plugins/uefi-pk/fu-uefi-pk-plugin.c @@ -6,20 +6,23 @@ #include "config.h" -#include - #include #include -struct FuPluginData { +#include "fu-uefi-pk-plugin.h" + +struct _FuUefiPkPlugin { + FuPlugin parent_instance; gboolean has_pk_test_key; }; +G_DEFINE_TYPE(FuUefiPkPlugin, fu_uefi_pk_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_uefi_pk_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_uefi_pk_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append_kb(str, idt, "HasPkTestKey", priv->has_pk_test_key); + FuUefiPkPlugin *self = FU_UEFI_PK_PLUGIN(plugin); + fu_string_append_kb(str, idt, "HasPkTestKey", self->has_pk_test_key); } #define FU_UEFI_PK_CHECKSUM_AMI_TEST_KEY "a773113bafaf5129aa83fd0912e95da4fa555f91" @@ -38,9 +41,9 @@ G_DEFINE_AUTO_CLEANUP_FREE_FUNC(gnutls_x509_crt_t, gnutls_x509_crt_deinit, NULL) #pragma clang diagnostic pop static gboolean -fu_plugin_uefi_pk_parse_buf(FuPlugin *plugin, const gchar *buf, gsize bufsz, GError **error) +fu_uefi_pk_plugin_parse_buf(FuPlugin *plugin, const gchar *buf, gsize bufsz, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiPkPlugin *self = FU_UEFI_PK_PLUGIN(plugin); const gchar *needles[] = { "DO NOT TRUST", "DO NOT SHIP", @@ -49,7 +52,7 @@ fu_plugin_uefi_pk_parse_buf(FuPlugin *plugin, const gchar *buf, gsize bufsz, GEr for (guint i = 0; needles[i] != NULL; i++) { if (g_strstr_len(buf, bufsz, needles[i]) != NULL) { g_debug("got %s, marking unsafe", buf); - priv->has_pk_test_key = TRUE; + self->has_pk_test_key = TRUE; break; } } @@ -57,7 +60,7 @@ fu_plugin_uefi_pk_parse_buf(FuPlugin *plugin, const gchar *buf, gsize bufsz, GEr } static gboolean -fu_plugin_uefi_pk_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError **error) +fu_uefi_pk_plugin_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError **error) { gchar buf[1024] = {'\0'}; gnutls_datum_t d = {0}; @@ -101,7 +104,7 @@ fu_plugin_uefi_pk_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError if (gnutls_x509_crt_get_issuer_dn(crt, buf, &bufsz) == GNUTLS_E_SUCCESS) { if (g_getenv("FWUPD_UEFI_PK_VERBOSE") != NULL) g_debug("PK issuer: %s", buf); - if (!fu_plugin_uefi_pk_parse_buf(plugin, buf, bufsz, error)) + if (!fu_uefi_pk_plugin_parse_buf(plugin, buf, bufsz, error)) return FALSE; } @@ -111,7 +114,7 @@ fu_plugin_uefi_pk_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError gnutls_x509_dn_get_str(dn, subject); if (g_getenv("FWUPD_UEFI_PK_VERBOSE") != NULL) g_debug("PK subject: %s", subject->data); - if (!fu_plugin_uefi_pk_parse_buf(plugin, + if (!fu_uefi_pk_plugin_parse_buf(plugin, (const gchar *)subject->data, subject->size, error)) @@ -123,9 +126,9 @@ fu_plugin_uefi_pk_parse_signature(FuPlugin *plugin, FuEfiSignature *sig, GError } static gboolean -fu_plugin_uefi_pk_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_pk_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiPkPlugin *self = FU_UEFI_PK_PLUGIN(plugin); g_autoptr(FuFirmware) img = NULL; g_autoptr(FuFirmware) pk = fu_efi_signature_list_new(); g_autoptr(GBytes) pk_blob = NULL; @@ -142,13 +145,13 @@ fu_plugin_uefi_pk_coldplug(FuPlugin *plugin, FuProgress *progress, GError **erro /* by checksum */ img = fu_firmware_get_image_by_checksum(pk, FU_UEFI_PK_CHECKSUM_AMI_TEST_KEY, NULL); if (img != NULL) - priv->has_pk_test_key = TRUE; + self->has_pk_test_key = TRUE; /* by text */ sigs = fu_firmware_get_images(pk); for (guint i = 0; i < sigs->len; i++) { FuEfiSignature *sig = g_ptr_array_index(sigs, i); - if (!fu_plugin_uefi_pk_parse_signature(plugin, sig, error)) + if (!fu_uefi_pk_plugin_parse_signature(plugin, sig, error)) return FALSE; } @@ -157,22 +160,16 @@ fu_plugin_uefi_pk_coldplug(FuPlugin *plugin, FuProgress *progress, GError **erro } static void -fu_plugin_uefi_pk_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} - -static void -fu_plugin_uefi_pk_device_registered(FuPlugin *plugin, FuDevice *device) +fu_uefi_pk_plugin_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); } static void -fu_plugin_uefi_pk_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) +fu_uefi_pk_plugin_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUefiPkPlugin *self = FU_UEFI_PK_PLUGIN(plugin); FuDevice *msf_device = fu_plugin_cache_lookup(plugin, "main-system-firmware"); g_autoptr(FwupdSecurityAttr) attr = NULL; @@ -182,14 +179,8 @@ fu_plugin_uefi_pk_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_add_guids(attr, fu_device_get_guids(msf_device)); fu_security_attrs_append(attrs, attr); - /* not enabled */ - if (priv == NULL) { - fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_MISSING_DATA); - return; - } - /* test key is not secure */ - if (priv->has_pk_test_key) { + if (self->has_pk_test_key) { fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_NOT_VALID); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONFIG_FW); fwupd_security_attr_add_flag(attr, FWUPD_SECURITY_ATTR_FLAG_ACTION_CONTACT_OEM); @@ -201,13 +192,17 @@ fu_plugin_uefi_pk_add_security_attrs(FuPlugin *plugin, FuSecurityAttrs *attrs) fwupd_security_attr_set_result(attr, FWUPD_SECURITY_ATTR_RESULT_VALID); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_uefi_pk_plugin_init(FuUefiPkPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_uefi_pk_init; - vfuncs->to_string = fu_plugin_uefi_pk_to_string; - 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; +} + +static void +fu_uefi_pk_plugin_class_init(FuUefiPkPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + plugin_class->to_string = fu_uefi_pk_plugin_to_string; + plugin_class->add_security_attrs = fu_uefi_pk_plugin_add_security_attrs; + plugin_class->device_registered = fu_uefi_pk_plugin_device_registered; + plugin_class->coldplug = fu_uefi_pk_plugin_coldplug; } diff --git a/plugins/uefi-pk/fu-uefi-pk-plugin.h b/plugins/uefi-pk/fu-uefi-pk-plugin.h new file mode 100644 index 000000000..eeb3bb0ac --- /dev/null +++ b/plugins/uefi-pk/fu-uefi-pk-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUefiPkPlugin, fu_uefi_pk_plugin, FU, UEFI_PK_PLUGIN, FuPlugin) diff --git a/plugins/uefi-pk/meson.build b/plugins/uefi-pk/meson.build index d9fb44b2d..c8dcf8e70 100644 --- a/plugins/uefi-pk/meson.build +++ b/plugins/uefi-pk/meson.build @@ -3,25 +3,13 @@ if hsi and \ error_message: 'gnutls is needed for plugin_uefi_pk').allowed() cargs = ['-DG_LOG_DOMAIN="FuPluginUefiPk"'] -shared_module('fu_plugin_uefi_pk', - fu_hash, +plugin_builtins += static_library('fu_plugin_uefi_pk', sources: [ - 'fu-plugin-uefi-pk.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-uefi-pk-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/uefi-recovery/fu-plugin-uefi-recovery.c b/plugins/uefi-recovery/fu-uefi-recovery-plugin.c similarity index 66% rename from plugins/uefi-recovery/fu-plugin-uefi-recovery.c rename to plugins/uefi-recovery/fu-uefi-recovery-plugin.c index 8062d1a62..e994fd630 100644 --- a/plugins/uefi-recovery/fu-plugin-uefi-recovery.c +++ b/plugins/uefi-recovery/fu-uefi-recovery-plugin.c @@ -6,27 +6,23 @@ #include "config.h" -#include +#include "fu-uefi-recovery-plugin.h" -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_add_flag(plugin, FWUPD_PLUGIN_FLAG_REQUIRE_HWID); -} +struct _FuUefiRecoveryPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuUefiRecoveryPlugin, fu_uefi_recovery_plugin, FU_TYPE_PLUGIN) static gboolean -fu_plugin_uefi_recovery_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_recovery_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { /* are the EFI dirs set up so we can update each device */ - if (!fu_efivar_supported(error)) - return FALSE; - return TRUE; + return fu_efivar_supported(error); } static gboolean -fu_plugin_uefi_recovery_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_uefi_recovery_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { FuContext *ctx = fu_plugin_get_context(plugin); GPtrArray *hwids = fu_context_get_hwid_guids(ctx); @@ -58,11 +54,27 @@ fu_plugin_uefi_recovery_coldplug(FuPlugin *plugin, FuProgress *progress, GError return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_uefi_recovery_plugin_constructed(GObject *obj) { - 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; + FuPlugin *plugin = FU_PLUGIN(obj); + + /* make sure that UEFI plugin is ready to receive devices */ + fu_plugin_add_rule(plugin, FU_PLUGIN_RULE_RUN_AFTER, "uefi_capsule"); + fu_plugin_add_flag(plugin, FWUPD_PLUGIN_FLAG_REQUIRE_HWID); +} + +static void +fu_uefi_recovery_plugin_init(FuUefiRecoveryPlugin *self) +{ +} + +static void +fu_uefi_recovery_plugin_class_init(FuUefiRecoveryPluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + object_class->constructed = fu_uefi_recovery_plugin_constructed; + plugin_class->coldplug = fu_uefi_recovery_plugin_coldplug; + plugin_class->startup = fu_uefi_recovery_plugin_startup; } diff --git a/plugins/uefi-recovery/fu-uefi-recovery-plugin.h b/plugins/uefi-recovery/fu-uefi-recovery-plugin.h new file mode 100644 index 000000000..dcd339f9e --- /dev/null +++ b/plugins/uefi-recovery/fu-uefi-recovery-plugin.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUefiRecoveryPlugin, + fu_uefi_recovery_plugin, + FU, + UEFI_RECOVERY_PLUGIN, + FuPlugin) diff --git a/plugins/uefi-recovery/meson.build b/plugins/uefi-recovery/meson.build index 6280829dc..c1800b9d8 100644 --- a/plugins/uefi-recovery/meson.build +++ b/plugins/uefi-recovery/meson.build @@ -2,28 +2,15 @@ if get_option('plugin_uefi_capsule').disable_auto_if(host_machine.system() != 'l cargs = ['-DG_LOG_DOMAIN="FuPluginUefiRecovery"'] plugin_quirks += files('uefi-recovery.quirk') - -shared_module('fu_plugin_uefi_recovery', - fu_hash, +plugin_builtins += static_library('fu_plugin_uefi_recovery', sources: [ - 'fu-plugin-uefi-recovery.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-uefi-recovery-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: [ cargs, ], - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/uf2/fu-plugin-uf2.c b/plugins/uf2/fu-plugin-uf2.c deleted file mode 100644 index d0d7d2a83..000000000 --- a/plugins/uf2/fu-plugin-uf2.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2021 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-uf2-device.h" -#include "fu-uf2-firmware.h" - -static void -fu_plugin_uf2_init(FuPlugin *plugin) -{ - fu_plugin_add_device_gtype(plugin, FU_TYPE_UF2_DEVICE); - fu_plugin_add_firmware_gtype(plugin, "uf2", FU_TYPE_UF2_FIRMWARE); - fu_plugin_add_udev_subsystem(plugin, "block"); -} - -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_uf2_init; -} diff --git a/plugins/uf2/fu-uf2-plugin.c b/plugins/uf2/fu-uf2-plugin.c new file mode 100644 index 000000000..ebc10a153 --- /dev/null +++ b/plugins/uf2/fu-uf2-plugin.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-uf2-device.h" +#include "fu-uf2-firmware.h" +#include "fu-uf2-plugin.h" + +struct _FuUf2Plugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuUf2Plugin, fu_uf2_plugin, FU_TYPE_PLUGIN) + +static void +fu_uf2_plugin_init(FuUf2Plugin *self) +{ +} + +static void +fu_uf2_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_add_device_gtype(plugin, FU_TYPE_UF2_DEVICE); + fu_plugin_add_firmware_gtype(plugin, "uf2", FU_TYPE_UF2_FIRMWARE); + fu_plugin_add_udev_subsystem(plugin, "block"); +} + +static void +fu_uf2_plugin_class_init(FuUf2PluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_uf2_plugin_constructed; +} diff --git a/plugins/uf2/fu-uf2-plugin.h b/plugins/uf2/fu-uf2-plugin.h new file mode 100644 index 000000000..b5ba6fd6e --- /dev/null +++ b/plugins/uf2/fu-uf2-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUf2Plugin, fu_uf2_plugin, FU, UF2_PLUGIN, FuPlugin) diff --git a/plugins/uf2/meson.build b/plugins/uf2/meson.build index 73ec68f1e..a50c4c356 100644 --- a/plugins/uf2/meson.build +++ b/plugins/uf2/meson.build @@ -4,30 +4,18 @@ if get_option('plugin_uf2').require(gudev.found(), cargs = ['-DG_LOG_DOMAIN="FuPluginUf2"'] plugin_quirks += files('uf2.quirk') - -shared_module('fu_plugin_uf2', - fu_hash, +plugin_builtin_uf2 = static_library('fu_plugin_uf2', sources: [ - 'fu-plugin-uf2.c', + 'fu-uf2-plugin.c', 'fu-uf2-device.c', 'fu-uf2-firmware.c', # fuzzing ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + dependencies: plugin_deps, + link_with: plugin_libs, ) +plugin_builtins += plugin_builtin_uf2 if get_option('tests') install_data(['tests/uf2.builder.xml'], @@ -37,22 +25,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'uf2-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-uf2-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_uf2, ], install: true, install_rpath: plugin_dir, diff --git a/plugins/upower/fu-plugin-upower.c b/plugins/upower/fu-upower-plugin.c similarity index 65% rename from plugins/upower/fu-plugin-upower.c rename to plugins/upower/fu-upower-plugin.c index 6a57d8d14..8eb4c107f 100644 --- a/plugins/upower/fu-plugin-upower.c +++ b/plugins/upower/fu-upower-plugin.c @@ -6,9 +6,10 @@ #include "config.h" -#include +#include "fu-upower-plugin.h" -struct FuPluginData { +struct _FuUpowerPlugin { + FuPlugin parent_instance; GDBusProxy *proxy; /* nullable */ GDBusProxy *proxy_manager; /* nullable */ }; @@ -24,39 +25,25 @@ typedef enum { UP_DEVICE_STATE_LAST } UpDeviceState; -static void -fu_plugin_upower_init(FuPlugin *plugin) -{ - fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); -} +G_DEFINE_TYPE(FuUpowerPlugin, fu_upower_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_upower_destroy(FuPlugin *plugin) -{ - FuPluginData *priv = fu_plugin_get_data(plugin); - if (priv->proxy != NULL) - g_object_unref(priv->proxy); - if (priv->proxy_manager != NULL) - g_object_unref(priv->proxy_manager); -} - -static void -fu_plugin_upower_rescan_devices(FuPlugin *plugin) +fu_upower_plugin_rescan_devices(FuPlugin *plugin) { + FuUpowerPlugin *self = FU_UPOWER_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); g_autoptr(GVariant) percentage_val = NULL; g_autoptr(GVariant) type_val = NULL; g_autoptr(GVariant) state_val = NULL; /* check that we "have" a battery */ - type_val = g_dbus_proxy_get_cached_property(priv->proxy, "Type"); + type_val = g_dbus_proxy_get_cached_property(self->proxy, "Type"); if (type_val == NULL || g_variant_get_uint32(type_val) == 0) { fu_context_set_battery_state(ctx, FU_BATTERY_STATE_UNKNOWN); fu_context_set_battery_level(ctx, FWUPD_BATTERY_LEVEL_INVALID); return; } - state_val = g_dbus_proxy_get_cached_property(priv->proxy, "State"); + state_val = g_dbus_proxy_get_cached_property(self->proxy, "State"); if (state_val == NULL || g_variant_get_uint32(state_val) == 0) { g_warning("failed to query power state"); fu_context_set_battery_state(ctx, FU_BATTERY_STATE_UNKNOWN); @@ -86,7 +73,7 @@ fu_plugin_upower_rescan_devices(FuPlugin *plugin) } /* get percentage */ - percentage_val = g_dbus_proxy_get_cached_property(priv->proxy, "Percentage"); + percentage_val = g_dbus_proxy_get_cached_property(self->proxy, "Percentage"); if (percentage_val == NULL) { g_warning("failed to query power percentage level"); fu_context_set_battery_level(ctx, FWUPD_BATTERY_LEVEL_INVALID); @@ -96,16 +83,16 @@ fu_plugin_upower_rescan_devices(FuPlugin *plugin) } static void -fu_plugin_upower_rescan_manager(FuPlugin *plugin) +fu_upower_plugin_rescan_manager(FuPlugin *plugin) { + FuUpowerPlugin *self = FU_UPOWER_PLUGIN(plugin); FuContext *ctx = fu_plugin_get_context(plugin); - FuPluginData *priv = fu_plugin_get_data(plugin); g_autoptr(GVariant) lid_is_closed = NULL; g_autoptr(GVariant) lid_is_present = NULL; /* check that we "have" a lid */ - lid_is_present = g_dbus_proxy_get_cached_property(priv->proxy_manager, "LidIsPresent"); - lid_is_closed = g_dbus_proxy_get_cached_property(priv->proxy_manager, "LidIsClosed"); + lid_is_present = g_dbus_proxy_get_cached_property(self->proxy_manager, "LidIsPresent"); + lid_is_closed = g_dbus_proxy_get_cached_property(self->proxy_manager, "LidIsClosed"); if (lid_is_present == NULL || lid_is_closed == NULL) { g_warning("failed to query lid state"); fu_context_set_lid_state(ctx, FU_LID_STATE_UNKNOWN); @@ -123,22 +110,22 @@ fu_plugin_upower_rescan_manager(FuPlugin *plugin) } static void -fu_plugin_upower_proxy_changed_cb(GDBusProxy *proxy, +fu_upower_plugin_proxy_changed_cb(GDBusProxy *proxy, GVariant *changed_properties, const GStrv invalidated_properties, FuPlugin *plugin) { - fu_plugin_upower_rescan_manager(plugin); - fu_plugin_upower_rescan_devices(plugin); + fu_upower_plugin_rescan_manager(plugin); + fu_upower_plugin_rescan_devices(plugin); } static gboolean -fu_plugin_upower_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_upower_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuUpowerPlugin *self = FU_UPOWER_PLUGIN(plugin); g_autofree gchar *name_owner = NULL; - priv->proxy_manager = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, + self->proxy_manager = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.UPower", @@ -146,11 +133,11 @@ fu_plugin_upower_startup(FuPlugin *plugin, FuProgress *progress, GError **error) "org.freedesktop.UPower", NULL, error); - if (priv->proxy_manager == NULL) { + if (self->proxy_manager == NULL) { g_prefix_error(error, "failed to connect to upower: "); return FALSE; } - priv->proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, + self->proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.UPower", @@ -158,40 +145,57 @@ fu_plugin_upower_startup(FuPlugin *plugin, FuProgress *progress, GError **error) "org.freedesktop.UPower.Device", NULL, error); - if (priv->proxy == NULL) { + if (self->proxy == NULL) { g_prefix_error(error, "failed to connect to upower: "); return FALSE; } - name_owner = g_dbus_proxy_get_name_owner(priv->proxy); + name_owner = g_dbus_proxy_get_name_owner(self->proxy); if (name_owner == NULL) { g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED, "no owner for %s", - g_dbus_proxy_get_name(priv->proxy)); + g_dbus_proxy_get_name(self->proxy)); return FALSE; } - g_signal_connect(G_DBUS_PROXY(priv->proxy), + g_signal_connect(G_DBUS_PROXY(self->proxy), "g-properties-changed", - G_CALLBACK(fu_plugin_upower_proxy_changed_cb), + G_CALLBACK(fu_upower_plugin_proxy_changed_cb), plugin); - g_signal_connect(G_DBUS_PROXY(priv->proxy_manager), + g_signal_connect(G_DBUS_PROXY(self->proxy_manager), "g-properties-changed", - G_CALLBACK(fu_plugin_upower_proxy_changed_cb), + G_CALLBACK(fu_upower_plugin_proxy_changed_cb), plugin); - fu_plugin_upower_rescan_devices(plugin); - fu_plugin_upower_rescan_manager(plugin); + fu_upower_plugin_rescan_devices(plugin); + fu_upower_plugin_rescan_manager(plugin); /* success */ return TRUE; } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_upower_plugin_init(FuUpowerPlugin *self) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_upower_init; - vfuncs->startup = fu_plugin_upower_startup; - vfuncs->destroy = fu_plugin_upower_destroy; +} + +static void +fu_upower_finalize(GObject *obj) +{ + FuUpowerPlugin *self = FU_UPOWER_PLUGIN(obj); + if (self->proxy != NULL) + g_object_unref(self->proxy); + if (self->proxy_manager != NULL) + g_object_unref(self->proxy_manager); + G_OBJECT_CLASS(fu_upower_plugin_parent_class)->finalize(obj); +} + +static void +fu_upower_plugin_class_init(FuUpowerPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = fu_upower_finalize; + plugin_class->startup = fu_upower_plugin_startup; } diff --git a/plugins/upower/fu-upower-plugin.h b/plugins/upower/fu-upower-plugin.h new file mode 100644 index 000000000..e52601abe --- /dev/null +++ b/plugins/upower/fu-upower-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUpowerPlugin, fu_upower_plugin, FU, UPOWER_PLUGIN, FuPlugin) diff --git a/plugins/upower/meson.build b/plugins/upower/meson.build index e916e7434..fb1a1ae7c 100644 --- a/plugins/upower/meson.build +++ b/plugins/upower/meson.build @@ -1,26 +1,14 @@ if get_option('plugin_upower').disable_auto_if(host_machine.system() != 'linux').allowed() cargs = ['-DG_LOG_DOMAIN="FuPluginUpower"'] -shared_module('fu_plugin_upower', - fu_hash, +plugin_builtins += static_library('fu_plugin_upower', sources: [ - 'fu-plugin-upower.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-upower-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/usi-dock/fu-plugin-usi-dock.c b/plugins/usi-dock/fu-usi-dock-plugin.c similarity index 56% rename from plugins/usi-dock/fu-plugin-usi-dock.c rename to plugins/usi-dock/fu-usi-dock-plugin.c index eb7ea59ab..1ad046d37 100644 --- a/plugins/usi-dock/fu-plugin-usi-dock.c +++ b/plugins/usi-dock/fu-usi-dock-plugin.c @@ -7,15 +7,20 @@ #include "config.h" -#include - #include "fu-usi-dock-dmc-device.h" #include "fu-usi-dock-mcu-device.h" +#include "fu-usi-dock-plugin.h" #define USI_DOCK_TBT_INSTANCE_ID "THUNDERBOLT\\VEN_0108&DEV_2031" +struct _FuUsiDockPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuUsiDockPlugin, fu_usi_dock_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_usi_dock_dmc_registered(FuPlugin *plugin, FuDevice *device) +fu_usi_dock_plugin_dmc_registered(FuPlugin *plugin, FuDevice *device) { /* usb device from thunderbolt plugin */ if (g_strcmp0(fu_device_get_plugin(device), "thunderbolt") == 0 && @@ -28,16 +33,23 @@ fu_plugin_usi_dock_dmc_registered(FuPlugin *plugin, FuDevice *device) } static void -fu_usi_dock_init(FuPlugin *plugin) +fu_usi_dock_plugin_init(FuUsiDockPlugin *self) { +} + +static void +fu_usi_dock_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); fu_plugin_add_device_gtype(plugin, FU_TYPE_USI_DOCK_MCU_DEVICE); fu_plugin_add_device_gtype(plugin, FU_TYPE_USI_DOCK_DMC_DEVICE); } -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) +static void +fu_usi_dock_plugin_class_init(FuUsiDockPluginClass *klass) { - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_usi_dock_init; - vfuncs->device_registered = fu_plugin_usi_dock_dmc_registered; + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_usi_dock_plugin_constructed; + plugin_class->device_registered = fu_usi_dock_plugin_dmc_registered; } diff --git a/plugins/usi-dock/fu-usi-dock-plugin.h b/plugins/usi-dock/fu-usi-dock-plugin.h new file mode 100644 index 000000000..f539eeec3 --- /dev/null +++ b/plugins/usi-dock/fu-usi-dock-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuUsiDockPlugin, fu_usi_dock_plugin, FU, USI_DOCK_PLUGIN, FuPlugin) diff --git a/plugins/usi-dock/meson.build b/plugins/usi-dock/meson.build index f7b87cde1..eb9765f15 100644 --- a/plugins/usi-dock/meson.build +++ b/plugins/usi-dock/meson.build @@ -2,30 +2,17 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginUsiDock"'] plugin_quirks += files('usi-dock.quirk') - -shared_module('fu_plugin_usi_dock', - fu_hash, +plugin_builtins += static_library('fu_plugin_usi_dock', sources: [ 'fu-usi-dock-common.c', 'fu-usi-dock-child-device.c', 'fu-usi-dock-dmc-device.c', 'fu-usi-dock-mcu-device.c', - 'fu-plugin-usi-dock.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, + 'fu-usi-dock-plugin.c', ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) endif diff --git a/plugins/vbe/fu-plugin-vbe.c b/plugins/vbe/fu-vbe-plugin.c similarity index 68% rename from plugins/vbe/fu-plugin-vbe.c rename to plugins/vbe/fu-vbe-plugin.c index ffe796e4b..aba93bd27 100644 --- a/plugins/vbe/fu-plugin-vbe.c +++ b/plugins/vbe/fu-vbe-plugin.c @@ -8,20 +8,24 @@ #include "config.h" +#include "fu-vbe-plugin.h" #include "fu-vbe-simple-device.h" -struct FuPluginData { +struct _FuVbePlugin { + FuPlugin parent_instance; FuFirmware *fdt; gchar *vbe_dir; }; +G_DEFINE_TYPE(FuVbePlugin, fu_vbe_plugin, FU_TYPE_PLUGIN) + static gboolean -fu_plugin_vbe_coldplug_img(FuPlugin *plugin, +fu_vbe_plugin_coldplug_img(FuPlugin *plugin, FuFdtImage *fdt_root, FuFdtImage *fdt_node, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuVbePlugin *self = FU_VBE_PLUGIN(plugin); GType device_gtype = G_TYPE_INVALID; g_autofree gchar *compatible = NULL; g_auto(GStrv) split = NULL; @@ -82,29 +86,29 @@ fu_plugin_vbe_coldplug_img(FuPlugin *plugin, "fdt-node", fdt_node, "vbe-dir", - priv->vbe_dir, + self->vbe_dir, NULL); fu_plugin_device_add(plugin, dev); return TRUE; } static gboolean -fu_plugin_vbe_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_vbe_plugin_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuVbePlugin *self = FU_VBE_PLUGIN(plugin); g_autoptr(FuFdtImage) fdt_root = NULL; g_autoptr(GPtrArray) fdt_imgs = NULL; /* get compatible from root node */ fdt_root = - fu_fdt_firmware_get_image_by_path(FU_FDT_FIRMWARE(priv->fdt), "/chosen/fwupd", error); + fu_fdt_firmware_get_image_by_path(FU_FDT_FIRMWARE(self->fdt), "/chosen/fwupd", error); if (fdt_root == NULL) return FALSE; fdt_imgs = fu_firmware_get_images(FU_FIRMWARE(fdt_root)); for (guint i = 0; i < fdt_imgs->len; i++) { FuFdtImage *fdt_node = g_ptr_array_index(fdt_imgs, i); g_autoptr(GError) error_local = NULL; - if (!fu_plugin_vbe_coldplug_img(plugin, fdt_root, fdt_node, &error_local)) { + if (!fu_vbe_plugin_coldplug_img(plugin, fdt_root, fdt_node, &error_local)) { g_warning("%s", error_local->message); continue; } @@ -124,15 +128,15 @@ fu_plugin_vbe_coldplug(FuPlugin *plugin, FuProgress *progress, GError **error) } static GFile * -fu_plugin_vbe_get_bfname(FuPlugin *plugin) +fu_vbe_plugin_get_bfname(FuPlugin *plugin) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuVbePlugin *self = FU_VBE_PLUGIN(plugin); g_autofree gchar *bfname_local = NULL; g_autofree gchar *bfname_sys = NULL; g_autofree gchar *sysfsdir = NULL; /* look for override first, fall back to system value */ - bfname_local = g_build_filename(priv->vbe_dir, "system.dtb", NULL); + bfname_local = g_build_filename(self->vbe_dir, "system.dtb", NULL); if (g_file_test(bfname_local, G_FILE_TEST_EXISTS)) return g_file_new_for_path(bfname_local); @@ -143,14 +147,14 @@ fu_plugin_vbe_get_bfname(FuPlugin *plugin) } static gboolean -fu_plugin_vbe_startup(FuPlugin *plugin, FuProgress *progress, GError **error) +fu_vbe_plugin_startup(FuPlugin *plugin, FuProgress *progress, GError **error) { - FuPluginData *priv = fu_plugin_get_data(plugin); + FuVbePlugin *self = FU_VBE_PLUGIN(plugin); g_autoptr(GFile) file = NULL; /* look for override first, fall back to system value */ - file = fu_plugin_vbe_get_bfname(plugin); - if (!fu_firmware_parse_file(priv->fdt, file, FWUPD_INSTALL_FLAG_NO_SEARCH, error)) { + file = fu_vbe_plugin_get_bfname(plugin); + if (!fu_firmware_parse_file(self->fdt, file, FWUPD_INSTALL_FLAG_NO_SEARCH, error)) { g_prefix_error(error, "failed to parse FDT: "); return FALSE; } @@ -160,39 +164,40 @@ fu_plugin_vbe_startup(FuPlugin *plugin, FuProgress *progress, GError **error) } static void -fu_plugin_vbe_init(FuPlugin *plugin) +fu_vbe_plugin_to_string(FuPlugin *plugin, guint idt, GString *str) +{ + FuVbePlugin *self = FU_VBE_PLUGIN(plugin); + fu_string_append(str, idt, "VbeDir", self->vbe_dir); +} + +static void +fu_vbe_plugin_init(FuVbePlugin *self) { - FuPluginData *priv = fu_plugin_alloc_data(plugin, sizeof(FuPluginData)); g_autofree gchar *localstatedir_pkg = NULL; /* where we can store the override and also image state */ localstatedir_pkg = fu_path_from_kind(FU_PATH_KIND_LOCALSTATEDIR_PKG); - priv->vbe_dir = g_build_filename(localstatedir_pkg, "vbe", NULL); - priv->fdt = fu_fdt_firmware_new(); + self->vbe_dir = g_build_filename(localstatedir_pkg, "vbe", NULL); + self->fdt = fu_fdt_firmware_new(); } static void -fu_plugin_vbe_destroy(FuPlugin *plugin) +fu_vbe_finalize(GObject *obj) { - FuPluginData *priv = fu_plugin_get_data(plugin); - g_free(priv->vbe_dir); - g_object_unref(priv->fdt); + FuVbePlugin *self = FU_VBE_PLUGIN(obj); + g_free(self->vbe_dir); + g_object_unref(self->fdt); + G_OBJECT_CLASS(fu_vbe_plugin_parent_class)->finalize(obj); } static void -fu_plugin_vbe_to_string(FuPlugin *plugin, guint idt, GString *str) +fu_vbe_plugin_class_init(FuVbePluginClass *klass) { - FuPluginData *priv = fu_plugin_get_data(plugin); - fu_string_append(str, idt, "VbeDir", priv->vbe_dir); -} + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); -void -fu_plugin_init_vfuncs(FuPluginVfuncs *vfuncs) -{ - vfuncs->build_hash = FU_BUILD_HASH; - vfuncs->init = fu_plugin_vbe_init; - vfuncs->destroy = fu_plugin_vbe_destroy; - vfuncs->to_string = fu_plugin_vbe_to_string; - vfuncs->startup = fu_plugin_vbe_startup; - vfuncs->coldplug = fu_plugin_vbe_coldplug; + object_class->finalize = fu_vbe_finalize; + plugin_class->to_string = fu_vbe_plugin_to_string; + plugin_class->startup = fu_vbe_plugin_startup; + plugin_class->coldplug = fu_vbe_plugin_coldplug; } diff --git a/plugins/vbe/fu-vbe-plugin.h b/plugins/vbe/fu-vbe-plugin.h new file mode 100644 index 000000000..96438ad0f --- /dev/null +++ b/plugins/vbe/fu-vbe-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuVbePlugin, fu_vbe_plugin, FU, VBE_PLUGIN, FuPlugin) diff --git a/plugins/vbe/meson.build b/plugins/vbe/meson.build index d8e3acf0a..f6e860799 100644 --- a/plugins/vbe/meson.build +++ b/plugins/vbe/meson.build @@ -1,9 +1,8 @@ cargs = ['-DG_LOG_DOMAIN="FuPluginVbe"'] -shared_module('fu_plugin_vbe', - fu_hash, +plugin_builtins += static_library('fu_plugin_vbe', sources : [ - 'fu-plugin-vbe.c', + 'fu-vbe-plugin.c', 'fu-vbe-device.c', 'fu-vbe-simple-device.c', ], @@ -12,8 +11,6 @@ shared_module('fu_plugin_vbe', fwupd_incdir, fwupdplugin_incdir, ], - install : true, - install_dir: plugin_dir, link_with : [ fwupd, fwupdplugin, diff --git a/plugins/vli/fu-plugin-vli.c b/plugins/vli/fu-vli-plugin.c similarity index 58% rename from plugins/vli/fu-plugin-vli.c rename to plugins/vli/fu-vli-plugin.c index 06573e6b6..b816a041c 100644 --- a/plugins/vli/fu-plugin-vli.c +++ b/plugins/vli/fu-vli-plugin.c @@ -6,16 +6,30 @@ #include "config.h" -#include - #include "fu-vli-pd-device.h" #include "fu-vli-pd-firmware.h" +#include "fu-vli-plugin.h" #include "fu-vli-usbhub-device.h" #include "fu-vli-usbhub-firmware.h" +struct _FuVliPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuVliPlugin, fu_vli_plugin, FU_TYPE_PLUGIN) + static void -fu_plugin_vli_init(FuPlugin *plugin) +fu_vli_plugin_init(FuVliPlugin *self) { +} + +static void +fu_vli_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "VliDeviceKind"); + fu_context_add_quirk_key(ctx, "VliSpiAutoDetect"); 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); @@ -23,16 +37,8 @@ fu_plugin_vli_init(FuPlugin *plugin) } static void -fu_plugin_vli_load(FuContext *ctx) +fu_vli_plugin_class_init(FuVliPluginClass *klass) { - 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->load = fu_plugin_vli_load; - vfuncs->init = fu_plugin_vli_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_vli_plugin_constructed; } diff --git a/plugins/vli/fu-vli-plugin.h b/plugins/vli/fu-vli-plugin.h new file mode 100644 index 000000000..a5d842569 --- /dev/null +++ b/plugins/vli/fu-vli-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuVliPlugin, fu_vli_plugin, FU, VLI_PLUGIN, FuPlugin) diff --git a/plugins/vli/meson.build b/plugins/vli/meson.build index 5ff283070..a212935ae 100644 --- a/plugins/vli/meson.build +++ b/plugins/vli/meson.build @@ -9,11 +9,9 @@ plugin_quirks += files([ 'vli-lenovo.quirk', 'vli-samsung.quirk', ]) - -shared_module('fu_plugin_vli', - fu_hash, +plugin_builtin_vli = static_library('fu_plugin_vli', sources: [ - 'fu-plugin-vli.c', + 'fu-vli-plugin.c', 'fu-vli-common.c', 'fu-vli-device.c', 'fu-vli-pd-common.c', @@ -28,42 +26,24 @@ shared_module('fu_plugin_vli', 'fu-vli-usbhub-pd-device.c', 'fu-vli-usbhub-rtd21xx-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, - link_with: [ - fwupd, - fwupdplugin, - ], + include_directories: plugin_incdirs, + link_with: plugin_libs, c_args: cargs, - dependencies: [ - plugin_deps, - ], + dependencies: plugin_deps, ) +plugin_builtins += plugin_builtin_vli if get_option('tests') e = executable( 'vli-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-vli-common.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_vli, ], c_args: cargs, install: true, diff --git a/plugins/wacom-raw/fu-plugin-wacom-raw.c b/plugins/wacom-raw/fu-wacom-raw-plugin.c similarity index 53% rename from plugins/wacom-raw/fu-plugin-wacom-raw.c rename to plugins/wacom-raw/fu-wacom-raw-plugin.c index 60445dffc..d0fc8695a 100644 --- a/plugins/wacom-raw/fu-plugin-wacom-raw.c +++ b/plugins/wacom-raw/fu-wacom-raw-plugin.c @@ -6,32 +6,38 @@ #include "config.h" -#include - #include "fu-wacom-aes-device.h" #include "fu-wacom-common.h" #include "fu-wacom-emr-device.h" +#include "fu-wacom-raw-plugin.h" + +struct _FuWacomRawPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuWacomRawPlugin, fu_wacom_raw_plugin, FU_TYPE_PLUGIN) static void -fu_plugin_wacom_raw_init(FuPlugin *plugin) +fu_wacom_raw_plugin_init(FuWacomRawPlugin *self) { +} + +static void +fu_wacom_raw_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + FuContext *ctx = fu_plugin_get_context(plugin); + fu_context_add_quirk_key(ctx, "WacomI2cFlashBlockSize"); + fu_context_add_quirk_key(ctx, "WacomI2cFlashBaseAddr"); + fu_context_add_quirk_key(ctx, "WacomI2cFlashSize"); 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"); } static void -fu_plugin_wacom_raw_load(FuContext *ctx) +fu_wacom_raw_plugin_class_init(FuWacomRawPluginClass *klass) { - fu_context_add_quirk_key(ctx, "WacomI2cFlashBlockSize"); - 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->load = fu_plugin_wacom_raw_load; - vfuncs->init = fu_plugin_wacom_raw_init; + GObjectClass *object_class = G_OBJECT_CLASS(klass); + object_class->constructed = fu_wacom_raw_plugin_constructed; } diff --git a/plugins/wacom-raw/fu-wacom-raw-plugin.h b/plugins/wacom-raw/fu-wacom-raw-plugin.h new file mode 100644 index 000000000..08afda9cf --- /dev/null +++ b/plugins/wacom-raw/fu-wacom-raw-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuWacomRawPlugin, fu_wacom_raw_plugin, FU, WACOM_RAW_PLUGIN, FuPlugin) diff --git a/plugins/wacom-raw/meson.build b/plugins/wacom-raw/meson.build index 199714940..727e0481c 100644 --- a/plugins/wacom-raw/meson.build +++ b/plugins/wacom-raw/meson.build @@ -2,30 +2,17 @@ if gudev.found() cargs = ['-DG_LOG_DOMAIN="FuPluginWacomRaw"'] plugin_quirks += files('wacom-raw.quirk') - -shared_module('fu_plugin_wacom_raw', - fu_hash, +plugin_builtins += static_library('fu_plugin_wacom_raw', sources: [ - 'fu-plugin-wacom-raw.c', + 'fu-wacom-raw-plugin.c', 'fu-wacom-common.c', 'fu-wacom-device.c', 'fu-wacom-aes-device.c', 'fu-wacom-emr-device.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + dependencies: plugin_deps, + link_with: plugin_libs, ) endif diff --git a/plugins/wacom-usb/fu-plugin-wacom-usb.c b/plugins/wacom-usb/fu-plugin-wacom-usb.c deleted file mode 100644 index b10e10772..000000000 --- a/plugins/wacom-usb/fu-plugin-wacom-usb.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2018 Richard Hughes - * - * SPDX-License-Identifier: LGPL-2.1+ - */ - -#include "config.h" - -#include - -#include "fu-wac-android-device.h" -#include "fu-wac-device.h" -#include "fu-wac-firmware.h" - -static void -fu_plugin_wacom_usb_init(FuPlugin *plugin) -{ - 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); -} - -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; - locker = fu_device_locker_new(parent != NULL ? parent : device, error); - if (locker == NULL) - 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/plugins/wacom-usb/fu-wac-plugin.c b/plugins/wacom-usb/fu-wac-plugin.c new file mode 100644 index 000000000..8f1f351d2 --- /dev/null +++ b/plugins/wacom-usb/fu-wac-plugin.c @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2018 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#include "config.h" + +#include "fu-wac-android-device.h" +#include "fu-wac-device.h" +#include "fu-wac-firmware.h" +#include "fu-wac-plugin.h" + +struct _FuWacPlugin { + FuPlugin parent_instance; +}; + +G_DEFINE_TYPE(FuWacPlugin, fu_wac_plugin, FU_TYPE_PLUGIN) + +static gboolean +fu_wac_plugin_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; + locker = fu_device_locker_new(parent != NULL ? parent : device, error); + if (locker == NULL) + return FALSE; + return fu_device_write_firmware(device, blob_fw, progress, flags, error); +} + +static void +fu_wac_plugin_init(FuWacPlugin *self) +{ +} + +static void +fu_wac_plugin_constructed(GObject *obj) +{ + FuPlugin *plugin = FU_PLUGIN(obj); + fu_plugin_set_name(plugin, "wacom_usb"); + 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); +} + +static void +fu_wac_plugin_class_init(FuWacPluginClass *klass) +{ + FuPluginClass *plugin_class = FU_PLUGIN_CLASS(klass); + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->constructed = fu_wac_plugin_constructed; + plugin_class->write_firmware = fu_wac_plugin_write_firmware; +} diff --git a/plugins/wacom-usb/fu-wac-plugin.h b/plugins/wacom-usb/fu-wac-plugin.h new file mode 100644 index 000000000..6c05693d4 --- /dev/null +++ b/plugins/wacom-usb/fu-wac-plugin.h @@ -0,0 +1,11 @@ +/* + * Copyright (C) 2022 Richard Hughes + * + * SPDX-License-Identifier: LGPL-2.1+ + */ + +#pragma once + +#include + +G_DECLARE_FINAL_TYPE(FuWacPlugin, fu_wac_plugin, FU, WAC_PLUGIN, FuPlugin) diff --git a/plugins/wacom-usb/meson.build b/plugins/wacom-usb/meson.build index a58dc4f74..6ef8264eb 100644 --- a/plugins/wacom-usb/meson.build +++ b/plugins/wacom-usb/meson.build @@ -2,9 +2,7 @@ if gusb.found() cargs = ['-DG_LOG_DOMAIN="FuPluginWacomUsb"'] plugin_quirks += files('wacom-usb.quirk') - -shared_module('fu_plugin_wacom_usb', - fu_hash, +plugin_builtin_wac = static_library('fu_plugin_wac', sources: [ 'fu-wac-common.c', 'fu-wac-android-device.c', @@ -14,24 +12,14 @@ shared_module('fu_plugin_wacom_usb', 'fu-wac-module-bluetooth.c', 'fu-wac-module-bluetooth-id6.c', 'fu-wac-module-touch.c', - 'fu-plugin-wacom-usb.c', + 'fu-wac-plugin.c', ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - install: true, - install_dir: plugin_dir, + include_directories: plugin_incdirs, c_args: cargs, - dependencies: [ - plugin_deps, - ], - link_with: [ - fwupd, - fwupdplugin, - ], + dependencies: plugin_deps, + link_with: plugin_libs, ) +plugin_builtins += plugin_builtin_wac if get_option('tests') install_data(['tests/wacom-usb.builder.xml'], @@ -41,23 +29,14 @@ if get_option('tests') env.set('G_TEST_BUILDDIR', meson.current_build_dir()) e = executable( 'wacom-usb-self-test', - fu_hash, sources: [ 'fu-self-test.c', - 'fu-wac-common.c', - 'fu-wac-firmware.c', - ], - include_directories: [ - root_incdir, - fwupd_incdir, - fwupdplugin_incdir, - ], - dependencies: [ - plugin_deps, ], + include_directories: plugin_incdirs, + dependencies: plugin_deps, link_with: [ - fwupd, - fwupdplugin, + plugin_libs, + plugin_builtin_wac, ], c_args: cargs, install: true, diff --git a/po/POTFILES.in b/po/POTFILES.in index b371c7d01..fb1a1d115 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -5,7 +5,7 @@ libfwupdplugin/tests/bios-attrs/dell-xps13-9310/strings.txt policy/org.freedesktop.fwupd.policy.in plugins/dfu/fu-dfu-tool.c plugins/tpm/fu-tpm-eventlog.c -plugins/uefi-capsule/fu-plugin-uefi-capsule.c +plugins/uefi-capsule/fu-uefi-capsule-plugin.c plugins/uefi-capsule/fu-uefi-tool.c plugins/uefi-dbx/fu-dbxtool.c src/fu-debug.c diff --git a/src/fu-self-test.c b/src/fu-self-test.c index 873419cfa..e0aa9a915 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -16,6 +16,7 @@ #include "fwupd-bios-setting-private.h" #include "fwupd-security-attr-private.h" +#include "../plugins/test/fu-test-plugin.h" #include "fu-backend-private.h" #include "fu-bios-settings-private.h" #include "fu-cabinet-common.h" @@ -4795,7 +4796,6 @@ int main(int argc, char **argv) { gboolean ret; - g_autofree gchar *pluginfn = NULL; g_autofree gchar *testdatadir = NULL; g_autoptr(GError) error = NULL; g_autoptr(FuTest) self = g_new0(FuTest, 1); @@ -4826,16 +4826,7 @@ main(int argc, char **argv) g_assert_true(ret); /* load the test plugin */ - self->plugin = fu_plugin_new(self->ctx); - pluginfn = g_test_build_filename(G_TEST_BUILT, - "..", - "plugins", - "test", - "libfu_plugin_test." G_MODULE_SUFFIX, - NULL); - ret = fu_plugin_open(self->plugin, pluginfn, &error); - g_assert_no_error(error); - g_assert_true(ret); + self->plugin = fu_plugin_new_from_gtype(fu_test_plugin_get_type(), self->ctx); /* tests go here */ if (g_test_slow()) {