comparison src/g23m-fad/l2r/tra_upp.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
comparison
equal deleted inserted replaced
0:b6a5e36de839 1:d393cd9bb723
1 /*
2 +-----------------------------------------------------------------------------
3 | Project : CSD (8411)
4 | Modul : tra_upp.c
5 +-----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +-----------------------------------------------------------------------------
17 | Purpose : This Modul defines the functions for processing
18 | of incomming primitives for the component TRA
19 +-----------------------------------------------------------------------------
20 */
21
22 #ifndef TRA_UPP_C
23 #define TRA_UPP_C
24 #endif
25
26 #define ENTITY_L2R
27
28 /*==== INCLUDES ===================================================*/
29
30 #include "typedefs.h"
31 #include "pconst.cdg"
32 #include "vsi.h"
33 #include "macdef.h"
34 #include "custom.h"
35 #include "gsm.h"
36 #include "prim.h"
37 #include "pei.h"
38 #include "tok.h"
39 #include "dti.h"
40
41 #include "cl_ribu.h"
42 #include "tra_pei.h"
43 #include "tra.h"
44
45 /*==== CONST =======================================================*/
46
47 /*==== TYPES =======================================================*/
48
49 /*==== VAR EXPORT ==================================================*/
50
51 /*==== VAR LOCAL ===================================================*/
52
53 /*==== FUNCTIONS ===================================================*/
54
55 /*
56 +------------------------------------------------------------------------------
57 | Function : rcv_ra_ready_ind
58 +------------------------------------------------------------------------------
59 | Description : Process primitive RA_READY_IND received from RA.
60 | This function is called if the RA_READY_IND primtive
61 | is received
62 |
63 | Parameters : ra_ready_ind -
64 |
65 |
66 | Return : -
67 +------------------------------------------------------------------------------
68 */
69
70 GLOBAL void rcv_ra_ready_ind(T_RA_READY_IND *ra_ready_ind)
71 {
72 T_TRA_UP *dul = &tra_data->up;
73
74 #ifdef _SIMULATION_
75 TRACE_EVENT_P1 ("rcv_ra_ready_ind(), req_frames: 0x%x", ra_ready_ind->req_frames);
76 PACCESS (ra_ready_ind);
77 #endif
78
79 dul->req_frames = ra_ready_ind->req_frames;
80
81 switch (GET_STATE (UP))
82 {
83 case UP_IDLE:
84 SET_STATE (UP, UP_WAIT);
85 break;
86
87 case UP_SEND:
88 snd_data_to_RA();
89 if (dul->Prim->desc_list2.first EQ 0)
90 {
91 if (dul->Prim NEQ NULL)
92 {
93 PFREE(dul->Prim);
94 dul->Prim = NULL;
95 }
96 up_start_dti_flow();
97 SET_STATE (UP, UP_IDLE);
98 }
99 break;
100 }
101 #ifdef _SIMULATION_
102 PFREE (ra_ready_ind);
103 #endif
104 }
105
106 /*
107 +------------------------------------------------------------------------------
108 | Function : sig_dti_tra_up_data_received_ind
109 +------------------------------------------------------------------------------
110 | Description : Process primitive DTI2_DATA_REQ received from CSDIWF.
111 |
112 | Parameters : dti_data_req
113 |
114 |
115 | Return : -
116 +------------------------------------------------------------------------------
117 */
118
119 GLOBAL void sig_dti_tra_up_data_received_ind(T_DTI2_DATA_REQ *dti_data_req)
120 {
121 T_TRA_UP *dul = &tra_data->up;
122
123 TRACE_FUNCTION ("sig_dti_tra_up_data_received_ind()");
124
125 PACCESS (dti_data_req);
126
127 dul->Prim = dti_data_req;
128
129 dul->sa = dti_data_req->parameters.st_lines.st_line_sa;
130 dul->sb = dti_data_req->parameters.st_lines.st_line_sb;
131 dul->x = dti_data_req->parameters.st_lines.st_flow;
132
133 /*
134 TRACE_EVENT_P1("new data: %02X", dti_data_req->desc_list2.list_len);
135 */
136
137 if (GET_STATE(DTI) NEQ DTI_CLOSED)
138 {
139 /*
140 * do not send flow control primitives automatically
141 */
142 dti_stop(l2r_hDTI, TRA_DTI_UP_INSTANCE, TRA_DTI_UP_INTERFACE, TRA_DTI_UP_CHANNEL);
143 }
144
145 /* Detect break request */
146 if (dti_data_req->parameters.st_lines.st_break_len NEQ DTI_BREAK_OFF)
147 {
148 USHORT break_len = dti_data_req->parameters.st_lines.st_break_len;
149
150 PFREE(dti_data_req); /* no more used */
151
152 switch (GET_STATE (UP))
153 {
154 case UP_SEND:
155 /*
156 * No more data to send
157 */
158 SET_STATE (UP, UP_IDLE);
159 /* Fall through */
160
161 case UP_IDLE:
162 case UP_WAIT:
163 sig_up_tra_mgt_break_ind(break_len);
164 up_start_dti_flow();
165 break;
166 }
167 return; /* xxxxx - send data or do not send it??! */
168 }
169
170 switch (GET_STATE (UP))
171 {
172 case UP_SEND:
173 TRACE_EVENT("still in UP_SEND!");
174 break;
175
176 case UP_IDLE:
177 SET_STATE (UP, UP_SEND);
178 break;
179
180 case UP_WAIT:
181 snd_data_to_RA();
182 if (dti_data_req->desc_list2.list_len EQ 0) /* data is copied completely */
183 {
184 up_start_dti_flow();
185 SET_STATE (UP, UP_IDLE);
186 PFREE(dti_data_req);
187 dul->Prim = NULL;
188 }
189 else
190 {
191 SET_STATE (UP, UP_SEND);
192 }
193 break;
194 }
195 }
196