• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/arch/ia64/xen/
1/*
2 * arch/ia64/xen/ivt.S
3 *
4 * Copyright (C) 2005 Hewlett-Packard Co
5 *	Dan Magenheimer <dan.magenheimer@hp.com>
6 *
7 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
8 *                    VA Linux Systems Japan K.K.
9 *                    pv_ops.
10 */
11
12#include <asm/asmmacro.h>
13#include <asm/kregs.h>
14#include <asm/pgtable.h>
15
16#include "../kernel/minstate.h"
17
18	.section .text,"ax"
19GLOBAL_ENTRY(xen_event_callback)
20	mov r31=pr		// prepare to save predicates
21	;;
22	SAVE_MIN_WITH_COVER	// uses r31; defines r2 and r3
23	;;
24	movl r3=XSI_PSR_IC
25	mov r14=1
26	;;
27	st4 [r3]=r14
28	;;
29	adds r3=8,r2		// set up second base pointer for SAVE_REST
30	srlz.i			// ensure everybody knows psr.ic is back on
31	;;
32	SAVE_REST
33	;;
341:
35	alloc r14=ar.pfs,0,0,1,0 // must be first in an insn group
36	add out0=16,sp		// pass pointer to pt_regs as first arg
37	;;
38	br.call.sptk.many b0=xen_evtchn_do_upcall
39	;;
40	movl r20=XSI_PSR_I_ADDR
41	;;
42	ld8 r20=[r20]
43	;;
44	adds r20=-1,r20		// vcpu_info->evtchn_upcall_pending
45	;;
46	ld1 r20=[r20]
47	;;
48	cmp.ne p6,p0=r20,r0	// if there are pending events,
49	(p6) br.spnt.few 1b	// call evtchn_do_upcall again.
50	br.sptk.many xen_leave_kernel	// we know ia64_leave_kernel is
51					// paravirtualized as xen_leave_kernel
52END(xen_event_callback)
53