diff src/g23m-fad/l2r/tra_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/tra_upp.c	Wed Oct 12 05:40:46 2016 +0000
@@ -0,0 +1,196 @@
+/* 
++----------------------------------------------------------------------------- 
+|  Project :  CSD (8411)
+|  Modul   :  tra_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 TRA
++----------------------------------------------------------------------------- 
+*/ 
+
+#ifndef TRA_UPP_C
+#define TRA_UPP_C
+#endif
+
+#define ENTITY_L2R
+
+/*==== INCLUDES ===================================================*/
+
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "vsi.h"
+#include "macdef.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "pei.h"
+#include "tok.h"
+#include "dti.h"
+
+#include "cl_ribu.h"
+#include "tra_pei.h"
+#include "tra.h"
+
+/*==== CONST =======================================================*/
+
+/*==== TYPES =======================================================*/
+
+/*==== VAR EXPORT ==================================================*/
+
+/*==== VAR LOCAL ===================================================*/
+
+/*==== FUNCTIONS ===================================================*/
+
+/*
++------------------------------------------------------------------------------
+|  Function    : rcv_ra_ready_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive RA_READY_IND received from RA.
+|                This function is called if the RA_READY_IND primtive
+|                is received
+|
+|  Parameters  : ra_ready_ind -
+|
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void rcv_ra_ready_ind(T_RA_READY_IND *ra_ready_ind)
+{
+  T_TRA_UP *dul = &tra_data->up;
+
+#ifdef _SIMULATION_
+  TRACE_EVENT_P1 ("rcv_ra_ready_ind(), req_frames: 0x%x", ra_ready_ind->req_frames);
+  PACCESS (ra_ready_ind);
+#endif
+
+  dul->req_frames = ra_ready_ind->req_frames;
+  
+  switch (GET_STATE (UP))
+  {
+  case UP_IDLE:
+    SET_STATE (UP, UP_WAIT);
+    break;
+
+  case UP_SEND:
+    snd_data_to_RA();
+    if (dul->Prim->desc_list2.first EQ 0)
+    {
+      if (dul->Prim NEQ NULL)
+      {
+        PFREE(dul->Prim);
+        dul->Prim = NULL;
+      }
+      up_start_dti_flow();
+      SET_STATE (UP, UP_IDLE);
+    }
+    break;
+  }
+#ifdef _SIMULATION_
+  PFREE (ra_ready_ind);
+#endif
+}
+
+/*
++------------------------------------------------------------------------------
+|  Function    : sig_dti_tra_up_data_received_ind
++------------------------------------------------------------------------------
+|  Description : Process primitive DTI2_DATA_REQ received from CSDIWF.
+|
+|  Parameters  : dti_data_req
+|                 
+|
+|  Return      : -
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void sig_dti_tra_up_data_received_ind(T_DTI2_DATA_REQ *dti_data_req)
+{
+  T_TRA_UP *dul = &tra_data->up;
+
+  TRACE_FUNCTION ("sig_dti_tra_up_data_received_ind()");
+  
+  PACCESS        (dti_data_req);
+
+  dul->Prim = dti_data_req;
+  
+  dul->sa = dti_data_req->parameters.st_lines.st_line_sa;
+  dul->sb = dti_data_req->parameters.st_lines.st_line_sb;
+  dul->x  = dti_data_req->parameters.st_lines.st_flow;
+
+  /*
+  TRACE_EVENT_P1("new data: %02X", dti_data_req->desc_list2.list_len);
+  */
+
+  if (GET_STATE(DTI) NEQ DTI_CLOSED)
+  {
+    /* 
+     * do not send flow control primitives automatically 
+     */
+    dti_stop(l2r_hDTI, TRA_DTI_UP_INSTANCE, TRA_DTI_UP_INTERFACE, TRA_DTI_UP_CHANNEL);        
+  }
+
+  /* Detect break request */
+  if (dti_data_req->parameters.st_lines.st_break_len NEQ DTI_BREAK_OFF)
+  {
+    USHORT break_len = dti_data_req->parameters.st_lines.st_break_len;
+
+    PFREE(dti_data_req); /* no more used */
+
+    switch (GET_STATE (UP))
+    {
+    case UP_SEND:
+      /*
+       * No more data to send
+       */
+      SET_STATE (UP, UP_IDLE);
+      /* Fall through */
+
+    case UP_IDLE:
+    case UP_WAIT:
+      sig_up_tra_mgt_break_ind(break_len);
+      up_start_dti_flow();
+      break;
+    }
+    return; /* xxxxx - send data or do not send it??! */
+  }
+
+  switch (GET_STATE (UP))
+  {
+  case UP_SEND:
+    TRACE_EVENT("still in UP_SEND!");
+    break;
+
+  case UP_IDLE:
+    SET_STATE (UP, UP_SEND);
+    break;
+
+  case UP_WAIT:
+    snd_data_to_RA();
+    if (dti_data_req->desc_list2.list_len EQ 0) /* data is copied completely */
+    {
+      up_start_dti_flow();
+      SET_STATE (UP, UP_IDLE);
+      PFREE(dti_data_req);
+      dul->Prim = NULL;
+    }
+    else
+    {
+      SET_STATE (UP, UP_SEND);
+    }
+    break;
+  }
+}
+