/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#if defined(lint)
#else /*lint */
#include "assym.h"
#endif /* lint */
#include <sys/asm_linkage.h>
#include <sys/privregs.h>
#include <sys/machthread.h>
#include <sys/hypervisor_api.h>
#ifdef TRAPTRACE
#include <sys/traptrace.h>
#endif /* TRAPTRACE */
#if defined(lint)
/* ARGSUSED */
void
{}
#else
/*
* Entered by the software trap (TT=ST_SELFXCALL, TL>0) thru send_self_xcall().
* Emulate the mondo handler - vec_interrupt().
*
* Global registers are the Alternate Globals.
* Arguments:
* %o0 - CPU
* ILP32 kernel:
* %o5 - function to call
* %o1, %o2, %o3, %o4 - arguments
* LP64 kernel:
* %o3 - function to call
* %o1, %o2 - arguments
*/
!
!
#ifdef TRAPTRACE
#endif /* TRAPTRACE */
!
!
/* Not Reached */
#endif /* lint */
#ifdef TRAPTRACE
#if defined(lint)
/* ARGSUSED */
void
{}
#else /* lint */
/*
* In the case of a cpuset of greater size than a long we
* grab extra trace buffers just to store the cpuset.
* Seems like a waste but popular opinion opted for this
* rather than increase the size of the buffer.
*/
#if CPUSET_SIZE > CLONGSIZE
1:
bge 2f
bge 2f
bge 2f
2:
bl 1b
#endif /* CPUSET_SIZE */
#endif /* lint */
#endif /* TRAPTRACE */
#if defined(lint)
/*ARGSUSED*/
void
{}
/*ARGSUSED*/
int
{ return(0); }
#else /* lint */
/*
* Setup interrupt dispatch data registers
* Entry:
* %o0 - function or inumber to call
* %o1, %o2 - arguments (2 uint64_t's)
*/
/*
* Ship mondo to cpuid
*/
/* For now use dummy interface: cpu# func arg1 arg2 */
#endif /* lint */
#if defined(lint)
/*ARGSUSED*/
{ return (0);}
#else /* lint */
/*
* Get cpu structure
* Entry:
* %o0 - register for CPU_ADDR macro
* %o1 - scratch for CPU_ADDR macro
*/
#endif /* lint */
#if defined(lint)
/* ARGSUSED */
void
{}
#else /* lint */
/*
* This is to ensure that previously called xtrap handlers have executed on
* sun4v. We zero out the byte corresponding to its cpuid in the
* array passed to us from xt_sync(), so the sender knows the previous
* mondo has been executed.
* Register:
* %g1 - Addr of the cpu_sync array.
*/
#endif /* lint */