* INTC Contribution to the O-RAN F Release for O-DU Low
[o-du/phy.git] / fhi_lib / lib / src / xran_common.h
index ad17c1e..04076fd 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
 *
-*   Copyright (c) 2019 Intel.
+*   Copyright (c) 2020 Intel.
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
 *
 *******************************************************************************/
 
-
 /**
  * @brief XRAN layer common functionality for both lls-CU and RU as well as C-plane and
  *    U-plane
 #ifndef _XRAN_COMMON_H_
 #define _XRAN_COMMON_H_
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/param.h>
+#include <sys/queue.h>
 
 #include <rte_common.h>
 #include <rte_mbuf.h>
 #include <rte_timer.h>
+#include <rte_log.h>
 
-#include "xran_fh_lls_cu.h"
+#include "xran_fh_o_du.h"
 #include "xran_pkt_up.h"
+#include "xran_cp_api.h"
+#include "xran_dev.h"
+#include "xran_pkt.h"
+
+
+extern uint64_t interval_us;
+#define O_DU 0
+#define O_RU 1
 
-#define APP_LLS_CU 0
-#define APP_RU     1
-#define NUM_OF_PRB_IN_FULL_BAND (66)
 #define N_SC_PER_PRB 12
+#define MAX_N_FULLBAND_SC 273
 #define N_SYM_PER_SLOT 14
-#define N_FULLBAND_SC (NUM_OF_PRB_IN_FULL_BAND*N_SC_PER_PRB)
-#define MAX_ANT_CARRIER_SUPPORTED 16
-/* 0.125, just for testing */
-#define SLOTNUM_PER_SUBFRAME      8
+#define SUBFRAME_DURATION_US 1000
+#define SLOTNUM_PER_SUBFRAME(interval)       (SUBFRAME_DURATION_US/(interval))
 #define SUBFRAMES_PER_SYSTEMFRAME  10
-#define SLOTS_PER_SYSTEMFRAME (SLOTNUM_PER_SUBFRAME*SUBFRAMES_PER_SYSTEMFRAME)
-#define PDSCH_PAYLOAD_SIZE (N_FULLBAND_SC*4)
-#define NUM_OF_SLOT_IN_TDD_LOOP         (80)
-#define IQ_PLAYBACK_BUFFER_BYTES (NUM_OF_SLOT_IN_TDD_LOOP*N_SYM_PER_SLOT*N_FULLBAND_SC*4L)
+#define SLOTS_PER_SYSTEMFRAME(interval) ((SLOTNUM_PER_SUBFRAME(interval))*SUBFRAMES_PER_SYSTEMFRAME)
+
+/* PRACH data samples are 32 bits wide, 16bits for I and 16bits for Q. Each packet contains 839 samples for long sequence or 144 for short sequence. The payload length is 840*16*2/8 octets.*/
+#ifdef FCN_1_2_6_EARLIER
+#define PRACH_PLAYBACK_BUFFER_BYTES (144*4L)
+#else
+#define PRACH_PLAYBACK_BUFFER_BYTES (840*4L)
+#endif
+#define PRACH_SRS_BUFFER_BYTES (144*14*4L)
 
-/* PRACH data samples are 32 bits wide, 16bits for I and 16bits for Q. Each packet contains 839 samples. The payload length is 3356 octets.*/
-#define PRACH_PLAYBACK_BUFFER_BYTES (10*839*4L)
+/**<  this is the configuration of M-plane */
+#define XRAN_MAX_NUM_SECTIONS       (N_SYM_PER_SLOT* (XRAN_MAX_ANTENNA_NR*2) + XRAN_MAX_ANT_ARRAY_ELM_NR)
 
-#define XRAN_MAX_NUM_SECTIONS       (NUM_OF_PRB_IN_FULL_BAND)     // TODO: need to decide proper value
+#define    XRAN_PAYLOAD_1_RB_SZ(iqWidth) (((iqWidth == 0) || (iqWidth == 16)) ? \
+                (N_SC_PER_PRB*(MAX_IQ_BIT_WIDTH/8)*2) : (3 * iqWidth + 1))
 
-#define XRAN_MAX_MBUF_LEN 9600 /**< jummbo frame */
-#define NSEC_PER_SEC 1000000000
+#define XRAN_MAX_MBUF_LEN (13168 + XRAN_MAX_SECTIONS_PER_SYM* (RTE_PKTMBUF_HEADROOM + sizeof(struct rte_ether_hdr) + sizeof(struct xran_ecpri_hdr) + sizeof(struct radio_app_common_hdr) + sizeof(struct data_section_hdr)))
+#define NSEC_PER_SEC 1000000000L
 #define TIMER_RESOLUTION_CYCLES 1596*1 /* 1us */
 #define XRAN_RING_SIZE  512 /*4*14*8 pow of 2 */
 #define XRAN_NAME_MAX_LEN      (64)
 #define XRAN_RING_NUM       (3)
 
-#define MAX_NUM_OF_XRAN_CTX       (2)
+#define XranDiffSymIdx(prevSymIdx, currSymIdx, numTotalSymIdx)  ((prevSymIdx > currSymIdx) ? ((currSymIdx + numTotalSymIdx) - prevSymIdx) : (currSymIdx - prevSymIdx))
+
+#define XRAN_MLOG_VAR 0 /**< enable debug variables to mlog */
+
+
+#define DIV_ROUND_OFFSET(X,Y) ( X/Y + ((X%Y)?1:0) )
+
+#define MAX_NUM_OF_XRAN_CTX          (2)
 #define XranIncrementCtx(ctx)                             ((ctx >= (MAX_NUM_OF_XRAN_CTX-1)) ? 0 : (ctx+1))
 #define XranDecrementCtx(ctx)                             ((ctx == 0) ? (MAX_NUM_OF_XRAN_CTX-1) : (ctx-1))
 
-#define XranDiffSymIdx(prevSymIdx, currSymIdx, numTotalSymIdx)  ((prevSymIdx > currSymIdx) ? ((currSymIdx + numTotalSymIdx) - prevSymIdx) : (currSymIdx - prevSymIdx))
-
-#define XRAN_SYM_JOB_SIZE 512
+#define MAX_NUM_OF_DPDK_TIMERS       (10)
+#define DpdkTimerIncrementCtx(ctx)           ((ctx >= (MAX_NUM_OF_DPDK_TIMERS-1)) ? 0 : (ctx+1))
+#define DpdkTimerDecrementCtx(ctx)           ((ctx == 0) ? (MAX_NUM_OF_DPDK_TIMERS-1) : (ctx-1))
 
-struct send_symbol_cb_args
-{
-    struct rb_map *samp_buf;
-    uint8_t *symb_id;
-};
+/* Callback function to send mbuf to the ring */
+typedef int (*xran_ethdi_mbuf_send_fn)(struct rte_mbuf *mb, uint16_t ethertype, uint16_t vf_id);
 
-struct pkt_dump
-{
-    int num_samp;
-    int num_bytes;
-    uint8_t symb;
-    struct ecpri_seq_id seq;
-} __rte_packed;
-
-/* PRACH configuration table defines */
-#define XRAN_PRACH_CANDIDATE_PREAMBLE    (2)
-#define XRAN_PRACH_CANDIDATE_Y           (2)
-#define XRAN_PRACH_CANDIDATE_SLOT        (40)
-#define XRAN_PRACH_CONFIG_TABLE_SIZE     (256)
-#define XRAN_PRACH_PREAMBLE_FORMAT_OF_ABC (9)
-typedef enum
-{
-    FORMAT_0 = 0,
-    FORMAT_1,
-    FORMAT_2,
-    FORMAT_3,
-    FORMAT_A1,
-    FORMAT_A2,
-    FORMAT_A3,
-    FORMAT_B1,
-    FORMAT_B2,
-    FORMAT_B3,
-    FORMAT_B4,
-    FORMAT_C0,
-    FORMAT_C2,
-    FORMAT_LAST
-}PreambleFormatEnum;
-
-/* add PRACH used config table, same structure as used in refPHY */
-typedef struct
-{
-    uint8_t     prachConfigIdx;
-    uint8_t     preambleFmrt[XRAN_PRACH_CANDIDATE_PREAMBLE];
-    uint8_t     x;
-    uint8_t     y[XRAN_PRACH_CANDIDATE_Y];
-    uint8_t     slotNr[XRAN_PRACH_CANDIDATE_SLOT];
-    uint8_t     slotNrNum;
-    uint8_t     startingSym;
-    uint8_t     nrofPrachInSlot;
-    uint8_t     occassionsInPrachSlot;
-    uint8_t     duration;
-} xRANPrachConfigTableStruct;
-
-typedef struct
-{
-    uint8_t    preambleFmrt;
-    uint16_t   lRALen;
-    uint8_t    fRA;
-    uint32_t    nu;
-    uint16_t   nRaCp;
-}xRANPrachPreambleLRAStruct;
-
-typedef struct
-{
-    uint8_t    filterIdx;
-    uint8_t    startSymId;
-    uint16_t   startPrbc;
-    uint8_t    numPrbc;
-    uint8_t    numSymbol;
-    uint16_t   timeOffset;
-    int32_t    freqOffset;
-    uint8_t    occassionsInPrachSlot;
-    uint8_t    x;
-    uint8_t    y[XRAN_PRACH_CANDIDATE_Y];
-    uint8_t    isPRACHslot[XRAN_PRACH_CANDIDATE_SLOT];
-}xRANPrachCPConfigStruct;
-
-
-typedef struct DeviceHandleInfo
-{
-    /**< Structure that contains the information to describe the
-     * instance i.e service type, virtual function, package Id etc..*/
-    uint16_t nIndex;
-    /* Unique ID of an handle shared between phy layer and library */
-    /**< number of antennas supported per link*/
-    uint32_t nBufferPoolIndex;
-    /**< Buffer poolIndex*/
-    struct rte_mempool * p_bufferPool[XRAN_MAX_SECTOR_NR];
-    uint32_t bufferPoolElmSz[XRAN_MAX_SECTOR_NR];
-    uint32_t bufferPoolNumElm[XRAN_MAX_SECTOR_NR];
-
-}XranLibHandleInfoStruct;
-
-typedef void (*XranSymCallbackFn)(struct rte_timer *tim, void* arg);
-
-/*
- * manage one cell's all Ethernet frames for one DL or UL LTE subframe
- */
-typedef struct {
-    /* -1-this subframe is not used in current frame format
-         0-this subframe can be transmitted, i.e., data is ready
-          1-this subframe is waiting transmission, i.e., data is not ready
-         10 - DL transmission missing deadline. When FE needs this subframe data but bValid is still 1,
-        set bValid to 10.
-    */
-    int32_t bValid ; // when UL rx, it is subframe index.
-    int32_t nSegToBeGen;
-    int32_t nSegGenerated; // how many date segment are generated by DL LTE processing or received from FE
-                       // -1 means that DL packet to be transmitted is not ready in BS
-    int32_t nSegTransferred; // number of data segments has been transmitted or received
-    struct rte_mbuf *pData[XRAN_N_MAX_BUFFER_SEGMENT]; // point to DPDK allocated memory pool
-    XRANBufferListStruct sBufferList;
-} BbuIoBufCtrlStruct;
-
-struct xran_sym_job {
-    uint32_t sym_idx;
-       uint32_t status;
-}__rte_cache_aligned;
 
 #define XranIncrementJob(i)                  ((i >= (XRAN_SYM_JOB_SIZE-1)) ? 0 : (i+1))
 
-struct xran_lib_ctx
-{
-    uint8_t llscu_id;
-    uint8_t sector_id;
-    XRANEAXCIDCONFIG eAxc_id_cfg;
-    XRANFHINIT   xran_init_cfg;
-    XRANFHCONFIG xran_fh_cfg;
-    XranLibHandleInfoStruct* pDevHandle;
-    xRANPrachCPConfigStruct PrachCPConfig;
-    uint32_t enableCP;
-    char ring_name[XRAN_RING_NUM][XRAN_MAX_SECTOR_NR][RTE_RING_NAMESIZE];
-    struct rte_ring *dl_sym_idx_ring[XRAN_MAX_SECTOR_NR];
-    struct rte_ring *xran2phy_ring[XRAN_MAX_SECTOR_NR];
-    struct rte_ring *xran2prach_ring[XRAN_MAX_SECTOR_NR];
-
-    struct xran_sym_job sym_job[XRAN_SYM_JOB_SIZE];
-    uint32_t sym_job_idx;
-
-    BbuIoBufCtrlStruct sFrontHaulTxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
-    BbuIoBufCtrlStruct sFrontHaulRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
-    BbuIoBufCtrlStruct sFHPrachRxBbuIoBufCtrl[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR];
-
-    /* buffers lists */
-    XRANFlatBufferStruct sFrontHaulTxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-    XRANFlatBufferStruct sFrontHaulRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-    XRANFlatBufferStruct sFHPrachRxBuffers[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_MAX_ANTENNA_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-
-    XranTransportBlockCallbackFn pCallback[XRAN_MAX_SECTOR_NR];
-    void *pCallbackTag[XRAN_MAX_SECTOR_NR];
-
-    XranTransportBlockCallbackFn pPrachCallback[XRAN_MAX_SECTOR_NR];
-    void *pPrachCallbackTag[XRAN_MAX_SECTOR_NR];
-
-    XranSymCallbackFn pSymCallback[XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-    void *pSymCallbackTag[XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-
-    int32_t sym_up; /**< when we start sym 0 of up with respect to OTA time as measured in symbols */
-    int32_t sym_up_ul;
-
-    XRANFHTTIPROCCB ttiCb[XRAN_CB_MAX];
-    void *TtiCbParam[XRAN_CB_MAX];
-    uint32_t SkipTti[XRAN_CB_MAX];
-
-    int xran2phy_mem_ready;
-
-    int rx_packet_symb_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR][XRAN_NUM_OF_SYMBOL_PER_SLOT];
-    int rx_packet_callback_tracker[XRAN_N_FE_BUF_LEN][XRAN_MAX_SECTOR_NR];
-    int phy_tti_cb_done;
+/** Worker task function type */
+typedef int32_t (*worker_task_fn)(void*);
+
+/** worker thread context structure */
+struct xran_worker_th_ctx {
+    pthread_t      *pThread;
+
+    struct sched_param sched_param;
+    char      worker_name[32];
+    int32_t   worker_id;
+    uint64_t  worker_core_id;
+    int32_t   worker_policy;
+    int32_t   worker_status;
+
+    /* task */
+    worker_task_fn task_func;
+    void* task_arg;
 };
 
-extern const xRANPrachConfigTableStruct gxranPrachDataTable_sub6_fdd[XRAN_PRACH_CONFIG_TABLE_SIZE];
-extern const xRANPrachConfigTableStruct gxranPrachDataTable_sub6_tdd[XRAN_PRACH_CONFIG_TABLE_SIZE];
-extern const xRANPrachConfigTableStruct gxranPrachDataTable_mmw[XRAN_PRACH_CONFIG_TABLE_SIZE];
-extern const xRANPrachPreambleLRAStruct gxranPreambleforLRA[XRAN_PRACH_PREAMBLE_FORMAT_OF_ABC];
+struct xran_sectioninfo_db {
+    uint32_t    cur_index;  /**< Current index to store for this eAXC */
+    struct xran_section_info list[XRAN_MAX_NUM_SECTIONS]; /**< The array of section information */
+};
 
-int process_mbuf(struct rte_mbuf *pkt);
-int process_ring(struct rte_ring *r);
+int32_t xran_generic_worker_thread(void *args);
+
+int process_mbuf(struct rte_mbuf *pkt, void* handle, struct xran_eaxc_info *p_cid);
+int process_mbuf_batch(struct rte_mbuf* pkt[], void* handle, int16_t num, struct xran_eaxc_info *p_cid, uint32_t* ret);
+int process_ring(struct rte_ring *r,  uint16_t ring_id, uint16_t q_id);
 int ring_processing_thread(void *args);
 int packets_dump_thread(void *args);
-
-int send_symbol_ex(enum xran_pkt_dir direction,
+// Support for 1-way eCPRI delay measurement per section 3.2.4.6 of eCPRI Specification V2.0
+int32_t xran_ecpri_port_update_required(struct xran_io_cfg * cfg, uint16_t port_id);
+int xran_ecpri_one_way_delay_measurement_transmitter(uint16_t port_id, void* handle);
+int xran_generate_delay_meas(uint16_t port_id, void* handle, uint8_t actionType, uint8_t MeasurementID );
+int process_delay_meas(struct rte_mbuf *pkt,  void* handle, uint16_t port_id);
+int xran_process_delmeas_request(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+int xran_process_delmeas_request_w_fup(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+int xran_process_delmeas_response(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+int xran_process_delmeas_rem_request(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+int xran_process_delmeas_rem_request_w_fup(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+int xran_process_delmeas_follow_up(struct rte_mbuf *pkt, void* handle, struct xran_ecpri_del_meas_pkt*, uint16_t port_id);
+void xran_initialize_ecpri_del_meas_port(struct xran_ecpri_del_meas_cmn* pCmn, struct xran_ecpri_del_meas_port* pPort,uint16_t full_init);
+
+int send_symbol_mult_section_ex(void* handle,
+                enum xran_pkt_dir direction,
                 uint16_t section_id,
-                struct rb_map *data,
+                struct rte_mbuf *mb,
+                uint8_t *data,
+                uint8_t compMeth,
+                uint8_t iqWidth,
+                const enum xran_input_byte_order iq_buf_byte_order,
                 uint8_t frame_id,
                 uint8_t subframe_id,
                 uint8_t slot_id,
@@ -267,34 +164,96 @@ int send_symbol_ex(enum xran_pkt_dir direction,
                 uint8_t RU_Port_ID,
                 uint8_t seq_id);
 
-int send_cpmsg_dlul(void *pHandle, enum xran_pkt_dir dir,
-                uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id,
-                uint8_t startsym, uint8_t numsym, int prb_num,
-                uint16_t beam_id, uint8_t cc_id, uint8_t ru_port_id,
+int send_symbol_ex(void* handle,
+                enum xran_pkt_dir direction,
+                uint16_t section_id,
+                struct rte_mbuf *mb,
+                uint8_t *data,
+                uint8_t compMeth,
+                uint8_t iqWidth,
+                const enum xran_input_byte_order iq_buf_byte_order,
+                uint8_t frame_id,
+                uint8_t subframe_id,
+                uint8_t slot_id,
+                uint8_t symbol_no,
+                int prb_start,
+                int prb_num,
+                uint8_t CC_ID,
+                uint8_t RU_Port_ID,
                 uint8_t seq_id);
 
-int send_cpmsg_prach(void *pHandle,
-                uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id,
-                uint16_t beam_id, uint8_t cc_id, uint8_t prach_port_id,
-                uint8_t seq_id);
+int32_t prepare_symbol_ex(enum xran_pkt_dir direction,
+                uint16_t section_id,
+                struct rte_mbuf *mb,
+                uint8_t *data,
+                uint8_t     compMeth,
+                uint8_t     iqWidth,
+                const enum xran_input_byte_order iq_buf_byte_order,
+                uint8_t frame_id,
+                uint8_t subframe_id,
+                uint8_t slot_id,
+                uint8_t symbol_no,
+                int prb_start,
+                int prb_num,
+                uint8_t CC_ID,
+                uint8_t RU_Port_ID,
+                uint8_t seq_id,
+                uint32_t do_copy,
+                enum xran_comp_hdr_type staticEn,
+                uint16_t num_sections,
+                uint16_t iq_buffer_offset);
+int32_t prepare_sf_slot_sym (enum xran_pkt_dir direction,
+                uint8_t frame_id,
+                uint8_t subframe_id,
+                uint8_t slot_id,
+                uint8_t symbol_no,
+                struct xran_up_pkt_gen_params *xp);
+
+static inline int32_t prepare_symbol_opt(enum xran_pkt_dir direction,
+                uint16_t section_id,
+                struct rte_mbuf *mb,
+                struct rb_map *data,
+                uint8_t     compMeth,
+                uint8_t     iqWidth,
+                const enum xran_input_byte_order iq_buf_byte_order,
+                int prb_start,
+                int prb_num,
+                uint8_t CC_ID,
+                uint8_t RU_Port_ID,
+                uint8_t seq_id,
+                uint32_t do_copy,
+                struct xran_up_pkt_gen_params *xp,
+                enum xran_comp_hdr_type staticEn);
+
+
+int send_cpmsg(void *pHandle, struct rte_mbuf *mbuf,struct xran_cp_gen_params *params,
+                struct xran_section_gen_info *sect_geninfo, uint8_t cc_id, uint8_t ru_port_id, uint8_t seq_id);
 
-uint8_t xran_get_max_sections(void *pHandle);
+int32_t generate_cpmsg_dlul(void *pHandle, struct xran_cp_gen_params *params, struct xran_section_gen_info *sect_geninfo, struct rte_mbuf *mbuf,
+    enum xran_pkt_dir dir, uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id,
+    uint8_t startsym, uint8_t numsym, uint16_t prb_start, uint16_t prb_num,int16_t iq_buffer_offset, int16_t iq_buffer_len,
+    uint16_t beam_id, uint8_t cc_id, uint8_t ru_port_id, uint8_t comp_method, uint8_t iqWidth,  uint8_t seq_id, uint8_t symInc);
 
-XRANEAXCIDCONFIG *xran_get_conf_eAxC(void *pHandle);
-uint8_t xran_get_conf_prach_scs(void *pHandle);
-uint8_t xran_get_conf_fftsize(void *pHandle);
-uint8_t xran_get_conf_numerology(void *pHandle);
-uint8_t xran_get_conf_iqwidth(void *pHandle);
-uint8_t xran_get_conf_compmethod(void *pHandle);
+int generate_cpmsg_prach(void *pHandle, struct xran_cp_gen_params *params, struct xran_section_gen_info *sect_geninfo, struct rte_mbuf *mbuf, struct xran_device_ctx *pxran_lib_ctx,
+                uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id, int tti,
+                uint16_t beam_id, uint8_t cc_id, uint8_t prach_port_id, uint16_t occasionid, uint8_t seq_id);
 
-uint8_t xran_get_num_cc(void *pHandle);
-uint8_t xran_get_num_eAxc(void *pHandle);
-uint8_t xran_get_llscuid(void *pHandle);
-uint8_t xran_get_sectorid(void *pHandle);
-struct xran_lib_ctx *xran_lib_get_ctx(void);
+struct xran_eaxcid_config *xran_get_conf_eAxC(void *pHandle);
+int xran_register_cb_mbuf2ring(xran_ethdi_mbuf_send_fn mbuf_send_cp, xran_ethdi_mbuf_send_fn mbuf_send_up);
 
-uint16_t xran_alloc_sectionid(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ant_id, uint8_t slot_id);
+//uint16_t xran_alloc_sectionid(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ant_id, uint8_t slot_id);
 uint8_t xran_get_seqid(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ant_id, uint8_t slot_id);
+int32_t ring_processing_func(void* arg);
+int xran_init_prach(struct xran_fh_config* pConf, struct xran_device_ctx * p_xran_dev_ctx, enum xran_ran_tech xran_tech);
+void xran_updateSfnSecStart(void);
+uint32_t xran_slotid_convert(uint16_t slot_id, uint16_t dir);
+
+uint16_t xran_map_ecpriRtcid_to_vf(struct xran_device_ctx *p_dev_ctx,  int32_t dir, int32_t cc_id, int32_t ru_port_id);
+uint16_t xran_map_ecpriPcid_to_vf(struct xran_device_ctx *p_dev_ctx, int32_t dir, int32_t cc_id, int32_t ru_port_id);
+
+#ifdef __cplusplus
+}
+#endif
 
 #endif