The efifb driver behaves almost identically to the inteldrm driver for wscons, but did not implement the getchar() accessops, so wsmoused would fail at startup.
Separately, I increased the maximum screen dimensions to 160x50 to allow the 12x24 font to be used on an 1920 monitor, which looks great! Unlike the intel driver, efifb has a static buffer of that size, which is a non-trivial amount of memory. Not setting the backing store to save the memory results in an ultra-slow console until the driver gets fully initialized, because it is doing scrolls by reading from write combined memory instead of the redrawing all the characters. I plan on changing that to a dynamic allocation once I am more comfortable with the reinitialization that goes on when autoconf gets around to the console display device, so feel free to punt on that if you want to wait. Index: efifb.c =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/efifb.c,v retrieving revision 1.27 diff -u -p -r1.27 efifb.c --- efifb.c 24 Jan 2020 05:27:31 -0000 1.27 +++ efifb.c 24 May 2020 23:32:47 -0000 @@ -100,6 +100,7 @@ int efifb_alloc_screen(void *, const st void efifb_free_screen(void *, void *); int efifb_show_screen(void *, void *, int, void (*cb) (void *, int, int), void *); +int efifb_getchar(void *, int, int, struct wsdisplay_charcell *); int efifb_list_font(void *, struct wsdisplay_font *); int efifb_load_font(void *, void *, struct wsdisplay_font *); void efifb_scrollback(void *, void *, int lines); @@ -114,8 +115,9 @@ const struct cfattach efifb_ca = { sizeof(struct efifb_softc), efifb_match, efifb_attach, NULL }; -#define EFIFB_WIDTH 100 -#define EFIFB_HEIGHT 31 +/* support a 12x24 font on a 1920x1200 screen */ +#define EFIFB_WIDTH 160 +#define EFIFB_HEIGHT 50 struct wsscreen_descr efifb_std_descr = { "std" }; @@ -133,6 +135,7 @@ struct wsdisplay_accessops efifb_accesso .alloc_screen = efifb_alloc_screen, .free_screen = efifb_free_screen, .show_screen = efifb_show_screen, + .getchar = efifb_getchar, .load_font = efifb_load_font, .list_font = efifb_list_font, .scrollback = efifb_scrollback, @@ -371,6 +374,15 @@ efifb_show_screen(void *v, void *cookie, struct rasops_info *ri = &sc->sc_fb->rinfo; return rasops_show_screen(ri, cookie, waitok, cb, cb_arg); +} + +int +efifb_getchar(void *v, int row, int col, struct wsdisplay_charcell *cell) +{ + struct efifb_softc *sc = v; + struct rasops_info *ri = &sc->sc_fb->rinfo; + + return rasops_getchar(ri, row, col, cell); } int