0cf650b317161db0b1da247cd7b14d64981e28e5
[o-du/phy.git] / fapi_5g / source / framework / workers / nr5g_fapi_phy2mac_thread.c
1 /******************************************************************************
2 *
3 *   Copyright (c) 2019 Intel.
4 *
5 *   Licensed under the Apache License, Version 2.0 (the "License");
6 *   you may not use this file except in compliance with the License.
7 *   You may obtain a copy of the License at
8 *
9 *       http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *   Unless required by applicable law or agreed to in writing, software
12 *   distributed under the License is distributed on an "AS IS" BASIS,
13 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *   See the License for the specific language governing permissions and
15 *   limitations under the License.
16 *
17 *******************************************************************************/
18 #include "nr5g_fapi_framework.h"
19 #include "nr5g_fapi_fapi2phy_wls.h"
20 #include "nr5g_fapi_phy2mac_thread.h"
21 #include "nr5g_fapi_fapi2mac_api.h"
22 #include "nr5g_fapi_fapi2mac_p5_proc.h"
23 #include "nr5g_fapi_fapi2mac_p7_proc.h"
24
25 //------------------------------------------------------------------------------
26 /** @ingroup nr5g_fapi_source_framework_workers_phy2mac_group
27  *
28  *  @param[in,out]   void
29  *
30  *  @return none
31  *
32  *  @description
33  *  DOXYGEN_TO_DO
34  *
35 **/
36 //------------------------------------------------------------------------------
37 void *nr5g_fapi_phy2mac_thread_func(
38     void *config)
39 {
40     cpu_set_t cpuset;
41     pthread_t thread;
42     PMAC2PHY_QUEUE_EL p_msg_list = NULL;
43     p_nr5g_fapi_phy_ctx_t p_phy_ctx = (p_nr5g_fapi_phy_ctx_t) config;
44
45     NR5G_FAPI_LOG(INFO_LOG, ("[PHY2MAC] Thread %s launched LWP:%ld on "
46             "Core: %d\n", __func__, pthread_self(),
47             p_phy_ctx->phy2mac_worker_core_id));
48
49     thread = p_phy_ctx->phy2mac_tid = pthread_self();
50     CPU_ZERO(&cpuset);
51     CPU_SET(p_phy_ctx->phy2mac_worker_core_id, &cpuset);
52     pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
53
54     usleep(1000);
55     while (!p_phy_ctx->process_exit) {
56         p_msg_list = nr5g_fapi_fapi2phy_wls_recv();
57         if (p_msg_list)
58             nr5g_fapi_phy2mac_api_recv_handler(config, p_msg_list);
59
60         nr5g_fapi_fapi2mac_send_api_list();
61     }
62     pthread_exit(NULL);
63 }
64
65 //------------------------------------------------------------------------------
66 /** @ingroup nr5g_fapi_source_framework_workers_mac2phy_group
67  *
68  *  @param[in,out]   void
69  *
70  *  @return none
71  *
72  *  @description
73  *  DOXYGEN_TO_DO
74  *
75 **/
76 //------------------------------------------------------------------------------
77 void nr5g_fapi_phy2mac_api_recv_handler(
78     void *config,
79     PMAC2PHY_QUEUE_EL p_msg_list)
80 {
81     PMAC2PHY_QUEUE_EL p_curr_msg;
82     PL1L2MessageHdr p_msg_header = NULL;
83
84     NR5G_FAPI_LOG(TRACE_LOG, ("[PHY2MAC] %s:", __func__));
85
86     nr5g_fapi_message_header((p_nr5g_fapi_phy_ctx_t) config);
87
88     p_curr_msg = (PMAC2PHY_QUEUE_EL) p_msg_list;
89     while (p_curr_msg) {
90         p_msg_header = (PL1L2MessageHdr) (p_curr_msg + 1);
91         switch (p_msg_header->nMessageType) {
92                 /*  P5 Vendor Message Processing */
93 #ifdef DEBUG_MODE
94             case MSG_TYPE_PHY_DL_IQ_SAMPLES:
95                 {
96                     nr5g_fapi_dl_iq_samples_response((p_nr5g_fapi_phy_ctx_t)
97                         config, (PADD_REMOVE_BBU_CORES) p_msg_header);
98                 }
99                 break;
100
101             case MSG_TYPE_PHY_UL_IQ_SAMPLES:
102                 {
103                     nr5g_fapi_ul_iq_samples_response((p_nr5g_fapi_phy_ctx_t)
104                         config, (PADD_REMOVE_BBU_CORES) p_msg_header);
105                 }
106                 break;
107 #endif
108             case MSG_TYPE_PHY_SHUTDOWN_RESP:
109                 {
110                     nr5g_fapi_shutdown_response((p_nr5g_fapi_phy_ctx_t) config,
111                         (PSHUTDOWNRESPONSEStruct) p_msg_header);
112                 }
113                 break;
114
115                 /*  P5 Message Processing */
116             case MSG_TYPE_PHY_CONFIG_RESP:
117                 {
118                     nr5g_fapi_config_response((p_nr5g_fapi_phy_ctx_t) config,
119                         (PCONFIGRESPONSEStruct) p_msg_header);
120                 }
121                 break;
122
123             case MSG_TYPE_PHY_START_RESP:
124                 {
125                     nr5g_fapi_start_resp((p_nr5g_fapi_phy_ctx_t) config,
126                         (PSTARTRESPONSEStruct) p_msg_header);
127                 }
128                 break;
129
130             case MSG_TYPE_PHY_STOP_RESP:
131                 {
132                     nr5g_fapi_stop_indication((p_nr5g_fapi_phy_ctx_t) config,
133                         (PSTOPRESPONSEStruct) p_msg_header);
134                 }
135                 break;
136
137                 /*  P7 Message Processing */
138             case MSG_TYPE_PHY_RX_ULSCH_IND:
139                 {
140                     nr5g_fapi_rx_data_indication((p_nr5g_fapi_phy_ctx_t) config,
141                         (PRXULSCHIndicationStruct) p_msg_header);
142                 }
143                 break;
144
145             case MSG_TYPE_PHY_RX_ULSCH_UCI_IND:
146                 {
147                     //Not Supported
148                 }
149                 break;
150
151             case MSG_TYPE_PHY_CRC_IND:
152                 {
153                     nr5g_fapi_crc_indication((p_nr5g_fapi_phy_ctx_t) config,
154                         (PCRCIndicationStruct) p_msg_header);
155                 }
156                 break;
157
158             case MSG_TYPE_PHY_UCI_IND:
159                 {
160                     nr5g_fapi_uci_indication((p_nr5g_fapi_phy_ctx_t) config,
161                         (PRXUCIIndicationStruct) p_msg_header);
162                 }
163                 break;
164
165             case MSG_TYPE_PHY_RX_RACH_IND:
166                 {
167                     nr5g_fapi_rach_indication((p_nr5g_fapi_phy_ctx_t) config,
168                         (PRXRACHIndicationStruct) p_msg_header);
169                 }
170                 break;
171
172             case MSG_TYPE_PHY_RX_SRS_IND:
173                 {
174                     nr5g_fapi_srs_indication((p_nr5g_fapi_phy_ctx_t) config,
175                         (PRXSRSIndicationStruct) p_msg_header);
176                 }
177                 break;
178
179             case MSG_TYPE_PHY_SLOT_IND:
180                 {
181                     nr5g_fapi_slot_indication((p_nr5g_fapi_phy_ctx_t) config,
182                         (PSlotIndicationStruct) p_msg_header);
183                 }
184                 break;
185
186             case MSG_TYPE_PHY_ERR_IND:
187                 {
188                 }
189                 break;
190
191             default:
192                 printf("%s: Unknown Message type: %x\n", __func__,
193                     p_msg_header->nMessageType);
194                 break;
195         }
196         p_curr_msg = p_curr_msg->pNext;
197     }
198 }