aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bts.h4
-rw-r--r--src/rlc.h45
2 files changed, 45 insertions, 4 deletions
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
@@ -84,6 +84,39 @@ enum egprs_rlc_ul_reseg_bsn_state {
};
/*
+ * 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;