FreeCalypso > hg > fc-selenite
diff src/g23m-fad/l2r/tra_upf.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/tra_upf.c Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,232 @@ +/* ++----------------------------------------------------------------------------- +| Project : CSD (8411) +| Modul : tra_upf.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 procedures and functions for +| the component TRA ++----------------------------------------------------------------------------- +*/ + +#ifndef TRA_UPF_C +#define TRA_UPF_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 "prim.h" +#include "pei.h" +#include "tok.h" +#include "dti.h" + +#include "cl_ribu.h" +#include "tra_pei.h" +#include "tra.h" + +#ifdef _TARGET_ + #include "ra_l1int.h" +#endif + +/*==== CONST =======================================================*/ + +/*==== TYPES =======================================================*/ + +/*==== VAR EXPORT ==================================================*/ + +/*==== VAR LOCAL ===================================================*/ + +/*==== FUNCTIONS ===================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : up_init ++------------------------------------------------------------------------------ +| Description : initialise the tra data for the uplink process +| +| Parameters : - +| +| +| Return : - ++------------------------------------------------------------------------------ +*/ + +GLOBAL void ul_init(T_TRA_UP *dul) +{ + TRACE_FUNCTION ("ul_init()"); + + dul->sa = FL_INACTIVE; + dul->sb = FL_INACTIVE; + dul->x = FL_INACTIVE; + dul->List_off = 0; + + INIT_STATE (UP, UP_INACTIVE); +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_break_to_RA ++------------------------------------------------------------------------------ +| Description : +| +| Parameters : - +| +| +| Return : ++------------------------------------------------------------------------------ +*/ + +GLOBAL void snd_break_to_RA(USHORT break_len) +{ +#ifndef _SIMULATION_ + + T_RA_BREAK_REQ RA_break_req; + RA_break_req.break_len = break_len; + +#endif + + TRACE_FUNCTION ("snd_break_to_RA()"); + +#ifndef _SIMULATION_ + + l1i_ra_break_req (&RA_break_req); + +#else + { + PALLOC (ra_break_req, RA_BREAK_REQ); + ra_break_req->break_len = break_len; + PSENDX (RA, ra_break_req); + } +#endif +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_data_to_RA ++------------------------------------------------------------------------------ +| Description : +| +| Parameters : - +| +| +| Return : ++------------------------------------------------------------------------------ +*/ + +GLOBAL void snd_data_to_RA(void) +{ + T_TRA_UP *dul = &tra_data->up; + T_FD *pFD = &dul->fd; + + T_desc2 *desc = (T_desc2*)dul->Prim->desc_list2.first; + + USHORT data_off = dul->List_off; /* offset within current data block */ + USHORT data_len = dul->Prim->desc_list2.list_len; /* local mark for overall data size to be copied */ + + TRACE_FUNCTION ("snd_data_to_RA()"); + + pFD->type = FR_TRANS; + pFD->status = 0; + pFD->len = 0; /* to mark current sdu fill status */ + + if (dul->req_frames) + { + while (desc) + { + if (desc->len <= (dul->req_frames - pFD->len)) /* DTI data size less than SDU space*/ + { + T_desc2 *desc_im = (T_desc2*)desc->next; + memcpy(&dul->to_ra[pFD->len], desc->buffer + data_off, desc->len); + pFD->len += desc->len; + data_len -= desc->len; + data_off = 0; /* list is copied completely! */ + MFREE (desc); + desc = (T_desc2*) desc_im; + } + else /* more DTI data than SDU space*/ + { + memcpy(&dul->to_ra[pFD->len], desc->buffer + data_off, dul->req_frames - pFD->len); + data_off += (dul->req_frames - pFD->len); /* remember for next copying! */ + desc->len -= (dul->req_frames - pFD->len); + desc->size = desc->len; + data_len -= (dul->req_frames - pFD->len); + pFD->len = dul->req_frames; /* the SDU is full */ + break; + } + } + /* + * write back current standings + */ + dul->Prim->desc_list2.first = (ULONG)desc; + dul->Prim->desc_list2.list_len = data_len; + dul->List_off = data_off; + } + + if (dul->sa EQ DTI_SA_OFF) + pFD->status |= ST_SA; + if (dul->sb EQ DTI_SB_OFF) + pFD->status |= ST_SB; + if (dul->x EQ DTI_FLOW_OFF) + pFD->status |= ST_X; + +#ifdef _TARGET_ + + l1i_ra_data_req_new(pFD); + +#else + { + PALLOC_SDU (ra_data_req, RA_DATA_REQ, (USHORT)(dul->req_frames<<3)); + + if (hCommRA < VSI_OK) + { + hCommRA = vsi_c_open (VSI_CALLER RA_NAME); + } + ra_data_req->fr_type = pFD->type; + ra_data_req->status = pFD->status; + ra_data_req->dtx_flg = DTX_DIS; + ra_data_req->sdu.l_buf = pFD->len << 3; + ra_data_req->sdu.o_buf = 0; + memcpy(&ra_data_req->sdu.buf[0], &dul->to_ra[0], pFD->len); + PSENDX (RA, ra_data_req); + } +#endif +} + +/* ++------------------------------------------------------------------------------ +| Function : up_start_dti_flow ++------------------------------------------------------------------------------ +| Description : +| +| Parameters : - +| +| +| Return : - ++------------------------------------------------------------------------------ +*/ + +GLOBAL void up_start_dti_flow(void) +{ + TRACE_FUNCTION ("up_start_dti_flow()"); + + dti_start(l2r_hDTI, TRA_DTI_UP_INSTANCE, TRA_DTI_UP_INTERFACE, TRA_DTI_UP_CHANNEL); +}