oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES
Change-Id: I88c6c6af18be054bd152832e60c8afbbd16098a3 Depends: libosmocore.git Ia4208e10d61843dd6ae77398f6624c918dc81ea4 Depends: libosmocore.git I85316af9b57e8113077305798cb2d82a24e48e00
This commit is contained in:
parent
852b2cbadc
commit
0978d1df71
|
@ -130,6 +130,9 @@ struct gsm_gprs_cell {
|
|||
uint16_t bvci;
|
||||
uint8_t timer[11];
|
||||
struct gprs_rlc_cfg rlc_cfg;
|
||||
struct {
|
||||
uint32_t gprs_codings; /* see NM_IPAC_F_GPRS_CODING_* flags */
|
||||
} support;
|
||||
};
|
||||
|
||||
/* Struct that holds one OML-Address (Address of the BSC) */
|
||||
|
@ -319,6 +322,7 @@ struct gsm_bts {
|
|||
|
||||
struct {
|
||||
uint8_t ciphers; /* flags A5/1==0x1, A5/2==0x2, A5/3==0x4 */
|
||||
uint8_t max_ta; /* maximum timing advance */
|
||||
} support;
|
||||
struct {
|
||||
uint8_t tc4_ctr;
|
||||
|
|
|
@ -44,6 +44,12 @@ struct gsm_bts_trx {
|
|||
/* The associated PHY instance */
|
||||
struct phy_instance *pinst;
|
||||
|
||||
struct {
|
||||
uint32_t freq_bands; /* see NM_IPAC_F_FREQ_BAND_* flags */
|
||||
uint32_t chan_types; /* see NM_IPAC_F_CHANT_* flags */
|
||||
uint32_t chan_modes; /* see NM_IPAC_F_CHANM_* flags */
|
||||
} support;
|
||||
|
||||
struct gsm_bts_trx_ts ts[TRX_NR_TS];
|
||||
};
|
||||
|
||||
|
|
|
@ -59,6 +59,52 @@
|
|||
|
||||
#define MAX_VERSION_LENGTH 64
|
||||
|
||||
/* NM_IPAC_F_CHANT_* mask for NM_IPAC_EIE_CHAN_TYPES (common) */
|
||||
#define NM_IPAC_MASK_CHANT_COMMON \
|
||||
(NM_IPAC_F_CHANT_TCHF | \
|
||||
NM_IPAC_F_CHANT_TCHH | \
|
||||
NM_IPAC_F_CHANT_SDCCH8 | \
|
||||
NM_IPAC_F_CHANT_BCCH | \
|
||||
NM_IPAC_F_CHANT_BCCH_SDCCH4)
|
||||
/* NM_IPAC_F_CHANM_SPEECH_* mask for NM_IPAC_EIE_CHAN_MODES */
|
||||
#define NM_IPAC_MASK_CHANM_SPEECH \
|
||||
(NM_IPAC_F_CHANM_SPEECH_FS | \
|
||||
NM_IPAC_F_CHANM_SPEECH_EFS | \
|
||||
NM_IPAC_F_CHANM_SPEECH_AFS | \
|
||||
NM_IPAC_F_CHANM_SPEECH_HS | \
|
||||
NM_IPAC_F_CHANM_SPEECH_AHS)
|
||||
/* NM_IPAC_F_CHANM_CSD_NT_* mask for NM_IPAC_EIE_CHAN_MODES */
|
||||
#define NM_IPAC_MASK_CHANM_CSD_NT \
|
||||
(NM_IPAC_F_CHANM_CSD_NT_4k8 | \
|
||||
NM_IPAC_F_CHANM_CSD_NT_9k6 | \
|
||||
NM_IPAC_F_CHANM_CSD_NT_14k4)
|
||||
/* NM_IPAC_F_CHANM_CSD_T_* mask for NM_IPAC_EIE_CHAN_MODES */
|
||||
#define NM_IPAC_MASK_CHANM_CSD_T \
|
||||
(NM_IPAC_F_CHANM_CSD_T_1200_75 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_600 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_1k2 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_2k4 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_4k8 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_9k6 | \
|
||||
NM_IPAC_F_CHANM_CSD_T_14k4)
|
||||
/* NM_IPAC_F_GPRS_CODING_CS[1-4] mask for NM_IPAC_EIE_GPRS_CODING */
|
||||
#define NM_IPAC_MASK_GPRS_CODING_CS \
|
||||
(NM_IPAC_F_GPRS_CODING_CS1 | \
|
||||
NM_IPAC_F_GPRS_CODING_CS2 | \
|
||||
NM_IPAC_F_GPRS_CODING_CS3 | \
|
||||
NM_IPAC_F_GPRS_CODING_CS4)
|
||||
/* NM_IPAC_F_GPRS_CODING_MCS[1-9] mask for NM_IPAC_EIE_GPRS_CODING */
|
||||
#define NM_IPAC_MASK_GPRS_CODING_MCS \
|
||||
(NM_IPAC_F_GPRS_CODING_MCS1 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS2 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS3 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS4 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS5 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS6 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS7 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS8 | \
|
||||
NM_IPAC_F_GPRS_CODING_MCS9)
|
||||
|
||||
enum gsm_bts_trx_ts_flags {
|
||||
TS_F_PDCH_ACTIVE = 0x1000,
|
||||
TS_F_PDCH_ACT_PENDING = 0x2000,
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#include <osmo-bts/osmux.h>
|
||||
#include <osmo-bts/notification.h>
|
||||
|
||||
#define MAX_TA_DEF 63 /* default max Timing Advance value */
|
||||
#define MIN_QUAL_RACH 50 /* minimum link quality (in centiBels) for Access Bursts */
|
||||
#define MIN_QUAL_NORM -5 /* minimum link quality (in centiBels) for Normal Bursts */
|
||||
|
||||
|
@ -344,7 +345,7 @@ int bts_init(struct gsm_bts *bts)
|
|||
bts->bsic_configured = false;
|
||||
bts->load.ccch.load_ind_period = 112;
|
||||
bts->rtp_jitter_buf_ms = 100;
|
||||
bts->max_ta = 63;
|
||||
bts->max_ta = MAX_TA_DEF;
|
||||
bts->ny1 = 4;
|
||||
bts->ny2 = 4;
|
||||
bts->t3105_ms = 300;
|
||||
|
@ -384,6 +385,9 @@ int bts_init(struct gsm_bts *bts)
|
|||
osmo_bts_set_feature(bts->features, BTS_FEAT_IPV6_NSVC);
|
||||
osmo_bts_set_feature(bts->features, BTS_FEAT_PAGING_COORDINATION);
|
||||
|
||||
/* Maximum TA supported by the PHY (can be overridden by PHY specific code) */
|
||||
bts->support.max_ta = MAX_TA_DEF;
|
||||
|
||||
rc = bts_model_init(bts);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
|
|
@ -217,6 +217,68 @@ static inline void add_bts_feat(struct msgb *msg, const struct gsm_bts *bts)
|
|||
msgb_tl16v_put(msg, NM_ATT_MANUF_ID, len, bts->features->data);
|
||||
}
|
||||
|
||||
/* Add ip.access feature flags for the given MO */
|
||||
static int add_att_ipacc_features(struct msgb *msg, const struct gsm_abis_mo *mo)
|
||||
{
|
||||
const struct gsm_bts *bts = mo->bts;
|
||||
const struct gsm_bts_trx *trx;
|
||||
uint32_t val;
|
||||
uint8_t *len;
|
||||
|
||||
msgb_v_put(msg, NM_ATT_IPACC_SUPP_FEATURES);
|
||||
|
||||
/* We don't know the length yet, so we update it later. */
|
||||
len = msgb_put(msg, 2);
|
||||
|
||||
switch (mo->obj_class) {
|
||||
case NM_OC_BTS:
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_MAX_TA, 1); /* TL16 */
|
||||
msgb_put_u8(msg, (bts->support.max_ta >> 0) & 0xff);
|
||||
break;
|
||||
case NM_OC_RADIO_CARRIER:
|
||||
trx = container_of(mo, struct gsm_bts_trx, mo);
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_FREQ_BANDS, 1); /* TL16 */
|
||||
msgb_put_u8(msg, (trx->support.freq_bands >> 0) & 0xff);
|
||||
break;
|
||||
case NM_OC_BASEB_TRANSC:
|
||||
trx = container_of(mo, struct gsm_bts_trx, bb_transc.mo);
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_CIPH_ALGOS, 1); /* TL16 */
|
||||
msgb_put_u8(msg, bts->support.ciphers); /* LSB is A5/1 */
|
||||
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_CHAN_TYPES, 2); /* TL16 */
|
||||
msgb_put_u8(msg, (trx->support.chan_types >> 0) & 0xff);
|
||||
msgb_put_u8(msg, (trx->support.chan_types >> 8) & 0xff);
|
||||
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_CHAN_MODES, 3); /* TL16 */
|
||||
msgb_put_u8(msg, (trx->support.chan_modes >> 0) & 0xff);
|
||||
msgb_put_u8(msg, (trx->support.chan_modes >> 8) & 0xff);
|
||||
msgb_put_u8(msg, (trx->support.chan_modes >> 16) & 0xff);
|
||||
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_RTP_FEATURES, 1); /* TL16 */
|
||||
val = NM_IPAC_F_RTP_FEAT_IR_64k;
|
||||
msgb_put_u8(msg, (val >> 0) & 0xff);
|
||||
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_RSL_FEATURES, 1); /* TL16 */
|
||||
val = NM_IPAC_F_RSL_FEAT_DYN_PDCH_ACT
|
||||
| NM_IPAC_F_RSL_FEAT_RTP_PT2;
|
||||
msgb_put_u8(msg, (val >> 0) & 0xff);
|
||||
break;
|
||||
case NM_OC_GPRS_CELL:
|
||||
msgb_tv16_put(msg, NM_IPAC_EIE_GPRS_CODING, 2); /* TL16 */
|
||||
msgb_put_u8(msg, (bts->gprs.cell.support.gprs_codings >> 0) & 0xff);
|
||||
msgb_put_u8(msg, (bts->gprs.cell.support.gprs_codings >> 8) & 0xff);
|
||||
break;
|
||||
default:
|
||||
msgb_get(msg, 1 + 2); /* TL16 */
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
/* Finally, update the length */
|
||||
osmo_store16be((uint16_t)(msg->tail - (len + 2)), len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* send 3GPP TS 52.021 §8.11.2 Get Attribute Response */
|
||||
static int oml_tx_attr_resp(const struct gsm_abis_mo *mo,
|
||||
const uint8_t *attr, uint16_t attr_len)
|
||||
|
@ -252,6 +314,10 @@ static int oml_tx_attr_resp(const struct gsm_abis_mo *mo,
|
|||
else
|
||||
goto unsupported;
|
||||
break;
|
||||
case NM_ATT_IPACC_SUPP_FEATURES:
|
||||
if (add_att_ipacc_features(nmsg, mo) != 0)
|
||||
goto unsupported;
|
||||
break;
|
||||
default:
|
||||
unsupported:
|
||||
LOGP(DOML, LOGL_ERROR, "%s: O&M Get Attributes [%u], %s is unsupported\n",
|
||||
|
|
|
@ -1426,6 +1426,30 @@ static int info_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp,
|
|||
LOGP(DL1C, LOGL_FATAL, "BTS band %s not supported by hw\n",
|
||||
gsm_band_name(trx->bts->band));
|
||||
|
||||
/* Frequency bands indicated to the BSC */
|
||||
switch (fl1h->hw_info.band_support) {
|
||||
case GSM_BAND_450:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_450;
|
||||
break;
|
||||
case GSM_BAND_480:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_480;
|
||||
break;
|
||||
case GSM_BAND_850:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_850;
|
||||
break;
|
||||
case GSM_BAND_900:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PGSM;
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_EGSM? */
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_RGSM? */
|
||||
break;
|
||||
case GSM_BAND_1800:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_DCS;
|
||||
break;
|
||||
case GSM_BAND_1900:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PCS;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Request the activation */
|
||||
l1if_activate_rf(fl1h, 1);
|
||||
|
||||
|
|
|
@ -89,6 +89,8 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
bts->model_priv = bts_lc15;
|
||||
bts->variant = BTS_OSMO_LITECELL15;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS
|
||||
| NM_IPAC_MASK_GPRS_CODING_MCS;
|
||||
|
||||
/* specific default values for LC15 platform */
|
||||
bts_lc15->led_ctrl_mode = LC15_BTS_LED_CTRL_MODE_DEFAULT;
|
||||
|
@ -126,6 +128,17 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = 0x00; /* updated in info_compl_cb() */
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH;
|
||||
|
||||
trx->nominal_power = 40;
|
||||
trx->power_params.trx_p_max_out_mdBm = to_mdB(trx->bts->c0->nominal_power);
|
||||
return 0;
|
||||
|
|
|
@ -1475,6 +1475,30 @@ static int info_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp,
|
|||
LOGP(DL1C, LOGL_FATAL, "BTS band %s not supported by hw\n",
|
||||
gsm_band_name(trx->bts->band));
|
||||
|
||||
/* Frequency bands indicated to the BSC */
|
||||
switch (fl1h->hw_info.band_support) {
|
||||
case GSM_BAND_450:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_450;
|
||||
break;
|
||||
case GSM_BAND_480:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_480;
|
||||
break;
|
||||
case GSM_BAND_850:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_850;
|
||||
break;
|
||||
case GSM_BAND_900:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PGSM;
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_EGSM? */
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_RGSM? */
|
||||
break;
|
||||
case GSM_BAND_1800:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_DCS;
|
||||
break;
|
||||
case GSM_BAND_1900:
|
||||
trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PCS;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Request the activation */
|
||||
l1if_activate_rf(fl1h, 1);
|
||||
|
||||
|
|
|
@ -88,6 +88,8 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
bts->model_priv = bts_oc2g;
|
||||
bts->variant = BTS_OSMO_OC2G;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS
|
||||
| NM_IPAC_MASK_GPRS_CODING_MCS;
|
||||
/* specific default values for OC2G platform */
|
||||
|
||||
/* TODO(oramadan) MERGE
|
||||
|
@ -127,6 +129,17 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = 0x00; /* updated in info_compl_cb() */
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH;
|
||||
|
||||
trx->nominal_power = 25;
|
||||
trx->power_params.trx_p_max_out_mdBm = to_mdB(trx->bts->c0->nominal_power);
|
||||
return 0;
|
||||
|
|
|
@ -768,6 +768,7 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
bts->variant = BTS_OSMO_OCTPHY;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS;
|
||||
|
||||
/* FIXME: what is the nominal transmit power of the PHY/board? */
|
||||
bts->c0->nominal_power = 15;
|
||||
|
@ -786,6 +787,29 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = NM_IPAC_F_FREQ_BAND_PGSM
|
||||
| NM_IPAC_F_FREQ_BAND_EGSM
|
||||
| NM_IPAC_F_FREQ_BAND_RGSM
|
||||
| NM_IPAC_F_FREQ_BAND_DCS
|
||||
| NM_IPAC_F_FREQ_BAND_PCS
|
||||
| NM_IPAC_F_FREQ_BAND_850
|
||||
| NM_IPAC_F_FREQ_BAND_480
|
||||
| NM_IPAC_F_FREQ_BAND_450;
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
#if defined(cOCTVC1_GSM_LOGICAL_CHANNEL_COMBINATION_ENUM_FCCH_SCH_BCCH_CCCH_SDCCH4_CBCH_SACCHC4)
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
#endif
|
||||
#if defined(cOCTVC1_GSM_LOGICAL_CHANNEL_COMBINATION_ENUM_SDCCH8_CBCH_SACCHC8)
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
#endif
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_F_CHANM_SPEECH_FS
|
||||
| NM_IPAC_F_CHANM_SPEECH_HS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1938,5 +1938,27 @@ int bts_model_phy_link_open(struct phy_link *plink)
|
|||
hdl = pinst->u.sysmobts.hdl;
|
||||
osmo_strlcpy(bts->sub_model, sysmobts_model(hdl->hw_info.model_nr, hdl->hw_info.trx_nr), sizeof(bts->sub_model));
|
||||
|
||||
/* Frequency bands indicated to the BSC */
|
||||
for (unsigned int i = 0; i < sizeof(hdl->hw_info.band_support) * 8; i++) {
|
||||
if (~hdl->hw_info.band_support & (1 << i))
|
||||
continue;
|
||||
switch (1 << i) {
|
||||
case GSM_BAND_850:
|
||||
pinst->trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_850;
|
||||
break;
|
||||
case GSM_BAND_900:
|
||||
pinst->trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PGSM;
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_EGSM? */
|
||||
/* XXX: does GSM_BAND_900 include NM_IPAC_F_FREQ_BAND_RGSM? */
|
||||
break;
|
||||
case GSM_BAND_1800:
|
||||
pinst->trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_DCS;
|
||||
break;
|
||||
case GSM_BAND_1900:
|
||||
pinst->trx->support.freq_bands |= NM_IPAC_F_FREQ_BAND_PCS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,8 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
bts->variant = BTS_OSMO_SYSMO;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS
|
||||
| NM_IPAC_MASK_GPRS_CODING_MCS;
|
||||
|
||||
if (stat(SYSMOBTS_RF_LOCK_PATH, &st) == 0) {
|
||||
LOGP(DL1C, LOGL_NOTICE, "Not starting BTS due to RF_LOCK file present\n");
|
||||
|
@ -95,6 +97,17 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = 0x00; /* updated in bts_model_phy_link_open() */
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -132,6 +132,8 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
bts->model_priv = bts_trx;
|
||||
bts->variant = BTS_OSMO_TRX;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3) | CIPHER_A5(4);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS
|
||||
| NM_IPAC_MASK_GPRS_CODING_MCS;
|
||||
|
||||
/* The nominal value for each TRX is later overwritten through VTY cmd
|
||||
* 'nominal-tx-power' if present, otherwise through TRXC cmd NOMTXPOWER.
|
||||
|
@ -173,6 +175,28 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = NM_IPAC_F_FREQ_BAND_PGSM
|
||||
| NM_IPAC_F_FREQ_BAND_EGSM
|
||||
| NM_IPAC_F_FREQ_BAND_RGSM
|
||||
| NM_IPAC_F_FREQ_BAND_DCS
|
||||
| NM_IPAC_F_FREQ_BAND_PCS
|
||||
| NM_IPAC_F_FREQ_BAND_850
|
||||
| NM_IPAC_F_FREQ_BAND_480
|
||||
| NM_IPAC_F_FREQ_BAND_450;
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH
|
||||
| NM_IPAC_MASK_CHANM_CSD_NT
|
||||
| NM_IPAC_MASK_CHANM_CSD_T;
|
||||
/* TODO: NM_IPAC_F_CHANM_CSD_T_14k4 (see OS#6167) */
|
||||
trx->support.chan_modes &= ~NM_IPAC_F_CHANM_CSD_T_14k4;
|
||||
|
||||
/* The nominal value for each TRX is later overwritten through VTY cmd
|
||||
* 'nominal-tx-power' if present, otherwise through TRXC cmd NOMTXPOWER.
|
||||
*/
|
||||
|
|
|
@ -61,6 +61,8 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
bts->model_priv = bts_virt;
|
||||
bts->variant = BTS_OSMO_VIRTUAL;
|
||||
bts->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3);
|
||||
bts->gprs.cell.support.gprs_codings = NM_IPAC_MASK_GPRS_CODING_CS
|
||||
| NM_IPAC_MASK_GPRS_CODING_MCS;
|
||||
|
||||
/* order alphabetically */
|
||||
osmo_bts_set_feature(bts->features, BTS_FEAT_CBCH);
|
||||
|
@ -78,6 +80,28 @@ int bts_model_init(struct gsm_bts *bts)
|
|||
|
||||
int bts_model_trx_init(struct gsm_bts_trx *trx)
|
||||
{
|
||||
/* Frequency bands indicated to the BSC */
|
||||
trx->support.freq_bands = NM_IPAC_F_FREQ_BAND_PGSM
|
||||
| NM_IPAC_F_FREQ_BAND_EGSM
|
||||
| NM_IPAC_F_FREQ_BAND_RGSM
|
||||
| NM_IPAC_F_FREQ_BAND_DCS
|
||||
| NM_IPAC_F_FREQ_BAND_PCS
|
||||
| NM_IPAC_F_FREQ_BAND_850
|
||||
| NM_IPAC_F_FREQ_BAND_480
|
||||
| NM_IPAC_F_FREQ_BAND_450;
|
||||
|
||||
/* Channel types and modes indicated to the BSC */
|
||||
trx->support.chan_types = NM_IPAC_MASK_CHANT_COMMON
|
||||
| NM_IPAC_F_CHANT_BCCH_SDCCH4_CBCH
|
||||
| NM_IPAC_F_CHANT_SDCCH8_CBCH
|
||||
| NM_IPAC_F_CHANT_PDCHF
|
||||
| NM_IPAC_F_CHANT_TCHF_PDCHF;
|
||||
trx->support.chan_modes = NM_IPAC_MASK_CHANM_SPEECH
|
||||
| NM_IPAC_MASK_CHANM_CSD_NT
|
||||
| NM_IPAC_MASK_CHANM_CSD_T;
|
||||
/* TODO: NM_IPAC_F_CHANM_CSD_T_14k4 (see OS#6167) */
|
||||
trx->support.chan_modes &= ~NM_IPAC_F_CHANM_CSD_T_14k4;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue