1/* $NetBSD: start_pxe.S,v 1.4 2005/11/11 21:42:13 dsl Exp $ */ 2 3/* 4 * Copyright 2001 Wasabi Systems, Inc. 5 * All rights reserved. 6 * 7 * Written by Jason R. Thorpe for Wasabi Systems, Inc. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed for the NetBSD Project by 20 * Wasabi Systems, Inc. 21 * 4. The name of Wasabi Systems, Inc. may not be used to endorse 22 * or promote products derived from this software without specific prior 23 * written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38/* 39 * PXE startup 40 * parts from sys/arch/i386/stand/lib/crt/bootsect/start_bootsect.S 41 * 42 * See PXE SPEC 4.4.5 (pdf page 88) 43 */ 44 45#include <machine/asm.h> 46#include <sys/bootblock.h> 47 48 .text 49ENTRY(start) 50 .code16 51 /* Boot parameter area in same format as boot and bootxx */ 52 jmp 1f 53 .balign 4 54 .long X86_BOOT_MAGIC_PXE 55 .globl _C_LABEL(boot_params) 56_C_LABEL(boot_params): 57 .long 1f - _C_LABEL(boot_params) 58#include <boot_params.S> 59 .space 4 * 4 /* some spare */ 601: 61 # start is loaded at 0x0:0x7c00 but we want 0x7c0:0x0 62 # ljmp to the next instruction to adjust %cs 63 ljmp $0x7c0, $2f 642: 65 # set up %ds 66 xorl %eax, %eax 67 mov %cs, %ax 68 mov %ax, %ds 69 70 # set up %ss and %esp 71 mov %ax, %ss 72 movl $0xfffc, %esp /* stack at top of 64k segment */ 73 74 call gdt_fixup 75 76 /* change to protected mode */ 77 calll _C_LABEL(real_to_prot) 78 .code32 79 80 /* clear bss */ 81 xorl %eax, %eax 82 movl $_C_LABEL(edata), %edi 83 movl $_C_LABEL(end), %ecx 84 subl %edi, %ecx 85 cld 86 rep 87 stosb 88 89 /* ...and call main()! */ 90 call _C_LABEL(main) 91 92 .globl _C_LABEL(exit) 93_C_LABEL(exit): 94 call _C_LABEL(prot_to_real) 95 .code16 96 movw $efail, %si 97 call message 98 99#ifdef notyet 100 /* sleep for 3s = 0x2dc6c0 us */ 101 movb $0x86, %ah 102 mov $0x002d, %cx 103 mov $0xc6c0, %dx 104 int $0x15 105 106 /* call ROM BASIC */ 107 int $0x18 108#else 10910: 110 cli 111 hlt 112 jmp 10b 113#endif 114 115efail: .asciz "Boot fail\r\n" 116