FreeCalypso > hg > freecalypso-sw
view gsm-fw/g23m-aci/aci/cmh_gpppr.c @ 854:acc9e473e93f
gsm-fw/g23m-aci/aci/ati_bas.c: +CGxx fix in preparation for enabling MokoFFS
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Thu, 30 Apr 2015 02:56:40 +0000 |
parents | eedbf248bac0 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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 which are responsible | for the responses of the protocol stack adapter for | GPRS Point-to-Point Protocol ( PPP ). +----------------------------------------------------------------------------- */ #if defined (GPRS) && defined (DTI) #ifndef CMH_GPPPR_C #define CMH_GPPPR_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 "dti_conn_mng.h" #include "dti_cntrl_mng.h" #include "aci.h" #include "gaci.h" #include "gaci_cmh.h" #include "psa.h" #include "psa_gppp.h" #include "psa_sm.h" #include "psa_uart.h" #include "psa_aaa.h" #include "cmh.h" #include "cmh_gppp.h" #include "cmh_sm.h" #include "sap_dti.h" /*==== CONSTANTS ==================================================*/ /*==== TYPES ======================================================*/ /*==== EXPORT =====================================================*/ /*==== VARIABLES ==================================================*/ /*==== FUNCTIONS ==================================================*/ /* +-------------------------------------------------------------------+ | PROJECT : GPRS (8441) MODULE : CMH_PPPR | | STATE : finnished ROUTINE : cmhGPPP_Established | +-------------------------------------------------------------------+ PURPOSE : establish a PPP link was successful */ GLOBAL SHORT cmhGPPP_Established ( void ) { T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; TRACE_FUNCTION ("cmhGPPP_Established()"); p_pdp_context_node = pdp_context_find_node_from_cid( work_cids[cid_pointer] ); if( p_pdp_context_node ) { switch( gpppEntStat.curCmd ) { case( AT_CMD_CGDATA ): /* no action, because the PDP context will be terminated */ if( get_state_working_cid() NEQ PDP_CONTEXT_STATE_ESTABLISH_3 ) { return 0; } else { set_state_working_cid( PDP_CONTEXT_STATE_DATA_LINK ); /* * do we need one more context activation */ if( cmhSM_next_work_cid( AT_CMD_CGDATA ) EQ FALSE ) { /* todo for new DTI interface - SMNEW done 06032001... */ R_AT( RAT_CGDATA, gpppEntStat.entOwn )( p_pdp_context_node->internal_data.link_id ); /* UACI */ /* PHE 201201 gpppEntStat.curCmd = AT_CMD_NONE; */ } } cmhSM_next_call_table_entry(); break; } } else { TRACE_ERROR( "ERROR: PDP context not found, in function cmhGPPP_Established" ); } return 0; } /* +-------------------------------------------------------------------+ | PROJECT : GPRS (8441) MODULE : CMH_PPPR | | STATE : code ROUTINE : cmhGPPP_Terminated | +-------------------------------------------------------------------+ PURPOSE : PPP connection is closed */ GLOBAL SHORT cmhGPPP_Terminated ( void ) { T_ACI_CMD_SRC rat_owner; UBYTE cmdBuf = gpppEntStat.curCmd, /* buffers current command */ cme_err = CME_ERR_Unknown; /* error number */ U8 cid = PDP_CONTEXT_CID_INVALID; SHORT reactivation = 0, rat_id = RAT_MAX; USHORT nsapi_set = 0; T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; #ifdef FF_TCP_IP T_DTI_ENTITY_ID peer; #endif UBYTE srcId = srcId_cb; TRACE_FUNCTION ("cmhGPPP_Terminated()"); cid = gaci_get_cid_over_link_id(gaci_get_link_id_over_peer(DTI_ENTITY_PPPS)); p_pdp_context_node = pdp_context_find_node_from_cid( cid ); #ifdef FF_TCP_IP peer = dti_cntrl_get_peer(DTI_ENTITY_PPPS, 0, 0); if ( peer EQ DTI_ENTITY_AAA ) { psaAAA_disconnect_ind (p_pdp_context_node->internal_data.link_id_uart); } #endif if( p_pdp_context_node ) { cid = p_pdp_context_node->cid; /* *------------------------------------------------------------------- * Inform the DTI Manager about the link termination. *------------------------------------------------------------------- */ dti_cntrl_entity_disconnected( p_pdp_context_node->internal_data.link_id , DTI_ENTITY_PPPS ); dti_cntrl_entity_disconnected( p_pdp_context_node->internal_data.link_id_uart, DTI_ENTITY_PPPS ); switch ( get_state_over_cid( cid ) ) { case PDP_CONTEXT_STATE_INVALID: case PDP_CONTEXT_STATE_DEFINED: case PDP_CONTEXT_STATE_ATTACHING: case PDP_CONTEXT_STATE_ACTIVATING: case PDP_CONTEXT_STATE_ACTIVATED: case PDP_CONTEXT_STATE_DEACTIVATE_NORMAL: TRACE_ERROR( "cmhGPPP_Terminated(): State/Event error!!!" ); break; case PDP_CONTEXT_STATE_ESTABLISH_2: case PDP_CONTEXT_STATE_ESTABLISH_3: case PDP_CONTEXT_STATE_ACTIVATED_ESTABLISH_1: set_state_over_cid( cid, PDP_CONTEXT_STATE_ABORT_ESTABLISH ); nsapi_set = cmhSM_Give_nsapi_set( cid ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); break; case PDP_CONTEXT_STATE_ESTABLISH_1: cmhSM_contextDeactivated(); /*lint -fallthrough*/ case PDP_CONTEXT_STATE_ABORT_ESTABLISH: set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED ); /* Close the data path since this can not be done from CMH_SM (no activating/activated context) */ dti_cntrl_close_dpath_from_dti_id( EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id) ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); if(ati_user_output_cfg[srcId].CMEE_stat EQ CMEE_MOD_Disable OR isContextDeactivationRequestedByCGACT(cid)) rat_id = RAT_NO_CARRIER; else rat_id = RAT_CME; break; case PDP_CONTEXT_STATE_BREAKDOWN_LINK_NORMAL: set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); rat_id = RAT_NO_CARRIER; break; case PDP_CONTEXT_STATE_DATA_LINK: set_state_over_cid( cid, PDP_CONTEXT_STATE_BREAKDOWN_LINK_NORMAL ); nsapi_set = cmhSM_Give_nsapi_set( cid ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); break; case PDP_CONTEXT_STATE_REACTIVATION_1: set_state_over_cid( cid, PDP_CONTEXT_STATE_REACTIVATION_2 ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); gpppEntStat.curCmd = AT_CMD_NONE; /* 28592 cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); */ return 0; case PDP_CONTEXT_STATE_REACTIVATION_2: set_state_over_cid( cid, PDP_CONTEXT_STATE_DEFINED ); dti_cntrl_set_dti_id_to_reconnect(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); gpppEntStat.curCmd = AT_CMD_NONE; rat_id = RAT_NO_CARRIER; reactivation = 1; cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); /* 28592 */ break; } /* end switch */ } else { TRACE_ERROR( "ERROR: PDP context not found, in function cmhGPPP_Terminated" ); return 0; } rat_owner = (T_ACI_CMD_SRC)get_owner_over_cid( cid ); if ( reactivation EQ 0 ) { /* Do we need a SMREG_PDP_DEACTIVATE_REQ? */ if ( nsapi_set ) { psaSM_PDP_Deactivate ( nsapi_set, PS_REL_IND_NO ); } /* *------------------------------------------------------------------- * check for command context *------------------------------------------------------------------- */ switch( gpppEntStat.curCmd ) { case( AT_CMD_CGDATA ): if ( rat_owner EQ gpppEntStat.entOwn ) { gpppEntStat.curCmd = AT_CMD_NONE; } /* brz: to check */ switch(gpppShrdPrm.ppp_cause) { case PPP_TERM_OK_PEER: case PPP_TERM_NO_RESPONSE: case PPP_TERM_LOOP_BACK: case PPP_TERM_LCP_NOT_CONVERGE: case PPP_TERM_IPCP_NOT_CONVERGE: case PPP_TERM_IPCP_NOT_STARTED: cme_err = CME_ERR_GPRSBadModClass; break; /* The below cause values is commented as it is not defined in the * Alborg SAP Document, and because of this it is giving compilation * ERROR */ /*case SMREG_RC_USE_AUTHED_FAILED:*/ case PPP_TERM_USE_AUTHED_FAILED: cme_err = CME_ERR_GPRSPdpAuth; break; default: cme_err = CME_ERR_Unknown; } break; #if 0 /* * These cases do never happen! */ case( AT_CMD_CGACT ): case( AT_CMD_CGANS ): case( AT_CMD_A ): case( AT_CMD_H ): break; #endif default: switch(gpppShrdPrm.ppp_cause) { case CAUSE_NWSM_SERVICE_NOT_SUPPORTED: cme_err = CME_ERR_GPRSSerOptNsup; break; case CAUSE_NWSM_SERVICE_NOT_SUBSCRIBED: cme_err = CME_ERR_GPRSSerOptNsub; break; case CAUSE_NWSM_SERVICE_TEMP_OUT_OF_ORDER: cme_err = CME_ERR_GPRSSerOptOOO; break; case PPP_TERM_USE_AUTHED_FAILED: cme_err = CME_ERR_GPRSPdpAuth; break; default: cme_err = CME_ERR_Unknown; } } if ( smEntStat.entOwn EQ rat_owner ) { switch( smEntStat.curCmd ) { case( AT_CMD_CGDATA ): case( AT_CMD_CGACT ): smEntStat.curCmd = AT_CMD_NONE; break; } } } cmhSM_connection_down(EXTRACT_DTI_ID(p_pdp_context_node->internal_data.link_id)); if( rat_id NEQ RAT_MAX ) { gaci_RAT_caller( rat_id, cid, cmdBuf, cme_err ); if( reactivation EQ 0 ) { work_cids[0] = PDP_CONTEXT_CID_INVALID; } cmhSM_context_reactivation(); cmhSM_disconnect_cid(cid, GC_TYPE_DATA_LINK); } work_cids[0] = PDP_CONTEXT_CID_INVALID; cid_pointer = 0; if ( smEntStat.curCmd EQ AT_CMD_CGACT ) { smEntStat.curCmd = AT_CMD_NONE; } return 0; } /* +-------------------------------------------------------------------+ | PROJECT : GPRS (8441) MODULE : CMH_PPPR | | STATE : finished ROUTINE : cmhGPPP_Activated | +-------------------------------------------------------------------+ PURPOSE : activate the PDP context (only in server or transparent mode) and if the context is already activated then answer PPP. (PPP_ACTIVATE_IND is received). */ GLOBAL SHORT cmhGPPP_Activated ( void ) { U8 cid = work_cids[cid_pointer]; T_PDP_CONTEXT_INTERNAL *p_pdp_context_node = NULL; TRACE_FUNCTION ("cmhGPPP_Activated()"); p_pdp_context_node = pdp_context_find_node_from_cid( cid ); if( !p_pdp_context_node ) { TRACE_ERROR("ERROR: PDP context not found, in function cmhGPPP_Activated"); return -1; } /* *------------------------------------------------------------------- * check for command context *------------------------------------------------------------------- */ switch( gpppEntStat.curCmd ) { case( AT_CMD_CGANS ): case( AT_CMD_CGDATA ): /* *--------------------------------------------------------------- * check entity context state *--------------------------------------------------------------- */ switch ( get_state_working_cid() ) { case PDP_CONTEXT_STATE_ESTABLISH_1: { /* *--------------------------------------------------------------- * save parameter *--------------------------------------------------------------- */ /* Issue OMAPS00047332 : SNDCP, SM and UPM are not supporting ppp_hc and msid anymore */ smEntStat.curCmd = gpppEntStat.curCmd; smShrdPrm.owner = gpppShrdPrm.owner; smEntStat.entOwn = (T_ACI_CMD_SRC)smShrdPrm.owner; /* *--------------------------------------------------------------- * store PCO information if it's provided PPP *--------------------------------------------------------------- */ if( (gpppShrdPrm.pdp->sdu.l_buf >> 3) > 0 ) { cmhSM_set_PCO( cid, PCO_USER, &gpppShrdPrm.pdp->sdu.buf[gpppShrdPrm.pdp->sdu.o_buf >> 3], (UBYTE) (gpppShrdPrm.pdp->sdu.l_buf >> 3)); } /* *--------------------------------------------------------------- * PPP has requested context activation: Activate the context. *--------------------------------------------------------------- */ cmhSM_connect_context( cid, DTI_ENTITY_PPPS ); set_state_working_cid( PDP_CONTEXT_STATE_ESTABLISH_2 ); } break; case PDP_CONTEXT_STATE_ACTIVATED_ESTABLISH_1: { /* *--------------------------------------------------------------- * save parameter *--------------------------------------------------------------- */ /* Issue OMAPS00047332 : SNDCP, SM and UPM are not supporting ppp_hc and msid anymore So do not send ppp_hc and msid params to ppp */ smEntStat.curCmd = gpppEntStat.curCmd; smShrdPrm.owner = gpppShrdPrm.owner; smEntStat.entOwn = (T_ACI_CMD_SRC)smShrdPrm.owner; /* *--------------------------------------------------------------- * PPP has requested context activation, but the context is * already activated: Answer PPP. *--------------------------------------------------------------- */ psaGPPP_PDP_Activate( &p_pdp_context_node->internal_data.pdp_address_allocated, p_pdp_context_node->internal_data.network_pco.pco, (UBYTE) (p_pdp_context_node->internal_data.network_pco.len), (UBYTE) CID_TO_NSAPI(cid)); set_state_working_cid( PDP_CONTEXT_STATE_ESTABLISH_3 ); } break; default: /* The PPP_PDP_ACTIVATE_IND might have crossed with a PPP_TERMINATE_REQ. Ignore the event by returning */ return 0; } } return 0; } /* +-------------------------------------------------------------------+ | PROJECT : GPRS (8441) MODULE : CMH_PPPR | | STATE : finished ROUTINE : cmhGPPP_Modified | +-------------------------------------------------------------------+ PURPOSE : new negotiate header compression confirmed (only in server mode) */ GLOBAL SHORT cmhGPPP_Modified ( void ) { TRACE_FUNCTION ("cmhGPPP_Modified()"); /* *--------------------------------------------------------------- * nothing to do *--------------------------------------------------------------- */ return 0; } #endif /* GPRS */ /*==== EOF ========================================================*/