FreeCalypso > hg > fc-tourmaline
diff src/g23m-gprs/llc/llc_itxp.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/llc/llc_itxp.c Fri Oct 16 06:25:50 2020 +0000 @@ -0,0 +1,202 @@ +/* ++----------------------------------------------------------------------------- +| 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 modul is part of the entity LLC and implements all +| functions to handles the incoming primitives as described in +| the SDL-documentation (ITX-statemachine) ++----------------------------------------------------------------------------- +*/ + +#ifndef LLC_ITXP_C +#define LLC_ITXP_C +#endif + +#define ENTITY_LLC + +/*==== INCLUDES =============================================================*/ + +#include "typedefs.h" /* to get Condat data types */ +#include "vsi.h" /* to get a lot of macros */ +#include "macdef.h" +#include "gprs.h" +#include "gsm.h" /* to get a lot of macros */ +#include "cnf_llc.h" /* to get cnf-definitions */ +#include "mon_llc.h" /* to get mon-definitions */ +#include "prim.h" /* to get the definitions of used SAP and directions */ +#include "llc.h" /* to get the global entity definitions */ +#include "llc_f.h" /* to get the global entity definitions */ +#include "llc_itxf.h" /* to get local function definitions */ +#include <string.h> /* to get memcpy */ + +/*==== CONST ================================================================*/ + +/*==== LOCAL VARS ===========================================================*/ + +/*==== PRIVATE FUNCTIONS ====================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ + + +/* ++------------------------------------------------------------------------------ +| Function : itx_ll_desc_req ++------------------------------------------------------------------------------ +| Description : Handles the primitive LL_DATA_REQ +| +| Parameters : *ll_desc_req/ll_data_req - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void itx_ll_desc_req +( +#ifdef LL_DESC + T_LL_DESC_REQ *ll_desc_req +#else + T_LL_DATA_REQ *ll_desc_req +#endif +) +{ + BOOL success; + + TRACE_FUNCTION( "ll_desc_req" ); + + SWITCH_LLC (ll_desc_req->sapi); +#ifdef REL99 + llc_data->cur_pfi = ll_desc_req->pkt_flow_id; /* store current packet flow identifier */ + TRACE_EVENT_P1("packet flow id = %d",ll_desc_req->pkt_flow_id); +#endif + llc_data->cur_qos = ll_desc_req->ll_qos; /* store current QoS */ + TRACE_EVENT_P1("peak throughput = %d",ll_desc_req->ll_qos.peak); + llc_data->cur_radio_prio = ll_desc_req->radio_prio; + TRACE_EVENT_P1("radio priority = %d",ll_desc_req->radio_prio); + +#ifdef LL_DESC + TRACE_2_PARA("s:%d len:%d", ll_desc_req->sapi, ll_desc_req->desc_list3.list_len); +#else + TRACE_2_PARA("s:%d len:%d", ll_desc_req->sapi, BYTELEN(ll_desc_req->sdu.l_buf)); +#endif + /* + * Set up the attached counter + */ + ll_desc_req->attached_counter = CCI_NO_ATTACHE; + + switch (GET_STATE(ITX)) + { + case ITX_TLLI_UNASSIGNED: + case ITX_TLLI_ASSIGNED: + /* + * Ignore primitive, but free prim data. + */ +#ifdef LL_DESC + llc_cl_desc3_free((T_desc3*)ll_desc_req->desc_list3.first); +#endif /* LL_DESC */ + PFREE (ll_desc_req); + TRACE_ERROR( "ll_desc_req unexpected" ); + break; + + case ITX_ABM: + case ITX_ABM_PEER_BUSY: + itx_i_queue_store (ll_desc_req, &success); + if ( success == FALSE ) + { + TRACE_0_INFO("ll_desc_req storing failed" ); +#ifdef LL_DESC + llc_cl_desc3_free((T_desc3*)ll_desc_req->desc_list3.first); +#endif /* LL_DESC */ + PFREE (ll_desc_req); + } + else + { + itx_send_next_frame (ABIT_NO_REQ); + itx_handle_ll_ready_ind (FALSE); + } + /* SET_STATE (ITX, SAME_STATE); */ + break; + + default: +#ifdef LL_DESC + llc_cl_desc3_free((T_desc3*)ll_desc_req->desc_list3.first); +#endif /* LL_DESC */ + PFREE (ll_desc_req); + TRACE_ERROR( "ll_desc_req unexpected" ); + break; + } + +} /* itx_ll_desc_req() */ + +/* ++------------------------------------------------------------------------------ +| Function : itx_ll_data_req ++------------------------------------------------------------------------------ +| Description : Handles the primitive LL_DATA_REQ +| +| Parameters : *ll_data_req - Ptr to primitive payload +| ++------------------------------------------------------------------------------ +*/ +#ifdef LL_DESC +GLOBAL void itx_ll_data_req ( T_LL_DATA_REQ *ll_data_req ) +{ + T_desc3 *desc3 = NULL; + USHORT len, desc_offset; + UBYTE *buf; + + TRACE_FUNCTION( "uitx_ll_data_req" ); + + /* + * Allocate primitive and fill in the structure elements + */ + { + PALLOC(ll_desc_req, LL_DESC_REQ); + + ll_desc_req->sapi = ll_data_req->sapi; + ll_desc_req->tlli = ll_data_req->tlli; + ll_desc_req->ll_qos = ll_data_req->ll_qos; + ll_desc_req->radio_prio = ll_data_req->radio_prio; + ll_desc_req->reference1 = ll_data_req->reference1; + ll_desc_req->seg_pos = ll_data_req->seg_pos; + ll_desc_req->attached_counter = ll_data_req->attached_counter; +#ifdef REL99 + ll_desc_req->pkt_flow_id = ll_data_req->pkt_flow_id; +#endif /* REL99 */ + /* + * Allocate memory block for desc2 and set the values of the + * desc2-elements. + */ + + len = ll_data_req->sdu.l_buf >> 3; + desc_offset = ll_data_req->sdu.o_buf >> 3; + + desc3 = llc_palloc_desc(len, desc_offset); + + buf = (UBYTE*)desc3->buffer; + + memcpy(&buf[desc3->offset], + &ll_data_req->sdu.buf[desc_offset], + len); + ll_desc_req->desc_list3.first = (ULONG)desc3; + ll_desc_req->desc_list3.list_len = desc3->len; + + /* + * Primitive is handled in uitx_ll_unitdesc_req + */ + itx_ll_desc_req (ll_desc_req); + } + PFREE(ll_data_req); + + +} +#endif /* LL_DESC */