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

Re: [Xen-users] Qemu bios timeout



You have to modify the /tools/firmware/rombios/rombios.c

I did some work on this based on some patches found on xen-devel.

I'll attach a patch to rombios.c and a hvmloader build on 3.2.0 with
rombios patches applied.

Please don't look too close at this patch as this was my first try
with bios routines... ;)


Cheers,

Stephan



Nick Anderson schrieb:
Does anyone know how to change the bios timeout for qemu when dealing with HVMs? Sometimes getting connected with vnc takes a bit, It would be nice to have a bit more time.

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


--
Stephan Seitz
Senior System Administrator

*netz-haut* e.K.
multimediale kommunikation

zweierweg 22
97074 würzburg

fon: +49 931 2876247
fax: +49 931 2876248

web: www.netz-haut.de <http://www.netz-haut.de/>

registriergericht: amtsgericht würzburg, hra 5054
--- xen-3.2-3.2.0/tools/firmware/rombios/rombios.c      2008-01-17 
00:21:33.000000000 +0100
+++ xen-3.2-3.2.0.new/tools/firmware/rombios/rombios.c  2008-01-21 
10:11:11.404418186 +0100
@@ -858,8 +858,6 @@ typedef struct {
   flags_t flags;
   } iret_addr_t;
 
-
-
 static Bit8u          inb();
 static Bit8u          inb_cmos();
 static void           outb();
@@ -959,6 +957,27 @@ static char CVSID[] = "$Id: rombios.c,v 
 /* Offset to skip the CVS $Id: prefix */ 
 #define bios_version_string  (CVSID + 4)
 
+#define SC_BLACK       0
+#define SC_BLUE                1
+#define SC_GREEN       2
+#define SC_CYAN                3
+#define SC_RED         4
+#define SC_MAGENTA     5
+#define SC_BROWN       6
+#define SC_LIGHTGRAY   7
+#define SC_DARKGRAY    8
+#define SC_LIGHTBLUE   9
+#define SC_LIGHTGREEN  10
+#define SC_LIGHTCYAN   11
+#define SC_LIGHTRED    12
+#define SC_LIGHTMAGENTA 13
+#define SC_YELLOW      14
+#define SC_WHITE       15
+
+Bit8u bios_textcolor = 15; //SC_LIGHTGRAY;
+Bit8u bios_backgroundcolor = 0; //SC_BLACK;
+
+
 #define BIOS_PRINTF_HALT     1
 #define BIOS_PRINTF_SCREEN   2
 #define BIOS_PRINTF_INFO     4
@@ -1529,7 +1548,50 @@ wrch(c)
   pop  bp
   ASM_END
 }
- 
+
+  void
+_wrchs(c,cg)
+  Bit8u c;
+  Bit8u cg;
+{
+  ASM_START
+  push bp
+  mov  bp, sp
+
+  push bx
+  push cx
+
+  mov  ah, #0x09 ;; write character at cursor position
+  mov  al, 4[bp] ;; the character
+  mov  bx, 6[bp] ;; 0001 blue and 1110 yellow
+  mov  bh, #0x00 ;; bh is the page number and left alone by now
+  mov  cx, #0x01 ;; number of characters
+  int #0x10
+
+  pop  cx
+  pop  bx
+  
+  pop bp
+  ASM_END
+}
+
+//  mov  bh, #0x00 ;; page
+//  mov  ah, #0x03 ;; get cursor position dh row dl column
+//  int  #0x10
+//  add  dl, #0x01 ;; increase column
+//  mov  ah, #0x02 ;; set cursor position
+//  int #0x10
+
+void wrchs(c,fg,bg)
+  Bit8u fg;
+  Bit8u bg;
+{
+  Bit8u cg;
+  cg = (bg<<4)+fg;
+  _wrchs(c,cg); // screen output with color, character is overwritten by 
typewriter
+  wrch(c); // typewriter (colored if on screen, otherwise simple
+}
+
   void
 send(action, c)
   Bit16u action;
@@ -1547,8 +1609,13 @@ send(action, c)
   if (action & BIOS_PRINTF_INFO) outb(INFO_PORT, c);
 #endif
   if (action & BIOS_PRINTF_SCREEN) {
-    if (c == '\n') wrch('\r');
-    wrch(c);
+    if (c == '\n') {
+       wrch('\r');
+       wrch(c);
+    }
+    else {
+       wrchs(c, bios_textcolor, bios_backgroundcolor);
+    }
   }
 }
 
@@ -1585,6 +1652,24 @@ put_uint(action, val, width, neg)
   send(action, val - (nval * 10) + '0');
 }
 
+  void
+put_luint(action, val, width, neg)
+  Bit16u action;
+  unsigned long val;
+  short width;
+  bx_bool neg;
+{
+  unsigned long nval = val / 10;
+  if (nval)
+    put_luint(action, nval, width - 1, neg);
+  else {
+    while (--width > 0) send(action, ' ');
+    if (neg) send(action, '-');
+    }
+  send(action, val - (nval * 10) + '0');
+}
+
+
 //--------------------------------------------------------------------------
 // bios_printf()
 //   A compact variable argument printf function which prints its output via
@@ -1603,7 +1688,7 @@ bios_printf(action, s)
   bx_bool  in_format;
   short i;
   Bit16u  *arg_ptr;
-  Bit16u   arg_seg, arg, nibble, shift_count, format_width;
+  Bit16u   arg_seg, arg, nibble, hibyte, shift_count, format_width, hexadd;
 
   arg_ptr = &s;
   arg_seg = get_SS();
@@ -1630,17 +1715,49 @@ bios_printf(action, s)
       else {
         arg_ptr++; // increment to next arg
         arg = read_word(arg_seg, arg_ptr);
-        if (c == 'x') {
+        if (c == 'x' || c == 'X') {
           if (format_width == 0)
             format_width = 4;
+         if (c == 'x')
+           hexadd = 'a';
+         else
+           hexadd = 'A';
           for (i=format_width-1; i>=0; i--) {
             nibble = (arg >> (4 * i)) & 0x000f;
-            send (action, (nibble<=9)? (nibble+'0') : (nibble-10+'A'));
+            send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd));
             }
           }
         else if (c == 'u') {
           put_uint(action, arg, format_width, 0);
           }
+       else if (c == 'l') {
+         s++;
+         c = read_byte(get_CS(), s); /* is it ld,lx,lu? */
+         arg_ptr++; /* increment to next arg */
+         hibyte = read_word(arg_seg, arg_ptr);
+         if (c == 'd') {
+           if (hibyte & 0x8000)
+             put_luint(action, 0L-(((Bit32u) hibyte << 16) | arg), 
format_width-1, 1);
+           else
+             put_luint(action, ((Bit32u) hibyte << 16) | arg, format_width, 0);
+         }
+         else if (c == 'u') {
+           put_luint(action, ((Bit32u) hibyte << 16) | arg, format_width, 0);
+         }
+         else if (c == 'x' || c == 'X')
+         {
+           if (format_width == 0)
+             format_width = 8;
+           if (c == 'x')
+             hexadd = 'a';
+           else
+             hexadd = 'A';
+           for (i=format_width-1; i>=0; i--) {
+             nibble = ((((Bit32u) hibyte << 16) | arg) >> (4 * i)) & 0x000f;
+             send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd));
+             }
+          }
+        }
         else if (c == 'd') {
           if (arg & 0x8000)
             put_int(action, -arg, format_width - 1, 1);
@@ -1893,6 +2010,8 @@ shutdown_status_panic(status)
 void
 print_bios_banner()
 {
+  bios_textcolor=SC_WHITE;
+  bios_backgroundcolor=SC_BLACK;
   printf(BX_APPNAME" BIOS, %d cpu%s, ", BX_SMP_PROCESSORS, 
BX_SMP_PROCESSORS>1?"s":"");
   printf("%s %s\n", bios_cvs_version_string, bios_date_string);
 #if BX_TCGBIOS
@@ -1994,7 +2113,9 @@ print_boot_device(type)
   /* NIC appears as type 0x80 */ 
   if (type == 0x80 ) type = 0x4;
   if (type == 0 || type > 0x4) BX_PANIC("Bad drive type\n"); 
-  printf("Booting from %s...\n", drivetypes[type]);
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+  printf("\n\nBooting from %s...\n", drivetypes[type]);
 }
 
 //--------------------------------------------------------------------------
@@ -2007,6 +2128,8 @@ print_boot_failure(type, reason)
 {
   if (type == 0 || type > 0x3) BX_PANIC("Bad drive type\n"); 
 
+  bios_textcolor=SC_RED;
+  bios_backgroundcolor=SC_BLACK;
   printf("Boot from %s failed", drivetypes[type]);
   if (type < 4) {
     /* Report the reason too */
@@ -2026,11 +2149,340 @@ print_boot_failure(type, reason)
 print_cdromboot_failure( code )
   Bit16u code;
 {
+  bios_textcolor=SC_RED;
+  bios_backgroundcolor=SC_BLACK;
   bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "CDROM boot failure code 
: %04x\n",code);
   
   return;
 }
 
+
+#define WAIT_HZ 18
+/**
+ * Check for keystroke.
+ * @returns    True if keystroke available, False if not.
+ */
+Bit8u check_for_keystroke()
+{
+ASM_START
+    mov  ax, #0x100
+    int  #0x16
+    jz   no_key
+    mov  al, #1
+    jmp  done
+no_key:
+    xor  al, al
+done:
+ASM_END
+}
+
+/**
+ * Get keystroke.
+ * @returns    BIOS scan code.
+ */
+Bit8u get_keystroke()
+{
+ASM_START
+    mov  ax, #0x0
+    int  #0x16
+    xchg ah, al
+ASM_END
+}
+
+/**
+ * Waits (sleeps) for the given number of ticks.
+ * Checks for keystroke.
+ *
+ * @returns BIOS scan code if available, 0 if not.
+ * @param   ticks       Number of ticks to sleep.
+ * @param   stop_on_key Whether to stop immediately upon keypress.
+ */
+Bit8u wait(ticks, stop_on_key)
+  Bit16u ticks;
+  Bit8u stop_on_key;
+{
+    long ticks_to_wait, delta;
+    Bit32u prev_ticks, t;
+    Bit8u scan_code = 0;
+
+    /*
+     * The 0:046c wraps around at 'midnight' according to a 18.2Hz clock.
+     * We also have to be careful about interrupt storms.
+     */
+    ticks_to_wait = ticks;
+    prev_ticks = read_dword(0x0, 0x46c);
+    do
+    {
+        t = read_dword(0x0, 0x46c);
+        if (t > prev_ticks)
+        {
+            delta = t - prev_ticks;     /* The temp var is required or bcc 
screws up. */
+            ticks_to_wait -= delta;
+        }
+        else if (t < prev_ticks)
+            ticks_to_wait -= t;         /* wrapped */
+        prev_ticks = t;
+
+        if (check_for_keystroke())
+        {
+            scan_code = get_keystroke();
+            bios_printf(BIOS_PRINTF_DEBUG, "Key pressed: %x\n", scan_code);
+            if (stop_on_key)
+                return scan_code;
+        }
+    } while (ticks_to_wait > 0);
+    return scan_code;
+}
+
+void clearscreen() {
+    /* Hide cursor, clear screen and move cursor to starting position */
+ASM_START
+        push bx
+        push cx
+        push dx
+
+        mov  ax, #0x100
+        mov  cx, #0x1000
+        int  #0x10
+
+        mov  ax, #0x700
+        mov  bh, #7
+        xor  cx, cx
+        mov  dx, #0x184f
+        int  #0x10
+
+        mov  ax, #0x200
+        xor  bx, bx
+        xor  dx, dx
+        int  #0x10
+
+        pop  dx
+        pop  cx
+        pop  bx
+ASM_END
+}
+
+void move_cursor(col,row)
+Bit8u col;
+Bit8u row;
+{
+ASM_START
+  push bp
+  mov  bp, sp
+
+  push bx
+  mov  ax, #0x200
+  xor  bx,bx
+  mov  dl, 4[bp]
+  mov  dh, 6[bp]
+  int  #0x10
+
+  pop  bx
+  pop  bp
+ASM_END
+}
+
+int bootmenu(selected)
+  int selected;
+{
+    Bit8u scode;
+    int max;
+    Bit8u screencol=21;
+    Bit8u screenrow=5;
+
+    /* get the number of boot devices */
+    max = read_word(IPL_SEG, IPL_COUNT_OFFSET);
+
+    bios_textcolor = SC_BLUE;
+    bios_backgroundcolor = SC_LIGHTGRAY;
+
+    for(;;) {
+        if (selected > max || selected < 1) selected = 1;
+        clearscreen();
+       bios_textcolor = SC_BLUE;
+        bios_backgroundcolor = SC_LIGHTGRAY;
+       screenrow=5;
+       move_cursor (screencol,screenrow++);
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, 
"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%%c%c%c%c%c",218,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,191);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c              
Boot Menu             %c",179,179);
+       move_cursor (screencol,screenrow++);
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, 
"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%%c%c%c%c%c",195,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,180);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c                 
                   %c",179,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c  == Select a 
Boot First device ==  %c",179,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c                 
                   %c",179,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c            1. 
",179);
+       if (selected==1) {
+           bios_textcolor = SC_LIGHTGRAY;
+           bios_backgroundcolor = SC_BLUE;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "Floppy     ");
+       if (selected==1) {
+           bios_textcolor = SC_BLUE;
+           bios_backgroundcolor = SC_LIGHTGRAY;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "          %c",179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c            2. 
",179);
+       if (selected==2) {
+           bios_textcolor = SC_LIGHTGRAY;
+           bios_backgroundcolor = SC_BLUE;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "Hard drive ");
+       if (selected==2) {
+           bios_textcolor = SC_BLUE;
+           bios_backgroundcolor = SC_LIGHTGRAY;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "          %c",179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c            3. 
",179);
+       if (selected==3) {
+           bios_textcolor = SC_LIGHTGRAY;
+           bios_backgroundcolor = SC_BLUE;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "CD-ROM     ");
+       if (selected==3) {
+           bios_textcolor = SC_BLUE;
+           bios_backgroundcolor = SC_LIGHTGRAY;
+           }
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "          %c",179);
+        if (max == 4) {
+           move_cursor (screencol,screenrow++);
+           bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c            
4. ",179);
+           if (selected==4) {
+               bios_textcolor = SC_LIGHTGRAY;
+               bios_backgroundcolor = SC_BLUE;
+               }
+           bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "Network    ");
+           if (selected==4) {
+               bios_textcolor = SC_BLUE;
+               bios_backgroundcolor = SC_LIGHTGRAY;
+               }
+           bios_printf(BIOS_PRINTF_SCREEN
+           
+            | BIOS_PRINTF_INFO, "          %c",179);
+       }
+       move_cursor (screencol,screenrow++);
+       bios_textcolor = SC_BLUE;
+       bios_backgroundcolor = SC_LIGHTGRAY;
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c                 
                   %c",179,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c                 
                   %c",179,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c      Currently 
selected: %d         %c",179,selected,179);
+       move_cursor (screencol,screenrow++);
+        bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c                 
                   %c",179,179);
+       move_cursor (screencol,screenrow++);
+       bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "%c%c%c%c%c%c%c%c 
%c%c:Move Enter:Accept %c%c%c%c%c%c%c%c",
+                                                           
192,196,196,196,196,196,196,180,24,25,195,196,196,196,196,196,196,180);
+
+        do {
+            scode = wait(WAIT_HZ, 1);
+        } while (scode == 0);
+        switch(scode) {
+        case 0x02:
+        case 0x03:
+        case 0x04:
+            selected = scode - 1;
+            break;
+        case 0x05:
+            if (max == 4)
+                selected = scode -1 ;
+            else
+                scode = 0;
+            break;
+        case 0x48:
+            selected -= 1;
+            if (selected < 1)
+                selected = 1;
+            scode = 0;
+            break;
+        case 0x50:
+            selected += 1;
+            if (selected > max)
+                selected = max;
+            scode = 0;
+            break;
+        case 0x1c:
+            break;
+        default:
+            scode = 0;
+            break;
+        }
+        if (scode != 0)
+            break;
+    }
+
+    switch (selected) {
+    case 1:
+        return 0x3D;
+    case 2:
+        return 0x3E;
+    case 3:
+        return 0x3F;
+    case 4:
+        return 0x58;
+    default:
+        return 0;
+    }
+}
+
+void interactive_bootkey()
+{
+    Bit16u i;
+    Bit8u scan = 0;
+    bios_textcolor=SC_LIGHTGRAY;
+    bios_backgroundcolor=SC_BLACK;
+    bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "\n\nPress ");
+    bios_textcolor=SC_WHITE;
+    bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, "F10");
+    bios_textcolor=SC_LIGHTGRAY;
+    bios_printf(BIOS_PRINTF_SCREEN | BIOS_PRINTF_INFO, " to select boot 
device... ");
+    for (i = 5; i > 0; i--)
+    {
+        _wrchs(i+48,(SC_WHITE<<4)+SC_BLACK);
+        scan = wait(WAIT_HZ, 0);
+        switch (scan) {
+        case 0x3D:
+        case 0x3E:
+        case 0x3F:
+        case 0x58:
+            break;
+        case 0x44:
+            scan = bootmenu(inb_cmos(0x3d) & 0x0f);
+            break;
+        default:
+            scan = 0;
+            break;
+        }
+        if (scan != 0)
+            break;
+    }
+
+    /* set the default based on the keypress or menu */
+    switch(scan) {
+    case 0x3D:
+        outb_cmos(0x3d, 0x01);
+        break;
+    case 0x3E:
+        outb_cmos(0x3d, 0x02);
+        break;
+    case 0x3F:
+        outb_cmos(0x3d, 0x03);
+        break;
+    case 0x58:
+        outb_cmos(0x3d, 0x04);
+        break;
+    default:
+        break;
+    }
+}
+
+
 void
 nmi_handler_msg()
 {
@@ -2362,6 +2814,9 @@ void ata_detect( )
         }
       }
 
+    bios_textcolor=SC_LIGHTGRAY;
+    bios_backgroundcolor=SC_BLACK;
+
     type=read_byte(ebda_seg,&EbdaData->ata.devices[device].type);
     
     // Now we send a IDENTIFY command to ATA device 
@@ -2870,6 +3325,9 @@ Bit32u lba;
     if ( !(status & ATA_CB_STAT_BSY) ) break;
     }
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   if (status & ATA_CB_STAT_ERR) {
     BX_DEBUG_ATA("ata_cmd_data_out : read error\n");
     return 2;
@@ -2978,6 +3436,9 @@ Bit32u length;
   channel = device / 2;
   slave = device % 2;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   // Data out is not supported yet
   if (inout == ATA_DATA_OUT) {
     BX_INFO("ata_cmd_packet: DATA_OUT not supported yet\n");
@@ -3593,6 +4054,9 @@ int15_function(regs, ES, DS, FLAGS)
   Bit16u bRegister;
   Bit8u irqDisable;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
 BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax);
 
   switch (regs.u.r8.ah) {
@@ -3901,6 +4365,9 @@ int15_function_mouse(regs, ES, DS, FLAGS
   Bit8u  comm_byte, prev_command_byte;
   Bit8u  ret, mouse_data1, mouse_data2, mouse_data3;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
 BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax);
 
   switch (regs.u.r8.ah) {
@@ -4335,6 +4802,9 @@ int16_function(DI, SI, BP, SP, BX, DX, C
   Bit8u scan_code, ascii_code, shift_flags, count;
   Bit16u kbd_code, max;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT16("int16: AX=%04x BX=%04x CX=%04x DX=%04x \n", AX, BX, CX, DX);
 
   switch (GET_AH()) {
@@ -4501,6 +4971,9 @@ inhibit_mouse_int_and_events()
 {
   Bit8u command_byte, prev_command_byte;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   // Turn off IRQ generation and aux data line
   if ( inb(0x64) & 0x02 )
     BX_PANIC(panic_msg_keyb_buffer_full,"inhibmouse");
@@ -4869,6 +5342,9 @@ int13_harddisk(DS, ES, DI, SI, BP, ELDX,
   Bit16u size, count;
   Bit8u  device, status;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_HD("int13_harddisk: AX=%04x BX=%04x CX=%04x DX=%04x 
ES=%04x\n", AX, BX, CX, DX, ES);
 
   write_byte(0x0040, 0x008e, 0);  // clear completion flag
@@ -5262,6 +5738,9 @@ int13_cdrom(EHBX, DS, ES, DI, SI, BP, EL
   Bit32u lba;
   Bit16u count, segment, offset, i, size;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_CD("int13_cdrom: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", 
AX, BX, CX, DX, ES);
   // BX_DEBUG_INT13_CD("int13_cdrom: SS=%04x DS=%04x ES=%04x DI=%04x 
SI=%04x\n",get_SS(), DS, ES, DI, SI);
   
@@ -5613,6 +6092,9 @@ int13_eltorito(DS, ES, DI, SI, BP, SP, B
 {
   Bit16u ebda_seg=read_word(0x0040,0x000E);
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_ET("int13_eltorito: AX=%04x BX=%04x CX=%04x DX=%04x 
ES=%04x\n", AX, BX, CX, DX, ES);
   // BX_DEBUG_INT13_ET("int13_eltorito: SS=%04x DS=%04x ES=%04x DI=%04x 
SI=%04x\n",get_SS(), DS, ES, DI, SI);
   
@@ -5689,6 +6171,9 @@ int13_cdemu(DS, ES, DI, SI, BP, SP, BX, 
   Bit16u before, segment, offset;
   Bit8u  atacmd[12];
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_ET("int13_cdemu: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", 
AX, BX, CX, DX, ES);
   //BX_DEBUG_INT13_ET("int13_cdemu: SS=%04x ES=%04x DI=%04x SI=%04x\n", 
get_SS(), ES, DI, SI);
   
@@ -5957,6 +6442,9 @@ int13_harddisk(DS, ES, DI, SI, BP, ELDX,
   Bit32u   lba;
   Bit16u   error;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_HD("int13 harddisk: AX=%04x BX=%04x CX=%04x DX=%04x 
ES=%04x\n", AX, BX, CX, DX, ES);
 
   write_byte(0x0040, 0x008e, 0);  // clear completion flag
@@ -6662,6 +7150,9 @@ floppy_drive_recal(drive)
   Bit8u  val8, dor;
   Bit16u curr_cyl_offset;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   // set 40:3e bit 7 to 0
   val8 = read_byte(0x0000, 0x043e);
   val8 &= 0x7f;
@@ -6754,6 +7245,9 @@ int13_diskette_function(DS, ES, DI, SI, 
   Bit8u  drive_type, num_floppies, ah;
   Bit16u es, last_addr;
 
+  bios_textcolor=SC_LIGHTGRAY;
+  bios_backgroundcolor=SC_BLACK;
+
   BX_DEBUG_INT13_FL("int13_diskette: AX=%04x BX=%04x CX=%04x DX=%04x 
ES=%04x\n", AX, BX, CX, DX, ES);
   // BX_DEBUG_INT13_FL("int13_diskette: SS=%04x DS=%04x ES=%04x DI=%04x 
SI=%04x\n",get_SS(), get_DS(), ES, DI, SI);
 
@@ -7624,6 +8118,9 @@ Bit16u seq_nr;
 
   struct ipl_entry e;
 
+  bios_textcolor=SC_WHITE;
+  bios_backgroundcolor=SC_BLACK;
+
   // if BX_ELTORITO_BOOT is not defined, old behavior
   //   check bit 5 in CMOS reg 0x2d.  load either 0x00 or 0x80 into DL
   //   in preparation for the intial INT 13h (0=floppy A:, 0x80=C:)
@@ -7966,6 +8463,10 @@ int1a_function(regs, ds, iret_addr)
     case 0xb1:
       // real mode PCI BIOS functions now handled in assembler code
       // this C code handles the error code for information only
+
+      bios_textcolor=SC_LIGHTGRAY;
+      bios_backgroundcolor=SC_BLACK;
+
       if (regs.u.r8.bl == 0xff) {
         BX_INFO("PCI BIOS: PCI not present\n");
       } else if (regs.u.r8.bl == 0x81) {
@@ -9825,7 +10326,9 @@ post_default_ints:
   call _cdemu_init
   ;;
 #endif // BX_ELTORITO_BOOT
- 
+
+  call _interactive_bootkey
+
 #if BX_TCGBIOS
   call _tcpa_calling_int19h          /* specs: 8.2.3 step 1 */
   call _tcpa_add_event_separators    /* specs: 8.2.3 step 2 */

Attachment: hvmloader
Description: Binary data

Attachment: s_seitz.vcf
Description: Vcard

Attachment: signature.asc
Description: OpenPGP digital signature

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

 


Rackspace

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