From patchwork Fri Dec 23 12:25:45 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Graeme Russ X-Patchwork-Id: 133024 X-Patchwork-Delegate: graeme.russ@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id B8F3DB718D for ; Fri, 23 Dec 2011 23:27:40 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4BEFF28257; Fri, 23 Dec 2011 13:27:16 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id F-0I+d9mRbny; Fri, 23 Dec 2011 13:27:15 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id BFA2D28226; Fri, 23 Dec 2011 13:27:13 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 50D1828228 for ; Fri, 23 Dec 2011 13:26:51 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SPMz0eA5TsZH for ; Fri, 23 Dec 2011 13:26:50 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-yw0-f44.google.com (mail-yw0-f44.google.com [209.85.213.44]) by theia.denx.de (Postfix) with ESMTPS id 3E75F28246 for ; Fri, 23 Dec 2011 13:26:37 +0100 (CET) Received: by mail-yw0-f44.google.com with SMTP id j72so6037299yhj.3 for ; Fri, 23 Dec 2011 04:26:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=m8MdIMi0AVg4LJTcozkA2jd19gasFyVDx84e4MNtzl4=; b=V/6VRUFw6uvXU+7oTWOL8HQuasgciAmpi458++F/NziX3cXRxXMatd9Df2ifWmwF2x n33z5qZyrNcod41oato13EvRu2SICQQELYiWGF3m9kwVCZgvU7jPEH9vZdgZZOLfhfd2 4TM9lMQ8L0ZPwpQ4DasQD4C0xwA9mGEb0+qSc= Received: by 10.236.183.133 with SMTP id q5mr20293219yhm.38.1324643197829; Fri, 23 Dec 2011 04:26:37 -0800 (PST) Received: from localhost.localdomain (d58-106-90-149.sbr801.nsw.optusnet.com.au. [58.106.90.149]) by mx.google.com with ESMTPS id y17sm32624370anc.2.2011.12.23.04.26.35 (version=SSLv3 cipher=OTHER); Fri, 23 Dec 2011 04:26:37 -0800 (PST) From: Graeme Russ To: u-boot@lists.denx.de Date: Fri, 23 Dec 2011 23:25:45 +1100 Message-Id: <1324643151-23642-9-git-send-email-graeme.russ@gmail.com> X-Mailer: git-send-email 1.7.5.2.317.g391b14 In-Reply-To: <1324643151-23642-1-git-send-email-graeme.russ@gmail.com> References: <1324643151-23642-1-git-send-email-graeme.russ@gmail.com> Subject: [U-Boot] [RFC 08/14] CHECKPATCH: arch/x86/lib/* X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de --- arch/x86/lib/bios.S | 134 +++++++++++++++++++++++++-------------- arch/x86/lib/realmode_switch.S | 61 +++++++++++-------- 2 files changed, 122 insertions(+), 73 deletions(-) diff --git a/arch/x86/lib/bios.S b/arch/x86/lib/bios.S index ce8deb5..239aaa9 100644 --- a/arch/x86/lib/bios.S +++ b/arch/x86/lib/bios.S @@ -246,11 +246,9 @@ rm_int1f: rm_def_int: iret - /* - * All interrupt jumptable entries jump to here - * after pushing the interrupt vector number onto the - * stack. + * All interrupt jumptable entries jump to here after pushing the + * interrupt vector number onto the stack. */ any_interrupt16: MAKE_BIOS_STACK @@ -272,7 +270,8 @@ gs movw OFFS_VECTOR(%bp), %ax je Lint_1ah movw $0xffff, %ax jmp Lout -Lint_10h: /* VGA BIOS services */ +Lint_10h: + /* VGA BIOS services */ call bios_10h jmp Lout Lint_11h: @@ -281,35 +280,42 @@ Lint_11h: Lint_12h: call bios_12h jmp Lout -Lint_13h: /* BIOS disk services */ +Lint_13h: + /* BIOS disk services */ call bios_13h jmp Lout -Lint_15h: /* Misc. BIOS services */ +Lint_15h: + /* Misc. BIOS services */ call bios_15h jmp Lout -Lint_16h: /* keyboard services */ +Lint_16h: + /* keyboard services */ call bios_16h jmp Lout -Lint_1ah: /* PCI bios */ +Lint_1ah: + /* PCI bios */ call bios_1ah jmp Lout Lout: cmpw $0, %ax je Lhandeled - /* Insert code for unhandeled INTs here. + /* + * Insert code for unhandeled INTs here. * - * ROLO prints a message to the console - * (we could do that but then we're in 16bit mode - * so we'll have to get back into 32bit mode - * to use the console I/O routines (if we do this - * we shuls make int 0x10 and int 0x16 work as well)) + * ROLO prints a message to the console we could do that but then + * we're in 16bit mode so we'll have to get back into 32bit mode + * to use the console I/O routines (if we do this we should make + * int 0x10 and int 0x16 work as well) */ Lhandeled: RESTORE_CALLERS_STACK - addw $2,%sp /* dump vector number */ - iret /* return from interrupt */ + /* dump vector number */ + addw $2,%sp + + /* return from interrupt */ + iret /* ************************************************************ @@ -327,22 +333,24 @@ gs movw OFFS_AX(%bp), %ax je Lvid_cfg movw $0xffff, %ax ret -Lcur_pos: /* Read Cursor Position and Size */ +Lcur_pos: + /* Read Cursor Position and Size */ gs movw $0, OFFS_CX(%bp) gs movw $0, OFFS_DX(%bp) xorw %ax, %ax ret -Lvid_state: /* Get Video State */ -gs movw $(80 << 8|0x03), OFFS_AX(%bp) /* 80 columns, 80x25, 16 colors */ +Lvid_state: + /* Get Video State - 80 columns, 80x25, 16 colors */ +gs movw $(80 << 8|0x03), OFFS_AX(%bp) gs movw $0, OFFS_BX(%bp) xorw %ax, %ax ret -Lvid_cfg: /* Video Subsystem Configuration (EGA/VGA) */ -gs movw $0x10, OFFS_BX(%bp) /* indicate CGA/MDA/HGA */ +Lvid_cfg: + /* Video Subsystem Configuration (EGA/VGA) - indicate CGA/MDA/HGA */ +gs movw $0x10, OFFS_BX(%bp) xorw %ax, %ax ret - /* ************************************************************ * BIOS interrupt 11h -- Equipment determination @@ -355,7 +363,6 @@ gs movw %ax, OFFS_AX(%bp) xorw %ax, %ax ret - /* ************************************************************ * BIOS interrupt 12h -- Get Memory Size @@ -370,16 +377,18 @@ cs movw ram_in_64kb_chunks, %ax b12_more_than_640k: movw $0x280, %ax b12_return: -gs movw %ax, OFFS_AX(%bp) /* return number of kilobytes in ax */ + /* return number of kilobytes in ax */ +gs movw %ax, OFFS_AX(%bp) gs movw OFFS_FLAGS(%bp), %ax - andw $0xfffe, %ax /* clear carry -- function succeeded */ + + /* clear carry -- function succeeded */ + andw $0xfffe, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret - /* ************************************************************ * BIOS interrupt 13h -- Disk services @@ -394,12 +403,13 @@ gs movw OFFS_AX(%bp), %ax ret Lfunc_15h: gs movw OFFS_AX(%bp), %ax - andw $0xff, %ax /* return AH=0->drive not present */ + + /* return AH=0->drive not present */ + andw $0x00ff, %ax gs movw %ax, OFFS_AX(%bp) xorw %ax, %ax ret - /* *********************************************************** * BIOS interrupt 15h -- Miscellaneous services @@ -417,9 +427,12 @@ gs movw OFFS_AX(%bp), %ax movw $0xffff, %ax ret -Lfunc_c0h: /* Return System Configuration Parameters (PS2 only) */ +Lfunc_c0h: + /* Return System Configuration Parameters (PS2 only) */ gs movw OFFS_FLAGS(%bp), %ax - orw $1, %ax /* return carry -- function not supported */ + + /* return carry -- function not supported */ + orw $1, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret @@ -430,38 +443,56 @@ gs movw OFFS_AX(%bp), %ax cmpw $1, %ax je Lfunc_e801h gs movw OFFS_FLAGS(%bp), %ax - orw $1, %ax /* return carry -- function not supported */ + + /* return carry -- function not supported */ + orw $1, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret -Lfunc_e801h: /* Get memory size for >64M Configurations */ +Lfunc_e801h: + /* Get memory size for >64M Configurations */ cs movw ram_in_64kb_chunks, %ax cmpw $0x100, %ax ja e801_more_than_16mb - shlw $6, %ax /* multiply by 64 */ - subw $0x400, %ax /* 1st meg does not count */ -gs movw %ax, OFFS_AX(%bp) /* return memory size between 1M and 16M in 1kb chunks in AX and CX */ + /* multiply by 64 */ + shlw $6, %ax + + /* 1st meg does not count */ + subw $0x400, %ax + + /* return memory size between 1M and 16M in 1kb chunks in AX and CX */ +gs movw %ax, OFFS_AX(%bp) gs movw %ax, OFFS_CX(%bp) -gs movw $0, OFFS_BX(%bp) /* set BX and DX to 0*/ + + /* set BX and DX to 0*/ +gs movw $0, OFFS_BX(%bp) gs movw $0, OFFS_DX(%bp) gs movw OFFS_FLAGS(%bp), %ax - andw $0xfffe, %ax /* clear carry -- function succeeded */ + + /* clear carry -- function succeeded */ + andw $0xfffe, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret e801_more_than_16mb: - subw $0x100, %ax /* subtract 16MB */ + /* subtract 16MB */ + subw $0x100, %ax -gs movw $0x3c00, OFFS_AX(%bp) /* return 0x3c00 (16MB-1MB) in AX and CX */ + /* return 0x3c00 (16MB-1MB) in AX and CX */ +gs movw $0x3c00, OFFS_AX(%bp) gs movw $0x3c00, OFFS_CX(%bp) -gs movw %ax, OFFS_BX(%bp) /* set BX and DX to number of 64kb chunks above 16MB */ + + /* set BX and DX to number of 64kb chunks above 16MB */ +gs movw %ax, OFFS_BX(%bp) gs movw %ax, OFFS_DX(%bp) gs movw OFFS_FLAGS(%bp), %ax - andw $0xfffe, %ax /* clear carry -- function succeeded */ + + /* clear carry -- function succeeded */ + andw $0xfffe, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret @@ -473,18 +504,22 @@ cs movw ram_in_64kb_chunks, %ax movw $0x100, %ax b88_not_more_than16: shlw $6, %ax - subw $0x400, %ax /* 1st meg does not count */ -gs movw %ax, OFFS_AX(%bp) /* return number of kilobytes between 16MB and 16MB in ax */ + /* 1st meg does not count */ + subw $0x400, %ax + + /* return number of kilobytes between 16MB and 16MB in ax */ +gs movw %ax, OFFS_AX(%bp) gs movw OFFS_FLAGS(%bp), %ax - andw $0xfffe, %ax /* clear carry -- function succeeded */ + + /* clear carry -- function succeeded */ + andw $0xfffe, %ax gs movw %ax, OFFS_FLAGS(%bp) xorw %ax, %ax ret - /* ************************************************************ * BIOS interrupt 16h -- keyboard services @@ -498,7 +533,8 @@ gs movw OFFS_AX(%bp), %ax movw $0xffff, %ax ret Lfunc_03h: - xorw %ax, %ax /* do nothing -- function not supported */ + /* do nothing -- function not supported */ + xorw %ax, %ax ret /* @@ -514,7 +550,9 @@ gs movw OFFS_AX(%bp), %ax ret Lfunc_b1h: call realmode_pci_bios - xorw %ax, %ax /* do nothing -- function not supported */ + + /* do nothing -- function not supported */ + xorw %ax, %ax ret diff --git a/arch/x86/lib/realmode_switch.S b/arch/x86/lib/realmode_switch.S index 7ee709a..c4c4c43 100644 --- a/arch/x86/lib/realmode_switch.S +++ b/arch/x86/lib/realmode_switch.S @@ -44,12 +44,13 @@ * e40 ss; */ -#define a32 .byte 0x67; /* address size prefix 32 */ -#define o32 .byte 0x66; /* operand size prefix 32 */ +#define a32 .byte 0x67; /* address size prefix 32 */ +#define o32 .byte 0x66; /* operand size prefix 32 */ .section .realmode, "ax" .code16 - /* 16bit protected mode code here */ + + /* 16bit protected mode code here */ .globl realmode_enter realmode_enter: o32 pusha @@ -69,20 +70,23 @@ o32 pushf movw %ax, %gs lidt realmode_idt_ptr - movl %cr0, %eax /* Go back into real mode by */ - andl $0x7ffffffe, %eax /* clearing PE to 0 */ + /* Go back into real mode by clearing PE to 0 */ + movl %cr0, %eax + andl $0x7ffffffe, %eax movl %eax, %cr0 - ljmp $0x0,$do_realmode /* switch to real mode */ -do_realmode: /* realmode code from here */ + /* switch to real mode */ + ljmp $0x0,$do_realmode + +do_realmode: + /* realmode code from here */ movw %cs,%ax movw %ax,%ds movw %ax,%es movw %ax,%fs movw %ax,%gs - /* create a temporary stack */ - + /* create a temporary stack */ movw $0xc0, %ax movw %ax, %ss movw $0x200, %ax @@ -114,26 +118,29 @@ o32 popf popw %ss movl %eax, %esp cs movl temp_eax, %eax - wbinvd /* self-modifying code, - * better flush the cache */ + + /* self-modifying code, better flush the cache */ + wbinvd .byte 0x9a /* lcall */ temp_ip: .word 0 /* new ip */ temp_cs: .word 0 /* new cs */ + realmode_ret: - /* save eax, esp and ss */ + /* save eax, esp and ss */ cs movl %eax, saved_eax movl %esp, %eax cs movl %eax, saved_esp movw %ss, %ax cs movw %ax, saved_ss - /* restore the stack, note that we set sp to 0x244; + /* + * restore the stack, note that we set sp to 0x244; * pt_regs is 0x44 bytes long and we push the structure - * backwards on to the stack, bottom first */ - + * backwards on to the stack, bottom first + */ movw $0xc0, %ax movw %ax, %ss movw $0x244, %ax @@ -169,12 +176,15 @@ cs movw temp_ip, %ax pushl %ebx o32 cs lidt saved_idt -o32 cs lgdt saved_gdt /* Set GDTR */ +o32 cs lgdt saved_gdt - movl %cr0, %eax /* Go back into protected mode */ - orl $1,%eax /* reset PE to 1 */ + /* Go back into protected mode reset PE to 1 */ + movl %cr0, %eax + orl $1,%eax movl %eax, %cr0 - jmp next_line /* flush prefetch queue */ + + /* flush prefetch queue */ + jmp next_line next_line: movw $return_ptr, %ax movw %ax,%bp @@ -182,12 +192,13 @@ o32 cs ljmp *(%bp) .code32 protected_mode: - movl $0x18,%eax /* reload GDT[3] */ - movw %ax,%fs /* reset FS */ - movw %ax,%ds /* reset DS */ - movw %ax,%gs /* reset GS */ - movw %ax,%es /* reset ES */ - movw %ax,%ss /* reset SS */ + /* Reload segment registers */ + movl $0x18, %eax + movw %ax, %fs + movw %ax, %ds + movw %ax, %gs + movw %ax, %es + movw %ax, %ss movl saved_protected_mode_esp, %eax movl %eax, %esp popf