Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
28478c03
Commit
28478c03
authored
Feb 07, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move ASN macros to a more global file to be available also at RRC
parent
38225b97
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
223 additions
and
223 deletions
+223
-223
common/utils/oai_asn1.h
common/utils/oai_asn1.h
+105
-0
openair2/LAYER2/NR_MAC_UE/config_ue.c
openair2/LAYER2/NR_MAC_UE/config_ue.c
+118
-118
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+0
-105
No files found.
common/utils/oai_asn1.h
View file @
28478c03
...
...
@@ -27,6 +27,111 @@
//-----------------------begin func -------------------
// Macro updates DESTINATION with configuration from ORIGIN by swapping pointers
// Old configuration is freed after completing configuration
#define UPDATE_IE(DESTINATION, ORIGIN, TYPE) \
do { \
TYPE *tmp = ORIGIN; \
ORIGIN = DESTINATION; \
DESTINATION = tmp; \
} while(0); \
// Same as above but swapping ASN1 elements that are not pointers
#define UPDATE_NP_IE(DESTINATION, ORIGIN, TYPE) \
do { \
TYPE tmp = ORIGIN; \
ORIGIN = DESTINATION; \
DESTINATION = tmp; \
} while(0); \
// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
// Destination is not a SetupRelease structure
#define HANDLE_SETUPRELEASE_DIRECT(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) \
UPDATE_IE(DESTINATION, ORIGIN->choice.setup, TYPE); \
} while(0); \
// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
// Destination is a SetupRelease structure
#define HANDLE_SETUPRELEASE_IE(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) { \
if (!DESTINATION) \
DESTINATION = calloc(1, sizeof(*DESTINATION)); \
DESTINATION->present = ORIGIN->present; \
UPDATE_IE(DESTINATION->choice.setup, ORIGIN->choice.setup, TYPE); \
} \
} while(0); \
// Macro releases entries in list TARGET if the corresponding ID is found in list SOURCE.
// Prints an error if ID not found in list.
#define RELEASE_IE_FROMLIST(SOURCE, TARGET, FIELD) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = *SOURCE->list.array[iI]; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) \
asn_sequence_del(&TARGET->list, iJ, 1); \
else \
LOG_E(NR_MAC, "Element not present in the list, impossible to release\n"); \
} \
} while (0) \
// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
#define ADDMOD_IE_FROMLIST(SOURCE, TARGET, FIELD, TYPE) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = SOURCE->list.array[iI]->FIELD; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) { \
TYPE *nEW = calloc(1, sizeof(*nEW)); \
ASN_SEQUENCE_ADD(&TARGET->list, nEW); \
} \
UPDATE_IE(TARGET->list.array[iJ], \
SOURCE->list.array[iI], \
TYPE); \
} \
} while (0) \
// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
// Action performed by function FUNC
#define ADDMOD_IE_FROMLIST_WFUNCTION(SOURCE, TARGET, FIELD, TYPE, FUNC) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = SOURCE->list.array[iI]->FIELD; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) { \
TYPE *nEW = calloc(1, sizeof(*nEW)); \
ASN_SEQUENCE_ADD(&TARGET->list, nEW); \
} \
FUNC(TARGET->list.array[iJ], \
SOURCE->list.array[iI]); \
} \
} while (0)
/*! \fn uint8_t BIT_STRING_to_uint8(BIT_STRING_t *)
*\brief This function extract at most a 8 bits value from a BIT_STRING_t object, the exact bits number depend on the BIT_STRING_t contents.
*\param[in] pointer to the BIT_STRING_t object.
...
...
openair2/LAYER2/NR_MAC_UE/config_ue.c
View file @
28478c03
...
...
@@ -459,18 +459,18 @@ static void modlist_ss(NR_SearchSpace_t *source, NR_SearchSpace_t *target)
{
target
->
searchSpaceId
=
source
->
searchSpaceId
;
if
(
source
->
controlResourceSetId
)
UPDATE_
MAC_
IE
(
target
->
controlResourceSetId
,
source
->
controlResourceSetId
,
NR_ControlResourceSetId_t
);
UPDATE_IE
(
target
->
controlResourceSetId
,
source
->
controlResourceSetId
,
NR_ControlResourceSetId_t
);
if
(
source
->
monitoringSlotPeriodicityAndOffset
)
UPDATE_
MAC_
IE
(
target
->
monitoringSlotPeriodicityAndOffset
,
source
->
monitoringSlotPeriodicityAndOffset
,
struct
NR_SearchSpace__monitoringSlotPeriodicityAndOffset
);
UPDATE_
MAC_
IE
(
target
->
duration
,
source
->
duration
,
long
);
UPDATE_IE
(
target
->
monitoringSlotPeriodicityAndOffset
,
source
->
monitoringSlotPeriodicityAndOffset
,
struct
NR_SearchSpace__monitoringSlotPeriodicityAndOffset
);
UPDATE_IE
(
target
->
duration
,
source
->
duration
,
long
);
if
(
source
->
monitoringSymbolsWithinSlot
)
UPDATE_
MAC_
IE
(
target
->
monitoringSymbolsWithinSlot
,
source
->
monitoringSymbolsWithinSlot
,
BIT_STRING_t
);
UPDATE_IE
(
target
->
monitoringSymbolsWithinSlot
,
source
->
monitoringSymbolsWithinSlot
,
BIT_STRING_t
);
if
(
source
->
nrofCandidates
)
UPDATE_
MAC_
IE
(
target
->
nrofCandidates
,
source
->
nrofCandidates
,
struct
NR_SearchSpace__nrofCandidates
);
UPDATE_IE
(
target
->
nrofCandidates
,
source
->
nrofCandidates
,
struct
NR_SearchSpace__nrofCandidates
);
if
(
source
->
searchSpaceType
)
UPDATE_
MAC_
IE
(
target
->
searchSpaceType
,
source
->
searchSpaceType
,
struct
NR_SearchSpace__searchSpaceType
);
UPDATE_IE
(
target
->
searchSpaceType
,
source
->
searchSpaceType
,
struct
NR_SearchSpace__searchSpaceType
);
}
static
NR_SearchSpace_t
*
get_common_search_space
(
const
struct
NR_PDCCH_ConfigCommon__commonSearchSpaceList
*
commonSearchSpaceList
,
...
...
@@ -521,7 +521,7 @@ static void configure_common_ss_coreset(NR_BWP_PDCCH_t *pdcch, NR_PDCCH_ConfigCo
get_common_search_space
(
pdcch_ConfigCommon
->
commonSearchSpaceList
,
pdcch
,
*
pdcch_ConfigCommon
->
pagingSearchSpace
);
}
UPDATE_
MAC_
IE
(
pdcch
->
commonControlResourceSet
,
pdcch_ConfigCommon
->
commonControlResourceSet
,
NR_ControlResourceSet_t
);
UPDATE_IE
(
pdcch
->
commonControlResourceSet
,
pdcch_ConfigCommon
->
commonControlResourceSet
,
NR_ControlResourceSet_t
);
}
}
...
...
@@ -544,15 +544,15 @@ static void modlist_coreset(NR_ControlResourceSet_t *source, NR_ControlResourceS
target
->
cce_REG_MappingType
.
choice
.
interleaved
->
reg_BundleSize
=
source
->
cce_REG_MappingType
.
choice
.
interleaved
->
reg_BundleSize
;
target
->
cce_REG_MappingType
.
choice
.
interleaved
->
interleaverSize
=
source
->
cce_REG_MappingType
.
choice
.
interleaved
->
interleaverSize
;
UPDATE_
MAC_
IE
(
target
->
cce_REG_MappingType
.
choice
.
interleaved
->
shiftIndex
,
source
->
cce_REG_MappingType
.
choice
.
interleaved
->
shiftIndex
,
long
);
UPDATE_IE
(
target
->
cce_REG_MappingType
.
choice
.
interleaved
->
shiftIndex
,
source
->
cce_REG_MappingType
.
choice
.
interleaved
->
shiftIndex
,
long
);
}
else
{
free
(
shiftIndex
);
target
->
cce_REG_MappingType
=
source
->
cce_REG_MappingType
;
}
UPDATE_
MAC_
IE
(
target
->
tci_PresentInDCI
,
source
->
tci_PresentInDCI
,
long
);
UPDATE_
MAC_
IE
(
target
->
pdcch_DMRS_ScramblingID
,
source
->
pdcch_DMRS_ScramblingID
,
long
);
UPDATE_IE
(
target
->
tci_PresentInDCI
,
source
->
tci_PresentInDCI
,
long
);
UPDATE_IE
(
target
->
pdcch_DMRS_ScramblingID
,
source
->
pdcch_DMRS_ScramblingID
,
long
);
// TCI States
if
(
source
->
tci_StatesPDCCH_ToReleaseList
)
{
for
(
int
i
=
0
;
i
<
source
->
tci_StatesPDCCH_ToReleaseList
->
list
.
count
;
i
++
)
{
...
...
@@ -581,9 +581,9 @@ static void modlist_coreset(NR_ControlResourceSet_t *source, NR_ControlResourceS
ASN_SEQUENCE_ADD
(
&
target
->
tci_StatesPDCCH_ToAddList
->
list
,
source
->
tci_StatesPDCCH_ToAddList
->
list
.
array
[
i
]);
}
}
else
UPDATE_
MAC_
IE
(
target
->
tci_StatesPDCCH_ToAddList
,
source
->
tci_StatesPDCCH_ToAddList
,
struct
NR_ControlResourceSet__tci_StatesPDCCH_ToAddList
);
UPDATE_IE
(
target
->
tci_StatesPDCCH_ToAddList
,
source
->
tci_StatesPDCCH_ToAddList
,
struct
NR_ControlResourceSet__tci_StatesPDCCH_ToAddList
);
}
// end TCI States
}
...
...
@@ -840,14 +840,14 @@ void nr_rrc_mac_config_req_mib(module_id_t module_id,
static
void
setup_puschpowercontrol
(
NR_PUSCH_PowerControl_t
*
source
,
NR_PUSCH_PowerControl_t
*
target
)
{
UPDATE_
MAC_
IE
(
target
->
tpc_Accumulation
,
source
->
tpc_Accumulation
,
long
);
UPDATE_
MAC_
IE
(
target
->
msg3_Alpha
,
source
->
msg3_Alpha
,
NR_Alpha_t
);
UPDATE_IE
(
target
->
tpc_Accumulation
,
source
->
tpc_Accumulation
,
long
);
UPDATE_IE
(
target
->
msg3_Alpha
,
source
->
msg3_Alpha
,
NR_Alpha_t
);
if
(
source
->
p0_NominalWithoutGrant
)
UPDATE_
MAC_
IE
(
target
->
p0_NominalWithoutGrant
,
source
->
p0_NominalWithoutGrant
,
long
);
UPDATE_IE
(
target
->
p0_NominalWithoutGrant
,
source
->
p0_NominalWithoutGrant
,
long
);
if
(
source
->
p0_AlphaSets
)
UPDATE_
MAC_
IE
(
target
->
p0_AlphaSets
,
source
->
p0_AlphaSets
,
struct
NR_PUSCH_PowerControl__p0_AlphaSets
);
UPDATE_
MAC_
IE
(
target
->
twoPUSCH_PC_AdjustmentStates
,
source
->
twoPUSCH_PC_AdjustmentStates
,
long
);
UPDATE_
MAC_
IE
(
target
->
deltaMCS
,
source
->
deltaMCS
,
long
);
UPDATE_IE
(
target
->
p0_AlphaSets
,
source
->
p0_AlphaSets
,
struct
NR_PUSCH_PowerControl__p0_AlphaSets
);
UPDATE_IE
(
target
->
twoPUSCH_PC_AdjustmentStates
,
source
->
twoPUSCH_PC_AdjustmentStates
,
long
);
UPDATE_IE
(
target
->
deltaMCS
,
source
->
deltaMCS
,
long
);
if
(
source
->
pathlossReferenceRSToReleaseList
)
{
RELEASE_IE_FROMLIST
(
source
->
pathlossReferenceRSToReleaseList
,
target
->
pathlossReferenceRSToAddModList
,
...
...
@@ -878,8 +878,8 @@ static void setup_puschpowercontrol(NR_PUSCH_PowerControl_t *source, NR_PUSCH_Po
static
void
setup_puschconfig
(
NR_PUSCH_Config_t
*
source
,
NR_PUSCH_Config_t
*
target
)
{
UPDATE_
MAC_
IE
(
target
->
dataScramblingIdentityPUSCH
,
source
->
dataScramblingIdentityPUSCH
,
long
);
UPDATE_
MAC_
IE
(
target
->
txConfig
,
source
->
txConfig
,
long
);
UPDATE_IE
(
target
->
dataScramblingIdentityPUSCH
,
source
->
dataScramblingIdentityPUSCH
,
long
);
UPDATE_IE
(
target
->
txConfig
,
source
->
txConfig
,
long
);
if
(
source
->
dmrs_UplinkForPUSCH_MappingTypeA
)
HANDLE_SETUPRELEASE_IE
(
target
->
dmrs_UplinkForPUSCH_MappingTypeA
,
source
->
dmrs_UplinkForPUSCH_MappingTypeA
,
...
...
@@ -895,25 +895,25 @@ static void setup_puschconfig(NR_PUSCH_Config_t *source, NR_PUSCH_Config_t *targ
target
->
pusch_PowerControl
=
calloc
(
1
,
sizeof
(
*
target
->
pusch_PowerControl
));
setup_puschpowercontrol
(
source
->
pusch_PowerControl
,
target
->
pusch_PowerControl
);
}
UPDATE_
MAC_
IE
(
target
->
frequencyHopping
,
source
->
frequencyHopping
,
long
);
UPDATE_IE
(
target
->
frequencyHopping
,
source
->
frequencyHopping
,
long
);
if
(
source
->
frequencyHoppingOffsetLists
)
UPDATE_
MAC_
IE
(
target
->
frequencyHoppingOffsetLists
,
source
->
frequencyHoppingOffsetLists
,
struct
NR_PUSCH_Config__frequencyHoppingOffsetLists
);
UPDATE_IE
(
target
->
frequencyHoppingOffsetLists
,
source
->
frequencyHoppingOffsetLists
,
struct
NR_PUSCH_Config__frequencyHoppingOffsetLists
);
target
->
resourceAllocation
=
source
->
resourceAllocation
;
if
(
source
->
pusch_TimeDomainAllocationList
)
HANDLE_SETUPRELEASE_IE
(
target
->
pusch_TimeDomainAllocationList
,
source
->
pusch_TimeDomainAllocationList
,
NR_PUSCH_TimeDomainResourceAllocationList_t
,
asn_DEF_NR_SetupRelease_PUSCH_TimeDomainResourceAllocationList
);
UPDATE_
MAC_
IE
(
target
->
pusch_AggregationFactor
,
source
->
pusch_AggregationFactor
,
long
);
UPDATE_
MAC_
IE
(
target
->
mcs_Table
,
source
->
mcs_Table
,
long
);
UPDATE_
MAC_
IE
(
target
->
mcs_TableTransformPrecoder
,
source
->
mcs_TableTransformPrecoder
,
long
);
UPDATE_
MAC_
IE
(
target
->
transformPrecoder
,
source
->
transformPrecoder
,
long
);
UPDATE_
MAC_
IE
(
target
->
codebookSubset
,
source
->
codebookSubset
,
long
);
UPDATE_
MAC_
IE
(
target
->
maxRank
,
source
->
maxRank
,
long
);
UPDATE_
MAC_
IE
(
target
->
rbg_Size
,
source
->
rbg_Size
,
long
);
UPDATE_
MAC_
IE
(
target
->
tp_pi2BPSK
,
source
->
tp_pi2BPSK
,
long
);
UPDATE_IE
(
target
->
pusch_AggregationFactor
,
source
->
pusch_AggregationFactor
,
long
);
UPDATE_IE
(
target
->
mcs_Table
,
source
->
mcs_Table
,
long
);
UPDATE_IE
(
target
->
mcs_TableTransformPrecoder
,
source
->
mcs_TableTransformPrecoder
,
long
);
UPDATE_IE
(
target
->
transformPrecoder
,
source
->
transformPrecoder
,
long
);
UPDATE_IE
(
target
->
codebookSubset
,
source
->
codebookSubset
,
long
);
UPDATE_IE
(
target
->
maxRank
,
source
->
maxRank
,
long
);
UPDATE_IE
(
target
->
rbg_Size
,
source
->
rbg_Size
,
long
);
UPDATE_IE
(
target
->
tp_pi2BPSK
,
source
->
tp_pi2BPSK
,
long
);
if
(
source
->
uci_OnPUSCH
)
{
if
(
source
->
uci_OnPUSCH
->
present
==
NR_SetupRelease_UCI_OnPUSCH_PR_release
)
asn1cFreeStruc
(
asn_DEF_NR_UCI_OnPUSCH
,
target
->
uci_OnPUSCH
);
...
...
@@ -921,9 +921,9 @@ static void setup_puschconfig(NR_PUSCH_Config_t *source, NR_PUSCH_Config_t *targ
if
(
target
->
uci_OnPUSCH
)
{
target
->
uci_OnPUSCH
->
choice
.
setup
->
scaling
=
source
->
uci_OnPUSCH
->
choice
.
setup
->
scaling
;
if
(
source
->
uci_OnPUSCH
->
choice
.
setup
->
betaOffsets
)
UPDATE_
MAC_
IE
(
target
->
uci_OnPUSCH
->
choice
.
setup
->
betaOffsets
,
source
->
uci_OnPUSCH
->
choice
.
setup
->
betaOffsets
,
struct
NR_UCI_OnPUSCH__betaOffsets
);
UPDATE_IE
(
target
->
uci_OnPUSCH
->
choice
.
setup
->
betaOffsets
,
source
->
uci_OnPUSCH
->
choice
.
setup
->
betaOffsets
,
struct
NR_UCI_OnPUSCH__betaOffsets
);
}
}
}
...
...
@@ -931,7 +931,7 @@ static void setup_puschconfig(NR_PUSCH_Config_t *source, NR_PUSCH_Config_t *targ
static
void
setup_pdschconfig
(
NR_PDSCH_Config_t
*
source
,
NR_PDSCH_Config_t
*
target
)
{
UPDATE_
MAC_
IE
(
target
->
dataScramblingIdentityPDSCH
,
source
->
dataScramblingIdentityPDSCH
,
long
);
UPDATE_IE
(
target
->
dataScramblingIdentityPDSCH
,
source
->
dataScramblingIdentityPDSCH
,
long
);
if
(
source
->
dmrs_DownlinkForPDSCH_MappingTypeA
)
HANDLE_SETUPRELEASE_IE
(
target
->
dmrs_DownlinkForPDSCH_MappingTypeA
,
source
->
dmrs_DownlinkForPDSCH_MappingTypeA
,
...
...
@@ -957,14 +957,14 @@ static void setup_pdschconfig(NR_PDSCH_Config_t *source, NR_PDSCH_Config_t *targ
NR_TCI_State_t
);
}
// end TCI States
UPDATE_
MAC_
IE
(
target
->
vrb_ToPRB_Interleaver
,
source
->
vrb_ToPRB_Interleaver
,
long
);
UPDATE_IE
(
target
->
vrb_ToPRB_Interleaver
,
source
->
vrb_ToPRB_Interleaver
,
long
);
target
->
resourceAllocation
=
source
->
resourceAllocation
;
if
(
source
->
pdsch_TimeDomainAllocationList
)
HANDLE_SETUPRELEASE_IE
(
target
->
pdsch_TimeDomainAllocationList
,
source
->
pdsch_TimeDomainAllocationList
,
NR_PDSCH_TimeDomainResourceAllocationList_t
,
asn_DEF_NR_SetupRelease_PDSCH_TimeDomainResourceAllocationList
);
UPDATE_
MAC_
IE
(
target
->
pdsch_AggregationFactor
,
source
->
pdsch_AggregationFactor
,
long
);
UPDATE_IE
(
target
->
pdsch_AggregationFactor
,
source
->
pdsch_AggregationFactor
,
long
);
// rateMatchPattern
if
(
source
->
rateMatchPatternToReleaseList
)
{
RELEASE_IE_FROMLIST
(
source
->
rateMatchPatternToReleaseList
,
...
...
@@ -980,12 +980,12 @@ static void setup_pdschconfig(NR_PDSCH_Config_t *source, NR_PDSCH_Config_t *targ
NR_RateMatchPattern_t
);
}
// end rateMatchPattern
UPDATE_
MAC_
IE
(
target
->
rateMatchPatternGroup1
,
source
->
rateMatchPatternGroup1
,
NR_RateMatchPatternGroup_t
);
UPDATE_
MAC_
IE
(
target
->
rateMatchPatternGroup2
,
source
->
rateMatchPatternGroup2
,
NR_RateMatchPatternGroup_t
);
UPDATE_IE
(
target
->
rateMatchPatternGroup1
,
source
->
rateMatchPatternGroup1
,
NR_RateMatchPatternGroup_t
);
UPDATE_IE
(
target
->
rateMatchPatternGroup2
,
source
->
rateMatchPatternGroup2
,
NR_RateMatchPatternGroup_t
);
target
->
rbg_Size
=
source
->
rbg_Size
;
UPDATE_
MAC_
IE
(
target
->
mcs_Table
,
source
->
mcs_Table
,
long
);
UPDATE_
MAC_
IE
(
target
->
maxNrofCodeWordsScheduledByDCI
,
source
->
maxNrofCodeWordsScheduledByDCI
,
long
);
UPDATE_
MAC_
NP_IE
(
target
->
prb_BundlingType
,
source
->
prb_BundlingType
,
struct
NR_PDSCH_Config__prb_BundlingType
);
UPDATE_IE
(
target
->
mcs_Table
,
source
->
mcs_Table
,
long
);
UPDATE_IE
(
target
->
maxNrofCodeWordsScheduledByDCI
,
source
->
maxNrofCodeWordsScheduledByDCI
,
long
);
UPDATE_NP_IE
(
target
->
prb_BundlingType
,
source
->
prb_BundlingType
,
struct
NR_PDSCH_Config__prb_BundlingType
);
AssertFatal
(
source
->
zp_CSI_RS_ResourceToAddModList
==
NULL
,
"Not handled
\n
"
);
AssertFatal
(
source
->
aperiodic_ZP_CSI_RS_ResourceSetsToAddModList
==
NULL
,
"Not handled
\n
"
);
AssertFatal
(
source
->
sp_ZP_CSI_RS_ResourceSetsToAddModList
==
NULL
,
"Not handled
\n
"
);
...
...
@@ -996,11 +996,11 @@ static void setup_sr_resource(NR_SchedulingRequestResourceConfig_t *target, NR_S
target
->
schedulingRequestResourceId
=
source
->
schedulingRequestResourceId
;
target
->
schedulingRequestID
=
source
->
schedulingRequestID
;
if
(
source
->
periodicityAndOffset
)
UPDATE_
MAC_
IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
struct
NR_SchedulingRequestResourceConfig__periodicityAndOffset
);
UPDATE_IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
struct
NR_SchedulingRequestResourceConfig__periodicityAndOffset
);
if
(
source
->
resource
)
UPDATE_
MAC_
IE
(
target
->
resource
,
source
->
resource
,
NR_PUCCH_ResourceId_t
);
UPDATE_IE
(
target
->
resource
,
source
->
resource
,
NR_PUCCH_ResourceId_t
);
}
static
void
setup_pucchconfig
(
NR_PUCCH_Config_t
*
source
,
NR_PUCCH_Config_t
*
target
)
...
...
@@ -1071,11 +1071,11 @@ static void setup_pucchconfig(NR_PUCCH_Config_t *source, NR_PUCCH_Config_t *targ
}
if
(
source
->
multi_CSI_PUCCH_ResourceList
)
UPDATE_
MAC_
IE
(
target
->
multi_CSI_PUCCH_ResourceList
,
source
->
multi_CSI_PUCCH_ResourceList
,
struct
NR_PUCCH_Config__multi_CSI_PUCCH_ResourceList
);
UPDATE_IE
(
target
->
multi_CSI_PUCCH_ResourceList
,
source
->
multi_CSI_PUCCH_ResourceList
,
struct
NR_PUCCH_Config__multi_CSI_PUCCH_ResourceList
);
if
(
source
->
dl_DataToUL_ACK
)
UPDATE_
MAC_
IE
(
target
->
dl_DataToUL_ACK
,
source
->
dl_DataToUL_ACK
,
struct
NR_PUCCH_Config__dl_DataToUL_ACK
);
UPDATE_IE
(
target
->
dl_DataToUL_ACK
,
source
->
dl_DataToUL_ACK
,
struct
NR_PUCCH_Config__dl_DataToUL_ACK
);
// PUCCH-SpatialRelationInfo
if
(
source
->
spatialRelationInfoToAddModList
)
{
if
(
!
target
->
spatialRelationInfoToAddModList
)
...
...
@@ -1094,20 +1094,20 @@ static void setup_pucchconfig(NR_PUCCH_Config_t *source, NR_PUCCH_Config_t *targ
if
(
source
->
pucch_PowerControl
)
{
if
(
!
target
->
pucch_PowerControl
)
target
->
pucch_PowerControl
=
calloc
(
1
,
sizeof
(
*
target
->
pucch_PowerControl
));
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f0
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f0
,
long
);
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f1
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f1
,
long
);
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f2
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f2
,
long
);
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f3
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f3
,
long
);
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f4
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f4
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f0
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f0
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f1
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f1
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f2
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f2
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f3
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f3
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
deltaF_PUCCH_f4
,
source
->
pucch_PowerControl
->
deltaF_PUCCH_f4
,
long
);
if
(
source
->
pucch_PowerControl
->
p0_Set
)
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
p0_Set
,
source
->
pucch_PowerControl
->
p0_Set
,
struct
NR_PUCCH_PowerControl__p0_Set
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
p0_Set
,
source
->
pucch_PowerControl
->
p0_Set
,
struct
NR_PUCCH_PowerControl__p0_Set
);
if
(
source
->
pucch_PowerControl
->
pathlossReferenceRSs
)
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
pathlossReferenceRSs
,
source
->
pucch_PowerControl
->
pathlossReferenceRSs
,
struct
NR_PUCCH_PowerControl__pathlossReferenceRSs
);
UPDATE_
MAC_
IE
(
target
->
pucch_PowerControl
->
twoPUCCH_PC_AdjustmentStates
,
source
->
pucch_PowerControl
->
twoPUCCH_PC_AdjustmentStates
,
long
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
pathlossReferenceRSs
,
source
->
pucch_PowerControl
->
pathlossReferenceRSs
,
struct
NR_PUCCH_PowerControl__pathlossReferenceRSs
);
UPDATE_IE
(
target
->
pucch_PowerControl
->
twoPUCCH_PC_AdjustmentStates
,
source
->
pucch_PowerControl
->
twoPUCCH_PC_AdjustmentStates
,
long
);
}
}
...
...
@@ -1116,22 +1116,22 @@ static void handle_aperiodic_srs_type(struct NR_SRS_ResourceSet__resourceType__a
{
target
->
aperiodicSRS_ResourceTrigger
=
source
->
aperiodicSRS_ResourceTrigger
;
if
(
source
->
csi_RS
)
UPDATE_
MAC_
IE
(
target
->
csi_RS
,
source
->
csi_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
UPDATE_
MAC_
IE
(
target
->
slotOffset
,
source
->
slotOffset
,
long
);
UPDATE_IE
(
target
->
csi_RS
,
source
->
csi_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
UPDATE_IE
(
target
->
slotOffset
,
source
->
slotOffset
,
long
);
if
(
source
->
ext1
&&
source
->
ext1
->
aperiodicSRS_ResourceTriggerList
)
UPDATE_
MAC_
IE
(
target
->
ext1
->
aperiodicSRS_ResourceTriggerList
,
source
->
ext1
->
aperiodicSRS_ResourceTriggerList
,
struct
NR_SRS_ResourceSet__resourceType__aperiodic__ext1__aperiodicSRS_ResourceTriggerList
);
UPDATE_IE
(
target
->
ext1
->
aperiodicSRS_ResourceTriggerList
,
source
->
ext1
->
aperiodicSRS_ResourceTriggerList
,
struct
NR_SRS_ResourceSet__resourceType__aperiodic__ext1__aperiodicSRS_ResourceTriggerList
);
}
static
void
setup_srsresourceset
(
NR_SRS_ResourceSet_t
*
target
,
NR_SRS_ResourceSet_t
*
source
)
{
target
->
srs_ResourceSetId
=
source
->
srs_ResourceSetId
;
if
(
source
->
srs_ResourceIdList
)
UPDATE_
MAC_
IE
(
target
->
srs_ResourceIdList
,
source
->
srs_ResourceIdList
,
struct
NR_SRS_ResourceSet__srs_ResourceIdList
);
UPDATE_IE
(
target
->
srs_ResourceIdList
,
source
->
srs_ResourceIdList
,
struct
NR_SRS_ResourceSet__srs_ResourceIdList
);
if
(
target
->
resourceType
.
present
!=
source
->
resourceType
.
present
)
{
UPDATE_
MAC_
NP_IE
(
target
->
resourceType
,
source
->
resourceType
,
struct
NR_SRS_ResourceSet__resourceType
);
UPDATE_NP_IE
(
target
->
resourceType
,
source
->
resourceType
,
struct
NR_SRS_ResourceSet__resourceType
);
}
else
{
switch
(
source
->
resourceType
.
present
)
{
...
...
@@ -1140,32 +1140,32 @@ static void setup_srsresourceset(NR_SRS_ResourceSet_t *target, NR_SRS_ResourceSe
break
;
case
NR_SRS_ResourceSet__resourceType_PR_periodic
:
if
(
source
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
)
UPDATE_
MAC_
IE
(
target
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
,
source
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
UPDATE_IE
(
target
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
,
source
->
resourceType
.
choice
.
periodic
->
associatedCSI_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
break
;
case
NR_SRS_ResourceSet__resourceType_PR_semi_persistent
:
if
(
source
->
resourceType
.
choice
.
semi_persistent
->
associatedCSI_RS
)
UPDATE_
MAC_
IE
(
target
->
resourceType
.
choice
.
semi_persistent
->
associatedCSI_RS
,
source
->
resourceType
.
choice
.
semi_persistent
->
associatedCSI_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
UPDATE_IE
(
target
->
resourceType
.
choice
.
semi_persistent
->
associatedCSI_RS
,
source
->
resourceType
.
choice
.
semi_persistent
->
associatedCSI_RS
,
NR_NZP_CSI_RS_ResourceId_t
);
break
;
default:
break
;
}
}
target
->
usage
=
source
->
usage
;
UPDATE_
MAC_
IE
(
target
->
alpha
,
source
->
alpha
,
NR_Alpha_t
);
UPDATE_IE
(
target
->
alpha
,
source
->
alpha
,
NR_Alpha_t
);
if
(
source
->
p0
)
UPDATE_
MAC_
IE
(
target
->
p0
,
source
->
p0
,
long
);
UPDATE_IE
(
target
->
p0
,
source
->
p0
,
long
);
if
(
source
->
pathlossReferenceRS
)
UPDATE_
MAC_
IE
(
target
->
pathlossReferenceRS
,
source
->
pathlossReferenceRS
,
struct
NR_PathlossReferenceRS_Config
);
UPDATE_
MAC_
IE
(
target
->
srs_PowerControlAdjustmentStates
,
source
->
srs_PowerControlAdjustmentStates
,
long
);
UPDATE_IE
(
target
->
pathlossReferenceRS
,
source
->
pathlossReferenceRS
,
struct
NR_PathlossReferenceRS_Config
);
UPDATE_IE
(
target
->
srs_PowerControlAdjustmentStates
,
source
->
srs_PowerControlAdjustmentStates
,
long
);
}
static
void
setup_srsconfig
(
NR_SRS_Config_t
*
source
,
NR_SRS_Config_t
*
target
)
{
UPDATE_
MAC_
IE
(
target
->
tpc_Accumulation
,
source
->
tpc_Accumulation
,
long
);
UPDATE_IE
(
target
->
tpc_Accumulation
,
source
->
tpc_Accumulation
,
long
);
// SRS-Resource
if
(
source
->
srs_ResourceToAddModList
)
{
if
(
!
target
->
srs_ResourceToAddModList
)
...
...
@@ -1325,9 +1325,9 @@ static void configure_common_BWP_dl(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Do
}
if
(
dl_common
->
pdsch_ConfigCommon
)
{
if
(
dl_common
->
pdsch_ConfigCommon
->
present
==
NR_SetupRelease_PDSCH_ConfigCommon_PR_setup
)
UPDATE_
MAC_
IE
(
bwp
->
tdaList_Common
,
dl_common
->
pdsch_ConfigCommon
->
choice
.
setup
->
pdsch_TimeDomainAllocationList
,
NR_PDSCH_TimeDomainResourceAllocationList_t
);
UPDATE_IE
(
bwp
->
tdaList_Common
,
dl_common
->
pdsch_ConfigCommon
->
choice
.
setup
->
pdsch_TimeDomainAllocationList
,
NR_PDSCH_TimeDomainResourceAllocationList_t
);
if
(
dl_common
->
pdsch_ConfigCommon
->
present
==
NR_SetupRelease_PDSCH_ConfigCommon_PR_release
)
asn1cFreeStruc
(
asn_DEF_NR_PDSCH_TimeDomainResourceAllocationList
,
bwp
->
tdaList_Common
);
}
...
...
@@ -1368,10 +1368,10 @@ static void configure_common_BWP_ul(NR_UE_MAC_INST_t *mac, int bwp_id, NR_BWP_Up
asn_DEF_NR_PUCCH_ConfigCommon
);
if
(
ul_common
->
pusch_ConfigCommon
)
{
if
(
ul_common
->
pusch_ConfigCommon
->
present
==
NR_SetupRelease_PUSCH_ConfigCommon_PR_setup
)
{
UPDATE_
MAC_
IE
(
bwp
->
tdaList_Common
,
ul_common
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
,
NR_PUSCH_TimeDomainResourceAllocationList_t
);
UPDATE_
MAC_
IE
(
bwp
->
msg3_DeltaPreamble
,
ul_common
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
,
long
);
UPDATE_IE
(
bwp
->
tdaList_Common
,
ul_common
->
pusch_ConfigCommon
->
choice
.
setup
->
pusch_TimeDomainAllocationList
,
NR_PUSCH_TimeDomainResourceAllocationList_t
);
UPDATE_IE
(
bwp
->
msg3_DeltaPreamble
,
ul_common
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
,
long
);
}
if
(
ul_common
->
pusch_ConfigCommon
->
present
==
NR_SetupRelease_PUSCH_ConfigCommon_PR_release
)
{
asn1cFreeStruc
(
asn_DEF_NR_PUSCH_TimeDomainResourceAllocationList
,
bwp
->
tdaList_Common
);
...
...
@@ -1409,8 +1409,8 @@ void nr_rrc_mac_config_req_sib1(module_id_t module_id,
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
module_id
);
AssertFatal
(
scc
,
"SIB1 SCC should not be NULL
\n
"
);
UPDATE_
MAC_
IE
(
mac
->
tdd_UL_DL_ConfigurationCommon
,
scc
->
tdd_UL_DL_ConfigurationCommon
,
NR_TDD_UL_DL_ConfigCommon_t
);
UPDATE_
MAC_
IE
(
mac
->
si_SchedulingInfo
,
si_SchedulingInfo
,
NR_SI_SchedulingInfo_t
);
UPDATE_IE
(
mac
->
tdd_UL_DL_ConfigurationCommon
,
scc
->
tdd_UL_DL_ConfigurationCommon
,
NR_TDD_UL_DL_ConfigCommon_t
);
UPDATE_IE
(
mac
->
si_SchedulingInfo
,
si_SchedulingInfo
,
NR_SI_SchedulingInfo_t
);
config_common_ue_sa
(
mac
,
scc
,
cc_idP
);
configure_common_BWP_dl
(
mac
,
...
...
@@ -1449,7 +1449,7 @@ static void handle_reconfiguration_with_sync(NR_UE_MAC_INST_t *mac,
AssertFatal
(
reconfigurationWithSync
->
rach_ConfigDedicated
->
present
==
NR_ReconfigurationWithSync__rach_ConfigDedicated_PR_uplink
,
"RACH on supplementaryUplink not supported
\n
"
);
UPDATE_
MAC_
IE
(
ra
->
rach_ConfigDedicated
,
reconfigurationWithSync
->
rach_ConfigDedicated
->
choice
.
uplink
,
NR_RACH_ConfigDedicated_t
);
UPDATE_IE
(
ra
->
rach_ConfigDedicated
,
reconfigurationWithSync
->
rach_ConfigDedicated
->
choice
.
uplink
,
NR_RACH_ConfigDedicated_t
);
}
if
(
reconfigurationWithSync
->
spCellConfigCommon
)
{
...
...
@@ -1457,7 +1457,7 @@ static void handle_reconfiguration_with_sync(NR_UE_MAC_INST_t *mac,
if
(
scc
->
physCellId
)
mac
->
physCellId
=
*
scc
->
physCellId
;
mac
->
dmrs_TypeA_Position
=
scc
->
dmrs_TypeA_Position
;
UPDATE_
MAC_
IE
(
mac
->
tdd_UL_DL_ConfigurationCommon
,
scc
->
tdd_UL_DL_ConfigurationCommon
,
NR_TDD_UL_DL_ConfigCommon_t
);
UPDATE_IE
(
mac
->
tdd_UL_DL_ConfigurationCommon
,
scc
->
tdd_UL_DL_ConfigurationCommon
,
NR_TDD_UL_DL_ConfigCommon_t
);
config_common_ue
(
mac
,
scc
,
cc_idP
);
if
(
scc
->
downlinkConfigCommon
)
configure_common_BWP_dl
(
mac
,
...
...
@@ -1558,9 +1558,9 @@ static void configure_maccellgroup(NR_UE_MAC_INST_t *mac, const NR_MAC_CellGroup
static
void
configure_csi_resourcemapping
(
NR_CSI_RS_ResourceMapping_t
*
target
,
NR_CSI_RS_ResourceMapping_t
*
source
)
{
if
(
target
->
frequencyDomainAllocation
.
present
!=
source
->
frequencyDomainAllocation
.
present
)
{
UPDATE_
MAC_
NP_IE
(
target
->
frequencyDomainAllocation
,
source
->
frequencyDomainAllocation
,
struct
NR_CSI_RS_ResourceMapping__frequencyDomainAllocation
);
UPDATE_NP_IE
(
target
->
frequencyDomainAllocation
,
source
->
frequencyDomainAllocation
,
struct
NR_CSI_RS_ResourceMapping__frequencyDomainAllocation
);
}
else
{
switch
(
source
->
frequencyDomainAllocation
.
present
)
{
...
...
@@ -1606,7 +1606,7 @@ static void configure_csi_resourcemapping(NR_CSI_RS_ResourceMapping_t *target, N
}
target
->
nrofPorts
=
source
->
nrofPorts
;
target
->
firstOFDMSymbolInTimeDomain
=
source
->
firstOFDMSymbolInTimeDomain
;
UPDATE_
MAC_
IE
(
target
->
firstOFDMSymbolInTimeDomain2
,
source
->
firstOFDMSymbolInTimeDomain2
,
long
);
UPDATE_IE
(
target
->
firstOFDMSymbolInTimeDomain2
,
source
->
firstOFDMSymbolInTimeDomain2
,
long
);
target
->
cdm_Type
=
source
->
cdm_Type
;
target
->
density
=
source
->
density
;
target
->
freqBand
=
source
->
freqBand
;
...
...
@@ -1616,24 +1616,24 @@ static void configure_csirs_resource(NR_NZP_CSI_RS_Resource_t *target, NR_NZP_CS
{
configure_csi_resourcemapping
(
&
target
->
resourceMapping
,
&
source
->
resourceMapping
);
target
->
powerControlOffset
=
source
->
powerControlOffset
;
UPDATE_
MAC_
IE
(
target
->
powerControlOffsetSS
,
source
->
powerControlOffsetSS
,
long
);
UPDATE_IE
(
target
->
powerControlOffsetSS
,
source
->
powerControlOffsetSS
,
long
);
target
->
scramblingID
=
source
->
scramblingID
;
if
(
source
->
periodicityAndOffset
)
UPDATE_
MAC_
IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
NR_CSI_ResourcePeriodicityAndOffset_t
);
UPDATE_IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
NR_CSI_ResourcePeriodicityAndOffset_t
);
if
(
source
->
qcl_InfoPeriodicCSI_RS
)
UPDATE_
MAC_
IE
(
target
->
qcl_InfoPeriodicCSI_RS
,
source
->
qcl_InfoPeriodicCSI_RS
,
NR_TCI_StateId_t
);
UPDATE_IE
(
target
->
qcl_InfoPeriodicCSI_RS
,
source
->
qcl_InfoPeriodicCSI_RS
,
NR_TCI_StateId_t
);
}
static
void
configure_csiim_resource
(
NR_CSI_IM_Resource_t
*
target
,
NR_CSI_IM_Resource_t
*
source
)
{
if
(
source
->
csi_IM_ResourceElementPattern
)
UPDATE_
MAC_
IE
(
target
->
csi_IM_ResourceElementPattern
,
source
->
csi_IM_ResourceElementPattern
,
struct
NR_CSI_IM_Resource__csi_IM_ResourceElementPattern
);
UPDATE_IE
(
target
->
csi_IM_ResourceElementPattern
,
source
->
csi_IM_ResourceElementPattern
,
struct
NR_CSI_IM_Resource__csi_IM_ResourceElementPattern
);
if
(
source
->
freqBand
)
UPDATE_
MAC_
IE
(
target
->
freqBand
,
source
->
freqBand
,
NR_CSI_FrequencyOccupation_t
);
UPDATE_IE
(
target
->
freqBand
,
source
->
freqBand
,
NR_CSI_FrequencyOccupation_t
);
if
(
source
->
periodicityAndOffset
)
UPDATE_
MAC_
IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
NR_CSI_ResourcePeriodicityAndOffset_t
);
UPDATE_IE
(
target
->
periodicityAndOffset
,
source
->
periodicityAndOffset
,
NR_CSI_ResourcePeriodicityAndOffset_t
);
}
static
void
configure_csiconfig
(
NR_UE_ServingCell_Info_t
*
sc_info
,
struct
NR_SetupRelease_CSI_MeasConfig
*
csi_MeasConfig_sr
)
...
...
@@ -1646,12 +1646,12 @@ static void configure_csiconfig(NR_UE_ServingCell_Info_t *sc_info, struct NR_Set
break
;
case
NR_SetupRelease_CSI_MeasConfig_PR_setup
:
if
(
!
sc_info
->
csi_MeasConfig
)
{
// setup
UPDATE_
MAC_
IE
(
sc_info
->
csi_MeasConfig
,
csi_MeasConfig_sr
->
choice
.
setup
,
NR_CSI_MeasConfig_t
);
UPDATE_IE
(
sc_info
->
csi_MeasConfig
,
csi_MeasConfig_sr
->
choice
.
setup
,
NR_CSI_MeasConfig_t
);
}
else
{
// modification
NR_CSI_MeasConfig_t
*
target
=
sc_info
->
csi_MeasConfig
;
NR_CSI_MeasConfig_t
*
csi_MeasConfig
=
csi_MeasConfig_sr
->
choice
.
setup
;
if
(
csi_MeasConfig
->
reportTriggerSize
)
UPDATE_
MAC_
IE
(
target
->
reportTriggerSize
,
csi_MeasConfig
->
reportTriggerSize
,
long
);
UPDATE_IE
(
target
->
reportTriggerSize
,
csi_MeasConfig
->
reportTriggerSize
,
long
);
if
(
csi_MeasConfig
->
aperiodicTriggerStateList
)
HANDLE_SETUPRELEASE_DIRECT
(
sc_info
->
aperiodicTriggerStateList
,
csi_MeasConfig
->
aperiodicTriggerStateList
,
...
...
@@ -1775,9 +1775,9 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
configure_csiconfig
(
sc_info
,
scd
->
csi_MeasConfig
);
if
(
scd
->
supplementaryUplink
)
UPDATE_
MAC_
IE
(
sc_info
->
supplementaryUplink
,
scd
->
supplementaryUplink
,
NR_UplinkConfig_t
);
UPDATE_IE
(
sc_info
->
supplementaryUplink
,
scd
->
supplementaryUplink
,
NR_UplinkConfig_t
);
if
(
scd
->
crossCarrierSchedulingConfig
)
UPDATE_
MAC_
IE
(
sc_info
->
crossCarrierSchedulingConfig
,
scd
->
crossCarrierSchedulingConfig
,
NR_CrossCarrierSchedulingConfig_t
);
UPDATE_IE
(
sc_info
->
crossCarrierSchedulingConfig
,
scd
->
crossCarrierSchedulingConfig
,
NR_CrossCarrierSchedulingConfig_t
);
if
(
scd
->
pdsch_ServingCellConfig
)
{
switch
(
scd
->
pdsch_ServingCellConfig
->
present
)
{
case
NR_SetupRelease_PDSCH_ServingCellConfig_PR_NOTHING
:
...
...
@@ -1802,9 +1802,9 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
pdsch_servingcellconfig
->
codeBlockGroupTransmission
,
NR_PDSCH_CodeBlockGroupTransmission_t
,
asn_DEF_NR_PDSCH_CodeBlockGroupTransmission
);
UPDATE_
MAC_
IE
(
sc_info
->
xOverhead_PDSCH
,
pdsch_servingcellconfig
->
xOverhead
,
long
);
UPDATE_IE
(
sc_info
->
xOverhead_PDSCH
,
pdsch_servingcellconfig
->
xOverhead
,
long
);
if
(
pdsch_servingcellconfig
->
ext1
&&
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
)
UPDATE_
MAC_
IE
(
sc_info
->
maxMIMO_Layers_PDSCH
,
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
,
long
);
UPDATE_IE
(
sc_info
->
maxMIMO_Layers_PDSCH
,
pdsch_servingcellconfig
->
ext1
->
maxMIMO_Layers
,
long
);
break
;
}
default:
...
...
@@ -1834,10 +1834,10 @@ static void configure_servingcell_info(NR_UE_ServingCell_Info_t *sc_info, NR_Ser
break
;
case
NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup
:
{
NR_PUSCH_ServingCellConfig_t
*
pusch_servingcellconfig
=
scd
->
uplinkConfig
->
pusch_ServingCellConfig
->
choice
.
setup
;
UPDATE_
MAC_
IE
(
sc_info
->
rateMatching_PUSCH
,
pusch_servingcellconfig
->
rateMatching
,
long
);
UPDATE_
MAC_
IE
(
sc_info
->
xOverhead_PUSCH
,
pusch_servingcellconfig
->
xOverhead
,
long
);
UPDATE_IE
(
sc_info
->
rateMatching_PUSCH
,
pusch_servingcellconfig
->
rateMatching
,
long
);
UPDATE_IE
(
sc_info
->
xOverhead_PUSCH
,
pusch_servingcellconfig
->
xOverhead
,
long
);
if
(
pusch_servingcellconfig
->
ext1
&&
pusch_servingcellconfig
->
ext1
->
maxMIMO_Layers
)
UPDATE_
MAC_
IE
(
sc_info
->
maxMIMO_Layers_PUSCH
,
pusch_servingcellconfig
->
ext1
->
maxMIMO_Layers
,
long
);
UPDATE_IE
(
sc_info
->
maxMIMO_Layers_PUSCH
,
pusch_servingcellconfig
->
ext1
->
maxMIMO_Layers
,
long
);
if
(
pusch_servingcellconfig
->
codeBlockGroupTransmission
)
HANDLE_SETUPRELEASE_DIRECT
(
sc_info
->
pusch_CGB_Transmission
,
pusch_servingcellconfig
->
codeBlockGroupTransmission
,
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
28478c03
...
...
@@ -40,111 +40,6 @@
#define NR_DL_MAX_DAI (4)
/* TS 38.213 table 9.1.3-1 Value of counter DAI for DCI format 1_0 and 1_1 */
#define NR_DL_MAX_NB_CW (2)
/* number of downlink code word */
// Macro updates DESTINATION with configuration from ORIGIN by swapping pointers
// Old configuration is freed after completing configuration
#define UPDATE_MAC_IE(DESTINATION, ORIGIN, TYPE) \
do { \
TYPE *tmp = ORIGIN; \
ORIGIN = DESTINATION; \
DESTINATION = tmp; \
} while(0); \
// Same as above but swapping ASN1 elements that are not pointers
#define UPDATE_MAC_NP_IE(DESTINATION, ORIGIN, TYPE) \
do { \
TYPE tmp = ORIGIN; \
ORIGIN = DESTINATION; \
DESTINATION = tmp; \
} while(0); \
// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
// Destination is not a SetupRelease structure
#define HANDLE_SETUPRELEASE_DIRECT(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) \
UPDATE_MAC_IE(DESTINATION, ORIGIN->choice.setup, TYPE); \
} while(0); \
// Macro handles reception of SetupRelease element ORIGIN (see NR_SetupRelease.h)
// If release (NR_SetupRelease_xxx_PR_release equivalent to 1), removing structure from DESTINATION
// If setup (NR_SetupRelease_xxx_PR_setup equivalent to 2), add or modify structure in DESTINATION
// Destination is a SetupRelease structure
#define HANDLE_SETUPRELEASE_IE(DESTINATION, ORIGIN, TYPE, ASN_DEF) \
do { \
if (ORIGIN->present == 1) { \
asn1cFreeStruc(ASN_DEF, DESTINATION); \
} \
if (ORIGIN->present == 2) { \
if (!DESTINATION) \
DESTINATION = calloc(1, sizeof(*DESTINATION)); \
DESTINATION->present = ORIGIN->present; \
UPDATE_MAC_IE(DESTINATION->choice.setup, ORIGIN->choice.setup, TYPE); \
} \
} while(0); \
// Macro releases entries in list TARGET if the corresponding ID is found in list SOURCE.
// Prints an error if ID not found in list.
#define RELEASE_IE_FROMLIST(SOURCE, TARGET, FIELD) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = *SOURCE->list.array[iI]; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) \
asn_sequence_del(&TARGET->list, iJ, 1); \
else \
LOG_E(NR_MAC, "Element not present in the list, impossible to release\n"); \
} \
} while (0) \
// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
#define ADDMOD_IE_FROMLIST(SOURCE, TARGET, FIELD, TYPE) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = SOURCE->list.array[iI]->FIELD; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) { \
TYPE *nEW = calloc(1, sizeof(*nEW)); \
ASN_SEQUENCE_ADD(&TARGET->list, nEW); \
} \
UPDATE_MAC_IE(TARGET->list.array[iJ], \
SOURCE->list.array[iI], \
TYPE); \
} \
} while (0) \
// Macro adds or modifies entries of type TYPE in list TARGET with elements received in list SOURCE
// Action performed by function FUNC
#define ADDMOD_IE_FROMLIST_WFUNCTION(SOURCE, TARGET, FIELD, TYPE, FUNC) \
do { \
for (int iI = 0; iI < SOURCE->list.count; iI++) { \
long eL = SOURCE->list.array[iI]->FIELD; \
int iJ; \
for (iJ = 0; iJ < TARGET->list.count; iJ++) { \
if (eL == TARGET->list.array[iJ]->FIELD) \
break; \
} \
if (iJ == TARGET->list.count) { \
TYPE *nEW = calloc(1, sizeof(*nEW)); \
ASN_SEQUENCE_ADD(&TARGET->list, nEW); \
} \
FUNC(TARGET->list.array[iJ], \
SOURCE->list.array[iI]); \
} \
} while (0)
/**\brief initialize the field in nr_mac instance
\param mac MAC pointer */
void
nr_ue_init_mac
(
NR_UE_MAC_INST_t
*
mac
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment