Home | History | Annotate | Line # | Download | only in pxeboot
pxe_call.S revision 1.2.2.2
      1  1.2.2.2  kanaoka /*	$NetBSD: pxe_call.S,v 1.2.2.2 2002/03/27 17:24:23 kanaoka Exp $	*/
      2  1.2.2.2  kanaoka 
      3  1.2.2.2  kanaoka /*
      4  1.2.2.2  kanaoka  * Copyright 2001 Wasabi Systems, Inc.
      5  1.2.2.2  kanaoka  * All rights reserved.
      6  1.2.2.2  kanaoka  *
      7  1.2.2.2  kanaoka  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
      8  1.2.2.2  kanaoka  *
      9  1.2.2.2  kanaoka  * Redistribution and use in source and binary forms, with or without
     10  1.2.2.2  kanaoka  * modification, are permitted provided that the following conditions
     11  1.2.2.2  kanaoka  * are met:
     12  1.2.2.2  kanaoka  * 1. Redistributions of source code must retain the above copyright
     13  1.2.2.2  kanaoka  *    notice, this list of conditions and the following disclaimer.
     14  1.2.2.2  kanaoka  * 2. Redistributions in binary form must reproduce the above copyright
     15  1.2.2.2  kanaoka  *    notice, this list of conditions and the following disclaimer in the
     16  1.2.2.2  kanaoka  *    documentation and/or other materials provided with the distribution.
     17  1.2.2.2  kanaoka  * 3. All advertising materials mentioning features or use of this software
     18  1.2.2.2  kanaoka  *    must display the following acknowledgement:
     19  1.2.2.2  kanaoka  *	This product includes software developed for the NetBSD Project by
     20  1.2.2.2  kanaoka  *	Wasabi Systems, Inc.
     21  1.2.2.2  kanaoka  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
     22  1.2.2.2  kanaoka  *    or promote products derived from this software without specific prior
     23  1.2.2.2  kanaoka  *    written permission.
     24  1.2.2.2  kanaoka  *
     25  1.2.2.2  kanaoka  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
     26  1.2.2.2  kanaoka  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     27  1.2.2.2  kanaoka  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     28  1.2.2.2  kanaoka  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
     29  1.2.2.2  kanaoka  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     30  1.2.2.2  kanaoka  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     31  1.2.2.2  kanaoka  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     32  1.2.2.2  kanaoka  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     33  1.2.2.2  kanaoka  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     34  1.2.2.2  kanaoka  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     35  1.2.2.2  kanaoka  * POSSIBILITY OF SUCH DAMAGE.
     36  1.2.2.2  kanaoka  */
     37  1.2.2.2  kanaoka 
     38  1.2.2.2  kanaoka /*
     39  1.2.2.2  kanaoka  * Low level PXE BIOS call glue.
     40  1.2.2.2  kanaoka  */
     41  1.2.2.2  kanaoka 
     42  1.2.2.2  kanaoka #include <machine/asm.h>
     43  1.2.2.2  kanaoka 
     44  1.2.2.2  kanaoka #define	addr32	.byte 0x67
     45  1.2.2.2  kanaoka #define	data32	.byte 0x66
     46  1.2.2.2  kanaoka #define	farcall	.byte 0x9a
     47  1.2.2.2  kanaoka 
     48  1.2.2.2  kanaoka ENTRY(pxecall_bangpxe)
     49  1.2.2.2  kanaoka 	pushl	%ebp
     50  1.2.2.2  kanaoka 	movl	%esp, %ebp
     51  1.2.2.2  kanaoka 	pushl	%ebx
     52  1.2.2.2  kanaoka 	pushl	%ecx
     53  1.2.2.2  kanaoka 	pushl	%edx
     54  1.2.2.2  kanaoka 
     55  1.2.2.2  kanaoka 	/* For simplicity, just move all 32 bits. */
     56  1.2.2.2  kanaoka 	movl	8(%ebp), %ebx
     57  1.2.2.2  kanaoka 
     58  1.2.2.2  kanaoka 	pushw	_C_LABEL(pxe_command_buf_seg)
     59  1.2.2.2  kanaoka 	pushw	_C_LABEL(pxe_command_buf_off)
     60  1.2.2.2  kanaoka 	pushw	%bx
     61  1.2.2.2  kanaoka 
     62  1.2.2.2  kanaoka 	call	_C_LABEL(prot_to_real)		# enter real mode
     63  1.2.2.2  kanaoka 
     64  1.2.2.2  kanaoka 	/* The encoding is: 0x9a offlo offhi seglo seghi */
     65  1.2.2.2  kanaoka 	farcall
     66  1.2.2.2  kanaoka 	.globl	_C_LABEL(bangpxe_off)
     67  1.2.2.2  kanaoka _C_LABEL(bangpxe_off):
     68  1.2.2.2  kanaoka 	.word	0
     69  1.2.2.2  kanaoka 	.globl	_C_LABEL(bangpxe_seg)
     70  1.2.2.2  kanaoka _C_LABEL(bangpxe_seg):
     71  1.2.2.2  kanaoka 	.word	0
     72  1.2.2.2  kanaoka 
     73  1.2.2.2  kanaoka 	data32
     74  1.2.2.2  kanaoka 	call	_C_LABEL(real_to_prot)		# leave real mode
     75  1.2.2.2  kanaoka 
     76  1.2.2.2  kanaoka 	add	$6, %esp
     77  1.2.2.2  kanaoka 
     78  1.2.2.2  kanaoka 	popl	%edx
     79  1.2.2.2  kanaoka 	popl	%ecx
     80  1.2.2.2  kanaoka 	popl	%ebx
     81  1.2.2.2  kanaoka 	popl	%ebp
     82  1.2.2.2  kanaoka 	ret
     83  1.2.2.2  kanaoka 
     84  1.2.2.2  kanaoka ENTRY(pxecall_pxenv)
     85  1.2.2.2  kanaoka 	pushl	%ebp
     86  1.2.2.2  kanaoka 	movl	%esp, %ebp
     87  1.2.2.2  kanaoka 	pushl	%ebx
     88  1.2.2.2  kanaoka 	pushl	%ecx
     89  1.2.2.2  kanaoka 	pushl	%edx
     90  1.2.2.2  kanaoka 	pushl	%edi
     91  1.2.2.2  kanaoka 
     92  1.2.2.2  kanaoka 	/* For simplicity, just move all 32 bits. */
     93  1.2.2.2  kanaoka 	movl	8(%ebp), %ebx
     94  1.2.2.2  kanaoka 
     95  1.2.2.2  kanaoka 	call	_C_LABEL(prot_to_real)		# enter real mode
     96  1.2.2.2  kanaoka 
     97  1.2.2.2  kanaoka 	/* prot_to_real() has already set %es to BOOTSEG */
     98  1.2.2.2  kanaoka 	addr32
     99  1.2.2.2  kanaoka 	leal	_C_LABEL(pxe_command_buf), %edi
    100  1.2.2.2  kanaoka 
    101  1.2.2.2  kanaoka 	/* The encoding is: 0x9a offlo offhi seglo seghi */
    102  1.2.2.2  kanaoka 	farcall
    103  1.2.2.2  kanaoka 	.globl	_C_LABEL(pxenv_off)
    104  1.2.2.2  kanaoka _C_LABEL(pxenv_off):
    105  1.2.2.2  kanaoka 	.word	0
    106  1.2.2.2  kanaoka 	.globl	_C_LABEL(pxenv_seg)
    107  1.2.2.2  kanaoka _C_LABEL(pxenv_seg):
    108  1.2.2.2  kanaoka 	.word	0
    109  1.2.2.2  kanaoka 
    110  1.2.2.2  kanaoka 	data32
    111  1.2.2.2  kanaoka 	call	_C_LABEL(real_to_prot)		# leave real mode
    112  1.2.2.2  kanaoka 
    113  1.2.2.2  kanaoka 	popl	%edi
    114  1.2.2.2  kanaoka 	popl	%edx
    115  1.2.2.2  kanaoka 	popl	%ecx
    116  1.2.2.2  kanaoka 	popl	%ebx
    117  1.2.2.2  kanaoka 	popl	%ebp
    118  1.2.2.2  kanaoka 	ret
    119