diff src/g23m-fad/ppp/ppp_frxs.c @ 1:fa8dc04885d8

src/g23m-*: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:25:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-fad/ppp/ppp_frxs.c	Fri Oct 16 06:25:50 2020 +0000
@@ -0,0 +1,390 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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 PPP and implements all 
+|             functions to handles the incoming process internal signals as  
+|             described in the SDL-documentation (FRX-statemachine)
++----------------------------------------------------------------------------- 
+*/ 
+
+#define ENTITY_PPP
+
+/*==== INCLUDES =============================================================*/
+
+#include "typedefs.h"   /* to get Condat data types */
+#include "vsi.h"        /* to get a lot of macros */
+#include "macdef.h"     /* to get a lot of macros */
+#include "custom.h"     /* to get a lot of macros */
+/*lint -efile(766,gsm.h) */
+#include "gsm.h"        /* to get a lot of macros */
+/*lint -efile(766,cnf_ppp.h) */
+#include "cnf_ppp.h"    /* to get cnf-definitions */
+/*lint -efile(766,mon_ppp.h) */
+#include "mon_ppp.h"    /* to get mon-definitions */
+#include "prim.h"       /* to get the definitions of used SAP and directions */
+#include "dti.h"        /* to get the DTILIB definitions */
+#include "ppp.h"        /* to get the global entity definitions */
+
+#include "ppp_frxf.h"   /* to get function interface from frx */
+#include "ppp_arbf.h"   /* to get function interface from arb */
+#include "ppp_ptxs.h"   /* to get signal interface from ptx */
+
+/*==== CONST ================================================================*/
+
+/*==== LOCAL VARS ===========================================================*/
+
+/*==== PRIVATE FUNCTIONS ====================================================*/
+
+/*==== PUBLIC FUNCTIONS =====================================================*/
+
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_ptx_frx_dead_mode_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_PTX_FRX_DEAD_MODE_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_ptx_frx_dead_mode_req () 
+{
+  TRACE_ISIG( "sig_ptx_frx_dead_mode_req" );
+
+  arb_discard_packet(ppp_data->frx.received_data);
+  arb_discard_packet(ppp_data->frx.stored_packet);
+  ppp_data->frx.received_data   = NULL;
+  ppp_data->frx.stored_packet   = NULL;
+  ppp_data->frx.store_state     = FRX_ADD_ERROR;
+  ppp_data->frx.frame_complete  = FALSE;
+  ppp_data->frx.data_flow_state = FRX_DATA_FLOW_DEAD;
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_READY:
+    case FRX_READY_NDTI:
+    case FRX_TRANSPARENT:
+    case FRX_TRANSPARENT_NDTI:
+      SET_STATE( PPP_SERVICE_FRX, FRX_DEAD );
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_PTX_FRX_DEAD_MODE_REQ unexpected" );
+      break;
+  }
+} /* sig_ptx_frx_dead_mode_req() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_ptx_frx_ready_mode_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_PTX_FRX_READY_MODE_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_ptx_frx_ready_mode_req () 
+{
+  TRACE_ISIG( "sig_ptx_frx_ready_mode_req" );
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_DEAD:
+      SET_STATE( PPP_SERVICE_FRX, FRX_READY_NDTI );
+      break;
+
+    case FRX_DEAD_DTI:
+      SET_STATE( PPP_SERVICE_FRX, FRX_READY );
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_PTX_FRX_READY_MODE_REQ unexpected" );
+      break;
+  }
+} /* sig_ptx_frx_ready_mode_req() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_ptx_frx_transparent_mode_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_PTX_FRX_TRANSPARENT_MODE_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_ptx_frx_transparent_mode_req () 
+{
+  TRACE_ISIG( "sig_ptx_frx_transparent_mode_req" );
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_DEAD:
+      SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT_NDTI );
+      break;
+
+    case FRX_DEAD_DTI:
+      SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT );
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_PTX_FRX_TRANSPARENT_MODE_REQ unexpected" );
+      break;
+  }
+} /* sig_ptx_frx_transparent_mode_req() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_ptx_frx_start_flow_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_PTX_FRX_START_FLOW_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_ptx_frx_start_flow_req () 
+{
+  TRACE_ISIG( "sig_ptx_frx_start_flow_req" );
+  /*
+   * set FRX PTX data flow state to ready.
+   */
+  ppp_data->frx.data_flow_state = FRX_DATA_FLOW_READY;
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_READY:
+      /*
+       * Send if necessary residuary packets from frame received before
+       */
+      frx_send_pack_ready_mode ();
+      /* 
+       * check if all packet of frame were sent and start dti
+       */
+      if((ppp_data->frx.frame_complete  EQ FALSE )         AND
+         (ppp_data->frx.data_flow_state EQ FRX_DATA_FLOW_READY))
+      {
+        /*
+         * Send a start signal to DTI 
+         */
+        dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
+      }
+      break;
+
+    case FRX_TRANSPARENT:
+      /*
+       * Send if necessary residuary packets from frame received before
+       */
+      frx_send_pack_transp_mode ();
+      /* 
+       * check if all packet of frame were sent and start dti 
+       */
+      if((ppp_data->frx.frame_complete  EQ FALSE)          AND
+         (ppp_data->frx.data_flow_state EQ FRX_DATA_FLOW_READY))
+      {
+        /*
+         * Send a start signal to DTI 
+         */
+        dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
+      }
+      break;
+    case FRX_READY_NDTI:
+    case FRX_TRANSPARENT_NDTI: 
+      /*
+       * silently ignore duplicate signal..
+       */
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_PTX_FRX_START_FLOW_REQ unexpected" );
+      break;
+  }
+
+} /* sig_ptx_frx_start_flow_req() */
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_ptx_frx_stop_flow_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_PTX_FRX_STOP_FLOW_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_ptx_frx_stop_flow_req () 
+{
+  TRACE_ISIG( "sig_ptx_frx_stop_flow_req" );
+
+  /*
+   * set FRX-PTX data flow state to dead.
+   */
+  ppp_data->frx.data_flow_state = FRX_DATA_FLOW_DEAD;
+  
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_READY:
+    case FRX_TRANSPARENT:
+      /*
+       * Send a stop signal to DTI 
+       */
+      dti_stop(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
+      break;
+
+    case FRX_READY_NDTI:
+    case FRX_TRANSPARENT_NDTI:
+      /*
+       * silently ignore duplicate signal..
+       */
+      break;
+     default:
+      TRACE_ERROR( "SIG_PTX_FRX_STOP_FLOW_REQ unexpected" );
+      break;
+  }
+
+} /* sig_ptx_frx_stop_flow_req() */
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_arb_frx_dti_connected_req
++------------------------------------------------------------------------------
+| Description : Handles the internal signal SIG_ARB_FRX_DTI_CONNECTED_REQ
+|
+| Parameters  : no parameters
+|
++------------------------------------------------------------------------------
+*/
+GLOBAL void sig_arb_frx_dti_connected_req ()
+{
+  TRACE_ISIG( "sig_arb_frx_dti_connected_req" );
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_DEAD:
+      SET_STATE( PPP_SERVICE_FRX, FRX_DEAD_DTI );
+      break;
+
+    case FRX_READY_NDTI:
+      SET_STATE( PPP_SERVICE_FRX, FRX_READY );
+      /*
+       * Send a start signal to DTI 
+       */
+      dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
+      break;
+
+    case FRX_TRANSPARENT_NDTI: 
+      SET_STATE( PPP_SERVICE_FRX, FRX_TRANSPARENT );
+      /*
+       * Send a start signal to DTI 
+       */
+      dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PEER_LAYER, PEER_CHANNEL);
+      break;
+
+    default:
+      TRACE_ERROR( "SIG_ARB_FRX_DTI_CONNECTED_REQ unexpected" );
+      break;
+  }
+} /* sig_arb_frx_dti_connected_req() */
+
+
+/*
++------------------------------------------------------------------------------
+| Function    : sig_dti_frx_data_received_ind
++------------------------------------------------------------------------------
+| Description : Handles the signal SIG_DTI_FRX_DATA_RECEIVED_IND
+|
+| Parameters  : dti_data_ind - Ptr. to primitive payload
+|
++------------------------------------------------------------------------------
+*/
+
+GLOBAL void sig_dti_frx_data_received_ind (T_DTI2_DATA_IND *dti_data_ind)
+{
+  TRACE_FUNCTION( "sig_dti_frx_data_received_ind" );
+
+  PACCESS(dti_data_ind);
+
+#ifdef PPP_HDLC_TRACE
+  {
+    T_desc2* trace_desc;
+    
+    trace_desc = (T_desc2*)dti_data_ind->desc_list2.first;
+    while(trace_desc)
+    {
+      if(trace_desc->len)
+      {
+        TRACE_EVENT_P4("new desc=0x%08x: first=0x%02x last=0x%02x len=%d", 
+                       trace_desc,
+                       trace_desc->buffer[0], 
+                       trace_desc->buffer[trace_desc->len - 1], 
+                       trace_desc->len);
+      }
+      else
+      {
+        TRACE_EVENT_P1("new desc=0x%08x: len=0", trace_desc);
+      }
+      trace_desc = (T_desc2*)trace_desc->next;
+    }
+  }
+#endif /* PPP_HDLC_TRACE */
+
+  switch( GET_STATE( PPP_SERVICE_FRX ) )
+  {
+    case FRX_READY:
+      ppp_data->frx.received_data = (T_desc2*)dti_data_ind->desc_list2.first;
+      ppp_data->frx.proceed_data  = 0;
+
+      /*
+       * send as many packets to ptx as can be extracted
+       * from the one just received
+       */
+      frx_add_desc();
+      frx_send_pack_ready_mode();
+      break;
+
+    case FRX_TRANSPARENT:
+      ppp_data->frx.received_data = (T_desc2*)dti_data_ind->desc_list2.first;
+      ppp_data->frx.proceed_data  = 0;
+
+      /*
+       * send as many packets to ptx as can be extracted
+       * from the one just received
+       */
+      frx_detect_frame();
+      frx_send_pack_transp_mode();
+      break;
+
+    default:
+      TRACE_ERROR( "DTI signal unexpected" );
+      /*
+       * free the data
+       */
+      arb_discard_packet((T_desc2*)dti_data_ind->desc_list2.first);
+      break;
+  }
+  
+  /*
+   * free the primitive
+   */
+  PFREE(dti_data_ind);
+} /* sig_dti_frx_data_received_ind() */
+
+
+