From 5d9d5f6e67248060fb20f253ac81e6831cfd3b3d Mon Sep 17 00:00:00 2001 From: Klaus Kuehnhammer Date: Tue, 3 Oct 2023 21:58:24 +0200 Subject: [PATCH] Support for PDCCH format 4 with 16 CCEs --- .gitignore | 63 +++++++++++++++++++++++++++++++ lib/include/srsran/phy/ue/ue_dl.h | 3 +- lib/src/phy/phch/dci.c | 2 +- lib/src/phy/phch/pdcch.c | 2 +- lib/src/phy/ue/ue_dl.c | 2 +- 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..9487d8a205 --- /dev/null +++ b/.gitignore @@ -0,0 +1,63 @@ +# Doxygen output +docs + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# cmake build directory +build +cmake-build-debug + +# VIM files +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +#Clion +.idea diff --git a/lib/include/srsran/phy/ue/ue_dl.h b/lib/include/srsran/phy/ue/ue_dl.h index 48f63d7666..2673f0c482 100644 --- a/lib/include/srsran/phy/ue/ue_dl.h +++ b/lib/include/srsran/phy/ue/ue_dl.h @@ -57,7 +57,8 @@ #include "srsran/config.h" #define SRSRAN_MAX_CANDIDATES_UE 16 // From 36.213 Table 9.1.1-1 -#define SRSRAN_MAX_CANDIDATES_COM 6 // From 36.213 Table 9.1.1-1 +#define SRSRAN_MAX_CANDIDATES_COM 7 // From 36.213 Table 9.1.1-1 + // 6 + 1: In addition to applying the procedures described in this Subclause for determining PDCCH assignment for non-MBSFN subframes on a MBMS-dedicated cell to receive MBMS on that cell when configured by higher layers, the UE shall also monitor a common search space ( L ) k S at aggregation level L=16 with a single PDCCH candidate M(L) =1 and Yk set to 0. #define SRSRAN_MAX_CANDIDATES (SRSRAN_MAX_CANDIDATES_UE + SRSRAN_MAX_CANDIDATES_COM) #define SRSRAN_MAX_FORMATS 4 diff --git a/lib/src/phy/phch/dci.c b/lib/src/phy/phch/dci.c index 39a716b7f2..9ba8c1240a 100644 --- a/lib/src/phy/phch/dci.c +++ b/lib/src/phy/phch/dci.c @@ -1441,7 +1441,7 @@ int srsran_dci_location_set(srsran_dci_location_t* c, uint32_t L, uint32_t nCCE) bool srsran_dci_location_isvalid(srsran_dci_location_t* c) { - if (c->L <= 3 && c->ncce <= 87) { + if (c->L <= 4 && c->ncce <= 87) { return true; } else { return false; diff --git a/lib/src/phy/phch/pdcch.c b/lib/src/phy/phch/pdcch.c index 0272b20e8a..7b0bb09043 100644 --- a/lib/src/phy/phch/pdcch.c +++ b/lib/src/phy/phch/pdcch.c @@ -308,7 +308,7 @@ uint32_t srsran_pdcch_common_locations_ncce(uint32_t nof_cce, srsran_dci_locatio uint32_t i, l, L, k; k = 0; - for (l = 2; l <= 3; l++) { + for (l = 2; l <= 4; l++) { L = (1 << l); for (i = 0; i < SRSRAN_MIN(nof_cce, 16) / (L); i++) { // Simplified expression, derived from: diff --git a/lib/src/phy/ue/ue_dl.c b/lib/src/phy/ue/ue_dl.c index 1622d4a090..762e4b7d3f 100644 --- a/lib/src/phy/ue/ue_dl.c +++ b/lib/src/phy/ue/ue_dl.c @@ -460,7 +460,7 @@ static int dci_blind_search(srsran_ue_dl_t* q, { uint32_t nof_dci = 0; if (rnti) { - for (int l = 0; l < search_space->nof_locations; l++) { + for (int l = search_space->nof_locations - 1; l >= 0; l--) { if (nof_dci >= SRSRAN_MAX_DCI_MSG) { ERROR("Can't store more DCIs in buffer"); return nof_dci;