diff src/g23m-gsm/l1/l1_pei.c @ 1:d393cd9bb723

src/g23m-*: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gsm/l1/l1_pei.c	Sun Jul 15 04:40:46 2018 +0000
@@ -0,0 +1,506 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  
+|  Modul   :  
++----------------------------------------------------------------------------- 
+|  Copyright 2002 Texas Instruments Berlin, AG 
+|                 All rights reserved. 
+| 
+|                 This file is confidential and a trade secret of Texas 
+|                 Instruments Berlin, AG 
+|                 The receipt of or possession of this file does not convey 
+|                 any rights to reproduce or disclose its contents or to 
+|                 manufacture, use, or sell anything it may describe, in 
+|                 whole, or in part, without the specific written consent of 
+|                 Texas Instruments Berlin, AG. 
++----------------------------------------------------------------------------- 
+|  Purpose :  This module implements the process body interface
+|             for the entity L1.
++----------------------------------------------------------------------------- 
+*/ 
+
+#define L1_PEI_C
+
+#define ENTITY_L1
+
+#define CUST_OS_C
+/*==== INCLUDES =============================================================*/
+
+#if 1
+#include <string.h>
+#if defined (NEW_FRAME)
+ #include "typedefs.h"  /* to get Condat data types */
+#else
+ #include "stddefs.h"   /* to get Condat data types */
+#endif
+#include "vsi.h"        /* to get a lot of macros */
+#include "custom.h"
+#ifdef GPRS
+#include "macdef.h"
+#include "gprs.h"
+#endif
+#include "gsm.h"        /* to get a lot of macros */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "pei.h"        /* to get PEI interface */
+#include "tools.h"      /* to get common tools */
+#include "l1.h"         /* to get the global entity definitions */
+#include "cust_os.h"    /* to get cust_os definitions */
+
+#else /* 1 */
+
+#if defined NEW_FRAME
+
+#include <string.h>
+#include <stdio.h>
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "vsi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "cnf_l1.h"
+#include "mon_l1.h"
+#include "cus_l1.h"
+#include "pei.h"
+#include "tok.h"
+#include "l1.h"
+
+
+#else
+#include <string.h>
+#include <stdio.h>
+#include "stddefs.h"
+#include "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "cnf_l1.h"
+#include "mon_l1.h"
+#include "vsi.h"
+#include "pei.h"
+#include "tok.h"
+#include "l1.h"
+
+#endif
+#endif /* 1 */
+
+/*==== CONSTS ================================================================*/
+
+/*==== TYPES =================================================================*/
+
+typedef struct
+{
+  char              *version;
+} T_MONITOR;
+
+/*==== LOCALS ================================================================*/
+
+static  T_MONITOR     l1_mon;
+static USHORT first_access = TRUE;
+
+/*==== PROTOTYPES ============================================================*/
+
+SHORT pei_create (T_PEI_INFO **info);
+
+void l1_create_ISR (void);
+void l1a_task(unsigned arcg, void *argv);
+
+/*==== PRIVATE FUNCTIONS =====================================================*/
+
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_primitive
++------------------------------------------------------------------------------
+|  Description  :  Process protocol specific primitive.
+|
+|  Parameters   :  prim      - pointer to the received primitive
+|
+|  Return       :  PEI_OK    - function succeeded
+|                  PEI_ERROR - function failed
++------------------------------------------------------------------------------
+
+                          |           |
+                          PL         PPC(GPRS only)    UPLINK
+                          |           |
+                   +------v-----------v-------+
+                   |                          |
+                   |         L1 ASYNC         |
+                   |                          |
+                   +-------------^------------+
+                                 |
+                               L1 SYNC                 DOWNLINK
+                                 |
+
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_primitive (void * ptr)
+#else
+EXPORT T_PEI_RETURN pei_primitive (T_PRIM * prim)
+#endif
+{
+#if defined (NEW_FRAME)
+  T_PRIM *prim = (T_PRIM*)ptr;
+#endif
+
+  USHORT opc = prim->custom.opc;
+
+  /*
+   * primitive is not a GSM primitive - forward it to the environment
+   */
+  if (opc & SYS_MASK)
+    vsi_c_primitive (VSI_CALLER prim);
+  else
+  {
+    PFREE (P2D(prim));
+    return PEI_ERROR;
+  }
+
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function     : pei_init
++------------------------------------------------------------------------------
+|  Description  :  Initialize Protocol Stack Entity
+|
+|  Parameters   :  handle    - task handle
+|
+|  Return       :  PEI_OK    - entity initialised
+|                  PEI_ERROR - entity not (yet) initialised
++------------------------------------------------------------------------------
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_init ( T_HANDLE Handle )
+#else
+T_PEI_RETURN pei_init (void)
+#endif
+{
+  extern int etm_is_running;	/* FreeCalypso addition */
+
+#if defined (NEW_FRAME)
+  L1_Handle = Handle;
+#endif
+
+  
+
+#ifdef TI_PS_HCOMM_CHANGE
+#ifdef NEW_FRAME
+  if ( first_access == TRUE )
+  {
+    first_access = FALSE;
+    _osx_init();
+  }
+#endif
+
+  if (!cl_hcom_all_handles_open()) return PEI_ERROR;
+
+#ifdef NEW_FRAME
+  _osx_open (VSI_CALLER L1_QUEUE, _hCommL1);
+#endif
+  _osx_open (VSI_CALLER DL_QUEUE, _hCommPL);
+  _osx_open (VSI_CALLER RR_QUEUE, _hCommPL);
+
+  _osx_open (VSI_CALLER GPF_ACI_QUEUE, _hCommMMI);
+#else
+#ifdef NEW_FRAME
+  if ( first_access == TRUE )
+  {
+    first_access = FALSE;
+    _osx_init();
+  }
+  /*
+   * Associate own "queue" handle (a task handle in the end) with L1_QUEUE,
+   * in order to be able to receive primitives.
+   */
+  if (hCommL1 < VSI_OK)
+  {
+    if ((hCommL1 = vsi_c_open (VSI_CALLER L1_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER L1_QUEUE, hCommL1);
+  }
+#endif
+
+  if (hCommPL < VSI_OK)
+  {
+    if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER DL_QUEUE, hCommPL);
+    _osx_open (VSI_CALLER RR_QUEUE, hCommPL);
+  }
+
+  if (hCommACI < VSI_OK)
+  {
+    if ((hCommACI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER GPF_ACI_QUEUE, hCommACI);
+  }
+#endif /* TI_PS_HCOMM_CHANGE */
+
+#ifdef GPRS
+  if (hCommGRR < VSI_OK)
+  {
+    if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER GRR_QUEUE, hCommGRR);
+  }
+
+  if (hCommLLC < VSI_OK)
+  {
+    if ((hCommLLC = vsi_c_open (VSI_CALLER LLC_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER LLC_QUEUE, hCommLLC);
+  }
+
+  if (hCommSNDCP < VSI_OK)
+  {
+    if ((hCommSNDCP = vsi_c_open (VSI_CALLER SNDCP_NAME)) < VSI_OK)
+      return PEI_ERROR;
+    _osx_open (VSI_CALLER SNDCP_QUEUE, hCommSNDCP);
+  }
+#endif
+
+  /*
+   * FreeCalypso addition: TI's original code contains a boot time
+   * race condition: if the L1A task starts running before ETM over
+   * in RiViera land has initialized itself, the etm_register() call
+   * at the beginning of l1a_task() that registers L1TM causes a
+   * boot time crash.  It appears that this race condition has always
+   * been there, but it has been unmasked when we made a port of R2D
+   * to the Motorola C139 LCD.
+   *
+   * Our solution: we hold off on L1 GPF task startup until ETM
+   * has been initialized, just like we hold off until the message
+   * queues L1 needs to send to have been created.
+   */
+  if (!etm_is_running)
+    return PEI_ERROR;
+
+  /*
+   * Register VSI_CALLER as generic caller entity.
+   */
+  _osx_open (VSI_CALLER 0, 0);
+
+  l1_create_ISR ();
+
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_timeout
++------------------------------------------------------------------------------
+|  Description  :  Process timeout.
+|
+|  Parameters   :  index     - timer index
+|
+|  Return       :  PEI_OK    - timeout processed
+|                  PEI_ERROR - timeout not processed
++------------------------------------------------------------------------------
+*/
+#if !defined (NEW_FRAME)
+
+T_PEI_RETURN l1_pei_timeout (T_VSI_THANDLE handle)
+{
+  TRACE_FUNCTION ("pei_timeout()")
+
+  return PEI_OK;
+}
+
+#endif
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_exit
++------------------------------------------------------------------------------
+|  Description  :  Close Resources and terminate.
+|
+|  Parameters   :            -
+|
+|  Return       :  PEI_OK    - exit sucessful
++------------------------------------------------------------------------------
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_exit (void)
+#else
+T_PEI_RETURN l1_pei_exit (void)
+#endif
+{
+
+  
+
+#ifdef TI_PS_HCOMM_CHANGE
+#else
+  vsi_c_close (VSI_CALLER hCommPL);
+  hCommPL = VSI_ERROR;
+#endif
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_run
++------------------------------------------------------------------------------
+|  Description  :  Process Primitives, main loop is located in the
+|                  Protocol Stack Entity.
+|                  Only needed in active body variant
+|
+|  Parameters   :  taskhandle  - handle of current process
+|                  comhandle   - queue handle of current process
+|
+|  Return       :  PEI_OK      - sucessful
+|                  PEI_ERROR   - not successful
++------------------------------------------------------------------------------
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_run ( T_HANDLE taskhandle, T_HANDLE comhandle )
+#else
+T_PEI_RETURN l1_pei_run (T_VSI_CHANDLE comhandle)
+#endif
+{
+  
+#ifdef TI_PS_HCOMM_CHANGE
+#else
+  hCommL1 = comhandle;
+#endif
+  
+
+  l1a_task (0, NULL);
+  return PEI_OK;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_config
++------------------------------------------------------------------------------
+|  Description  :  Dynamic Configuration.
+|
+|  Parameters   :  in_string   - configuration string
+|
+|  Return       :  PEI_OK      - sucessful
+|                  PEI_ERROR   - not successful
++------------------------------------------------------------------------------
+*/
+LOCAL SHORT pei_config (T_PEI_CONFIG inString)
+{
+  
+
+  if ( _osx_config ( inString ) == OSX_OK )
+    return PEI_OK;
+  else
+    return PEI_ERROR;
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_monitor
++------------------------------------------------------------------------------
+|  Description  :  Monitoring of physical Parameters.
+|
+|  Parameters   :  out_monitor - return the address of the data to be monitored
+|
+|  Return       :  PEI_OK      - sucessful (address in out_monitor is valid)
+|                  PEI_ERROR   - not successful
++------------------------------------------------------------------------------
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_monitor (void ** monitor)
+#else
+T_PEI_RETURN l1_pei_monitor (void ** monitor)
+#endif
+{
+  
+
+  l1_mon.version = "ALR 2.0.0";
+  *monitor = &l1_mon;
+
+  return PEI_OK;
+}
+
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function     :  pei_create
++------------------------------------------------------------------------------
+|  Description  :  Create the Protocol Stack Entity.
+|
+|  Parameters   :  info        - Pointer to the structure of entity parameters
+|
+|  Return       :  PEI_OK      - entity created successfully
+|
++------------------------------------------------------------------------------
+*/
+#if defined (NEW_FRAME)
+
+GLOBAL SHORT l1_pei_create ( T_PEI_INFO **info )
+{
+  static T_PEI_INFO pei_info =
+  {
+    "L1",
+    {
+      pei_init,
+#if 1 //#ifdef _SIMULATION_	// FreeCalypso: match TCS211
+      pei_exit,
+#else
+      NULL,
+#endif
+      NULL,             /* no primitive function */
+      NULL,             /* no timeout function */
+      NULL,             /* no signal function  */
+      pei_run,
+      pei_config,
+      pei_monitor,
+    },
+    #if defined (GPRS)
+    2800,     /* Stack Size      */
+    #else 
+    #if defined (FAX_AND_DATA)
+    2800,     /* Stack Size      */
+    #else
+    1805,     /* Stacksize       */
+    #endif
+    #endif
+    10,       /* Queue Entries   */
+    235,      /* Priority        */
+    0,        /* number of timer */
+#ifdef GPRS    
+    COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND | INT_DATA_TASK  /* flags */
+#else
+    COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND      /* flags           */
+#endif    
+  };
+
+  /*
+   * export startup configuration data
+   */
+  *info = &pei_info;
+  /*
+   *  Initialize entity data
+   */
+
+  return PEI_OK;
+}
+
+#else /* NEW_FRAME */
+
+T_PEI_RETURN pei_create (T_VSI_CNAME * name)
+{
+  TRACE_FUNCTION ("pei_create()")
+
+  *name = L1_NAME;
+
+  return PEI_OK;
+}
+
+#endif /* NEW_FRAME */
+
+/*==== END OF FILE ==========================================================*/