bts: Move rcv_imm_ass_cnf into the bts code

This commit is contained in:
Holger Hans Peter Freyther 2013-10-26 19:49:16 +02:00
parent 7292373f92
commit 40cfaa6837
5 changed files with 42 additions and 44 deletions

View File

@ -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

View File

@ -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;

View File

@ -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,

View File

@ -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;
}

View File

@ -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 "