diff src/g23m-gprs/grlc/grlc_rup.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-gprs/grlc/grlc_rup.c	Sun Jul 15 04:40:46 2018 +0000
@@ -0,0 +1,280 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  GPRS (8441)
+|  Modul   :  grlc
++----------------------------------------------------------------------------- 
+|  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 primitive handler functions for service
+|             RU of entity GRLC.
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef GRLC_RUP_C
+#define GRLC_RUP_C
+#endif
+
+#define ENTITY_GRLC
+
+
+
+
+/*==== INCLUDES =============================================================*/
+
+#include <stdio.h>
+#include <string.h>
+#include "typedefs.h"    /* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+#include "macdef.h"
+#include "gprs.h"
+#include "gsm.h"        /* to get a lot of macros */
+#include "ccdapi.h"     /* to get CCD API */
+#include "cnf_grlc.h"    /* to get cnf-definitions */
+#include "mon_grlc.h"    /* to get mon-definitions */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "message.h"
+#include "grlc.h"        /* to get the global entity definitions */
+#include "grlc_f.h" 
+#include "grlc_ruf.h"
+#include "grlc_tms.h"
+
+/*==== CONST ================================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3164
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3164
+|
+| Parameters  : *t3164 - Ptr to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3164 ( void )
+{ 
+  TRACE_FUNCTION( "t3164" );
+  
+  
+  switch( GET_STATE( RU ) )
+  {
+    case RU_ACK:
+    case RU_REL_ACK:
+    case RU_UACK:
+    case RU_REL_UACK:
+    case RU_SEND_PCA:
+      SET_STATE(RU,RU_NULL); 
+      grlc_data->ru.first_usf = FALSE;
+      grlc_data->t3164_to_cnt++;
+      TRACE_EVENT_P1("timeout T3164  cnt=%d",grlc_data->t3164_to_cnt);
+      sig_ru_tm_error_ra();      
+      break;
+    default:
+      TRACE_ERROR( "T3164 unexpected" );
+      TRACE_EVENT( "T3164 unexpected" );
+      break;
+  }
+
+} /* ru_t3164() */
+
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3166
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3166
+|
+| Parameters  : *t3166 - Ptr to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3166 ( void )
+{ 
+  TRACE_FUNCTION( "t3166" );
+  
+  
+  switch( GET_STATE( RU ) )
+  {
+    case RU_ACK:
+    case RU_REL_ACK:
+      SET_STATE(RU,RU_NULL);
+      vsi_t_stop(GRLC_handle,T3180);
+      vsi_t_stop(GRLC_handle,T3182);
+      TRACE_ERROR("timeout T3166");
+      TRACE_EVENT("timeout T3166");
+      sig_ru_tm_error_ra();
+      break;
+    default:
+      TRACE_ERROR( "T3166 unexpected" );
+      break;
+  }
+
+} /* ru_t3166() */
+
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3180
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3180
+|
+| Parameters  : *t3180 - Ptr to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3180 ( void )
+{ 
+  TRACE_FUNCTION( "t3180" );
+  
+  
+  switch( GET_STATE( RU ) )
+  {
+    case RU_ACK:
+    case RU_UACK:
+    case RU_REL_ACK:    
+    case RU_REL_UACK:    
+      SET_STATE(RU,RU_NULL);
+      TRACE_ERROR("timeout T3180");
+      TRACE_EVENT("timeout T3180");
+      ru_handle_n3102(PAN_DEC);
+      break;
+    default:
+      TRACE_ERROR( "T3180 unexpected" );
+      TRACE_EVENT( "T3180 unexpected" );
+      break;
+  }
+
+} /* ru_t3180() */
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3182
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3182
+|
+| Parameters  : *t3182 - Ptr to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3182 ( void )
+{ 
+  TRACE_FUNCTION( "t3182" );
+
+  TRACE_EVENT_P1("timeout T3182 state=%d", grlc_data->ru.state);
+  
+  switch( GET_STATE( RU ) )
+  {
+    case RU_ACK:
+    case RU_UACK:
+      /*
+       * Timeout during stall indcation
+       */
+      SET_STATE(RU,RU_NULL);
+      TRACE_ERROR("timeout T3182 ack state");
+      ru_handle_n3102(PAN_DEC);      
+      break;
+    case RU_REL_ACK:
+      SET_STATE(RU,RU_NULL);
+      TRACE_ERROR("timeout T3182 rel ack");
+      sig_ru_tm_error_ra();
+      break;
+    case RU_REL_UACK:
+      SET_STATE(RU,RU_NULL);
+      TRACE_ERROR("timeout T3182 rel uack state");
+      grlc_data->tbf_ctrl[grlc_data->ul_index].end_fn = grlc_data->ul_fn;
+      grlc_data->tbf_ctrl[grlc_data->ul_index].vs_vr  = grlc_data->ru.vs;
+      grlc_data->tbf_ctrl[grlc_data->ul_index].va_vq  = grlc_data->ru.va;
+      grlc_data->tbf_ctrl[grlc_data->ul_index].cnt_ts = grlc_data->ru.cnt_ts;
+      grlc_trace_tbf_par ( grlc_data->ul_index );    
+      /* in unack mode we need to delete the last llc pdu that constituted
+       * rlc block with cv=0. Unlike other rlc blocks in unack mode, block with
+       * cv=0 transmission will not relult in freeing of llc pdu as cv=0 
+       * may have to be retransmitted 4 times.
+       * In case of timer expiry llc pdu needs to be deleted here.
+       * timer t3180 also needs to be stopped.
+       */
+      ru_delete_prims(grlc_data->ru.vs);
+      vsi_t_stop(GRLC_handle,T3180);
+      sig_ru_tm_end_of_tbf();
+      break;
+    default:
+      TRACE_ERROR( "T3182 unexpected" );
+      break;
+  }
+
+} /* ru_t3182() */
+
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3184
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3184
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3184 ( void )
+{ 
+  TRACE_FUNCTION( "t3184" );
+  
+  TRACE_EVENT_P1("timeout T3184 state=%d", grlc_data->ru.state);
+  
+  switch( GET_STATE( RU ) )
+  {
+    case RU_ACK:
+    case RU_REL_ACK:
+    case RU_SEND_PCA:
+      SET_STATE(RU,RU_NULL);
+      TRACE_ERROR("timeout T3184");
+      sig_ru_tm_error_ra();
+      break;
+    default:
+      TRACE_ERROR( "T3184 unexpected" );
+      break;
+  }
+
+} /* ru_t3184() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : ru_t3314
++------------------------------------------------------------------------------
+| Description : Handles the primitive T3314
+|
+| Parameters  : 
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void ru_t3314 ( void )
+{ 
+  TRACE_FUNCTION( "ru_t3314" );
+  
+  TRACE_EVENT_P1("timeout T3314 state = %d", grlc_data->ru.state);
+  
+  grlc_enter_standby_state( );
+
+} /* ru_t3314() */