diff gsm-fw/services/dar/dar_env.c @ 305:4dccc9d3305f

gsm-fw: checking in DAR from Leonardo source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 16 Mar 2014 05:48:58 +0000
parents
children a7087f91c752
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/services/dar/dar_env.c	Sun Mar 16 05:48:58 2014 +0000
@@ -0,0 +1,282 @@
+/****************************************************************************/
+/*                                                                          */
+/*  File Name:  dar_env.c                                                   */
+/*                                                                          */
+/*  Purpose:  This file contains routines that will be called in order to:  */
+/*            - notify the Environment of the diagnose's Memory Banks       */
+/*              requirements,                                               */
+/*            - set diagnose's addr and memory banks IDs                    */
+/*            - initialize all the diagnose's data structures,              */
+/*            - start the diagnose's task                                   */
+/*            - stop the diagnose's task                                    */
+/*            - kill the diagnose's task                                    */
+/*                                                                          */
+/*  Version   0.1                                                           */
+/*                                                                          */
+/*  Date                 Modification                                       */
+/*  ------------------------------------                                    */
+/*  26 September 2001    Create                                             */
+/*                                                                          */
+/*  Author     Stephanie Gerthoux                                           */
+/*                                                                          */
+/* (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved*/
+/****************************************************************************/
+
+#include "rv/rv_defined_swe.h"
+#ifdef RVM_DAR_SWE
+   #include "rv/rv_general.h"
+   #include "rvm/rvm_gen.h"
+   #include "rvm/rvm_priorities.h"
+   #include "rvm/rvm_use_id_list.h"
+   #include "dar/dar_api.h"
+   #include "dar/dar_env.h"
+   #include "dar/dar_macro_i.h"
+
+   #include <string.h>
+
+   extern T_RV_RET dar_core(void);
+
+   /**** Initialisation of the pointer to the Global Environment Control block ****/
+   T_DAR_ENV_CTRL_BLK *dar_gbl_var_p = NULL;
+
+   /**** Define extern variables ****/
+   /* Get the last status of the system */
+   extern T_DAR_RECOVERY_STATUS dar_current_status;
+  
+   /* Get the last exception of the system */
+   extern UINT8 dar_exception_status;
+
+   /* Define the recovery buffer */
+   extern UINT32 dar_recovery_buffer;
+
+   /* DAR previous status */
+   extern T_DAR_RECOVERY_STATUS  dar_previous_status;
+
+   /* DAR previous status */
+   extern UINT8  dar_previous_exception;
+
+   /********************************************************************************/
+   /* Function   : dar_get_info                                                    */
+   /*                                                                              */
+   /* Description : This function is called by the RV Environment to learn         */
+   /*               diagnose requirements in terms of memory, SWEs...              */
+   /*                                                                              */
+   /* Parameters  : T_RVM_INFO_SWE  * swe_info: pointer to the structure to fill   */
+   /*               containing infos related to the diagnose SWE.                  */
+   /*                                                                              */
+   /* Return      :  T_RV_RETURN                                                   */
+   /*                                                                              */
+   /* History      : 0.1 (26-September-2001)                                       */
+   /*                                                                              */
+   /*                                                                              */
+   /********************************************************************************/
+   T_RVM_RETURN dar_get_info(T_RVM_INFO_SWE  *infoSWEnt)
+   {
+      /* SWE info */
+      infoSWEnt->swe_type = RVM_SWE_TYPE_4;
+      infoSWEnt->type_info.type4.swe_use_id = DAR_USE_ID;
+
+      memcpy( infoSWEnt->type_info.type4.swe_name, "DAR", sizeof("DAR") );
+
+      infoSWEnt->type_info.type4.stack_size = DAR_STACK_SIZE;
+      infoSWEnt->type_info.type4.priority   = RVM_DAR_TASK_PRIORITY;
+
+
+      /* Set the return path */
+      infoSWEnt->type_info.type4.return_path.callback_func	= NULL;
+      infoSWEnt->type_info.type4.return_path.addr_id	      = 0;
+
+  
+      /* memory bank info */
+      infoSWEnt->type_info.type4.nb_mem_bank = 0x01;
+ 
+      /* Memory bank used to receive/send the message to/from the entity */
+      memcpy ((UINT8 *) 	infoSWEnt->type_info.type4.mem_bank[0].bank_name, "DAR_MB", sizeof("DAR_MB"));
+      infoSWEnt->type_info.type4.mem_bank[0].initial_params.size          = DAR_MB_SIZE;
+      infoSWEnt->type_info.type4.mem_bank[0].initial_params.watermark     = DAR_MB_WATERMARK;
+
+      /* linked SWE info */ 
+      /* this SWE requires the FFS SWE to run */
+      
+      infoSWEnt->type_info.type4.nb_linked_swe   = 0x01;
+      infoSWEnt->type_info.type4.linked_swe_id[0]= FFS_USE_ID;
+
+      /* generic functions */
+      infoSWEnt->type_info.type4.set_info = dar_set_info;
+      infoSWEnt->type_info.type4.init     = dar_init;
+      infoSWEnt->type_info.type4.core     = dar_core;
+      infoSWEnt->type_info.type4.stop     = dar_stop;
+      infoSWEnt->type_info.type4.kill     = dar_kill;
+
+      return RVM_OK;
+   }
+
+   /**************** End of dar_get_info function ********************************/
+
+   /********************************************************************************/
+   /* Function   : dar_set_info                                                    */
+   /*                                                                              */
+   /* Description : This function is called by the RV Environment to inform        */
+   /*               the diagnose SWE about addr_id, mb_id and error function.      */
+   /*                                                                              */
+   /* Parameters  : - T_RVF_ADDR_ID  addrId: address Id                            */
+   /*               - T_RVF_MB_ID mb_id[]: array of memory bank ids.               */
+   /*               - callback function to call in case of unrecoverable error.    */
+   /*                                                                              */
+   /* Return      : T_RVM_RETURN                                                   */
+   /*                                                                              */
+   /* History    : 0.1 (27-September-2001 )                                        */
+   /*                                                                              */
+   /*                                                                              */
+   /********************************************************************************/
+   T_RVM_RETURN dar_set_info(T_RVF_ADDR_ID addrId,
+                             T_RV_RETURN   return_path[],
+                             T_RVF_MB_ID   mbId[],
+                             T_RVM_RETURN  (*callBackFctError) ( T_RVM_NAME SWEntName,
+                                                                 T_RVM_RETURN errorCause,
+                                                                 T_RVM_ERROR_TYPE errorType,
+                                                                 T_RVM_STRING errorMsg) )
+   {
+
+      /* Declare local variable.*/
+      T_RVF_MB_STATUS mb_status = RVF_GREEN;
+
+      /* Allocate memory required to store the Global Environment control Block. */
+      mb_status = rvf_get_buf(mbId[0], 
+                              sizeof(T_DAR_ENV_CTRL_BLK), 
+                              (T_RVF_BUFFER **) & dar_gbl_var_p);
+
+      /* If insufficient resources to properly run the DAR's task, then abort.   */
+      switch (mb_status)
+      {
+         case RVF_GREEN:
+         {
+            /* Initialize the Global Environment Control Block */
+            memset((UINT8 *) dar_gbl_var_p,
+                   0x00,
+                   sizeof (T_DAR_ENV_CTRL_BLK));
+
+            /* Store the memory bank IDs assigned to the DAR */
+            dar_gbl_var_p->mb_dar = mbId[0];
+
+            /* Store the addr ID assigned to the DAR */
+            dar_gbl_var_p->addrId = addrId;
+
+            /* Store the function to be called whenever any unrecoverable */
+            /* error occurs.                                              */
+            dar_gbl_var_p->callBackFctError = callBackFctError; 
+            DAR_SEND_TRACE(" Diagnose And Recovery (env). DAR's information set ",
+                           RV_TRACE_LEVEL_DEBUG_LOW);
+            break;
+         }
+         case RVF_YELLOW:
+         {
+            rvf_free_buf((T_RVF_BUFFER *) dar_gbl_var_p);
+            DAR_TRACE_WARNING(" DAR memory warning (orange memory)");
+            return (RV_MEMORY_ERR);
+         }
+         default:
+         {
+            DAR_TRACE_WARNING(" DAR memory warning (red memory)");
+            return (RV_MEMORY_ERR);
+         }
+      } /* switch (mb_status) */
+
+      return (RV_OK);
+   } /*************** End of dar_set_info function ********************************/
+
+
+
+   /********************************************************************************/
+   /* Function   : dar_init                                                        */
+   /*                                                                              */
+   /* Description : This function is called by the RV Environment to initialize the*/ 
+   /*               diagnose SWE before creating the task and calling dar_start.   */
+   /*                                                                              */
+   /* Parameters  : None                                                           */
+   /*                                                                              */
+   /* Return      : T_RVM_RETURN                                                   */
+   /*                                                                              */
+   /* History    : 0.1 (27-September-2001)                                         */
+   /*                                                                              */
+   /*                                                                              */
+   /********************************************************************************/
+   T_RVM_RETURN dar_init(void)
+   {
+      /*** Declare local variables ***/
+      UINT16 i = 0;    
+    
+      /*** Initialization of the DAR global structure ***/
+
+      /* Initialization of the dar_filter_array */ 
+      for (i=0;i<DAR_MAX_GROUP_NB;i++)
+      {
+         dar_gbl_var_p ->dar_filter_array[i].group_nb     = DAR_INITIALIZATION_VALUE;
+         dar_gbl_var_p ->dar_filter_array[i].mask_warning = DAR_INITIALIZATION_VALUE;
+         dar_gbl_var_p ->dar_filter_array[i].mask_debug   = DAR_INITIALIZATION_VALUE;
+      }
+
+      /*Initialization of the index and the free index */
+      dar_gbl_var_p ->index       = DAR_INVALID_VALUE;
+      dar_gbl_var_p ->free_index  = DAR_INVALID_VALUE;
+
+      /*** Value of the DAR recovery status ***/
+      dar_previous_status = dar_current_status;           
+
+      /* erase the dar_current_status value */
+      dar_current_status = DAR_POWER_ON_OFF;          
+
+      /*** Value of the DAR exception status ***/
+      dar_previous_exception = dar_exception_status;           
+
+      /* erase the dar_exception_status value */
+      dar_exception_status = DAR_NO_ABORT_EXCEPTION;          
+
+      return RV_OK;
+   }
+
+
+   /*************************************************************************************/
+   /* Function    : dar_stop                                                            */
+   /*                                                                                   */
+   /* Description : This function is called by the RV Environment to stop the diagnose  */
+   /*               SWE.                                                                */
+   /*                                                                                   */
+   /* Parameters  : None                                                                */
+   /*                                                                                   */
+   /* Return      : T_RVM_RETURN                                                        */
+   /*                                                                                   */
+   /* History     : 0.1 (27-September-2001)                                             */
+   /*                                                                                   */
+   /*                                                                                   */
+   /*************************************************************************************/
+   T_RVM_RETURN dar_stop(void)
+   {
+      /* other SWEs have not been killed yet, DAR can send messages to other SWEs        */
+
+      return RV_OK;
+   }
+
+
+   /*************************************************************************************/
+   /* Function   :  dar_kill                                                            */
+   /*                                                                                   */
+   /* Description : This function is called by the RV Environment to kill the diagnose  */
+   /*               SWE, after the diagnose_stop function has been called.              */
+   /*                                                                                   */
+   /* Parameters  : None                                                                */
+   /*                                                                                   */
+   /* Return      : T_RVM_RETURN                                                        */
+   /*                                                                                   */
+   /* History     : 0.1 (27-September-2001)                                             */
+   /*                                                                                   */
+   /*                                                                                   */
+   /*************************************************************************************/
+   T_RVM_RETURN dar_kill (void)
+   {
+      /* free all memory buffer previously allocated */
+      rvf_free_buf ((T_RVF_BUFFER *) dar_gbl_var_p);
+      return RV_OK;
+   }
+
+#endif /* #ifdef RVM_DAR_SWE */