[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 3/3 hurd] console-client: Enable switching to gfx console
From: |
Samuel Thibault |
Subject: |
Re: [PATCH v2 3/3 hurd] console-client: Enable switching to gfx console when available |
Date: |
Mon, 28 Oct 2024 22:33:45 +0100 |
Applied, thanks!
Damien Zammit, le lun. 28 oct. 2024 08:09:20 +0000, a ecrit:
> This compiles in and enables the new framebuffer codepath
> in the vga driver, if detected.
>
> ---
> console-client/Makefile | 3 ++-
> console-client/vga.c | 48 +++++++++++++++++++++++++++++++----------
> 2 files changed, 39 insertions(+), 12 deletions(-)
>
> diff --git a/console-client/Makefile b/console-client/Makefile
> index b991cd73..711258c7 100644
> --- a/console-client/Makefile
> +++ b/console-client/Makefile
> @@ -22,7 +22,7 @@ makemode := utilities
>
> targets = console
> CONSOLE_SRCS = console.c timer.c driver.c trans.c
> -VGA_SO_SRCS = bdf.c vga-dynafont.c vga-dynacolor.c vga-support.c vga.c
> +VGA_SO_SRCS = bdf.c vga-dynafont.c vga-dynacolor.c vga-support.c vga.c fb.c
> PC_KBD_SO_SRCS = pc-kbd.c kbd-repeat.c
> PC_MOUSE_SO_SRCS = pc-mouse.c
> GENERIC_SPEAKER_SO_SRCS = generic-speaker.c
> @@ -60,6 +60,7 @@ console: $(CONSOLE_SRCS:.c=.o) \
> modules = vga pc_kbd generic_speaker pc_mouse current_vcs
>
> vga-CPPFLAGS = -DDEFAULT_VGA_FONT_DIR=\"${datadir}/hurd/\"
> +fb-CPPFLAGS = -DDEFAULT_VGA_FONT_DIR=\"${datadir}/hurd/\"
> vga.so.$(hurd-version): $(patsubst %.c,%_pic.o,$(VGA_SO_SRCS))
> pc_kbd.so.$(hurd-version): $(patsubst %.c,%_pic.o,$(PC_KBD_SO_SRCS)) \
> kdioctlServer_pic.o
> diff --git a/console-client/vga.c b/console-client/vga.c
> index e954013d..ec63330c 100644
> --- a/console-client/vga.c
> +++ b/console-client/vga.c
> @@ -37,6 +37,7 @@
> #include "driver.h"
> #include "timer.h"
>
> +#include "fb.h"
> #include "vga-hw.h"
> #include "vga-support.h"
> #include "bdf.h"
> @@ -132,6 +133,8 @@ struct vga_display
> struct refchr refmatrix[VGA_DISP_HEIGHT][VGA_DISP_WIDTH];
> };
>
> +/* Forward declaration */
> +struct driver_ops driver_vga_ops;
>
> static void
> vga_display_invert_border (void)
> @@ -279,9 +282,12 @@ vga_display_init (void **handle, int no_exit, int argc,
> char *argv[],
> int *next)
> {
> error_t err;
> - struct vga_display *disp;
> + struct vga_display *vgadisp;
> + struct fb_display *fbdisp;
> int pos = 1;
>
> + fb_get_multiboot_params();
> +
> /* XXX Assert that we are called only once. */
> pthread_mutex_init (&vga_display_lock, NULL);
> timer_clear (&vga_display_timer);
> @@ -294,18 +300,38 @@ vga_display_init (void **handle, int no_exit, int argc,
> char *argv[],
> if (err && err != EINVAL)
> return err;
>
> - /* Create and initialize the display structure as much as
> - possible. */
> - disp = calloc (1, sizeof *disp);
> - if (!disp)
> - return ENOMEM;
> + if (fb_type == MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT)
> + {
> + /* EGA text mode */
> + vgadisp = calloc (1, sizeof *vgadisp);
> + if (!vgadisp)
> + return ENOMEM;
> +
> + vgadisp->df_size = vga_display_max_glyphs ? 512 : 256;
> + vgadisp->df_width = vga_display_font_width;
> + vgadisp->width = VGA_DISP_WIDTH;
> + vgadisp->height = VGA_DISP_HEIGHT;
> +
> + *handle = vgadisp;
> + }
> + else
> + {
> + /* Linear framebuffer! */
> + fbdisp = calloc (1, sizeof *fbdisp);
> + if (!fbdisp)
> + return ENOMEM;
> +
> + fbdisp->width = fb_width;
> + fbdisp->height = fb_height;
>
> - disp->df_size = vga_display_max_glyphs ? 512 : 256;
> - disp->df_width = vga_display_font_width;
> - disp->width = VGA_DISP_WIDTH;
> - disp->height = VGA_DISP_HEIGHT;
> + /* dynamically switch drivers */
> + driver_vga_ops.start = fb_display_start;
> + driver_vga_ops.fini = fb_display_fini;
> + driver_vga_ops.restore_status = NULL;
> +
> + *handle = fbdisp;
> + }
>
> - *handle = disp;
> return 0;
> }
>
> --
> 2.45.2
>
>
>
--
Samuel
<O> Ça peut être une madeleine à sous munitions (avec des composants,
par exemple)
-+- #runtime -+-