summaryrefslogtreecommitdiff
path: root/sys/arch/amd64
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/amd64')
-rw-r--r--sys/arch/amd64/amd64/efifb.c21
-rw-r--r--sys/arch/amd64/amd64/mainbus.c17
-rw-r--r--sys/arch/amd64/include/efifbvar.h3
3 files changed, 37 insertions, 4 deletions
diff --git a/sys/arch/amd64/amd64/efifb.c b/sys/arch/amd64/amd64/efifb.c
index 609de484ae0..5cf95af7e62 100644
--- a/sys/arch/amd64/amd64/efifb.c
+++ b/sys/arch/amd64/amd64/efifb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: efifb.c,v 1.12 2017/10/28 01:48:03 yasuoka Exp $ */
+/* $OpenBSD: efifb.c,v 1.13 2018/04/20 16:06:04 deraadt Exp $ */
/*
* Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -101,6 +101,7 @@ int efifb_show_screen(void *, void *, int, void (*cb) (void *, int, int),
void *);
int efifb_list_font(void *, struct wsdisplay_font *);
int efifb_load_font(void *, void *, struct wsdisplay_font *);
+void efifb_scrollback(void *, void *, int lines);
void efifb_efiinfo_init(struct efifb *);
void efifb_cnattach_common(void);
@@ -133,7 +134,8 @@ struct wsdisplay_accessops efifb_accessops = {
.free_screen = efifb_free_screen,
.show_screen = efifb_show_screen,
.load_font = efifb_load_font,
- .list_font = efifb_list_font
+ .list_font = efifb_list_font,
+ .scrollback = efifb_scrollback,
};
struct cfdriver efifb_cd = {
@@ -399,6 +401,15 @@ efifb_list_font(void *v, struct wsdisplay_font *font)
return (rasops_list_font(ri, font));
}
+void
+efifb_scrollback(void *v, void *cookie, int lines)
+{
+ struct efifb_softc *sc = v;
+ struct rasops_info *ri = &sc->sc_fb->rinfo;
+
+ rasops_scrollback(ri, cookie, lines);
+}
+
int
efifb_cnattach(void)
{
@@ -484,6 +495,12 @@ efifb_cndetach(void)
efifb_console.detached = 1;
}
+void
+efifb_cnreattach(void)
+{
+ efifb_console.detached = 0;
+}
+
int
efifb_cb_cnattach(void)
{
diff --git a/sys/arch/amd64/amd64/mainbus.c b/sys/arch/amd64/amd64/mainbus.c
index ed6ab059329..d26cf4c24de 100644
--- a/sys/arch/amd64/amd64/mainbus.c
+++ b/sys/arch/amd64/amd64/mainbus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mainbus.c,v 1.40 2017/10/14 04:44:43 jsg Exp $ */
+/* $OpenBSD: mainbus.c,v 1.41 2018/04/20 16:06:04 deraadt Exp $ */
/* $NetBSD: mainbus.c,v 1.1 2003/04/26 18:39:29 fvdl Exp $ */
/*
@@ -261,6 +261,21 @@ mainbus_attach(struct device *parent, struct device *self, void *aux)
#endif
}
+void
+mainbus_efifb_reattach(void)
+{
+#if NEFIFB > 0
+ union mainbus_attach_args mba;
+ struct device *self = device_mainbus();
+
+ if (bios_efiinfo != NULL || efifb_cb_found()) {
+ efifb_cnreattach();
+ mba.mba_eaa.eaa_name = "efifb";
+ config_found(self, &mba, mainbus_print);
+ }
+#endif
+}
+
int
mainbus_print(void *aux, const char *pnp)
{
diff --git a/sys/arch/amd64/include/efifbvar.h b/sys/arch/amd64/include/efifbvar.h
index f5e2bb26cae..26a5fe774e3 100644
--- a/sys/arch/amd64/include/efifbvar.h
+++ b/sys/arch/amd64/include/efifbvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: efifbvar.h,v 1.4 2016/06/21 15:24:55 jcs Exp $ */
+/* $OpenBSD: efifbvar.h,v 1.5 2018/04/20 16:06:04 deraadt Exp $ */
/*
* Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -28,6 +28,7 @@ struct pci_attach_args;
int efifb_cnattach(void);
int efifb_is_console(struct pci_attach_args *);
void efifb_cndetach(void);
+void efifb_cnreattach(void);
int efifb_cb_found(void);
int efifb_cb_cnattach(void);