]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - sys/sun4v/sun4v/locore.S
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / sys / sun4v / sun4v / locore.S
1 /*-
2  * Copyright (c) 2001 Jake Burkholder.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  */
26
27
28         
29 #include <machine/asm.h>
30 __FBSDID("$FreeBSD$"); 
31
32 #include <machine/asi.h>
33 #include <machine/asmacros.h>
34 #include <machine/pstate.h>
35
36 #include "assym.s"
37
38         .register %g2,#ignore
39
40         .globl  kernbase
41         .set    kernbase,KERNBASE
42         
43         .globl  nwin_minus_one
44         .set    nwin_minus_one,7
45         
46 /*
47  * void _start(caddr_t metadata, u_long o1, u_long o2, u_long o3,
48  *             u_long ofw_vec)
49  */
50 ENTRY(btext)
51 ENTRY(_start)
52         /*
53          * Initialize misc state to known values.  Interrupts disabled, normal
54          * globals, windows flushed (cr = 0, cs = nwindows - 1), no clean
55          * windows, pil 0, and floating point disabled.
56          */
57         wrpr    %g0, PSTATE_NORMAL, %pstate
58         flushw
59         wrpr    %g0, 0, %cleanwin
60         wrpr    %g0, 0, %pil
61         wr      %g0, 0, %fprs
62
63         /*
64          * Get onto our per-cpu panic stack, which precedes the struct pcpu in
65          * the per-cpu page.
66          */
67         SET(pcpu0 + (PCPU_PAGES * PAGE_SIZE) - PC_SIZEOF, %l1, %l0)
68         sub     %l0, SPOFF + CCFSZ, %sp
69
70         /*
71          * Do initial bootstrap to setup pmap and thread0.
72          */
73         call    sparc64_init
74          nop
75
76         GET_PCB(%g6)
77         /*
78          * Get onto thread0's kstack.
79          */
80         ldx     [%g6 + PCB_KSTACK], %sp
81
82         /*
83          * And away we go.  This doesn't return.
84          */
85         call    mi_startup
86          nop
87         sir
88         ! NOTREACHED
89 END(_start)
90
91 /*
92  * void cpu_setregs(struct pcpu *pc)
93  */
94 ENTRY(cpu_setregs)
95
96         /*
97          * Disable interrupts, normal globals.
98          */
99         mov     %o0, PCPU_REG
100
101         /*
102          * store PCPU_REG into its scratchpad register
103          * this allows us to retrieve it in the trap handlers - 
104          * where we receive a new set of globals
105          */
106         mov     SCRATCH_REG_PCPU, %g2 
107         stxa    PCPU_REG, [%g2]ASI_SCRATCHPAD 
108
109         retl
110          nop
111 END(cpu_setregs)