aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-26 19:49:16 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-30 21:24:11 +0100
commit40cfaa6837827bc1b5812bca17aa043b7ec67cf7 (patch)
treeae8df189b9ec3dcd86d40610dddac27091ba580d
parent7292373f922da0561808a3dbdeef2710c7181c97 (diff)
bts: Move rcv_imm_ass_cnf into the bts code
-rw-r--r--src/bts.cpp39
-rw-r--r--src/bts.h2
-rw-r--r--src/gprs_rlcmac.h2
-rw-r--r--src/gprs_rlcmac_data.cpp40
-rw-r--r--src/pcu_l1_if.cpp3
5 files changed, 42 insertions, 44 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index cc53f254..0e451889 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -291,6 +291,45 @@ int BTS::tfi_find_free(enum gprs_rlcmac_tbf_direction dir,
return -1;
}
+int BTS::rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn)
+{
+ struct gprs_rlcmac_tbf *tbf;
+ uint8_t plen;
+ uint32_t tlli;
+
+ /* move to IA Rest Octets */
+ plen = data[0] >> 2;
+ data += 1 + plen;
+
+ if ((*data & 0xf0) != 0xd0) {
+ LOGP(DRLCMAC, LOGL_ERROR, "Got IMM.ASS confirm, but rest "
+ "octets do not start with bit sequence 'HH01' "
+ "(Packet Downlink Assignment)\n");
+ return -EINVAL;
+ }
+
+ /* get TLLI from downlink assignment */
+ tlli = (*data++) << 28;
+ tlli |= (*data++) << 20;
+ tlli |= (*data++) << 12;
+ tlli |= (*data++) << 4;
+ tlli |= (*data++) >> 4;
+
+ tbf = tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF);
+ if (!tbf) {
+ LOGP(DRLCMAC, LOGL_ERROR, "Got IMM.ASS confirm, but TLLI=%08x "
+ "does not exit\n", tlli);
+ return -EINVAL;
+ }
+
+ LOGP(DRLCMAC, LOGL_DEBUG, "Got IMM.ASS confirm for TLLI=%08x\n", tlli);
+
+ if (tbf->dir.dl.wait_confirm)
+ tbf_timer_start(tbf, 0, Tassign_agch);
+
+ return 0;
+}
+
/*
* PDCH code below. TODO: move to a separate file
diff --git a/src/bts.h b/src/bts.h
index 4d6b6645..25c6473e 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -168,6 +168,8 @@ public:
int tfi_find_free(enum gprs_rlcmac_tbf_direction dir, uint8_t *_trx, int8_t use_trx);
+ int rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn);
+
private:
int m_cur_fn;
struct gprs_rlcmac_bts m_bts;
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index 4fe5067a..f5a0ee69 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -126,8 +126,6 @@ int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
uint8_t trx, uint8_t ts, uint16_t arfcn,
uint32_t fn, uint8_t block_nr);
-int gprs_rlcmac_imm_ass_cnf(BTS *bts, uint8_t *data, uint32_t fn);
-
extern "C" {
#endif
int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index 7e4ee132..00afa862 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -1002,43 +1002,3 @@ void gprs_rlcmac_trigger_downlink_assignment(
}
}
-int gprs_rlcmac_imm_ass_cnf(BTS *bts, uint8_t *data, uint32_t fn)
-{
- struct gprs_rlcmac_tbf *tbf;
- uint8_t plen;
- uint32_t tlli;
-
- /* move to IA Rest Octets */
- plen = data[0] >> 2;
- data += 1 + plen;
-
- if ((*data & 0xf0) != 0xd0) {
- LOGP(DRLCMAC, LOGL_ERROR, "Got IMM.ASS confirm, but rest "
- "octets do not start with bit sequence 'HH01' "
- "(Packet Downlink Assignment)\n");
- return -EINVAL;
- }
-
- /* get TLLI from downlink assignment */
- tlli = (*data++) << 28;
- tlli |= (*data++) << 20;
- tlli |= (*data++) << 12;
- tlli |= (*data++) << 4;
- tlli |= (*data++) >> 4;
-
- tbf = bts->tbf_by_tlli(tlli, GPRS_RLCMAC_DL_TBF);
- if (!tbf) {
- LOGP(DRLCMAC, LOGL_ERROR, "Got IMM.ASS confirm, but TLLI=%08x "
- "does not exit\n", tlli);
- return -EINVAL;
- }
-
- LOGP(DRLCMAC, LOGL_DEBUG, "Got IMM.ASS confirm for TLLI=%08x\n", tlli);
-
- if (tbf->dir.dl.wait_confirm) {
- tbf_timer_start(tbf, 0, Tassign_agch);
- }
-
- return 0;
-}
-
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 1dac5dd3..f759330d 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -223,8 +223,7 @@ static int pcu_rx_data_cnf(struct gsm_pcu_if_data *data_cnf)
switch (data_cnf->sapi) {
case PCU_IF_SAPI_PCH:
if (data_cnf->data[2] == 0x3f)
- rc = gprs_rlcmac_imm_ass_cnf(BTS::main_bts(),
- data_cnf->data, data_cnf->fn);
+ BTS::main_bts()->rcv_imm_ass_cnf(data_cnf->data, data_cnf->fn);
break;
default:
LOGP(DL1IF, LOGL_ERROR, "Received PCU data confirm with "