FreeCalypso > hg > fc-selenite
diff src/g23m-fad/l2r/l2r_dnp.c @ 1:d393cd9bb723
src/g23m-*: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:40:46 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-fad/l2r/l2r_dnp.c Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,210 @@ +/* ++----------------------------------------------------------------------------- +| Project : CSD (8411) +| Modul : L2r_dnp.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 Modul defines the functions for processing +| of incomming primitives for the component +| L2R of the base station ++----------------------------------------------------------------------------- +*/ + +#ifndef L2R_DNP_C +#define L2R_DNP_C +#endif + +#define ENTITY_L2R + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include "typedefs.h" +#include "pconst.cdg" +#include "vsi.h" +#include "macdef.h" +#include "custom.h" +#include "gsm.h" +#include "cus_l2r.h" +#include "cnf_l2r.h" +#include "mon_l2r.h" +#include "prim.h" +#include "pei.h" +#include "tok.h" +#include "dti.h" /* functionality of the dti library */ + +#include "cl_ribu.h" +#include "l2r.h" + +/*==== CONST =======================================================*/ + +/*==== TYPES =======================================================*/ + +/*==== VAR EXPORT ==================================================*/ + +/*==== VAR LOCAL ===================================================*/ + +/*==== FUNCTIONS ===================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : sig_dti_dn_tx_buffer_full_ind ++------------------------------------------------------------------------------ +| Description : Process signal DTI_REASON_TX_BUFFER_FULL received from +| dti library callback function. +| +| Parameters : - +| +| Return : - ++------------------------------------------------------------------------------ +The buffer function of DTILIB is not used. +So there is nothing to be done here yet.. +*/ +GLOBAL void sig_dti_dn_tx_buffer_full_ind() +{ + TRACE_FUNCTION ("sig_dti_dn_tx_buffer_full_ind()"); +} + + +/* ++------------------------------------------------------------------------------ +| Function : sig_dti_dn_tx_buffer_ready_ind ++------------------------------------------------------------------------------ +| Description : Process signal DTI_REASON_TX_BUFFER_READY received from +| dti library callback function. +| +| Parameters : - +| +| Return : - ++------------------------------------------------------------------------------ +*/ +GLOBAL void sig_dti_dn_tx_buffer_ready_ind() +{ + T_DN *ddn = &l2r_data->dn; + + TRACE_FUNCTION ("sig_dti_dn_tx_buffer_ready_ind()"); + + if(ddn->Brk_dti_data_ind NEQ NULL) + { + /* + * if there is a pending break indication to be sent via dti, + * send it now and go waiting for the next flow control primitive + */ + SET_STATE (DN_UL, IW_WAIT); + sig_mgt_dn_send_break_req(); + return; + } + + switch (GET_STATE (DN)) + { + case DN_CONNECTED: + if (!ddn->DtiConnected) /*jk: data send only when DTI connected*/ + break; + + if ((ddn->RiBu.idx.filled AND ddn->ULFlow EQ FL_INACTIVE) OR ddn->ReportMrgFlow) + { + dn_send_data_ind(); /* primitive is in ring buffer or flow state must be reported*/ + } + else + { + SET_STATE (DN_UL, IW_WAIT); /* no primitive is ready */ + } + + dn_cond_free_prims(); + dn_check_flow(); + + switch (GET_STATE (DN_LL)) + { + case IW_IDLE: + dn_cond_req_data(); + break; + } + break; + } +} + +GLOBAL void dn_rlp_data_ind(T_RLP_DATA_IND *rlp_data_ind) +{ + T_DN *ddn = &l2r_data->dn; + + T_PRIM_INDEX frames; + T_PRIM_INDEX emptyfr; + T_PRIM_INDEX r_index; + BOOL break_found; + T_BIT sa; + T_BIT sb; + T_FLOW flow_brk; + T_FLOW flow_gen; + + TRACE_FUNCTION ("dn_rlp_data_ind()"); + PACCESS (rlp_data_ind); + + switch (GET_STATE (DN)) + { + case DN_CONNECTED: + case DN_WAIT_FIRST_DATA: + dn_scan_break_req + ( + rlp_data_ind, + &break_found, + &r_index, + &frames, + &emptyfr, + &sa, + &sb, + &flow_brk, + &flow_gen + ); + + if (break_found EQ FALSE) + { + if (frames > 0) + { + if (GET_STATE (DN) EQ DN_WAIT_FIRST_DATA AND sb EQ 0) + { + sig_dn_mgt_first_data_ind(); + SET_STATE (DN, DN_CONNECTED); + } + dn_store_status(flow_gen); /* stores flow ctrl state only */ + dn_store_prim(rlp_data_ind, 0); /* L2R-ENH-7527 quick fix */ + } + else + { + dn_cond_report_status(); + PFREE (rlp_data_ind); + } + } + else /* break found */ + { + dn_free_all_prims(); + dn_init_ribu(); + dn_check_flow(); + + if (r_index EQ frames) + { + dn_store_status(flow_brk); + PFREE (rlp_data_ind); + } + else + { + dn_store_status(flow_gen); + dn_store_prim(rlp_data_ind, r_index); + } + sig_dn_mgt_break_ind(sa, sb, ddn->MrgFlow); + ddn->LastState = sa << SO_SA_BIT | sb << SO_SB_BIT; + } + dn_cond_req_data(); + break; + } +} +