diff src/g23m-gprs/llc/llc_uirxp.c @ 183:219afcfc6250

src/g23m-gprs: initial import from TCS3.2/LoCosto
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 13 Oct 2016 04:24:13 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gprs/llc/llc_uirxp.c	Thu Oct 13 04:24:13 2016 +0000
@@ -0,0 +1,143 @@
+/*
++-----------------------------------------------------------------------------
+|  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 modul is part of the entity LLC and implements all
+|             functions to handles the incoming primitives as described in
+|             the SDL-documentation (UIRX-statemachine)
++-----------------------------------------------------------------------------
+*/
+
+#ifndef LLC_UIRXP_C
+#define LLC_UIRXP_C
+#endif
+
+#define ENTITY_LLC
+
+/*==== INCLUDES =============================================================*/
+
+#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 "cnf_llc.h"    /* to get cnf-definitions */
+#include "mon_llc.h"    /* to get mon-definitions */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "llc.h"        /* to get the global entity definitions */
+
+#include "llc_uirxf.h"  /* to get queue management prototypes */
+/*==== CONST ================================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : uirx_ll_getunitdata_req
++------------------------------------------------------------------------------
+| Description : Handles the primitive LL_GETUNITDATA_REQ
+|
+| Parameters  : *ll_getunitdata_req - Ptr to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void uirx_ll_getunitdata_req ( T_LL_GETUNITDATA_REQ *ll_getunitdata_req )
+{
+  T_LL_UNITDATA_IND *ll_unitdata_ind;
+
+  TRACE_FUNCTION( "ll_getunitdata_req" );
+
+  SWITCH_LLC (ll_getunitdata_req->sapi);
+
+  TRACE_1_PARA("s:%d", ll_getunitdata_req->sapi );
+
+  switch (GET_STATE(UIRX))
+  {
+    case UIRX_TLLI_UNASSIGNED_NOT_READY:
+      PFREE (ll_getunitdata_req);
+      SET_STATE (UIRX, UIRX_TLLI_UNASSIGNED_READY);
+      break;
+
+    case UIRX_ADM_NOT_READY:
+      PFREE (ll_getunitdata_req);
+
+      /*
+       * First check, if already a frame is waiting.
+       */
+      if (uirx_queue_retrieve (&ll_unitdata_ind))
+      {
+        /*
+         * A frame is waiting. Send primitive LL-UNITDATA-IND
+         * to either SNDCP or GSMS, depending on the SAPI (GMM
+         * uses now flow control!).
+         */
+        switch (ll_unitdata_ind->sapi)
+        {
+          case LL_SAPI_3:
+          case LL_SAPI_5:
+          case LL_SAPI_9:
+          case LL_SAPI_11:
+            TRACE_3_OUT_PARA("s:%d len:%d c:%d", ll_unitdata_ind->sapi,
+                                             BYTELEN(ll_unitdata_ind->sdu.l_buf),
+                                             ll_unitdata_ind->cipher);
+            PSEND (hCommSNDCP, ll_unitdata_ind);
+            break;
+
+          case LL_SAPI_7:
+#ifdef LL_2to1
+            TRACE_PRIM_TO("MM");
+            TRACE_3_OUT_PARA("s:%d len:%d c:%d", ll_unitdata_ind->sapi,
+                                             BYTELEN(ll_unitdata_ind->sdu.l_buf),
+                                             ll_unitdata_ind->cipher);
+            PSEND (hCommMM, ll_unitdata_ind);
+            break;
+#else
+            TRACE_PRIM_TO("GSMS");
+            TRACE_3_OUT_PARA("s:%d len:%d c:%d", ll_unitdata_ind->sapi,
+                                             BYTELEN(ll_unitdata_ind->sdu.l_buf),
+                                             ll_unitdata_ind->cipher);
+            PSEND (hCommGSMS, ll_unitdata_ind);
+            break;
+#endif
+
+          default:
+            PFREE (ll_unitdata_ind);
+            TRACE_ERROR ("Invalid SAPI value");
+            break;
+        }
+      }
+      else
+      {
+        /*
+         * No frame is waiting. Allow straight forwarding
+         * of the next received frame.
+         */
+        SET_STATE (UIRX, UIRX_ADM_READY);
+      }
+      break;
+
+    default:
+      PFREE (ll_getunitdata_req);
+      TRACE_ERROR( "LL_GETUNITDATA_REQ unexpected" );
+      break;
+  }
+
+} /* uirx_ll_getunitdata_req() */