1/* $NetBSD: start_pxe.S,v 1.5 2010/12/20 01:12:45 jakllsch 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 92ENTRY(_rtt) 93 call _C_LABEL(prot_to_real) 94 .code16 95 movw $efail, %si 96 call message 97 98#ifdef notyet 99 /* sleep for 3s = 0x2dc6c0 us */ 100 movb $0x86, %ah 101 mov $0x002d, %cx 102 mov $0xc6c0, %dx 103 int $0x15 104 105 /* call ROM BASIC */ 106 int $0x18 107#else 10810: 109 cli 110 hlt 111 jmp 10b 112#endif 113 114efail: .asciz "Boot fail\r\n" 115