diff src/g23m-fad/l2r/l2r_upp.c @ 174:90eb61ecd093

src/g23m-fad: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 12 Oct 2016 05:40:46 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/l2r/l2r_upp.c	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,225 @@
+/*
++-----------------------------------------------------------------------------
+|  Project :  CSD (8411)
+|  Modul   :  L2r_upp.c
++-----------------------------------------------------------------------------
+|  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 Modul defines the functions for processing
+|             of incomming primitives for the component
+|             L2R of the base station
++-----------------------------------------------------------------------------
+*/
+
+#ifndef L2R_UPP_C
+#define L2R_UPP_C
+#endif
+
+#define ENTITY_L2R
+
+/*==== INCLUDES ===================================================*/
+
+#include <string.h>
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "vsi.h"
+#include "macdef.h"
+#include "custom.h"
+#include "gsm.h"
+#include "cus_l2r.h"
+#include "cnf_l2r.h"
+#include "mon_l2r.h"
+#include "prim.h"
+#include "pei.h"
+#include "tok.h"
+#include "dti.h"      /* functionality of the dti library */
+
+#include "cl_ribu.h"
+#include "l2r.h"
+
+/*==== CONST =======================================================*/
+/*==== TYPES =======================================================*/
+/*==== VAR EXPORT ==================================================*/
+/*==== VAR LOCAL ===================================================*/
+/*==== FUNCTIONS ===================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_up_data_received_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive DTI2_DATA_REQ received from CSDIWF.
+|
+|  Parameters  : dti_data_req -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void sig_dti_up_data_received_ind(T_DTI2_DATA_REQ *dti_data_req)
+{
+  T_UP *dup = &l2r_data->up;
+
+  TRACE_FUNCTION ("sig_dti_up_data_received_ind()");
+
+  PACCESS        (dti_data_req);
+
+  switch (GET_STATE (UP))
+  {
+  case UP_CONNECTED:
+    {
+      if (GET_STATE (DTI) NEQ DTI_CLOSED)
+      {
+        /*
+         * do not send flow control primitives automatically
+         */
+        dti_stop(l2r_hDTI, L2R_DTI_UP_DEF_INSTANCE, L2R_DTI_UP_INTERFACE, L2R_DTI_UP_CHANNEL);
+      }
+
+      SET_STATE (UP_UL, IW_IDLE);
+      dup->Prim = dti_data_req;
+
+      /* detect break request */
+      if (dup->Prim->parameters.st_lines.st_break_len NEQ DTI_BREAK_OFF)
+      {
+        sig_up_mgt_break_ind(dup->Prim);
+      }
+      else
+      {
+        up_store_data();
+      }
+
+      switch (GET_STATE (UP_LL))
+      {
+      case ISW_WAIT:
+        if (dup->LLFlow EQ FL_INACTIVE AND dup->RiBu.idx.filled)
+        {
+          /* L_UDR_1 */
+          TIMERSTOP (TIMER_TUP_SND);
+          up_send_current_prim();
+
+          if (!dup->RiBu.idx.filled)
+          {
+            SET_STATE (UP_LL, ISW_IDLE);
+          }
+          else
+          {
+            SET_STATE (UP_LL, ISW_SEND);
+          }
+        }
+        else
+        {
+          /* L_UDR_2 */
+          if( dup->LastSentFlow EQ dup->MrgFlow )
+            return;
+
+          TIMERSTOP (TIMER_TUP_SND);
+
+          switch (dup->LLFlow)
+          {
+          case FL_INACTIVE:
+            up_send_prim_timeout();
+            break;
+
+          case FL_ACTIVE:
+            up_send_empty_frame(dup->LastSentSa, dup->LastSentSb, dup->MrgFlow);
+            break;
+          }
+
+          if (!dup->RiBu.idx.filled)
+          {
+            SET_STATE (UP_LL, ISW_IDLE);
+          }
+          else
+          {
+            SET_STATE (UP_LL, ISW_SEND);
+          }
+        }
+        break;
+
+      default:
+        if (!dup->RiBu.idx.filled) /* no primitive is ready */
+          return;
+
+        /* L_UDR3 */
+        up_check_flow();
+        up_check_alloc();
+        SET_STATE (UP_LL, ISW_SEND);
+        break;
+      }
+      break;
+    }
+  }
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : up_rlp_ready_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RLP_READY_IND received from RLP.
+|
+|  Parameters  : rlp_ready_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void up_rlp_ready_ind(T_RLP_READY_IND *rlp_ready_ind)
+{
+  T_UP *dup = &l2r_data->up;
+
+  TRACE_FUNCTION ("rlp_ready_ind()");
+  PACCESS        (rlp_ready_ind);
+
+  switch (GET_STATE (UP))
+  {
+  case UP_CONNECTED:
+    switch (GET_STATE (UP_LL))
+    {
+    case ISW_SEND:
+      if (dup->LLFlow EQ FL_INACTIVE OR dup->UrgentMsg)
+      {
+        up_send_current_prim();
+        if (!dup->RiBu.idx.filled)
+        {
+          SET_STATE (UP_LL, ISW_IDLE);
+        }
+      }
+      else
+      {
+        if (dup->LastSentFlow NEQ dup->MrgFlow)
+        {
+          up_send_empty_frame(dup->LastSentSa, dup->LastSentSb, dup->MrgFlow);
+        }
+        else
+        {
+          SET_STATE (UP_LL, ISW_WAIT);
+          TIMERSTART(TIMER_TUP_SND, LL_TO);
+        }
+      }
+      break;
+
+    default:
+      SET_STATE (UP_LL, ISW_WAIT);
+      TIMERSTART(TIMER_TUP_SND, LL_TO);
+      break;
+    }
+    break;
+
+  case UP_REMAP:
+    SET_STATE (UP_LL, ISW_WAIT);
+    break;
+  }
+  PFREE (rlp_ready_ind);
+}
+