diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-02 07:32:49 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-02 07:32:49 +0200 |
commit | 1f3c43c01720ed66e7c981d3287eca7dae362ba8 (patch) | |
tree | 438c16da2cf6ab0410ed047297e03c808e312de1 | |
parent | 27445c5768fc9efd11efae2ac0e793fd7f4779fc (diff) |
pc, pc64: set *bootscreen= when framebuffer changes
add bootscreenconf(VGAscr *) function, that is called whenever
the framebuffer configuration is changed by devvga. that way, we
can pass the current setting of the framebuffer to the new
kernel when using /dev/reboot.
-rw-r--r-- | sys/src/9/pc/devvga.c | 2 | ||||
-rw-r--r-- | sys/src/9/pc/screen.c | 22 | ||||
-rw-r--r-- | sys/src/9/pc/screen.h | 3 |
3 files changed, 26 insertions, 1 deletions
diff --git a/sys/src/9/pc/devvga.c b/sys/src/9/pc/devvga.c index 90ebb140d..e980011d8 100644 --- a/sys/src/9/pc/devvga.c +++ b/sys/src/9/pc/devvga.c @@ -329,6 +329,7 @@ vgactl(Cmdbuf *cb) case CMtextmode: screeninit(); + bootscreenconf(nil); return; case CMsize: @@ -357,6 +358,7 @@ vgactl(Cmdbuf *cb) deletescreenimage(); if(screensize(x, y, z, chan)) error(Egreg); + bootscreenconf(scr); return; case CMactualsize: diff --git a/sys/src/9/pc/screen.c b/sys/src/9/pc/screen.c index c7317dd0a..4ff7a9485 100644 --- a/sys/src/9/pc/screen.c +++ b/sys/src/9/pc/screen.c @@ -586,7 +586,7 @@ bootmapfb(VGAscr *scr, ulong pa, ulong sz) /* * called early on boot to attach to framebuffer - * setup by bootloader or firmware. + * setup by bootloader/firmware or plan9. */ void bootscreeninit(void) @@ -665,3 +665,23 @@ bootscreeninit(void) scr->cur->enable(scr); cursoron(); } + +/* + * called from devvga when the framebuffer is setup + * to set *bootscreen= that can be passed on to a + * new kernel on reboot. + */ +void +bootscreenconf(VGAscr *scr) +{ + char conf[100], chan[30]; + + conf[0] = '\0'; + if(scr != nil && scr->paddr != 0) + snprint(conf, sizeof(conf), "%dx%dx%d %s %#p %d\n", + scr->gscreen->r.max.x, scr->gscreen->r.max.y, + scr->gscreen->depth, chantostr(chan, scr->gscreen->chan), + scr->paddr, scr->apsize); + + ksetenv("*bootscreen", conf, 1); +} diff --git a/sys/src/9/pc/screen.h b/sys/src/9/pc/screen.h index 58aa7f320..762e7803e 100644 --- a/sys/src/9/pc/screen.h +++ b/sys/src/9/pc/screen.h @@ -149,6 +149,9 @@ extern int screenaperture(int, int); extern Rectangle physgscreenr; /* actual monitor size */ extern void blankscreen(int); +extern void bootscreeninit(void); +extern void bootscreenconf(VGAscr*); + extern VGAcur swcursor; extern void swcursorinit(void); extern void swcursorhide(void); |