Review at  https://gerrit.osmocom.org/4072

Add missing multislot classes

The table B.1 is copy-pasted from 3GPP TS 45.002 and reformatted via
Emacs macros into C struct to avoid typos.

Note: classes 35-45 which need TA offset are not properly supported
yet (this was the case with the old code too).

Change-Id: I1ef2eb99c517f25e7d1e71b985a3e0eb3879eb2c
Related: OS#2282
---
M src/gprs_rlcmac_ts_alloc.cpp
1 file changed, 52 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/72/4072/1

diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index 57197b2..a8b3e63 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -32,12 +32,14 @@
 /* Consider a PDCH as idle if has at most this number of TBFs assigned to it */
 #define PDCH_IDLE_TBF_THRESH   1
 
-/* 3GPP TS 05.02 Annex B.1 */
+/* 3GPP TS 45.002 Annex B Table B.1 */
 
 #define MS_NA  255 /* N/A */
 #define MS_A   254 /* 1 with hopping, 0 without */
 #define MS_B   253 /* 1 with hopping, 0 without (change Rx to Tx)*/
 #define MS_C   252 /* 1 with hopping, 0 without (change Tx to Rx)*/
+/* FIXME: use actual TA offset for computation - make sure to adjust "1 + 
MS_TO" accordingly */
+#define MS_TO  0 /* 31 symbol periods (this can be provided by a TA offset, 
i.e. a minimum TA value) */
 
 struct gprs_ms_multislot_class {
        uint8_t rx, tx, sum;    /* Maximum Number of Slots: RX, Tx, Sum Rx+Tx */
@@ -45,40 +47,55 @@
        uint8_t type; /* Type of Mobile */
 };
 
-static const struct gprs_ms_multislot_class gprs_ms_multislot_class[32] = {
-/* M-S Class     Rx    Tx      Sum     Tta     Ttb     Tra     Trb     Type */
-/* N/A */      { MS_NA,MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA },
-/* 1 */                { 1,    1,      2,      3,      2,      4,      2,      
1 },
-/* 2 */                { 2,    1,      3,      3,      2,      3,      1,      
1 },
-/* 3 */                { 2,    2,      3,      3,      2,      3,      1,      
1 },
-/* 4 */                { 3,    1,      4,      3,      1,      3,      1,      
1 },
-/* 5 */                { 2,    2,      4,      3,      1,      3,      1,      
1 },
-/* 6 */                { 3,    2,      4,      3,      1,      3,      1,      
1 },
-/* 7 */                { 3,    3,      4,      3,      1,      3,      1,      
1 },
-/* 8 */                { 4,    1,      5,      3,      1,      2,      1,      
1 },
-/* 9 */                { 3,    2,      5,      3,      1,      2,      1,      
1 },
-/* 10 */       { 4,    2,      5,      3,      1,      2,      1,      1 },
-/* 11 */       { 4,    3,      5,      3,      1,      2,      1,      1 },
-/* 12 */       { 4,    4,      5,      2,      1,      2,      1,      1 },
-/* 13 */       { 3,    3,      MS_NA,  MS_NA,  MS_A,   3,      MS_A,   2 },
-/* 14 */       { 4,    4,      MS_NA,  MS_NA,  MS_A,   3,      MS_A,   2 },
-/* 15 */       { 5,    5,      MS_NA,  MS_NA,  MS_A,   3,      MS_A,   2 },
-/* 16 */       { 6,    6,      MS_NA,  MS_NA,  MS_A,   2,      MS_A,   2 },
-/* 17 */       { 7,    7,      MS_NA,  MS_NA,  MS_A,   1,      0,      2 },
-/* 18 */       { 8,    8,      MS_NA,  MS_NA,  0,      0,      0,      2 },
-/* 19 */       { 6,    2,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 20 */       { 6,    3,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 21 */       { 6,    4,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 22 */       { 6,    4,      MS_NA,  2,      MS_B,   2,      MS_C,   1 },
-/* 23 */       { 6,    6,      MS_NA,  2,      MS_B,   2,      MS_C,   1 },
-/* 24 */       { 8,    2,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 25 */       { 8,    3,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 26 */       { 8,    4,      MS_NA,  3,      MS_B,   2,      MS_C,   1 },
-/* 27 */       { 8,    4,      MS_NA,  2,      MS_B,   2,      MS_C,   1 },
-/* 28 */       { 8,    6,      MS_NA,  2,      MS_B,   2,      MS_C,   1 },
-/* 29 */       { 8,    8,      MS_NA,  2,      MS_B,   2,      MS_C,   1 },
-/* N/A */      { MS_NA,MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA },
-/* N/A */      { MS_NA,MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA,  MS_NA },
+static const struct gprs_ms_multislot_class gprs_ms_multislot_class[] = {
+       /* M-S Class |  Max # of slots |       Min # of slots      | Type */
+       /*           | Rx     Tx   Sum |  Tta    Ttb    Tra    Trb |      */
+       /* N/A */ { MS_NA, MS_NA, MS_NA, MS_NA, MS_NA, MS_NA, MS_NA, MS_NA },
+       /*  1 */  {   1,     1,     2,     3,     2,     4,     2,     1 },
+       /*  2 */  {   2,     1,     3,     3,     2,     3,     1,     1 },
+       /*  3 */  {   2,     2,     3,     3,     2,     3,     1,     1 },
+       /*  4 */  {   3,     1,     4,     3,     1,     3,     1,     1 },
+       /*  5 */  {   2,     2,     4,     3,     1,     3,     1,     1 },
+       /*  6 */  {   3,     2,     4,     3,     1,     3,     1,     1 },
+       /*  7 */  {   3,     3,     4,     3,     1,     3,     1,     1 },
+       /*  8 */  {   4,     1,     5,     3,     1,     2,     1,     1 },
+       /*  9 */  {   3,     2,     5,     3,     1,     2,     1,     1 },
+       /* 10 */  {   4,     2,     5,     3,     1,     2,     1,     1 },
+       /* 11 */  {   4,     3,     5,     3,     1,     2,     1,     1 },
+       /* 12 */  {   4,     4,     5,     2,     1,     2,     1,     1 },
+       /* 13 */  {   3,     3,   MS_NA, MS_NA, MS_A,    3,   MS_A,    2 },
+       /* 14 */  {   4,     4,   MS_NA, MS_NA, MS_A,    3,   MS_A,    2 },
+       /* 15 */  {   5,     5,   MS_NA, MS_NA, MS_A,    3,   MS_A,    2 },
+       /* 16 */  {   6,     6,   MS_NA, MS_NA, MS_A,    2,   MS_A,    2 },
+       /* 17 */  {   7,     7,   MS_NA, MS_NA, MS_A,    1,     0,     2 },
+       /* 18 */  {   8,     8,   MS_NA, MS_NA,   0,     0,     0,     2 },
+       /* 19 */  {   6,     2,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 20 */  {   6,     3,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 21 */  {   6,     4,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 22 */  {   6,     4,   MS_NA,   2,   MS_B,    2,   MS_C,    1 },
+       /* 23 */  {   6,     6,   MS_NA,   2,   MS_B,    2,   MS_C,    1 },
+       /* 24 */  {   8,     2,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 25 */  {   8,     3,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 26 */  {   8,     4,   MS_NA,   3,   MS_B,    2,   MS_C,    1 },
+       /* 27 */  {   8,     4,   MS_NA,   2,   MS_B,    2,   MS_C,    1 },
+       /* 28 */  {   8,     6,   MS_NA,   2,   MS_B,    2,   MS_C,    1 },
+       /* 29 */  {   8,     8,   MS_NA,   2,   MS_B,    2,   MS_C,    1 },
+       /* 30 */  {   5,     1,     6,     2,     1,     1,     1,     1 },
+       /* 31 */  {   5,     2,     6,     2,     1,     1,     1,     1 },
+       /* 32 */  {   5,     3,     6,     2,     1,     1,     1,     1 },
+       /* 33 */  {   5,     4,     6,     2,     1,     1,     1,     1 },
+       /* 34 */  {   5,     5,     6,     2,     1,     1,     1,     1 },
+       /* 35 */  {   5,     1,     6,     2,     1, 1 + MS_TO, 1,     1 },
+       /* 36 */  {   5,     2,     6,     2,     1, 1 + MS_TO, 1,     1 },
+       /* 37 */  {   5,     3,     6,     2,     1, 1 + MS_TO, 1,     1 },
+       /* 38 */  {   5,     4,     6,     2,     1, 1 + MS_TO, 1,     1 },
+       /* 39 */  {   5,     5,     6,     2,     1, 1 + MS_TO, 1,     1 },
+       /* 40 */  {   6,     1,     7,     1,     1,     1,   MS_TO,   1 },
+       /* 41 */  {   6,     2,     7,     1,     1,     1,   MS_TO,   1 },
+       /* 42 */  {   6,     3,     7,     1,     1,     1,   MS_TO,   1 },
+       /* 43 */  {   6,     4,     7,     1,     1,     1,   MS_TO,   1 },
+       /* 44 */  {   6,     5,     7,     1,     1,     1,   MS_TO,   1 },
+       /* 45 */  {   6,     6,     7,     1,     1,     1,   MS_TO,   1 },
 };
 
 static char *set_flag_chars(char *buf, uint8_t val, char set_char, char 
unset_char = 0)

-- 
To view, visit https://gerrit.osmocom.org/4072
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1ef2eb99c517f25e7d1e71b985a3e0eb3879eb2c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <[email protected]>

Reply via email to