summaryrefslogtreecommitdiff
path: root/legacy/busybox/0007-fbsplash-support-console-switching.patch
diff options
context:
space:
mode:
Diffstat (limited to 'legacy/busybox/0007-fbsplash-support-console-switching.patch')
-rw-r--r--legacy/busybox/0007-fbsplash-support-console-switching.patch182
1 files changed, 0 insertions, 182 deletions
diff --git a/legacy/busybox/0007-fbsplash-support-console-switching.patch b/legacy/busybox/0007-fbsplash-support-console-switching.patch
deleted file mode 100644
index ef226d009..000000000
--- a/legacy/busybox/0007-fbsplash-support-console-switching.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 377e2f20c1034de1195fd900fc637821952cfa49 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
-Date: Mon, 24 Sep 2012 07:58:29 +0300
-Subject: [PATCH 07/16] fbsplash: support console switching
-
----
- miscutils/fbsplash.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++-----
- 1 file changed, 75 insertions(+), 7 deletions(-)
-
-diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
-index 5b2e5ac56..bc80f728c 100644
---- a/miscutils/fbsplash.c
-+++ b/miscutils/fbsplash.c
-@@ -47,7 +47,7 @@
- //kbuild:lib-$(CONFIG_FBSPLASH) += fbsplash.o
-
- //usage:#define fbsplash_trivial_usage
--//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
-+//usage: "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD] [-T tty]"
- //usage:#define fbsplash_full_usage "\n\n"
- //usage: " -s Image"
- //usage: "\n -c Hide cursor"
-@@ -57,11 +57,17 @@
- //usage: "\n BAR_R,BAR_G,BAR_B"
- //usage: "\n -f Control pipe (else exit after drawing image)"
- //usage: "\n commands: 'NN' (% for progress bar) or 'exit'"
-+//usage: "\n -T Switch to TTY to hide all console messages"
-
- #include "libbb.h"
- #include "common_bufsiz.h"
- #include <linux/fb.h>
-
-+#include <sys/vt.h>
-+#include <sys/ioctl.h>
-+#include <linux/tiocl.h>
-+#include <linux/kd.h>
-+
- /* If you want logging messages on /tmp/fbsplash.log... */
- #define DEBUG 0
-
-@@ -75,6 +81,8 @@ struct globals {
- unsigned char *addr; // pointer to framebuffer memory
- unsigned ns[7]; // n-parameters
- const char *image_filename;
-+ int silent_tty, fd_tty_s;
-+ bool do_not_draw;
- struct fb_var_screeninfo scr_var;
- struct fb_fix_screeninfo scr_fix;
- unsigned bytes_per_pixel;
-@@ -485,6 +493,11 @@ static void init(const char *cfg_filename)
- config_close(parser);
- }
-
-+static void sighandler(int sig)
-+{
-+ ioctl(G.fd_tty_s, VT_RELDISP, sig == SIGUSR1 ? 1 : 2);
-+ G.do_not_draw = (sig != SIGUSR2);
-+}
-
- int fbsplash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int fbsplash_main(int argc UNUSED_PARAM, char **argv)
-@@ -494,6 +507,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- char *num_buf;
- unsigned num;
- bool bCursorOff;
-+ int fd_tty0, active_vt;
-+ struct vt_stat vtstat;
-+ struct vt_mode vt;
-
- INIT_G();
-
-@@ -501,8 +517,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- fb_device = "/dev/fb0";
- cfg_filename = NULL;
- fifo_filename = NULL;
-- bCursorOff = 1 & getopt32(argv, "cs:d:i:f:",
-- &G.image_filename, &fb_device, &cfg_filename, &fifo_filename);
-+ bCursorOff = 1 & getopt32(argv, "cs:d:i:f:T:",
-+ &G.image_filename, &fb_device, &cfg_filename, &fifo_filename,
-+ &G.silent_tty);
-
- // parse configuration file
- if (cfg_filename)
-@@ -512,11 +529,43 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- if (!G.image_filename)
- bb_show_usage();
-
-+ fd_tty0 = get_console_fd_or_die();
-+ if (G.silent_tty) {
-+ char buf[16];
-+
-+ /* Initialize TTY */
-+ bb_signals((1LL << SIGUSR1) | (1LL << SIGUSR2), sighandler);
-+ snprintf(buf, sizeof(buf), "/dev/tty%d", G.silent_tty);
-+ G.fd_tty_s = xopen(buf, O_RDWR | O_NOCTTY);
-+
-+ /* Activate TTY */
-+ xioctl(fd_tty0, VT_GETSTATE, &vtstat);
-+ active_vt = vtstat.v_active;
-+ console_make_active(fd_tty0, G.silent_tty);
-+
-+ /* Get notifications on console changes */
-+ vt.mode = VT_PROCESS;
-+ vt.waitv = 0;
-+ vt.relsig = SIGUSR1;
-+ vt.acqsig = SIGUSR2;
-+ ioctl(G.fd_tty_s, VT_SETMODE, &vt);
-+
-+ /* Redirect all kernel messages to tty1 so that they don't get
-+ * printed over our silent splash image. And clear it. */
-+ buf[0] = TIOCL_SETKMSGREDIRECT;
-+ buf[1] = 1;
-+ ioctl(G.fd_tty_s, TIOCLINUX, buf);
-+ full_write(G.fd_tty_s, "\e[H\e[2J" "\e[?17;0c", 7+8);
-+ ioctl(G.fd_tty_s, KDSETMODE, KD_GRAPHICS);
-+ } else {
-+ G.fd_tty_s = STDOUT_FILENO;
-+ }
-+
- fb_open(fb_device);
-
- if (fifo_filename && bCursorOff) {
- // hide cursor (BEFORE any fb ops)
-- full_write(STDOUT_FILENO, ESC"[?25l", 6);
-+ full_write(G.fd_tty_s, ESC"[?25l", 6);
- }
-
- fb_drawimage();
-@@ -524,6 +573,7 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- if (!fifo_filename)
- return EXIT_SUCCESS;
-
-+ sig_block(SIGUSR1);
- fp = xfopen_stdin(fifo_filename);
- if (fp != stdin) {
- // For named pipes, we want to support this:
-@@ -539,8 +589,9 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- // and become an additional writer :)
- open(fifo_filename, O_WRONLY); // errors are ignored
- }
--
- fb_drawprogressbar(0);
-+ sig_unblock(SIGUSR1);
-+
- // Block on read, waiting for some input.
- // Use of <stdio.h> style I/O allows to correctly
- // handle a case when we have many buffered lines
-@@ -555,12 +606,29 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
- #if DEBUG
- DEBUG_MESSAGE(itoa(num));
- #endif
-- fb_drawprogressbar(num);
-+ sig_block(SIGUSR1);
-+ if (!G.do_not_draw)
-+ fb_drawprogressbar(num);
-+ sig_unblock(SIGUSR1);
- }
- free(num_buf);
- }
-
-- if (bCursorOff) // restore cursor
-+ if (G.silent_tty) {
-+ usleep(100*1000);
-+
-+ ioctl(G.fd_tty_s, VT_RELDISP, 1);
-+ ioctl(G.fd_tty_s, KDSETMODE, KD_TEXT);
-+ vt.mode = VT_AUTO;
-+ vt.waitv = 0;
-+ ioctl(G.fd_tty_s, VT_SETMODE, &vt);
-+ close(G.fd_tty_s);
-+
-+ xioctl(fd_tty0, VT_GETSTATE, &vtstat);
-+ if (vtstat.v_active == G.silent_tty)
-+ console_make_active(fd_tty0, active_vt);
-+ ioctl(fd_tty0, VT_DISALLOCATE, (void *)(ptrdiff_t)G.silent_tty);
-+ } else if (bCursorOff) // restore cursor
- full_write(STDOUT_FILENO, ESC"[?25h", 6);
-
- return EXIT_SUCCESS;
---
-2.16.2
-