From e6cadb4e3ccd05673fd9d33f8a445dd54be6006b Mon Sep 17 00:00:00 2001 From: Aravind Sirsikar Date: Tue, 16 Aug 2016 16:32:59 +0530 Subject: Add data structure to handle SPB for EGPRS DL Modify the header files with necessary data structure to handle Split block for EGPRS DL TBF. The EGPRS resegmentation feature allows PCU to retransmit RLC blocks of HeaderType1, HeaderType2 by segmenting them to 2 HeaderType3 blocks(Example MCS5 will be retransmitted as 2 MCS2 blocks). Table 10.4.8b.2 of 44.060 explains the possible values of SPB in HeadrType3 for DL direction. The PCU decides to retransmit the blocks by resegmenting it based on Table 8.1.1.1 of 44.060. The retransmission MCS is calculated based on current MCS of the Block and demanded MCS by PCU. Section 10.3a.3.3 of 44.060 shows the HeadrType3 with SPB field present in it Change-Id: I57673e53a9da2affa7e8aaa6551ac4b271c3d525 --- src/bts.h | 4 ++++ src/rlc.h | 45 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/bts.h b/src/bts.h index 807ce084..38896c8e 100644 --- a/src/bts.h +++ b/src/bts.h @@ -186,6 +186,10 @@ struct gprs_rlcmac_bts { uint8_t alpha, gamma; uint8_t egprs_enabled; uint32_t dl_tbf_idle_msec; /* hold time for idle DL TBFs */ + + /* 0 to support resegmentation in DL, 1 for no reseg */ + uint8_t dl_arq_type; + uint32_t ms_idle_sec; uint8_t cs_adj_enabled; uint8_t cs_adj_upper_limit; diff --git a/src/rlc.h b/src/rlc.h index bf2d70a7..b1a1fbad 100644 --- a/src/rlc.h +++ b/src/rlc.h @@ -83,6 +83,39 @@ enum egprs_rlc_ul_reseg_bsn_state { EGPRS_RESEG_INVALID = 0x04 }; +/* + * EGPRS resegment status information for DL + * When only first segment is sent, bsn state + * will be set to EGPRS_RESEG_FIRST_SEG_SENT and when + * second segment is sent the state will be + * set to EGPRS_RESEG_SECOND_SEG_SENT. + * EGPRS_RESEG_DL_INVALID is set to 8 considering there is a scope for + * 3rd segment according to Table 10.4.8b.2 of 44.060 + * The EGPRS resegmentation feature allows PCU to retransmit + * RLC blocks of HeaderType1, HeaderType2 by segmenting + * them to 2 HeaderType3 blocks(Example MCS5 will be + * retransmitted as 2 MCS2 blocks). Table 10.4.8b.2 of 44.060 + * explains the possible values of SPB in HeadrType3 for DL + * direction.The PCU decides to retransmit the + * blocks by resegmenting it based on Table 8.1.1.1 of 44.060. + * The retransmission MCS is calculated based on current MCS of + * the Block and demanded MCS by PCU. Section 10.3a.3.3 of 44.060 + * shows the HeadrType3 with SPB field present in it + */ +enum egprs_rlc_dl_reseg_bsn_state { + EGPRS_RESEG_DL_DEFAULT = 0, + EGPRS_RESEG_FIRST_SEG_SENT = 0x01, + EGPRS_RESEG_SECOND_SEG_SENT = 0x02, + EGPRS_RESEG_DL_INVALID = 0x08 +}; + +/* Table 10.4.8b.2 of 44.060 */ +enum egprs_rlcmac_dl_spb { + EGPRS_RLCMAC_DL_NO_RETX = 0, + EGPRS_RLCMAC_DL_FIRST_SEG = 2, + EGPRS_RLCMAC_DL_SEC_SEG = 3, +}; + /* * Valid puncturing scheme values * TS 44.060 10.4.8a.3.1, 10.4.8a.2.1, 10.4.8a.1.1 @@ -140,10 +173,7 @@ struct gprs_rlc_data_info { /* holds the current status of the block w.r.t UL/DL split blocks */ union split_block_status { egprs_rlc_ul_reseg_bsn_state block_status_ul; - /* - * TODO: DL split block status need to be supported - * for EGPRS DL - */ + egprs_rlc_dl_reseg_bsn_state block_status_dl; }; struct gprs_rlc_data { @@ -168,6 +198,13 @@ struct gprs_rlc_data { GprsCodingScheme cs_current_trans; GprsCodingScheme cs_last; + /* + * The MCS of initial transmission of a BSN + * This variable is used for split block + * processing in DL + */ + GprsCodingScheme cs_init; + /* puncturing scheme value to be used for next transmission*/ enum egprs_puncturing_values next_ps; -- cgit v1.2.3