From 6f6df11db70363d600a30960b7c7f00076e22664 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 13 Aug 2017 19:19:55 +0200 Subject: vmx: pass multiboot framebuffer info to kernel --- sys/src/cmd/vmx/ksetup.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/sys/src/cmd/vmx/ksetup.c b/sys/src/cmd/vmx/ksetup.c index be0329528..f3e2d95c8 100644 --- a/sys/src/cmd/vmx/ksetup.c +++ b/sys/src/cmd/vmx/ksetup.c @@ -14,6 +14,8 @@ extern int bootmodn; extern char **bootmod; extern int cmdlinen; extern char **cmdlinev; +extern VgaMode *curmode, textmode; +extern uintptr fbaddr, fbsz; static int elf64; @@ -180,7 +182,29 @@ trymultiboot(void) p[6] = gpa(modp); modp += len + 7 & -8; } - + + if(curmode != nil && curmode != &textmode){ + int i, o, n; + u16int r, g, b; + + o = 0; + r = g = b = 0; + for(i = 0; i < 4; i++){ + n = curmode->chan >> 8*i & 0xf; + if(n == 0) continue; + switch(curmode->chan >> 4 + 8*i & 0xf){ + case CRed: r = o | n<<8; break; + case CGreen: g = o | n<<8; break; + case CBlue: b = o | n<<8; break; + } + o += n; + } + p[0] |= 1<<12; + pack(&p[22], "viiiisss", (u64int)fbaddr, + curmode->hbytes, curmode->w, curmode->h, + chantodepth(curmode->chan) | 1<<8, r, g, b); + } + USED(modp); rset(RPC, entry); rset(RAX, 0x2badb002); @@ -560,8 +584,6 @@ obsdfb(void) { int i, s, p; u32int r, g, b, a, m; - extern VgaMode *curmode, textmode; - extern uintptr fbaddr, fbsz; if(curmode == nil || curmode == &textmode) return; p = r = g = b = a = 0; -- cgit v1.2.3