mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +01:00 
			
		
		
		
	
		
			
	
	
		
			410 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			410 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* Header file for TRAX control Library */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2012-2013 Tensilica Inc.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Permission is hereby granted, free of charge, to any person obtaining
							 | 
						||
| 
								 | 
							
								 * a copy of this software and associated documentation files (the
							 | 
						||
| 
								 | 
							
								 * "Software"), to deal in the Software without restriction, including
							 | 
						||
| 
								 | 
							
								 * without limitation the rights to use, copy, modify, merge, publish,
							 | 
						||
| 
								 | 
							
								 * distribute, sublicense, and/or sell copies of the Software, and to
							 | 
						||
| 
								 | 
							
								 * permit persons to whom the Software is furnished to do so, subject to
							 | 
						||
| 
								 | 
							
								 * the following conditions:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * The above copyright notice and this permission notice shall be included
							 | 
						||
| 
								 | 
							
								 * in all copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
							 | 
						||
| 
								 | 
							
								 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						||
| 
								 | 
							
								 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
							 | 
						||
| 
								 | 
							
								 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
							 | 
						||
| 
								 | 
							
								 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
							 | 
						||
| 
								 | 
							
								 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
							 | 
						||
| 
								 | 
							
								 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef _TRAX_H
							 | 
						||
| 
								 | 
							
								#define _TRAX_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define TRAX_STOP_HALT 		0x0001
							 | 
						||
| 
								 | 
							
								#define TRAX_STOP_QUIET 	0x0002
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Flag values to indicate if the user wanted to reverse the pcstop
							 | 
						||
| 
								 | 
							
								 * parameters */
							 | 
						||
| 
								 | 
							
								#define	TRAX_PCSTOP_REVERSE	0x0001
							 | 
						||
| 
								 | 
							
								#define TRAX_PCSTOP_NO_REVERSE	0x0000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Indicating whether postsize should be in terms of bytes, instructions
							 | 
						||
| 
								 | 
							
								 * or percentage of trace size captured */
							 | 
						||
| 
								 | 
							
								#define	TRAX_POSTSIZE_BYTES	0x0000
							 | 
						||
| 
								 | 
							
								#define	TRAX_POSTSIZE_INSTR	0x0001
							 | 
						||
| 
								 | 
							
								#define	TRAX_POSTSIZE_PERCENT	0x0002
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Size of the header inside the trace file */
							 | 
						||
| 
								 | 
							
								#define	TRAX_HEADER_SIZE	256
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Minimum size between start and end addresses */
							 | 
						||
| 
								 | 
							
								#define	TRAX_MIN_TRACEMEM	64
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* For basic debugging */
							 | 
						||
| 
								 | 
							
								#define DEBUG 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdbool.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ffs(i) __builtin_ffs(i)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Data structures */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Represents the context of the TRAX unit and the current TRAX session.
							 | 
						||
| 
								 | 
							
								 * To be used by set and show function calls to set and show appropriate
							 | 
						||
| 
								 | 
							
								 * parameters of appropriate TRAX unit.
							 | 
						||
| 
								 | 
							
								 */ 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct {
							 | 
						||
| 
								 | 
							
								  int           trax_version;		/* TRAX PC version information */
							 | 
						||
| 
								 | 
							
								  unsigned long trax_tram_size;		/* If trace RAM is present,size of it */
							 | 
						||
| 
								 | 
							
								  int		hflags;			/* Flags that can be used to debug, 
							 | 
						||
| 
								 | 
							
								  					   print info, etc. */
							 | 
						||
| 
								 | 
							
								  int		address_read_last;	/* During saving of the trace, this
							 | 
						||
| 
								 | 
							
								  					   indicates the address from which
							 | 
						||
| 
								 | 
							
													   the current trace reading must
							 | 
						||
| 
								 | 
							
													   resume */
							 | 
						||
| 
								 | 
							
								  unsigned long	bytes_read;		/* bytes read uptil now */
							 | 
						||
| 
								 | 
							
								  unsigned long total_memlen;		/* Total bytes to be read based on the 
							 | 
						||
| 
								 | 
							
								  				           trace collected in the trace RAM */
							 | 
						||
| 
								 | 
							
								  bool		get_trace_started;	/* indicates that the first chunk of
							 | 
						||
| 
								 | 
							
								  					   bytes (which include the header) has
							 | 
						||
| 
								 | 
							
													   been read */
							 | 
						||
| 
								 | 
							
								} trax_context;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* -----------------------TRAX Initialization ------------------------------*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Initializing the trax context. Reads registers and sets values for version,
							 | 
						||
| 
								 | 
							
								 * trace RAM size, total memory length, etc. Most of the other values are
							 | 
						||
| 
								 | 
							
								 * initialized to their default case.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns	: 0 if successful, -1 if unsuccessful, -2 if ram_size if 
							 | 
						||
| 
								 | 
							
								 * 		  incorrect
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_context_init_eri (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* -----------------Starting/Stopping TRAX session -------------------------*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Start tracing with current parameter setting. If tracing is already in 
							 | 
						||
| 
								 | 
							
								 * progress, an error is reported. Otherwise, tracing starts and any unsaved 
							 | 
						||
| 
								 | 
							
								 * contents of the TraceRAM is discarded
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, 1 if trace is already active,
							 | 
						||
| 
								 | 
							
								 * 		  -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_start (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* This command initiates a stop trigger or halts a trace session based of the
							 | 
						||
| 
								 | 
							
								 * value of the flag parameter passed. In case stop trigger is initiated, any
							 | 
						||
| 
								 | 
							
								 * selected post-stop-trigger capture proceeds normally.
							 | 
						||
| 
								 | 
							
								 * If trace capture was not in progress, or a stop was already triggered, the 
							 | 
						||
| 
								 | 
							
								 * return value indicates appropriately.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * flags	: To differentiate between stopping trace without any 
							 | 
						||
| 
								 | 
							
								 * 		  post-size-trigger capture (trax_halt) or with that.
							 | 
						||
| 
								 | 
							
								 * 		  A zero value would stop the trace based on trigger and a 
							 | 
						||
| 
								 | 
							
								 * 		  value of one would halt it
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, 1 if already stopped, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_stop_halt (trax_context *context, int flags);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Resets the TRAX parameters to their default values which would internally
							 | 
						||
| 
								 | 
							
								 * involve resetting the TRAX registers. To invoke another trace session or
							 | 
						||
| 
								 | 
							
								 * reset the current tracing mechanism, this function needs to be called as
							 | 
						||
| 
								 | 
							
								 * it resets parameters of the context that deal with tracing information
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_reset (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* ---------------Set/Get several TRAX parameters --------------------------*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Sets the start address and end address (word aligned) of the trace in the 
							 | 
						||
| 
								 | 
							
								 * TraceRAM. Care must be taken to ensure that the difference between the
							 | 
						||
| 
								 | 
							
								 * start and the end addresses is atleast TRAX_MIN_TRACEMEM bytes. If not, 
							 | 
						||
| 
								 | 
							
								 * the values are reset to default, which is 0 for startaddr and 
							 | 
						||
| 
								 | 
							
								 * traceRAM_words -1 for endaddr
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * startaddr	: value to which the start address must be set. Can be 
							 | 
						||
| 
								 | 
							
								 * 		  any value between 0 - (traceRAM_words - 1)
							 | 
						||
| 
								 | 
							
								 * endaddr	: value to which the end address must be set. Can be any value
							 | 
						||
| 
								 | 
							
								 * 		  between 0 - (traceRAM_words - 1)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful, -2 if the difference
							 | 
						||
| 
								 | 
							
								 * 		  between the start and end addresses is less than 
							 | 
						||
| 
								 | 
							
								 * 		  TRAX_MIN_TRACEMEM bytes or if they are passed incorrect 
							 | 
						||
| 
								 | 
							
								 * 		  values, -3 if memory shared option is not configured, in
							 | 
						||
| 
								 | 
							
								 * 		  which case, start and end addresses are set to default
							 | 
						||
| 
								 | 
							
								 * 		  values instead of those passed by the user
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_ram_boundaries (trax_context *context, unsigned startaddr, 
							 | 
						||
| 
								 | 
							
												unsigned endaddr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows the start address and end address(word aligned) of the trace in the 
							 | 
						||
| 
								 | 
							
								 * TraceRAM. If incorrect, the startaddress and the endaddress values are
							 | 
						||
| 
								 | 
							
								 * set to default, i.e. 0 for startaddr and traceRAM_words - 1 for endaddr
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * startaddr	: pointer to value which will contain the start address
							 | 
						||
| 
								 | 
							
								 * endaddr	: pointer to value which will contain the end address
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_ram_boundaries (trax_context *context, unsigned *startaddr,
							 | 
						||
| 
								 | 
							
												unsigned *endaddr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects stop trigger via cross-trigger input
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * value	: 0 = off (reset value), 1 = on
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_ctistop (trax_context *context, unsigned value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows if stop-trigger via cross-trigger input is off or on 
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if off, 1 if on, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_ctistop (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects stop trigger via processor-trigger input
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * value	: 0 = off (reset value), 1 = on
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_ptistop (trax_context *context, unsigned value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows if stop trigger visa processor-trigger input is off or on
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns	: 0 if off, 1 if on, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_ptistop (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Reports cross trigger output state
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if CTO bit is reset, 1 if CTO bit is set 
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_cto (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Reports processor trigger output state
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if PTO bit is reset, 1 if PTO bit is set
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_pto (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects condition that asserts cross trigger output
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * option	: 0 = off(reset value)/1 = ontrig/2 = onhalt
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_ctowhen (trax_context *context, int option);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows condition that asserted cross trigger output. It can be
							 | 
						||
| 
								 | 
							
								 * any of: ontrig or onhalt or even off
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if off, 1 if ontrig, 2 if onhalt, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_ctowhen (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects condition that asserts processor trigger output
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * option	: 0 = off(reset value)/1 = ontrig/2 = onhalt
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_ptowhen (trax_context *context, int option);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows condition that asserted processor trigger output. It can be
							 | 
						||
| 
								 | 
							
								 * any of: ontrig or onhalt or even off
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if off, 1 if ontrig, 2 if onhalt, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_ptowhen (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects the trace synchronization message period.
							 | 
						||
| 
								 | 
							
								 * If ATEN enabled, we cannot allow syncper to be off, set it to reset value. 
							 | 
						||
| 
								 | 
							
								 * Also, if no trace RAM, and ATEN enabled, set syncper to be reset value
							 | 
						||
| 
								 | 
							
								 * i.e. 256. A value of 1 i.e. on indicates that internally the message
							 | 
						||
| 
								 | 
							
								 * frequency is set to an optimal value. This option should be preferred
							 | 
						||
| 
								 | 
							
								 * if the user is not sure what message frequency option to set for the
							 | 
						||
| 
								 | 
							
								 * trace session.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * option	: 0 = off, 1 = on, -1 = auto, 8, 16, 32, 64, 128, 
							 | 
						||
| 
								 | 
							
								 * 		  256 (reset value)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful, -2 if incorrect
							 | 
						||
| 
								 | 
							
								 * 		  arguments
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_syncper (trax_context *context, int option);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows trace synchronization message period. Can be one of:
							 | 
						||
| 
								 | 
							
								 * off, on, auto, 8, 16, 32, 64, 128, 256 (reset value)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * returns      : value of sync period, 0 if off, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */ 
							 | 
						||
| 
								 | 
							
								int trax_get_syncper (trax_context *context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Selects stop trigger via PC match. Specifies the address or
							 | 
						||
| 
								 | 
							
								 * address range to match against program counter. Trace stops when the
							 | 
						||
| 
								 | 
							
								 * processor executes an instruction matching the specified address
							 | 
						||
| 
								 | 
							
								 * or range. 
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * index	: indicates the number of stop trigger (currently there is
							 | 
						||
| 
								 | 
							
								 * 		  only one i.e. index = 0)
							 | 
						||
| 
								 | 
							
								 * startaddress	: start range of the address at which the stop trigger 
							 | 
						||
| 
								 | 
							
								 * 		  should be activated
							 | 
						||
| 
								 | 
							
								 * enaddress	: end range of the address at which the stop trigger should
							 | 
						||
| 
								 | 
							
								 * 		  be activated
							 | 
						||
| 
								 | 
							
								 * flags	: If non-zero, this inverts the range. i.e. trace stops
							 | 
						||
| 
								 | 
							
								 * 		  when the processor executes an instruction that does not
							 | 
						||
| 
								 | 
							
								 * 		  match the specified address or range
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful, -2 if incorrect
							 | 
						||
| 
								 | 
							
								 * 		  arguments (unaligned)
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Note		: For the current version of TRAX library, the endaddress and
							 | 
						||
| 
								 | 
							
								 * 		  startaddress can differ by at most 31 bytes and the total
							 | 
						||
| 
								 | 
							
								 * 		  range i.e. (endaddress - startaddress + 1) has to be a power
							 | 
						||
| 
								 | 
							
								 * 		  of two
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_pcstop (trax_context *context, int index, unsigned long startaddress, 
							 | 
						||
| 
								 | 
							
										      unsigned long endaddress, int flags);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Shows the stop trigger via PC match
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * index	: container of information about the number of stop triggers
							 | 
						||
| 
								 | 
							
								 * startaddress	: container of start range of stop trigger
							 | 
						||
| 
								 | 
							
								 * endaddress	: container of end range of stop trigger
							 | 
						||
| 
								 | 
							
								 * flags	: container of information whcih indicates whether the
							 | 
						||
| 
								 | 
							
								 * 		  pc stop range is inverted or not.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_pcstop (trax_context *context, int *index,
							 | 
						||
| 
								 | 
							
											   unsigned long *startaddress,
							 | 
						||
| 
								 | 
							
											   unsigned long *endaddress, int *flags);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* This function is used to set the amount of trace to be captured past
							 | 
						||
| 
								 | 
							
								 * the stop trigger.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * count_unit	: contains the count of units (instructions or bytes) to be 
							 | 
						||
| 
								 | 
							
								 * 		  captured post trigger. If 0, it implies that this is off
							 | 
						||
| 
								 | 
							
								 * unit		: unit of measuring the count. 0 is bytes, 1 is instructions
							 | 
						||
| 
								 | 
							
								 * 		  2 is percentage of trace
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if successful, -1 if unsuccessful, -2 if incorrect
							 | 
						||
| 
								 | 
							
								 * 		  arguments
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_set_postsize (trax_context *context, int count_unit, int unit);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* This function shows the amount of TraceRAM in terms of the number of 
							 | 
						||
| 
								 | 
							
								 * instructions or bytes, captured post the stop trigger
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * context	: pointer to structure which contains information about the 
							 | 
						||
| 
								 | 
							
								 * 		  current TRAX session
							 | 
						||
| 
								 | 
							
								 * count_unit	: will contain the count of units(instructions or bytes) post 
							 | 
						||
| 
								 | 
							
								 * 		  trigger
							 | 
						||
| 
								 | 
							
								 * unit		: will contain information about the events that are counted
							 | 
						||
| 
								 | 
							
								 * 		  0 implies that the traceRAM words consumed are counted and
							 | 
						||
| 
								 | 
							
								 * 		  1 implies that the target processor instructions executed and
							 | 
						||
| 
								 | 
							
								 * 		  excpetions/interrupts taken are counted
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * returns      : 0 if postsize was got successfully, -1 if unsuccessful
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int trax_get_postsize (trax_context *context, int *count_unit, int *unit);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* -------------------------- TRAX save routines ---------------------------*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* This function should be called by the user to return a chunk of
							 | 
						||
| 
								 | 
							
								 * bytes in buf. It can be a lower layer function of save, or can be
							 | 
						||
| 
								 | 
							
								 * called by the user explicitly. If bytes_actually_read contains a 0
							 | 
						||
| 
								 | 
							
								 * after a call to this function has been made, it implies that the entire 
							 | 
						||
| 
								 | 
							
								 * trace has been read successfully.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * context		: pointer to structure which contains information about
							 | 
						||
| 
								 | 
							
								 * 			  the current TRAX session
							 | 
						||
| 
								 | 
							
								 * buf			: Buffer that is allocated by the user, all the trace 
							 | 
						||
| 
								 | 
							
								 *			  data read would be put in this buffer, which can then
							 | 
						||
| 
								 | 
							
								 *			  be used to generate a tracefile. 
							 | 
						||
| 
								 | 
							
								 *			  The first TRAX_HEADER_SIZE of the buffer will always 
							 | 
						||
| 
								 | 
							
								 * 			  contain the header information. 
							 | 
						||
| 
								 | 
							
								 * bytes_to_be_read	: Indicates the bytes the user wants to read. The first
							 | 
						||
| 
								 | 
							
								 * 			  invocation would need this parameter to be 
							 | 
						||
| 
								 | 
							
								 * 			  TRAX_HEADER_SIZE at least.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * returns      	: bytes actually read during the call to this function. 
							 | 
						||
| 
								 | 
							
								 * 			  0 implies that all the bytes in the trace have been 
							 | 
						||
| 
								 | 
							
								 * 			  read, -1 if unsuccessful read/write of
							 | 
						||
| 
								 | 
							
								 * 			  registers or memory, -2 if trace was active while
							 | 
						||
| 
								 | 
							
								 * 			  this function was called, -3 if user enters  
							 | 
						||
| 
								 | 
							
								 * 			  bytes_to_be_read  < TRAX_HEADER_SIZE in the first 
							 | 
						||
| 
								 | 
							
								 * 			  pass
							 | 
						||
| 
								 | 
							
								 */ 
							 | 
						||
| 
								 | 
							
								int trax_get_trace (trax_context *context, void *buf, 
							 | 
						||
| 
								 | 
							
								                    int bytes_to_be_read);
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* _TRAX_H */
							 |