pdch: Move the dispatch of gprs_rlcmac_rcv_block into the pdch
diff --git a/src/bts.cpp b/src/bts.cpp
index 83c5029..af1a819 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -340,8 +340,35 @@
llist_add(&pag->list, &paging_list);
}
+/* received RLC/MAC block from L1 */
int gprs_rlcmac_pdch::rcv_block(uint8_t *data, uint8_t len, uint32_t fn, int8_t rssi)
{
- return gprs_rlcmac_rcv_block(trx->bts->bts_data(),
- trx->trx_no, ts_no, data, len, fn, rssi);
+ struct gprs_rlcmac_bts *bts = trx->bts->bts_data();
+ unsigned payload = data[0] >> 6;
+ uint8_t trx_no = trx->trx_no;
+ bitvec *block;
+ int rc = 0;
+
+ switch (payload) {
+ case GPRS_RLCMAC_DATA_BLOCK:
+ rc = gprs_rlcmac_rcv_data_block_acknowledged(bts, trx_no, ts_no, data,
+ len, rssi);
+ break;
+ case GPRS_RLCMAC_CONTROL_BLOCK:
+ block = bitvec_alloc(len);
+ if (!block)
+ return -ENOMEM;
+ bitvec_unpack(block, data);
+ rc = gprs_rlcmac_rcv_control_block(bts, block, trx_no, ts_no, fn);
+ bitvec_free(block);
+ break;
+ case GPRS_RLCMAC_CONTROL_BLOCK_OPT:
+ LOGP(DRLCMAC, LOGL_NOTICE, "GPRS_RLCMAC_CONTROL_BLOCK_OPT block payload is not supported.\n");
+ break;
+ default:
+ LOGP(DRLCMAC, LOGL_NOTICE, "Unknown RLCMAC block payload(%u).\n", payload);
+ rc = -EINVAL;
+ }
+
+ return rc;
}