public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Cory Fields <FOSS@AtlasTechnologiesInc.com>
To: kvm@vger.kernel.org
Subject: [PATCH 4/4] probe for quietboot and fastboot in rombios
Date: Fri,  6 Feb 2009 19:17:05 -0500	[thread overview]
Message-ID: <1233965825-17970-5-git-send-email-FOSS@AtlasTechnologiesInc.com> (raw)
In-Reply-To: <1233965825-17970-1-git-send-email-FOSS@AtlasTechnologiesInc.com>

If fastboot is set skip "Press f12 for boot menu"
If quietboot is set silence all text output
Errors should still be shown

Probes are split into separate functions to make the asm easier.

Signed-off-by: Cory Fields <FOSS@AtlasTechnologiesInc.com>
---
 bios/rombios.c |   80 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 57 insertions(+), 23 deletions(-)

diff --git a/bios/rombios.c b/bios/rombios.c
index c4f6ccd..b5e3846 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -144,6 +144,11 @@
 #define BX_PCIBIOS       1
 #define BX_APM           1
 
+#define BX_CFG_CTL_PORT    0x510
+#define BX_CFG_DATA_PORT   0x511
+#define BX_CFG_FASTBOOT    0x07
+#define BX_CFG_QUIETBOOT   0x08
+
 #define BX_USE_ATADRV    1
 #define BX_ELTORITO_BOOT 1
 
@@ -2014,6 +2019,20 @@ Bit16u i; ipl_entry_t *e;
   return 1;
 }
 
+static int qemu_fastboot_probe()
+{
+      outw(BX_CFG_CTL_PORT, BX_CFG_FASTBOOT);
+      if (inb(BX_CFG_DATA_PORT)) return 1;
+      return 0;
+    }
+
+static int qemu_quietboot_probe()
+{
+      outw(BX_CFG_CTL_PORT, BX_CFG_QUIETBOOT);
+      if (inb(BX_CFG_DATA_PORT)) return 1;
+      return 0;
+    }
+
 #if BX_ELTORITO_BOOT
   void
 interactive_bootkey()
@@ -2481,6 +2500,9 @@ void ata_detect( )
   Bit16u ebda_seg=read_word(0x0040,0x000E);
   Bit8u  hdcount, cdcount, device, type;
   Bit8u  buffer[0x0200];
+  Bit8u  quietboot;
+
+  quietboot = qemu_quietboot_probe();
 
 #if BX_MAX_ATA_INTERFACES > 0
   write_byte(ebda_seg,&EbdaData->ata.channels[0].iface,ATA_IFACE_ISA);
@@ -2739,36 +2761,38 @@ void ata_detect( )
           break;
         }
 
-      switch (type) {
-        case ATA_TYPE_ATA:
-          printf("ata%d %s: ",channel,slave?" slave":"master");
-          i=0; while(c=read_byte(get_SS(),model+i++)) printf("%c",c);
-	  if (sizeinmb < (1UL<<16))
-            printf(" ATA-%d Hard-Disk (%4u MBytes)\n", version, (Bit16u)sizeinmb);
-	  else
-            printf(" ATA-%d Hard-Disk (%4u GBytes)\n", version, (Bit16u)(sizeinmb>>10));
-          break;
-        case ATA_TYPE_ATAPI:
-          printf("ata%d %s: ",channel,slave?" slave":"master");
-          i=0; while(c=read_byte(get_SS(),model+i++)) printf("%c",c);
-          if(read_byte(ebda_seg,&EbdaData->ata.devices[device].device)==ATA_DEVICE_CDROM)
-            printf(" ATAPI-%d CD-Rom/DVD-Rom\n",version);
-          else
-            printf(" ATAPI-%d Device\n",version);
-          break;
-        case ATA_TYPE_UNKNOWN:
-          printf("ata%d %s: Unknown device\n",channel,slave?" slave":"master");
-          break;
+      if (!quietboot){
+        switch (type) {
+          case ATA_TYPE_ATA:
+            printf("ata%d %s: ",channel,slave?" slave":"master");
+            i=0; while(c=read_byte(get_SS(),model+i++)) printf("%c",c);
+	    if (sizeinmb < (1UL<<16))
+              printf(" ATA-%d Hard-Disk (%4u MBytes)\n", version, (Bit16u)sizeinmb);
+            else
+              printf(" ATA-%d Hard-Disk (%4u GBytes)\n", version, (Bit16u)(sizeinmb>>10));
+            break;
+          case ATA_TYPE_ATAPI:
+            printf("ata%d %s: ",channel,slave?" slave":"master");
+            i=0; while(c=read_byte(get_SS(),model+i++)) printf("%c",c);
+            if(read_byte(ebda_seg,&EbdaData->ata.devices[device].device)==ATA_DEVICE_CDROM)
+              printf(" ATAPI-%d CD-Rom/DVD-Rom\n",version);
+            else
+              printf(" ATAPI-%d Device\n",version);
+            break;
+          case ATA_TYPE_UNKNOWN:
+            printf("ata%d %s: Unknown device\n",channel,slave?" slave":"master");
+            break;
+          }
         }
       }
     }
-
+  
   // Store the devices counts
   write_byte(ebda_seg,&EbdaData->ata.hdcount, hdcount);
   write_byte(ebda_seg,&EbdaData->ata.cdcount, cdcount);
   write_byte(0x40,0x75, hdcount);
 
-  printf("\n");
+  if (!quietboot) printf("\n");
 
   // FIXME : should use bios=cmos|auto|disable bits
   // FIXME : should know about translation bits
@@ -10669,7 +10693,11 @@ post_default_ints:
   mov  ax, #0xc780
   call rom_scan
 
+  call   _qemu_quietboot_probe
+  test   al,al
+  jnz    skip_bios_print
   call _print_bios_banner
+  skip_bios_print:
 
 #if BX_ROMBIOS32
   call rombios32_init
@@ -10716,7 +10744,13 @@ post_default_ints:
   call rom_scan
 
 #if BX_ELTORITO_BOOT
-  call _interactive_bootkey
+
+ call   _qemu_fastboot_probe
+ test   al,al
+ jnz    skip_timer
+ call _interactive_bootkey
+ 
+skip_timer:
 #endif // BX_ELTORITO_BOOT
 
   sti        ;; enable interrupts
-- 
1.6.0.6


  parent reply	other threads:[~2009-02-06 23:19 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-07  0:17 [PATCH 0/4] Arguments to skip boot menu and to hide bios output Cory Fields
2009-02-06 23:49 ` Anthony Liguori
2009-02-07 18:20   ` Cory Fields
2009-02-09  8:44     ` Daniel P. Berrange
     [not found]   ` <200902071303.20187.Cory@atlastechnologiesinc.com>
2009-02-08  0:02     ` Anthony Liguori
2009-02-07  0:17 ` [PATCH 1/4] Define new channels for quietboot and fastboot Cory Fields
2009-02-07  0:17 ` [PATCH 2/4] add args for fastboot and quietboot Cory Fields
2009-02-07  0:17 ` [PATCH 3/4] probe for quietboot in vgabios Cory Fields
2009-02-07  0:17 ` Cory Fields [this message]
2009-02-07 11:09 ` [PATCH 0/4] Arguments to skip boot menu and to hide bios output Daniel P. Berrange
2009-02-07 16:01   ` Anthony Liguori
2009-02-07 11:13 ` Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1233965825-17970-5-git-send-email-FOSS@AtlasTechnologiesInc.com \
    --to=foss@atlastechnologiesinc.com \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox