#define XRAN_MAX_SECTIONDB_CTX 2
-#define XRAN_MAX_NUM_EXTENSIONS 4 /* Maximum number of extensions in a section */
-#define XRAN_MAX_NUM_UE 16 /* Maximum number of UE */
+#define XRAN_MAX_NUM_EXTENSIONS XRAN_MAX_PRBS /* Maximum number of extensions in a section [up to 1 ext section per RB]*/
+#define XRAN_MAX_NUM_UE 16 /* Maximum number of UEs/Lyaers */
#define XRAN_MAX_NUM_ANT_BF 64 /* Maximum number of beamforming antenna,
* could be defined as XRAN_MAX_ANTENNA_NR */
/* Maximum total number of beamforming weights (5.4.7.1.2) */
#define XRAN_MAX_BFW_N (XRAN_MAX_NUM_ANT_BF*XRAN_MAX_NUM_UE)
-#define XRAN_MAX_MODCOMP_ADDPARMS 2
+#define XRAN_MAX_MODCOMP_ADDPARMS 6 /* max should be even number */
#define XRAN_SECTIONEXT_ALIGN 4 /* alignment size in byte for section extension */
#define XRAN_LBTMODE_FULLSTOP 3
+#define XRAN_EF_F_LAST 0
+#define XRAN_EF_F_ANOTHER_ONE 1
+
/** Control Plane section extension commands, defined in 5.4.6 Table 5.13 */
enum xran_cp_sectionextcmd {
XRAN_CP_SECTIONEXTCMD_0 = 0, /**< Reserved, for future use */
XRAN_BFABITWIDTH_8BIT = 7, /**< the filed is 8-bit bitwidth */
};
+/** Layer ID for DL transmission in TM1-TM4 5.4.7.3.2 */
+#define XRAN_LAYERID_0 0 /**< Layer 0 */
+#define XRAN_LAYERID_1 1 /**< Layer 1 */
+#define XRAN_LAYERID_2 2 /**< Layer 2 */
+#define XRAN_LAYERID_3 3 /**< Layer 3 */
+#define XRAN_LAYERID_TXD 0xf /**< TxD */
+
+/** LTE Transmission Scheme for section extension type 3 5.4.7.3.3 */
+#define XRAN_TXS_SMUXCDD 0 /**< Spatial Multiplexing (CDD) */
+#define XRAN_TXS_SMUXNOCDD 1 /**< Spatial Multiplexing (no CDD) */
+#define XRAN_TXS_TXDIV 2 /**< Transmit diversity */
+
+
/**
* This structure contains the information to generate the section body of C-Plane message */
struct xran_section_info {
uint16_t startPrbc; /* X X X X X 10bits */
uint16_t numPrbc; /* X X X X X 8bits */ /* will be converted to zero if >255 */
uint8_t rb; /* X X X X X 1bit */
- uint8_t iqWidth; /* X X X 4bits */
uint8_t compMeth; /* X X X 4bits */
+ uint8_t iqWidth; /* X X X 4bits */
uint8_t ef; /* X X X X 1bit */
int32_t freqOffset; /* X 24bits */
uint16_t beamId; /* X X 15bits */
uint16_t ueId; /* X X 15bits */
uint16_t regFactor; /* X 16bits */
uint16_t pad0;
- };
+ /** for U-plane */
+ struct xran_section_desc sec_desc[XRAN_NUM_OF_SYMBOL_PER_SLOT];
+};
struct xran_sectionext1_info {
- uint16_t bfwNumber; /* number of bf weights in this section */
+ uint16_t rbNumber; /**< number RBs to ext1 chain */
+ uint16_t bfwNumber; /**< number of bf weights in this section */
uint8_t bfwiqWidth;
uint8_t bfwCompMeth;
- uint16_t bfwIQ[XRAN_MAX_BFW_N*2]; /* I/Q pair, max 4KB with 16bits, 16UE and 64ANT */
+ int16_t *p_bfwIQ; /**< pointer to formed section extention */
+ int16_t bfwIQ_sz; /**< size of buffer with section extention information */
union {
uint8_t exponent;
uint8_t blockScaler;
uint8_t bfZeSI;
};
-struct xran_sectionext3_info { /* NOT SUPPORTED */
+struct xran_sectionext3_info {
uint8_t codebookIdx;
uint8_t layerId;
uint8_t numLayers;
uint16_t crsReMask;
uint8_t crsShift;
uint8_t crsSymNum;
+ uint16_t numAntPort; /* number of antenna port - 2 or 4 */
uint16_t beamIdAP1;
uint16_t beamIdAP2;
uint16_t beamIdAP3;
uint8_t num_sets;
struct {
uint16_t csf;
-// uint16_t pad0;
uint16_t mcScaleReMask;
uint16_t mcScaleOffset;
} mc[XRAN_MAX_MODCOMP_ADDPARMS];
uint16_t cpLength; /* X X 16bits */
};
+/** The structure for the generation of section extension */
+struct xran_section_ext_gen_info {
+ uint16_t type; /**< the type of section extension */
+ uint16_t len; /**< length of extension data */
+ void *data; /**< pointer to extension data */
+ };
+
/**
* This structure to hold the information to generate the sections of C-Plane message */
struct xran_section_gen_info {
uint32_t exDataSize; /**< The number of Extensions or type 6/7 data */
/** the array to store section extension */
- struct {
- uint16_t type; /**< the type of section extension */
- uint16_t len; /**< length of extension data */
- void *data; /**< pointer to extension data */
- } exData[XRAN_MAX_NUM_EXTENSIONS];
- };
+ struct xran_section_ext_gen_info exData[XRAN_MAX_NUM_EXTENSIONS];
+
+ struct xran_sectionext1_info m_ext1[XRAN_MAX_NUM_EXTENSIONS];
+ struct xran_sectionext2_info m_ext2[XRAN_MAX_NUM_EXTENSIONS];
+ struct xran_sectionext3_info m_ext3[XRAN_MAX_NUM_EXTENSIONS];
+ struct xran_sectionext4_info m_ext4[XRAN_MAX_NUM_EXTENSIONS];
+ struct xran_sectionext5_info m_ext5[XRAN_MAX_NUM_EXTENSIONS];
+};
+
/**
* This structure to hold the information to generate a C-Plane message */
uint16_t rb_start; /**< Start RB position */
uint16_t rb_num; /**< Number of RBs */
+ int16_t iq_buff_offset; /**< Offset within Sym for start of IQs */
+ int16_t iq_buff_len; /**< length IQs */
+
uint16_t beam_id; /**< Bean Index */
+ uint8_t iqWidth; /**< I and Q width in bits */
uint8_t comp_meth; /**< Compression method */
uint8_t pad0;
};
uint16_t xran_get_cplength(int cpLength);
int32_t xran_get_freqoffset(int freqOffset, int scs);
-int xran_prepare_ctrl_pkt(struct rte_mbuf *mbuf,
+int32_t xran_prepare_ctrl_pkt(struct rte_mbuf *mbuf,
struct xran_cp_gen_params *params,
uint8_t CC_ID, uint8_t Ant_ID,
uint8_t seq_id);
-int xran_parse_cp_pkt(struct rte_mbuf *mbuf,
+int32_t xran_parse_cp_pkt(struct rte_mbuf *mbuf,
struct xran_cp_gen_params *result,
struct xran_recv_packet_info *pkt_info);
-int xran_cp_init_sectiondb(void *pHandle);
-int xran_cp_free_sectiondb(void *pHandle);
-int xran_cp_add_section_info(void *pHandle,
+int32_t xran_cp_init_sectiondb(void *pHandle);
+int32_t xran_cp_free_sectiondb(void *pHandle);
+int32_t xran_cp_add_section_info(void *pHandle,
uint8_t dir, uint8_t cc_id, uint8_t ruport_id,
uint8_t ctx_id, struct xran_section_info *info);
-int xran_cp_add_multisection_info(void *pHandle,
+int32_t xran_cp_add_multisection_info(void *pHandle,
uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id,
struct xran_cp_gen_params *gen_info);
struct xran_section_info *xran_cp_find_section_info(void *pHandle,
struct xran_section_info *xran_cp_iterate_section_info(void *pHandle,
uint8_t dir, uint8_t cc_id, uint8_t ruport_id,
uint8_t ctx_id, uint32_t *next);
+
int xran_cp_getsize_section_info(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id);
int xran_cp_reset_section_info(void *pHandle, uint8_t dir, uint8_t cc_id, uint8_t ruport_id, uint8_t ctx_id);
+int32_t xran_cp_populate_section_ext_1(int8_t *p_ext1_dst, /**< destination buffer */
+ uint16_t ext1_dst_len, /**< dest buffer size */
+ int16_t *p_bfw_iq_src, /**< source buffer of IQs */
+ uint16_t rbNumber, /**< number RBs to ext1 chain */
+ uint16_t bfwNumber, /**< number of bf weights in this set of sections */
+ uint8_t bfwiqWidth, /**< bit size of IQs */
+ uint8_t bfwCompMeth); /**< compression method */
+struct rte_mbuf *xran_attach_cp_ext_buf(int8_t* p_ext_buff_start, int8_t* p_ext_buff, uint16_t ext_buff_len,
+ struct rte_mbuf_ext_shared_info * p_share_data);
#ifdef __cplusplus
}