1/* $NetBSD: start_pxe.S,v 1.7 2019/09/27 08:57:10 gson 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 mov %cs, %ax 67 mov %ax, %ds 68 69 # set up %ss and %sp 70 movl $_end, %eax /* top of bss */ 71 shrl $4, %eax /* as a segment */ 72 addw $0x2001, %ax /* and + 128k */ 73 movw %ax, %ss /* for stack */ 74 movw $0xfffc, %sp /* %sp at top of it */ 75 76 call gdt_fixup 77 78 /* change to protected mode */ 79 calll _C_LABEL(real_to_prot) 80 .code32 81 82 /* clear bss */ 83 xorl %eax, %eax 84 movl $_C_LABEL(edata), %edi 85 movl $_C_LABEL(end), %ecx 86 subl %edi, %ecx 87 cld 88 rep 89 stosb 90 91 /* ...and call main()! */ 92 call _C_LABEL(main) 93 94ENTRY(_rtt) 95 call _C_LABEL(prot_to_real) 96 .code16 97 movw $efail, %si 98 call message 99 100#ifdef notyet 101 /* sleep for 3s = 0x2dc6c0 us */ 102 movb $0x86, %ah 103 mov $0x002d, %cx 104 mov $0xc6c0, %dx 105 int $0x15 106 107 /* call ROM BASIC */ 108 int $0x18 109#else 11010: 111 cli 112 hlt 113 jmp 10b 114#endif 115 116efail: .asciz "Boot fail\r\n" 117