diff --git a/openair1/PHY/LTE_TRANSPORT/mdci.h b/openair1/PHY/LTE_TRANSPORT/mdci.h new file mode 100644 index 0000000000000000000000000000000000000000..17c88ef0b00170b107ec8edde666473da520cd75 --- /dev/null +++ b/openair1/PHY/LTE_TRANSPORT/mdci.h @@ -0,0 +1,465 @@ +/* + * 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 PHY/LTE_TRANSPORT/dci.h + * \brief typedefs for LTE DCI structures from 36-212, V8.6 2009-03. Limited to 5 MHz formats for the moment.Current LTE compliance V8.6 2009-03. + * \author R. Knopp + * \date 2011 + * \version 0.1 + * \company Eurecom + * \email: knopp@eurecom.fr + * \note + * \warning + */ + +#include <stdint.h> + + +/// basic DCI Format Type 6-0A (5 MHz, FDD, rep2, no mod order override - XX bits) +struct DCI6_0A_5MHz { + /// padding to fill 32 bit word + uint32_t padding:5; + /// DCI subframe repetition + uint32_t dci_rep:2; + /// SRS Request + uint32_t srs_req:1; + /// CSI Request + uint32_t csi_req:1; + /// Power Control + uint32_t TPC:2; + /// redundancy version + uint32_t rv_idx:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 5 bits) + uint32_t rballoc:7; + /// Hopping flag + uint32_t hopping:1; + /// type = 0 => DCI Format 0, type = 1 => DCI Format 1A + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0A_5MHz DCI6_0A_5MHz_t; +#define sizeof_DCI6_0A_5MHz_t 28 // extended by one bit to match DCI6_1A + +/// basic DCI Format Type 6-1A (5 MHz, FDD primary carrier, 24 bits, 5 bit format, TM!=9,TM!=6, no scheduling enhancement) +struct DCI6_1A_5MHz { + /// padding to fill 32-bit word + uint32_t padding:4; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// SRS request + uint32_t srs_req:1; + /// Power Control + uint32_t TPC:2; + /// Redundancy version + uint32_t rv:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// Resource block assignment (assignment flag = 0 for 5 MHz, ceil(log2(floor(N_RB_DL/6)))+5) + uint32_t rballoc:7; + /// Frequency hopping flag + uint32_t hopping:1; + /// 0/1A differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1A_5MHz DCI6_1A_5MHz_t; +#define sizeof_DCI6_1A_5MHz_t 28 + +/// basic DCI Format Type 6-0A (10 MHz, FDD, rep2, no mod order override - XX bits) +struct DCI6_0A_10MHz { + /// padding to fill 32 bit word + uint32_t padding:4; + /// DCI subframe repetition + uint32_t dci_rep:2; + /// SRS Request + uint32_t srs_req:1; + /// CSI Request + uint32_t csi_req:1; + /// Power Control + uint32_t TPC:2; + /// redundancy version + uint32_t rv_idx:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 5 bits) + uint32_t rballoc:8; + /// Hopping flag + uint32_t hopping:1; + /// type = 0 => DCI Format 0, type = 1 => DCI Format 1A + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0A_10MHz DCI6_0A_10MHz_t; +#define sizeof_DCI6_0A_10MHz_t 29 // extended by one bit to match DCI6_1A + +/// basic DCI Format Type 6-1A (10 MHz, FDD primary carrier, 24 bits, 5 bit format, TM!=9,TM!=6, no scheduling enhancement) +struct DCI6_1A_10MHz { + /// padding to fill 32-bit word + uint32_t padding:4; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// SRS request + uint32_t srs_req:1; + /// Power Control + uint32_t TPC:2; + /// Redundancy version + uint32_t rv:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// Resource block assignment (assignment flag = 0 for 10 MHz, ceil(log2(floor(N_RB_DL/6)))+5) + uint32_t rballoc:8; + /// Frequency hopping flag + uint32_t hopping:1; + /// 0/1A differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1A_10MHz DCI6_1A_10MHz_t; +#define sizeof_DCI6_1A_10MHz_t 29 + +/// basic DCI Format Type 6-0A (20 MHz, FDD, rep2, no mod order override - XX bits) +struct DCI6_0A_20MHz { + /// padding to fill 32 bit word + uint32_t padding:4; + /// DCI subframe repetition + uint32_t dci_rep:2; + /// SRS Request + uint32_t srs_req:1; + /// CSI Request + uint32_t csi_req:1; + /// Power Control + uint32_t TPC:2; + /// redundancy version + uint32_t rv_idx:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 5 bits) + uint32_t rballoc:9; + /// Hopping flag + uint32_t hopping:1; + /// type = 0 => DCI Format 0, type = 1 => DCI Format 1A + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0A_20MHz DCI6_0A_20MHz_t; +#define sizeof_DCI6_0A_20MHz_t 30 // extended by one bit to match DCI6_1A + +/// basic DCI Format Type 6-1A (20 MHz, FDD primary carrier, 24 bits, 5 bit format, TM!=9,TM!=6, no scheduling enhancement) +struct DCI6_1A_20MHz { + /// padding to fill 32-bit word + uint32_t padding:3; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// SRS request + uint32_t srs_req:1; + /// Power Control + uint32_t TPC:2; + /// Redundancy version + uint32_t rv:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:3; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// Resource block assignment (assignment flag = 0 for 20 MHz, ceil(log2(floor(N_RB_DL/6)))+5) + uint32_t rballoc:9; + /// Frequency hopping flag + uint32_t hopping:1; + /// 0/1A differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1A_20MHz DCI6_1A_20MHz_t; +#define sizeof_DCI6_1A_20MHz_t 30 + +/// basic DCI Format Type 6-0B (5 MHz) +struct DCI6_0B_5MHz { + /// DCI subframe repetition + uint32_t dci_rep:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 3 bits) + uint32_t rballoc:5; + /// type = 0 => DCI Format 0B, type = 1 => DCI Format 1B + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0B_5MHz DCI6_0B_5MHz_t; +#define sizeof_DCI6_0B_5MHz_t 16 + +/// basic DCI Format Type 6-1B (5 MHz) +struct DCI6_1B_5MHz { + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Resource block assignment (assignment flag = 0 for 5 MHz, ceil(log2(floor(N_RB_DL/6)))+1) + uint32_t rballoc:3; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// 0B/1B differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1B_5MHz DCI6_1B_5MHz_t; +#define sizeof_DCI6_1B_5MHz_t 16 + +/// basic DCI Format Type 6-0B (10 MHz) +struct DCI6_0B_10MHz { + /// padding to fill 32-bit word + uint32_t padding:15; + /// DCI subframe repetition + uint32_t dci_rep:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 3 bits) + uint32_t rballoc:6; + /// type = 0 => DCI Format 0B, type = 1 => DCI Format 1B + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0B_10MHz DCI6_0B_10MHz_t; +#define sizeof_DCI6_0B_10MHz_t 17 + +/// basic DCI Format Type 6-1B (10 MHz) +struct DCI6_1B_10MHz { + /// padding to fill 32-bit word + uint32_t padding:15; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Resource block assignment (assignment flag = 0 for 5 MHz, ceil(log2(floor(N_RB_DL/6)))+1) + uint32_t rballoc:4; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// 0B/1B differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1B_10MHz DCI6_1B_10MHz_t; +#define sizeof_DCI6_1B_10MHz_t 17 + +/// basic DCI Format Type 6-0B (20 MHz) +struct DCI6_0B_20MHz { + /// padding to fill 32-bit word + uint32_t padding:14; + /// DCI subframe repetition + uint32_t dci_rep:2; + /// new data indicator + uint32_t ndi:1; + /// harq id + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// RB Assignment (ceil(log2(floor(N_RB_UL/6))) + 3 bits) + uint32_t rballoc:7; + /// type = 0 => DCI Format 0B, type = 1 => DCI Format 1B + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_0B_20MHz DCI6_0B_20MHz_t; +#define sizeof_DCI6_0B_20MHz_t 18 + +/// basic DCI Format Type 6-1B (10 MHz) +struct DCI6_1B_20MHz { + /// padding to fill 32-bit word + uint32_t padding:14; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// HARQ-ACK resource offset + uint32_t harq_ack_off:2; + /// New Data Indicator + uint32_t ndi:1; + /// HARQ Process + uint32_t harq_pid:1; + /// Repetition number + uint32_t rep:2; + /// Resource block assignment (assignment flag = 0 for 5 MHz, ceil(log2(floor(N_RB_DL/6)))+1) + uint32_t rballoc:5; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:4; + /// 0B/1B differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_1B_20MHz DCI6_1B_20MHz_t; +#define sizeof_DCI6_1B_20MHz_t 18 + +/// basic DCI Format Type 6-2 for paging (5 MHz) +struct DCI6_2_paging_5MHz { + /// padding to reach 32-bits + uint32_t padding:21; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// Repetition number + uint32_t rep:3; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:3; + /// Resource block assignment (ceil(log2(floor(N_RB_DL/6))) bits) + uint32_t rballoc:2; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_2_paging_5MHz DCI6_2_paging_5MHz_t; + +/// basic DCI Format Type 6-2 for direct indication (5 MHz) +struct DCI6_2_di_5MHz { + /// padding to reach 32-bits + uint32_t padding:23; + /// Direct indication information + uint32_t di_info:8; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_2_di_5MHz DCI6_2_di_5MHz_t; +#define sizeof_DCI6_2_5MHz_t 11 + +/// basic DCI Format Type 6-2 for paging (10 MHz) +struct DCI6_2_paging_10MHz { + /// padding to reach 32-bits + uint32_t padding:20; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// Repetition number + uint32_t rep:3; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:3; + /// Resource block assignment (ceil(log2(floor(N_RB_DL/6)))) + uint32_t rballoc:3; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); +typedef struct DCI6_2_paging_10MHz DCI6_2_paging_10MHz_t; + +/// basic DCI Format Type 6-2 for direct indication (10 MHz) +struct DCI6_2_di_10MHz { + /// padding to reach 32-bits + uint32_t padding:23; + /// Direct indication information + uint32_t di_info:8; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_2_di_10MHz DCI6_2_di_10MHz_t; +#define sizeof_DCI6_2_10MHz_t 12 + +/// basic DCI Format Type 6-2 for paging (20 MHz) +struct DCI6_2_paging_20MHz { + /// padding to reach 32-bits + uint32_t padding:19; + /// DCI subframe repetition number + uint32_t dci_rep:2; + /// Repetition number + uint32_t rep:3; + /// Modulation and Coding Scheme and Redundancy Version + uint32_t mcs:3; + /// Resource block assignment (ceil(log2(floor(N_RB_DL/6)))) + uint32_t rballoc:4; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_2_paging_20MHz DCI6_2_paging_20MHz_t; + +/// basic DCI Format Type 6-2 for direct indication (20 MHz) +struct DCI6_2_di_20MHz { + /// padding to reach 32-bits + uint32_t padding:23; + /// Direct indication information + uint32_t di_info:8; + /// 0B/1B paging/directindication differentiator + uint32_t type:1; +} __attribute__ ((__packed__)); + +typedef struct DCI6_2_di_20MHz DCI6_2_di_20MHz_t; +#define sizeof_DCI6_2_20MHz_t 13 + diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index f9a89c59b09e866aecb2ba2e1be425732481ee97..5d3134bcbb893f785eca3ef06f08aeb825cdc847 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1218,7 +1218,7 @@ void schedule_response(Sched_Rsp_t *Sched_INFO) { case NFAPI_HI_DCI0_HI_PDU_TYPE: handle_nfapi_hi_dci0_hi_pdu(eNB,proc,hi_dci0_req_pdu); - eNB->pdcch_vars[subframe&1].num_dci++; + eNB->pdcch_vars[subframe&1].num_hi++; break; }