diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h deleted file mode 100644 index c91f6bd6f727131053f64f691eed97c15b4110c0..0000000000000000000000000000000000000000 --- a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_interface_nr_extension.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2017 Cisco Systems, Inc. - * - * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 - * - * 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. - */ - - -#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_ -#define _NFAPI_INTERFACE_NR_EXTENSION_H_ - -#include "stddef.h" -#include "nfapi_interface.h" - - - -#endif /* _NFAPI_INTERFACE_NR_EXTENSION_H_ */ diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h new file mode 100644 index 0000000000000000000000000000000000000000..83b4d5838619ddccc0c0489058a64b9a7c36e67e --- /dev/null +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h @@ -0,0 +1,273 @@ +#ifndef _NFAPI_INTERFACE_NR_H_ +#define _NFAPI_INTERFACE_NR_H_ + +#include "nfapi_interface.h" + +//These TLVs are used exclusively by nFAPI +typedef struct +{ + // These TLVs are used to setup the transport connection between VNF and PNF + // nfapi_ipv4_address_t p7_vnf_address_ipv4; + // nfapi_ipv6_address_t p7_vnf_address_ipv6; + // nfapi_uint16_tlv_t p7_vnf_port; + + // nfapi_ipv4_address_t p7_pnf_address_ipv4; + // nfapi_ipv6_address_t p7_pnf_address_ipv6; + // nfapi_uint16_tlv_t p7_pnf_port; + + // // These TLVs are used to setup the transport connection between VNF and PNF + // nfapi_uint8_tlv_t dl_ue_per_sf; + // nfapi_uint8_tlv_t ul_ue_per_sf; + + // These TLVs are used by PNF to report its RF capabilities to the VNF software + nfapi_rf_bands_t rf_bands; + + // These TLVs are used by the VNF to configure the synchronization with the PNF. + // nfapi_uint8_tlv_t timing_window; + // nfapi_uint8_tlv_t timing_info_mode; + // nfapi_uint8_tlv_t timing_info_period; + + // These TLVs are used by the VNF to configure the RF in the PNF + // nfapi_uint16_tlv_t max_transmit_power; + nfapi_uint16_tlv_t earfcn; + + // nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands; + // nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands; + // nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands; + // nfapi_uint8_tlv_t nmm_uplink_rssi_supported; + +} nfapi_nr_nfapi_t; + +#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100 +#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101 +#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x5102 +#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x5103 +#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x5104 +#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x5105 + +#define NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x510A +#define NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x510B +#define NFAPI_NR_NFAPI_RF_BANDS_TAG 0x5114 +#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x511E +#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x511F +#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x5120 +#define NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x5128 +#define NFAPI_NR_NFAPI_EARFCN_TAG 0x5129 +#define NFAPI_NR_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x5130 +#define NFAPI_NR_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x5131 +#define NFAPI_NR_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x5132 +#define NFAPI_NR_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x5133 + +// P5 Message Structures +typedef struct { + nfapi_uint16_tlv_t numerology_index_mu; + nfapi_uint16_tlv_t duplex_mode; +} nfapi_nr_subframe_config_t; + +#define NFAPI_NR_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x5001 +#define NFAPI_NR_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x5002 +#define NFAPI_NR_SUBFRAME_CONFIG_PB_TAG 0x5003 +#define NFAPI_NR_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x5004 +#define NFAPI_NR_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x5005 +#define NFAPI_NR_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x5006 + +typedef struct { + nfapi_uint16_tlv_t tx_antenna_ports; + nfapi_uint16_tlv_t rx_antenna_ports; +} nfapi_nr_rf_config_t; + +#define NFAPI_NR_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x500A +#define NFAPI_NR_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x500B +#define NFAPI_NR_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x500C +#define NFAPI_NR_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x500D +#define NFAPI_NR_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x500E + +typedef struct { + nfapi_uint16_tlv_t physical_cell_id; + nfapi_uint16_tlv_t half_frame_index; + nfapi_uint16_tlv_t ssb_subcarrier_offset; + nfapi_uint16_tlv_t ssb_position_in_burst; + nfapi_uint16_tlv_t ssb_periodicity; + nfapi_uint16_tlv_t ss_pbch_block_power; + nfapi_uint16_tlv_t n_ssb_crb; +} nfapi_nr_sch_config_t; + +#define NFAPI_NR_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x501E +#define NFAPI_NR_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x501F +#define NFAPI_NR_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x5020 +#define NFAPI_NR_SCH_CONFIG_SSB_POSITION_IN_BURST 0x5021 +#define NFAPI_NR_SCH_CONFIG_SSB_PERIODICITY 0x5022 +#define NFAPI_NR_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x5023 +#define NFAPI_NR_SCH_CONFIG_N_SSB_CRB 0x5024 + + +typedef struct { + nfapi_uint16_tlv_t prach_RootSequenceIndex; ///// L1 parameter 'PRACHRootSequenceIndex' + nfapi_uint16_tlv_t prach_msg1_SubcarrierSpacing; ///// L1 parameter 'prach-Msg1SubcarrierSpacing' + nfapi_uint16_tlv_t restrictedSetConfig; + nfapi_uint16_tlv_t msg3_transformPrecoding; ///// L1 parameter 'msg3-tp' + /////////////////--------------------NR RACH-ConfigGeneric--------------------///////////////// + nfapi_uint16_tlv_t prach_ConfigurationIndex; ///// L1 parameter 'PRACHConfigurationIndex' + nfapi_uint16_tlv_t prach_msg1_FDM; ///// L1 parameter 'prach-FDM' + nfapi_uint16_tlv_t prach_msg1_FrequencyStart; ///// L1 parameter 'prach-frequency-start' + nfapi_uint16_tlv_t zeroCorrelationZoneConfig; + nfapi_uint16_tlv_t preambleReceivedTargetPower; +} nfapi_nr_rach_config_t; + +typedef struct { + //NR FrequencyInfoDL + nfapi_uint16_tlv_t absoluteFrequencySSB; + nfapi_uint16_tlv_t ssb_SubcarrierOffset; ///// L1 parameter 'kssb' + nfapi_uint16_tlv_t DL_FreqBandIndicatorNR; + nfapi_uint16_tlv_t DL_absoluteFrequencyPointA; ///// L1 parameter 'offset-ref-low-scs-ref-PRB' + //NR DL SCS-SpecificCarrier ///// L1 parameter 'offset-pointA-set' + nfapi_uint16_tlv_t DL_offsetToCarrier; ///// L1 parameter 'offset-pointA-low-scs ' + nfapi_uint16_tlv_t DL_SCS_SubcarrierSpacing; ///// L1 parameter 'ref-scs' + nfapi_uint16_tlv_t DL_SCS_SpecificCarrier_k0; ///// L1 parameter 'k0' + nfapi_uint16_tlv_t DL_carrierBandwidth; ///// L1 parameter 'BW' +} nfapi_nr_dl_frequencyinfo_t; + +typedef struct { + //NR BWP-DownlinkCommon + nfapi_uint16_tlv_t DL_locationAndBandwidth; ///// L1 parameter 'DL-BWP-loc' + nfapi_uint16_tlv_t DL_BWP_SubcarrierSpacing; ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1 + nfapi_uint16_tlv_t DL_BWP_prefix_type; +} nfapi_nr_bwp_dl_t; + +typedef struct { + //NR FrequencyInfoUL + nfapi_uint16_tlv_t UL_FreqBandIndicatorNR; + nfapi_uint16_tlv_t UL_absoluteFrequencyPointA; ///// L1 parameter 'offset-ref-low-scs-ref-PRB' + nfapi_uint16_tlv_t UL_additionalSpectrumEmission; + nfapi_uint16_tlv_t UL_p_Max; + nfapi_uint16_tlv_t UL_frequencyShift7p5khz; + //NR UL SCS-SpecificCarrier ///// L1 parameter 'offset-pointA-set' + nfapi_uint16_tlv_t UL_offsetToCarrier; ///// L1 parameter 'offset-pointA-low-scs ' + nfapi_uint16_tlv_t UL_SCS_SubcarrierSpacing; ///// L1 parameter 'ref-scs' + nfapi_uint16_tlv_t UL_SCS_SpecificCarrier_k0; ///// L1 parameter 'k0' + nfapi_uint16_tlv_t UL_carrierBandwidth; ///// L1 parameter 'BW' +} nfapi_nr_ul_frequencyinfo_t; + +typedef struct { + //NR BWP-UplinkCommon ///// L1 parameter 'initial-UL-BWP' + nfapi_uint16_tlv_t UL_locationAndBandwidth; ///// L1 parameter 'DL-BWP-loc' + nfapi_uint16_tlv_t UL_BWP_SubcarrierSpacing; ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1 + nfapi_uint16_tlv_t UL_BWP_prefix_type; +} nfapi_nr_bwp_ul_t; + +typedef struct { + nfapi_uint16_tlv_t groupHoppingEnabledTransformPrecoding; ///// L1 parameter 'Group-hopping-enabled-Transform-precoding' + nfapi_uint16_tlv_t msg3_DeltaPreamble; ///// L1 parameter 'Delta-preamble-msg3' + nfapi_uint16_tlv_t p0_NominalWithGrant; ///// L1 parameter 'p0-nominal-pusch-withgrant' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_k2; ///// L1 parameter 'K2' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_mappingType; ///// L1 parameter 'Mapping-type' +} nfapi_nr_pusch_config_t; + +typedef struct { + nfapi_uint16_tlv_t pucch_GroupHopping; ///// L1 parameter 'PUCCH-GroupHopping' + nfapi_uint16_tlv_t p0_nominal; ///// L1 parameter 'p0-nominal-pucch' +} nfapi_nr_pucch_config_t; + +typedef struct { + nfapi_uint16_tlv_t TimeDomainResourceAllocation_k0; ///// L1 parameter 'K0' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_mappingType; ///// L1 parameter 'Mapping-type' +} nfapi_nr_pdsch_config_t; + +typedef struct { + nfapi_uint16_tlv_t searchSpaceSIB1; ///// L1 parameter 'rmsi-SearchSpace' + nfapi_uint16_tlv_t searchSpaceOtherSystemInformation; ///// L1 parameter 'osi-SearchSpace' + nfapi_uint16_tlv_t pagingSearchSpace; ///// L1 parameter 'paging-SearchSpace' + nfapi_uint16_tlv_t ra_SearchSpace; ///// L1 parameter 'ra-SearchSpace' + nfapi_uint16_tlv_t rach_ra_ControlResourceSet; ///// L1 parameter 'rach-coreset-configuration' + nfapi_uint16_tlv_t common_controlResourceSetId; ///// L1 parameter 'CORESET-ID + nfapi_uint16_tlv_t common_ControlResourceSet_duration; ///// L1 parameter 'CORESET-time-duration' + nfapi_uint16_tlv_t cce_REG_MappingType; ///// L1 parameter 'CORESET-CCE-REG-mapping-type' + nfapi_uint16_tlv_t reg_BundleSize; ///// L1 parameter 'CORESET-REG-bundle-size' + nfapi_uint16_tlv_t interleaverSize; ///// L1 parameter 'CORESET-interleaver-size' + nfapi_uint16_tlv_t shiftIndex; ///// L1 parameter 'CORESET-shift-index' + nfapi_uint16_tlv_t precoderGranularity; ///// L1 parameter 'CORESET-precoder-granuality' + nfapi_uint16_tlv_t TCI_StateId; ///// L1 parameter 'TCI-StatesPDCCH' + nfapi_uint16_tlv_t tci_PresentInDCI; ///// L1 parameter 'TCI-PresentInDCI' + nfapi_uint16_tlv_t SearchSpaceId; + nfapi_uint16_tlv_t commonSearchSpaces_controlResourceSetId; + nfapi_uint16_tlv_t SearchSpace_monitoringSlotPeriodicityAndOffset; ///// L1 parameters 'Montoring-periodicity-PDCCH-slot' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel1; ///// L1 parameter 'Aggregation-level-1' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel2; ///// L1 parameter 'Aggregation-level-2' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel4; ///// L1 parameter 'Aggregation-level-4' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel8; ///// L1 parameter 'Aggregation-level-8' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel16; ///// L1 parameter 'Aggregation-level-16' + nfapi_uint16_tlv_t Common_dci_Format2_0_nrofCandidates_SFI_And_aggregationLevel; ///// L1 parameters 'SFI-Num-PDCCH-cand' and 'SFI-Aggregation-Level' + nfapi_uint16_tlv_t Common_dci_Format2_3_monitoringPeriodicity; ///// L1 parameter 'SRS-monitoring-periodicity' + nfapi_uint16_tlv_t Common_dci_Format2_3_nrofPDCCH_Candidates; ///// L1 parameter 'SRS-Num-PDCCH-cand' + nfapi_uint16_tlv_t ue_Specific__dci_Formats; +} nfapi_nr_pdcch_config_t; + +typedef struct { + nfapi_uint16_tlv_t ssb_PositionsInBurst_PR; ///// L1 parameter 'SSB-Transmitted + nfapi_uint16_tlv_t ssb_periodicityServingCell; + nfapi_uint16_tlv_t dmrs_TypeA_Position; ///// Position of (first) DL DM-RS + nfapi_uint16_tlv_t NIA_SubcarrierSpacing; ///// Used only for non-initial access (e.g. SCells, PCell of SCG) + nfapi_uint16_tlv_t ss_PBCH_BlockPower; +} nfapi_nr_servingcellconfigcommon_t; + +typedef struct { +//NR TDD-UL-DL-ConfigCommon ///// L1 parameter 'UL-DL-configuration-common' + nfapi_uint16_tlv_t referenceSubcarrierSpacing; ///// L1 parameter 'reference-SCS' + nfapi_uint16_tlv_t dl_UL_TransmissionPeriodicity; ///// L1 parameter 'DL-UL-transmission-periodicity' + nfapi_uint16_tlv_t nrofDownlinkSlots; ///// L1 parameter 'number-of-DL-slots' + nfapi_uint16_tlv_t nrofDownlinkSymbols; ///// L1 parameter 'number-of-DL-symbols-common' + nfapi_uint16_tlv_t nrofUplinkSlots; ///// L1 parameter 'number-of-UL-slots' + nfapi_uint16_tlv_t nrofUplinkSymbols; ///// L1 parameter 'number-of-UL-symbols-common' +} nfapi_nr_tdd_ul_dl_config_t; + + +typedef struct { + //RateMatchPattern is used to configure one rate matching pattern for PDSCH ///// L1 parameter 'Resource-set-cekk' + nfapi_uint16_tlv_t rateMatchPatternId; + nfapi_uint16_tlv_t RateMatchPattern_patternType; + nfapi_uint16_tlv_t symbolsInResourceBlock; ///// L1 parameter 'rate-match-PDSCH-bitmap2 + nfapi_uint16_tlv_t periodicityAndPattern; ///// L1 parameter 'rate-match-PDSCH-bitmap3' + nfapi_uint16_tlv_t RateMatchPattern_controlResourceSet; + nfapi_uint16_tlv_t RateMatchPattern_subcarrierSpacing; ///// L1 parameter 'resource-pattern-scs' + nfapi_uint16_tlv_t RateMatchPattern_mode; +} nfapi_nr_ratematchpattern_t; + +typedef struct { + //NR RateMatchPatternLTE-CRS + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_carrierFreqDL; ///// L1 parameter 'center-subcarrier-location' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_carrierBandwidthDL; ///// L1 parameter 'BW' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_nrofCRS_Ports; ///// L1 parameter 'rate-match-resources-numb-LTE-CRS-antenna-port' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_v_Shift; ///// L1 parameter 'rate-match-resources-LTE-CRS-v-shift' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_radioframeAllocationPeriod; + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_radioframeAllocationOffset; + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_subframeAllocation_choice; +} nfapi_nr_ratematchpattern_lte_crs_t; + + + + +typedef struct { + nfapi_p4_p5_message_header_t header; + uint8_t num_tlv; + nfapi_nr_subframe_config_t subframe_config; + nfapi_nr_rf_config_t rf_config; + nfapi_nr_sch_config_t sch_config; + nfapi_nr_rach_config_t rach_config; + nfapi_nr_dl_frequencyinfo_t dl_frequencyinfo; + nfapi_nr_bwp_dl_t bwp_dl; + nfapi_nr_ul_frequencyinfo_t ul_frequencyinfo; + nfapi_nr_bwp_ul_t bwp_ul; + nfapi_nr_pusch_config_t pusch_config; + nfapi_nr_pucch_config_t pucch_config; + nfapi_nr_pdsch_config_t pdsch_config; + nfapi_nr_pucch_config_t pdcch_config; + nfapi_nr_servingcellconfigcommon_t servingcellconfigcommon; + nfapi_nr_tdd_ul_dl_config_t tdd_ul_dl_config; + nfapi_nr_ratematchpattern_t ratematchpattern; + nfapi_nr_ratematchpattern_lte_crs_t ratematchpattern_lte_crs; + nfapi_nr_nfapi_t nfapi_config; + + nfapi_vendor_extension_tlv_t vendor_extension; +} nfapi_nr_config_request_t; + +#endif diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c new file mode 100644 index 0000000000000000000000000000000000000000..5ebfd5a05c241dc0ab8e332acff71176944548de --- /dev/null +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -0,0 +1,132 @@ +/* + * 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 + */ + +/*! \file PHY/NR_TRANSPORT/nr_dci.c +* \brief Implements DCI encoding/decoding (38.212/38.213/38.214). Current NR compliance V15.1 2018-06. +* \author Guy De Souza +* \date 2018 +* \version 0.1 +* \company Eurecom +* \email: desouza@eurecom.fr +* \note +* \warning +*/ + +#include "nr_dci.h" + +uint8_t nr_get_dci_size(nr_dci_format_e format, + nr_rnti_type_e rnti, + NR_BWP_PARMS* bwp, + nfapi_nr_config_request_t* config) +{ + uint8_t size = 0; + uint16_t N_RB = bwp->N_RB; + + switch(format) { + + case nr_dci_format_0_0: + /// fixed: Format identifier 1, Hop flag 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2 --16 + size += 16; + size += ceil( log2( (N_RB*(N_RB+1))>>2 ) ); // Freq domain assignment -- hopping scenario to be updated + // Time domain assignment + // UL/SUL indicator + break; + + case nr_dci_format_0_1: + /// fixed: Format identifier 1, MCS 5, NDI 1, RV 2, HARQ PID 4, PUSCH TPC 2, SRS request 2 --17 + size += 17; + // Carrier indicator + // UL/SUL indicator + // BWP Indicator + // Freq domain assignment + // Time domain assignment + // VRB to PRB mapping + // Frequency Hopping flag + // 1st DAI + // 2nd DAI + // SRS resource indicator + // Precoding info and number of layers + // Antenna ports + // CSI request + // CBGTI + // PTRS - DMRS association + // beta offset indicator + // DMRS sequence init + break; + + case nr_dci_format_1_0: + /// fixed: Format identifier 1, VRB2PRB 1, MCS 5, NDI 1, RV 2, HARQ PID 4, DAI 2, PUCCH TPC 2, PUCCH RInd 3, PDSCH to HARQ TInd 3 --24 + size += 24; + size += ceil( log2( (N_RB*(N_RB+1))>>2 ) ); // Freq domain assignment + // Time domain assignment + break; + + case nr_dci_format_1_1: + // Carrier indicator + size += 1; // Format identifier + // BWP Indicator + // Freq domain assignment + // Time domain assignment + // VRB to PRB mapping + // PRB bundling size indicator + // Rate matching indicator + // ZP CSI-RS trigger + /// TB1- MCS 5, NDI 1, RV 2 + size += 8; + // TB2 + size += 4 ; // HARQ PID + // DAI + size += 2; // TPC PUCCH + size += 3; // PUCCH resource indicator + size += 3; // PDSCH to HARQ timing indicator + // Antenna ports + // Tx Config Indication + size += 2; // SRS request + // CBGTI + // CBGFI + size += 1; // DMRS sequence init + + break; + + case nr_dci_format_2_0: + break; + + case nr_dci_format_2_1: + break; + + case nr_dci_format_2_2: + break; + + case nr_dci_format_2_3: + break; + + default: + AssertFatal(1==0, "Invalid NR DCI format %d\n", format); + } + + return size; +} + + +uint8_t nr_generate_dci_top() +{ + return 0; +} diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.h b/openair1/PHY/NR_TRANSPORT/nr_dci.h new file mode 100644 index 0000000000000000000000000000000000000000..a1a58e6598577c371ab9e9714908f286c1821a9b --- /dev/null +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.h @@ -0,0 +1,74 @@ +/* + * 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 + */ +#ifndef __PHY_NR_TRANSPORT_DCI__H +#define __PHY_NR_TRANSPORT_DCI__H + +#include "defs_gNB.h" + + +typedef enum { + nr_dci_format_0_0=0, + nr_dci_format_0_1, + nr_dci_format_1_0, + nr_dci_format_1_1, + nr_dci_format_2_0, + nr_dci_format_2_1, + nr_dci_format_2_2, + nr_dci_format_2_3 +} nr_dci_format_e; + +typedef enum { + nr_rnti_type_SI_RNTI=0, + nr_rnti_type_RA_RNTI, + nr_rnti_type_C_RNTI, + nr_rnti_type_TC_RNTI, + nr_rnti_type_CS_RNTI, + nr_rnti_type_P_RNTI +} nr_rnti_type_e; + + + +typedef struct { + /// Length of DCI in bits + uint8_t size; + /// Aggregation level + uint8_t L; + /// Position of first CCE of the dci + int firstCCE; + /// flag to indicate that this is a RA response + boolean_t ra_flag; + /// rnti + nr_rnti_type_e rnti; + /// Format + DCI_format_t format; + /// DCI pdu + uint8_t dci_pdu[8]; +} NR_DCI_ALLOC_t; + + +uint8_t nr_get_dci_size(nr_dci_format_e format, + nr_rnti_type_e rnti, + NR_BWP_PARMS bwp, + nfapi_nr_config_request_t* config); + +uint8_t nr_generate_dci_top(); + +#endif //__PHY_NR_TRANSPORT_DCI__H diff --git a/openair1/PHY/NR_TRANSPORT/nr_pdcch.c b/openair1/PHY/NR_TRANSPORT/nr_pdcch.c new file mode 100644 index 0000000000000000000000000000000000000000..469c0472a5bf4304aa4c34742b9ec1aaa60166a7 --- /dev/null +++ b/openair1/PHY/NR_TRANSPORT/nr_pdcch.c @@ -0,0 +1,35 @@ +/* + * 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 + */ + +/*! \file PHY/NR_TRANSPORT/nr_pdcch.c +* \brief Implements PDCCH physical channel TX/RX procedures (38.211). Current NR compliance V15.1 2018-06. +* \author Guy De Souza +* \date 2018 +* \version 0.1 +* \company Eurecom +* \email: desouza@eurecom.fr +* \note +* \warning +*/ + +#include "nr_dci.h" + + diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 20f58409b1fbd9b7de8548d9025dfb5e03c91cef..9728d6b2d0726867e3a5ec57138c30eca6b5df82 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -320,7 +320,7 @@ typedef struct PHY_VARS_gNB_s { /// counter to average prach energh over first 100 prach opportunities int prach_energy_counter; - // PDSCH Varaibles + // PDSCH Variables PDSCH_CONFIG_DEDICATED pdsch_config_dedicated[NUMBER_OF_UE_MAX]; // PUSCH Varaibles diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index 6d54128820d57ebb280636ae54ff96afe7deb7f1..c1c03570337b21a14e8bb520d2ff833ba16e5a8a 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -34,7 +34,7 @@ #define __PHY_DEFS_NR_COMMON__H__ #include "defs_common.h" -#include "nfapi_interface_nr_extension.h" +#include "nfapi_nr_interface.h" #include "impl_defs_nr.h" #include "PHY/CODING/nrPolar_tools/nr_polar_defs.h" @@ -57,6 +57,8 @@ #define NR_PBCH_DMRS_LENGTH 144 #define NR_PBCH_DMRS_LENGTH_DWORD 5 // roundup(NR_PBCH_DMRS_LENGTH/32) +#define NR_MAX_NUM_BWP 4 + typedef enum { NR_MU_0=0, NR_MU_1, @@ -74,6 +76,17 @@ typedef enum{ nr_ssb_type_E } nr_ssb_type_e; +typedef struct NR_BWP_PARMS { + /// Associated numerology index + uint8_t numerology_index; + /// Freq domain location + uint8_t location; + /// Bandwidth in PRB + uint16_t N_RB; + /// Size of FFT/IFFT + uint16_t ofdm_symbol_size; +} NR_BWP_PARMS; + typedef struct NR_DL_FRAME_PARMS { /// Number of resource blocks (RB) in DL uint8_t N_RB_DL; @@ -166,6 +179,11 @@ typedef struct NR_DL_FRAME_PARMS { /// PBCH polar encoder params t_nrPolar_params pbch_polar_params; + //BWP params + NR_BWP_PARMS initial_bwp_params_dl; + NR_BWP_PARMS initial_bwp_params_ul; + } NR_DL_FRAME_PARMS; + #endif