FreeCalypso > hg > fc-magnetite
comparison src/g23m-fad/ppp/ppp_prxs.c @ 174:90eb61ecd093
src/g23m-fad: initial import from TCS3.2/LoCosto
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 12 Oct 2016 05:40:46 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
173:bf64d785238a | 174:90eb61ecd093 |
---|---|
1 /* | |
2 +----------------------------------------------------------------------------- | |
3 | Project : | |
4 | Modul : | |
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 is part of the entity PPP and implements all | |
18 | functions to handles the incoming process internal signals as | |
19 | described in the SDL-documentation (PRX-statemachine) | |
20 +----------------------------------------------------------------------------- | |
21 */ | |
22 | |
23 #define ENTITY_PPP | |
24 | |
25 /*==== INCLUDES =============================================================*/ | |
26 | |
27 #include "typedefs.h" /* to get Condat data types */ | |
28 #include "vsi.h" /* to get a lot of macros */ | |
29 #include "macdef.h" /* to get a lot of macros */ | |
30 #include "custom.h" /* to get a lot of macros */ | |
31 /*lint -efile(766,gsm.h) */ | |
32 #include "gsm.h" /* to get a lot of macros */ | |
33 /*lint -efile(766,cnf_ppp.h) */ | |
34 #include "cnf_ppp.h" /* to get cnf-definitions */ | |
35 /*lint -efile(766,mon_ppp.h) */ | |
36 #include "mon_ppp.h" /* to get mon-definitions */ | |
37 #include "prim.h" /* to get the definitions of used SAP and directions */ | |
38 #include "dti.h" /* to get the DTILIB definitions */ | |
39 #include "ppp.h" /* to get the global entity definitions */ | |
40 | |
41 #include "ppp_arbf.h" /* to get arb functions */ | |
42 #include "ppp_ftxs.h" /* to get signal interface from ftx */ | |
43 | |
44 #ifdef FF_STATUS_TE | |
45 #include "ste.h" /* To include function interface for TE status driver */ | |
46 #include "gdi.h" /* To include driver type-defines */ | |
47 #endif /* FF_STATUS_TE */ | |
48 | |
49 /*==== CONST ================================================================*/ | |
50 | |
51 /*==== LOCAL VARS ===========================================================*/ | |
52 | |
53 /*==== PRIVATE FUNCTIONS ====================================================*/ | |
54 | |
55 /*==== PUBLIC FUNCTIONS =====================================================*/ | |
56 | |
57 /* | |
58 +------------------------------------------------------------------------------ | |
59 | Function : sig_ftx_prx_start_flow_req | |
60 +------------------------------------------------------------------------------ | |
61 | Description : Handles the internal signal SIG_FTX_PRX_START_FLOW_REQ. | |
62 | It is sent in case the ftx service is able | |
63 | to send the next packet. | |
64 | | |
65 | Parameters : no parameters | |
66 | | |
67 +------------------------------------------------------------------------------ | |
68 */ | |
69 GLOBAL void sig_ftx_prx_start_flow_req () | |
70 { | |
71 TRACE_ISIG( "sig_ftx_prx_start_flow_req" ); | |
72 | |
73 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
74 { | |
75 case PRX_READY: | |
76 { | |
77 /* | |
78 * Tell DTILIB that PRX can start to receive data primitives again | |
79 */ | |
80 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PROT_LAYER, PROT_CHANNEL); | |
81 } | |
82 break; | |
83 | |
84 case PRX_NDTI: | |
85 /* | |
86 * store signal for later activation | |
87 */ | |
88 SET_STATE( PPP_SERVICE_PRX, PRX_NDTI_START_FLOW ); | |
89 break; | |
90 | |
91 case PRX_NDTI_START_FLOW: | |
92 /* | |
93 * silently ignore duplicate signal.. | |
94 */ | |
95 break; | |
96 | |
97 default: | |
98 TRACE_ERROR( "SIG_FTX_PRX_START_FLOW_REQ unexpected" ); | |
99 break; | |
100 } | |
101 } /* sig_ftx_prx_start_flow_req() */ | |
102 | |
103 | |
104 | |
105 /* | |
106 +------------------------------------------------------------------------------ | |
107 | Function : sig_ftx_prx_stop_flow_req | |
108 +------------------------------------------------------------------------------ | |
109 | Description : Handles the internal signal SIG_FTX_PRX_STOP_FLOW_REQ. | |
110 | It is sent in case the ftx service is able | |
111 | to send the next packet. | |
112 | | |
113 | Parameters : no parameters | |
114 | | |
115 +------------------------------------------------------------------------------ | |
116 */ | |
117 GLOBAL void sig_ftx_prx_stop_flow_req () | |
118 { | |
119 TRACE_ISIG( "sig_ftx_prx_stop_flow_req" ); | |
120 | |
121 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
122 { | |
123 case PRX_READY: | |
124 /* | |
125 * Tell DTILIB that PRX does not want to receive data primitives | |
126 */ | |
127 dti_stop(ppp_data->ppphDTI, PPP_INSTANCE, PROT_LAYER, PROT_CHANNEL); | |
128 break; | |
129 | |
130 case PRX_NDTI_START_FLOW: | |
131 /* | |
132 * Send a stop signal to DTI | |
133 */ | |
134 SET_STATE( PPP_SERVICE_PRX, PRX_NDTI ); | |
135 break; | |
136 | |
137 case PRX_NDTI: | |
138 /* | |
139 * silently ignore duplicate signal.. | |
140 */ | |
141 break; | |
142 | |
143 default: | |
144 TRACE_ERROR( "SIG_PTX_PRX_STOP_FLOW_REQ unexpected" ); | |
145 break; | |
146 } | |
147 } /* sig_ftx_prx_stop_flow_req() */ | |
148 | |
149 | |
150 | |
151 /* | |
152 +------------------------------------------------------------------------------ | |
153 | Function : sig_ftx_prx_dead_mode_req | |
154 +------------------------------------------------------------------------------ | |
155 | Description : Handles the release of buffered data in case of PPP link | |
156 | termination | |
157 | | |
158 | Parameters : None | |
159 | | |
160 +------------------------------------------------------------------------------ | |
161 */ | |
162 GLOBAL void sig_ftx_prx_dead_mode_req () | |
163 { | |
164 TRACE_FUNCTION( "sig_ftx_prx_dead_mode_req()" ); | |
165 | |
166 #ifdef FF_STATUS_TE | |
167 /* | |
168 * Release buffered data - if any... | |
169 */ | |
170 MFREE_DESC2(ppp_data->prx.TE_data_buffer_desc_list_first); | |
171 ppp_data->prx.TE_data_buffer_desc_list_first = NULL; | |
172 ppp_data->prx.TE_data_buffer_p_id = DTI_PID_UOS; | |
173 ppp_data->prx.TE_data_buffered = FALSE; | |
174 #endif /* FF_STATUS_TE */ | |
175 | |
176 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
177 { | |
178 case PRX_READY: | |
179 case PRX_NDTI_START_FLOW: | |
180 case PRX_NDTI: | |
181 SET_STATE( PPP_SERVICE_PRX, PRX_DEAD ); | |
182 break; | |
183 | |
184 default: | |
185 TRACE_ERROR( "SIG_PTX_PRX_DEAD_MODE_REQ unexpected" ); | |
186 break; | |
187 } | |
188 } /* sig_ftx_prx_dead_mode_req() */ | |
189 | |
190 /* | |
191 +------------------------------------------------------------------------------ | |
192 | Function : sig_ftx_prx_ready_mode_req | |
193 +------------------------------------------------------------------------------ | |
194 | Description : sets prx to ready mode | |
195 | |
196 | Parameters : None | |
197 | | |
198 +------------------------------------------------------------------------------ | |
199 */ | |
200 GLOBAL void sig_ftx_prx_ready_mode_req () | |
201 { | |
202 TRACE_FUNCTION( "sig_ftx_prx_ready_mode_req()" ); | |
203 | |
204 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
205 { | |
206 case PRX_DEAD: | |
207 SET_STATE( PPP_SERVICE_PRX, PRX_NDTI ); | |
208 break; | |
209 | |
210 case PRX_DEAD_DTI: | |
211 SET_STATE( PPP_SERVICE_PRX, PRX_READY ); | |
212 break; | |
213 | |
214 default: | |
215 TRACE_ERROR( "SIG_FTX_PRX_READY_MODE_REQ unexpected" ); | |
216 break; | |
217 } | |
218 } /* sig_ftx_prx_ready_mode_req() */ | |
219 | |
220 | |
221 /* | |
222 +------------------------------------------------------------------------------ | |
223 | Function : sig_arb_prx_dti_connected_req | |
224 +------------------------------------------------------------------------------ | |
225 | Description : Handles the internal signal SIG_ARB_PRX_DTI_CONNECTED_REQ | |
226 | | |
227 | Parameters : no parameters | |
228 | | |
229 +------------------------------------------------------------------------------ | |
230 */ | |
231 GLOBAL void sig_arb_prx_dti_connected_req () | |
232 { | |
233 TRACE_ISIG( "sig_arb_prx_dti_connected_req" ); | |
234 | |
235 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
236 { | |
237 case PRX_DEAD: | |
238 SET_STATE( PPP_SERVICE_PRX, PRX_DEAD_DTI ); | |
239 break; | |
240 case PRX_NDTI: | |
241 SET_STATE( PPP_SERVICE_PRX, PRX_READY ); | |
242 break; | |
243 case PRX_NDTI_START_FLOW: | |
244 SET_STATE( PPP_SERVICE_PRX, PRX_READY ); | |
245 /* | |
246 * Send a start signal to DTI | |
247 */ | |
248 dti_start(ppp_data->ppphDTI, PPP_INSTANCE, PROT_LAYER, PROT_CHANNEL); | |
249 break; | |
250 default: | |
251 TRACE_ERROR( "SIG_ARB_PRX_DTI_CONNECTED_REQ unexpected" ); | |
252 break; | |
253 } | |
254 } /* sig_arb_prx_dti_connected_req() */ | |
255 | |
256 | |
257 /* | |
258 +------------------------------------------------------------------------------ | |
259 | Function : sig_dti_prx_data_received_ind | |
260 +------------------------------------------------------------------------------ | |
261 | Description : Handles the signal SIG_DTI_PRX_DATA_RECEIVED_IND | |
262 | | |
263 | Parameters : dti_data_ind - Ptr to primitive payload | |
264 | | |
265 +------------------------------------------------------------------------------ | |
266 */ | |
267 GLOBAL void sig_dti_prx_data_received_ind(T_DTI2_DATA_IND *dti_data_ind) | |
268 { | |
269 TRACE_FUNCTION( "sig_dti_prx_data_received_ind" ); | |
270 PACCESS(dti_data_ind); | |
271 | |
272 switch( GET_STATE( PPP_SERVICE_PRX ) ) | |
273 { | |
274 case PRX_READY: | |
275 #ifdef FF_STATUS_TE | |
276 if(ppp_data->mode EQ PPP_SERVER) | |
277 { | |
278 /* | |
279 * Check if TE is awake and ready to receive data... | |
280 * DRV_OK means it's awake | |
281 * DRV_IN_PROGRESS means is was a sleep and processing a wake up | |
282 * - await callback when TE is awake | |
283 */ | |
284 if (DRV_OK EQ STE_Write(STE_IDENTIFIER_POWER, | |
285 STE_POWER_ON, | |
286 STE_POWER_ON)) | |
287 { | |
288 #ifdef _SIMULATION_ | |
289 TRACE_EVENT( "Return DRV_OK from STE_Write()" ); | |
290 #endif /* _SIMULATION_ */ | |
291 sig_any_ftx_packet_req(dti_data_ind->p_id, | |
292 (T_desc2*)dti_data_ind->desc_list2.first); | |
293 } | |
294 else | |
295 { | |
296 #ifdef _SIMULATION_ | |
297 TRACE_EVENT( "Return DRV_IN_PROCESS from STE_Write()" ); | |
298 #endif /* _SIMULATION_ */ | |
299 /* | |
300 * The TE is asleep and data can NOT be forwarded but must be buffered | |
301 * Buffer p_id and desc_list until TE is awake and ready | |
302 * but free old stored packets before | |
303 */ | |
304 MFREE_DESC2(ppp_data->prx.TE_data_buffer_desc_list_first); | |
305 ppp_data->prx.TE_data_buffered = TRUE; | |
306 ppp_data->prx.TE_data_buffer_p_id = dti_data_req->p_id; | |
307 ppp_data-> | |
308 prx.TE_data_buffer_desc_list_first = (T_desc2*)dti_data_req-> | |
309 desc_list2.first; | |
310 } | |
311 } | |
312 else | |
313 #endif /* FF_STATUS_TE */ | |
314 { | |
315 sig_any_ftx_packet_req(dti_data_ind->parameters.p_id, | |
316 (T_desc2*)dti_data_ind->desc_list2.first); | |
317 } | |
318 break; | |
319 | |
320 default: | |
321 TRACE_ERROR( "DTI signal unexpected" ); | |
322 arb_discard_packet((T_desc2*)dti_data_ind->desc_list2.first); | |
323 break; | |
324 } | |
325 PFREE (dti_data_ind); | |
326 } /* sig_dti_prx_data_received_ind() */ | |
327 | |
328 | |
329 | |
330 #ifdef FF_STATUS_TE | |
331 /* | |
332 +------------------------------------------------------------------------------ | |
333 | Function : new_power_status_TE | |
334 +------------------------------------------------------------------------------ | |
335 | Description : Handles the signal NEW_POWER_STATUS | |
336 | | |
337 | Parameters : None | |
338 | | |
339 +------------------------------------------------------------------------------ | |
340 */ | |
341 GLOBAL void new_power_status_TE ( void ) | |
342 { | |
343 ULONG ste_power_status; | |
344 UBYTE temp_p_id; | |
345 T_desc2* temp_desc; | |
346 USHORT ret_value; | |
347 | |
348 TRACE_FUNCTION( "new_power_status_TE" ); | |
349 | |
350 if (ppp_data->prx.TE_data_buffered) | |
351 { | |
352 /* | |
353 * Check if TE power status is ON or OFF... | |
354 */ | |
355 ret_value = STE_Read(STE_IDENTIFIER_POWER, &ste_power_status); | |
356 | |
357 if(ret_value NEQ DRV_OK) | |
358 { | |
359 TRACE_ERROR( "TE status driver error" ); | |
360 } | |
361 /* | |
362 * If this read operation fails (return ERROR) there must be a | |
363 * driver problem so we do not care about the driver and forward the data. | |
364 * If power status of the TE is ON we also forward the data | |
365 * If driver is OK, there are buffered data and TE is powered OFF | |
366 * We try to turn on the TE. In case the write operation returns OK and | |
367 * not INPROCESS we also forward the data | |
368 */ | |
369 if((ret_value NEQ DRV_OK) || | |
370 (ste_power_status EQ STE_POWER_ON) || | |
371 (DRV_OK EQ STE_Write(STE_IDENTIFIER_POWER, | |
372 STE_POWER_ON, | |
373 STE_POWER_ON))) | |
374 { | |
375 /* | |
376 * reset store variables | |
377 */ | |
378 temp_desc = ppp_data->prx.TE_data_buffer_desc_list_first; | |
379 temp_p_id = ppp_data->prx.TE_data_buffer_p_id; | |
380 ppp_data->prx.TE_data_buffer_desc_list_first = NULL; | |
381 ppp_data->prx.TE_data_buffer_p_id = DTI_PID_UOS; | |
382 ppp_data->prx.TE_data_buffered = FALSE; | |
383 /* | |
384 * forward stored data | |
385 */ | |
386 sig_any_ftx_packet_req(temp_p_id, temp_desc); | |
387 } | |
388 } | |
389 } /* new_power_status_TE() */ | |
390 #endif /* FF_STATUS_TE */ | |
391 |