bedcce02e3ab2964003f695094300b18e27dec7e
[o-du/phy.git] / fhi_lib / lib / api / xran_up_api.h
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
19 /**
20  * @brief This file provides the definitions for User Plane Messages APIs.
21  *
22  * @file xran_up_api.h
23  * @ingroup group_lte_source_xran
24  * @author Intel Corporation
25  *
26  **/
27
28 #ifndef _XRAN_UP_API_H_
29 #define _XRAN_UP_API_H_
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 #include <rte_common.h>
36 #include <rte_mbuf.h>
37
38 #include "xran_pkt.h"
39 #include "xran_pkt_up.h"
40
41 /*
42  * structure used for storing packet parameters needed for generating
43  * a data packet
44  */
45 struct xran_up_pkt_gen_params
46 {
47     struct radio_app_common_hdr app_params;
48     struct data_section_hdr sec_hdr;
49     struct data_section_compression_hdr compr_hdr_param;
50     union compression_params compr_param;
51 };
52
53 /*
54  * structure used for storing packet parameters needed for generating
55  * a data packet without compression
56  *   Next fields are omitted:
57  *        udCompHdr (not always present)
58  *        reserved (not always present)
59  *        udCompParam (not always present)
60  */
61 struct xran_up_pkt_gen_no_compression_params
62 {
63     struct radio_app_common_hdr app_params;
64     struct data_section_hdr sec_hdr;
65 };
66
67
68 /**
69  * @brief Function that is preparing an mbuf with portion of IQ samples related
70  *        to the single symbol.
71  *
72  * @param mbuf Initialized rte_mbuf packet
73  * @param iq_data_start Address of the first element in IQ data array.
74  * @param iq_data_num_elements Size of the IQ data array.
75  * @param iq_data_offset IQ data array's elements already sent.
76  * @param alignment Align data to this many bytes.
77  * @param params Structure containing Radio App Header and Data Section Header
78  *               structures.
79  * @return int Bytes of IQ samples that have been appended to the packet.
80  */
81 int xran_prepare_iq_symbol_portion(
82     struct rte_mbuf *mbuf,
83     const void *iq_data_start,
84     const uint32_t iq_data_num_bytes,
85     uint32_t *iq_data_offset,
86     const uint8_t alignment,
87     struct xran_up_pkt_gen_params *params,
88     int sub_seq_id);
89
90 /**
91  * @brief Function extracts IQ samples from received mbuf packet.
92  *
93  * @param mbuf Packet with received data.
94  * @param iq_data_start Address of the first IQ sample in mbuf will be returned
95  *                      here
96  * @return int Bytes of IQ samples that have been extracted from mbuf.
97  */
98 int xran_extract_iq_samples(struct rte_mbuf *mbuf,
99     void **iq_data_start,
100     uint8_t *CC_ID,
101     uint8_t *Ant_ID,
102     uint8_t *frame_id,
103     uint8_t *subframe_id,
104     uint8_t *slot_id,
105     uint8_t *symb_id,
106     struct ecpri_seq_id *seq_id,
107     uint16_t *num_prbu,
108     uint16_t *start_prbu,
109     uint16_t *sym_inc,
110     uint16_t *rb,
111     uint16_t *sect_id);
112
113 int xran_prepare_iq_symbol_portion_no_comp(
114                         struct rte_mbuf *mbuf,
115                         const void *iq_data_start,
116                         const enum xran_input_byte_order iq_buf_byte_order,
117                         const uint32_t iq_data_num_bytes,
118                         struct xran_up_pkt_gen_no_compression_params *params,
119                         uint8_t CC_ID,
120                         uint8_t Ant_ID,
121                         uint8_t seq_id,
122                         uint32_t do_copy);
123
124 #ifdef __cplusplus
125 }
126 #endif
127
128 #endif /* _XRAN_UP_API_H_ */