diff src/cs/riviera/rvm/rvm_i.h @ 0:92470e5d0b9e

src: partial import from FC Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 15 May 2020 01:28:16 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/riviera/rvm/rvm_i.h	Fri May 15 01:28:16 2020 +0000
@@ -0,0 +1,351 @@
+
+/****************************************************************************/
+/*                                                                          */
+/*  Name        rvm_i.h														*/
+/*                                                                          */
+/*  Function    this file contains the definitions of internal data			*/
+/*				structures for the RVM										*/
+/*																			*/
+/*                                                                          */
+/*  Version		0.1															*/
+/*																			*/
+/* 	Date       	Modification												*/
+/*  ------------------------------------									*/
+/*  20/01/2000	Create														*/
+/*																			*/
+/*	Author		David Lamy-Charrier (dlamy@tif.ti.com)						*/
+/*																			*/
+/* (C) Copyright 2000 by Texas Instruments Incorporated, All Rights Reserved*/
+/****************************************************************************/
+
+#ifndef __RVM_I_H_
+#define __RVM_I_H_
+
+#ifndef _WINDOWS
+  #include "config/rv.cfg"
+  #include "config/debug.cfg"
+#endif
+
+#include "rvf/rvf_api.h"
+#include "rvm/rvm_api.h"
+#include "rvm/rvm_gen.h"
+//#include "rvf/rvf_pool_size.h"
+#include "rvm/rvm_pool_size.h"
+//#include "rv_general.h"  //??
+
+
+/* MSG MUST BE VERIFIED */
+#define RVM_MSG_OFFSET		BUILD_MESSAGE_OFFSET(RVM_USE_ID)
+
+#define RVM_START_T2_MSG			(RVM_MSG_OFFSET	| 0x001)
+#define RVM_RT_MOD_YIELD_T2_MSG		(RVM_MSG_OFFSET	| 0x002)
+#define RVM_STOP_MSG				(RVM_MSG_OFFSET	| 0x003)
+#define RVM_STOP_REQ_MSG			(RVM_MSG_OFFSET	| 0x004)
+		
+
+#define RVM_YIELD_T2_PS_TM			10
+#define RVM_YIELD_T2_PRI_MSG_CNT	10
+#define T_RVM_TASK_ID				T_RVF_G_ADDR_ID  //UINT8
+#define SYSTEM_TASK_MEM				204
+
+#define MAX_GRPS		MAX_HOSTING_TASKS
+#define MAX_COMPOSITES	MAX_PARASITES
+
+/* definitions related to the RVM as a RVF task */
+#define RVM_EXPECTED_EVENT	RVF_TASK_MBOX_0_EVT_MASK
+#define RVM_MAILBOX			RVF_TASK_MBOX_0
+
+#if (defined BLUETOOTH) || (TEST==1)
+	#define RVM_MAX_SWE_USING	(5)		/* max number of SW Entities using another one within a given appli */
+#else
+	#define RVM_MAX_SWE_USING	(3)		/* max number of SW Entities using another one within a given appli */
+#endif
+
+
+#define RVM_INVALID_SWE_INDEX		(0xff)
+
+extern T_RVF_MB_ID rvm_mem_bank;
+extern T_RVF_MB_ID rvm_sys_mem_bank;
+extern T_RVF_MB_ID rvm_timer_mem_bank;
+extern T_RVF_MB_ID rvm_tm_notify_mem_bank;
+extern T_RVF_MB_ID rvm_stack_mem_bank;
+
+/* parameters of mb in use */
+typedef struct
+{	T_RVF_MB_NAME		mb_name;
+	T_RVF_MB_PARAM		mb_initial_param;
+}T_RVM_APPLI_MB_PARAMS;
+
+
+#define RVM_INVALID_GROUP_INDEX	(0xFFFF)
+#define RVM_OWN_GROUP			(0xFFFE)
+
+
+/* list of possible event in the RVM */
+//#define		RVM_START_APPLI	(60000)
+//#define		RVM_STOP_APPLI	(60001)
+//#define		RVM_ERROR		(60002)
+
+
+typedef enum {
+    SWE_NOT_STARTED			= 0,
+    SWE_RUNNING				= 1,
+	SWE_STOPPING			= 2,
+	SWE_KILLED				= 3
+}T_RVM_SWE_STATE;
+
+
+/* structure of message  */
+typedef struct {
+	T_RV_HDR			header;
+	T_RV_RETURN_PATH	rp;
+	UINT8		swe_num;
+}T_RVM_MSG;
+
+
+/* Information about each known SWE
+   This is static information and is built at RVM initialization */
+typedef struct
+{	
+	T_RVM_NAME				swe_name;
+	T_RVM_USE_ID			swe_use_id;
+	T_RVM_GET_INFO_FUNC		swe_get_info;			/* pointer to its get_info function */
+	T_RVM_SWE_TYPE			swe_type;				/* type of the SWE */
+	T_RVF_G_ADDR_ID			swe_addr_id;			/* unique address id of the SWE */
+	UINT16					group_index;			/* for type 2 SWE, index of the hosting group in the group array. */
+	UINT16					swe_stack_size;			/* size of the task stack */
+	UINT8					swe_priority;			/* priority of the SWE */
+	T_RVM_SWE_STATE			swe_state;				/* state of the SWE */
+	T_RVF_BUFFER*			stack_ptr;			/* pointer to the stack of the task */
+	UINT8					nb_using_appli;			/* nb of application which uses this SWE */
+	UINT8					using_appli[RVM_MAX_SWE_USING]; /* pointer to each application which use this SWE */
+	T_RV_RETURN_PATH		swe_return_path;
+	T_RV_RETURN_PATH		mmi_return_path;
+}T_RVM_KNOWN_SWE;
+
+typedef struct
+{	T_RVM_SWE_STATE		host_state;
+	UINT8				task_id;
+	UINT16				nb_hosted_swe;
+	UINT16				stack_size;
+	UINT8				task_priority;
+}	T_RVM_GROUP_INFO; /* DEPRECATED! */
+
+
+/* structure containing the SWE generic functions pointers */
+typedef struct
+{	
+T_RVM_RETURN  (* set_info)	(	T_RVF_ADDR_ID	addr_id,
+								T_RV_RETURN_PATH return_path[],
+								T_RVF_MB_ID		bk_id_table[],
+								T_RVM_CB_FUNC	call_back_error_ft);
+T_RVM_RETURN  (* init)  (void);
+T_RVM_RETURN  (* start) (void);
+T_RVM_RETURN  (* handle_message)	(T_RV_HDR * msg);
+T_RVM_RETURN  (* handle_timer)		(T_RV_HDR * msg);
+T_RVM_RETURN  (* core)	(void);
+T_RVM_RETURN  (* stop)	(T_RV_HDR* hdr);
+T_RVM_RETURN  (* stop1) (void);
+T_RVM_RETURN  (* kill)	(void);
+}	T_RVM_SWE_FUNCTIONS;
+
+/*	Information about each processing SWE
+	This information is dynamic and lives during start or stop process only*/
+typedef struct _t_rvm_processing_swe
+{
+	UINT8							swe_id; // From known SWE array index
+	T_RVM_SWE_TYPE					swe_type;
+	UINT16							stack_size;
+	UINT8							priority;
+	UINT8							nb_requested_mb;
+	UINT8							nb_created_mb;
+	T_RVM_APPLI_MB_PARAMS			swe_mem_bank[RVM_MAX_NB_MEM_BK];
+	T_RVM_SWE_FUNCTIONS				rvm_functions;
+	T_RVF_MB_ID						bk_id_table[RVM_MAX_NB_MEM_BK];
+	struct _t_rvm_processing_swe	*next_swe;
+} T_RVM_PROCESSING_SWE;
+
+typedef struct {
+	T_RV_HDR	hdr;
+	UINT8		grp[MAX_PARASITES];					// to do ..... constant!
+} T_RVM_START_T2_MSG;
+
+typedef struct {
+	T_RV_HDR		header;
+	UINT8			swe_num;
+	T_RV_RETURN_PATH	rp;
+	T_RVM_SWE_STATE status;
+} T_RVM_STOP_MSG;
+
+/*typedef struct {
+	T_RV_HDR		header;
+	UINT8			swe_num;
+//	T_RVF_G_ADDR_ID	target;
+//	UINT8			attempts;
+//	T_RVM_SWE_STATE status;
+} T_RVM_STOP_REQ_MSG; */
+
+typedef struct {
+	T_RV_HDR	hdr;
+	UINT16		val;					
+} T_RVM_RT_MOD_YIELD_T2_MSG;
+
+
+/* information about groups of type2 SWE */
+#define	T_GD_ID	UINT8
+
+typedef struct {
+	T_RVM_SWE_STATE		host_state;
+	T_RVF_GD_ID			group_directive;
+	T_RVF_G_ADDR_ID		host_task_addr;
+//	UINT16				hosted_swe_addr[10];
+	UINT8				hosted_swe_db_index[MAX_PARASITES];  // to do ..... constant!
+	UINT16				stack_size;
+	UINT8				task_priority;
+}	T_RVM_GROUP_DIRECTIVE;
+
+T_RV_RET rvm_t2_proxy(void);
+T_RV_RET rvm_t3_proxy(void);
+//typedef TASKPTR rvm_proxy;
+
+/* definitions related to the RVM as a RVF task */
+#define RVM_TASK_ID			(0)
+#define RVM_PRIORITY		(220)
+
+/* To do ... should correspond to RVF definitions   */
+#define RVM_TASK			0			/* A-M-E-N-D-E-D !	*/
+#define ET2_HOST_TASK		1
+#define ET3_TASK			3
+#define ET4_TASK			4
+#define ET2_VTASK			5
+#define PRE_RV_INIT_TASK	10
+
+
+#define RVM_ERROR_MSG_MAX_LENGTH	(100)
+
+
+#define DEFAULT_TIME_SLICING	0	/* default is no time-slicing */
+
+#define RVM_STACK_SIZE			RVF_RVM_STACK_SIZE
+/*#define RVM_STACK_SIZE			(1500) */
+
+/* memory bank related definitions */
+#define RVM_PRIM_MB				"RVM_PRIM"
+#define RVM_PRIM_MB_SIZE		 RVF_RVM_MB1_SIZE  //A-M-E-N-D-E-D
+#define RVM_SYS_MB				"RVM_SYS"
+#define RVM_SYS_MB_SIZE			 RVF_RVM_MB3_SIZE
+#define RVM_TIMER_MB			"RVM_TIMER"
+#define RVM_TIMER_MB_SIZE		 RVF_RVM_MB4_SIZE
+#define RVM_NOTIFY_MB			"RVM_NOTIFY"
+#define RVM_NOTIFY_MB_SIZE		 RVF_RVM_MB5_SIZE
+
+#define RVM_TIMER_MB_WATERMARK	(RVM_TIMER_MB_SIZE - 500)
+#define RVM_NOTIFY_MB_WATERMARK	(RVM_NOTIFY_MB_SIZE - 500)
+
+#if (defined BLUETOOTH) || (TEST==1) || (TI_PROFILER == 1)	|| (TI_NUC_MONITOR == 1)
+ 		#define RVM_PRIM_MB_WATERMARK	(RVM_PRIM_MB_SIZE - 1000)
+		#define RVM_SYS_MB_WATERMARK	(RVM_SYS_MB_SIZE - 1000)
+#else
+ 		#define RVM_PRIM_MB_WATERMARK	(RVM_PRIM_MB_SIZE - 100)
+		#define RVM_SYS_MB_WATERMARK	(RVM_SYS_MB_SIZE - 100)
+#endif
+  
+#define RVM_STACK_MB			"RVM_STACKS"
+#define RVM_STACK_MB_SIZE		(RVM_STACK_SIZE + RVF_RVM_MB2_SIZE)
+#define RVM_STACK_MB_WATERMARK	RVM_STACK_MB_SIZE
+
+
+
+/***************************************/
+/* RVM Internal functions declarations */
+/***************************************/
+/* function called from rvm_task.c in order to check if an application is startable or stoppable*/
+
+
+/* functions declarations */
+T_RVM_RETURN	rvm_check_application	(T_RVM_USE_ID swe_use_id, UINT8* num_swe, T_RVM_APPLI_ACTION appli_action);
+
+T_RVM_RETURN	rvm_error ( T_RVM_NAME swe_name, T_RVM_RETURN error_cause, 
+							T_RVM_ERROR_TYPE error_type, T_RVM_STRING error_msg);
+
+
+void			rvm_task (UINT32 param);
+
+void			rvm_launch_appli( T_RVM_MSG * msg_Ptr);
+
+void			rvm_stop_appli( T_RVM_STOP_MSG * msg_Ptr);
+
+void			rvm_swe_has_stopped(T_RVM_STOP_MSG* p_msg);
+T_RVM_RETURN	rvm_dup_stop_msg(T_RVM_STOP_MSG* i_msg, T_RVM_STOP_MSG* o_msg) ;
+void			rvm_suspend_swe(UINT8 swe_index);
+T_RVM_RETURN	rvm_kill_swe(UINT8 swe_index);
+UINT8			rvm_get_mb_level(UINT8 swe_index) ;
+
+void			rvm_shut_down_appli( T_RVM_MSG * msg_Ptr);
+void			rvm_shutdown_swe(UINT8 index) ;
+
+T_RVM_TASK_ID rvm_allocate_task_id(UINT8 isRealTask);
+
+T_RVM_RETURN rvm_delete_used_memory ( T_RVM_PROCESSING_SWE * appli);
+
+T_RVM_RETURN rvm_build_swe_list(T_RVM_PROCESSING_SWE ** list, UINT8 swe_num, UINT8 mode);
+
+T_RVM_RETURN rvm_check_memory_requirement( T_RVM_PROCESSING_SWE * appli); // deprected !
+T_RVM_RETURN rvm_verify_memory_requirement( T_RVM_PROCESSING_SWE * appli,\
+										    T_RVM_GROUP_DIRECTIVE* gd, UINT8 cnt);
+
+T_RVM_RETURN rvm_allocate_mb( T_RVM_PROCESSING_SWE * appli);
+
+T_RVM_RETURN rvm_initialize_swe( T_RVM_PROCESSING_SWE * appli,
+										T_RVM_GROUP_DIRECTIVE* gd, 
+										UINT8 cnt);
+
+T_RVM_RETURN rvm_allocate_stack_buffer( UINT32 stack_size, T_RVF_BUFFER** stack_ptr );
+
+T_RVM_RETURN rvm_delete_created_mb (T_RVM_PROCESSING_SWE * appli);
+
+T_RVM_RETURN rvm_clean_env( T_RVM_PROCESSING_SWE * appli);
+
+T_RVM_RETURN rvm_generic_swe_core(void);
+
+T_RVM_RETURN	rvm_init_swe_db (void);
+
+T_RVM_RETURN	rvm_snd_msg_to_upper	(T_RVM_APPLI_ACTION action,
+										 T_RVM_RETURN result,
+										 UINT8 swe_num,
+										 T_RV_RETURN_PATH return_path);
+
+T_RVM_RETURN	rvm_get_swe_index( UINT8 * index, T_RVM_USE_ID swe_use_id);
+
+T_RVM_RETURN	rvm_start_group_req(T_RVF_G_ADDR_ID addrId, UINT8* addrGrp) ;
+
+/*
+** Trace Macros
+*/
+#define RVM_TRACE_ERROR(string)\
+	rvf_send_trace (string,(sizeof(string)-1),NULL_PARAM,RV_TRACE_LEVEL_ERROR,RVM_USE_ID )
+
+#define RVM_TRACE_ERROR_PARAM(string, param)\
+	rvf_send_trace (string,(sizeof(string)-1),(UINT32)param,RV_TRACE_LEVEL_ERROR,RVM_USE_ID )
+
+#define RVM_TRACE_WARNING(string)\
+	rvf_send_trace (string,(sizeof(string)-1),NULL_PARAM,RV_TRACE_LEVEL_WARNING,RVM_USE_ID )
+
+#define RVM_TRACE_WARNING_PARAM(string, param)\
+	rvf_send_trace (string,(sizeof(string)-1),(UINT32)param,RV_TRACE_LEVEL_WARNING,RVM_USE_ID )
+
+#define RVM_TRACE_DEBUG_HIGH(string)\
+	rvf_send_trace (string,(sizeof(string)-1),NULL_PARAM,RV_TRACE_LEVEL_DEBUG_HIGH,RVM_USE_ID )
+
+#define RVM_TRACE_DEBUG_HIGH_PARAM(string, param)\
+	rvf_send_trace (string,(sizeof(string)-1),(UINT32)param,RV_TRACE_LEVEL_DEBUG_HIGH,RVM_USE_ID )
+
+#define RVM_TRACE_DEBUG_LOW(string)\
+	rvf_send_trace (string,(sizeof(string)-1),NULL_PARAM,RV_TRACE_LEVEL_DEBUG_LOW,RVM_USE_ID )
+
+#define RVM_TRACE_DEBUG_LOW_PARAM(string, param)\
+	rvf_send_trace (string,(sizeof(string)-1),(UINT32)param,RV_TRACE_LEVEL_DEBUG_LOW,RVM_USE_ID )
+
+
+#endif /* __RVM_I_H_ */
+