diff src/cs/riviera/rvt/rvt_env.c @ 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/rvt/rvt_env.c	Fri May 15 01:28:16 2020 +0000
@@ -0,0 +1,335 @@
+/********************************************************************************
+ *
+ * rvt_env.c
+ *
+ * This module interfaces the environment and contains all start/init/stop...
+ * functions of the trace module.
+ *
+ * (C) Texas Instruments, all rights reserved
+ *
+ * Version number	: 0.1
+ *
+ * History			: 0.1 (7/4/2000) - Created
+ *
+ * Date             : 7/4/2000
+ *
+ * Author           : Cristian Livadiotti, c-livadiotti@ti.com
+ *
+ ********************************************************************************/
+
+#include "nucleus.h" 
+
+#include <string.h>
+
+#include "rvf/rvf_api.h"
+#include "rv/rv_general.h"
+#include "rvm/rvm_gen.h"
+#include "rvm/rvm_priorities.h"
+
+#include "rvt/rvt_gen.h"
+#include "rvt/rvt_def_i.h"
+#include "rvt/rvt_env.h"
+#include "rvt/rvt_env_i.h"
+
+#include "rvm/rvm_use_id_list.h"
+
+#include "uart/serialswitch.h"
+
+#ifndef _WINDOWS
+	#include "config/swconfig.cfg"
+	#include "config/debug.cfg"
+#endif
+
+#define TI_RX_HISR_STACK_SIZE     (1024)
+static UINT8  TI_RX_HISR_stack[TI_RX_HISR_STACK_SIZE];
+
+char           *p_rvt_lost_msg  = NULL;
+char           *p_rvt_sys_time  = NULL;
+NU_HISR        TI_rcv_HISR;
+T_RVF_MB_ID    rvt_mb_id        = 0;
+T_RVT_STATE    rvt_module_state = RVT_NOT_STARTED;
+T_RVF_ADDR_ID  rvt_addr_id      = 0;
+
+
+/********************************************************************************/
+/*                                                                              */
+/*    Function Name:   rvt_get_info												*/
+/*                                                                              */
+/*    Purpose:         This function is used to notify the RVM					*/
+/*                     of the Trace's Memory Banks requirements.				*/
+/*                                                                              */
+/*    Input Parameters:                                                         */
+/*        &p_info_swe (refer to rvm_gen.h).                                     */
+/*                                                                              */
+/*    Output Parameters:                                                        */
+/*        p_info_swe (refer to rvm_gen.h).                                      */
+/*                                                                              */
+/*    Global Parameters:                                                        */
+/*        None.                                                                 */
+/*                                                                              */
+/*    Note:                                                                     */
+/*        None.                                                                 */
+/*                                                                              */
+/********************************************************************************/
+
+T_RVM_RETURN
+rvt_get_info (T_RVM_INFO_SWE  *p_info_swe)
+{
+  if (!p_info_swe)
+    return RVM_INVALID_PARAMETER;
+
+  p_info_swe->swe_type                                  = RVM_SWE_TYPE_4;
+	
+  p_info_swe->type_info.type4.swe_use_id                = RVT_USE_ID;
+  p_info_swe->type_info.type4.version                   = 1;
+  memcpy (p_info_swe->type_info.type4.swe_name,
+          "TRACE",
+          sizeof ("TRACE"));
+
+  p_info_swe->type_info.type4.stack_size                = TRACE_TASK_STACK_SIZE;
+  p_info_swe->type_info.type4.priority                  = RVM_TRACE_TASK_PRIORITY;
+
+  p_info_swe->type_info.type4.return_path.addr_id       = 0;
+  p_info_swe->type_info.type4.return_path.callback_func = NULL;
+
+  // Memory banks definitions. For now, one memory bank is needed
+  p_info_swe->type_info.type4.nb_mem_bank                          = 1;
+  memcpy (p_info_swe->type_info.type4.mem_bank[0].bank_name,
+          "RV_TRACE",
+          RVM_NAME_MAX_LEN);
+  p_info_swe->type_info.type4.mem_bank[0].initial_params.size      = TRACE_MB_SIZE;
+  p_info_swe->type_info.type4.mem_bank[0].initial_params.watermark = TRACE_MB_WATERMARK;
+	
+  // Generic functions
+  p_info_swe->type_info.type4.init     = rvt_init;
+  p_info_swe->type_info.type4.core     = (T_RVM_SWE_CORE_FUNC)rvt_task_core;
+  p_info_swe->type_info.type4.stop     = rvt_stop;
+  p_info_swe->type_info.type4.kill     = rvt_kill;
+  p_info_swe->type_info.type4.set_info = rvt_set_info;
+
+  // Linked SW entities: none, except if Profiler or Nucleus Monitor are defined
+  #if (TI_PROFILER == 1) || (TI_NUC_MONITOR == 1)
+    p_info_swe->type_info.type4.nb_linked_swe    = 1;
+    p_info_swe->type_info.type4.linked_swe_id[0] = TI_PRF_USE_ID;
+  #else
+    p_info_swe->type_info.type4.nb_linked_swe    = 0;
+  #endif
+
+  return RVM_OK;
+}
+
+
+/********************************************************************************/
+/*                                                                              */
+/*    Function Name:   rvt_set_info												*/
+/*                                                                              */
+/*    Purpose:         This function is used to notify the Trace module         */
+/*                     about mb ids and task id.								*/
+/*                                                                              */
+/*    Input Parameters:                                                         */
+/*        bk_id[]: array of memory bank IDs.									*/
+/*                                                                              */
+/*    Output Parameters:                                                        */
+/*        None.																	*/
+/*                                                                              */
+/*    Global Parameters:                                                        */
+/*        None.                                                                 */
+/*                                                                              */
+/*    Note:                                                                     */
+/*        None.                                                                 */
+/*                                                                              */
+/********************************************************************************/
+
+T_RVM_RETURN
+rvt_set_info (T_RVF_ADDR_ID     addr_id,
+              T_RV_RETURN_PATH  return_path[],
+              T_RVF_MB_ID       bk_id[],
+              T_RVM_CB_FUNC     rvm_error_ft)
+{
+
+  // Save parameters given by the environment (Addr ID and MB ID respectively)
+  rvt_addr_id = addr_id;
+  rvt_mb_id   = bk_id [0];
+
+  return RVM_OK;
+}
+
+
+/********************************************************************************/
+/*                                                                              */
+/*    Function Name:   rvt_init													*/
+/*                                                                              */
+/*    Purpose:         This is the initialization function.						*/
+/*					   It is called by the RVM.									*/
+/*                                                                              */
+/*    Input Parameters:                                                         */
+/*        None.																	*/
+/*                                                                              */
+/*    Output Parameters:                                                        */
+/*        None.																	*/
+/*                                                                              */
+/*    Global Parameters:                                                        */
+/*        None.                                                                 */
+/*                                                                              */
+/*    Note:                                                                     */
+/*        None.                                                                 */
+/*                                                                              */
+/********************************************************************************/
+
+T_RVM_RETURN
+rvt_init (void)
+{
+
+  if (rvt_module_state != RVT_NOT_STARTED)
+    return RVM_NOT_READY;
+
+  // The stack is entirely filled with the pattern 0xFE
+  memset (TI_RX_HISR_stack,
+          0xFE,
+          TI_RX_HISR_STACK_SIZE);
+
+  // Create the RX HISR
+  if (NU_Create_HISR (&TI_rcv_HISR, \
+                      "TI_RCV_HISR", \
+                      rvt_RX_process, \
+                      2, \
+                      TI_RX_HISR_stack, \
+                      TI_RX_HISR_STACK_SIZE) != NU_SUCCESS)
+    return RVM_INTERNAL_ERR;
+
+  // Initialize the baud rate and the callback function for the RX HISR
+  SER_tr_Init (SER_LAYER_1,
+               TR_BAUD_CONFIG,
+               rvt_activate_RX_HISR); 
+
+  #ifdef FRAMING_PROTOCOL
+
+    // Allocate a buffer that reports the system time (refer to rvf_trace_adapt.c):
+    //  - 'User ID' (1 byte),
+    //  - 'Trace Type' (4 bytes),
+    //  - 'Trace Level' (1 byte),
+    //  - 'System Time' (RVT_SYS_TIME_LENGTH bytes),
+    //  - Hexadecimal value (RVT_HEX_VALUE_LENGTH bytes).
+    if (rvf_get_buf (rvt_mb_id, \
+                     (RVT_HDR_LENGTH + RVT_SYS_TIME_LENGTH + RVT_HEX_VALUE_LENGTH), \
+                     (T_RVF_BUFFER**)&p_rvt_sys_time) != RVF_RED)
+    {
+       UINT8  *header_p = NULL;
+
+       header_p    = (UINT8*)p_rvt_sys_time;
+       *header_p++ = (UINT8)rv_trace_user_id;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = RV_TRACE_LEVEL_ERROR;
+       memcpy (header_p,
+               RVT_SYS_TIME,
+               RVT_SYS_TIME_LENGTH);
+    }
+
+    // Allocate a buffer that reports a lack of memory (refer to rvf_trace_adapt.c):
+    //  - 'User ID' (1 byte),
+    //  - 'Trace Type' (4 bytes),
+    //  - 'Trace Level' (1 byte),
+    //  - 'Lost Message' (RVT_LOST_MSG_LENGTH bytes),
+    //  - Hexadecimal value (RVT_HEX_VALUE_LENGTH bytes).
+    if (rvf_get_buf (rvt_mb_id,
+                     (RVT_HDR_LENGTH + RVT_LOST_MSG_LENGTH + RVT_HEX_VALUE_LENGTH), \
+                     (T_RVF_BUFFER**)&p_rvt_lost_msg) != RVF_RED)
+    {
+       UINT8  *header_p = NULL;
+
+       header_p    = (UINT8*)p_rvt_lost_msg;
+       *header_p++ = (UINT8)rv_trace_user_id;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = 0;
+       *header_p++ = RV_TRACE_LEVEL_ERROR;
+       memcpy (header_p,
+               RVT_LOST_MSG,
+               RVT_LOST_MSG_LENGTH);
+    }
+  #else
+
+    // Allocate a buffer that reports the system time
+    if (rvf_get_buf (rvt_mb_id, \
+                     (RVT_SYS_TIME_LENGTH + RVT_HEX_VALUE_LENGTH + RVT_HYPERTERM_LENGTH), \
+                     (T_RVF_BUFFER**)&p_rvt_sys_time) != RVF_RED)
+    {
+       memcpy (p_rvt_sys_time,
+               RVT_SYS_TIME,
+               RVT_SYS_TIME_LENGTH);
+    }
+
+    // Allocate a buffer that reports a lack of memory
+    if (rvf_get_buf (rvt_mb_id, \
+                     (RVT_LOST_MSG_LENGTH + RVT_HEX_VALUE_LENGTH + RVT_HYPERTERM_LENGTH), \
+                     (T_RVF_BUFFER**)&p_rvt_lost_msg) != RVF_RED)
+    {
+        memcpy (p_rvt_lost_msg,
+                RVT_LOST_MSG,
+                RVT_LOST_MSG_LENGTH);
+    }
+  #endif
+
+  // State RVT as "STARTED"
+  rvt_module_state = RVT_STARTED;
+
+  return RVM_OK;
+}
+
+
+/********************************************************************************/
+/*                                                                              */
+/*    Function Name:   rvt_stop													*/
+/*                                                                              */
+/*    Purpose:         This function is defined for compilation only.			*/
+/*                                                                              */
+/*    Input Parameters:                                                         */
+/*        None.																	*/
+/*                                                                              */
+/*    Output Parameters:                                                        */
+/*        None.																	*/
+/*                                                                              */
+/*    Global Parameters:                                                        */
+/*        None.                                                                 */
+/*                                                                              */
+/*    Note:                                                                     */
+/*        None.                                                                 */
+/*                                                                              */
+/********************************************************************************/
+
+T_RVM_RETURN
+rvt_stop (void)
+{
+  return RVM_OK;
+}
+
+
+/********************************************************************************/
+/*                                                                              */
+/*    Function Name:   rvt_kill													*/
+/*                                                                              */
+/*    Purpose:         This function is defined for compilation only.			*/
+/*                                                                              */
+/*    Input Parameters:                                                         */
+/*        None.																	*/
+/*                                                                              */
+/*    Output Parameters:                                                        */
+/*        None.																	*/
+/*                                                                              */
+/*    Global Parameters:                                                        */
+/*        None.                                                                 */
+/*                                                                              */
+/*    Note:                                                                     */
+/*        None.                                                                 */
+/*                                                                              */
+/********************************************************************************/
+
+T_RVM_RETURN
+rvt_kill (void)
+{
+  return RVM_OK;
+}