vmx: pass multiboot framebuffer info to kernel
This commit is contained in:
parent
c78d4c4ce7
commit
6f6df11db7
1 changed files with 25 additions and 3 deletions
|
@ -14,6 +14,8 @@ extern int bootmodn;
|
||||||
extern char **bootmod;
|
extern char **bootmod;
|
||||||
extern int cmdlinen;
|
extern int cmdlinen;
|
||||||
extern char **cmdlinev;
|
extern char **cmdlinev;
|
||||||
|
extern VgaMode *curmode, textmode;
|
||||||
|
extern uintptr fbaddr, fbsz;
|
||||||
|
|
||||||
static int elf64;
|
static int elf64;
|
||||||
|
|
||||||
|
@ -180,7 +182,29 @@ trymultiboot(void)
|
||||||
p[6] = gpa(modp);
|
p[6] = gpa(modp);
|
||||||
modp += len + 7 & -8;
|
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);
|
USED(modp);
|
||||||
rset(RPC, entry);
|
rset(RPC, entry);
|
||||||
rset(RAX, 0x2badb002);
|
rset(RAX, 0x2badb002);
|
||||||
|
@ -560,8 +584,6 @@ obsdfb(void)
|
||||||
{
|
{
|
||||||
int i, s, p;
|
int i, s, p;
|
||||||
u32int r, g, b, a, m;
|
u32int r, g, b, a, m;
|
||||||
extern VgaMode *curmode, textmode;
|
|
||||||
extern uintptr fbaddr, fbsz;
|
|
||||||
|
|
||||||
if(curmode == nil || curmode == &textmode) return;
|
if(curmode == nil || curmode == &textmode) return;
|
||||||
p = r = g = b = a = 0;
|
p = r = g = b = a = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue