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.
This commit is contained in:
cinap_lenrek 2015-08-02 07:32:49 +02:00
parent 27445c5768
commit 1f3c43c017
3 changed files with 26 additions and 1 deletions

View file

@ -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:

View file

@ -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);
}

View file

@ -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);