]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Add a new firmware-upgrade mode for use by fwupd
authorRichard Hughes <richard@hughsie.com>
Mon, 25 Mar 2019 09:39:24 +0000 (09:39 +0000)
committerRay Strode <halfline@gmail.com>
Wed, 29 May 2019 17:52:40 +0000 (17:52 +0000)
This allows us to have accurate localised text, and also to use the vendor BIOS
logo when applying firmware updates.

src/client/plymouth.c
src/libply-splash-core/ply-boot-splash-plugin.h
src/main.c
src/plugins/splash/script/script-lib-plymouth.c
src/plugins/splash/throbgress/plugin.c
src/plugins/splash/two-step/plugin.c
themes/bgrt/bgrt.plymouth.in
themes/spinner/spinner.plymouth.in

index a11753af16139c4bd1c226a811646a63bffd0dea..be74ae7bd43f12715503071ed0f05753bb178168 100644 (file)
@@ -787,6 +787,7 @@ on_change_mode_request (state_t    *state,
         bool reboot = false;
         bool updates = false;
         bool system_upgrade = false;
+        bool firmware_upgrade = false;
         const char *mode = NULL;
 
         ply_command_parser_get_command_options (state->command_parser,
@@ -796,6 +797,7 @@ on_change_mode_request (state_t    *state,
                                                 "reboot", &reboot,
                                                 "updates", &updates,
                                                 "system-upgrade", &system_upgrade,
+                                                "firmware-upgrade", &firmware_upgrade,
                                                 NULL);
 
         if (boot_up)
@@ -808,6 +810,8 @@ on_change_mode_request (state_t    *state,
                 mode = "updates";
         else if (system_upgrade)
                 mode = "system-upgrade";
+        else if (firmware_upgrade)
+                mode = "firmware-upgrade";
 
         if (mode) {
                 ply_boot_client_change_mode (state->client, mode,
@@ -901,6 +905,8 @@ main (int    argc,
                                         PLY_COMMAND_OPTION_TYPE_FLAG,
                                         "system-upgrade", "Upgrading the OS to a new version",
                                         PLY_COMMAND_OPTION_TYPE_FLAG,
+                                        "firmware-upgrade", "Upgrading firmware to a new version",
+                                        PLY_COMMAND_OPTION_TYPE_FLAG,
                                         NULL);
 
         ply_command_parser_add_command (state.command_parser,
index 3fa56cea212aec73b5c0ff1883b60414883e79b2..227147fa91b0b317bb75d3f6417b737f0b5e9ca3 100644 (file)
@@ -41,8 +41,9 @@ typedef enum
         PLY_BOOT_SPLASH_MODE_REBOOT,
         PLY_BOOT_SPLASH_MODE_UPDATES,
         PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE,
+        PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE,
         PLY_BOOT_SPLASH_MODE_INVALID,
-        PLY_BOOT_SPLASH_MODE_COUNT = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE + 1,
+        PLY_BOOT_SPLASH_MODE_COUNT = PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE + 1,
 } ply_boot_splash_mode_t;
 
 typedef struct _ply_boot_splash_plugin ply_boot_splash_plugin_t;
index a6f0b0176e7a7b72be259f88089fe4757062d9e3..2f04e11440cb13504fda4c3e5376242a6a0b7a4d 100644 (file)
@@ -206,6 +206,8 @@ on_change_mode (state_t    *state,
                 state->mode = PLY_BOOT_SPLASH_MODE_UPDATES;
         else if (strcmp (mode, "system-upgrade") == 0)
                 state->mode = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE;
+        else if (strcmp (mode, "firmware-upgrade") == 0)
+                state->mode = PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE;
         else
                 return;
 
@@ -675,6 +677,7 @@ get_cache_file_for_mode (ply_boot_splash_mode_t mode)
                 break;
         case PLY_BOOT_SPLASH_MODE_UPDATES:
         case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE:
+        case PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE:
                 filename = NULL;
                 break;
         case PLY_BOOT_SPLASH_MODE_INVALID:
@@ -704,6 +707,7 @@ get_log_file_for_state (state_t *state)
         case PLY_BOOT_SPLASH_MODE_REBOOT:
         case PLY_BOOT_SPLASH_MODE_UPDATES:
         case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE:
+        case PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE:
                 filename = _PATH_DEVNULL;
                 break;
         case PLY_BOOT_SPLASH_MODE_INVALID:
@@ -730,6 +734,7 @@ get_log_spool_file_for_mode (ply_boot_splash_mode_t mode)
         case PLY_BOOT_SPLASH_MODE_REBOOT:
         case PLY_BOOT_SPLASH_MODE_UPDATES:
         case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE:
+        case PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE:
                 filename = NULL;
                 break;
         case PLY_BOOT_SPLASH_MODE_INVALID:
@@ -2149,6 +2154,8 @@ main (int    argc,
                         state.mode = PLY_BOOT_SPLASH_MODE_UPDATES;
                 else if (strcmp (mode_string, "system-upgrade") == 0)
                         state.mode = PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE;
+                else if (strcmp (mode_string, "firmware-upgrade") == 0)
+                        state.mode = PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE;
                 else
                         state.mode = PLY_BOOT_SPLASH_MODE_BOOT_UP;
 
index ca7ad7780cbe587dc8a528c3a5c77296514c979c..d578223e6f2d412dfd43bf13211f39a909e30506 100644 (file)
@@ -79,6 +79,9 @@ static script_return_t plymouth_get_mode (script_state_t *state,
         case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE:
                 obj = script_obj_new_string ("system-upgrade");
                 break;
+        case PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE:
+                obj = script_obj_new_string ("firmware-upgrade");
+                break;
         case PLY_BOOT_SPLASH_MODE_INVALID:
         default:
                 obj = script_obj_new_string ("unknown");
index 3982821bb92d03d922ffa02feb6009ad0b501387..86be064f11f8c50c7c91d730bc6f06a3c98c4322 100644 (file)
@@ -723,7 +723,8 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
         double total_duration;
 
         if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES ||
-            plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE)
+            plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE ||
+            plugin->mode == PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
                 return;
 
         total_duration = duration / percent_done;
@@ -935,7 +936,8 @@ system_update (ply_boot_splash_plugin_t *plugin,
         ply_list_node_t *node;
 
         if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES &&
-            plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE)
+            plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE &&
+            plugin->mode != PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
                 return;
 
         node = ply_list_get_first_node (plugin->views);
index e8b91ec93da0ba1ab263058479a20d09096acb98..caf03fcc4c3214abc3ce5008e8b5d74d4a767bcc 100644 (file)
@@ -253,6 +253,7 @@ view_load_end_animation (view_t *view)
         case PLY_BOOT_SPLASH_MODE_BOOT_UP:
         case PLY_BOOT_SPLASH_MODE_UPDATES:
         case PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE:
+        case PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE:
                 animation_prefix = "startup-animation-";
                 break;
         case PLY_BOOT_SPLASH_MODE_SHUTDOWN:
@@ -1006,6 +1007,7 @@ create_plugin (ply_key_file_t *key_file)
         load_mode_settings (plugin, key_file, "reboot", PLY_BOOT_SPLASH_MODE_REBOOT);
         load_mode_settings (plugin, key_file, "updates", PLY_BOOT_SPLASH_MODE_UPDATES);
         load_mode_settings (plugin, key_file, "system-upgrade", PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE);
+        load_mode_settings (plugin, key_file, "firmware-upgrade", PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE);
 
         if (plugin->use_firmware_background)
                 plugin->background_bgrt_image = ply_image_new ("/sys/firmware/acpi/bgrt/image");
@@ -1583,7 +1585,8 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
                   double                    percent_done)
 {
         if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES ||
-            plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE)
+            plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE ||
+            plugin->mode == PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
                 return;
 
         if (plugin->state != PLY_BOOT_SPLASH_DISPLAY_NORMAL)
@@ -1791,7 +1794,8 @@ system_update (ply_boot_splash_plugin_t *plugin,
         char buf[64];
 
         if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES &&
-            plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE)
+            plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE &&
+            plugin->mode != PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
                 return;
 
         node = ply_list_get_first_node (plugin->views);
index 39bfdc53e718b59fcb036b5f030e603d1cb38270..ac07bc9f7c8d9fe8f348998c71cddc3a34273de1 100644 (file)
@@ -46,3 +46,11 @@ ProgressBarShowPercentComplete=true
 UseProgressBar=true
 _Title=Upgrading System...
 _SubTitle=Do not turn off your computer
+
+[firmware-upgrade]
+SuppressMessages=true
+ProgressBarShowPercentComplete=true
+UseProgressBar=true
+UseFirmwareBackground=true
+_Title=Upgrading Firmware...
+_SubTitle=Do not turn off your computer
index 5c0b297c4cbe163a4d3c798e9f73f5a649f65ae9..5e5078e8840e93dc55c85bf05f47214583d9f82a 100644 (file)
@@ -36,3 +36,11 @@ ProgressBarShowPercentComplete=true
 UseProgressBar=true
 _Title=Upgrading System...
 _SubTitle=Do not turn off your computer
+
+[firmware-upgrade]
+SuppressMessages=true
+ProgressBarShowPercentComplete=true
+UseProgressBar=true
+UseFirmwareBackground=true
+_Title=Upgrading Firmware...
+_SubTitle=Do not turn off your computer