gNB_scheduler_phytest.c 13.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/*
 * 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.0  (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
 */

/*! \file gNB_scheduler_phytest.c
 * \brief gNB scheduling procedures in phy_test mode
 * \author  Guy De Souza
 * \date 07/2018
 * \email: desouza@eurecom.fr
 * \version 1.0
 * @ingroup _mac
 */

#include "nr_mac_gNB.h"
Guy De Souza's avatar
Guy De Souza committed
32
#include "SCHED_NR/sched_nr.h"
33
#include "mac_proto.h"
Guy De Souza's avatar
Guy De Souza committed
34 35
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
#include "PHY/NR_TRANSPORT/nr_dci.h"
36 37 38 39

extern RAN_CONTEXT_t RC;

/*Scheduling of DLSCH with associated DCI in common search space
Guy De Souza's avatar
Guy De Souza committed
40
 * current version has only a DCI for type 1 PDCCH for C_RNTI*/
41 42
void nr_schedule_css_dlsch_phytest(module_id_t   module_idP,
                                   frame_t       frameP,
43
                                   sub_frame_t   slotP)
44 45 46
{
  uint8_t  CC_id;

Guy De Souza's avatar
Guy De Souza committed
47
  gNB_MAC_INST                        *nr_mac      = RC.nrmac[module_idP];
yilmazt's avatar
yilmazt committed
48
  //NR_COMMON_channels_t                *cc           = nr_mac->common_channels;
49
  nfapi_nr_dl_config_request_body_t   *dl_req;
Guy De Souza's avatar
Guy De Souza committed
50 51
  nfapi_nr_dl_config_request_pdu_t  *dl_config_dci_pdu;
  nfapi_nr_dl_config_request_pdu_t  *dl_config_dlsch_pdu;
Guy De Souza's avatar
Guy De Souza committed
52
  nfapi_tx_request_pdu_t            *TX_req;
53

Raymond Knopp's avatar
Raymond Knopp committed
54
  nfapi_nr_config_request_t *cfg = &nr_mac->config[0];
Guy De Souza's avatar
Guy De Souza committed
55
  uint16_t rnti = 0x1234;
Raymond Knopp's avatar
Raymond Knopp committed
56

57
  uint16_t sfn_sf = frameP << 7 | slotP;
Raymond Knopp's avatar
Raymond Knopp committed
58
  int dl_carrier_bandwidth = cfg->rf_config.dl_carrier_bandwidth.value;
59

Raymond Knopp's avatar
Raymond Knopp committed
60
  // everything here is hard-coded to 30 kHz
61 62
  int scs = get_dlscs(cfg);
  int slots_per_frame = get_spf(cfg);
63
  for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
Raymond Knopp's avatar
Raymond Knopp committed
64
    LOG_D(MAC, "Scheduling common search space DCI type 1 for CC_id %d\n",CC_id);
65

Raymond Knopp's avatar
Raymond Knopp committed
66

Guy De Souza's avatar
Guy De Souza committed
67
    dl_req = &nr_mac->DL_req[CC_id].dl_config_request_body;
Guy De Souza's avatar
Guy De Souza committed
68 69 70 71
    dl_config_dci_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
    memset((void*)dl_config_dci_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
    dl_config_dci_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DCI_DL_PDU_TYPE;
    dl_config_dci_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dci_dl_pdu));
72

Guy De Souza's avatar
Guy De Souza committed
73 74 75 76 77 78 79 80
    dl_config_dlsch_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu+1];
    memset((void*)dl_config_dlsch_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
    dl_config_dlsch_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DLSCH_PDU_TYPE;
    dl_config_dlsch_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dlsch_pdu));

    nfapi_nr_dl_config_dci_dl_pdu_rel15_t *pdu_rel15 = &dl_config_dci_pdu->dci_dl_pdu.dci_dl_pdu_rel15;
    nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &dl_config_dci_pdu->dci_dl_pdu.pdcch_params_rel15;
    nfapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu_rel15 = &dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15;
Guy De Souza's avatar
Guy De Souza committed
81 82

    dlsch_pdu_rel15->start_prb = 0;
Guy De Souza's avatar
Guy De Souza committed
83
    dlsch_pdu_rel15->n_prb = 50;
84
    dlsch_pdu_rel15->start_symbol = 2;
Hongzhi's avatar
Hongzhi committed
85
    dlsch_pdu_rel15->nb_symbols = 8;
Guy De Souza's avatar
Guy De Souza committed
86
    dlsch_pdu_rel15->rnti = rnti;
Guy De Souza's avatar
Guy De Souza committed
87 88
    dlsch_pdu_rel15->nb_layers =1;
    dlsch_pdu_rel15->nb_codewords = 1;
Guy De Souza's avatar
Guy De Souza committed
89
    dlsch_pdu_rel15->mcs_idx = 9;
Guy De Souza's avatar
Guy De Souza committed
90 91
    dlsch_pdu_rel15->ndi = 1;
    dlsch_pdu_rel15->redundancy_version = 0;
Guy De Souza's avatar
Guy De Souza committed
92

93

94
    nr_configure_css_dci_initial(params_rel15,
95 96
				 scs, scs, nr_FR1, 0, 0, 0,
         sfn_sf, slotP,
97 98
				 slots_per_frame,
				 dl_carrier_bandwidth);
99

100 101
    params_rel15->first_slot = 0;

Guy De Souza's avatar
Guy De Souza committed
102
    pdu_rel15->frequency_domain_assignment = get_RIV(dlsch_pdu_rel15->start_prb, dlsch_pdu_rel15->n_prb, cfg->rf_config.dl_carrier_bandwidth.value);
Guy De Souza's avatar
Guy De Souza committed
103
    pdu_rel15->time_domain_assignment = 3; // row index used here instead of SLIV
104
    pdu_rel15->vrb_to_prb_mapping = 1;
Guy De Souza's avatar
Guy De Souza committed
105
    pdu_rel15->mcs = 9;
106
    pdu_rel15->tb_scaling = 1;
107 108 109 110
    
    pdu_rel15->ra_preamble_index = 25;
    pdu_rel15->format_indicator = 1;
    pdu_rel15->ndi = 1;
Guy De Souza's avatar
Guy De Souza committed
111 112
    pdu_rel15->rv = 0;
    pdu_rel15->harq_pid = 0;
113 114 115 116 117
    pdu_rel15->dai = 2;
    pdu_rel15->tpc = 2;
    pdu_rel15->pucch_resource_indicator = 7;
    pdu_rel15->pdsch_to_harq_feedback_timing_indicator = 7;

Raymond Knopp's avatar
Raymond Knopp committed
118
    LOG_D(MAC, "[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d, time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
Guy De Souza's avatar
Guy De Souza committed
119 120
                pdu_rel15->frequency_domain_assignment,
                pdu_rel15->time_domain_assignment,
121
                pdu_rel15->vrb_to_prb_mapping,
Guy De Souza's avatar
Guy De Souza committed
122
                pdu_rel15->mcs,
Guy De Souza's avatar
Guy De Souza committed
123 124 125
                pdu_rel15->tb_scaling,
                pdu_rel15->ndi,
                pdu_rel15->rv);
126

Guy De Souza's avatar
Guy De Souza committed
127
    params_rel15->rnti = rnti;
128
    params_rel15->rnti_type = NFAPI_NR_RNTI_C;
129
    params_rel15->dci_format = NFAPI_NR_DL_DCI_FORMAT_1_0;
Guy De Souza's avatar
Guy De Souza committed
130
    //params_rel15->aggregation_level = 1;
Hongzhi's avatar
Hongzhi committed
131
    LOG_D(MAC, "DCI type 1 params: rmsi_pdcch_config %d, rnti %d, rnti_type %d, dci_format %d\n \
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
                coreset params: mux_pattern %d, n_rb %d, n_symb %d, rb_offset %d  \n \
                ss params : nb_ss_sets_per_slot %d, first symb %d, nb_slots %d, sfn_mod2 %d, first slot %d\n",
                0,
                params_rel15->rnti,
                params_rel15->rnti_type,
                params_rel15->dci_format,
                params_rel15->mux_pattern,
                params_rel15->n_rb,
                params_rel15->n_symb,
                params_rel15->rb_offset,
                params_rel15->nb_ss_sets_per_slot,
                params_rel15->first_symbol,
                params_rel15->nb_slots,
                params_rel15->sfn_mod2,
                params_rel15->first_slot);
Guy De Souza's avatar
Guy De Souza committed
147
  nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
Raymond Knopp's avatar
Raymond Knopp committed
148
  LOG_D(MAC, "DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d\n",
Guy De Souza's avatar
Guy De Souza committed
149 150 151 152
  dlsch_pdu_rel15->start_prb,
  dlsch_pdu_rel15->n_prb,
  dlsch_pdu_rel15->start_symbol,
  dlsch_pdu_rel15->nb_symbols,
153
  dlsch_pdu_rel15->nb_layers,
Guy De Souza's avatar
Guy De Souza committed
154
  dlsch_pdu_rel15->nb_codewords,
155
  dlsch_pdu_rel15->mcs_idx);
Guy De Souza's avatar
Guy De Souza committed
156

Guy De Souza's avatar
Guy De Souza committed
157
  dl_req->number_dci++;
Guy De Souza's avatar
Guy De Souza committed
158 159
  dl_req->number_pdsch_rnti++;
  dl_req->number_pdu+=2;
Guy De Souza's avatar
Guy De Souza committed
160 161 162 163 164 165

  TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus];
  TX_req->pdu_length = 6;
  TX_req->pdu_index = nr_mac->pdu_index[CC_id]++;
  TX_req->num_segments = 1;
  TX_req->segments[0].segment_length = 8;
Guy De Souza's avatar
Guy De Souza committed
166 167 168 169 170 171 172 173 174 175
  nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
  nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
  nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
  nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;

  TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus+1];
  TX_req->pdu_length = dlsch_pdu_rel15->transport_block_size;
  TX_req->pdu_index = nr_mac->pdu_index[CC_id]++;
  TX_req->num_segments = 1;
  TX_req->segments[0].segment_length = 8;
Guy De Souza's avatar
Guy De Souza committed
176 177 178 179
  nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
  nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
  nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
  nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
180 181 182
    
  }
}
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208

/*Scheduling of DLSCH with associated DCI in user specific search space
 * current version has only a DCI for type 1 PDCCH for C_RNTI*/
void nr_schedule_uss_dlsch_phytest(module_id_t   module_idP,
                                   frame_t       frameP,
                                   sub_frame_t   slotP)
{
  uint8_t  CC_id;

  gNB_MAC_INST                        *nr_mac      = RC.nrmac[module_idP];
  //NR_COMMON_channels_t                *cc           = nr_mac->common_channels;
  nfapi_nr_dl_config_request_body_t   *dl_req;
  nfapi_nr_dl_config_request_pdu_t  *dl_config_dci_pdu;
  nfapi_nr_dl_config_request_pdu_t  *dl_config_dlsch_pdu;
  nfapi_tx_request_pdu_t            *TX_req;

  nfapi_nr_config_request_t *cfg = &nr_mac->config[0];
  uint16_t rnti = 0x1234;

  uint16_t sfn_sf = frameP << 7 | slotP;
  int dl_carrier_bandwidth = cfg->rf_config.dl_carrier_bandwidth.value;

  // everything here is hard-coded to 30 kHz
  int scs = get_dlscs(cfg);
  int slots_per_frame = get_spf(cfg);
  for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
Raymond Knopp's avatar
Raymond Knopp committed
209
    LOG_D(MAC, "Scheduling UE specific search space DCI type 1 for CC_id %d\n",CC_id);
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231

    nfapi_nr_coreset_t* coreset = &nr_mac->coreset[CC_id][1];
    nfapi_nr_search_space_t* search_space = &nr_mac->search_space[CC_id][1];

    dl_req = &nr_mac->DL_req[CC_id].dl_config_request_body;
    dl_config_dci_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
    memset((void*)dl_config_dci_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
    dl_config_dci_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DCI_DL_PDU_TYPE;
    dl_config_dci_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dci_dl_pdu));

    dl_config_dlsch_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu+1];
    memset((void*)dl_config_dlsch_pdu,0,sizeof(nfapi_nr_dl_config_request_pdu_t));
    dl_config_dlsch_pdu->pdu_type = NFAPI_NR_DL_CONFIG_DLSCH_PDU_TYPE;
    dl_config_dlsch_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_nr_dl_config_dlsch_pdu));

    nfapi_nr_dl_config_dci_dl_pdu_rel15_t *pdu_rel15 = &dl_config_dci_pdu->dci_dl_pdu.dci_dl_pdu_rel15;
    nfapi_nr_dl_config_pdcch_parameters_rel15_t *params_rel15 = &dl_config_dci_pdu->dci_dl_pdu.pdcch_params_rel15;
    nfapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_pdu_rel15 = &dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15;

    dlsch_pdu_rel15->start_prb = 0;
    dlsch_pdu_rel15->n_prb = 50;
    dlsch_pdu_rel15->start_symbol = 2;
Guy De Souza's avatar
Guy De Souza committed
232
    dlsch_pdu_rel15->nb_symbols = 9;
233 234 235 236 237 238 239 240 241 242
    dlsch_pdu_rel15->rnti = rnti;
    dlsch_pdu_rel15->nb_layers =1;
    dlsch_pdu_rel15->nb_codewords = 1;
    dlsch_pdu_rel15->mcs_idx = 9;
    dlsch_pdu_rel15->ndi = 1;
    dlsch_pdu_rel15->redundancy_version = 0;

    nr_configure_dci_from_pdcch_config(params_rel15,
                                       coreset,
                                       search_space,
Guy De Souza's avatar
Guy De Souza committed
243 244
                                       *cfg,
                                       dl_carrier_bandwidth);
245 246

    pdu_rel15->frequency_domain_assignment = get_RIV(dlsch_pdu_rel15->start_prb, dlsch_pdu_rel15->n_prb, cfg->rf_config.dl_carrier_bandwidth.value);
Guy De Souza's avatar
Guy De Souza committed
247
    pdu_rel15->time_domain_assignment = 3; // row index used here instead of SLIV;
248 249 250 251 252 253 254 255 256 257 258 259 260 261
    pdu_rel15->vrb_to_prb_mapping = 1;
    pdu_rel15->mcs = 9;
    pdu_rel15->tb_scaling = 1;

    pdu_rel15->ra_preamble_index = 25;
    pdu_rel15->format_indicator = 1;
    pdu_rel15->ndi = 1;
    pdu_rel15->rv = 0;
    pdu_rel15->harq_pid = 0;
    pdu_rel15->dai = 2;
    pdu_rel15->tpc = 2;
    pdu_rel15->pucch_resource_indicator = 7;
    pdu_rel15->pdsch_to_harq_feedback_timing_indicator = 7;

Raymond Knopp's avatar
Raymond Knopp committed
262
    LOG_D(MAC, "[gNB scheduler phytest] DCI type 1 payload: freq_alloc %d, time_alloc %d, vrb to prb %d, mcs %d tb_scaling %d ndi %d rv %d\n",
263 264 265 266 267 268 269 270 271 272 273
                pdu_rel15->frequency_domain_assignment,
                pdu_rel15->time_domain_assignment,
                pdu_rel15->vrb_to_prb_mapping,
                pdu_rel15->mcs,
                pdu_rel15->tb_scaling,
                pdu_rel15->ndi,
                pdu_rel15->rv);

    params_rel15->rnti = rnti;
    params_rel15->rnti_type = NFAPI_NR_RNTI_C;
    params_rel15->dci_format = NFAPI_NR_DL_DCI_FORMAT_1_0;
Guy De Souza's avatar
Guy De Souza committed
274

275
    //params_rel15->aggregation_level = 1;
Raymond Knopp's avatar
Raymond Knopp committed
276
    LOG_D(MAC, "DCI params: rnti %d, rnti_type %d, dci_format %d, config type %d\n \
277
                coreset params: mux_pattern %d, n_rb %d, n_symb %d, rb_offset %d  \n \
278
                ss params : first symb %d, ss type %d\n",
279 280
                params_rel15->rnti,
                params_rel15->rnti_type,
Guy De Souza's avatar
Guy De Souza committed
281
                params_rel15->config_type,
282 283 284 285 286 287
                params_rel15->dci_format,
                params_rel15->mux_pattern,
                params_rel15->n_rb,
                params_rel15->n_symb,
                params_rel15->rb_offset,
                params_rel15->first_symbol,
288
                params_rel15->search_space_type);
289
  nr_get_tbs(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
Raymond Knopp's avatar
Raymond Knopp committed
290
  LOG_D(MAC, "DLSCH PDU: start PRB %d n_PRB %d start symbol %d nb_symbols %d nb_layers %d nb_codewords %d mcs %d\n",
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
  dlsch_pdu_rel15->start_prb,
  dlsch_pdu_rel15->n_prb,
  dlsch_pdu_rel15->start_symbol,
  dlsch_pdu_rel15->nb_symbols,
  dlsch_pdu_rel15->nb_layers,
  dlsch_pdu_rel15->nb_codewords,
  dlsch_pdu_rel15->mcs_idx);

  dl_req->number_dci++;
  dl_req->number_pdsch_rnti++;
  dl_req->number_pdu+=2;

  TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus];
  TX_req->pdu_length = 6;
  TX_req->pdu_index = nr_mac->pdu_index[CC_id]++;
  TX_req->num_segments = 1;
  TX_req->segments[0].segment_length = 8;
  nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
  nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
  nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
  nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;

  TX_req = &nr_mac->TX_req[CC_id].tx_request_body.tx_pdu_list[nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus+1];
  TX_req->pdu_length = dlsch_pdu_rel15->transport_block_size;
  TX_req->pdu_index = nr_mac->pdu_index[CC_id]++;
  TX_req->num_segments = 1;
  TX_req->segments[0].segment_length = 8;
  nr_mac->TX_req[CC_id].tx_request_body.number_of_pdus++;
  nr_mac->TX_req[CC_id].sfn_sf = sfn_sf;
  nr_mac->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
  nr_mac->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;

  }
}