RBS2000: Automatically connect/start/configure/enable most MOs
This commit is contained in:
parent
b66af0055a
commit
e235c011a7
|
@ -84,6 +84,7 @@ enum signal_nm {
|
|||
S_NM_TEST_REP, /* GSM 12.21 Test Report */
|
||||
S_NM_STATECHG_OPER, /* Operational State changed*/
|
||||
S_NM_STATECHG_ADM, /* Administrative State changed */
|
||||
S_NM_OM2K_CONF_RES, /* OM2K Configuration Result */
|
||||
};
|
||||
|
||||
/* SS_LCHAN signals */
|
||||
|
@ -187,6 +188,14 @@ struct nm_statechg_signal_data {
|
|||
struct abis_om2k_mo *om2k_mo;
|
||||
};
|
||||
|
||||
struct nm_om2k_signal_data {
|
||||
struct gsm_bts *bts;
|
||||
void *obj;
|
||||
struct abis_om2k_mo *om2k_mo;
|
||||
|
||||
uint8_t accordance_ind;
|
||||
};
|
||||
|
||||
struct nm_nack_signal_data {
|
||||
struct msgb *msg;
|
||||
uint8_t mt;
|
||||
|
|
|
@ -1400,11 +1400,14 @@ static int process_conf_res(struct gsm_bts *bts, struct msgb *msg)
|
|||
{
|
||||
struct abis_om2k_hdr *o2h = msgb_l2(msg);
|
||||
uint16_t msg_type = ntohs(o2h->msg_type);
|
||||
struct nm_om2k_signal_data nsd;
|
||||
struct tlv_parsed tp;
|
||||
uint8_t acc;
|
||||
unsigned int log_level;
|
||||
int ret;
|
||||
|
||||
memset(&nsd, 0, sizeof(nsd));
|
||||
|
||||
abis_om2k_msg_tlv_parse(&tp, o2h);
|
||||
if (!TLVP_PRESENT(&tp, OM2K_DEI_ACCORDANCE_IND))
|
||||
return -EIO;
|
||||
|
@ -1427,6 +1430,12 @@ static int process_conf_res(struct gsm_bts *bts, struct msgb *msg)
|
|||
get_value_string(om2k_msgcode_vals, msg_type),
|
||||
get_value_string(om2k_accordance_strings, acc));
|
||||
|
||||
nsd.bts = bts;
|
||||
nsd.obj = mo2obj(bts, &o2h->mo);
|
||||
nsd.om2k_mo = &o2h->mo;
|
||||
nsd.accordance_ind = acc;
|
||||
dispatch_signal(SS_NM, S_NM_OM2K_CONF_RES, &nsd);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1490,42 +1499,42 @@ int abis_om2k_rcvmsg(struct msgb *msg)
|
|||
rc = abis_om2k_cal_time_resp(bts);
|
||||
break;
|
||||
case OM2K_MSGT_FAULT_REP:
|
||||
process_mo_state(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_FAULT_REP_ACK);
|
||||
process_mo_state(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_NEGOT_REQ:
|
||||
rc = om2k_rx_negot_req(msg);
|
||||
break;
|
||||
case OM2K_MSGT_START_RES:
|
||||
process_mo_state(bts, msg);
|
||||
rc = om2k_rx_start_res(msg);
|
||||
process_mo_state(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_OP_INFO_ACK:
|
||||
rc = om2k_rx_op_info_ack(msg);
|
||||
break;
|
||||
case OM2K_MSGT_IS_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_IS_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_CON_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_CON_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_TX_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_TX_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_RX_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_RX_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_TS_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_TS_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_TF_CONF_RES:
|
||||
process_conf_res(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_TF_CONF_RES_ACK);
|
||||
process_conf_res(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_CONNECT_COMPL:
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_RESET_CMD);
|
||||
|
@ -1534,16 +1543,16 @@ int abis_om2k_rcvmsg(struct msgb *msg)
|
|||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_START_REQ);
|
||||
break;
|
||||
case OM2K_MSGT_ENABLE_RES:
|
||||
process_mo_state(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_ENABLE_RES_ACK);
|
||||
process_mo_state(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_DISABLE_RES:
|
||||
process_mo_state(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_DISABLE_RES_ACK);
|
||||
process_mo_state(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_TEST_RES:
|
||||
process_mo_state(bts, msg);
|
||||
rc = abis_om2k_tx_simple(bts, &o2h->mo, OM2K_MSGT_TEST_RES_ACK);
|
||||
process_mo_state(bts, msg);
|
||||
break;
|
||||
case OM2K_MSGT_STATUS_RESP:
|
||||
process_mo_state(bts, msg);
|
||||
|
|
|
@ -161,13 +161,12 @@ static void nm_statechg_evt(unsigned int signal,
|
|||
case OM2K_MO_CLS_IS:
|
||||
if (nsd->new_state->availability == OM2K_MO_S_ENABLED) {
|
||||
/* IS is enabled, we can proceed with TRXC/RX/TX/TS */
|
||||
break;
|
||||
}
|
||||
if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
|
||||
nsd->new_state->availability == OM2K_MO_S_DISABLED)
|
||||
if (nsd->new_state->operational != NM_OPSTATE_ENABLED)
|
||||
break;
|
||||
/* IS has started, we can configure + enable it */
|
||||
abis_om2k_tx_is_conf_req(nsd->bts);
|
||||
abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
|
||||
break;
|
||||
case OM2K_MO_CLS_TF:
|
||||
if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
|
||||
|
@ -176,12 +175,10 @@ static void nm_statechg_evt(unsigned int signal,
|
|||
if (nsd->new_state->availability == OM2K_MO_S_STARTED) {
|
||||
/* TF has started, configure + enable it */
|
||||
abis_om2k_tx_is_conf_req(nsd->bts);
|
||||
abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
|
||||
}
|
||||
break;
|
||||
case OM2K_MO_CLS_TRXC:
|
||||
if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
|
||||
nsd->new_state->availability != OM2K_MO_S_STARTED)
|
||||
if (nsd->new_state->availability != OM2K_MO_S_STARTED)
|
||||
break;
|
||||
/* TRXC is started, connect the TX and RX objects */
|
||||
memcpy(&mo, nsd->om2k_mo, sizeof(mo));
|
||||
|
@ -196,7 +193,6 @@ static void nm_statechg_evt(unsigned int signal,
|
|||
break;
|
||||
/* RX is started, configure + enable it */
|
||||
abis_om2k_tx_rx_conf_req(nsd->obj);
|
||||
abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
|
||||
break;
|
||||
case OM2K_MO_CLS_TX:
|
||||
if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
|
||||
|
@ -204,6 +200,18 @@ static void nm_statechg_evt(unsigned int signal,
|
|||
break;
|
||||
/* RX is started, configure + enable it */
|
||||
abis_om2k_tx_tx_conf_req(nsd->obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void nm_conf_res(struct nm_om2k_signal_data *nsd)
|
||||
{
|
||||
switch (nsd->om2k_mo->class) {
|
||||
case OM2K_MO_CLS_IS:
|
||||
case OM2K_MO_CLS_TF:
|
||||
case OM2K_MO_CLS_RX:
|
||||
case OM2K_MO_CLS_TX:
|
||||
/* If configuration was a success, enable it */
|
||||
abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
|
||||
break;
|
||||
}
|
||||
|
@ -219,6 +227,10 @@ static int nm_sig_cb(unsigned int subsys, unsigned int signal,
|
|||
case S_NM_STATECHG_OPER:
|
||||
case S_NM_STATECHG_ADM:
|
||||
nm_statechg_evt(signal, signal_data);
|
||||
break;
|
||||
case S_NM_OM2K_CONF_RES:
|
||||
nm_conf_res(signal_data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue