vga_console_info.u.vesa_lfb.bytes_per_line =
(mode_info->PixelsPerScanLine * bpp + 7) >> 3;
vga_console_info.u.vesa_lfb.lfb_base = gop->Mode->FrameBufferBase;
+ vga_console_info.u.vesa_lfb.ext_lfb_base = gop->Mode->FrameBufferBase >> 32;
vga_console_info.u.vesa_lfb.lfb_size =
(gop->Mode->FrameBufferSize + 0xffff) >> 16;
}
}
custom_param("font", parse_font_height);
+static inline paddr_t lfb_base(void)
+{
+ return ((paddr_t)vlfb_info.ext_lfb_base << 32) | vlfb_info.lfb_base;
+}
+
void __init vesa_early_init(void)
{
unsigned int vram_vmode;
lfbp.text_columns = vlfb_info.width / font->width;
lfbp.text_rows = vlfb_info.height / font->height;
- lfbp.lfb = lfb = ioremap(vlfb_info.lfb_base, vram_remap);
+ lfbp.lfb = lfb = ioremap(lfb_base(), vram_remap);
if ( !lfb )
return;
memset(lfb, 0, vram_remap);
- printk(XENLOG_INFO "vesafb: framebuffer at %#x, mapped to 0x%p, "
- "using %uk, total %uk\n",
- vlfb_info.lfb_base, lfb,
+ printk(XENLOG_INFO "vesafb: framebuffer at 0x%" PRIpaddr ", mapped to 0x%p, using %uk, total %uk\n",
+ lfb_base(), lfb,
vram_remap >> 10, vram_total >> 10);
printk(XENLOG_INFO "vesafb: mode is %dx%dx%u, linelength=%d, font %ux%u\n",
vlfb_info.width, vlfb_info.height,
/* Try and find a power of two to add */
do {
- rc = mtrr_add(vlfb_info.lfb_base, size_total, type, 1);
+ rc = mtrr_add(lfb_base(), size_total, type, 1);
size_total >>= 1;
} while ( (size_total >= PAGE_SIZE) && (rc == -EINVAL) );
}
#ifndef __XEN_PUBLIC_XEN_COMPAT_H__
#define __XEN_PUBLIC_XEN_COMPAT_H__
-#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040900
+#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040901
#if defined(__XEN__) || defined(__XEN_TOOLS__)
/* Xen is built with matching headers and implements the latest interface. */