diff src/cs/drivers/drv_app/r2d/r2d_inits.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 1821e301a65b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/drivers/drv_app/r2d/r2d_inits.c	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,388 @@
+/**
+                                                                          
+	@file:	r2d_inits.c	
+	
+	@author Christophe Favergeon                              
+                                                                          
+    @version	0.1
+
+    Purpose:	Initializations routines for R2D
+	
+*/
+
+/*
+																			
+ 	Date       	Modification												
+  ------------------------------------									
+    03/05/2002	Create		
+	    
+																			
+ (C) Copyright 2002 by Texas Instruments Incorporated, All Rights Reserved
+*/
+
+
+#include "rv/general.h"
+
+#include "rvm/rvm_gen.h"
+#include "rvm/rvm_ext_priorities.h"
+#include "rvm/rvm_use_id_list.h"
+
+#include "r2d/r2d_pool_size.h"	/* Stack & Memory Bank sizes definitions */
+
+#include "r2d/r2d_config.h"
+#include "r2d/r2d.h"
+#include "r2d/r2d_i.h"
+#include "r2d/r2d_env.h"
+#include "r2d/r2d_independance_layer.h"
+#include "r2d/r2d_messages.h"
+#include "r2d/uwire.h"
+
+
+#ifndef _WINDOWS
+#ifndef _SIZE_T
+#define _SIZE_T
+typedef unsigned int size_t;
+#endif
+#endif
+
+#ifndef _WINDOWS
+void *memcpy(void *s1, const void *s2, register size_t n);
+void *memmove(void *s1, const void *s2, size_t n);
+#endif
+
+extern T_R2D_ERROR r2d_font_init(void);
+extern void r2d_font_clean(void);extern void r2d_core(UINT32 param);
+
+
+/* global memory bank ID */
+extern T_RVF_MB_ID r2d_mb_id;
+
+/* Global standard graphical context */
+
+extern T_R2D_GC_PTR r2d_g_lcd_gc;
+
+
+
+#if (R2D_ASM == R2D_ON)
+extern T_RVF_MUTEX * r2d_g_blit_mutex;
+extern UINT32 r2d_g_old_foreground_pixelvalue;
+extern UINT32 r2d_g_old_background_pixelvalue;
+#endif
+
+extern T_RVF_MUTEX * r2d_g_global_mutex;
+
+
+
+#if (R2D_REFRESH == R2D_VERTICAL)
+  extern UINT32 r2d_lcd_memory_words[(((R2D_WIDTH*R2D_MWHEIGHT)+1)<<R2D_LONGSIZE_FACTOR)];
+#else
+  extern UINT32 r2d_lcd_memory_words[(((R2D_MWWIDTH*R2D_HEIGHT)+1)<<R2D_LONGSIZE_FACTOR)];
+#endif
+
+extern INT16 r2d_update_ul_x,r2d_update_ul_y,r2d_update_br_x,r2d_update_br_y;
+
+extern void r2d_reinit_update_region(void);
+
+void (*IND_r2d_reinit_update_region)(void)=r2d_reinit_update_region;
+
+extern T_R2D_FONT_DESCRIPTION *r2d_g_font_configuration;
+
+
+#if (R2D_EMBEDDED_LCD == R2D_PC_COLOR_LCD)
+#include "r2d/lcds/ColorPC/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_PC_CSAMPLE)
+#include "r2d/lcds/PC_CSAMPLE/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_PC_DSAMPLE)
+#include "r2d/lcds/PC_DSAMPLE/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_MIRRORED_LCD)
+  #ifdef CONFIG_TARGET_C139
+    #include "r2d/lcds/c139/r2d_task_init_i.c"
+  #else
+    #include "r2d/lcds/Simple/r2d_task_init_i.c"
+  #endif
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_CUSTOMER_LCD)
+#include "r2d/lcds/Customer/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_HORIZONTAL_LCD)
+#include "r2d/lcds/Horizontal/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_SIMPLE_LCD)
+#include "r2d/lcds/Simple/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_BOARD_COLOR_LCD)
+#include "r2d/lcds/ColorBoard/r2d_task_init_i.c"
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_BOARD_DSAMPLE)
+  #ifdef CONFIG_TARGET_LUNA
+    #include "r2d/lcds/luna/r2d_task_init_i.c"
+  #else
+    #include "r2d/lcds/D_Sample/r2d_task_init_i.c"
+  #endif
+#endif
+
+#if (R2D_EMBEDDED_LCD == R2D_BOARD_BW_DSAMPLE)
+  #ifdef CONFIG_TARGET_LUNA
+    #include "r2d/lcds/luna/r2d_task_init_i.c"
+  #else
+    #include "r2d/lcds/BW_D_Sample/r2d_task_init_i.c"
+  #endif
+#endif
+
+UINT32 r2d_get_memory_bank_size()
+{
+	return(R2D_MB_PRIM_SIZE);
+}
+
+#if ((!defined DEPENDENCY) && (R2D_MB_PRIM_SIZE != R2D_MB1_SIZE))
+  /* If the R2D Memory Bank sizes defined in rvf_pool_size.h differs from */
+  /* the one returned by the previous function, compilation is STOPPED. */
+  #error R2D Memory Bank size mismatch!
+#endif
+
+
+
+////////////////////////////////////////
+//
+// Software entity initialization
+
+// Allocate the LCD framebuffer and dithering matrix
+// Clear the framebuffer to 0
+// (Which does not mean intensity 0 since the meaning
+// of 0 is dependent on the LCD).
+
+static void r2d_lcd_init(void)
+{
+   UINT16 length;
+//   UINT32 *p;
+    T_RVF_RET err;
+   
+
+   R2D_MALLOC(r2d_mb_id,T_R2D_FRAMEBUFFER,sizeof(T_R2D_FRAMEBUFFER),r2d_g_framebuffer);
+   
+   if (r2d_g_framebuffer !=NULL)
+   {
+   // length+1 is used instead of length because in the refresh loop
+   // one may need to read one word past the end of the real datas
+#if (R2D_REFRESH==R2D_VERTICAL)
+   // Column is contiguous in memory
+   length=R2D_WIDTH*R2D_MWHEIGHT;
+   //R2D_MALLOC(r2d_mb_id,UINT32,((length+1)<<R2D_LONGSIZE_FACTOR),r2d_g_framebuffer->p_memory_words);
+   r2d_g_framebuffer->p_memory_words=r2d_lcd_memory_words;
+   
+   // No deletion at the end since memory_word is NOT a dynamical object
+   r2d_g_framebuffer->refcount=-1;
+
+   // 0 is a special LCD kind : size of the framebuffer
+   // is hardcoded to quick pixel generation
+   r2d_g_framebuffer->kind=0;
+   r2d_g_framebuffer->p_frame_buffer_end=r2d_g_framebuffer->p_memory_words+length;
+   r2d_g_framebuffer->width=R2D_WIDTH;
+   r2d_g_framebuffer->height=R2D_HEIGHT;
+#else
+    // Line is contiguous in memory
+    length=R2D_HEIGHT*R2D_MWWIDTH;
+    r2d_g_framebuffer->p_memory_words=r2d_lcd_memory_words;
+	
+	r2d_g_framebuffer->refcount=-1;
+// 0 is a special LCD kind : size of the framebuffer
+   // is hardcoded to quick pixel generation
+    r2d_g_framebuffer->kind=0;    
+    r2d_g_framebuffer->p_frame_buffer_end=r2d_g_framebuffer->p_memory_words+length;
+    r2d_g_framebuffer->width=R2D_WIDTH;
+    r2d_g_framebuffer->height=R2D_HEIGHT;
+#endif
+
+		R2D_MALLOC(r2d_mb_id,T_RVF_MUTEX,sizeof(T_RVF_MUTEX),r2d_g_framebuffer->mutex);
+   if (r2d_g_framebuffer->mutex!=NULL)
+	{
+			  err=rvf_initialize_mutex(r2d_g_framebuffer->mutex);
+			  if (err!=RVF_OK)
+			  {
+				 R2D_FREE(r2d_g_framebuffer->mutex);
+				 R2D_FREE(r2d_g_framebuffer);
+				 r2d_g_framebuffer=NULL;
+				 
+			  }
+	}
+	else
+	{
+				R2D_FREE(r2d_g_framebuffer);
+				r2d_g_framebuffer=NULL;
+				
+	}
+
+   }
+    IND_r2d_reinit_update_region();
+
+
+}
+
+T_RVM_RETURN r2d_cleanup(void)
+{
+	/*
+	** free all memory buffer previously allocated.
+	** DO NOT SEND MESSAGES
+	*/
+	r2d_refresh_task_kill();
+	#if (R2D_ASM == R2D_ON)
+	  rvf_delete_mutex(r2d_g_blit_mutex);
+	  R2D_FREE(r2d_g_blit_mutex);
+    #endif
+	rvf_delete_mutex(r2d_g_global_mutex);
+	R2D_FREE(r2d_g_global_mutex);
+	r2d_release_context(r2d_g_lcd_gc);
+	r2d_release_framebuffer(r2d_g_framebuffer);
+    R2D_FREE(r2d_g_dithering_matrix);
+	R2D_FREE(r2d_g_font_configuration);
+	
+	return(RV_OK);
+}
+
+
+
+/******************************************************************************
+* Function	  : xxx_init
+*
+* Description : This function is called by the RV manager to initialize the 
+*				xxx SWE before creating the task and calling xxx_start. 
+*
+* Parameters  : None
+*
+* Return      : T_RVM_RETURN
+* 
+* History	  : 0.1 (20-August-2000)
+*									
+*
+******************************************************************************/
+T_RVM_RETURN r2d_initializations(void)
+{
+	/*
+	** Put local SWE initialization here
+	*/
+
+	T_R2D_ERROR err;
+
+    r2d_lcd_init();
+	if (r2d_g_framebuffer==NULL)
+	 goto r2d_init_error;
+
+    r2d_dithering_init();
+	if (r2d_g_dithering_matrix==NULL)
+	{
+		r2d_release_framebuffer(r2d_g_framebuffer);
+		goto r2d_init_error;
+	}
+
+	R2D_MALLOC(r2d_mb_id,T_R2D_FONT_DESCRIPTION,
+		sizeof(T_R2D_FONT_DESCRIPTION)*36,r2d_g_font_configuration);
+
+	if (r2d_g_font_configuration ==NULL)
+	{
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+		goto r2d_init_error;
+    }
+
+    err=r2d_font_init();
+    if (err!=R2D_OK)
+	{
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+		goto r2d_init_error;
+	}
+
+
+	r2d_g_default_font_framebuffer=r2d_g_font_configuration[R2D_MEDIUM_SYSTEM_NORMAL].framebuffer;
+    r2d_g_default_font_metrics=r2d_g_font_configuration[R2D_MEDIUM_SYSTEM_NORMAL].metrics;
+    r2d_g_default_font_table=r2d_g_font_configuration[R2D_MEDIUM_SYSTEM_NORMAL].table;
+
+	r2d_refresh_task_init();
+
+	r2d_g_lcd_gc=r2d_new_lcd_context(r2d_mb_id);
+	if (r2d_g_lcd_gc==NULL)
+	{
+		r2d_font_clean();
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+		goto r2d_init_error;
+	}
+
+	r2d_g_event_was_sent=FALSE;
+	r2d_g_refresh_disabled=0;
+
+	#if (R2D_ASM == R2D_ON)
+
+	R2D_MALLOC(r2d_mb_id,T_RVF_MUTEX,sizeof(T_RVF_MUTEX),r2d_g_blit_mutex);
+    if (r2d_g_blit_mutex==NULL)
+	{
+		r2d_font_clean();
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+		goto r2d_init_error;
+	}
+
+	err=rvf_initialize_mutex(r2d_g_blit_mutex);
+    if (err!=RVF_OK)
+	{
+		R2D_FREE(r2d_g_blit_mutex);
+		r2d_font_clean();
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+		goto r2d_init_error;
+	}
+
+	// Mode of initial asm blit rect
+	r2d_g_old_mode=R2D_COPY_MODE;
+    r2d_g_old_use_foreground=FALSE;
+    r2d_g_old_srcdst=R2D_LCDLCD;
+	r2d_g_old_foreground_pixelvalue=((T_R2D_GC*)r2d_g_lcd_gc)->foreground_pixel_value;
+	r2d_g_old_background_pixelvalue=((T_R2D_GC*)r2d_g_lcd_gc)->background_pixel_value;
+
+#endif
+
+	R2D_MALLOC(r2d_mb_id,T_RVF_MUTEX,sizeof(T_RVF_MUTEX),r2d_g_global_mutex);
+    if (r2d_g_global_mutex==NULL)
+	{
+		r2d_font_clean();
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+#if (R2D_ASM == R2D_ON)
+		rvf_delete_mutex(r2d_g_blit_mutex);
+	    R2D_FREE(r2d_g_blit_mutex);
+#endif
+		goto r2d_init_error;
+	}
+
+	err=rvf_initialize_mutex(r2d_g_global_mutex);
+    if (err!=RVF_OK)
+	{
+		R2D_FREE(r2d_g_global_mutex);
+		r2d_font_clean();
+		r2d_release_framebuffer(r2d_g_framebuffer);
+        R2D_FREE(r2d_g_dithering_matrix);
+#if (R2D_ASM == R2D_ON)
+		rvf_delete_mutex(r2d_g_blit_mutex);
+	    R2D_FREE(r2d_g_blit_mutex);
+#endif
+		goto r2d_init_error;
+	}
+	
+
+	return RV_OK;
+	
+    
+r2d_init_error:	return RV_MEMORY_ERR;
+}
+