1 /******************************************************************************
3 * Copyright (c) 2019 Intel.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 *******************************************************************************/
20 * @file This file has definitions of Shared Memory interface functions between
25 #ifndef _NR5G_FAPI_WLS_H_
26 #define _NR5G_FAPI_WLS_H_
28 #include "nr5g_fapi_std.h"
29 #include "nr5g_fapi_common_types.h"
31 #include "gnb_l1_l2_api.h"
33 typedef void *WLS_HANDLE;
35 #define NUM_WLS_INSTANCES 2
36 #define NR5G_FAPI2PHY_WLS_INST 0
37 #define NR5G_FAPI2MAC_WLS_INST 1
39 #define MAX_NUM_LOCATIONS (16)
41 #define MIN_DL_BUF_LOCATIONS (0) /* Used for stats collection 0-10 */
42 #define MAX_DL_BUF_LOCATIONS (MIN_DL_BUF_LOCATIONS + MAX_NUM_LOCATIONS) /* Used for stats collection 0-10 */
43 #define MIN_UL_BUF_LOCATIONS (MAX_DL_BUF_LOCATIONS) /* Used for stats collection 0-10 */
44 #define MAX_UL_BUF_LOCATIONS (MIN_UL_BUF_LOCATIONS + MAX_NUM_LOCATIONS)
46 #define TO_FREE_SIZE ( 10 )
47 #define TOTAL_FREE_BLOCKS ( 50 * FAPI_MAX_PHY_INSTANCES) /* To hold both send and recv blocks on PHY side wls */
48 #define ALLOC_TRACK_SIZE ( 16384 )
49 #define MSG_MAXSIZE (16*16384 )
51 #define MEMORY_CORRUPTION_DETECT
52 #define MEMORY_CORRUPTION_DETECT_FLAG (0xAB)
54 typedef enum wls_fapi_free_list_e {
55 WLS_FAPI_FREE_SEND_LIST = 0,
56 WLS_FAPI_FREE_RECV_LIST
57 } wls_fapi_free_list_t;
59 typedef struct wls_fapi_mem_array {
65 } WLS_FAPI_MEM_STRUCT,
66 *PWLS_FAPI_MEM_STRUCT;
68 // WLS context structure
69 typedef struct _nr5g_fapi_wls_context {
70 void *shmem; // shared memory region.
71 uint64_t shmem_size; // shared memory region size.
72 WLS_FAPI_MEM_STRUCT sWlsStruct;
73 WLS_HANDLE h_wls[NUM_WLS_INSTANCES]; // WLS context handle
75 uint32_t nTotalMemorySize;
76 uint32_t nTotalBlocks;
77 uint32_t nAllocBlocks;
78 uint32_t nTotalAllocCnt;
79 uint32_t nTotalFreeCnt;
80 uint32_t nTotalUlBufAllocCnt;
81 uint32_t nTotalUlBufFreeCnt;
82 uint32_t nTotalDlBufAllocCnt[MAX_DL_BUF_LOCATIONS];
83 uint32_t nTotalDlBufFreeCnt[MAX_DL_BUF_LOCATIONS];
84 uint32_t nPartitionMemSize;
85 void *pPartitionMemBase;
86 volatile pthread_mutex_t fapi2phy_lock_send;
87 volatile pthread_mutex_t fapi2phy_lock_alloc;
88 volatile pthread_mutex_t fapi2mac_lock_send;
89 volatile pthread_mutex_t fapi2mac_lock_alloc;
90 } nr5g_fapi_wls_context_t,
91 *p_nr5g_fapi_wls_context_t;
93 extern nr5g_fapi_wls_context_t g_wls_ctx;
95 inline p_nr5g_fapi_wls_context_t nr5g_fapi_wls_context(
97 inline uint8_t nr5g_fapi_fapi2phy_wls_ready(
99 inline uint8_t nr5g_fapi_fapi2mac_wls_ready(
101 uint8_t nr5g_fapi_wls_init(
103 uint8_t nr5g_fapi_wls_memory_init(
105 uint8_t nr5g_fapi_wls_destroy(
107 void *wls_fapi_alloc_buffer(
110 void wls_fapi_free_buffer(
113 uint32_t wls_fapi_create_mem_array(
114 PWLS_FAPI_MEM_STRUCT pMemArray,
115 void *pMemArrayMemory,
117 uint32_t nBlockSize);
118 uint32_t wls_fapi_alloc_mem_array(
119 PWLS_FAPI_MEM_STRUCT pMemArray,
121 uint32_t wls_fapi_free_mem_array(
122 PWLS_FAPI_MEM_STRUCT pMemArray,
124 uint64_t nr5g_fapi_wls_va_to_pa(
127 void *nr5g_fapi_wls_pa_to_va(
130 uint8_t wls_fapi_add_blocks_to_ul(
132 void nr5g_fapi_wls_show_data(
135 void wls_fapi_free_list_all(
137 void nr5g_fapi_wls_print_stats(
140 #endif /*_NR5G_FAPI_WLS_H_*/