bts: Move rcv_imm_ass_cnf into the bts code
diff --git a/src/bts.cpp b/src/bts.cpp
index cc53f25..0e45188 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -291,6 +291,45 @@
 	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 4d6b664..25c6473 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -168,6 +168,8 @@
 
 	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 4fe5067..f5a0ee6 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -126,8 +126,6 @@
 	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 7e4ee13..00afa86 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -1002,43 +1002,3 @@
 	}
 }
 
-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 1dac5dd..f759330 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -223,8 +223,7 @@
 	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 "