diff gsm-fw/g23m-gsm/ss/ss_pei.c @ 673:2f7df7a314f8

gsm-fw/g23m-gsm subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 28 Sep 2014 23:20:04 +0000
parents
children b5a4104c24a5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/g23m-gsm/ss/ss_pei.c	Sun Sep 28 23:20:04 2014 +0000
@@ -0,0 +1,560 @@
+/*
++-----------------------------------------------------------------------------
+|  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 SS of the mobile station.
++-----------------------------------------------------------------------------
+*/
+
+#ifndef SS_PEI_C
+#define SS_PEI_C
+
+#define ENTITY_SS
+
+
+/*==== INCLUDES ===================================================*/
+#if defined (NEW_FRAME)
+
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include "typedefs.h"
+#include "pcm.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_ss.h"
+#include "mon_ss.h"
+#include "pei.h"
+#include "tok.h"
+#include "ss.h"
+#include "ss_em.h"
+
+#else
+
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include "stddefs.h"
+#include "pcm.h"
+#include "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "cnf_ss.h"
+#include "mon_ss.h"
+#include "vsi.h"
+#include "pei.h"
+#include "tok.h"
+#include "ss.h"
+#include "ss_em.h"
+
+#endif
+
+/*==== CONST ======================================================*/
+/*
+ * instance management
+ */
+#ifdef OPTION_MULTIPLE_INSTANCE
+  #define GET_INSTANCE(p)           &ss_data_base[p->custom.route.inst_no]
+#else
+  #define GET_INSTANCE(p)           &ss_data_base
+#endif
+
+/*==== VAR EXPORT =================================================*/
+#ifdef TI_PS_HCOMM_CHANGE
+#if defined (NEW_FRAME)
+GLOBAL T_HANDLE ss_handle;
+#endif
+#else /* TI_PS_HCOMM_CHANGE */
+#if defined (NEW_FRAME)
+GLOBAL T_HANDLE hCommMMI = VSI_ERROR;/* MMI Communication */
+GLOBAL T_HANDLE hCommMM  = VSI_ERROR;/* MM  Communication */
+GLOBAL T_HANDLE ss_handle;
+#else
+GLOBAL T_VSI_CHANDLE hCommMMI = VSI_ERROR;/* MMI Communication */
+GLOBAL T_VSI_CHANDLE hCommMM  = VSI_ERROR;/* MM  Communication */
+#endif
+#endif /* TI_PS_HCOMM_CHANGE */
+
+#ifdef OPTION_MULTI_INSTANCE
+GLOBAL T_SS_DATA ss_data_base [SS_INSTANCES];
+#else
+GLOBAL T_SS_DATA ss_data_base;
+#endif
+
+
+/*==== VAR LOCAL ==================================================*/
+#ifdef _SIMULATION_
+LOCAL BOOL              first_access = TRUE;
+#endif
+
+LOCAL T_MONITOR         ss_mon;
+
+/*==== FUNCTIONS ==================================================*/
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_not_supported   |
++--------------------------------------------------------------------+
+
+  PURPOSE : An unsupported primitive is received.
+
+*/
+LOCAL void pei_not_supported (void *data)
+{
+  TRACE_FUNCTION ("pei_not_supported()");
+
+  PFREE (data)
+}
+
+LOCAL const T_FUNC mnss_table[] = {
+  MAK_FUNC_0 (ss_mnss_begin_req   , MNSS_BEGIN_REQ   ),
+  MAK_FUNC_0 (ss_mnss_facility_req, MNSS_FACILITY_REQ),
+  MAK_FUNC_0 (ss_mnss_end_req     , MNSS_END_REQ     )
+};
+
+LOCAL const T_FUNC mmss_table[] = {
+  MAK_FUNC_S (for_mmss_data_ind     , MMSS_DATA_IND     ),
+  MAK_FUNC_0 ( ss_mmss_error_ind    , MMSS_ERROR_IND    ),
+  MAK_FUNC_0 ( ss_mmss_establish_cnf, MMSS_ESTABLISH_CNF),
+  MAK_FUNC_S (for_mmss_establish_ind, MMSS_ESTABLISH_IND),
+  MAK_FUNC_0 ( ss_mmss_release_ind  , MMSS_RELEASE_IND  )
+};
+
+#ifdef FF_EM_MODE
+LOCAL const T_FUNC em_table[] = {
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x00 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x01 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x02 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x03 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x04 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x05 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x06 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x07 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x08 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x09 */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x0A */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x0B */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x0C */
+  MAK_FUNC_N (pei_not_supported  , 0                ), /* 0x0D */
+  MAK_FUNC_0 (ss_em_ss_event_req , EM_SS_EVENT_REQ  )  /* 0x0E */
+};
+#endif /* FF_EM_MODE */
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_primitive       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Process protocol specific primitive.
+
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_primitive (void * ptr)
+#else
+T_PEI_RETURN pei_primitive (T_PRIM * prim)
+#endif
+{
+#if defined (NEW_FRAME)
+  T_PRIM *prim = ptr;
+#endif
+  /*
+   *              |          |
+   *             MNSS        EM               UPLINK
+   *              |          |
+   *      +-------v----------v-------+
+   *      |                          |
+   *      |            SS            |
+   *      |                          |
+   *      +-------------^------------+
+   *                    |
+   *                   MMSS                   DOWNLINK
+   *                    |
+   *
+   */
+
+  TRACE_FUNCTION ("pei_primitive()");
+
+  /*
+   * No timer functionality
+   */
+
+  if (prim NEQ NULL)
+  {
+    ULONG            opc = prim->custom.opc;
+    USHORT           n;
+    const T_FUNC    *table;
+#if defined (NEW_FRAME)
+    VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__);
+#endif
+
+    PTRACE_IN (opc);
+
+    switch (SAP_NR(opc))
+    {
+      case SAP_NR(MNSS_UL): table = mnss_table;  n = TAB_SIZE (mnss_table); break;
+      case SAP_NR(MMSS_DL): table = mmss_table;  n = TAB_SIZE (mmss_table); break;
+#ifdef FF_EM_MODE
+      case EM_Ul:           table = em_table;    n = TAB_SIZE (  em_table); break;
+#endif /* FF_EM_MODE */
+      default:              table = NULL;        n = 0;                     break;
+    }
+
+    if (table != NULL)
+    {
+      if (PRIM_NR(opc) < n)
+      {
+        table += PRIM_NR(opc);
+#ifdef PALLOC_TRANSITION
+        P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0;
+#ifndef NO_COPY_ROUTING
+        P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER);
+#endif /* NO_COPY_ROUTING */
+#endif /* PALLOC_TRANSITION */
+        JUMP (table->func) (P2D(prim));
+      }
+      else
+      {
+        pei_not_supported (P2D(prim));
+      }
+      return PEI_OK;
+    }
+
+    /*
+     * Primitive is no GSM Primitive
+     * then forward to the environment
+     */
+
+#ifdef GSM_ONLY
+    PFREE (P2D(prim))
+
+    return PEI_ERROR;
+#else
+    if (opc & SYS_MASK)
+      vsi_c_primitive (VSI_CALLER prim);
+    else
+    {
+      PFREE (P2D(prim));
+      return PEI_ERROR;
+    }
+#endif
+  }
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_init            |
++--------------------------------------------------------------------+
+
+  PURPOSE : Initialize Protocol Stack Entity
+
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_init (T_HANDLE handle)
+#else
+T_PEI_RETURN pei_init (void)
+#endif
+{
+#ifdef OPTION_MULTI_INSTANCE
+ USHORT i;
+#endif
+
+#if defined (NEW_FRAME)
+  ss_handle = handle;
+#endif
+
+  TRACE_FUNCTION ("pei_init()");
+#ifdef TI_PS_HCOMM_CHANGE
+  if (!cl_hcom_all_handles_open())
+  {
+    return PEI_ERROR;
+  }
+#else /* for hCommHandles backward compatibility */
+  if (hCommMMI < VSI_OK)
+  {
+    /*
+     * Open MMI (Layer 4)
+     */
+
+    if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+  if (hCommMM < VSI_OK)
+  {
+    if ((hCommMM = vsi_c_open (VSI_CALLER MM_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+#endif
+
+#ifdef OPTION_MULTI_INSTANCE
+  for (i=0;i<MAX_INSTANCES;i++)
+    ss_init_ss_data (&ss_data_base[i]);
+#else
+  ss_init_ss_data ();
+#endif
+  ccd_init ();
+
+#ifdef FF_EM_MODE
+  em_init_ss_event_trace();
+#endif /* FF_EM_MODE */
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_timeout         |
++--------------------------------------------------------------------+
+
+  PURPOSE : Process timeout
+
+*/
+#if !defined (NEW_FRAME)
+T_PEI_RETURN pei_timeout (T_VSI_THANDLE handle)
+{
+  TRACE_FUNCTION ("pei_timeout ()");
+  /*
+   * No Timer Functionality
+   */
+
+  return PEI_OK;
+}
+#endif
+
+
+#ifdef _SIMULATION_
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_exit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : Close Resources and terminate
+
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_exit (void)
+#else
+T_PEI_RETURN pei_exit (void)
+#endif
+{
+  TRACE_FUNCTION ("pei_exit()");
+
+  /*
+   * clean up communication
+   */
+#ifdef TI_PS_HCOMM_CHANGE
+#else /* for hCommHandles backward compatibility */
+  vsi_c_close (VSI_CALLER hCommMMI);
+  hCommMMI = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommMM);
+  hCommMM = VSI_ERROR;
+#endif
+  return PEI_OK;
+}
+#endif
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_run             |
++--------------------------------------------------------------------+
+
+  PURPOSE : Process Primitives, main loop is located in the
+            Protocol Stack Entity
+
+*/
+#if !defined (NEW_FRAME)
+T_PEI_RETURN pei_run (T_VSI_CHANDLE handle)
+{
+  return PEI_OK;
+}
+#endif
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_config          |
++--------------------------------------------------------------------+
+
+  PURPOSE : Dynamic Configuration
+
+*/
+/* Implements Measure#36 */
+#ifndef NCONFIG
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_config (T_PEI_CONFIG inString)
+#else
+T_PEI_RETURN pei_config (T_PEI_CONFIG inString,
+                         T_PEI_CONFIG outString)
+#endif
+{
+  return PEI_OK;
+}
+#endif /* !NCONFIG */
+
+#if defined (NEW_FRAME)
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : ss_pei_config       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Dynamic Configuration
+
+*/
+/* Implements Measure#36 */
+#ifndef NCONFIG
+GLOBAL SHORT ss_pei_config ( char * inString, char * dummy )
+{
+  pei_config ( inString );
+
+  return PEI_OK;
+}
+#endif /* !NCONFIG */
+#endif
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_monitor         |
++--------------------------------------------------------------------+
+
+  PURPOSE : Monitoring of physical Parameters
+
+*/
+#if defined (NEW_FRAME)
+LOCAL SHORT pei_monitor (void ** monitor)
+#else
+T_PEI_RETURN pei_monitor (void ** monitor)
+#endif
+{
+  TRACE_FUNCTION ("pei_monitor()");
+
+/* Implements Measure#32: Row 12 */
+
+  *monitor = &ss_mon;
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)              MODULE  : SS_PEI              |
+| STATE   : code                       ROUTINE : pei_create          |
++--------------------------------------------------------------------+
+
+  PURPOSE : Create the Protocol Stack Entity
+
+*/
+#if defined (NEW_FRAME)
+GLOBAL SHORT ss_pei_create (T_PEI_INFO **info)
+{
+  static const T_PEI_INFO pei_info =
+  {
+    "SS",
+    {
+      pei_init,
+#ifdef _SIMULATION_
+      pei_exit,
+#else
+      NULL,
+#endif
+      pei_primitive,
+      NULL,             /* no timeout function */
+      NULL,             /* no signal function  */
+      NULL,             /* no run function     */
+/* Implements Measure#36 */
+#ifdef NCONFIG
+      NULL,             /* no pei_config function     */
+#else /* NCONFIG */
+      pei_config,
+#endif /* NCONFIG */
+      pei_monitor,
+    },
+    924,      /* Stack Size      */
+    10,       /* Queue Entries   */
+    145,      /* Priority        */
+    0,        /* number of timer */
+    0x03|PRIM_NO_SUSPEND /* flags           */
+  };
+
+  TRACE_FUNCTION ("pei_create()");
+
+  /*
+   *  Close Resources if open
+   */
+
+#ifdef _SIMULATION_
+  if (first_access)
+    first_access = FALSE;
+  else
+    pei_exit ();
+#endif
+
+  /*
+   *  Export startup configuration data
+   */
+
+  *info = (T_PEI_INFO *)&pei_info;
+
+  return PEI_OK;
+}
+
+#else
+
+T_PEI_RETURN pei_create (T_VSI_CNAME * name)
+{
+  TRACE_FUNCTION ("pei_create()")
+
+  /*
+   *  Close Resources if open
+   */
+
+#ifdef _SIMULATION_
+  if (first_access)
+    first_access = FALSE;
+  else
+    pei_exit ();
+#endif
+
+  /*
+   *  Initialize entity data
+   */
+
+  *name = SS_NAME;
+
+  return PEI_OK;
+}
+#endif
+
+#endif