/* Copyright (c) 2004-2006 by Tensilica Inc.  ALL RIGHTS RESERVED.
/  These coded instructions, statements, and computer programs are the
/  copyrighted works and confidential proprietary information of Tensilica Inc.
/  They may not be modified, copied, reproduced, distributed, or disclosed to
/  third parties in any manner, medium, or form, in whole or in part, without
/  the prior written consent of Tensilica Inc.
*/

/*  sim.h 
 *
 *  Definitions and prototypes for specific ISS SIMCALLs
 *  (ie. outside the standard C library).
 */

#ifndef _INC_SIM_H_
#define _INC_SIM_H_

#ifdef __cplusplus
extern "C" {
#endif

/* Shortcuts for enabling/disabling profiling in the Xtensa ISS  */
extern void xt_iss_profile_enable(void);
extern void xt_iss_profile_disable(void);

/* Shortcut for setting the trace level in the Xtensa ISS */
extern void xt_iss_trace_level(unsigned level);

/* Generic interface for passing client commands in the Xtensa ISS:
 *   returns 0 on success, -1 on failure.
 */
extern int xt_iss_client_command(const char *client, const char *command);

/* Interface for switching simulation modes in the Xtensa ISS:
 *   returns 0 on success, -1 on failure.
 */
#define XT_ISS_CYCLE_ACCURATE 0
#define XT_ISS_FUNCTIONAL     1
extern int xt_iss_switch_mode(int mode);


/* Interface for waiting on a system synchronization event */
extern void xt_iss_event_wait(unsigned event_id);

/* Interface for firing a system synchronization event */
extern void xt_iss_event_fire(unsigned event_id);

/* Interface for invoking a user simcall action,
 * which can be registered in XTMP or XTSC.
 */
extern int xt_iss_simcall(int arg1, int arg2, int arg3,
                          int arg4, int arg5, int arg6);


#ifdef __cplusplus
}
#endif

#endif /*_INC_SIM_H_*/