Annotation of Net2/arch/i386/netboot/asm.s, revision 1.1.1.1

1.1       root        1: /* netboot
                      2:  *
                      3:  * asm.s,v
                      4: # Revision 1.1  1993/07/08  16:03:50  brezak
                      5: # Diskless boot prom code from Jim McKim ([email protected])
                      6: #
                      7:  * Revision 1.3  1993/06/08  14:22:36  mckim
                      8:  * Fast in line assembly bcopy(), bzero().
                      9:  *
                     10:  * Revision 1.2  1993/05/28  20:01:26  mckim
                     11:  * Fixed various StartProg() problems.
                     12:  *
                     13:  * Revision 1.1.1.1  1993/05/28  11:41:08  mckim
                     14:  * Initial version.
                     15:  *
                     16:  *
                     17:  * source in this file came from
                     18:  * the 386BSD boot blocks written by Julian Elischer.
                     19:  *
                     20:  * Ported to boot 386BSD by Julian Elischer ([email protected]) Sept 1992
                     21:  *
                     22:  * Mach Operating System
                     23:  * Copyright (c) 1992, 1991 Carnegie Mellon University
                     24:  * All Rights Reserved.
                     25:  * 
                     26:  * Permission to use, copy, modify and distribute this software and its
                     27:  * documentation is hereby granted, provided that both the copyright
                     28:  * notice and this permission notice appear in all copies of the
                     29:  * software, derivative works or modified versions, and any portions
                     30:  * thereof, and that both notices appear in supporting documentation.
                     31:  * 
                     32:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     33:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     34:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     35:  * 
                     36:  * Carnegie Mellon requests users of this software to return to
                     37:  * 
                     38:  *  Software Distribution Coordinator  or  [email protected]
                     39:  *  School of Computer Science
                     40:  *  Carnegie Mellon University
                     41:  *  Pittsburgh PA 15213-3890
                     42:  * 
                     43:  * any improvements or extensions that they make and grant Carnegie Mellon
                     44:  * the rights to redistribute these changes.
                     45:  */
                     46: 
                     47: /*
                     48:   Copyright 1988, 1989, 1990, 1991, 1992 
                     49:    by Intel Corporation, Santa Clara, California.
                     50: 
                     51:                 All Rights Reserved
                     52: 
                     53: Permission to use, copy, modify, and distribute this software and
                     54: its documentation for any purpose and without fee is hereby
                     55: granted, provided that the above copyright notice appears in all
                     56: copies and that both the copyright notice and this permission notice
                     57: appear in supporting documentation, and that the name of Intel
                     58: not be used in advertising or publicity pertaining to distribution
                     59: of the software without specific, written prior permission.
                     60: 
                     61: INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
                     62: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
                     63: IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
                     64: CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
                     65: LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
                     66: NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
                     67: WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     68: */
                     69: 
                     70: /*-
                     71:  * Copyright (c) 1990 The Regents of the University of California.
                     72:  * All rights reserved.
                     73:  *
                     74:  * This code is derived from software contributed to Berkeley by
                     75:  * William Jolitz.
                     76:  *
                     77:  * Redistribution and use in source and binary forms, with or without
                     78:  * modification, are permitted provided that the following conditions
                     79:  * are met:
                     80:  * 1. Redistributions of source code must retain the above copyright
                     81:  *    notice, this list of conditions and the following disclaimer.
                     82:  * 2. Redistributions in binary form must reproduce the above copyright
                     83:  *    notice, this list of conditions and the following disclaimer in the
                     84:  *    documentation and/or other materials provided with the distribution.
                     85:  * 3. All advertising materials mentioning features or use of this software
                     86:  *    must display the following acknowledgement:
                     87:  *     This product includes software developed by the University of
                     88:  *     California, Berkeley and its contributors.
                     89:  * 4. Neither the name of the University nor the names of its contributors
                     90:  *    may be used to endorse or promote products derived from this software
                     91:  *    without specific prior written permission.
                     92:  *
                     93:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     94:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     95:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     96:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     97:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     98:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     99:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                    100:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                    101:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                    102:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                    103:  * SUCH DAMAGE.
                    104:  */
                    105: 
                    106:        .file "asm.s"
                    107: 
                    108: #include "asm.h"
                    109: 
                    110:        .text
                    111: 
                    112: ENTRY(StartProg)
                    113:        /* void StartProg(u_long phyaddr, u_long *args)
                    114:         * start the program in protected mode.  phyaddr is the entry point.
                    115:         */
                    116: 
                    117: #ifndef USE_BUFFER
                    118:        push    %ebp
                    119:        mov     %esp, %ebp
                    120: 
                    121:        # get things we need into registers
                    122:        movl    0x8(%ebp), %ecx         # entry offset 
                    123:        movl    0x0c(%ebp), %eax        # &argv
                    124: 
                    125:        # make a new stack at 0:0xa0000 (big segs)
                    126:        mov     $KERN_DATA_SEG, %ebx
                    127:        movw    %bx, %ss
                    128:        movl    $0xa0000,%ebx
                    129:        movl    %ebx,%esp
                    130:        
                    131:        
                    132:        # push some number of args onto the stack
                    133:        pushl   $0                      # nominally a cyl offset in the boot.
                    134:        pushl   0x8(%eax)               # argv[2] = bootdev
                    135:        pushl   0x4(%eax)               # argv[1] = howto
                    136:        pushl   $0                      # dummy 'return' address
                    137:        
                    138:        # push on our entry address
                    139:        mov     $KERN_CODE_SEG, %ebx            # segment
                    140:        pushl   %ebx
                    141:        pushl   %ecx
                    142: 
                    143:        # convert over the other data segs
                    144:        mov     $KERN_DATA_SEG, %ebx
                    145:        movw    %bx, %ds
                    146:        movw    %bx, %es
                    147: 
                    148:        # convert the PC (and code seg)
                    149:        lret
                    150: #else
                    151: /* test version - relocating, kernel move (TBD) */
                    152:        /* if necessary, move ourself out of the way
                    153:         * move the copy of the kernel to its correct load point
                    154:         * set up a stack and transfer args to it
                    155:         * call the entry point
                    156:         * this is best done in assembly as the potential relocation will
                    157:         * have a bad effect on non-PIC code.
                    158:         */
                    159:        /* get things we need into registers */
                    160:        movl    0x8(%ebp), %ecx         # entry offset 
                    161:        movl    0x0c(%ebp), %eax        # &argv
                    162: 
                    163:        /* relocate ourselves to <tmp_reloc_org> */
                    164:        #  PhysBcopy(RELOC, tmp_reloc_org, WORK_AREA_SIZE);
                    165:        mov     $RELOC, %esi
                    166:        mov     $tmp_reloc_org, %edi
                    167:        mov     $WORK_AREA_SIZE, %ecx
                    168:        mov     %ds, %ax
                    169:        mov     %ax, %es
                    170:        rep
                    171:        movsb
                    172: 
                    173:        /* TBD - could probably also do this by munging a seg descriptor.
                    174:         * would it be easier?
                    175:         */
                    176:        ljmp    $KERN_CODE_SEG, tmp_reloc_org+$1f
                    177: 1:
                    178:        /* now we are PIC - caveats */
                    179:        /* move the stack pointer to the new copy */
                    180:        add     tmp_reloc_org-xxx, %esp
                    181: 
                    182:        /* push some number of args onto the stack */
                    183:        pushl   $0                      # nominally a cyl offset in the boot.
                    184:        pushl   0x8(%eax)               # argv[2] = bootdev
                    185:        pushl   0x4(%eax)               # argv[1] = howto
                    186:        pushl   $0                      # dummy 'return' address
                    187:        
                    188:        /*  push on our entry address */
                    189:        mov     $0x08, %ebx             # segment
                    190:        pushl   %ebx
                    191:        pushl   %ecx
                    192: 
                    193:        /* copy loaded file to its destination (TBD) */
                    194:        #  PhysBcopy(kcopy, korg, ksize);
                    195:        mov     kern_copy_org, %esi
                    196:        mov     boot_area_org, %edi
                    197:        mov     xxxksize, %ecx
                    198:        mov     %ds, %ax
                    199:        mov     %ax, %es
                    200:        rep
                    201:        movsb   
                    202: 
                    203:        /* convert the PC (and code seg) */
                    204:        lret
                    205: #endif
                    206: 
                    207: 
                    208: /*
                    209:  * C library -- _setjmp, _longjmp
                    210:  *
                    211:  *     longjmp(a,v)
                    212:  * will generate a "return(v)" from the last call to
                    213:  *     setjmp(a)
                    214:  * by restoring registers from the stack.
                    215:  * The previous signal state is restored.
                    216:  */
                    217: 
                    218: ENTRY(setjmp)
                    219:        movl    4(%esp),%ecx 
                    220:        movl    0(%esp),%edx
                    221:        movl    %edx, 0(%ecx)
                    222:        movl    %ebx, 4(%ecx)
                    223:        movl    %esp, 8(%ecx)
                    224:        movl    %ebp,12(%ecx)
                    225:        movl    %esi,16(%ecx)
                    226:        movl    %edi,20(%ecx)
                    227:        movl    %eax,24(%ecx)
                    228:        movl    $0,%eax
                    229:        ret
                    230: 
                    231: ENTRY(longjmp)
                    232:        movl    4(%esp),%edx
                    233:        movl    8(%esp),%eax
                    234:        movl    0(%edx),%ecx
                    235:        movl    4(%edx),%ebx
                    236:        movl    8(%edx),%esp
                    237:        movl    12(%edx),%ebp
                    238:        movl    16(%edx),%esi
                    239:        movl    20(%edx),%edi
                    240:        cmpl    $0,%eax
                    241:        jne     1f
                    242:        movl    $1,%eax
                    243: 1:     movl    %ecx,0(%esp)
                    244:        ret

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.