diff src/cs/services/tty/tty_env.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/services/tty/tty_env.c	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,203 @@
+/**
+ * @file	tty_env.c
+ *
+ * Coding of the Riviera Generic Functions,
+ * except handle_message and handle_timer, which are
+ * in tty_handle_message.c and tty_handle_timer.c
+ *
+ * @author	Frederic Turgis (f-turgis@ti.com) & Gerard Cauvy (g-cauvy@ti.com)
+ * @version 0.1
+ */
+
+/*
+ * History:
+ *
+ * 	Date       	Modification
+ *  ------------------------------------
+ *  01/27/2003	Create
+ *
+ * (C) Copyright 2003 by Texas Instruments Incorporated, All Rights Reserved
+ */
+
+
+#include "tty/tty_i.h"
+
+#include "rvm/rvm_priorities.h"
+#include "tty/tty_env.h"
+#include <string.h>
+
+/**
+ * Pointer on the structure gathering all the global variables
+ * used by TTY instance.
+ */
+T_TTY_ENV_CTRL_BLK *tty_env_ctrl_blk_p = NULL;
+
+
+/* External declaration */
+extern T_RV_RET tty_core(void);
+
+/**
+ * Called by the RV manager to learn 
+ * tty requirements in terms of memory, SWEs...
+ *
+ * @param	swe_info	Pointer to the structure to fill
+ *						containing infos related to the tty SWE.
+ *
+ * @return	RVM_OK
+ */
+T_RVM_RETURN tty_get_info(T_RVM_INFO_SWE  * swe_info)
+{
+	/* TTY is a Type 4 SWE. */
+	swe_info->swe_type = RVM_SWE_TYPE_4;
+
+	memcpy(swe_info->type_info.type4.swe_name, "TTY", sizeof("TTY"));
+	swe_info->type_info.type4.swe_use_id = TTY_USE_ID;
+
+	/* SWE info */
+	swe_info->type_info.type4.stack_size	= TTY_STACK_SIZE;
+	swe_info->type_info.type4.priority		= RVM_TTY_TASK_PRIORITY;
+	swe_info->type_info.type4.version		= BUILD_VERSION_NUMBER(0,1,0);
+
+	/* Memory bank info */
+	swe_info->type_info.type4.nb_mem_bank = 1;
+	memcpy(swe_info->type_info.type4.mem_bank[0].bank_name, "TTY_PRIM", sizeof("TTY_PRIM"));
+	swe_info->type_info.type4.mem_bank[0].initial_params.size		= TTY_MB_PRIM_SIZE;
+	swe_info->type_info.type4.mem_bank[0].initial_params.watermark	= TTY_MB_PRIM_WATERMARK;
+	
+	/* 
+	 * Linked SWE info.
+	 */
+	swe_info->type_info.type4.nb_linked_swe = 0;
+
+	/* Set the return path: NOT USED. */
+	swe_info->type_info.type4.return_path.callback_func	= NULL;
+	swe_info->type_info.type4.return_path.addr_id		= 0;
+
+	/* Generic functions */
+	swe_info->type_info.type4.set_info		 = tty_set_info;
+	swe_info->type_info.type4.init			 = tty_init;
+	swe_info->type_info.type4.core			 = tty_core;
+	swe_info->type_info.type4.stop			 = tty_stop;
+	swe_info->type_info.type4.kill			 = tty_kill;
+
+	return RVM_OK;
+}
+
+
+/**
+ * Called by the RV manager to inform the tty SWE about 
+ * addr_id, return path, mb_id and error function.
+ *
+ * It is called only once.
+ *
+ * @param	addr_id			Address ID of the TTY SWE.
+ *							Used to send messages to the SWE.
+ * @param	return_path		Return path array of the linked SWEs.
+ * @param	bk_id_table		Array of memory bank ids allocated to the SWE.
+ * @param	call_back_error_ft Callback function to call in case of unrecoverable error.
+ * @return	RVM_MEMORY_ERR ou RVM_OK.
+ */
+T_RVM_RETURN tty_set_info ( T_RVF_G_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)
+{
+	/* Memory bank status (red, yellow, green). */
+	T_RVF_MB_STATUS mb_status;
+
+	
+	/* Create instance gathering all the variable used by TTY instance */
+	mb_status = rvf_get_buf(bk_id_table[0], 
+							sizeof(T_TTY_ENV_CTRL_BLK),
+							(T_RVF_BUFFER**)&tty_env_ctrl_blk_p);
+	if (mb_status == RVF_RED)
+	{
+		TTY_SEND_TRACE("TTY: Error to get memory ",RV_TRACE_LEVEL_ERROR);
+		return RVM_MEMORY_ERR;
+	}
+	else if (mb_status == RVF_YELLOW)
+	{
+		/*
+		 * The flag is yellow, there will soon be not enough memory anymore.
+		 */
+		TTY_SEND_TRACE("TTY: Getting short on memory ", RV_TRACE_LEVEL_WARNING);
+	}
+
+	/* Store the initial State; default is IDLE. */
+	tty_env_ctrl_blk_p->state = TTY_IDLE;
+
+	/* Store the address ID. */
+	tty_env_ctrl_blk_p->addr_id = addr_id;
+
+	/* Store the pointer to the error function. */
+	tty_env_ctrl_blk_p->error_ft = call_back_error_ft;
+
+	/*
+	 * Store the mem bank id.
+	 * Memory bank ID (mb_id) can be retrieved later using rvf_get_mb_id function.
+	 */
+	tty_env_ctrl_blk_p->prim_mb_id = bk_id_table[0];
+
+	/*
+	 * Array return_path: Return path of linked SWE.
+	 * If the linked SWE have an API based on messages, their return path given 
+	 * by the set_info function would be stored and used to communicate with them.
+	 * But since the linked SWE of TTY have an API based on functions, it is not
+	 * necessary to store their return path.
+	 */
+
+	return RVM_OK;
+}
+
+
+/**
+ * Called by the RV manager to initialize the 
+ * tty SWE before creating the task and calling tty_start. 
+ *
+ * @return	RVM_OK
+ */
+T_RVM_RETURN tty_init (void)
+{
+	/*
+	 * TTY Global Initialization.
+	 */
+
+	return RVM_OK;
+}
+
+
+/**
+ * Called by the RV manager to stop the tty SWE.
+ *
+ * @return	RVM_OK or RVM_INTERNAL_ERR
+ */
+T_RVM_RETURN tty_stop (void)
+{
+	/*
+	 * Here we should stop the activities of the SWE
+	 * It is still possible to send messages to other SWE, to unregister for example.
+	 */
+	TTY_SEND_TRACE("TTY: stop called", RV_TRACE_LEVEL_DEBUG_LOW);
+
+	return RVM_OK;
+}
+
+
+/**
+ * Called by the RV manager to kill the tty SWE,
+ * after the tty_stop function has been called.
+ *
+ * @return	RVM_OK
+ */
+T_RVM_RETURN tty_kill (void)
+{
+	/*
+	 * Here we cannot send messages anymore. We only free the last
+	 * used resources, like the control block buffer.
+	 */
+	TTY_SEND_TRACE("TTY: kill called", RV_TRACE_LEVEL_DEBUG_LOW);
+
+	rvf_free_buf(tty_env_ctrl_blk_p);
+
+	return RVM_OK;
+}