X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=o-du%2Fphy.git;a=blobdiff_plain;f=fapi_5g%2Fsource%2Fapi%2Ffapi2mac%2Fp7%2Fnr5g_fapi_proc_vendor_p7_msgs.c;fp=fapi_5g%2Fsource%2Fapi%2Ffapi2mac%2Fp7%2Fnr5g_fapi_proc_vendor_p7_msgs.c;h=812e225732d03042e36e862b05251a2c193653a2;hp=0000000000000000000000000000000000000000;hb=2de97529a4c5a1922214ba0e6f0fb84cacbd0bc7;hpb=81a09690b36b3a4e89b4dae34f30933de13f7f90 diff --git a/fapi_5g/source/api/fapi2mac/p7/nr5g_fapi_proc_vendor_p7_msgs.c b/fapi_5g/source/api/fapi2mac/p7/nr5g_fapi_proc_vendor_p7_msgs.c new file mode 100644 index 0000000..812e225 --- /dev/null +++ b/fapi_5g/source/api/fapi2mac/p7/nr5g_fapi_proc_vendor_p7_msgs.c @@ -0,0 +1,98 @@ +/****************************************************************************** +* +* Copyright (c) 2021 Intel. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*******************************************************************************/ + +#include "nr5g_fapi_framework.h" +#include "gnb_l1_l2_api.h" +#include "nr5g_fapi_fapi2mac_api.h" +#include "nr5g_fapi_fapi2mac_p7_proc.h" + + +static inline p_fapi_api_queue_elem_t alloc_vendor_p7_msg() +{ + p_fapi_api_queue_elem_t p_vend_elem = nr5g_fapi_fapi2mac_create_api_list_elem( + FAPI_VENDOR_EXT_P7_IND, + 1, sizeof(fapi_vendor_p7_ind_msg_t)); + + if (p_vend_elem) + { + fapi_vendor_p7_ind_msg_t* p_vend_p7_ind = (fapi_vendor_p7_ind_msg_t*) (p_vend_elem + 1); + p_vend_p7_ind->header.msg_id = FAPI_VENDOR_EXT_P7_IND; + p_vend_p7_ind->header.length = (uint16_t) sizeof(fapi_vendor_p7_ind_msg_t); + } + else + { + NR5G_FAPI_LOG(ERROR_LOG, ("[VENDOR EXT indication] Unable to create " + "list element. Out of memory!!!")); + } + return p_vend_elem; +} + + +/** @ingroup group_source_api_p7_fapi2mac_proc + * + * @return Returns pointer to fapi_vendor_p7_ind_msg_t + * + * @description + * Used to access fapi_vendor_p7_ind_msg_t for filling. + * Allocates the message if it's not allocated yet. + * +**/ +fapi_vendor_p7_ind_msg_t* nr5g_fapi_proc_vendor_p7_msg_get( + p_fapi_api_stored_vendor_queue_elems vendor_extension_elems, + uint8_t phy_id) +{ + if(phy_id >= FAPI_MAX_PHY_INSTANCES) + { + NR5G_FAPI_LOG(ERROR_LOG, ("[VENDOR EXT indication] Out of bounds" + "phy_id=%u", phy_id)); + return NULL; + } + + p_fapi_api_queue_elem_t p_vend_elem = vendor_extension_elems->vendor_ext[phy_id]; + if(!p_vend_elem) + { + NR5G_FAPI_LOG(DEBUG_LOG, ("[VENDOR EXT indication] No vendor element" + "for phy_id=%u yet. Creating new", phy_id)); + p_vend_elem = alloc_vendor_p7_msg(); + vendor_extension_elems->vendor_ext[phy_id] = p_vend_elem; + } + + return p_vend_elem ? (fapi_vendor_p7_ind_msg_t*) (p_vend_elem + 1) : NULL; +} + +/** @ingroup group_source_api_p7_fapi2mac_proc + * + * @return none + * + * @description + * Adds all cached vendor msgs to api list. + * Function shall be called after all other fapi msgs are added. + * +**/ +void nr5g_fapi_proc_vendor_p7_msgs_move_to_api_list( + bool is_urllc, + p_fapi_api_stored_vendor_queue_elems vendor_extension_elems) +{ + uint8_t phy_id; + for(phy_id=0; phy_idvendor_ext[phy_id]); + nr5g_fapi_fapi2mac_add_api_to_list(phy_id, *p_vend_elem, is_urllc); + *p_vend_elem = NULL; + } +}