FreeCalypso > hg > fc-tourmaline
view src/g23m-fad/l2r/l2r_dnp.c @ 283:d9e3f3e293ac
etm_audio.c: fix off-by-one error in auw of FIR coefficients
The implementation of auw operation for UL or DL FIR upload
had this bug: the number of 16-bit shortwords copied into the
RVF-allocated temporary buffer was one too many, causing memory
corruption errors. The present change fixes this bug.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 08 Nov 2021 02:54:04 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | 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; } }