o-du/phy
Intel O-RAN/X-RAN Generated Doxygen Documentation
xran_fh_o_du.h
Go to the documentation of this file.
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 
32 #ifndef _XRAN_FH_O_DU_H_
33 #define _XRAN_FH_O_DU_H_
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 #include <stdio.h>
40 #include <stdlib.h>
41 #include <string.h>
42 #include <stdint.h>
43 #include <inttypes.h>
44 #include <sys/types.h>
45 #include <sys/queue.h>
46 #include <netinet/in.h>
47 #include <setjmp.h>
48 #include <stdarg.h>
49 #include <ctype.h>
50 #include <errno.h>
51 #include <getopt.h>
52 #include <unistd.h>
53 
54 #define XRAN_STATUS_SUCCESS (0)
55 
58 #define XRAN_STATUS_FAIL (-1)
59 
63 #define XRAN_STATUS_RETRY (-2)
64 
68 #define XRAN_STATUS_RESOURCE (-3)
69 
75 #define XRAN_STATUS_INVALID_PARAM (-4)
76 
79 #define XRAN_STATUS_FATAL (-5)
80 
85 #define XRAN_STATUS_UNSUPPORTED (-6)
86 
92 #define XRAN_STATUS_INVALID_PACKET (-7)
93 
98 #define XranGetTtiNum(symIdx, numSymPerTti) (((uint32_t)symIdx / (uint32_t)numSymPerTti))
99 
100 #define XranGetSymNum(symIdx, numSymPerTti) (((uint32_t)symIdx % (uint32_t)numSymPerTti))
101 
102 #define XranGetFrameNum(tti,SFNatSecStart,numSubFramePerSystemFrame, numSlotPerSubFrame) ((((uint32_t)tti / ((uint32_t)numSubFramePerSystemFrame * (uint32_t)numSlotPerSubFrame)) + SFNatSecStart) & 0x3FF)
103 
104 #define XranGetSubFrameNum(tti, numSlotPerSubFrame, numSubFramePerSystemFrame) (((uint32_t)tti/(uint32_t)numSlotPerSubFrame) % (uint32_t)numSubFramePerSystemFrame)
105 
106 #define XranGetSlotNum(tti, numSlotPerSfn) ((uint32_t)tti % ((uint32_t)numSlotPerSfn))
107 
108 #define XRAN_PORTS_NUM (1)
109 #define XRAN_N_FE_BUF_LEN (40)
110 #define XRAN_MAX_SECTOR_NR (12)
111 #define XRAN_MAX_ANTENNA_NR (16)
114 /* see 10.2 Hierarchy of Radiation Structure in O-RU (assume TX and RX pannel are the same dimensions)*/
115 #define XRAN_MAX_PANEL_NR (1)
116 #define XRAN_MAX_TRX_ANTENNA_ARRAY (1)
117 #define XRAN_MAX_ANT_ARRAY_ELM_NR (64)
121 #define XRAN_NUM_OF_SYMBOL_PER_SLOT (14)
122 #define XRAN_MAX_NUM_OF_SRS_SYMBOL_PER_SLOT XRAN_NUM_OF_SYMBOL_PER_SLOT
123 #define XRAN_MAX_TDD_PERIODICITY (80)
124 #define XRAN_MAX_CELLS_PER_PORT (XRAN_MAX_SECTOR_NR)
125 #define XRAN_COMPONENT_CARRIERS_MAX (XRAN_MAX_SECTOR_NR)
126 #define XRAN_NUM_OF_ANT_RADIO (XRAN_MAX_SECTOR_NR*XRAN_MAX_ANTENNA_NR)
127 #define XRAN_MAX_PRBS (275)
129 #define XRAN_MAX_SECTIONS_PER_SYM (16)
131 #define XRAN_MAX_PKT_BURST (448+4)
132 #define XRAN_N_MAX_BUFFER_SEGMENT XRAN_MAX_PKT_BURST
134 #define XRAN_STRICT_PARM_CHECK (1)
136 /* Slot type definition */
137 #define XRAN_SLOT_TYPE_INVALID (0)
138 #define XRAN_SLOT_TYPE_DL (1)
139 #define XRAN_SLOT_TYPE_UL (2)
140 #define XRAN_SLOT_TYPE_SP (3)
141 #define XRAN_SLOT_TYPE_FDD (4)
142 #define XRAN_SLOT_TYPE_LAST (5)
144 /* symbol type definition */
145 #define XRAN_SYMBOL_TYPE_DL (0)
146 #define XRAN_SYMBOL_TYPE_UL (1)
147 #define XRAN_SYMBOL_TYPE_GUARD (2)
148 #define XRAN_SYMBOL_TYPE_FDD (3)
150 #define XRAN_NUM_OF_SLOT_IN_TDD_LOOP (80)
152 //#define _XRAN_DEBUG
153 //#define _XRAN_VERBOSE
155 #ifdef _XRAN_DEBUG
156  #define xran_log_dbg(fmt, ...) \
157  fprintf(stderr, \
158  "DEBUG: %s(%d): " fmt "\n", \
159  __FILE__, \
160  __LINE__, ##__VA_ARGS__)
161 #else
162  #define xran_log_dbg(fmt, ...)
163 #endif
164 
165 #if defined(_XRAN_DEBUG) || defined(_XRAN_VERBOSE)
166  #define xran_log_wrn(fmt, ...) \
167  fprintf( \
168  stderr, \
169  "WARNING: %s(%d): " fmt "\n", \
170  __FILE__, \
171  __LINE__, ##__VA_ARGS__)
172 #else
173  #define xran_log_dbg(fmt, ...)
174  #define xran_log_wrn(fmt, ...)
175 #endif
176 
177 #define xran_log_err(fmt, ...) \
178  fprintf(stderr, \
179  "ERROR: %s(%d): " fmt "\n", \
180  __FILE__, \
181  __LINE__, ##__VA_ARGS__)
182 
184 {
185  XRAN_FDD = 0, XRAN_TDD
186 };
187 
188 enum xran_if_state
189 {
190  XRAN_INIT = 0,
193 };
194 
209 };
210 
219 {
220  XRAN_CB_TTI = 0,
224 };
225 
233 };
234 
235 typedef int32_t xran_status_t;
238 typedef void (*xran_callback_sym_fn)(void*);
241 typedef int (*xran_fh_tti_callback_fn)(void*);
244 typedef void (*xran_transport_callback_fn)(void*, xran_status_t);
247 typedef int16_t (*phy_encoder_poll_fn)(void);
250 typedef int16_t (*phy_decoder_poll_fn)(void);
253 enum xran_vf_ports
254 {
255  XRAN_UP_VF = 0,
258 };
259 
261 enum xran_category
262 {
263  XRAN_CATEGORY_A = 0,
266 };
267 
270 {
271  XRAN_BEAM_ID_BASED = 0,
274 };
275 
277 enum xran_bbdev_init
278 {
279  XRAN_BBDEV_NOT_USED = -1,
283 };
284 
286 struct xran_cb_tag {
287  uint16_t cellId;
288  uint32_t symbol;
289  uint32_t slotiId;
290 };
291 
293 struct xran_io_cfg {
294  uint8_t id;
295  char *dpdk_dev[XRAN_VF_MAX];
296  char *bbdev_dev[1];
297  int32_t bbdev_mode;
298  int32_t core;
299  int32_t system_core;
300  int32_t pkt_proc_core;
301  int32_t pkt_aux_core;
302  int32_t timing_core;
303  int32_t port[XRAN_VF_MAX];
304 };
305 
307 struct xran_eaxcid_config {
308  uint16_t mask_cuPortId;
309  uint16_t mask_bandSectorId;
310  uint16_t mask_ccId;
311  uint16_t mask_ruPortId;
313  uint8_t bit_cuPortId;
314  uint8_t bit_bandSectorId;
315  uint8_t bit_ccId;
316  uint8_t bit_ruPortId;
317 };
318 
322 struct xran_fh_init {
323  struct xran_io_cfg io_cfg;
324  struct xran_eaxcid_config eAxCId_conf;
326  uint32_t dpdkBasebandFecMode;
327  char *dpdkBasebandDevice;
328  char *filePrefix;
330  uint32_t mtu;
332  int8_t *p_o_du_addr;
333  int8_t *p_o_ru_addr;
335  uint16_t totalBfWeights;
337  uint16_t Tadv_cp_dl;
338  uint16_t T2a_min_cp_dl;
339  uint16_t T2a_max_cp_dl;
340  uint16_t T2a_min_cp_ul;
341  uint16_t T2a_max_cp_ul;
342  uint16_t T2a_min_up;
343  uint16_t T2a_max_up;
344  uint16_t Ta3_min;
345  uint16_t Ta3_max;
346  uint16_t T1a_min_cp_dl;
347  uint16_t T1a_max_cp_dl;
348  uint16_t T1a_min_cp_ul;
349  uint16_t T1a_max_cp_ul;
350  uint16_t T1a_min_up;
351  uint16_t T1a_max_up;
352  uint16_t Ta4_min;
353  uint16_t Ta4_max;
355  uint8_t enableCP;
356  uint8_t prachEnable;
357  uint8_t srsEnable;
358  uint8_t cp_vlan_tag;
359  uint8_t up_vlan_tag;
360  int32_t debugStop;
361  int32_t debugStopCount;
362  int32_t DynamicSectionEna;
363  int32_t GPS_Alpha; // refer to alpha as defined in section 9.7.2 of ORAN spec. this value should be alpha*(1/1.2288ns), range 0 - 1e7 (ns)
364  int32_t GPS_Beta; //beta value as defined in section 9.7.2 of ORAN spec. range -32767 ~ +32767
365 };
366 
368 struct xran_cp_bf_weight{
369  int16_t nAntElmTRx;
370  int8_t* p_ext_section;
371  int16_t ext_section_sz;
372 };
373 struct xran_cp_bf_attribute{
374  int16_t weight[4];
375 };
376 struct xran_cp_bf_precoding{
377  int16_t weight[4];
378 };
379 
381 struct xran_section_desc {
382  uint16_t section_id;
384  int16_t iq_buffer_offset;
385  int16_t iq_buffer_len;
387  uint8_t *pData;
388  void *pCtrl;
389 };
390 
392 struct xran_prb_elm {
393  int16_t nRBStart;
394  int16_t nRBSize;
395  int16_t nStartSymb;
396  int16_t numSymb;
397  int16_t nBeamIndex;
398  int16_t bf_weight_update;
399  int16_t compMethod;
400  int16_t iqWidth;
401  int16_t BeamFormingType;
403  struct xran_section_desc * p_sec_desc[XRAN_NUM_OF_SYMBOL_PER_SLOT];
404  struct xran_cp_bf_weight bf_weight;
406  union {
407  struct xran_cp_bf_attribute bf_attribute;
408  struct xran_cp_bf_precoding bf_precoding;
409  };
410 };
411 
413 struct xran_prb_map {
414  uint8_t dir;
415  uint8_t xran_port;
416  uint16_t band_id;
417  uint16_t cc_id;
418  uint16_t ru_port_id;
419  uint16_t tti_id;
420  uint8_t start_sym_id;
421  uint32_t nPrbElm;
422  struct xran_prb_elm prbMap[XRAN_MAX_PRBS];
424 
425 };
426 
427 /* PRACH config required for XRAN based FH */
428 struct xran_prach_config
429 {
430  /* PRACH config*/
431  uint8_t nPrachConfIdx;
432  uint8_t nPrachSubcSpacing;
437  uint8_t nPrachZeroCorrConf;
438  uint8_t nPrachRestrictSet;
439  uint16_t nPrachRootSeqIdx;
440  uint16_t nPrachFreqStart;
441  int32_t nPrachFreqOffset;
442  uint8_t nPrachFilterIdx;
443 };
444 
446 struct xran_srs_config {
447  uint16_t symbMask;
448  uint8_t eAxC_offset;
449 };
450 
452 struct xran_slot_config {
453  uint8_t nSymbolType[XRAN_NUM_OF_SYMBOL_PER_SLOT];
454  uint8_t reserved[2];
455 };
456 
458 struct xran_frame_config {
459  uint8_t nFrameDuplexType;
460  uint8_t nNumerology;
463  uint8_t nTddPeriod;
466  /* The number of slots need to be equal to nTddPeriod */
467 };
468 
473 };
474 
479 };
480 
482 struct xran_ru_config {
483  enum xran_category xranCat;
485  uint8_t iqWidth;
486  uint8_t compMeth;
487  uint8_t fftSize;
488  enum xran_input_byte_order byteOrder;
489  enum xran_input_i_q_order iqOrder;
490  uint16_t xran_max_frame;
491 };
492 
496 struct xran_fh_config {
497  uint32_t dpdk_port;
498  uint32_t sector_id;
499  uint32_t nCC;
500  uint32_t neAxc;
501  uint32_t neAxcUl;
502  uint32_t nAntElmTRx;
503  uint16_t nDLFftSize;
504  uint16_t nULFftSize;
505  uint16_t nDLRBs;
506  uint16_t nULRBs;
507  uint32_t nDLAbsFrePointA;
508  uint32_t nULAbsFrePointA;
509  uint32_t nDLCenterFreqARFCN;
510  uint32_t nULCenterFreqARFCN;
512  void *ttiCbParam;
514  struct xran_prach_config prach_conf;
515  struct xran_srs_config srs_conf;
516  struct xran_frame_config frame_conf;
517  struct xran_ru_config ru_conf;
519  phy_encoder_poll_fn bbdev_enc;
522  uint32_t log_level;
523 };
524 
528 struct xran_common_counters{
529  uint64_t Rx_on_time;
530  uint64_t Rx_early;
531  uint64_t Rx_late;
532  uint64_t Rx_corrupt;
533  uint64_t Rx_pkt_dupl;
534  uint64_t Total_msgs_rcvd;
535 };
536 
540 typedef void * xran_cc_handle_t;
552 struct xran_flat_buffer
553 {
554  uint32_t nElementLenInBytes;
559  uint32_t nNumberOfElements;
561  uint32_t nOffsetInBytes;
564  uint32_t nIsPhyAddr;
565  uint8_t *pData;
569  void *pCtrl;
571 };
572 
591 struct xran_buffer_list
592 {
593  uint32_t nNumBuffers;
595  struct xran_flat_buffer *pBuffers;
598  void *pUserData;
600  void *pPrivateMetaData;
607 };
608 
625 int32_t xran_init(int argc, char *argv[], struct xran_fh_init *p_xran_fh_init, char *appName, void ** pHandle);
626 
643 int32_t xran_sector_get_instances (void * pHandle, uint16_t nNumInstances,
644  xran_cc_handle_t * pSectorInstanceHandles);
645 
662 int32_t xran_mm_init (void * pHandle, uint64_t nMemorySize, uint32_t nMemorySegmentSize);
663 
682 int32_t xran_bm_init (void * pHandle, uint32_t * pPoolIndex, uint32_t nNumberOfBuffers, uint32_t nBufferSize);
683 
702 int32_t xran_bm_allocate_buffer(void * pHandle, uint32_t nPoolIndex, void **ppData, void **ppCtrl);
703 
719 int32_t xran_bm_free_buffer(void * pHandle, void *pData, void *pCtrl);
720 
732 int32_t xran_mm_destroy (void * pHandle);
733 
759  int32_t xran_5g_fronthault_config (void * pHandle,
761  struct xran_buffer_list *pSrcCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
762  struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
763  struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
764  xran_transport_callback_fn pCallback,
765  void *pCallbackTag);
766 
785 int32_t xran_5g_prach_req (void * pHandle,
786  struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
787  xran_transport_callback_fn pCallback,
788  void *pCallbackTag);
789 
808 int32_t xran_5g_srs_req (void * pHandle,
809  struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN],
810  xran_transport_callback_fn pCallback,
811  void *pCallbackTag);
812 
813 
831 uint32_t xran_get_time_stats(uint64_t *total_time, uint64_t *used_time, uint32_t *core_used, uint32_t clear);
832 
846 int32_t xran_open(void *pHandle, struct xran_fh_config* pConf);
847 
859 int32_t xran_start(void *pHandle);
860 
872 int32_t xran_stop(void *pHandle);
873 
885 int32_t xran_close(void *pHandle);
886 
907 int32_t xran_reg_sym_cb(void *pHandle, xran_callback_sym_fn symCb, void * symCbParam, uint8_t symb, uint8_t ant);
908 
930 int32_t xran_reg_physide_cb(void *pHandle, xran_fh_tti_callback_fn Cb, void *cbParam, int skipTtiNum, enum callback_to_phy_id);
931 
952 int32_t xran_get_slot_idx (uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond);
953 
968 int32_t xran_get_common_counters(void *pXranLayerHandle, struct xran_common_counters *pStats);
969 
970 
982 
983 
995 void* xran_malloc(size_t buf_len);
996 
997 
1011 uint8_t* xran_add_hdr_offset(uint8_t *dst, int16_t compMethod);
1012 
1013 #ifdef __cplusplus
1014 }
1015 #endif
1016 
1017 #endif /* _XRAN_FH_O_DU_H_*/
int32_t xran_get_common_counters(void *pXranLayerHandle, struct xran_common_counters *pStats)
Definition: xran_main.c:3074
#define XRAN_MAX_ANT_ARRAY_ELM_NR
Definition: xran_fh_o_du.h:118
#define XRAN_N_FE_BUF_LEN
Definition: xran_fh_o_du.h:109
int32_t xran_open(void *pHandle, struct xran_fh_config *pConf)
Definition: xran_main.c:2756
#define XRAN_MAX_PRBS
Definition: xran_fh_o_du.h:128
end write files for IQ samples for ant
Definition: gen_test.m:166
int32_t xran_init(int argc, char *argv[], struct xran_fh_init *p_xran_fh_init, char *appName, void **pHandle)
Definition: xran_main.c:2319
int32_t xran_reg_sym_cb(void *pHandle, xran_callback_sym_fn symCb, void *symCbParam, uint8_t symb, uint8_t ant)
Definition: xran_main.c:2888
int32_t xran_mm_init(void *pHandle, uint64_t nMemorySize, uint32_t nMemorySegmentSize)
Definition: xran_main.c:2447
xran_category
Definition: xran_fh_o_du.h:262
XranFrameDuplexType
Definition: xran_fh_o_du.h:184
uint16_t cellId
Definition: xran_fh_o_du.h:288
int16_t(* phy_decoder_poll_fn)(void)
Definition: xran_fh_o_du.h:251
int32_t xran_bm_init(void *pHandle, uint32_t *pPoolIndex, uint32_t nNumberOfBuffers, uint32_t nBufferSize)
Definition: xran_main.c:2454
xran_input_i_q_order
Definition: xran_fh_o_du.h:477
int32_t xran_get_slot_idx(uint32_t *nFrameIdx, uint32_t *nSubframeIdx, uint32_t *nSlotIdx, uint64_t *nSecond)
Definition: xran_main.c:2936
uint8_t * xran_add_hdr_offset(uint8_t *dst, int16_t compMethod)
Definition: xran_main.c:2741
int32_t xran_start(void *pHandle)
Definition: xran_main.c:2841
xran_weight_based_beamforming_type
Definition: xran_fh_o_du.h:229
#define XRAN_MAX_ANTENNA_NR
Definition: xran_fh_o_du.h:111
void * xran_cc_handle_t
Definition: xran_fh_o_du.h:541
enum xran_if_state xran_get_if_state(void)
Definition: xran_main.c:238
int32_t xran_5g_srs_req(void *pHandle, struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANT_ARRAY_ELM_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, void *pCallbackTag)
Definition: xran_main.c:2679
uint16_t xran_max_frame
Definition: xran_main.c:116
xran_compression_method
Definition: xran_fh_o_du.h:203
int32_t xran_5g_prach_req(void *pHandle, struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, void *pCallbackTag)
Definition: xran_main.c:2636
int32_t xran_mm_destroy(void *pHandle)
Definition: xran_main.c:2877
int32_t xran_close(void *pHandle)
Definition: xran_main.c:2863
xran_input_byte_order
Definition: xran_fh_o_du.h:471
xran_if_state
Definition: xran_fh_o_du.h:189
int32_t xran_bm_allocate_buffer(void *pHandle, uint32_t nPoolIndex, void **ppData, void **ppCtrl)
Definition: xran_main.c:2499
void(* xran_callback_sym_fn)(void *)
Definition: xran_fh_o_du.h:239
int32_t xran_stop(void *pHandle)
Definition: xran_main.c:2852
void * xran_malloc(size_t buf_len)
Definition: xran_main.c:2736
int32_t xran_bm_free_buffer(void *pHandle, void *pData, void *pCtrl)
Definition: xran_main.c:2541
int(* xran_fh_tti_callback_fn)(void *)
Definition: xran_fh_o_du.h:242
callback_to_phy_id
Definition: xran_fh_o_du.h:219
uint32_t symbol
Definition: xran_fh_o_du.h:289
uint32_t slotiId
Definition: xran_fh_o_du.h:290
#define XRAN_NUM_OF_SYMBOL_PER_SLOT
Definition: xran_fh_o_du.h:122
int32_t xran_sector_get_instances(void *pHandle, uint16_t nNumInstances, xran_cc_handle_t *pSectorInstanceHandles)
Definition: xran_main.c:2408
xran_vf_ports
Definition: xran_fh_o_du.h:254
int16_t(* phy_encoder_poll_fn)(void)
Definition: xran_fh_o_du.h:248
#define XRAN_MAX_TDD_PERIODICITY
Definition: xran_fh_o_du.h:124
uint32_t reserved
Definition: xran_pkt_cp.h:216
xran_bbdev_init
Definition: xran_fh_o_du.h:278
uint8_t fftSize
Definition: xran_pkt_cp.h:215
uint32_t xran_get_time_stats(uint64_t *total_time, uint64_t *used_time, uint32_t *core_used, uint32_t clear)
Definition: xran_main.c:2721
void(* xran_transport_callback_fn)(void *, xran_status_t)
Definition: xran_fh_o_du.h:245
xran_beamforming_type
Definition: xran_fh_o_du.h:270
int32_t xran_reg_physide_cb(void *pHandle, xran_fh_tti_callback_fn Cb, void *cbParam, int skipTtiNum, enum callback_to_phy_id)
Definition: xran_main.c:2900
int32_t xran_5g_fronthault_config(void *pHandle, struct xran_buffer_list *pSrcBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pSrcCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pDstBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], struct xran_buffer_list *pDstCpBuffer[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN], xran_transport_callback_fn pCallback, void *pCallbackTag)
Definition: xran_main.c:2551
int32_t xran_status_t
Definition: xran_fh_o_du.h:236