fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-bts/+/34434?usp=email )


Change subject: oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES
......................................................................

oml: implement handling of NM_ATT_IPACC_SUPP_FEATURES

* TODO: set freq_bands in info_compl_cb()

Change-Id: I88c6c6af18be054bd152832e60c8afbbd16098a3
Depends: libosmocore.git Ia4208e10d61843dd6ae77398f6624c918dc81ea4
Depends: libosmocore.git I85316af9b57e8113077305798cb2d82a24e48e00
---
M include/osmo-bts/bts.h
M include/osmo-bts/bts_trx.h
M include/osmo-bts/gsm_data.h
M src/common/bts.c
M src/common/oml.c
M src/osmo-bts-lc15/l1_if.c
M src/osmo-bts-lc15/main.c
M src/osmo-bts-oc2g/main.c
M src/osmo-bts-octphy/l1_if.c
M src/osmo-bts-sysmo/main.c
M src/osmo-bts-trx/main.c
M src/osmo-bts-virtual/main.c
12 files changed, 268 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/34/34434/1

diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h
index d332935..985f4ed 100644
--- a/include/osmo-bts/bts.h
+++ b/include/osmo-bts/bts.h
@@ -130,6 +130,9 @@
        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 {
                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;
diff --git a/include/osmo-bts/bts_trx.h b/include/osmo-bts/bts_trx.h
index 72522eb..70eb555 100644
--- a/include/osmo-bts/bts_trx.h
+++ b/include/osmo-bts/bts_trx.h
@@ -40,6 +40,12 @@
        /* 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];
 };

diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index b20f3ea..164c89f 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -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,
diff --git a/src/common/bts.c b/src/common/bts.c
index 3cd91e7..568cf98 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -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 @@
        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 @@
        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 overriden by PHY specific 
code) */
+       bts->support.max_ta = MAX_TA_DEF;
+
        rc = bts_model_init(bts);
        if (rc < 0)
                return rc;
diff --git a/src/common/oml.c b/src/common/oml.c
index 85ec5d7..478151c 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -217,6 +217,68 @@
        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 @@
                        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",
diff --git a/src/osmo-bts-lc15/l1_if.c b/src/osmo-bts-lc15/l1_if.c
index e999527..bf120a9 100644
--- a/src/osmo-bts-lc15/l1_if.c
+++ b/src/osmo-bts-lc15/l1_if.c
@@ -1426,6 +1426,30 @@
                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);

diff --git a/src/osmo-bts-lc15/main.c b/src/osmo-bts-lc15/main.c
index bcd526a..59c089a 100644
--- a/src/osmo-bts-lc15/main.c
+++ b/src/osmo-bts-lc15/main.c
@@ -89,6 +89,8 @@
        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_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;
diff --git a/src/osmo-bts-oc2g/main.c b/src/osmo-bts-oc2g/main.c
index e184814..f5f9625 100644
--- a/src/osmo-bts-oc2g/main.c
+++ b/src/osmo-bts-oc2g/main.c
@@ -88,6 +88,8 @@
        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_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;
diff --git a/src/osmo-bts-octphy/l1_if.c b/src/osmo-bts-octphy/l1_if.c
index f132cdd..cce7129 100644
--- a/src/osmo-bts-octphy/l1_if.c
+++ b/src/osmo-bts-octphy/l1_if.c
@@ -768,6 +768,7 @@

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

 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
+#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;
 }

diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c
index 68f36df..c6d7037 100644
--- a/src/osmo-bts-sysmo/main.c
+++ b/src/osmo-bts-sysmo/main.c
@@ -60,6 +60,8 @@

        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_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;
+
        return 0;
 }

diff --git a/src/osmo-bts-trx/main.c b/src/osmo-bts-trx/main.c
index ff71b3a..c1f5716 100644
--- a/src/osmo-bts-trx/main.c
+++ b/src/osmo-bts-trx/main.c
@@ -132,6 +132,8 @@
        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_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.
         */
diff --git a/src/osmo-bts-virtual/main.c b/src/osmo-bts-virtual/main.c
index 6efbca5..bf5f324 100644
--- a/src/osmo-bts-virtual/main.c
+++ b/src/osmo-bts-virtual/main.c
@@ -61,6 +61,8 @@
        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_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;
 }


--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/34434?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I88c6c6af18be054bd152832e60c8afbbd16098a3
Gerrit-Change-Number: 34434
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to