diff options
-rw-r--r-- | src/bts.cpp | 31 | ||||
-rw-r--r-- | src/gprs_rlcmac.cpp | 33 | ||||
-rw-r--r-- | src/gprs_rlcmac.h | 4 |
3 files changed, 29 insertions, 39 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 83c50297..af1a8194 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -340,8 +340,35 @@ void gprs_rlcmac_pdch::add_paging(struct gprs_rlcmac_paging *pag) 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; } diff --git a/src/gprs_rlcmac.cpp b/src/gprs_rlcmac.cpp index 4adcfbac..62e8ea7b 100644 --- a/src/gprs_rlcmac.cpp +++ b/src/gprs_rlcmac.cpp @@ -168,39 +168,6 @@ int tfi_find_free(struct gprs_rlcmac_bts *bts, enum gprs_rlcmac_tbf_direction di return -1; } -/* received RLC/MAC block from L1 */ -int gprs_rlcmac_rcv_block(struct gprs_rlcmac_bts *bts, - uint8_t trx, uint8_t ts, uint8_t *data, uint8_t len, - uint32_t fn, int8_t rssi) -{ - unsigned payload = data[0] >> 6; - bitvec *block; - int rc = 0; - - switch (payload) { - case GPRS_RLCMAC_DATA_BLOCK: - rc = gprs_rlcmac_rcv_data_block_acknowledged(bts, trx, ts, 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, ts, 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; -} - /* Send Uplink unit-data to SGSN. */ int gprs_rlcmac_tx_ul_ud(gprs_rlcmac_tbf *tbf) { diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h index d06a4860..081271d8 100644 --- a/src/gprs_rlcmac.h +++ b/src/gprs_rlcmac.h @@ -92,10 +92,6 @@ enum gprs_rlcmac_block_type { GPRS_RLCMAC_RESERVED = 0x3 }; -int gprs_rlcmac_rcv_block(struct gprs_rlcmac_bts *bts, - uint8_t trx, uint8_t ts, uint8_t *data, uint8_t len, - uint32_t fn, int8_t rssi); - int gprs_rlcmac_tx_ul_ud(gprs_rlcmac_tbf *tbf); int gprs_rlcmac_poll_timeout(struct gprs_rlcmac_bts *bts, struct gprs_rlcmac_tbf *tbf); |