pcu: Support decoding Egprs Pkt Ul Ass on PDCH
Change-Id: I30fb98aab67303997b803a0359ffc2e0b65ebf01
This commit is contained in:
parent
2ec84fd0e5
commit
45b664b8af
|
@ -167,27 +167,54 @@ module RLCMAC_CSN1_Templates {
|
||||||
return '1'B;
|
return '1'B;
|
||||||
}
|
}
|
||||||
|
|
||||||
template PktUlAssGprs tr_PktUlAssGprsDynamic(template uint5_t tfi := ?) := {
|
template DynamicAllocation tr_DynamicAllocation(template uint5_t tfi:= ?) := {
|
||||||
|
extd_dyn_alloc := ?,
|
||||||
|
p0_present := ?,
|
||||||
|
p0 := *,
|
||||||
|
pr_mode := *,
|
||||||
|
usf_granularity := ?,
|
||||||
|
ul_tfi_ass_present := f_presence_bit_tfi(tfi),
|
||||||
|
ul_tfi_assignment := tfi,
|
||||||
|
reserved := '0'B,
|
||||||
|
tbf_starting_time_present := ?,
|
||||||
|
tbf_starting_time := *,
|
||||||
|
ts_allocation := ?
|
||||||
|
};
|
||||||
|
|
||||||
|
template PktUlAssGprs tr_PktUlAssGprsDynamic(template DynamicAllocation dyn_alloc := ?) := {
|
||||||
ch_coding_cmd := ?,
|
ch_coding_cmd := ?,
|
||||||
tlli_block_chan_coding := ?,
|
tlli_block_chan_coding := ?,
|
||||||
pkt_ta := ?,
|
pkt_ta := ?,
|
||||||
freq_par_present := ?,
|
freq_par_present := ?,
|
||||||
freq_par := *,
|
freq_par := *,
|
||||||
alloc_present := '01'B,
|
alloc_present := '01'B,
|
||||||
dyn_block_alloc := {
|
dyn_block_alloc := dyn_alloc,
|
||||||
extd_dyn_alloc := ?,
|
|
||||||
p0_present := ?,
|
|
||||||
p0 := *,
|
|
||||||
pr_mode := *,
|
|
||||||
usf_granularity := ?,
|
|
||||||
ul_tfi_ass_present := f_presence_bit_tfi(tfi),
|
|
||||||
ul_tfi_assignment := tfi,
|
|
||||||
reserved := '0'B,
|
|
||||||
tbf_starting_time_present := ?,
|
|
||||||
tbf_starting_time := *,
|
|
||||||
ts_allocation := ?
|
|
||||||
},
|
|
||||||
sgl_block_alloc := omit
|
sgl_block_alloc := omit
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template PktUlAssEgprs tr_PktUlAssEgprsDynamic(template DynamicAllocation dyn_alloc := ?) := {
|
||||||
|
dual_carrier := '00'B,
|
||||||
|
tlli_present := ?,
|
||||||
|
tlli := *,
|
||||||
|
compact_reduced_ma_present := ?,
|
||||||
|
compact_reduced_ma := *,
|
||||||
|
chan_coding_cmd := ?,
|
||||||
|
resegment := ?,
|
||||||
|
window_size := ?,
|
||||||
|
ats_present := ?,
|
||||||
|
ats := *, /* ? */
|
||||||
|
arac_retrans_req := ?,
|
||||||
|
tlli_block_chan_coding := ?,
|
||||||
|
bep_period2_present := ?,
|
||||||
|
bep_period2 := *,
|
||||||
|
pkt_ta := ?,
|
||||||
|
pkt_ext_ta_present := ?,
|
||||||
|
pkt_ext_ta := *,
|
||||||
|
freq_par_present := ?,
|
||||||
|
freq_par := *,
|
||||||
|
alloc_present := ?,
|
||||||
|
dyn_block_alloc := dyn_alloc,
|
||||||
|
multi_block_alloc := omit
|
||||||
|
};
|
||||||
|
|
||||||
} with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };
|
} with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };
|
||||||
|
|
|
@ -233,6 +233,16 @@ module RLCMAC_CSN1_Types {
|
||||||
variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"
|
variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"
|
||||||
variant (sgl_block_alloc) "PRESENCE(alloc_present = '10'B)"
|
variant (sgl_block_alloc) "PRESENCE(alloc_present = '10'B)"
|
||||||
};
|
};
|
||||||
|
type record COMPACTreducedMA {
|
||||||
|
uint7_t ma_bitmap_length,
|
||||||
|
bitstring ma_bitmap,
|
||||||
|
BIT1 maio_2_present,
|
||||||
|
BIT6 maio_2
|
||||||
|
} with {
|
||||||
|
variant (ma_bitmap_length) "LENGTHTO (ma_bitmap)"
|
||||||
|
variant (ma_bitmap_length) "UNIT(bits)"
|
||||||
|
variant (maio_2) "PRESENCE(maio_2_present = '1'B)"
|
||||||
|
};
|
||||||
type record of AccessTechnologiesRequest AccessTechnologiesRequestRepetition
|
type record of AccessTechnologiesRequest AccessTechnologiesRequestRepetition
|
||||||
with { variant "EXTENSION_BIT(reverse)" };
|
with { variant "EXTENSION_BIT(reverse)" };
|
||||||
type record AccessTechnologiesRequest
|
type record AccessTechnologiesRequest
|
||||||
|
@ -240,16 +250,72 @@ module RLCMAC_CSN1_Types {
|
||||||
BIT4 accessTechnType,
|
BIT4 accessTechnType,
|
||||||
BIT1 extensionBit
|
BIT1 extensionBit
|
||||||
} with { variant "FIELDORDER(msb)" };
|
} with { variant "FIELDORDER(msb)" };
|
||||||
|
type record MultiBlockAllocation {
|
||||||
|
uint3_t timeslot_nr,
|
||||||
|
BIT1 alpha_gamma_present,
|
||||||
|
uint4_t alpha optional,
|
||||||
|
uint5_t gamma_tn optional,
|
||||||
|
BIT1 p0_present,
|
||||||
|
uint4_t p0 optional,
|
||||||
|
BIT1 reserved ('0'B) optional,
|
||||||
|
BIT1 pr_mode optional,
|
||||||
|
StartingFnDesc tbf_starting_time,
|
||||||
|
uint2_t num_radio_blocks_alloc
|
||||||
|
} with {
|
||||||
|
variant (alpha) "PRESENCE(alpha_gamma_present = '1'B)"
|
||||||
|
variant (gamma_tn) "PRESENCE(alpha_gamma_present = '1'B)"
|
||||||
|
variant (p0) "PRESENCE(p0_present = '1'B)"
|
||||||
|
variant (reserved) "PRESENCE(p0_present = '1'B)"
|
||||||
|
variant (pr_mode) "PRESENCE(p0_present = '1'B)"
|
||||||
|
};
|
||||||
|
type record PktUlAssEgprs {
|
||||||
|
BIT2 dual_carrier('00'B), /*TODO 01 -- Message escape for dual carrier, RTTI, BTTI with FANR activated, EGPRS2 */
|
||||||
|
BIT1 tlli_present,
|
||||||
|
GprsTlli tlli optional,
|
||||||
|
BIT1 compact_reduced_ma_present,
|
||||||
|
COMPACTreducedMA compact_reduced_ma optional,
|
||||||
|
EgprsChCodingCommand chan_coding_cmd,
|
||||||
|
BIT1 resegment,
|
||||||
|
EgprsWindowSize window_size,
|
||||||
|
BIT1 ats_present,
|
||||||
|
AccessTechnologiesRequestRepetition ats optional, /* ? */
|
||||||
|
BIT1 arac_retrans_req,
|
||||||
|
BIT1 tlli_block_chan_coding,
|
||||||
|
BIT1 bep_period2_present,
|
||||||
|
BIT4 bep_period2 optional,
|
||||||
|
PacketTimingAdvance pkt_ta,
|
||||||
|
BIT1 pkt_ext_ta_present,
|
||||||
|
BIT2 pkt_ext_ta optional,
|
||||||
|
BIT1 freq_par_present,
|
||||||
|
FrequencyParameters freq_par optional,
|
||||||
|
BIT2 alloc_present,
|
||||||
|
DynamicAllocation dyn_block_alloc optional,
|
||||||
|
MultiBlockAllocation multi_block_alloc optional
|
||||||
|
/* TODO: Additions for Rel-5 and more */
|
||||||
|
} with {
|
||||||
|
variant (tlli) "PRESENCE(tlli_present = '1'B)"
|
||||||
|
variant (compact_reduced_ma) "PRESENCE(compact_reduced_ma_present = '1'B)"
|
||||||
|
variant (ats) "PRESENCE(ats_present = '1'B)"
|
||||||
|
variant (bep_period2) "PRESENCE(bep_period2_present = '1'B)"
|
||||||
|
variant (pkt_ext_ta) "PRESENCE(pkt_ext_ta_present = '1'B)"
|
||||||
|
variant (freq_par) "PRESENCE(freq_par_present = '1'B)"
|
||||||
|
variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"
|
||||||
|
variant (multi_block_alloc) "PRESENCE(alloc_present = '10'B)"
|
||||||
|
};
|
||||||
type record PacketUlAssignment {
|
type record PacketUlAssignment {
|
||||||
PageMode page_mode,
|
PageMode page_mode,
|
||||||
BIT1 persistence_levels_present,
|
BIT1 persistence_levels_present,
|
||||||
PersistenceLevels persistence_levels optional,
|
PersistenceLevels persistence_levels optional,
|
||||||
PktUlAssUnion identity,
|
PktUlAssUnion identity,
|
||||||
BIT1 is_egprs, /* msg escape */
|
BIT1 is_egprs, /* msg escape */
|
||||||
PktUlAssGprs gprs optional
|
PktUlAssGprs gprs optional,
|
||||||
|
PktUlAssEgprs egprs optional
|
||||||
|
/* TODO: Table 11.2.29.1: PACKET UPLINK ASSIGNMENT information elements
|
||||||
|
https://www.etsi.org/deliver/etsi_ts/144000_144099/144060/09.03.00_60/ts_144060v090300p.pdf */
|
||||||
} with {
|
} with {
|
||||||
variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
|
variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
|
||||||
variant (gprs) "PRESENCE(is_egprs = '0'B)"
|
variant (gprs) "PRESENCE(is_egprs = '0'B)"
|
||||||
|
variant (egprs) "PRESENCE(is_egprs = '1'B)"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* 11.2.10 Packet Paging Request */
|
/* 11.2.10 Packet Paging Request */
|
||||||
|
|
|
@ -429,7 +429,8 @@ module RLCMAC_Templates {
|
||||||
persistence_levels := *,
|
persistence_levels := *,
|
||||||
identity := ?,
|
identity := ?,
|
||||||
is_egprs := ?, /* msg escape */
|
is_egprs := ?, /* msg escape */
|
||||||
gprs := *
|
gprs := *,
|
||||||
|
egprs := *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -443,7 +444,23 @@ module RLCMAC_Templates {
|
||||||
u := {
|
u := {
|
||||||
ul_assignment := {
|
ul_assignment := {
|
||||||
is_egprs := '0'B,
|
is_egprs := '0'B,
|
||||||
gprs := gprs
|
gprs := gprs,
|
||||||
|
egprs := omit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template RlcmacDlBlock tr_RLCMAC_UL_PACKET_ASS_EGPRS(template uint3_t usf := ?, template PktUlAssEgprs egprs := ?)
|
||||||
|
modifies tr_RLCMAC_UL_PACKET_ASS := {
|
||||||
|
ctrl := {
|
||||||
|
payload := {
|
||||||
|
u := {
|
||||||
|
ul_assignment := {
|
||||||
|
is_egprs := '1'B,
|
||||||
|
gprs := omit,
|
||||||
|
egprs := egprs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,9 +250,12 @@ runs on RAW_PCU_Test_CT return uint5_t {
|
||||||
} else if (ischosen(dl_block.data_egprs)) {
|
} else if (ischosen(dl_block.data_egprs)) {
|
||||||
return dl_block.data_egprs.mac_hdr.tfi;
|
return dl_block.data_egprs.mac_hdr.tfi;
|
||||||
} else { /* Ctrl block */
|
} else { /* Ctrl block */
|
||||||
if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(?)))) {
|
if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(tr_DynamicAllocation(?))))) {
|
||||||
return dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;
|
return dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;
|
||||||
}
|
}
|
||||||
|
if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_EGPRS(?, tr_PktUlAssEgprsDynamic(tr_DynamicAllocation(?))))) {
|
||||||
|
return dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ul_tfi_assignment;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setverdict(fail, "DlBlock doesn't contain a TFI:", dl_block);
|
setverdict(fail, "DlBlock doesn't contain a TFI:", dl_block);
|
||||||
f_shutdown(__BFILE__, __LINE__);
|
f_shutdown(__BFILE__, __LINE__);
|
||||||
|
|
Loading…
Reference in New Issue