nr_mac_gNB.h 6.79 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
22
/*! \file mac.h
23
* \brief MAC data structures, constant, and function prototype
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
24 25
* \author Navid Nikaein and Raymond Knopp, WIE-TAI CHEN
* \date 2011, 2018
26
* \version 0.5
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
27 28
* \company Eurecom, NTUST
* \email navid.nikaein@eurecom.fr, kroempa@gmail.com
29 30 31 32 33 34 35 36 37

*/
/** @defgroup _oai2  openair2 Reference Implementation
 * @ingroup _ref_implementation_
 * @{
 */

/*@}*/

38 39
#ifndef __LAYER2_NR_MAC_GNB_H__
#define __LAYER2_NR_MAC_GNB_H__
40 41 42 43 44 45

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "NR_BCCH-BCH-Message.h"
46
#include "NR_CellGroupConfig.h"
47
#include "NR_ServingCellConfigCommon.h"
48
#include "NR_MeasConfig.h"
49 50

#include "nfapi_nr_interface.h"
51
#include "NR_PHY_INTERFACE/NR_IF_Module.h"
52

53 54
#include "COMMON/platform_constants.h"
#include "common/ran_context.h"
Guy De Souza's avatar
Guy De Souza committed
55 56 57
#include "LAYER2/MAC/mac.h"
#include "LAYER2/MAC/mac_proto.h"
#include "LAYER2/MAC/mac_extern.h"
58 59 60 61
#include "PHY/defs_gNB.h"
#include "PHY/TOOLS/time_meas.h"
#include "targets/ARCH/COMMON/common_lib.h"

62

63
/*! \brief gNB common channels */
64
typedef struct {
Raymond Knopp's avatar
Raymond Knopp committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
  int physCellId;
  int p_gNB;
  int Ncp;
  int nr_band;
  uint32_t dl_CarrierFreq;
  NR_BCCH_BCH_Message_t *mib;
  NR_ServingCellConfigCommon_t *ServingCellConfigCommon;
  NR_TDD_UL_DL_ConfigCommon_t *tdd_Config;
  NR_ARFCN_ValueEUTRA_t ul_CarrierFreq;
  long ul_Bandwidth;
  /// Outgoing MIB PDU for PHY
  MIB_PDU MIB_pdu;
  /// Outgoing BCCH pdu for PHY
  BCCH_PDU BCCH_pdu;
  /// Outgoing BCCH DCI allocation
  uint32_t BCCH_alloc_pdu;
  /// Outgoing CCCH pdu for PHY
  CCCH_PDU CCCH_pdu;
  /// Outgoing PCCH DCI allocation
  uint32_t PCCH_alloc_pdu;
  /// Outgoing PCCH pdu for PHY
  PCCH_PDU PCCH_pdu;
  /// Outgoing RAR pdu for PHY
  RAR_PDU RAR_pdu;
  /// Template for RA computations
  RA_t ra[NB_RA_PROC_MAX];
  /// VRB map for common channels
  uint8_t vrb_map[100];
  /// VRB map for common channels and retransmissions by PHICH
  uint8_t vrb_map_UL[100];
  /// number of subframe allocation pattern available for MBSFN sync area
  uint8_t num_sf_allocation_pattern;
97 98
} NR_COMMON_channels_t;

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
/*! \brief scheduling control information set through an API (not used)*/
typedef struct {
  int dummy;
} NR_UE_sched_ctrl_t;

/*! \brief UE list used by eNB to order UEs/CC for scheduling*/
typedef struct {

  DLSCH_PDU DLSCH_pdu[4][MAX_MOBILES_PER_GNB];
  /// scheduling control info
  NR_UE_sched_ctrl_t UE_sched_ctrl[MAX_MOBILES_PER_GNB];
  int next[MAX_MOBILES_PER_GNB];
  int head;
  int next_ul[MAX_MOBILES_PER_GNB];
  int head_ul;
  int avail;
  int num_UEs;
  boolean_t active[MAX_MOBILES_PER_GNB];
  rnti_t rnti[MAX_MOBILES_PER_GNB];
  NR_CellGroupConfig_t *secondaryCellGroup[MAX_MOBILES_PER_GNB];
119 120 121 122 123 124
  /// NFAPI coreset structure
  nfapi_nr_coreset_t   coreset[MAX_MOBILES_PER_GNB][NFAPI_NR_MAX_NB_CORESETS];
  /// NFAPI search space structure
  nfapi_nr_search_space_t search_space[MAX_MOBILES_PER_GNB][NFAPI_NR_MAX_NB_SEARCH_SPACES];


125 126
} NR_UE_list_t;

127 128 129 130 131 132 133 134 135 136
/*! \brief top level eNB MAC structure */
typedef struct gNB_MAC_INST_s {
  /// Ethernet parameters for northbound midhaul interface
  eth_params_t                    eth_params_n;
  /// Ethernet parameters for fronthaul interface
  eth_params_t                    eth_params_s;
  /// Module
  module_id_t                     Mod_id;
  /// frame counter
  frame_t                         frame;
137 138
  /// slot counter
  int                             slot;  
139 140
  /// Pointer to IF module instance for PHY
  NR_IF_Module_t                  *if_inst;
141 142 143 144 145
    /// Common cell resources
  NR_COMMON_channels_t common_channels[NFAPI_CC_MAX];
  /// current PDU index (BCH,DLSCH)
  uint16_t pdu_index[NFAPI_CC_MAX];

146
  /// NFAPI Config Request Structure
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
147
  nfapi_nr_config_request_t         config[NFAPI_CC_MAX];
148
  /// NFAPI DL Config Request Structure
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
149
  nfapi_nr_dl_config_request_t      DL_req[NFAPI_CC_MAX];
150
  /// NFAPI UL Config Request Structure, send to L1 4 subframes before processing takes place
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
151
  nfapi_ul_config_request_t         UL_req[NFAPI_CC_MAX];
152
  /// Preallocated DL pdu list
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
153
  nfapi_nr_dl_config_request_pdu_t  dl_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_DL_PDU];
154
  /// Preallocated UL pdu list
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
155
  nfapi_ul_config_request_pdu_t     ul_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_UL_PDU];
156
  /// Preallocated UL pdu list for ULSCH (n+k delay)
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
157
  nfapi_ul_config_request_pdu_t     ul_config_pdu_list_tmp[NFAPI_CC_MAX][10][MAX_NUM_UL_PDU];
158
  /// NFAPI "Temporary" UL Config Request Structure, holds future UL_config requests
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
159
  nfapi_ul_config_request_t         UL_req_tmp[NFAPI_CC_MAX][10];
160
  /// Preallocated HI_DCI0 pdu list
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
161
  nfapi_hi_dci0_request_pdu_t       hi_dci0_pdu_list[NFAPI_CC_MAX][MAX_NUM_HI_DCI0_PDU];
162
  /// NFAPI HI/DCI0 Config Request Structure
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
163
  nfapi_hi_dci0_request_t           HI_DCI0_req[NFAPI_CC_MAX];
164
  /// Prealocated TX pdu list
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
165
  nfapi_tx_request_pdu_t            tx_request_pdu[NFAPI_CC_MAX][MAX_NUM_TX_REQUEST_PDU];
166
  /// NFAPI DL PDU structure
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
167
  nfapi_tx_request_t                TX_req[NFAPI_CC_MAX];
168
  NR_UE_list_t UE_list;
169

170 171 172
  /// UL handle
  uint32_t ul_handle;

173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
    // MAC function execution peformance profiler
  /// processing time of eNB scheduler
  time_stats_t eNB_scheduler;
  /// processing time of eNB scheduler for SI
  time_stats_t schedule_si;
  /// processing time of eNB scheduler for Random access
  time_stats_t schedule_ra;
  /// processing time of eNB ULSCH scheduler
  time_stats_t schedule_ulsch;
  /// processing time of eNB DCI generation
  time_stats_t fill_DLSCH_dci;
  /// processing time of eNB MAC preprocessor
  time_stats_t schedule_dlsch_preprocessor;
  /// processing time of eNB DLSCH scheduler
  time_stats_t schedule_dlsch;  // include rlc_data_req + MAC header + preprocessor
  /// processing time of eNB MCH scheduler
  time_stats_t schedule_mch;
  /// processing time of eNB ULSCH reception
  time_stats_t rx_ulsch_sdu;  // include rlc_data_ind
  /// processing time of eNB PCH scheduler
  time_stats_t schedule_pch;
194 195
} gNB_MAC_INST;

196
#endif /*__LAYER2_NR_MAC_GNB_H__ */