All of lore.kernel.org
 help / color / mirror / Atom feed
* beginnings of allowing more than the basic 80x25 VGA screen resolution
@ 2005-07-01 15:48 Jan Beulich
  2005-07-01 15:52 ` Jon Smirl
  2005-07-01 16:02 ` Keir Fraser
  0 siblings, 2 replies; 11+ messages in thread
From: Jan Beulich @ 2005-07-01 15:48 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 363 bytes --]

With stack traces (during kernel crashes) being usually quite long, extending the capacity of the screen to at least 80x30 (20%) may already be considered helpful. I'm certain the patches won't be accepted as-is (namely the change to the start_info structure), but I need to get an understanding at what the expectations are to then try to adjust them.

Jan


[-- Attachment #2: xen-vga-plus.patch --]
[-- Type: application/octet-stream, Size: 7871 bytes --]

diff -Nprux .list unstable/xen/arch/x86/domain_build.c nxen-core/xen/arch/x86/domain_build.c
--- unstable/xen/arch/x86/domain_build.c	2005-07-01 08:24:22.243480408 -0700
+++ nxen-core/xen/arch/x86/domain_build.c	2005-07-01 08:32:20.931708736 -0700
@@ -12,6 +12,7 @@
 #include <xen/smp.h>
 #include <xen/delay.h>
 #include <xen/event.h>
+#include <xen/console.h>
 #include <xen/elf.h>
 #include <xen/kernel.h>
 #include <asm/regs.h>
@@ -541,6 +542,8 @@ int construct_dom0(struct domain *d,
     /* Set up start info area. */
     si = (start_info_t *)vstartinfo_start;
     memset(si, 0, PAGE_SIZE);
+    si->size         = sizeof(start_info_t);
+    si->boot_offset  = offsetof(start_info_t, pt_base);
     si->nr_pages     = nr_pages;
 
     if ( opt_dom0_translate )
@@ -554,6 +557,7 @@ int construct_dom0(struct domain *d,
         si->shared_info  = virt_to_phys(d->shared_info);
 
     si->flags        = SIF_PRIVILEGED | SIF_INITDOMAIN;
+    fill_console_start_info(si);
     si->pt_base      = vpt_start;
     si->nr_pt_frames = nr_pt_pages;
     si->mfn_list     = vphysmap_start;
diff -Nprux .list unstable/xen/drivers/char/console.c nxen-core/xen/drivers/char/console.c
--- unstable/xen/drivers/char/console.c	2005-07-01 08:24:47.353663080 -0700
+++ nxen-core/xen/drivers/char/console.c	2005-07-01 08:32:43.349300744 -0700
@@ -63,7 +63,7 @@ spinlock_t console_lock = SPIN_LOCK_UNLO
 
 /* VGA text (mode 3) definitions. */
 #define COLUMNS     80
-#define LINES       25
+#define LINES       vgacon_enabled
 #define ATTRIBUTE    7
 
 /* Clear the screen and initialize VIDEO, XPOS and YPOS.  */
@@ -166,6 +166,27 @@ static void init_vga(void)
         outb(i, 0x3c0); 
         outb(regs[j++], 0x3c0);
     }
+
+    switch ( vgacon_enabled )
+    {
+    case 30:
+    /*case 34:*/
+    /*case 60:*/
+        /* Set 480 scan lines. */
+        outw(0x0c11, 0x3d4);		/* Vertical sync end (also unlocks CR0-7) */
+        outw(0x0b06, 0x3d4);		/* Vertical total */
+        outw(0x3e07, 0x3d4);		/* Vertical overflow */
+        outw(0xea10, 0x3d4);		/* Vertical sync start */
+        outw(0x8c11, 0x3d4);		/* Vertical sync end (also locks CR0-7) */
+        outw(0xdf12, 0x3d4);		/* Vertical display end */
+        outw(0xe715, 0x3d4);		/* Vertical blank start */
+        outw(0x0416, 0x3d4);		/* Vertical blank end */
+        outb((inb(0x3cc) & 0x0d) | 0xe2, 0x3c2);		/* Misc output register */
+        break;
+    default:
+        vgacon_enabled = 25;
+        break;
+    }
     
     tmp = inb(0x3da);
     outb(0x20, 0x3c0);
@@ -207,6 +228,31 @@ static void putchar_console(int c)
     }
 }
 
+int fill_console_start_info(start_info_t *si)
+{
+    if (!vgacon_enabled)
+        return 0;
+    si->video_type   = 1;
+    si->video_width  = COLUMNS;
+    si->video_height = LINES;
+    si->txt_mode     = 3;
+    switch (LINES)
+    {
+    default:
+        si->txt_points = 16;
+        break;
+    case 28:
+    case 34:
+        si->txt_points = 14;
+        break;
+    case 43:
+    case 50:
+    case 60:
+        si->txt_points = 8;
+        break;
+    }
+    return 1;
+}
 
 /*
  * ********************************************************
@@ -453,7 +499,9 @@ void init_console(void)
         if ( strncmp(p, "com", 3) == 0 )
             sercon_handle = serial_parse_handle(p);
         else if ( strncmp(p, "vga", 3) == 0 )
-            vgacon_enabled = 1;
+            vgacon_enabled = p[3] < '1' || p[3] > '9'
+                             ? 25
+                             : simple_strtol(p + 3, NULL, 10);
     }
 
     init_vga();
diff -Nprux .list unstable/xen/include/public/xen.h nxen-core/xen/include/public/xen.h
--- unstable/xen/include/public/xen.h	2005-07-01 08:25:48.455374208 -0700
+++ nxen-core/xen/include/public/xen.h	2005-07-01 08:33:29.878227272 -0700
@@ -433,30 +433,51 @@ typedef struct shared_info_st
 
 #define MAX_GUEST_CMDLINE 1024
 typedef struct {
+    u32      size;            /*  0: structure size */
+    u32      boot_offset;     /*  4: offset of boot-only info */
     /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME.        */
-    memory_t nr_pages;        /*  0: Total pages allocated to this domain.    */
+    memory_t nr_pages;        /*  8: Total pages allocated to this domain.    */
     _MEMORY_PADDING(A);
-    memory_t shared_info;     /*  8: MACHINE address of shared info struct.   */
+    memory_t shared_info;     /* 16: MACHINE address of shared info struct.   */
     _MEMORY_PADDING(B);
-    u32      flags;           /* 16: SIF_xxx flags.                           */
-    u16      domain_controller_evtchn; /* 20 */
-    u16      __pad;
+    u32      flags;           /* 24: SIF_xxx flags.                           */
+    u16      domain_controller_evtchn; /* 28 */
+    u16      video_width;     /* 30 */
+    u16      video_height;    /* 32 */
+    u8       video_type;      /* 34 */
+    u8       txt_points;      /* 35 */
+    u16      txt_mode;        /* 36 */
+    u16      txt_x;           /* 38 */
+    u16      txt_y;           /* 40 */
+    u16      lfb__pad;        /* 42 */
+    u32      lfb_base;        /* 44 */
+    u32      lfb_size;        /* 48 */
+    u16      lfb_linelen;     /* 52 */
+    u16      lfb_depth;       /* 54 */
+    u8       red_pos;         /* 56 */
+    u8       red_size;        /* 57 */
+    u8       green_pos;       /* 58 */
+    u8       green_size;      /* 59 */
+    u8       blue_pos;        /* 60 */
+    u8       blue_size;       /* 61 */
+    u8       rsvd_pos;        /* 62 */
+    u8       rsvd_size;       /* 63 */
     /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME).         */
-    memory_t pt_base;         /* 24: VIRTUAL address of page directory.       */
+    memory_t pt_base;         /* 64: VIRTUAL address of page directory.       */
     _MEMORY_PADDING(C);
-    memory_t nr_pt_frames;    /* 32: Number of bootstrap p.t. frames.         */
+    memory_t nr_pt_frames;    /* 72: Number of bootstrap p.t. frames.         */
     _MEMORY_PADDING(D);
-    memory_t mfn_list;        /* 40: VIRTUAL address of page-frame list.      */
+    memory_t mfn_list;        /* 80: VIRTUAL address of page-frame list.      */
     _MEMORY_PADDING(E);
-    memory_t mod_start;       /* 48: VIRTUAL address of pre-loaded module.    */
+    memory_t mod_start;       /* 88: VIRTUAL address of pre-loaded module.    */
     _MEMORY_PADDING(F);
-    memory_t mod_len;         /* 56: Size (bytes) of pre-loaded module.       */
+    memory_t mod_len;         /* 96: Size (bytes) of pre-loaded module.       */
     _MEMORY_PADDING(G);
-    s8 cmd_line[MAX_GUEST_CMDLINE]; /* 64 */
-    memory_t store_page;      /* 1088: VIRTUAL address of store page.         */
+    s8 cmd_line[MAX_GUEST_CMDLINE]; /* 104 */
+    memory_t store_page;      /* 1128: VIRTUAL address of store page.         */
     _MEMORY_PADDING(H);
-    u16      store_evtchn;    /* 1096: Event channel for store communication. */
-} PACKED start_info_t; /* 1098 bytes */
+    u16      store_evtchn;    /* 1136: Event channel for store communication. */
+} PACKED start_info_t; /* 1138 bytes */
 
 /* These flags are passed in the 'flags' field of start_info_t. */
 #define SIF_PRIVILEGED    (1<<0)  /* Is the domain privileged? */
diff -Nprux .list unstable/xen/include/xen/console.h nxen-core/xen/include/xen/console.h
--- unstable/xen/include/xen/console.h	2005-07-01 08:25:51.866855584 -0700
+++ nxen-core/xen/include/xen/console.h	2005-07-01 08:33:32.814780848 -0700
@@ -8,6 +8,7 @@
 #define __CONSOLE_H__
 
 #include <xen/spinlock.h>
+#include <public/xen.h>
 
 extern spinlock_t console_lock;
 
@@ -17,6 +18,7 @@ long read_console_ring(char **, u32 *, i
 
 void init_console(void);
 void console_endboot(int disable_vga);
+int fill_console_start_info(start_info_t *);
 
 void console_force_unlock(void);
 void console_force_lock(void);

[-- Attachment #3: xenlinux-vga-plus.patch --]
[-- Type: application/octet-stream, Size: 5609 bytes --]

--- 2.6.11-xen/arch/xen/i386/kernel/setup.c	2005-07-01 09:13:57.212216416 -0700
+++ nxen-guest/arch/xen/i386/kernel/setup.c	2005-07-01 09:15:13.351641464 -0700
@@ -1412,6 +1412,14 @@ void __init setup_arch(char **cmdline_p)
 	HYPERVISOR_vm_assist(VMASST_CMD_enable,
 			     VMASST_TYPE_writable_pagetables);
 
+	if (xen_start_info.size != sizeof(start_info_t)
+	    || xen_start_info.boot_offset != offsetof(start_info_t, pt_base))
+		panic("Mismatched start_info layouts (%zu/%u, %zu/%u)",
+		      sizeof(start_info_t),
+		      xen_start_info.size,
+		      offsetof(start_info_t, pt_base),
+		      xen_start_info.boot_offset);
+
 	memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
 	early_cpu_init();
 
@@ -1432,7 +1440,32 @@ void __init setup_arch(char **cmdline_p)
 	*/
 	ROOT_DEV = MKDEV(UNNAMED_MAJOR,0);
  	drive_info = DRIVE_INFO;
- 	screen_info = SCREEN_INFO;
+
+#ifdef CONFIG_XEN_PHYSDEV_ACCESS
+	screen_info.orig_video_mode   = xen_start_info.txt_mode; 
+	screen_info.orig_video_isVGA  = xen_start_info.video_type;
+	screen_info.orig_video_lines  = xen_start_info.video_height;
+	screen_info.orig_video_cols   = xen_start_info.video_width;
+	screen_info.orig_video_points = xen_start_info.txt_points;
+	/* This is drawn from a dump from vgacon:startup in standard Linux. */
+	screen_info.orig_video_ega_bx = 3;
+
+	screen_info.lfb_width         = xen_start_info.video_width;
+	screen_info.lfb_height        = xen_start_info.video_height;
+	screen_info.lfb_depth         = xen_start_info.lfb_depth;
+	screen_info.lfb_base          = xen_start_info.lfb_base;
+	screen_info.lfb_size          = xen_start_info.lfb_size;
+	screen_info.lfb_linelength    = xen_start_info.lfb_linelen;
+	screen_info.red_size          = xen_start_info.red_size;
+	screen_info.red_pos           = xen_start_info.red_pos;
+	screen_info.green_size        = xen_start_info.green_size;
+	screen_info.green_pos         = xen_start_info.green_pos;
+	screen_info.blue_size         = xen_start_info.blue_size;
+	screen_info.blue_pos          = xen_start_info.blue_pos;
+	screen_info.rsvd_size         = xen_start_info.rsvd_size;
+	screen_info.rsvd_pos          = xen_start_info.rsvd_pos;
+#endif
+
 	edid_info = EDID_INFO;
 	apm_info.bios = APM_BIOS_INFO;
 	ist_info = IST_INFO;
@@ -1446,16 +1454,6 @@ void __init setup_arch(char **cmdline_p)
 	aux_device_present = AUX_DEVICE_INFO;
 	bootloader_type = LOADER_TYPE;
 
-#ifdef CONFIG_XEN_PHYSDEV_ACCESS
-	/* This is drawn from a dump from vgacon:startup in standard Linux. */
-	screen_info.orig_video_mode = 3; 
-	screen_info.orig_video_isVGA = 1;
-	screen_info.orig_video_lines = 25;
-	screen_info.orig_video_cols = 80;
-	screen_info.orig_video_ega_bx = 3;
-	screen_info.orig_video_points = 16;
-#endif
-
 #ifdef CONFIG_BLK_DEV_RAM
 	rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK;
 	rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0);
--- 2.6.11-xen/arch/xen/x86_64/kernel/setup.c	2005-07-01 09:14:30.399171232 -0700
+++ nxen-guest/arch/xen/x86_64/kernel/setup.c	2005-07-01 09:15:40.113573032 -0700
@@ -607,6 +607,14 @@ void __init setup_arch(char **cmdline_p)
 	int i, j;
 	physdev_op_t op;
 
+	if (xen_start_info.size != sizeof(start_info_t)
+	    || xen_start_info.boot_offset != offsetof(start_info_t, pt_base))
+		panic("Mismatched start_info layouts (%zu/%u, %zu/%u)",
+		      sizeof(start_info_t),
+		      xen_start_info.size,
+		      offsetof(start_info_t, pt_base),
+		      xen_start_info.boot_offset);
+
 #if 0
  	ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
 #else
@@ -615,8 +623,30 @@ void __init setup_arch(char **cmdline_p)
  	drive_info = DRIVE_INFO;
 
 #ifdef CONFIG_XEN_PHYSDEV_ACCESS
- 	screen_info = SCREEN_INFO;
+	screen_info.orig_video_mode   = xen_start_info.txt_mode; 
+	screen_info.orig_video_isVGA  = xen_start_info.video_type;
+	screen_info.orig_video_lines  = xen_start_info.video_height;
+	screen_info.orig_video_cols   = xen_start_info.video_width;
+	screen_info.orig_video_points = xen_start_info.txt_points;
+	/* This is drawn from a dump from vgacon:startup in standard Linux. */
+	screen_info.orig_video_ega_bx = 3;
+
+	screen_info.lfb_width         = xen_start_info.video_width;
+	screen_info.lfb_height        = xen_start_info.video_height;
+	screen_info.lfb_depth         = xen_start_info.lfb_depth;
+	screen_info.lfb_base          = xen_start_info.lfb_base;
+	screen_info.lfb_size          = xen_start_info.lfb_size;
+	screen_info.lfb_linelength    = xen_start_info.lfb_linelen;
+	screen_info.red_size          = xen_start_info.red_size;
+	screen_info.red_pos           = xen_start_info.red_pos;
+	screen_info.green_size        = xen_start_info.green_size;
+	screen_info.green_pos         = xen_start_info.green_pos;
+	screen_info.blue_size         = xen_start_info.blue_size;
+	screen_info.blue_pos          = xen_start_info.blue_pos;
+	screen_info.rsvd_size         = xen_start_info.rsvd_size;
+	screen_info.rsvd_pos          = xen_start_info.rsvd_pos;
 #endif
+
 	edid_info = EDID_INFO;
 	aux_device_present = AUX_DEVICE_INFO;
 	saved_video_mode = SAVED_VIDEO_MODE;
@@ -629,15 +659,6 @@ void __init setup_arch(char **cmdline_p)
 #endif
 /*        register_console(&xen_console); */
 
-#ifdef CONFIG_XEN_PHYSDEV_ACCESS
-	/* This is drawn from a dump from vgacon:startup in standard Linux. */
-	screen_info.orig_video_mode = 3; 
-	screen_info.orig_video_isVGA = 1;
-	screen_info.orig_video_lines = 25;
-	screen_info.orig_video_cols = 80;
-	screen_info.orig_video_ega_bx = 3;
-	screen_info.orig_video_points = 16;
-#endif       
         ARCH_SETUP
         print_memory_map(machine_specific_memory_setup());
 

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
  2005-07-01 15:48 Jan Beulich
@ 2005-07-01 15:52 ` Jon Smirl
  2005-07-01 16:02 ` Keir Fraser
  1 sibling, 0 replies; 11+ messages in thread
From: Jon Smirl @ 2005-07-01 15:52 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel

On 7/1/05, Jan Beulich <JBeulich@novell.com> wrote:
> With stack traces (during kernel crashes) being usually quite long, extending the capacity of the screen to at least 80x30 (20%) may already be considered helpful. I'm certain the patches won't be accepted as-is (namely the change to the start_info structure), but I need to get an understanding at what the expectations are to then try to adjust them.

You can move the kernel console over to a serial port with
console=ttyS0,11500 on the kernel boot line.  Would it be easier for
Xen to use virtual serial ports to capture the console?

-- 
Jon Smirl
jonsmirl@gmail.com

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
  2005-07-01 15:48 Jan Beulich
  2005-07-01 15:52 ` Jon Smirl
@ 2005-07-01 16:02 ` Keir Fraser
  1 sibling, 0 replies; 11+ messages in thread
From: Keir Fraser @ 2005-07-01 16:02 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel


On 1 Jul 2005, at 16:48, Jan Beulich wrote:

> With stack traces (during kernel crashes) being usually quite long, 
> extending the capacity of the screen to at least 80x30 (20%) may 
> already be considered helpful. I'm certain the patches won't be 
> accepted as-is (namely the change to the start_info structure), but I 
> need to get an understanding at what the expectations are to then try 
> to adjust them.

I'll happily take a patch that increases range of text modes supported 
by Xen. But why bother to propagate this info to XenLinux? You can set 
a vga-mode parameter on XenLinux's command line. To make this easier, 
we could have Xen automatically add a suitable mode parameter to 
XenLinux command line, based on what was passed to Xen, if one wasn;t 
specified by the administrator.

The only downside of this is that, without hacks, XenLinux will 
probably reset the screen when it starts up (so you lose tail end of 
Xen output). I wonder if that is really much of a problem -- if 
XenLinux has booted far enough to actually reset vga, and then crashes, 
it's unlikely the tail end of Xen bootstrap output is actually very 
interesting. Certainly not interesting enough to implement and maintain 
big hacks to vga code.

  -- Keir

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
@ 2005-07-04  7:28 Jan Beulich
  0 siblings, 0 replies; 11+ messages in thread
From: Jan Beulich @ 2005-07-04  7:28 UTC (permalink / raw)
  To: Keir.Fraser; +Cc: xen-devel

>I'll happily take a patch that increases range of text modes supported

>by Xen. But why bother to propagate this info to XenLinux? You can set

>a vga-mode parameter on XenLinux's command line. To make this easier,

>we could have Xen automatically add a suitable mode parameter to 
>XenLinux command line, based on what was passed to Xen, if one wasn;t

>specified by the administrator.

Hmm, interesting. I would have hoped such thing would exist, but I
can't see how it could work, since the code affected by
CONFIG_VIDEO_SELECT (which is what in non-guest Linux deals with the
vga= option) doesn't even exist in XenLinux. Further more, since XEN is
a multiboot image, it would require infrastructure to switch back to
real mode for issuing the necessary INT10-s in the guest kernel, which I
think is neither very desirable nor existing.

So I must be missing something, but I'd need a pointer at where I would
have to look for the alternative code.

Jan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
       [not found] <s2c890b4.055@lucius.provo.novell.com>
@ 2005-07-04  7:50 ` Keir Fraser
  0 siblings, 0 replies; 11+ messages in thread
From: Keir Fraser @ 2005-07-04  7:50 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel


On 4 Jul 2005, at 08:28, Jan Beulich wrote:

> Hmm, interesting. I would have hoped such thing would exist, but I
> can't see how it could work, since the code affected by
> CONFIG_VIDEO_SELECT (which is what in non-guest Linux deals with the
> vga= option) doesn't even exist in XenLinux. Further more, since XEN is
> a multiboot image, it would require infrastructure to switch back to
> real mode for issuing the necessary INT10-s in the guest kernel, which 
> I
> think is neither very desirable nor existing.
>
> So I must be missing something, but I'd need a pointer at where I would
> have to look for the alternative code.

We could certainly add a way to propagate the mode option through to 
the vga driver, but is the Linux vga driver really unable to switch 
modes without bios help? Is there support for a protected-mode vesa/vbe 
driver instead?

  -- Keir

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
@ 2005-07-04  8:00 Jan Beulich
  0 siblings, 0 replies; 11+ messages in thread
From: Jan Beulich @ 2005-07-04  8:00 UTC (permalink / raw)
  To: Keir.Fraser; +Cc: xen-devel

>We could certainly add a way to propagate the mode option through to 
>the vga driver, but is the Linux vga driver really unable to switch 
>modes without bios help? Is there support for a protected-mode
vesa/vbe 
>driver instead?

As far as I know, not only the VGA driver does not do any mode
switching, even the VESA one doesn't (because the protected mode
interface doesn't cover the mode switching functions as far as I
remember). Only the video board specific frame buffer drivers are able
to switch modes, and the bad thing (for me personally) is that even in
2.6.12 there still is no (64-bit) support for the i915 chipset. So I
continue to be required to live with the video mode that XEN 'sets'
prior to loading dom0, and short of it supporting a VESA console my
first minimal attempt was to at least increase (and propagate) the size
to the maximum possible without significant changes.

Jan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
       [not found] <s2c898b4.073@lucius.provo.novell.com>
@ 2005-07-04  8:14 ` Keir Fraser
  2005-07-04  8:51   ` Gerd Knorr
  0 siblings, 1 reply; 11+ messages in thread
From: Keir Fraser @ 2005-07-04  8:14 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel


On 4 Jul 2005, at 09:00, Jan Beulich wrote:

> As far as I know, not only the VGA driver does not do any mode
> switching, even the VESA one doesn't (because the protected mode
> interface doesn't cover the mode switching functions as far as I
> remember). Only the video board specific frame buffer drivers are able
> to switch modes, and the bad thing (for me personally) is that even in
> 2.6.12 there still is no (64-bit) support for the i915 chipset. So I
> continue to be required to live with the video mode that XEN 'sets'
> prior to loading dom0, and short of it supporting a VESA console my
> first minimal attempt was to at least increase (and propagate) the size
> to the maximum possible without significant changes.

That's a pain. Maybe we can find a simple example somewhere of setting 
video mode via protect-mode VBE calls. I see that this functionality is 
missing from the kernel drivers -- it's all done in a monstrous 
real-mode assembly file. Any video card we care about these days should 
support VBE 2.0/3.0 I think, and those interfaces don;t require you to 
be runnign in real mode.

  -- Keir

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
@ 2005-07-04  8:35 Jan Beulich
  0 siblings, 0 replies; 11+ messages in thread
From: Jan Beulich @ 2005-07-04  8:35 UTC (permalink / raw)
  To: Keir.Fraser; +Cc: xen-devel

>> As far as I know, not only the VGA driver does not do any mode
>> switching, even the VESA one doesn't (because the protected mode
>> interface doesn't cover the mode switching functions as far as I
>> remember). Only the video board specific frame buffer drivers are
able
>> to switch modes, and the bad thing (for me personally) is that even
in
>> 2.6.12 there still is no (64-bit) support for the i915 chipset. So
I
>> continue to be required to live with the video mode that XEN 'sets'
>> prior to loading dom0, and short of it supporting a VESA console my
>> first minimal attempt was to at least increase (and propagate) the
size
>> to the maximum possible without significant changes.
>
>That's a pain. Maybe we can find a simple example somewhere of setting

>video mode via protect-mode VBE calls. I see that this functionality
is 
>missing from the kernel drivers -- it's all done in a monstrous 
>real-mode assembly file. Any video card we care about these days
should 
>support VBE 2.0/3.0 I think, and those interfaces don;t require you to

>be runnign in real mode.

At least for VBE 2.0 such code can't exist; the protected mode
interface only covers
- setting the memory window
- setting the display start
- setting the primary palette
and I don't think 3.0 significantly extended that interface. The
assumption here is that any program wishing to use this is going to set
up its video mode once and for all in real mode, and then only require
some limited support in setting certain output-related things.

Jan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
  2005-07-04  8:14 ` beginnings of allowing more than the basic 80x25 VGA screen resolution Keir Fraser
@ 2005-07-04  8:51   ` Gerd Knorr
  2005-07-06 21:37     ` Matthias Huber
  0 siblings, 1 reply; 11+ messages in thread
From: Gerd Knorr @ 2005-07-04  8:51 UTC (permalink / raw)
  To: Keir Fraser; +Cc: xen-devel, Jan Beulich

Keir Fraser <Keir.Fraser@cl.cam.ac.uk> writes:

> > As far as I know, not only the VGA driver does not do any mode
> > switching, even the VESA one doesn't (because the protected mode

Exactly.  A simple way to get more screen lines is to load a 8x8
screen font though.

> real-mode assembly file. Any video card we care about these days
> should support VBE 2.0/3.0 I think, and those interfaces don;t require
> you to be runnign in real mode.

vbe 2.0 yes, not sure about 3.0.

For mode switching from protected mode you need 3.0 though, 2.0
protected mode support is _very_ limited (you can do panning and
palette register programming, but no mode switching).  And I think
even for vbe 3.0 you need some real mode code to figure the protected
mode entry point, so paravirtual linux wouldn't be able to do that
without help from xen.

  Gerd

-- 
panic("it works"); /* avoid being flooded with debug messages */

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
  2005-07-04  8:51   ` Gerd Knorr
@ 2005-07-06 21:37     ` Matthias Huber
  2005-07-07  7:59       ` Gerd Knorr
  0 siblings, 1 reply; 11+ messages in thread
From: Matthias Huber @ 2005-07-06 21:37 UTC (permalink / raw)
  To: xen-devel

Gerd Knorr <kraxel <at> suse.de> writes:

> 
> Keir Fraser <Keir.Fraser <at> cl.cam.ac.uk> writes:
> 
> > > As far as I know, not only the VGA driver does not do any mode
> > > switching, even the VESA one doesn't (because the protected mode
> 
> Exactly.  A simple way to get more screen lines is to load a 8x8
> screen font though.
> 
> > real-mode assembly file. Any video card we care about these days
> > should support VBE 2.0/3.0 I think, and those interfaces don;t require
> > you to be runnign in real mode.
> 
> vbe 2.0 yes, not sure about 3.0.
> 
> For mode switching from protected mode you need 3.0 though, 2.0
> protected mode support is _very_ limited (you can do panning and
> palette register programming, but no mode switching).  And I think
> even for vbe 3.0 you need some real mode code to figure the protected
> mode entry point, so paravirtual linux wouldn't be able to do that
> without help from xen.

The VBE3.0 spec shows clearly how to figure out the protected mode entry point:
copy the video bios to another location and search for the PMInfoBlock
structure, identified by a four-byte signature "PMID". In the structure you find
the protected mode entry point.
At the moment I am working on initializing graphics mode via the protected mode
VBE interface. So far I found the PMInfoBlock, now I try to figure out how to
set up the needed 16bit-registers to do the lcall into the video bios (at the
protected mode entry point). Any code snippets e.g. for switching to a 16bit
stack selector prior to the lcall are wellcome...

Matthias Huber

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Re: beginnings of allowing more than the basic 80x25 VGA screen resolution
  2005-07-06 21:37     ` Matthias Huber
@ 2005-07-07  7:59       ` Gerd Knorr
  0 siblings, 0 replies; 11+ messages in thread
From: Gerd Knorr @ 2005-07-07  7:59 UTC (permalink / raw)
  To: Matthias Huber; +Cc: xen-devel

Matthias Huber <hubermat@gmx.de> writes:

> protected mode entry point). Any code snippets e.g. for switching to a 16bit
> stack selector prior to the lcall are wellcome...

linux apm code should have something, apm bios is 16 bit as well.

HTH,

  Gerd

-- 
panic("it works"); /* avoid being flooded with debug messages */

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2005-07-07  7:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <s2c898b4.073@lucius.provo.novell.com>
2005-07-04  8:14 ` beginnings of allowing more than the basic 80x25 VGA screen resolution Keir Fraser
2005-07-04  8:51   ` Gerd Knorr
2005-07-06 21:37     ` Matthias Huber
2005-07-07  7:59       ` Gerd Knorr
2005-07-04  8:35 Jan Beulich
  -- strict thread matches above, loose matches on Subject: below --
2005-07-04  8:00 Jan Beulich
     [not found] <s2c890b4.055@lucius.provo.novell.com>
2005-07-04  7:50 ` Keir Fraser
2005-07-04  7:28 Jan Beulich
2005-07-01 15:48 Jan Beulich
2005-07-01 15:52 ` Jon Smirl
2005-07-01 16:02 ` Keir Fraser

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.