[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [XEN] vga code cleanups and additions for other architectures.



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 3e75d9b1d55656eb16823d277c6609753a847ae4
# Parent  87165e688bc5d67d6f0cd0bb8b900b402d9cbb0d
[XEN] vga code cleanups and additions for other architectures.
Based on patches from Hollis Blanchard and Alex Williamson.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/include/xen/font.h                     |   22 --
 linux-2.6-xen-sparse/arch/ia64/dig/setup.c |  110 ++++++++++++++
 xen/arch/ia64/Rules.mk                     |    1 
 xen/arch/ia64/xen/domain.c                 |   17 ++
 xen/arch/ia64/xen/mm.c                     |    5 
 xen/arch/x86/Rules.mk                      |    1 
 xen/arch/x86/mm.c                          |   15 ++
 xen/drivers/Makefile                       |    2 
 xen/drivers/char/console.c                 |  149 --------------------
 xen/drivers/video/font.h                   |   22 ++
 xen/drivers/video/font_8x14.c              |    2 
 xen/drivers/video/font_8x16.c              |    2 
 xen/drivers/video/font_8x8.c               |    2 
 xen/drivers/video/vga.c                    |  214 +++++++++++++++++++++++------
 xen/include/asm-ia64/config.h              |    2 
 xen/include/asm-x86/config.h               |    2 
 xen/include/asm-x86/io.h                   |    1 
 xen/include/xen/mm.h                       |    3 
 xen/include/xen/vga.h                      |   14 +
 19 files changed, 368 insertions(+), 218 deletions(-)

diff -r 87165e688bc5 -r 3e75d9b1d556 xen/arch/ia64/Rules.mk
--- a/xen/arch/ia64/Rules.mk    Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/arch/ia64/Rules.mk    Wed Aug 16 18:20:03 2006 +0100
@@ -2,6 +2,7 @@
 # ia64-specific definitions
 
 HAS_ACPI := y
+HAS_VGA  := y
 VALIDATE_VT    ?= n
 no_warns ?= n
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/arch/ia64/xen/domain.c        Wed Aug 16 18:20:03 2006 +0100
@@ -864,6 +864,7 @@ int construct_dom0(struct domain *d,
 {
        int i, rc;
        start_info_t *si;
+       dom0_vga_console_info_t *ci;
        struct vcpu *v = d->vcpu[0];
        unsigned long max_pages;
 
@@ -1000,6 +1001,9 @@ int construct_dom0(struct domain *d,
        //if ( initrd_len != 0 )
        //    memcpy((void *)vinitrd_start, initrd_start, initrd_len);
 
+       BUILD_BUG_ON(sizeof(start_info_t) + sizeof(dom0_vga_console_info_t) +
+                    sizeof(struct ia64_boot_param) > PAGE_SIZE);
+
        /* Set up start info area. */
        d->shared_info->arch.start_info_pfn = pstart_info >> PAGE_SHIFT;
        start_info_page = assign_new_domain_page(d, pstart_info);
@@ -1034,7 +1038,8 @@ int construct_dom0(struct domain *d,
        strncpy((char *)si->cmd_line, dom0_command_line, sizeof(si->cmd_line));
        si->cmd_line[sizeof(si->cmd_line)-1] = 0;
 
-       bp = (struct ia64_boot_param *)(si + 1);
+       bp = (struct ia64_boot_param *)((unsigned char *)si +
+                                       sizeof(start_info_t));
        bp->command_line = pstart_info + offsetof (start_info_t, cmd_line);
 
        /* We assume console has reached the last line!  */
@@ -1048,6 +1053,16 @@ int construct_dom0(struct domain *d,
                     (PAGE_ALIGN(ia64_boot_param->initrd_size) + 4*1024*1024);
        bp->initrd_size = ia64_boot_param->initrd_size;
 
+       ci = (dom0_vga_console_info_t *)((unsigned char *)si +
+                                        sizeof(start_info_t) +
+                                        sizeof(struct ia64_boot_param));
+
+       if (fill_console_start_info(ci)) {
+               si->console.dom0.info_off = sizeof(start_info_t) +
+                                           sizeof(struct ia64_boot_param);
+               si->console.dom0.info_size = sizeof(dom0_vga_console_info_t);
+       }
+
        vcpu_init_regs (v);
 
        vcpu_regs(v)->r28 = bp_mpa;
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/arch/ia64/xen/mm.c    Wed Aug 16 18:20:03 2006 +0100
@@ -1746,6 +1746,11 @@ int get_page_type(struct page_info *page
     return 1;
 }
 
+int memory_is_conventional_ram(paddr_t p)
+{
+    return (efi_mem_type(p) == EFI_CONVENTIONAL_MEMORY);
+}
+
 /*
  * Local variables:
  * mode: C
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/arch/x86/Rules.mk
--- a/xen/arch/x86/Rules.mk     Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/arch/x86/Rules.mk     Wed Aug 16 18:20:03 2006 +0100
@@ -2,6 +2,7 @@
 # x86-specific definitions
 
 HAS_ACPI := y
+HAS_VGA  := y
 
 #
 # If you change any of these configuration options then you must
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/arch/x86/mm.c Wed Aug 16 18:20:03 2006 +0100
@@ -234,6 +234,21 @@ void arch_init_memory(void)
     subarch_init_memory();
 }
 
+int memory_is_conventional_ram(paddr_t p)
+{
+    int i;
+
+    for ( i = 0; i < e820.nr_map; i++ )
+    {
+        if ( (e820.map[i].type == E820_RAM) &&
+             (e820.map[i].addr <= p) &&
+             (e820.map[i].size > p) )
+            return 1;
+    }
+
+    return 0;
+}
+
 void share_xen_page_with_guest(
     struct page_info *page, struct domain *d, int readonly)
 {
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/Makefile
--- a/xen/drivers/Makefile      Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/Makefile      Wed Aug 16 18:20:03 2006 +0100
@@ -1,3 +1,3 @@ subdir-y += char
 subdir-y += char
 subdir-$(HAS_ACPI) += acpi
-subdir-y += video
+subdir-$(HAS_VGA) += video
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/char/console.c        Wed Aug 16 18:20:03 2006 +0100
@@ -22,7 +22,6 @@
 #include <xen/delay.h>
 #include <xen/guest_access.h>
 #include <xen/shutdown.h>
-#include <xen/font.h>
 #include <xen/vga.h>
 #include <asm/current.h>
 #include <asm/debugger.h>
@@ -31,10 +30,6 @@
 /* console: comma-separated list of console outputs. */
 static char opt_console[30] = OPT_CONSOLE_STR;
 string_param("console", opt_console);
-
-/* vga: comma-separated options. */
-static char opt_vga[30] = "";
-string_param("vga", opt_vga);
 
 /* conswitch: a character pair controlling console switching. */
 /* Char 1: CTRL+<char1> is used to switch console input between Xen and DOM0 */
@@ -47,9 +42,6 @@ static int opt_sync_console;
 static int opt_sync_console;
 boolean_param("sync_console", opt_sync_console);
 
-static int xpos, ypos;
-static unsigned char *video;
-
 #define CONRING_SIZE 16384
 #define CONRING_IDX_MASK(i) ((i)&(CONRING_SIZE-1))
 static char conring[CONRING_SIZE];
@@ -58,134 +50,8 @@ static char printk_prefix[16] = "";
 static char printk_prefix[16] = "";
 
 static int sercon_handle = -1;
-static int vgacon_enabled = 0;
-static int vgacon_keep    = 0;
-static int vgacon_lines   = 25;
-static const struct font_desc *font;
 
 static DEFINE_SPINLOCK(console_lock);
-
-/*
- * *******************************************************
- * *************** OUTPUT TO VGA CONSOLE *****************
- * *******************************************************
- */
-
-/* VGA text-mode definitions. */
-#define COLUMNS     80
-#define LINES       vgacon_lines
-#define ATTRIBUTE   7
-#define VIDEO_SIZE  (COLUMNS * LINES * 2)
-
-/* Clear the screen and initialize VIDEO, XPOS and YPOS.  */
-static void cls(void)
-{
-    memset(video, 0, VIDEO_SIZE);
-    xpos = ypos = 0;
-    vga_cursor_off();
-}
-
-static void init_vga(void)
-{
-    char *p;
-
-    if ( !vgacon_enabled )
-        return;
-
-    for ( p = opt_vga; p != NULL; p = strchr(p, ',') )
-    {
-        if ( *p == ',' )
-            p++;
-        if ( strncmp(p, "keep", 4) == 0 )
-            vgacon_keep = 1;
-        else if ( strncmp(p, "text-80x", 8) == 0 )
-            vgacon_lines = simple_strtoul(p + 8, NULL, 10);
-    }
-
-    video = setup_vga();
-    if ( !video )
-    {
-        vgacon_enabled = 0;
-        return;
-    }
-
-    switch ( vgacon_lines )
-    {
-    case 25:
-    case 30:
-        font = &font_vga_8x16;
-        break;
-    case 28:
-    case 34:
-        font = &font_vga_8x14;
-        break;
-    case 43:
-    case 50:
-    case 60:
-        font = &font_vga_8x8;
-        break;
-    default:
-        vgacon_lines = 25;
-        break;
-    }
-
-    if ( (font != NULL) && (vga_load_font(font, vgacon_lines) < 0) )
-    {
-        vgacon_lines = 25;
-        font = NULL;
-    }
-    
-    cls();
-}
-
-static void put_newline(void)
-{
-    xpos = 0;
-    ypos++;
-
-    if ( ypos >= LINES )
-    {
-        ypos = LINES-1;
-        memmove((char*)video, 
-                (char*)video + 2*COLUMNS, (LINES-1)*2*COLUMNS);
-        memset((char*)video + (LINES-1)*2*COLUMNS, 0, 2*COLUMNS);
-    }
-}
-
-static void putchar_console(int c)
-{
-    if ( !vgacon_enabled )
-        return;
-
-    if ( c == '\n' )
-    {
-        put_newline();
-    }
-    else
-    {
-        if ( xpos >= COLUMNS )
-            put_newline();
-        video[(xpos + ypos * COLUMNS) * 2]     = c & 0xFF;
-        video[(xpos + ypos * COLUMNS) * 2 + 1] = ATTRIBUTE;
-        ++xpos;
-    }
-}
-
-int fill_console_start_info(struct dom0_vga_console_info *ci)
-{
-    memset(ci, 0, sizeof(*ci));
-
-    if ( !vgacon_enabled )
-        return 0;
-
-    ci->video_type   = 1;
-    ci->video_width  = COLUMNS;
-    ci->video_height = LINES;
-    ci->txt_mode     = 3;
-    ci->txt_points   = font ? font->height : 16;
-
-    return 1;
-}
 
 /*
  * ********************************************************
@@ -328,7 +194,7 @@ static long guest_console_write(XEN_GUES
         serial_puts(sercon_handle, kbuf);
 
         for ( kptr = kbuf; *kptr != '\0'; kptr++ )
-            putchar_console(*kptr);
+            vga_putchar(*kptr);
 
         guest_handle_add_offset(buffer, kcount);
         count -= kcount;
@@ -395,7 +261,7 @@ static inline void __putstr(const char *
 
     while ( (c = *str++) != '\0' )
     {
-        putchar_console(c);
+        vga_putchar(c);
         putchar_console_ring(c);
     }
 }
@@ -455,10 +321,8 @@ 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;
-    }
-
-    init_vga();
+            vga_init();
+    }
 
     serial_set_rx_handler(sercon_handle, serial_rx);
 
@@ -510,10 +374,7 @@ void console_endboot(void)
         printk("\n");
     }
 
-    if ( !vgacon_keep )
-        vgacon_enabled = 0;
-    printk("Xen is %s VGA console.\n",
-           vgacon_keep ? "keeping" : "relinquishing");
+    vga_endboot();
 
     /*
      * If user specifies so, we fool the switch routine to redirect input
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/video/font_8x14.c
--- a/xen/drivers/video/font_8x14.c     Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/video/font_8x14.c     Wed Aug 16 18:20:03 2006 +0100
@@ -5,7 +5,7 @@
 /**********************************************/
 
 #include <xen/types.h>
-#include <xen/font.h>
+#include "font.h"
 
 #define FONTDATAMAX (256*14)
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/video/font_8x16.c
--- a/xen/drivers/video/font_8x16.c     Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/video/font_8x16.c     Wed Aug 16 18:20:03 2006 +0100
@@ -5,7 +5,7 @@
 /**********************************************/
 
 #include <xen/types.h>
-#include <xen/font.h>
+#include "font.h"
 
 #define FONTDATAMAX (256*16)
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/video/font_8x8.c
--- a/xen/drivers/video/font_8x8.c      Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/video/font_8x8.c      Wed Aug 16 18:20:03 2006 +0100
@@ -5,7 +5,7 @@
 /**********************************************/
 
 #include <xen/types.h>
-#include <xen/font.h>
+#include "font.h"
 
 #define FONTDATAMAX (256*8)
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/video/vga.c
--- a/xen/drivers/video/vga.c   Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/drivers/video/vga.c   Wed Aug 16 18:20:03 2006 +0100
@@ -8,13 +8,14 @@
 #include <xen/compile.h>
 #include <xen/init.h>
 #include <xen/lib.h>
+#include <xen/mm.h>
 #include <xen/errno.h>
 #include <xen/event.h>
 #include <xen/spinlock.h>
 #include <xen/console.h>
-#include <xen/font.h>
 #include <xen/vga.h>
 #include <asm/io.h>
+#include "font.h"
 
 /* Some of the code below is taken from SVGAlib.  The original,
    unmodified copyright notice for that code is below. */
@@ -159,12 +160,8 @@
  * into a single 16-bit quantity */
 #define VGA_OUT16VAL(v, r)       (((v) << 8) | (r))
 
-#if defined(__i386__) || defined(__x86_64__)
-# define vgabase 0
-# define VGA_OUTW_WRITE
-# define vga_readb(x) (*(x))
-# define vga_writeb(x,y) (*(y) = (x))
-#endif
+#define vgabase 0         /* use in/out port-access macros  */
+#define VGA_OUTW_WRITE    /* can use outw instead of 2xoutb */
 
 /*
  * generic VGA port read/write
@@ -187,17 +184,17 @@ static inline void vga_io_w_fast(uint16_
 
 static inline uint8_t vga_mm_r(void __iomem *regbase, uint16_t port)
 {
-    return readb(regbase + port);
+    return readb((char *)regbase + port);
 }
 
 static inline void vga_mm_w(void __iomem *regbase, uint16_t port, uint8_t val)
 {
-    writeb(val, regbase + port);
+    writeb(val, (char *)regbase + port);
 }
 
 static inline void vga_mm_w_fast(void __iomem *regbase, uint16_t port, uint8_t 
reg, uint8_t val)
 {
-    writew(VGA_OUT16VAL(val, reg), regbase + port);
+    writew(VGA_OUT16VAL(val, reg), (char *)regbase + port);
 }
 
 static inline uint8_t vga_r(void __iomem *regbase, uint16_t port)
@@ -324,24 +321,8 @@ static int detect_video(void *video_base
     return video_found;
 }
 
-static int detect_vga(void)
-{
-    /*
-     * Look at a number of well-known locations. Even if video is not at
-     * 0xB8000 right now, it will appear there when we set up text mode 3.
-     * 
-     * We assume if there is any sign of a video adaptor then it is at least
-     * VGA-compatible (surely noone runs CGA, EGA, .... these days?).
-     * 
-     * These checks are basically to detect headless server boxes.
-     */
-    return (detect_video(ioremap(0xA0000, 0x1000)) || 
-            detect_video(ioremap(0xB0000, 0x1000)) || 
-            detect_video(ioremap(0xB8000, 0x1000)));
-}
-
 /* This is actually code from vgaHWRestore in an old version of XFree86 :-) */
-void *setup_vga(void)
+static void *setup_vga(void)
 {
     /* The following VGA state was saved from a chip in text mode 3. */
     static unsigned char regs[] = {
@@ -358,13 +339,11 @@ void *setup_vga(void)
         0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x0c, 0x00, 0x0f, 0x08, 0x00
     };
 
+    char *video;
     int i, j;
 
-    if ( !detect_vga() )
-    {
-        printk("No VGA adaptor detected!\n");
-        return NULL;
-    }
+    if ( memory_is_conventional_ram(0xB8000) )
+        goto no_vga;
 
     inb(VGA_IS1_RC);
     outb(0x00, VGA_ATT_IW);
@@ -388,12 +367,19 @@ void *setup_vga(void)
     inb(VGA_IS1_RC);
     outb(0x20, VGA_ATT_IW);
 
-    return ioremap(0xB8000, 0x8000);
-}
-
-void vga_cursor_off(void)
-{
-    vga_wcrt(vgabase, VGA_CRTC_CURSOR_START, 0x20);
+    video = ioremap(0xB8000, 0x8000);
+
+    if ( !detect_video(video) )
+    {
+        iounmap(video);
+        goto no_vga;
+    }
+
+    return video;
+
+ no_vga:
+    printk("No VGA adaptor detected!\n");
+    return NULL;
 }
 
 static int vga_set_scanlines(unsigned scanlines)
@@ -473,7 +459,7 @@ static unsigned font_slot = 0;
 static unsigned font_slot = 0;
 integer_param("fontslot", font_slot);
 
-int vga_load_font(const struct font_desc *font, unsigned rows)
+static int vga_load_font(const struct font_desc *font, unsigned rows)
 {
     unsigned fontheight = font ? font->height : 16;
     uint8_t fsr = vga_rcrt(vgabase, VGA_CRTC_MAX_SCAN); /* Font size register 
*/
@@ -515,16 +501,19 @@ int vga_load_font(const struct font_desc
     {
         unsigned i, j;
         const uint8_t *data = font->data;
-        uint8_t *map = (uint8_t *)__va(0xA0000) + font_slot*2*CHAR_MAP_SIZE;
+        uint8_t *map;
+
+        map = ioremap(0xA0000 + font_slot*2*CHAR_MAP_SIZE, CHAR_MAP_SIZE);
 
         for ( i = j = 0; i < CHAR_MAP_SIZE; )
         {
-            vga_writeb(j < font->count * fontheight ? data[j++] : 0,
-                       map + i++);
+            writeb(j < font->count * fontheight ? data[j++] : 0, map + i++);
             if ( !(j % fontheight) )
                 while ( i & (FONT_HEIGHT_MAX - 1) )
-                    vga_writeb(0, map + i++);
+                    writeb(0, map + i++);
         }
+
+        iounmap(map);
     }
 
     /* First, the sequencer, Synchronous reset */
@@ -560,3 +549,142 @@ int vga_load_font(const struct font_desc
 
     return 0;
 }
+
+
+/*
+ * HIGH-LEVEL INITIALISATION AND TEXT OUTPUT.
+ */
+
+static int vgacon_enabled = 0;
+static int vgacon_keep    = 0;
+static int vgacon_lines   = 25;
+static const struct font_desc *font;
+
+static int xpos, ypos;
+static unsigned char *video;
+
+/* vga: comma-separated options. */
+static char opt_vga[30] = "";
+string_param("vga", opt_vga);
+
+/* VGA text-mode definitions. */
+#define COLUMNS     80
+#define LINES       vgacon_lines
+#define ATTRIBUTE   7
+#define VIDEO_SIZE  (COLUMNS * LINES * 2)
+
+void vga_init(void)
+{
+    char *p;
+
+    for ( p = opt_vga; p != NULL; p = strchr(p, ',') )
+    {
+        if ( *p == ',' )
+            p++;
+        if ( strncmp(p, "keep", 4) == 0 )
+            vgacon_keep = 1;
+        else if ( strncmp(p, "text-80x", 8) == 0 )
+            vgacon_lines = simple_strtoul(p + 8, NULL, 10);
+    }
+
+    video = setup_vga();
+    if ( !video )
+        return;
+
+    switch ( vgacon_lines )
+    {
+    case 25:
+    case 30:
+        font = &font_vga_8x16;
+        break;
+    case 28:
+    case 34:
+        font = &font_vga_8x14;
+        break;
+    case 43:
+    case 50:
+    case 60:
+        font = &font_vga_8x8;
+        break;
+    default:
+        vgacon_lines = 25;
+        break;
+    }
+
+    if ( (font != NULL) && (vga_load_font(font, vgacon_lines) < 0) )
+    {
+        vgacon_lines = 25;
+        font = NULL;
+    }
+    
+    /* Clear the screen. */
+    memset(video, 0, VIDEO_SIZE);
+    xpos = ypos = 0;
+
+    /* Disable cursor. */
+    vga_wcrt(vgabase, VGA_CRTC_CURSOR_START, 0x20);
+
+    vgacon_enabled = 1;
+}
+
+void vga_endboot(void)
+{
+    if ( !vgacon_enabled )
+        return;
+
+    if ( !vgacon_keep )
+        vgacon_enabled = 0;
+        
+    printk("Xen is %s VGA console.\n",
+           vgacon_keep ? "keeping" : "relinquishing");
+}
+
+
+static void put_newline(void)
+{
+    xpos = 0;
+    ypos++;
+
+    if ( ypos >= LINES )
+    {
+        ypos = LINES-1;
+        memmove((char*)video, 
+                (char*)video + 2*COLUMNS, (LINES-1)*2*COLUMNS);
+        memset((char*)video + (LINES-1)*2*COLUMNS, 0, 2*COLUMNS);
+    }
+}
+
+void vga_putchar(int c)
+{
+    if ( !vgacon_enabled )
+        return;
+
+    if ( c == '\n' )
+    {
+        put_newline();
+    }
+    else
+    {
+        if ( xpos >= COLUMNS )
+            put_newline();
+        video[(xpos + ypos * COLUMNS) * 2]     = c & 0xFF;
+        video[(xpos + ypos * COLUMNS) * 2 + 1] = ATTRIBUTE;
+        ++xpos;
+    }
+}
+
+int fill_console_start_info(struct dom0_vga_console_info *ci)
+{
+    memset(ci, 0, sizeof(*ci));
+
+    if ( !vgacon_enabled )
+        return 0;
+
+    ci->video_type   = 1;
+    ci->video_width  = COLUMNS;
+    ci->video_height = LINES;
+    ci->txt_mode     = 3;
+    ci->txt_points   = font ? font->height : 16;
+
+    return 1;
+}
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/asm-ia64/config.h
--- a/xen/include/asm-ia64/config.h     Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/include/asm-ia64/config.h     Wed Aug 16 18:20:03 2006 +0100
@@ -36,6 +36,8 @@
 #define supervisor_mode_kernel (0)
 
 #define MAX_DMADOM_PFN (0x7FFFFFFFUL >> PAGE_SHIFT) /* 31 addressable bits */
+
+#define CONFIG_VGA 1
 
 #ifndef __ASSEMBLY__
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/asm-x86/config.h
--- a/xen/include/asm-x86/config.h      Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/include/asm-x86/config.h      Wed Aug 16 18:20:03 2006 +0100
@@ -30,6 +30,8 @@
 
 #define CONFIG_ACPI 1
 #define CONFIG_ACPI_BOOT 1
+
+#define CONFIG_VGA 1
 
 #define HZ 100
 
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/asm-x86/io.h
--- a/xen/include/asm-x86/io.h  Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/include/asm-x86/io.h  Wed Aug 16 18:20:03 2006 +0100
@@ -7,6 +7,7 @@
 
 /* We don't need real ioremap() on Xen/x86. */
 #define ioremap(x,l) (__va(x))
+#define iounmap(p)   ((void)0)
 
 #define readb(x) (*(volatile char *)(x))
 #define readw(x) (*(volatile short *)(x))
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/xen/mm.h
--- a/xen/include/xen/mm.h      Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/include/xen/mm.h      Wed Aug 16 18:20:03 2006 +0100
@@ -97,4 +97,7 @@ unsigned long avail_scrub_pages(void);
 
 int guest_remove_page(struct domain *d, unsigned long gmfn);
 
+/* Returns TRUE if the memory at address @p is ordinary RAM. */
+int memory_is_conventional_ram(paddr_t p);
+
 #endif /* __XEN_MM_H__ */
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/xen/vga.h
--- a/xen/include/xen/vga.h     Wed Aug 16 18:11:33 2006 +0100
+++ b/xen/include/xen/vga.h     Wed Aug 16 18:20:03 2006 +0100
@@ -9,10 +9,16 @@
 #ifndef _XEN_VGA_H
 #define _XEN_VGA_H
 
-struct font_desc;
+#include <xen/config.h>
 
-void *setup_vga(void);
-void vga_cursor_off(void);
-int vga_load_font(const struct font_desc *, unsigned rows);
+#ifdef CONFIG_VGA
+void vga_init(void);
+void vga_endboot(void);
+void vga_putchar(int c);
+#else
+#define vga_init()     ((void)0)
+#define vga_endboot()  ((void)0)
+#define vga_putchar(c) ((void)0)
+#endif
 
 #endif /* _XEN_VGA_H */
diff -r 87165e688bc5 -r 3e75d9b1d556 linux-2.6-xen-sparse/arch/ia64/dig/setup.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/dig/setup.c        Wed Aug 16 18:20:03 
2006 +0100
@@ -0,0 +1,110 @@
+/*
+ * Platform dependent support for DIG64 platforms.
+ *
+ * Copyright (C) 1999 Intel Corp.
+ * Copyright (C) 1999, 2001 Hewlett-Packard Co
+ * Copyright (C) 1999, 2001, 2003 David Mosberger-Tang <davidm@xxxxxxxxxx>
+ * Copyright (C) 1999 VA Linux Systems
+ * Copyright (C) 1999 Walt Drummond <drummond@xxxxxxxxxxx>
+ * Copyright (C) 1999 Vijay Chander <vijay@xxxxxxxxxxxx>
+ */
+#include <linux/config.h>
+
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/kernel.h>
+#include <linux/kdev_t.h>
+#include <linux/string.h>
+#include <linux/tty.h>
+#include <linux/console.h>
+#include <linux/timex.h>
+#include <linux/sched.h>
+#include <linux/root_dev.h>
+
+#include <asm/io.h>
+#include <asm/machvec.h>
+#include <asm/system.h>
+
+void __init
+dig_setup (char **cmdline_p)
+{
+       unsigned int orig_x, orig_y, num_cols, num_rows, font_height;
+
+       /*
+        * Default to /dev/sda2.  This assumes that the EFI partition
+        * is physical disk 1 partition 1 and the Linux root disk is
+        * physical disk 1 partition 2.
+        */
+       ROOT_DEV = Root_SDA2;           /* default to second partition on first 
drive */
+
+#ifdef CONFIG_SMP
+       init_smp_config();
+#endif
+
+       memset(&screen_info, 0, sizeof(screen_info));
+
+       if (!ia64_boot_param->console_info.num_rows
+           || !ia64_boot_param->console_info.num_cols)
+       {
+               printk(KERN_WARNING "dig_setup: warning: invalid screen-info, 
guessing 80x25\n");
+               orig_x = 0;
+               orig_y = 0;
+               num_cols = 80;
+               num_rows = 25;
+               font_height = 16;
+       } else {
+               orig_x = ia64_boot_param->console_info.orig_x;
+               orig_y = ia64_boot_param->console_info.orig_y;
+               num_cols = ia64_boot_param->console_info.num_cols;
+               num_rows = ia64_boot_param->console_info.num_rows;
+               font_height = 400 / num_rows;
+       }
+
+       screen_info.orig_x = orig_x;
+       screen_info.orig_y = orig_y;
+       screen_info.orig_video_cols  = num_cols;
+       screen_info.orig_video_lines = num_rows;
+       screen_info.orig_video_points = font_height;
+       screen_info.orig_video_mode = 3;        /* XXX fake */
+       screen_info.orig_video_isVGA = 1;       /* XXX fake */
+       screen_info.orig_video_ega_bx = 3;      /* XXX fake */
+#ifdef CONFIG_XEN
+       if (!is_running_on_xen())
+               return;
+
+       if (xen_start_info->console.dom0.info_size >=
+           sizeof(struct dom0_vga_console_info)) {
+               const struct dom0_vga_console_info *info =
+                       (struct dom0_vga_console_info *)(
+                               (char *)xen_start_info +
+                               xen_start_info->console.dom0.info_off);
+               screen_info.orig_video_mode = info->txt_mode;
+               screen_info.orig_video_isVGA = info->video_type;
+               screen_info.orig_video_lines = info->video_height;
+               screen_info.orig_video_cols = info->video_width;
+               screen_info.orig_video_points = info->txt_points;
+               screen_info.lfb_width = info->video_width;
+               screen_info.lfb_height = info->video_height;
+               screen_info.lfb_depth = info->lfb_depth;
+               screen_info.lfb_base = info->lfb_base;
+               screen_info.lfb_size = info->lfb_size;
+               screen_info.lfb_linelength = info->lfb_linelen;
+               screen_info.red_size = info->red_size;
+               screen_info.red_pos = info->red_pos;
+               screen_info.green_size = info->green_size;
+               screen_info.green_pos = info->green_pos;
+               screen_info.blue_size = info->blue_size;
+               screen_info.blue_pos = info->blue_pos;
+               screen_info.rsvd_size = info->rsvd_size;
+               screen_info.rsvd_pos = info->rsvd_pos;
+       }
+       screen_info.orig_y = screen_info.orig_video_lines - 1;
+       xen_start_info->console.domU.mfn = 0;
+       xen_start_info->console.domU.evtchn = 0;
+#endif
+}
+
+void __init
+dig_irq_init (void)
+{
+}
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/drivers/video/font.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/drivers/video/font.h  Wed Aug 16 18:20:03 2006 +0100
@@ -0,0 +1,22 @@
+/*
+ *  font.h -- `Soft' font definitions
+ *
+ *  Created 1995 by Geert Uytterhoeven
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License.  See the file COPYING in the main directory of this archive
+ *  for more details.
+ */
+
+#ifndef _XEN_FONT_H
+#define _XEN_FONT_H
+
+struct font_desc {
+    const char *name;
+    unsigned width, height, count;
+    const void *data;
+};
+
+extern const struct font_desc font_vga_8x8, font_vga_8x14, font_vga_8x16;
+
+#endif /* _XEN_FONT_H */
diff -r 87165e688bc5 -r 3e75d9b1d556 xen/include/xen/font.h
--- a/xen/include/xen/font.h    Wed Aug 16 18:11:33 2006 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
- *  font.h -- `Soft' font definitions
- *
- *  Created 1995 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive
- *  for more details.
- */
-
-#ifndef _XEN_FONT_H
-#define _XEN_FONT_H
-
-struct font_desc {
-    const char *name;
-    unsigned width, height, count;
-    const void *data;
-};
-
-extern const struct font_desc font_vga_8x8, font_vga_8x14, font_vga_8x16;
-
-#endif /* _XEN_FONT_H */

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.