Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
kernel-entry-init.h
Go to the documentation of this file.
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License. See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2000 Silicon Graphics, Inc.
7  * Copyright (C) 2005 Ralf Baechle <[email protected]>
8  */
9 #ifndef __ASM_MACH_IP27_KERNEL_ENTRY_H
10 #define __ASM_MACH_IP27_KERNEL_ENTRY_H
11 
12 #include <asm/sn/addrs.h>
13 #include <asm/sn/sn0/hubni.h>
14 #include <asm/sn/klkernvars.h>
15 
16 /*
17  * Returns the local nasid into res.
18  */
19  .macro GET_NASID_ASM res
21  ld \res, (\res)
23  dsrl \res, NSRI_NODEID_SHFT
24  .endm
25 
26 /*
27  * Intentionally empty macro, used in head.S. Override in
28  * arch/mips/mach-xxx/kernel-entry-init.h when necessary.
29  */
30  .macro kernel_entry_setup
31  GET_NASID_ASM t1
32  move t2, t1 # text and data are here
33  MAPPED_KERNEL_SETUP_TLB
34  .endm
35 
36 /*
37  * Do SMP slave processor setup necessary before we can savely execute C code.
38  */
39  .macro smp_slave_setup
40  GET_NASID_ASM t1
42  KLDIR_OFF_POINTER + CAC_BASE
43  dsll t1, NASID_SHFT
44  or t0, t0, t1
45  ld t0, 0(t0) # t0 points to kern_vars struct
46  lh t1, KV_RO_NASID_OFFSET(t0)
47  lh t2, KV_RW_NASID_OFFSET(t0)
48  MAPPED_KERNEL_SETUP_TLB
49 
50  /*
51  * We might not get launched at the address the kernel is linked to,
52  * so we jump there.
53  */
54  PTR_LA t0, 0f
55  jr t0
56 0:
57  .endm
58 
59 #endif /* __ASM_MACH_IP27_KERNEL_ENTRY_H */