diff src/aci2/aci/psa_pktiop.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/aci/psa_pktiop.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,288 @@
+/*
++------------------------------------------------------------------------------
+|  File:       psa_pktiop.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 module defines the processing functions for the
+|              primitives send to the protocol stack adapter by the
+|              packet i/o managment (MNPKTIO).
++------------------------------------------------------------------------------
+*/
+
+#ifdef GPRS
+#ifdef FF_PKTIO
+#ifndef PSA_PKTIOP_C
+#define PSA_PKTIOP_C
+#endif
+
+#include "aci_all.h"
+/*==== INCLUDES ===================================================*/
+#include "dti.h"      /* functionality of the dti library */
+#include "aci_cmh.h"
+#include "ati_cmd.h"
+#include "aci_cmd.h"
+#include "aci_lst.h"
+#include "aci_mem.h"
+#include "aci.h"
+#include "psa.h"
+#include "psa_pktio.h"
+
+#include "cmh.h"
+/*#include "dti_mng.h"*/
+#include "dti_conn_mng.h"
+#include "dti_cntrl_mng.h"
+#include "cmh_pktio.h"
+
+
+/*==== CONSTANTS ==================================================*/
+
+
+/*==== TYPES ======================================================*/
+GLOBAL T_ACI_LIST *pktio_dev_list=NULL;
+
+
+/*==== EXPORT =====================================================*/
+
+
+/*==== VARIABLES ==================================================*/
+
+
+/*==== FUNCTIONS ==================================================*/
+LOCAL BOOL find_pkt_dev_no ( UBYTE deviceNum, void * elem );
+LOCAL BOOL mng_pkt_dev_list ( T_PKT_CONNECT_IND *pkt_connect_ind  );
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)         MODULE  : PSA_PKTIOP                   |
+| STATE   : finished            ROUTINE : find_pkt_dev_no              |
++----------------------------------------------------------------------+
+
+  PURPOSE : search pktio device number in pktio device list
+*/
+LOCAL BOOL find_pkt_dev_no ( UBYTE deviceNum, void * elem )
+{
+  T_ACI_PKTIO *compared = (T_ACI_PKTIO *)elem;
+
+  if (compared NEQ NULL)
+    if (compared->device_no EQ deviceNum )
+      return TRUE;
+    return FALSE; 
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)          MODULE  : PSA_PKTIOP                  |
+| STATE   : finished             ROUTINE : mng_pkt_dev_list            |
++----------------------------------------------------------------------+
+
+  PURPOSE : manage pktio device list
+*/
+LOCAL BOOL mng_pkt_dev_list ( T_PKT_CONNECT_IND *pkt_connect_ind  )
+{
+  T_ACI_PKTIO *  msg_ptr = NULL;
+
+  if(pktio_dev_list EQ NULL)
+  {/* there is no pktio device list */
+    pktio_dev_list = new_list();
+  }
+  msg_ptr = find_element(pktio_dev_list, pkt_connect_ind->device_no,
+                         find_pkt_dev_no);
+  if(msg_ptr EQ NULL)
+  {/* added new device */
+    if((pkt_connect_ind->dio_dcb.convergence >= DTI_CPBLTY_CMD ) 
+              AND 
+       (pkt_connect_ind->dio_dcb.convergence <=(DTI_CPBLTY_CMD|DTI_CPBLTY_PKT|DTI_CPBLTY_SER)))
+    {
+      ACI_MALLOC(msg_ptr,sizeof(T_ACI_PKTIO));
+      msg_ptr->device_no = pkt_connect_ind->device_no;
+      memcpy(&msg_ptr->pktio_cap, &pkt_connect_ind->dio_dcb,sizeof(T_ACI_PKTIO_CAP));
+      insert_list(pktio_dev_list,msg_ptr);
+      return (TRUE);
+    }
+    else
+    {/* neither CMD, SER nor PKT mode */
+      return (FALSE);           
+    }
+  }
+  else
+  {/* new DIO capabilities for existing device */
+    return (FALSE);
+  }
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PKTIOP                 |
+| STATE   : finished              ROUTINE : psa_pkt_connect_ind        |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_CONNECTION_IND primitive send by PKTIO.
+                   add new device to pktio device list
+                   register the DIO capabilities in ACI
+*/
+GLOBAL const void psa_pkt_connect_ind ( T_PKT_CONNECT_IND *pkt_connect_ind )
+{
+  T_ACI_PKTIO *  msg_ptr;
+
+  TRACE_FUNCTION ("psa_pkt_connect_ind()");
+  
+  if(mng_pkt_dev_list(pkt_connect_ind) EQ TRUE)
+  {
+    msg_ptr = find_element(pktio_dev_list, pkt_connect_ind->device_no,
+                                           find_pkt_dev_no);
+    cmhPKT_Ind(msg_ptr);
+  }
+  else
+  {/* second PKT_CONNECT_IND from same device or wrong convergence (mode) in 
+        DIO capabilities */
+    psaPKT_ConnectRej(pkt_connect_ind->device_no);
+  }
+  /* free the primitive buffer */
+  PFREE (pkt_connect_ind);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PKTIOP                 |
+| STATE   : finished              ROUTINE : psa_pkt_disconnect_ind     |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_DISCONNECTION_IND primitive send by PKTIO.
+            Removes the device from the pktio device list.
+*/
+GLOBAL const void psa_pkt_disconnect_ind ( T_PKT_DISCONNECT_IND *
+                                           pkt_disconnect_ind )
+{
+
+  TRACE_FUNCTION ("psa_pkt_disconnect_ind()");    
+
+  remove_element(pktio_dev_list, pkt_disconnect_ind->device_no, find_pkt_dev_no);
+
+  /* free the primitive buffer */
+  PFREE (pkt_disconnect_ind);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PKTIOP                 |
+| STATE   : finished              ROUTINE : psa_pkt_dti_close_cnf      |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_DTI_CLOSE_CNF primitive send by PKTIO.
+     this confirms the dti disconnection requested by PKT_DTI_CLOSE_REQ 
+*/
+GLOBAL const void psa_pkt_dti_close_cnf ( T_PKT_DTI_CLOSE_CNF *
+                                          pkt_dti_close_cnf )
+{
+  T_ACI_PKTIO * msg_ptr;
+        
+  TRACE_FUNCTION ("psa_pkt_dti_close_cnf()");    
+  msg_ptr = find_element(pktio_dev_list, pkt_dti_close_cnf->device_no, 
+                                          find_pkt_dev_no);
+  /* if the device_no does not exist in the pktio_dev_list
+       the primitive is ignored */
+  if(msg_ptr NEQ NULL)
+  {                    
+    cmhPKT_Close(pkt_dti_close_cnf->device_no, DTI_CLOSE_CNF);          
+  }
+  /* free the primitive buffer */
+  PFREE (pkt_dti_close_cnf);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PKTIOP                 |
+| STATE   : finished              ROUTINE : psa_pkt_dti_close_ind      |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_DTI_CLOSE_IND primitive send by PKTIO.
+            this indicates the dti disconnection caused by the DIO driver
+*/
+GLOBAL const void psa_pkt_dti_close_ind ( T_PKT_DTI_CLOSE_IND *
+                                          pkt_dti_close_ind )
+{
+  T_ACI_PKTIO * msg_ptr;
+     
+  TRACE_FUNCTION ("psa_pkt_dti_close_ind()");
+
+  msg_ptr = find_element(pktio_dev_list, pkt_dti_close_ind->device_no, 
+                                          find_pkt_dev_no);
+  /* if the device_no does not exist in the pktio_dev_list
+     the primitive is ignored */
+  if(msg_ptr NEQ NULL)
+  {            
+    cmhPKT_Close(pkt_dti_close_ind->device_no, DTI_CLOSE_IND);
+  } 
+  /* free the primitive buffer */
+  PFREE (pkt_dti_close_ind);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)          MODULE  : PSA_PKTIOP                  |
+| STATE   : finished             ROUTINE : psa_pkt_dti_open_cnf        |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_DTI_OPEN_CNF primitive send by PKTIO.
+            this confirms the dti connection requested by PKT_DTI_OPEN_REQ
+*/
+GLOBAL const void psa_pkt_dti_open_cnf ( T_PKT_DTI_OPEN_CNF *
+                                         pkt_dti_open_cnf )
+{
+  T_ACI_PKTIO * msg_ptr;
+     
+  TRACE_FUNCTION ("psa_pkt_dti_open_cnf()");
+
+  msg_ptr = find_element(pktio_dev_list, pkt_dti_open_cnf->device_no, 
+                                          find_pkt_dev_no);
+  /* if the device_no does not exist in the pktio_dev_list
+     the primitive is ignored */
+  if(msg_ptr NEQ NULL)
+  {
+    switch(pkt_dti_open_cnf->cause)
+    {
+      case PKTCS_SUCCESS:
+        cmhPKT_OpenCnf(pkt_dti_open_cnf->device_no,DTI_OK);
+        break;
+      case PKTCS_INVALID_PARAMS:
+      case PKTCS_INVALID_PEER:
+      case PKTCS_DISCONNECT:
+      case PKTCS_INTERNAL_DRV_ERROR:
+      default:
+        cmhPKT_OpenCnf(pkt_dti_open_cnf->device_no,DTI_ERROR);
+        break;
+    }              
+ }
+ /* free the primitive buffer */
+ PFREE (pkt_dti_open_cnf);
+}
+
+/*
++----------------------------------------------------------------------+
+| PROJECT : GPRS (8441)           MODULE  : PSA_PKTIOP                 |
+| STATE   : finished              ROUTINE : psa_pkt_modify_cnf         |
++----------------------------------------------------------------------+
+
+  PURPOSE : processes the PKT_MODIFY_CNF primitive send by PKTIO.
+            this confirms the modification fo channel parameters
+            requested by PKT_MODIFY_REQ
+*/
+GLOBAL const void psa_pkt_modify_cnf ( T_PKT_MODIFY_CNF *pkt_modify_cnf )
+{
+  TRACE_FUNCTION ("psa_pkt_modify_cnf()");
+ 
+  /* free the primitive buffer */
+  PFREE (pkt_modify_cnf);
+}
+#endif /* FF_PKTIO */
+#endif  /* GPRS */
+/*==== EOF =========================================================*/