/* * libosinfo: A firmware representation for a (guest) OS * * Copyright (C) 2019-2020 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #include #include #include #include #include /** * SECTION:osinfo_firmware * @short_description: A firmware representation for a (guest) OS * @see_also: #OsinfoOs * * #OsinfoFirmware is an entity representing a firmware used to boot * a (guest) operating system. */ struct _OsinfoFirmwarePrivate { gboolean unused; }; G_DEFINE_TYPE_WITH_PRIVATE(OsinfoFirmware, osinfo_firmware, OSINFO_TYPE_ENTITY); enum { PROP_0, PROP_ARCHITECTURE, PROP_FIRMWARE_TYPE, LAST_PROP }; static GParamSpec *properties[LAST_PROP]; static void osinfo_firmware_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsinfoFirmware *firmware = OSINFO_FIRMWARE(object); switch (property_id) { case PROP_ARCHITECTURE: g_value_set_string(value, osinfo_firmware_get_architecture(firmware)); break; case PROP_FIRMWARE_TYPE: g_value_set_string(value, osinfo_firmware_get_firmware_type(firmware)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void osinfo_firmware_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsinfoFirmware *firmware = OSINFO_FIRMWARE(object); switch (property_id) { case PROP_ARCHITECTURE: osinfo_entity_set_param(OSINFO_ENTITY(firmware), OSINFO_FIRMWARE_PROP_ARCHITECTURE, g_value_get_string(value)); break; case PROP_FIRMWARE_TYPE: osinfo_entity_set_param(OSINFO_ENTITY(firmware), OSINFO_FIRMWARE_PROP_TYPE, g_value_get_string(value)); break; default: /* We don't have any other property... */ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); break; } } static void osinfo_firmware_finalize(GObject *object) { /* Chain up to the parent class */ G_OBJECT_CLASS(osinfo_firmware_parent_class)->finalize(object); } /* Init functions */ static void osinfo_firmware_class_init(OsinfoFirmwareClass *klass) { GObjectClass *g_klass = G_OBJECT_CLASS(klass); g_klass->finalize = osinfo_firmware_finalize; g_klass->get_property = osinfo_firmware_get_property; g_klass->set_property = osinfo_firmware_set_property; /** * OsinfoFirmware:architecture: * * The target hardware architecture of this firmware. */ properties[PROP_ARCHITECTURE] = g_param_spec_string("architecture", "ARCHITECTURE", _("CPU Architecture"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * OsinfoFirmware:firmware-type: * * The firmware type. */ properties[PROP_FIRMWARE_TYPE] = g_param_spec_string("type", "TYPE", _("The firmware type"), NULL /* default value */, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(g_klass, LAST_PROP, properties); } static void osinfo_firmware_init(OsinfoFirmware *firmware) { firmware->priv = osinfo_firmware_get_instance_private(firmware); } OsinfoFirmware *osinfo_firmware_new(const gchar *id, const gchar *architecture, const gchar *type) { OsinfoFirmware *firmware; firmware = g_object_new(OSINFO_TYPE_FIRMWARE, "id", id, OSINFO_FIRMWARE_PROP_ARCHITECTURE, architecture, OSINFO_FIRMWARE_PROP_TYPE, type, NULL); return firmware; } /** * osinfo_firmware_get_architecture: * @firmware: an #OsinfoFirmware instance * * Retrieves the target hardware architecture of the OS @firmware provides. * * Returns: (transfer none): the hardware architecture, or NULL * * Since: 1.7.0 */ const gchar *osinfo_firmware_get_architecture(OsinfoFirmware *firmware) { return osinfo_entity_get_param_value(OSINFO_ENTITY(firmware), OSINFO_FIRMWARE_PROP_ARCHITECTURE); } /** * osinfo_firmware_get_firmware_type: * @firmware: an #OsinfoFirmware instance * * The type of the @firmware * * Returns: (transfer none): the type, or NULL * * Since: 1.7.0 */ const gchar *osinfo_firmware_get_firmware_type(OsinfoFirmware *firmware) { return osinfo_entity_get_param_value(OSINFO_ENTITY(firmware), OSINFO_FIRMWARE_PROP_TYPE); } /** * osinfo_firmware_is_supported: * @firmware: an #OsinfoFirmware instance * * Whether the @firmware is supported or not * * Returns: TRUE if supported, FALSE otherwise. * * Since: 1.8.0 */ gboolean osinfo_firmware_is_supported(OsinfoFirmware *firmware) { return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(firmware), OSINFO_FIRMWARE_PROP_SUPPORTED); }