FreeCalypso > hg > fc-tourmaline
diff src/cs/riviera/rvt/rvt_api.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/riviera/rvt/rvt_api.c Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,303 @@ +/************************************************************************** + * + * rvt_api.c + * + * This module defines the interface of Trace Module + * + * (C) Texas Instruments, all rights reserved + * + * Version number : 0.1 + * + * History : 0.1 (7/5/2000) - Created + * + * Date : 7/5/2000 + * + * Author : Guido Pagana g-pagana@ti.com * +***************************************************************************/ + + + +#include "rv/general.h" +#include "rv/rv_general.h" +#include "rvf/rvf_api.h" +#include "rvm/rvm_use_id_list.h" + +#include "rvt/rvt_gen.h" +#include "rvt/rvt_def_i.h" +#include "rvt/rvt_env.h" +#include "rvt/rvt_env_i.h" + +#include <string.h> + + +/* +** Trace User data base global variable +*/ +T_RVT_USER_DB rvt_user_db [] = RVT_USER_ID_MAPPING; + +/* +** Number of messages lost +*/ +T_RVT_LOST_MSG rvt_lost_msg_cpt = {0}; + +extern UINT8 rvf_trace_level; + +extern UINT32 rvf_layer_mask; + + +/********************************************************************************/ +/* */ +/* Function Name: rvt_set_trace_level */ +/* */ +/* Purpose: Updating the level of filtering, as well as the 32-bit */ +/* mask related to the software entities to be monitored, */ +/* according to the PC. */ +/* */ +/* Note: None. */ +/* */ +/********************************************************************************/ +void rvt_set_trace_level (T_RVT_BUFFER p_msg, UINT16 msg_length) +{ + + /* Checking for an invalid PDU. */ + if ((p_msg == NULL) || \ + (msg_length != (sizeof (UINT8) + sizeof (UINT32)))) + { + return; + } + + /* Update the level of filtering. */ + if (*p_msg <= RV_TRACE_LEVEL_DEBUG_LOW) + { + rvf_trace_level = *p_msg; + } + + /* Update the 32-bit mask related to the software entities to be monitored. + Note that the 32-bit mask is transmitted LSB first. */ + rvf_layer_mask = *(++p_msg); + rvf_layer_mask |= *(++p_msg) << 8; + rvf_layer_mask |= *(++p_msg) << 16; + rvf_layer_mask |= *(++p_msg) << 24; +} + + +/********************************************************************************/ +/* */ +/* Function Name: rvt_send_trace_no_copy */ +/* */ +/* Purpose: This function is used send trace messages without */ +/* copying. */ +/* */ +/* Note: */ +/* WARNING!!!! The buffer containing the message has been allocated */ +/* by the trace module!!! */ +/* */ +/********************************************************************************/ + +T_RVT_RET +rvt_send_trace_no_cpy( T_RVT_BUFFER msg, + T_RVT_USER_ID user_id, + T_RVT_MSG_LG msg_length, + T_RVT_FORMAT msg_format) +{ + /* Shift the pointer back to write control values */ + T_RVT_TRACE_RQST * req_msg = (T_RVT_TRACE_RQST * )((UINT8*)msg - RVT_HEADER_SIZE); + + /* Check is Trace Module is running */ + if (rvt_module_state != RVT_STARTED) + { + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).not_started = 1; + return RVT_NOT_READY; + } + + + /* Add the id, size and format of the msg at the beginning */ + + req_msg->header.msg_id = RVT_TRACE_RQST_ID; + req_msg->format = msg_format; + req_msg->user_id = user_id; + req_msg->msg_length = msg_length; + + if (rvf_send_msg(rvt_addr_id, (void *) req_msg) != RVF_OK) + { + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).message_not_sent = 1; + return RVT_INTERNAL_ERR; + } + return RVT_OK; +} + + +/********************************************************************************/ +/* */ +/* Function Name: send trace copy */ +/* */ +/* Purpose: this function sends traces with copy */ +/* */ +/* Note: */ +/* No check on id parameter !!!! Must be done in PC. */ +/* */ +/********************************************************************************/ +T_RVT_RET rvt_send_trace_cpy (T_RVT_BUFFER msg, + T_RVT_USER_ID user_id, + T_RVT_MSG_LG msg_length, + T_RVT_FORMAT msg_format) + + + +{ + T_RVT_TRACE_RQST * req ; + + /* Check is Trace Module is running */ + if (rvt_module_state != RVT_STARTED) + { + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).not_started = 1; + return RVT_NOT_READY; + } + + /* Allocate memory (msg_length + necessary room for the header) */ + if ((rvf_get_buf (rvt_mb_id, (UINT32) msg_length + RVT_HEADER_SIZE, (T_RVF_BUFFER**) &req)) == RVF_RED) + { + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).insufficient_resources = 1; + return RVT_MEMORY_ERR; + } + + /* Add the id, size and format of the msg at the beginning */ + req->header.msg_id = RVT_TRACE_RQST_ID; + req->format = msg_format; + req->user_id = user_id; + req->msg_length = msg_length; + + /* Copy the message */ + memcpy( (UINT8*)req + RVT_HEADER_SIZE, msg, msg_length); + + /* + ** Send it as a message to Trace Task + */ + if (rvf_send_msg(rvt_addr_id, (void *) req) != RVF_OK) + { + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).message_not_sent = 1; + rvf_free_buf (req); + return RVT_INTERNAL_ERR; + } + return RVT_OK; +} + + + +/********************************************************************************/ +/* */ +/* Function Name: rvt_register_id */ +/* */ +/* Purpose: function rvt_register id */ +/* returns 0 if string not found, else the number */ +/* stocked in the array */ +/* */ +/* Note: */ +/* uses two arrays, one that stockes the messages,and another for the */ +/* correspondent values. */ +/* */ +/********************************************************************************/ + +T_RVT_RET rvt_register_id(T_RVT_NAME name[], T_RVT_USER_ID *rvt_id, RVT_CALLBACK_FUNC callback) +{ + UINT8 i; + + /*looks in the array if the message is stocked */ + for (i=0;rvt_user_db[i].user_id!=RVT_INVALID_HEADER;i++) + { + if (rvt_name_cmp(rvt_user_db[i].user_name,name)) + { + *rvt_id = rvt_user_db[i].user_id; + rvt_user_db[i].rx_callback_func = callback; + return(RVT_OK); + } + } + + /*else returns zero */ + return (RVT_INVALID_PARAMETER); + +} + + + + +/********************************************************************************/ +/* */ +/* Function Name: rvt_mem_alloc */ +/* */ +/* Purpose: this function allocates a buffer for tracing. */ +/* */ +/* Note: */ +/* None. */ +/* */ +/********************************************************************************/ +T_RVT_RET rvt_mem_alloc(T_RVT_USER_ID user_id, T_RVT_MSG_LG buffer_length, T_RVT_BUFFER * buff) +{ + if (rvt_module_state != RVT_STARTED) + { + *buff = NULL; + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).not_started = 1; + return RVT_NOT_READY; + } + + if (rvf_get_buf (rvt_mb_id, (UINT32) buffer_length + RVT_HEADER_SIZE, (T_RVF_BUFFER**) buff) == RVF_RED) + { + *buff = NULL; + (rvt_lost_msg_cpt.bit_mask).count++; + (rvt_lost_msg_cpt.bit_mask).insufficient_resources = 1; + return RVT_MEMORY_ERR; + } + *buff = *buff + RVT_HEADER_SIZE; + return RVT_OK; +} + + +/********************************************************************************/ +/* */ +/* Function Name: rvt_mem_free */ +/* */ +/* Purpose: this function frees an allocated buffer for the trace task */ +/* */ +/* Note: */ +/* None. */ +/* */ +/********************************************************************************/ +T_RVT_RET rvt_mem_free(T_RVT_BUFFER msg) +{ + + /* + ** Shift the pointer back to write control values + */ + char *buff = (char*) msg - RVT_HEADER_SIZE; + + // Deallocates the buffer + if (rvf_free_buf((T_RVF_BUFFER*) buff) == RVF_MEMORY_ERR) + { + return RVT_MEMORY_ERR; + } + return RVT_OK; +} + + +/* +** User function used to compare name +*/ +BOOLEAN rvt_name_cmp( char * str1, char * str2) +{ + UINT8 i; + + for ( i = 0; (str1[i] == str2[i]) && (str1[i] != 0) && (str2[i] != 0) && (i < RVT_NAME_MAX_LEN); i++ ); + if ( i == RVT_NAME_MAX_LEN) + { return TRUE; + } + if ( (str1[i] == 0) && (str2[i] == 0) ) + { return TRUE; + } + return FALSE; +}