FreeCalypso > hg > fc-tourmaline
diff src/g23m-gprs/upm/upm.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-gprs/upm/upm.c Fri Oct 16 06:25:50 2020 +0000 @@ -0,0 +1,275 @@ +/*---------------------------------------------------------------------------- +| Project : 3G PS +| Module : UPM ++----------------------------------------------------------------------------- +| Copyright 2003 Texas Instruments. +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments . +| 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. ++----------------------------------------------------------------------------- +| Purpose: Utility functions for the UPM entity. +| For design details, see: +| 8010.939 UPM Detailed Specification ++---------------------------------------------------------------------------*/ + +/*==== DECLARATION CONTROL =================================================*/ + +/*==== INCLUDES ============================================================*/ + +#include "upm.h" + +/*==== CONSTS ===============================================================*/ + +/*==== TYPES ================================================================*/ + +T_UPM_DATA upm_data; + +/*==== LOCALS ===============================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : upm_pfree ++------------------------------------------------------------------------------ +| Description : PFREE macro replacement +| +| Parameters : data - memory to free ++------------------------------------------------------------------------------ +*/ +void upm_pfree(/*@only@*/ /*@null@*/ /*@out@*/ void *data) +{ + if (data != NULL) + { + vsi_c_pfree((T_VOID_STRUCT **)&data FILE_LINE_MACRO); + } +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_mfree ++------------------------------------------------------------------------------ +| Description : Wrapper for MFREE macro. +| +| Parameters : data - memory to free (NULL allowed) ++------------------------------------------------------------------------------ +*/ +void upm_mfree(/*@only@*/ /*@out@*/ /*@null@*/ void *data) +{ + if (data != NULL) { + MFREE(data); + } +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_nsapi2nsapi_set ++------------------------------------------------------------------------------ +| Description : Return nsapi_set corresponding to NSAPI +| +| Parameters : nsapi - NSAPI ++------------------------------------------------------------------------------ +*/ +U16 upm_nsapi2nsapi_set(int /*@alt U8@*/ nsapi) /*@*/ +{ + TRACE_ASSERT ((T_NAS_nsapi)nsapi >= NAS_NSAPI_5 && nsapi <= NAS_NSAPI_15); + + return (U16)(1UL << (U16)nsapi); +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_get_context_data_from_nsapi ++------------------------------------------------------------------------------ +| Description : Returns context data structure associated with indicated NSAPI. +| +| Parameters : nsapi - NSAPI index ++------------------------------------------------------------------------------ +*/ +/*@null@*/ /*@exposed@*/ +struct T_CONTEXT_DATA *upm_get_context_data_from_nsapi(int /*@alt U8@*/ nsapi) +{ + TRACE_ASSERT (((T_NAS_nsapi)nsapi >= NAS_NSAPI_5 && nsapi <= NAS_NSAPI_15)); + + /*lint -e{661} upm_context_array causes out of bounds access, it does not! */ + return (upm_data.upm_context_array[nsapi - (int)NAS_NSAPI_5]); +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_assign_context_data_to_nsapi ++------------------------------------------------------------------------------ +| Description : Assign context data structure to global context array. +| +| Parameters : ptr_context_data - Pointer to context data +| nsapi - NSAPI index ++------------------------------------------------------------------------------ +*/ +void upm_assign_context_data_to_nsapi(/*@keep@*/ + struct T_CONTEXT_DATA *ptr_context_data, + int /*@alt U8@*/ nsapi) +{ + (void)TRACE_EVENT_P2("upm_assign_context_data_to_nsapi: NSAPI%3d = %p", nsapi, ptr_context_data); + + TRACE_ASSERT ((T_NAS_nsapi)nsapi >= NAS_NSAPI_5 && nsapi <= NAS_NSAPI_15); + + /*lint -e{661} upm_context_array causes out of bounds access, it does not! */ + upm_data.upm_context_array[nsapi - (int)NAS_NSAPI_5] = ptr_context_data; + ptr_context_data->nsapi = nsapi; +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_free_context_data ++------------------------------------------------------------------------------ +| Description : Free context data structure associated with indicated NSAPI. +| +| Parameters : nsapi - NSAPI index ++------------------------------------------------------------------------------ +*/ +void upm_free_context_data(int /*@alt U8@*/ nsapi) +{ + TRACE_ASSERT ((T_NAS_nsapi)nsapi >= NAS_NSAPI_5 && nsapi <= NAS_NSAPI_15); + + /*lint -e661 (upm_context_array causes out of bounds access, it does not!) */ + if ( upm_data.upm_context_array[nsapi - (int)NAS_NSAPI_5] != NULL ) { + upm_mfree(upm_data.upm_context_array[nsapi - (int)NAS_NSAPI_5]); + upm_data.upm_context_array[nsapi - (int)NAS_NSAPI_5] = NULL; + /*lint +e661 (upm_context_array causes out of bounds access, it does not!) */ + } +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_check_for_released_context_and_release ++------------------------------------------------------------------------------ +| Description : Check whether a context is released (both link and DTI +| connections released), and if so, freee context data structure +| associated with indicated NSAPI. +| +| Parameters : nsapi - NSAPI index ++------------------------------------------------------------------------------ +*/ +void upm_check_for_released_context_and_release(struct T_CONTEXT_DATA *context) +{ + if (upm_is_link_released(context) +#ifndef UPM_WITHOUT_USER_PLANE + && upm_is_dti_disconnected(context) +#endif + ) + { + U8 nsapi = context->nsapi; + + upm_free_context_data(nsapi); + (void)TRACE_EVENT_P1("upm_check_for_released_context_and_release on NSAPI %d: Context data freed...", nsapi); + } +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_get_current_rat ++------------------------------------------------------------------------------ +| Description : Returns the RAT in which UPM is currently active +| +| Parameters : None ++------------------------------------------------------------------------------ +*/ +#ifdef TI_DUAL_MODE +T_PS_rat upm_get_current_rat(void) +{ + return upm_data.upm_rat; +} +#endif /* TI_DUAL_MODE */ + +/* ++------------------------------------------------------------------------------ +| Function : upm_set_current_rat ++------------------------------------------------------------------------------ +| Description : Sets currently active RAT +| +| Parameters : rat - RAT received from SM or MM ++------------------------------------------------------------------------------ +*/ +#ifdef TI_DUAL_MODE +void upm_set_current_rat(T_PS_rat rat) + /*@modifies upm_data.upm_rat@*/ +{ + upm_data.upm_rat = rat; +} +#endif /* TI_DUAL_MODE */ + +/* ++------------------------------------------------------------------------------ +| Function : upm_ll_entity_test ++------------------------------------------------------------------------------ +| Description : Returns TRUE if upm_ll_entity_test is set in UPM data struct +| +| Parameters : None ++------------------------------------------------------------------------------ +*/ +BOOL upm_ll_entity_test(void) +{ + return upm_data.upm_ll_entity_test; +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_activate_ll_entity_test ++------------------------------------------------------------------------------ +| Description : Enables lower layer stubs for entity test +| +| Parameters : None ++------------------------------------------------------------------------------ +*/ +void upm_activate_ll_entity_test(void) +{ + upm_data.upm_ll_entity_test = TRUE; +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_set_sequence_number ++------------------------------------------------------------------------------ +| Description : Stores the receive sequence number from MM for later retrieval +| +| Parameters : ptr_context_data - Context data +| seq_no - Receive sequence number ++------------------------------------------------------------------------------ +*/ +void upm_set_sequence_number(struct T_CONTEXT_DATA *ptr_context_data, U8 seq_no) +{ + (void)TRACE_FUNCTION("upm_set_sequence_number"); + + ptr_context_data->seq_nos_valid = (U8)TRUE; + ptr_context_data->recv_seq_no = seq_no; +} + +/* ++------------------------------------------------------------------------------ +| Function : upm_get_sequence_number ++------------------------------------------------------------------------------ +| Description : Retrieves the receive sequence number previously gotten from MM +| +| Parameters : ptr_context_data - Context data ++------------------------------------------------------------------------------ +*/ +U8 upm_get_sequence_number(struct T_CONTEXT_DATA *ptr_context_data) +{ + (void)TRACE_FUNCTION("upm_get_sequence_number"); + + if (ptr_context_data->seq_nos_valid != (U8)0) + { + ptr_context_data->seq_nos_valid = (U8)0; + return ptr_context_data->recv_seq_no; + } else { + return (U8)0; + } +} + +/*==== END OF FILE ==========================================================*/