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 <ralf@linux-mips.org>
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
20	dli	\res, LOCAL_HUB_ADDR(NI_STATUS_REV_ID)
21	ld	\res, (\res)
22	and	\res, NSRI_NODEID_MASK
23	dsrl	\res, NSRI_NODEID_SHFT
24	.endm
25
26	.macro	kernel_entry_setup
27	GET_NASID_ASM	t1
28	move		t2, t1			# text and data are here
29	MAPPED_KERNEL_SETUP_TLB
30	.endm
31
32/*
33 * Do SMP slave processor setup necessary before we can savely execute C code.
34 */
35	.macro	smp_slave_setup
36	GET_NASID_ASM	t1
37	dli	t0, KLDIR_OFFSET + (KLI_KERN_VARS * KLDIR_ENT_SIZE) + \
38		    KLDIR_OFF_POINTER + CAC_BASE
39	dsll	t1, NASID_SHFT
40	or	t0, t0, t1
41	ld	t0, 0(t0)			# t0 points to kern_vars struct
42	lh	t1, KV_RO_NASID_OFFSET(t0)
43	lh	t2, KV_RW_NASID_OFFSET(t0)
44	MAPPED_KERNEL_SETUP_TLB
45	ARC64_TWIDDLE_PC
46	.endm
47
48#endif /* __ASM_MACH_IP27_KERNEL_ENTRY_H */
49