ip.access: add nanoBTS channel combination constraints
This commit is contained in:
parent
0603c9d9e5
commit
d6575f9d29
|
@ -1755,7 +1755,8 @@ static int verify_chan_comb(struct gsm_bts_trx_ts *ts, u_int8_t chan_comb)
|
||||||
|
|
||||||
/* As it turns out, the BS-11 has some very peculiar restrictions
|
/* As it turns out, the BS-11 has some very peculiar restrictions
|
||||||
* on the channel combinations it allows */
|
* on the channel combinations it allows */
|
||||||
if (ts->trx->bts->type == GSM_BTS_TYPE_BS11) {
|
switch (ts->trx->bts->type) {
|
||||||
|
case GSM_BTS_TYPE_BS11:
|
||||||
switch (chan_comb) {
|
switch (chan_comb) {
|
||||||
case NM_CHANC_TCHHalf:
|
case NM_CHANC_TCHHalf:
|
||||||
case NM_CHANC_TCHHalf2:
|
case NM_CHANC_TCHHalf2:
|
||||||
|
@ -1801,6 +1802,83 @@ static int verify_chan_comb(struct gsm_bts_trx_ts *ts, u_int8_t chan_comb)
|
||||||
/* FIXME: only one CBCH allowed per cell */
|
/* FIXME: only one CBCH allowed per cell */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case GSM_BTS_TYPE_NANOBTS:
|
||||||
|
switch (ts->nr) {
|
||||||
|
case 0:
|
||||||
|
if (ts->trx->nr == 0) {
|
||||||
|
/* only on TRX0 */
|
||||||
|
switch (chan_comb) {
|
||||||
|
case NM_CHANC_BCCH:
|
||||||
|
case NM_CHANC_mainBCCH:
|
||||||
|
case NM_CHANC_BCCHComb:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (chan_comb) {
|
||||||
|
case NM_CHANC_TCHFull:
|
||||||
|
case NM_CHANC_TCHHalf:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_TCHHalf:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (ts->trx->nr == 0) {
|
||||||
|
switch (chan_comb) {
|
||||||
|
case NM_CHANC_SDCCH_CBCH:
|
||||||
|
if (ts->trx->ts[0].nm_chan_comb ==
|
||||||
|
NM_CHANC_mainBCCH)
|
||||||
|
return 0;
|
||||||
|
return -EINVAL;
|
||||||
|
case NM_CHANC_SDCCH:
|
||||||
|
case NM_CHANC_TCHFull:
|
||||||
|
case NM_CHANC_TCHHalf:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_TCHHalf:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_PDCH:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (chan_comb) {
|
||||||
|
case NM_CHANC_SDCCH:
|
||||||
|
case NM_CHANC_TCHFull:
|
||||||
|
case NM_CHANC_TCHHalf:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_TCHHalf:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
switch (chan_comb) {
|
||||||
|
case NM_CHANC_TCHFull:
|
||||||
|
case NM_CHANC_TCHHalf:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_TCHHalf:
|
||||||
|
return 0;
|
||||||
|
case NM_CHANC_IPAC_PDCH:
|
||||||
|
case NM_CHANC_IPAC_TCHFull_PDCH:
|
||||||
|
if (ts->trx->nr == 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return -EINVAL;
|
||||||
|
default:
|
||||||
|
/* unknown BTS type */
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue