From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LYTT0-0004un-IZ for qemu-devel@nongnu.org; Sat, 14 Feb 2009 17:58:34 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LYTSz-0004u4-HA for qemu-devel@nongnu.org; Sat, 14 Feb 2009 17:58:33 -0500 Received: from [199.232.76.173] (port=32932 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LYTSy-0004tZ-T3 for qemu-devel@nongnu.org; Sat, 14 Feb 2009 17:58:32 -0500 Received: from mout.perfora.net ([74.208.4.194]:54247) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LYTSy-0008Ki-Fn for qemu-devel@nongnu.org; Sat, 14 Feb 2009 17:58:32 -0500 From: Cory Fields Date: Sat, 14 Feb 2009 18:57:05 -0500 Message-Id: <1234655826-25283-4-git-send-email-FOSS@AtlasTechnologiesInc.com> In-Reply-To: <1234655826-25283-1-git-send-email-FOSS@AtlasTechnologiesInc.com> References: <1234655826-25283-1-git-send-email-FOSS@AtlasTechnologiesInc.com> Subject: [Qemu-devel] [PATCH] enable quietbios and biosprompt checks Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Note: Default behavior is changed. Now it will default to skipping the boot menu. Signed-off-by: Cory Fields --- bios/rombios.c | 90 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 67 insertions(+), 23 deletions(-) diff --git a/bios/rombios.c b/bios/rombios.c index ee46e42..39a79b1 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -144,6 +144,12 @@ #define BX_PCIBIOS 1 #define BX_APM 1 +#define BX_CFG_CTL_PORT 0x510 +#define BX_CFG_DATA_PORT 0x511 +#define BX_CFG_SIGNATURE 0x0 +#define BX_CFG_BIOSPROMPT 0x07 +#define BX_CFG_QUIETBIOS 0x08 + #define BX_USE_ATADRV 1 #define BX_ELTORITO_BOOT 1 @@ -2014,6 +2020,32 @@ Bit16u i; ipl_entry_t *e; return 1; } +int qemu_cfg_port_probe() +{ + outw(BX_CFG_CTL_PORT, BX_CFG_SIGNATURE); + if (inb(BX_CFG_DATA_PORT) != 'Q') return 0; + if (inb(BX_CFG_DATA_PORT) != 'E') return 0; + if (inb(BX_CFG_DATA_PORT) != 'M') return 0; + if (inb(BX_CFG_DATA_PORT) != 'U') return 0; + return 1; +} + +int qemu_biosprompt_probe() +{ + if(qemu_cfg_port_probe()) + outw(BX_CFG_CTL_PORT, BX_CFG_BIOSPROMPT); + if (inb(BX_CFG_DATA_PORT)) return 1; + return 0; +} + +int qemu_quietbios_probe() +{ + if(qemu_cfg_port_probe()) + outw(BX_CFG_CTL_PORT, BX_CFG_QUIETBIOS); + if (inb(BX_CFG_DATA_PORT)) return 1; + return 0; +} + #if BX_ELTORITO_BOOT void interactive_bootkey() @@ -2478,7 +2510,7 @@ static int await_ide(when_done,base,timeout) void ata_detect( ) { Bit16u ebda_seg=read_word(0x0040,0x000E); - Bit8u hdcount, cdcount, device, type; + Bit8u hdcount, cdcount, device, type, quietbios; Bit8u buffer[0x0200]; #if BX_MAX_ATA_INTERFACES > 0 @@ -2738,26 +2770,28 @@ 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 (!quietbios){ + 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; + } } } } @@ -2767,7 +2801,7 @@ void ata_detect( ) write_byte(ebda_seg,&EbdaData->ata.cdcount, cdcount); write_byte(0x40,0x75, hdcount); - printf("\n"); + if (!quietbios) printf("\n"); // FIXME : should use bios=cmos|auto|disable bits // FIXME : should know about translation bits @@ -10613,7 +10647,11 @@ post_default_ints: mov ax, #0xc780 call rom_scan + call _qemu_quietbios_probe + test al,al + jnz skip_bios_print call _print_bios_banner + skip_bios_print: #if BX_ROMBIOS32 call rombios32_init @@ -10660,7 +10698,13 @@ post_default_ints: call rom_scan #if BX_ELTORITO_BOOT - call _interactive_bootkey + + call _qemu_biosprompt_probe + test al,al + jz skip_timer + call _interactive_bootkey + +skip_timer: #endif // BX_ELTORITO_BOOT sti ;; enable interrupts -- 1.6.0.6