bts: Move rcv_imm_ass_cnf into the bts code
This commit is contained in:
parent
7292373f92
commit
40cfaa6837
39
src/bts.cpp
39
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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 "
|
||||
|
|
Loading…
Reference in New Issue