/* MN10300 Microcontroller core system register definitions -*- asm -*-
 *
 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public Licence
 * as published by the Free Software Foundation; either version
 * 2 of the Licence, or (at your option) any later version.
 */
#ifndef _ASM_FRAME_INC
#define _ASM_FRAME_INC

#ifndef __ASSEMBLY__
#error not for use in C files
#endif

#ifndef __ASM_OFFSETS_H__
#include <asm/asm-offsets.h>
#endif
#include <asm/thread_info.h>

#define pi break

#define fp a3

###############################################################################
#
# build a stack frame from the registers
# - the caller has subtracted 4 from SP before coming here
#
###############################################################################
.macro SAVE_ALL
	add	-4,sp				# next exception frame ptr save area
	movm	[other],(sp)
	mov	usp,a1
	mov	a1,(sp)				# USP in MOVM[other] dummy slot
	movm	[d2,d3,a2,a3,exreg0,exreg1,exother],(sp)
	mov	sp,fp				# FRAME pointer in A3
	add	-12,sp				# allow for calls to be made

	# push the exception frame onto the front of the list
	GET_THREAD_INFO a1
	mov	(TI_frame,a1),a0
	mov	a0,(REG_NEXT,fp)
	mov	fp,(TI_frame,a1)

	# disable the FPU inside the kernel
	and	~EPSW_FE,epsw

	# we may be holding current in E2
#ifdef CONFIG_MN10300_CURRENT_IN_E2
	mov	(__current),e2
#endif
.endm

###############################################################################
#
# restore the registers from a stack frame
#
###############################################################################
.macro RESTORE_ALL
	# peel back the stack to the calling frame
	# - we need that when returning from interrupts to kernel mode
	GET_THREAD_INFO a0
	mov	(TI_frame,a0),fp
	mov	fp,sp
	mov	(REG_NEXT,fp),d0
	mov	d0,(TI_frame,a0)                # userspace has regs->next == 0

#ifndef CONFIG_MN10300_USING_JTAG
	mov	(REG_EPSW,fp),d0
	btst	EPSW_T,d0
	beq	99f

	or	EPSW_NMID,epsw
	movhu	(DCR),d1
	or	0x0001, d1
	movhu	d1,(DCR)

99:
#endif
	movm	(sp),[d2,d3,a2,a3,exreg0,exreg1,exother]

	# must restore usp even if returning to kernel space,
	# when CONFIG_PREEMPT is enabled.
	mov	(sp),a1				# USP in MOVM[other] dummy slot
	mov	a1,usp

	movm	(sp),[other]
	add	8,sp
	rti

.endm


#endif /* _ASM_FRAME_INC */
