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>&copy; 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