diff gsm-fw/g23m-aci/aci/psa_gpppf.c @ 775:eedbf248bac0

gsm-fw/g23m-aci subtree: initial import from LoCosto source
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 12 Oct 2014 01:45:14 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/g23m-aci/aci/psa_gpppf.c	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,389 @@
+/*
++-----------------------------------------------------------------------------
+|  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 module defines the functions for the protocol
+|             stack adapter for GPRS Point-to-Point Protocol ( PPP ).
++-----------------------------------------------------------------------------
+*/
+
+#if defined (GPRS) && defined (DTI)
+
+#ifndef PSA_GPPPF_C
+#define PSA_GPPPF_C
+#endif
+
+#include "aci_all.h"
+
+#undef TRACING
+/*==== INCLUDES ===================================================*/
+#include "dti.h"      /* functionality of the dti library */
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "aci.h"
+#include "psa.h"
+
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+
+#include "gaci.h"
+#include "gaci_cmh.h"
+#include "cmh.h"
+#include "cmh_sm.h"
+
+#include "psa_gppp.h"
+#include "aci_io.h"
+
+#include "psa_uart.h"
+#include "sap_dti.h"
+#ifdef FF_PSI
+#include "psa_psi.h"
+#include "cmh_psi.h"
+#include "ati_src_psi.h"
+#endif /*FF_PSI*/
+
+/*==== CONSTANTS ==================================================*/
+/*#define ITM_WDT         (14)*/    /* item width in chars */
+/*#define HDR_WDT         (10)*/    /* header width in chars */
+
+/*==== TYPES ======================================================*/
+
+
+/*==== EXPORT =====================================================*/
+
+
+/*==== VARIABLES ==================================================*/
+
+/*==== FUNCTIONS ==================================================*/
+EXTERN GLOBAL void cmhGPPP_send_establish_request ( UBYTE peer, UBYTE prot );
+
+/*
++-------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PPPF                |
+| STATE   : code                  ROUTINE : psaGPPP_Init            |
++-------------------------------------------------------------------+
+
+  PURPOSE : initialize the protocol stack adapter for PPP.
+
+*/
+
+/* MACRO: initializer for set parameter */
+#ifdef  INIT_SET_PARM
+  #undef  INIT_SET_PARM
+#endif
+
+#define INIT_SET_PARM( dest, def )\
+  for( LpCnt = 0; LpCnt < OWN_SRC_MAX; LpCnt++ )\
+    gpppShrdPrm.setPrm[LpCnt].dest = def
+
+GLOBAL void psaGPPP_Init ( UBYTE accm, UBYTE restart_timer,
+                           UBYTE max_configure, UBYTE max_terminate, UBYTE max_failure )
+{
+
+/*
+ *-------------------------------------------------------------------
+ * set default parms
+ *-------------------------------------------------------------------
+ */
+  gpppShrdPrm.owner                       = (UBYTE) CMD_SRC_NONE;
+  gpppShrdPrm.ppp_authentication_protocol = PPP_AP_AUTO;
+
+  gpppShrdPrm.accm          = accm;
+  gpppShrdPrm.restart_timer = restart_timer;
+  gpppShrdPrm.max_configure = max_configure;
+  gpppShrdPrm.max_terminate = max_terminate;
+  gpppShrdPrm.max_failure   = max_failure;
+
+}
+
+UBYTE GPPS_First_Stored_Peer = 0; // HHV: Bad hack due to two DTI links in one prim!
+GLOBAL void psaGPPPS_Dti_Req( T_DTI_CONN_LINK_ID link_id, UBYTE peer )
+{
+  T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL;
+  TRACE_FUNCTION("psaGPPPS_Dti_Req()");
+  
+  p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[0]);
+  
+  switch ( peer )
+  {
+#ifdef BT_ADAPTER
+    case DTI_ENTITY_BLUETOOTH:
+      p_pdp_context_node->internal_data.link_id_uart = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_BLUETOOTH, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+      if (GPPS_First_Stored_Peer)
+      {
+        io_setDCD (p_pdp_context_node->internal_data.owner, IO_DCD_ON);
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_BLUETOOTH);
+        GPPS_First_Stored_Peer = 0;
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_BLUETOOTH;
+      }
+      break;
+
+#endif  /* BT_ADAPTER */
+    case DTI_ENTITY_UART:
+      p_pdp_context_node->internal_data.link_id_uart = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_UART, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+      if (GPPS_First_Stored_Peer)
+      {
+        io_setDCD (p_pdp_context_node->internal_data.owner, IO_DCD_ON);
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_UART);
+        GPPS_First_Stored_Peer = 0;
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_UART;
+      }
+      break;
+#if 0
+    /* For the 3G protocol stack PPP can not have UPM as peer as all data goes through SNDCP! */
+    case DTI_ENTITY_UPM:
+      p_pdp_context_node->internal_data.link_id = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_UPM, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+      if (GPPS_First_Stored_Peer)
+      {
+        T_DTI_ENTITY_ID other_peer = dti_cntrl_get_peer(DTI_ENTITY_PPPS, 0, 0);
+        if(DTI_ENTITY_UART EQ other_peer) 
+        {
+          io_setDCD (p_pdp_context_node->internal_data.owner, IO_DCD_ON);
+        }
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_UPM);
+        GPPS_First_Stored_Peer = 0;
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_UPM;
+      }
+      break;
+#endif /* 0 */
+#ifdef FF_PSI
+    case DTI_ENTITY_PSI:
+      p_pdp_context_node->internal_data.link_id_uart = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PSI, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+      if (GPPS_First_Stored_Peer)
+      {
+        io_setDCD (p_pdp_context_node->internal_data.owner, IO_DCD_ON);
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_PSI);
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_PSI;
+      }
+      break;
+#endif /*FF_PSI*/
+    case DTI_ENTITY_AAA:
+      p_pdp_context_node->internal_data.link_id_uart = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_AAA, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+      if (GPPS_First_Stored_Peer)
+      {
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_AAA);
+        GPPS_First_Stored_Peer = 0;
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_AAA;
+      }
+      break;
+
+    case DTI_ENTITY_SNDCP:
+      p_pdp_context_node->internal_data.link_id = link_id;
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_SNDCP, 0, 0);
+      dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_PPPS, 0, 0);
+
+      if (GPPS_First_Stored_Peer)
+      {
+        T_DTI_ENTITY_ID other_peer = dti_cntrl_get_peer(DTI_ENTITY_PPPS, 0, 0);
+        if(DTI_ENTITY_UART EQ other_peer) 
+        {
+          io_setDCD (p_pdp_context_node->internal_data.owner, IO_DCD_ON);
+        }
+        cmhGPPP_send_establish_request(GPPS_First_Stored_Peer, DTI_ENTITY_SNDCP);
+        GPPS_First_Stored_Peer = 0;
+      }
+      else
+      {
+        GPPS_First_Stored_Peer = DTI_ENTITY_SNDCP;
+      }
+      break;
+  }
+}
+
+/*
++-------------------------------------------------------------------------+
+| PROJECT : GSM-F&D (8411)              MODULE  : PSA_PPPF                |
+| STATE   : code                        ROUTINE : PPP_UART_connect_dti_cb |
++-------------------------------------------------------------------------+
+
+  PURPOSE : Callback for DTI connection between PPP Server and UART.
+
+*/
+GLOBAL BOOL PPP_UART_connect_dti_cb(UBYTE dti_id, T_DTI_CONN_STATE result_type)
+{
+  TRACE_FUNCTION("PPP_UART_connect_dti_cb");
+
+  switch( result_type)
+  {
+    case DTI_CONN_STATE_DISCONNECTING:
+      break;
+    case DTI_CONN_STATE_DISCONNECTED:
+      dti_cntrl_clear_conn_parms(dti_id);
+      if (dti_cntrl_is_dti_id_to_reconnect(dti_id))
+      {
+        T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI};
+        T_DTI_CNTRL info;
+
+        if (dti_cntrl_get_info_from_dti_id( dti_id, &info) EQ FALSE)
+        {
+          TRACE_EVENT_P1("cannot find info for dti_id=%d", dti_id);
+          return FALSE;
+        }
+
+        if (info.dev_id EQ DTI_ENTITY_UART)
+        {
+          io_setDCD ((T_ACI_CMD_SRC)info.src_id, IO_DCD_OFF);
+
+          dti_cntrl_clear_dti_id_to_reconnect(dti_id);
+          dti_cntrl_est_dpath_indirect ( info.src_id,
+                                         entity_list,
+                                         1,
+                                         SPLIT,
+                                         atiUART_dti_cb,
+                                         DTI_CPBLTY_CMD,
+                                         DTI_CID_NOTPRESENT);
+        }
+#ifdef FF_PSI
+        else if (info.dev_id EQ DTI_ENTITY_PSI)
+        {
+          io_setDCD ((T_ACI_CMD_SRC)info.src_id, IO_DCD_OFF);
+
+          dti_cntrl_clear_dti_id_to_reconnect(dti_id);
+          dti_cntrl_est_dpath_indirect ( info.src_id,
+                                         entity_list,
+                                         1,
+                                         SPLIT,
+                                         atiPSI_dti_cb,
+                                         DTI_CPBLTY_CMD,
+                                         DTI_CID_NOTPRESENT);
+        }
+#endif /*FF_PSI*/
+        else
+           return FALSE;
+      }
+      break;
+
+    case DTI_CONN_STATE_CONNECTING:
+      break;
+    case DTI_CONN_STATE_CONNECTED:
+      break;
+
+    case DTI_CONN_STATE_ERROR:
+      /* connection not possible: disconnect PPP */
+      dti_cntrl_close_dpath_from_dti_id(dti_id);
+      break;
+    case DTI_CONN_STATE_UNKNOWN:
+    default:
+      TRACE_EVENT("PPP_UART_connect_dti_cb call with not awaited value");
+      break;
+  }
+  return TRUE;
+}
+
+#if 0
+/*
++-------------------------------------------------------------------+
+| PROJECT : GSM-PS (6147)         MODULE  : PSA_PPPF                |
+|                                 ROUTINE : psaGPPP_shrPrmDump       |
++-------------------------------------------------------------------+
+
+  PURPOSE : this function dumps the shared parameter to the debug
+            output.
+*/
+
+GLOBAL void psaGPPP_shrPrmDump ( void )
+{
+#ifdef TRACING
+
+  char  lnBuf [80];             /* holds buffer for output line */
+  char  mccBuf[SIZE_MCC + 1];   /* MCC converted to printable C-string */
+  char  mncBuf[SIZE_MNC + 1];   /* MNC converted to printable C-string */
+  SHORT chrNr;                  /* holds number of processed chars */
+  SHORT cnt;                    /* holds a counter */
+
+ /* --- PLMN list ------------------------------------------------*/
+  for( cnt = 0; cnt<MAX_PLMN_ID AND
+                mmShrdPrm.PLMNLst[cnt].v_plmn NEQ INVLD_PLMN; cnt++ )
+  {
+    chrNr  = sprintf( lnBuf, "%*.*s[%2d]", HDR_WDT, HDR_WDT, " PLMN list",cnt );
+    utl_BCD2String (mccBuf, mmShrdPrm.PLMNLst[cnt].mcc, SIZE_MCC);
+    utl_BCD2String (mncBuf, mmShrdPrm.PLMNLst[cnt].mnc, SIZE_MNC);
+    chrNr += sprintf( lnBuf+chrNr, "%*s %*s",
+                      ITM_WDT/2, ITM_WDT/2, mccBuf, mncBuf);
+    TRACE_EVENT( lnBuf );
+  }
+
+  /* --- used PLMN ------------------------------------------------*/
+  chrNr  = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, " used PLMN" );
+  if( mmShrdPrm.usedPLMN.v_plmn EQ VLD_PLMN )
+  {
+    utl_BCD2String (mccBuf, mmShrdPrm.usedPLMN.mcc, SIZE_MCC);
+    utl_BCD2String (mncBuf, mmShrdPrm.usedPLMN.mnc, SIZE_MNC);
+    chrNr += sprintf( lnBuf+chrNr, "%*s %*s",
+                      ITM_WDT/2, ITM_WDT/2, mccBuf, mncBuf);
+  }
+  else
+  {
+    chrNr += sprintf( lnBuf+chrNr, "%*s", ITM_WDT, "none" );
+  }
+  TRACE_EVENT( lnBuf );
+
+  /* --- registration mode ----------------------------------------*/
+  chrNr  = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "rgstr mode" );
+  chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
+                                         mmShrdPrm.setPrm[0].regMode );
+  TRACE_EVENT( lnBuf );
+
+  /* --- registration status --------------------------------------*/
+  chrNr  = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "rgstr stat" );
+  chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
+                                         mmShrdPrm.regStat );
+  TRACE_EVENT( lnBuf );
+
+  /* --- search result --------------------------------------------*/
+  chrNr  = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, " srch rslt" );
+  chrNr += sprintf( lnBuf+chrNr, "%*hd", ITM_WDT,
+                                         mmShrdPrm.srchRslt );
+  TRACE_EVENT( lnBuf );
+
+  /* --- de-registration cause ------------------------------------*/
+  chrNr  = sprintf( lnBuf, "%*.*s", HDR_WDT, HDR_WDT, "dereg caus" );
+  chrNr += sprintf( lnBuf+chrNr, "%*X", ITM_WDT,
+                                        mmShrdPrm.deregCs );
+  TRACE_EVENT( lnBuf );
+
+#endif  /* of #ifdef TRACING */
+}
+#endif  /* #if 0 */
+
+#endif  /* GPRS */
+/*==== EOF ========================================================*/
+