1 /**
2 ******************************************************************************
3 * @file tl_mbox.c
4 * @author MCD Application Team
5 * @brief Transport layer for the mailbox interface
6 ******************************************************************************
7 * @attention
8 *
9 * <h2><center>© Copyright (c) 2019 STMicroelectronics.
10 * All rights reserved.</center></h2>
11 *
12 * This software component is licensed by ST under BSD 3-Clause license,
13 * the "License"; You may not use this file except in compliance with the
14 * License. You may obtain a copy of the License at:
15 * opensource.org/licenses/BSD-3-Clause
16 *
17 ******************************************************************************
18 */
19
20
21 /* Includes ------------------------------------------------------------------*/
22 #include "stm32_wpan_common.h"
23 #include "hw.h"
24
25 #include "stm_list.h"
26 #include "tl.h"
27 #include "mbox_def.h"
28
29 /* Private typedef -----------------------------------------------------------*/
30 /* Private defines -----------------------------------------------------------*/
31 /* Private macros ------------------------------------------------------------*/
32 /* Private variables ---------------------------------------------------------*/
33
34 /**< reference table */
35 PLACE_IN_SECTION("MAPPING_TABLE") static volatile MB_RefTable_t TL_RefTable;
36 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_DeviceInfoTable_t TL_DeviceInfoTable;
37 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_BleTable_t TL_BleTable;
38 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_ThreadTable_t TL_ThreadTable;
39 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_LldTestsTable_t TL_LldTestsTable;
40 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_SysTable_t TL_SysTable;
41 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_MemManagerTable_t TL_MemManagerTable;
42 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_TracesTable_t TL_TracesTable;
43 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_Mac_802_15_4_t TL_Mac_802_15_4_Table;
44 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static MB_ZigbeeTable_t TL_Zigbee_Table;
45
46 /**< tables */
47 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static tListNode FreeBufQueue;
48 PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static tListNode TracesEvtQueue;
49 PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t CsBuffer[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + sizeof(TL_CsEvt_t)];
50 PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static tListNode EvtQueue;
51 PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static tListNode SystemEvtQueue;
52
53
54 static tListNode LocalFreeBufQueue;
55 static void (* BLE_IoBusEvtCallBackFunction) (TL_EvtPacket_t *phcievt);
56 static void (* BLE_IoBusAclDataTxAck) ( void );
57 static void (* SYS_CMD_IoBusCallBackFunction) (TL_EvtPacket_t *phcievt);
58 static void (* SYS_EVT_IoBusCallBackFunction) (TL_EvtPacket_t *phcievt);
59
60
61 /* Global variables ----------------------------------------------------------*/
62 /* Private function prototypes -----------------------------------------------*/
63 static void SendFreeBuf( void );
64
65 /* Public Functions Definition ------------------------------------------------------*/
66
67 /******************************************************************************
68 * GENERAL
69 ******************************************************************************/
TL_Enable(void)70 void TL_Enable( void )
71 {
72 HW_IPCC_Enable();
73
74 return;
75 }
76
77
TL_Init(void)78 void TL_Init( void )
79 {
80 TL_RefTable.p_device_info_table = &TL_DeviceInfoTable;
81 TL_RefTable.p_ble_table = &TL_BleTable;
82 TL_RefTable.p_thread_table = &TL_ThreadTable;
83 TL_RefTable.p_lld_tests_table = &TL_LldTestsTable;
84 TL_RefTable.p_sys_table = &TL_SysTable;
85 TL_RefTable.p_mem_manager_table = &TL_MemManagerTable;
86 TL_RefTable.p_traces_table = &TL_TracesTable;
87 TL_RefTable.p_mac_802_15_4_table = &TL_Mac_802_15_4_Table;
88 TL_RefTable.p_zigbee_table = &TL_Zigbee_Table;
89 HW_IPCC_Init();
90
91 return;
92 }
93
94
95 /******************************************************************************
96 * BLE
97 ******************************************************************************/
TL_BLE_Init(void * pConf)98 int32_t TL_BLE_Init( void* pConf )
99 {
100 MB_BleTable_t * p_bletable;
101
102 TL_BLE_InitConf_t *pInitHciConf = (TL_BLE_InitConf_t *) pConf;
103
104 LST_init_head (&EvtQueue);
105
106 p_bletable = TL_RefTable.p_ble_table;
107
108 p_bletable->pcmd_buffer = pInitHciConf->p_cmdbuffer;
109 p_bletable->phci_acl_data_buffer = pInitHciConf->p_AclDataBuffer;
110 p_bletable->pcs_buffer = (uint8_t*)CsBuffer;
111 p_bletable->pevt_queue = (uint8_t*)&EvtQueue;
112
113 HW_IPCC_BLE_Init();
114
115 BLE_IoBusEvtCallBackFunction = pInitHciConf->IoBusEvtCallBack;
116 BLE_IoBusAclDataTxAck = pInitHciConf->IoBusAclDataTxAck;
117
118 return 0;
119 }
120
TL_BLE_SendCmd(uint8_t * buffer,uint16_t size)121 int32_t TL_BLE_SendCmd( uint8_t* buffer, uint16_t size )
122 {
123 ((TL_CmdPacket_t*)(TL_RefTable.p_ble_table->pcmd_buffer))->cmdserial.type = TL_BLECMD_PKT_TYPE;
124
125 HW_IPCC_BLE_SendCmd();
126
127 return 0;
128 }
129
HW_IPCC_BLE_RxEvtNot(void)130 void HW_IPCC_BLE_RxEvtNot(void)
131 {
132 TL_EvtPacket_t *phcievt;
133
134 while(LST_is_empty(&EvtQueue) == FALSE)
135 {
136 LST_remove_head (&EvtQueue, (tListNode **)&phcievt);
137
138 BLE_IoBusEvtCallBackFunction(phcievt);
139 }
140
141 return;
142 }
143
TL_BLE_SendAclData(uint8_t * buffer,uint16_t size)144 int32_t TL_BLE_SendAclData( uint8_t* buffer, uint16_t size )
145 {
146 ((TL_AclDataPacket_t *)(TL_RefTable.p_ble_table->phci_acl_data_buffer))->AclDataSerial.type = TL_ACL_DATA_PKT_TYPE;
147
148 HW_IPCC_BLE_SendAclData();
149
150 return 0;
151 }
152
HW_IPCC_BLE_AclDataAckNot(void)153 void HW_IPCC_BLE_AclDataAckNot(void)
154 {
155 BLE_IoBusAclDataTxAck( );
156
157 return;
158 }
159
160 /******************************************************************************
161 * SYSTEM
162 ******************************************************************************/
TL_SYS_Init(void * pConf)163 int32_t TL_SYS_Init( void* pConf )
164 {
165 MB_SysTable_t * p_systable;
166
167 TL_SYS_InitConf_t *pInitHciConf = (TL_SYS_InitConf_t *) pConf;
168
169 LST_init_head (&SystemEvtQueue);
170 p_systable = TL_RefTable.p_sys_table;
171 p_systable->pcmd_buffer = pInitHciConf->p_cmdbuffer;
172 p_systable->sys_queue = (uint8_t*)&SystemEvtQueue;
173
174 HW_IPCC_SYS_Init();
175
176 SYS_CMD_IoBusCallBackFunction = pInitHciConf->IoBusCallBackCmdEvt;
177 SYS_EVT_IoBusCallBackFunction = pInitHciConf->IoBusCallBackUserEvt;
178
179 return 0;
180 }
181
TL_SYS_SendCmd(uint8_t * buffer,uint16_t size)182 int32_t TL_SYS_SendCmd( uint8_t* buffer, uint16_t size )
183 {
184 ((TL_CmdPacket_t *)(TL_RefTable.p_sys_table->pcmd_buffer))->cmdserial.type = TL_SYSCMD_PKT_TYPE;
185
186 HW_IPCC_SYS_SendCmd();
187
188 return 0;
189 }
190
HW_IPCC_SYS_CmdEvtNot(void)191 void HW_IPCC_SYS_CmdEvtNot(void)
192 {
193 SYS_CMD_IoBusCallBackFunction( (TL_EvtPacket_t*)(TL_RefTable.p_sys_table->pcmd_buffer) );
194
195 return;
196 }
197
HW_IPCC_SYS_EvtNot(void)198 void HW_IPCC_SYS_EvtNot( void )
199 {
200 TL_EvtPacket_t *p_evt;
201
202 while(LST_is_empty(&SystemEvtQueue) == FALSE)
203 {
204 LST_remove_head (&SystemEvtQueue, (tListNode **)&p_evt);
205 SYS_EVT_IoBusCallBackFunction( p_evt );
206 }
207
208 return;
209 }
210
211 /******************************************************************************
212 * THREAD
213 ******************************************************************************/
214 #ifdef THREAD_WB
TL_THREAD_Init(TL_TH_Config_t * p_Config)215 void TL_THREAD_Init( TL_TH_Config_t *p_Config )
216 {
217 MB_ThreadTable_t * p_thread_table;
218
219 p_thread_table = TL_RefTable.p_thread_table;
220
221 p_thread_table->clicmdrsp_buffer = p_Config->p_ThreadCliRspBuffer;
222 p_thread_table->otcmdrsp_buffer = p_Config->p_ThreadOtCmdRspBuffer;
223 p_thread_table->notack_buffer = p_Config->p_ThreadNotAckBuffer;
224
225 HW_IPCC_THREAD_Init();
226
227 return;
228 }
229
TL_OT_SendCmd(void)230 void TL_OT_SendCmd( void )
231 {
232 ((TL_CmdPacket_t *)(TL_RefTable.p_thread_table->otcmdrsp_buffer))->cmdserial.type = TL_OTCMD_PKT_TYPE;
233
234 HW_IPCC_OT_SendCmd();
235
236 return;
237 }
238
TL_CLI_SendCmd(void)239 void TL_CLI_SendCmd( void )
240 {
241 ((TL_CmdPacket_t *)(TL_RefTable.p_thread_table->clicmdrsp_buffer))->cmdserial.type = TL_CLICMD_PKT_TYPE;
242
243 HW_IPCC_CLI_SendCmd();
244
245 return;
246 }
247
TL_THREAD_SendAck(void)248 void TL_THREAD_SendAck ( void )
249 {
250 ((TL_CmdPacket_t *)(TL_RefTable.p_thread_table->notack_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
251
252 HW_IPCC_THREAD_SendAck();
253
254 return;
255 }
256
TL_THREAD_CliSendAck(void)257 void TL_THREAD_CliSendAck ( void )
258 {
259 ((TL_CmdPacket_t *)(TL_RefTable.p_thread_table->notack_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
260
261 HW_IPCC_THREAD_CliSendAck();
262
263 return;
264 }
265
HW_IPCC_OT_CmdEvtNot(void)266 void HW_IPCC_OT_CmdEvtNot(void)
267 {
268 TL_OT_CmdEvtReceived( (TL_EvtPacket_t*)(TL_RefTable.p_thread_table->otcmdrsp_buffer) );
269
270 return;
271 }
272
HW_IPCC_THREAD_EvtNot(void)273 void HW_IPCC_THREAD_EvtNot( void )
274 {
275 TL_THREAD_NotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_thread_table->notack_buffer) );
276
277 return;
278 }
279
HW_IPCC_THREAD_CliEvtNot(void)280 void HW_IPCC_THREAD_CliEvtNot( void )
281 {
282 TL_THREAD_CliNotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_thread_table->clicmdrsp_buffer) );
283
284 return;
285 }
286
TL_OT_CmdEvtReceived(TL_EvtPacket_t * Otbuffer)287 __WEAK void TL_OT_CmdEvtReceived( TL_EvtPacket_t * Otbuffer ){};
TL_THREAD_NotReceived(TL_EvtPacket_t * Notbuffer)288 __WEAK void TL_THREAD_NotReceived( TL_EvtPacket_t * Notbuffer ){};
TL_THREAD_CliNotReceived(TL_EvtPacket_t * Notbuffer)289 __WEAK void TL_THREAD_CliNotReceived( TL_EvtPacket_t * Notbuffer ){};
290
291 #endif /* THREAD_WB */
292
293 /******************************************************************************
294 * LLD 802.15.4
295 ******************************************************************************/
296 #ifdef LLD_802_15_4_WB
TL_LLDTESTS_Init(TL_LLD_tests_Config_t * p_Config)297 void TL_LLDTESTS_Init( TL_LLD_tests_Config_t *p_Config )
298 {
299 MB_LldTestsTable_t * p_lld_tests_table;
300
301 p_lld_tests_table = TL_RefTable.p_lld_tests_table;
302
303 p_lld_tests_table->clicmdrsp_buffer = p_Config->p_LldTestsCliRspBuffer;
304 p_lld_tests_table->notack_buffer = p_Config->p_LldTestsNotAckBuffer;
305
306 HW_IPCC_LLDTESTS_Init();
307
308 return;
309 }
310
TL_LLDTESTS_CliSendCmd(void)311 void TL_LLDTESTS_CliSendCmd( void )
312 {
313 ((TL_CmdPacket_t *)(TL_RefTable.p_lld_tests_table->clicmdrsp_buffer))->cmdserial.type = TL_CLICMD_PKT_TYPE;
314
315 HW_IPCC_LLDTESTS_CliSendCmd();
316
317 return;
318 }
319
TL_LLDTESTS_CliSendAck(void)320 void TL_LLDTESTS_CliSendAck ( void )
321 {
322 ((TL_CmdPacket_t *)(TL_RefTable.p_lld_tests_table->notack_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
323
324 HW_IPCC_LLDTESTS_CliSendAck();
325
326 return;
327 }
328
HW_IPCC_LLDTESTS_EvtNot(void)329 void HW_IPCC_LLDTESTS_EvtNot( void )
330 {
331 TL_LLDTESTS_NotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_lld_tests_table->notack_buffer) );
332
333 return;
334 }
335
HW_IPCC_LLDTESTS_CliEvtNot(void)336 void HW_IPCC_LLDTESTS_CliEvtNot( void )
337 {
338 TL_LLDTESTS_CliNotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_lld_tests_table->clicmdrsp_buffer) );
339
340 return;
341 }
342
TL_LLDTESTS_NotReceived(TL_EvtPacket_t * Notbuffer)343 __WEAK void TL_LLDTESTS_NotReceived( TL_EvtPacket_t * Notbuffer ){};
TL_LLDTESTS_CliNotReceived(TL_EvtPacket_t * Notbuffer)344 __WEAK void TL_LLDTESTS_CliNotReceived( TL_EvtPacket_t * Notbuffer ){};
345 #endif /* LLD_802_15_4_WB */
346
347 #ifdef MAC_802_15_4_WB
348 /******************************************************************************
349 * MAC 802.15.4
350 ******************************************************************************/
TL_MAC_802_15_4_Init(TL_MAC_802_15_4_Config_t * p_Config)351 void TL_MAC_802_15_4_Init( TL_MAC_802_15_4_Config_t *p_Config )
352 {
353 MB_Mac_802_15_4_t * p_mac_802_15_4_table;
354
355 p_mac_802_15_4_table = TL_RefTable.p_mac_802_15_4_table;
356
357 p_mac_802_15_4_table->p_cmdrsp_buffer = p_Config->p_Mac_802_15_4_CmdRspBuffer;
358 p_mac_802_15_4_table->p_notack_buffer = p_Config->p_Mac_802_15_4_NotAckBuffer;
359
360 HW_IPCC_MAC_802_15_4_Init();
361
362 return;
363 }
364
TL_MAC_802_15_4_SendCmd(void)365 void TL_MAC_802_15_4_SendCmd( void )
366 {
367 ((TL_CmdPacket_t *)(TL_RefTable.p_mac_802_15_4_table->p_cmdrsp_buffer))->cmdserial.type = TL_OTCMD_PKT_TYPE;
368
369 HW_IPCC_MAC_802_15_4_SendCmd();
370
371 return;
372 }
373
TL_MAC_802_15_4_SendAck(void)374 void TL_MAC_802_15_4_SendAck ( void )
375 {
376 ((TL_CmdPacket_t *)(TL_RefTable.p_mac_802_15_4_table->p_notack_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
377
378 HW_IPCC_MAC_802_15_4_SendAck();
379
380 return;
381 }
382
HW_IPCC_MAC_802_15_4_CmdEvtNot(void)383 void HW_IPCC_MAC_802_15_4_CmdEvtNot(void)
384 {
385 TL_MAC_802_15_4_CmdEvtReceived( (TL_EvtPacket_t*)(TL_RefTable.p_mac_802_15_4_table->p_cmdrsp_buffer) );
386
387 return;
388 }
389
HW_IPCC_MAC_802_15_4_EvtNot(void)390 void HW_IPCC_MAC_802_15_4_EvtNot( void )
391 {
392 TL_MAC_802_15_4_NotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_mac_802_15_4_table->p_notack_buffer) );
393
394 return;
395 }
396
TL_MAC_802_15_4_CmdEvtReceived(TL_EvtPacket_t * Otbuffer)397 __WEAK void TL_MAC_802_15_4_CmdEvtReceived( TL_EvtPacket_t * Otbuffer ){};
TL_MAC_802_15_4_NotReceived(TL_EvtPacket_t * Notbuffer)398 __WEAK void TL_MAC_802_15_4_NotReceived( TL_EvtPacket_t * Notbuffer ){};
399 #endif
400
401 #ifdef ZIGBEE_WB
402 /******************************************************************************
403 * ZIGBEE
404 ******************************************************************************/
TL_ZIGBEE_Init(TL_ZIGBEE_Config_t * p_Config)405 void TL_ZIGBEE_Init( TL_ZIGBEE_Config_t *p_Config )
406 {
407
408 MB_ZigbeeTable_t * p_zigbee_table;
409
410 p_zigbee_table = TL_RefTable.p_zigbee_table;
411 p_zigbee_table->appliCmdM4toM0_buffer = p_Config->p_ZigbeeOtCmdRspBuffer;
412 p_zigbee_table->notifM0toM4_buffer = p_Config->p_ZigbeeNotAckBuffer;
413 p_zigbee_table->loggingM0toM4_buffer = p_Config->p_ZigbeeLoggingBuffer;
414
415 HW_IPCC_ZIGBEE_Init();
416
417 return;
418 }
419
TL_ZIGBEE_SendAppliCmdToM0(void)420 void TL_ZIGBEE_SendAppliCmdToM0( void )
421 {
422 ((TL_CmdPacket_t *)(TL_RefTable.p_zigbee_table->appliCmdM4toM0_buffer))->cmdserial.type = TL_OTCMD_PKT_TYPE;
423
424 HW_IPCC_ZIGBEE_SendAppliCmd();
425
426 return;
427 }
428
429 /* Send an ACK to the M0 */
TL_ZIGBEE_SendAckAfterAppliNotifFromM0(void)430 void TL_ZIGBEE_SendAckAfterAppliNotifFromM0 ( void )
431 {
432 ((TL_CmdPacket_t *)(TL_RefTable.p_zigbee_table->notifM0toM4_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
433
434 HW_IPCC_ZIGBEE_SendAppliCmdAck();
435
436 return;
437 }
438
439 /* Used to receive an ACK from the M0 */
HW_IPCC_ZIGBEE_AppliCmdNotification(void)440 void HW_IPCC_ZIGBEE_AppliCmdNotification(void)
441 {
442 TL_ZIGBEE_CmdEvtReceived( (TL_EvtPacket_t*)(TL_RefTable.p_zigbee_table->appliCmdM4toM0_buffer) );
443
444 return;
445 }
446
447 /* Zigbee callback */
HW_IPCC_ZIGBEE_AppliAsyncEvtNotification(void)448 void HW_IPCC_ZIGBEE_AppliAsyncEvtNotification( void )
449 {
450 TL_ZIGBEE_NotReceived( (TL_EvtPacket_t*)(TL_RefTable.p_zigbee_table->notifM0toM4_buffer) );
451
452 return;
453 }
454
455 /* Zigbee logging */
HW_IPCC_ZIGBEE_AppliAsyncLoggingNotification(void)456 void HW_IPCC_ZIGBEE_AppliAsyncLoggingNotification( void )
457 {
458 TL_ZIGBEE_LoggingReceived( (TL_EvtPacket_t*)(TL_RefTable.p_zigbee_table->loggingM0toM4_buffer) );
459
460 return;
461 }
462
463 /* Send a Logging ACK to the M0 */
TL_ZIGBEE_SendAckAfterAppliLoggingFromM0(void)464 void TL_ZIGBEE_SendAckAfterAppliLoggingFromM0 ( void )
465 {
466 ((TL_CmdPacket_t *)(TL_RefTable.p_zigbee_table->loggingM0toM4_buffer))->cmdserial.type = TL_OTACK_PKT_TYPE;
467
468 HW_IPCC_ZIGBEE_SendLoggingAck();
469
470 return;
471 }
472
473
TL_ZIGBEE_CmdEvtReceived(TL_EvtPacket_t * Otbuffer)474 __WEAK void TL_ZIGBEE_CmdEvtReceived( TL_EvtPacket_t * Otbuffer ){};
TL_ZIGBEE_NotReceived(TL_EvtPacket_t * Notbuffer)475 __WEAK void TL_ZIGBEE_NotReceived( TL_EvtPacket_t * Notbuffer ){};
476 #endif
477
478
479
480 /******************************************************************************
481 * MEMORY MANAGER
482 ******************************************************************************/
TL_MM_Init(TL_MM_Config_t * p_Config)483 void TL_MM_Init( TL_MM_Config_t *p_Config )
484 {
485 static MB_MemManagerTable_t * p_mem_manager_table;
486
487 LST_init_head (&FreeBufQueue);
488 LST_init_head (&LocalFreeBufQueue);
489
490 p_mem_manager_table = TL_RefTable.p_mem_manager_table;
491
492 p_mem_manager_table->blepool = p_Config->p_AsynchEvtPool;
493 p_mem_manager_table->blepoolsize = p_Config->AsynchEvtPoolSize;
494 p_mem_manager_table->pevt_free_buffer_queue = (uint8_t*)&FreeBufQueue;
495 p_mem_manager_table->spare_ble_buffer = p_Config->p_BleSpareEvtBuffer;
496 p_mem_manager_table->spare_sys_buffer = p_Config->p_SystemSpareEvtBuffer;
497 p_mem_manager_table->traces_evt_pool = p_Config->p_TracesEvtPool;
498 p_mem_manager_table->tracespoolsize = p_Config->TracesEvtPoolSize;
499
500 return;
501 }
502
TL_MM_EvtDone(TL_EvtPacket_t * phcievt)503 void TL_MM_EvtDone(TL_EvtPacket_t * phcievt)
504 {
505 LST_insert_tail(&LocalFreeBufQueue, (tListNode *)phcievt);
506
507 HW_IPCC_MM_SendFreeBuf( SendFreeBuf );
508
509 return;
510 }
511
SendFreeBuf(void)512 static void SendFreeBuf( void )
513 {
514 tListNode *p_node;
515
516 while ( FALSE == LST_is_empty (&LocalFreeBufQueue) )
517 {
518 LST_remove_head( &LocalFreeBufQueue, (tListNode **)&p_node );
519 LST_insert_tail( (tListNode*)(TL_RefTable.p_mem_manager_table->pevt_free_buffer_queue), p_node );
520 }
521
522 return;
523 }
524
525
526 /******************************************************************************
527 * TRACES
528 ******************************************************************************/
TL_TRACES_Init(void)529 void TL_TRACES_Init( void )
530 {
531 LST_init_head (&TracesEvtQueue);
532
533 TL_RefTable.p_traces_table->traces_queue = (uint8_t*)&TracesEvtQueue;
534
535 HW_IPCC_TRACES_Init();
536
537 return;
538 }
539
HW_IPCC_TRACES_EvtNot(void)540 void HW_IPCC_TRACES_EvtNot(void)
541 {
542 TL_EvtPacket_t *phcievt;
543
544 while(LST_is_empty(&TracesEvtQueue) == FALSE)
545 {
546 LST_remove_head (&TracesEvtQueue, (tListNode **)&phcievt);
547 TL_TRACES_EvtReceived( phcievt );
548 }
549
550 return;
551 }
552
TL_TRACES_EvtReceived(TL_EvtPacket_t * hcievt)553 __WEAK void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt ){};
554
555 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
556