aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmo-bts/phy_link.h
AgeCommit message (Collapse)AuthorFilesLines
2021-09-23phy_link: Introduce bts_model_phy_link_close() and use it in bts-trxPau Espin Pedrol1-0/+1
This step is required while turning off the BTS without killing the process. Right now only osmo-bts-trx supports this feature, so this function is only available and used by osmo-bts-trx. Later on, when the feature is support more generally, we can move call to this function to common place like bts_shutdown_fsm or alike. Change-Id: I3253112700a31b85db82dc7ccadec8542bac745e
2021-09-23bts-trx: Submit TRX SW_ACT when PHY becomes connectedPau Espin Pedrol1-1/+0
Once the TRXC link is available, we can signal SW_ACT which will transit rcarrier and bbtransc NM FSMs to Disabled Offline and announce availability to be configured to the BSC through transmission of Software Activated Report. Change-Id: I6e62ec2fdd4cae58b52d83fa851552f7ed51c821
2021-05-23[VAMOS] osmo-bts-trx: rework and split up bts_sched_fn()Vadim Yanitskiy1-0/+1
Currently, in bts_sched_fn() we send a Downlink burst to the PHY immediately after calling the associated logical channel handler. Together with the obvious performance advantages, this approach imposes some serious limitations. The code has already become quite complex with the introduction of the baseband frequency hopping, and now it's not possible anymore to extend it further. TRXD PDU batching, which is essential for VAMOS implementation, requires us to make the scheduler more flexible at the expense of increased memory consumption and additional CPU cycles. This patch splits up Downlink burst scheduling into 3 main steps: 1. bts_sched_init_buffers(): initialization of per-TRX Downlink burst buffers allocated by phy_instance_create(). For C0/TRX0 all timeslots are pre-initialized with dummy burst. 2. bts_sched_fn(): generating burst bits for all active lchans. 3. bts_sched_flush_buffers(): sending everything to the PHY. This approach allows us to a) get rid of the ugly tail in bts_sched_fn() that was responsible for sending dummy bursts on C0/TRX0; b) implement the PDU batching and have several variants of bts_sched_flush_buffers() providing the alternative batching approaches later on; c) implement PDU merging for the upcoming shadow transceivers. Change-Id: Iec78989517865b3275a9784d1042a5ebd1d2815f Related: SYS#4895, OS#4941
2021-05-19common: make the arguments of phy_{link,instance}_name() constVadim Yanitskiy1-2/+2
Change-Id: Ic01d131148065c9143d3a90f8020e2e133941292 Related: CID#236092 "Dereference before null check"
2021-05-19osmo-bts-{trx,virtual}: fix: pinst->trx may be NULLVadim Yanitskiy1-1/+1
We assume that it's legal to have dangling PHY instances that are not associated with any TRX instances in the configuration file. Obviously, such PHY instances have pinst->trx set to NULL. The DSP based models seem to handle dangling PHY instances without any problems, so let's ensure that we always check pinst->trx against NULL in the osmo-bts-{trx,virtual} specific code. Change-Id: Ib7d9cb7ae47fead723fa46454cd64bf6e88756bb Fixes: CID#236092 "Dereference before null check"
2021-05-18[VAMOS] Re-organize osmo-bts-trx specific structuresVadim Yanitskiy1-3/+0
Together with the 'generic' structures which used to be shared between osmo-bsc and osmo-bts some time ago, we also have the following osmo-bts-trx specific structures (in hierarchical order): - struct l1sched_trx (struct gsm_bts_trx), - struct l1sched_ts (struct gsm_bts_trx_ts), - struct l1sched_chan_state (struct gsm_lchan). These structures are not integrated into the tree of the generic structures, but maintained in a _separate tree_ instead. Until recently, only the 'l1sched_trx' had a pointer to generic 'gsm_bts_trx', so in order to find the corresponding 'gsm_lchan' for 'l1sched_chan_state' one would need to traverse all the way up to 'l1sched_trx' and then tracerse another three backwards. + gsm_network | --+ gsm_bts (0..255) | --+ l1sched_trx --------------------> gsm_bts_trx (0..255) | | --+ l1sched_trx_ts --+ gsm_bts_trx_ts (8) | | --+ l1sched_chan_state --+ gsm_lchan (up to 8) I find this architecture a bit over-complicated, especially given that 'l1sched_trx' is kind of a dummy node containing nothing else than a pointer to 'gsm_bts_trx' and the list of 'l1sched_trx_ts'. In this path I slightly change the architecture as follows: + gsm_network | --+ gsm_bts (0..255) | --+ gsm_bts_trx (0..255) | --+ l1sched_trx_ts <----------------> gsm_bts_trx_ts (8) | | --+ l1sched_chan_state --+ gsm_lchan (up to 8) Note that unfortunately we cannot 1:1 map 'l1sched_chan_state' to 'gsm_lchan' (like we do for 'l1sched_trx_ts' and 'gsm_bts_trx_ts') because there is no direct mapping. The former is a higl-level representation of a logical channel, while the later represents one specific logical channel type like FCCH, SDCCH/0 or SACCH/0. osmo-bts-virtual re-uses the osmo-bts-trx hierarchy, so it's also affected by this change. Change-Id: I7c4379e43a25e9d858d582a99bf6c4b65c9af481
2021-05-09[VAMOS] struct gsm_bts_trx: fix the PHY instance pointerVadim Yanitskiy1-1/+1
First of all, there is no reason to use a void pointer because it's always 'struct phy_instance'. Also, no need to encapsulate this pointer into 'role_bts' because there are no other roles in osmo-bts (we used to have shared headers years ago). This commit also fixes a bug in test_sysmobts_auto_band(), where a pointer to 'struct femtol1_hdl' was directly assigned to trx.pinst. Change-Id: I9bd6f0921e0c6bf824d38485486ad78864cbe17e
2021-04-21osmo-bts-trx: cosmetic: TRXD 'header version' -> 'PDU version'Vadim Yanitskiy1-1/+1
TRXDv2 brings significant changes to the whole PDU structure, not just the header. Let's highlight this in the code / strings. Change-Id: Id0274bd1ae5c419548596ed1852e6a28ec62b713 Related: SYS#4895, OS#4941, OS#4006
2020-09-28vty: make most struct pointers const in show/write commandsVadim Yanitskiy1-1/+1
Change-Id: Iacc32f7982c150d84ea4df7affa1f9e07806928f
2020-07-14Move struct gsm_bts_trx: gsm_data.* & bts.* => bts_trx.*Pau Espin Pedrol1-1/+2
Move all struct gsm_bts_trx references from bulky gsm_data to its own file containing all related definitions and implementations. Also move a few functions clearly related to that object which were placed in bts.* Change-Id: Iebaf5b221c48b571f45408af867ce6f9c0cd9f4a
2020-06-22phy_link.h: Drop unimplemented function definitionPau Espin Pedrol1-2/+0
Change-Id: Ib306a80bd8ea3434a49806ec73a1cfe9a82b9122
2020-06-05bts-trx: phy_link: Improve logging fmt in phy_link_state_set()Pau Espin Pedrol1-0/+2
Change-Id: I4633dd81d0b4cc104ca9e0803993ba766cb23790
2020-04-25osmo-bts-litecell15: Implement missing features.Rafael Diniz1-0/+1
Many hardware parameters of the LC 1.5 were not exposed to the user. This change introduces most of the features, being very similar to osmo-bts-oc2g code. Mostly based on commit 653e974fec00414ba85baf258ccc46ea778a53bd from NuRAN's osmo-bts fork at: https://gitlab.com/nrw_noa/osmo-bts Change-Id: Ib16e7d423fc7030573acd86fbd356ae96697ed5d
2020-03-10osmo-bts-virtual: Add "virtual-um ttl <0-255>" VTY optionHarald Welte1-0/+1
This can be used to determine the multicast TTL packet and hence how far the packet will propagate in the network. If you want to operate the virtual Um only on your own machine, a TTL of 0 would prevent the packets from ever being transmitted on your local ethernet segment. Change-Id: I18a9f93b764aee4e1dc68a1c6ac4d078e52ca61d Related: OS#2966
2020-01-20ta_control: move timing advance code from osmo-bts-trx to commonPhilipp Maier1-1/+0
The timing advance controller that is implemented in loops.c of osmo-bts-trx only works for osmo-bts-trx and not for any of the phy based bts. Lets move the timing advance controller into the common part and make it available for every bts. Also lets add a unit-test. Change-Id: If7ddf74db3abc9b9872abe620a0aeebe3327e70a Related: SYS#4567
2019-11-30bts-trx: Drop low layer MS Power Control Loop algoPau Espin Pedrol1-2/+0
Let's drop it instead of having code duplication from common code in a lower layer, and maintain only the one in l1sap for all BTS models. As a result, osmo-bts-trx loses feature BTS_FEAT_MS_PWR_CTRL_DSP and will only be able to use "ms-power-control osmo" in VTY, which will be enabled by default (meaning: change of behavior, now MS Power Control is enabled by default in osmo-bts-trx and can only by disabled by BSC). Old bts-trx specific VTY command "(no) osmotrx ms-power-loop" is marked as deprecated but still working for more usual case (1 TRX configured) to avoid breaking backward compatibility. TA low level loop is still kept in loops.c and will be moved to l1sap at some point too. Related: OS#1851 Change-Id: I0d8b0c981d9ead91d93999df6e45fb06e426aeb9
2019-10-05bts-trx: Rework code handling poweron statePau Espin Pedrol1-0/+2
Use of variables in each code is confusing and mixing configuration with POWERON/POWEROFF state (which is at least per phy inst and not per TRX, since those commands are only expected on the 1st phy inst). * field "poweron" becomes "enabled", and is used as an indicator for actions to take during TRX provisioning (hether to power it on and configure it or to power it off). * poweron/poweroff state becomes "powered", and it is shared by all trx in same phy_link, and is updated only after confirmation by TRX. * poweron_set becomes poweronoff_set (because it's used by both POWERON and POWEROFF), and becomes shared by all trx in same phy_link, since those CMDs are usually sent by first phy instance of the link (the first trx). Related: OS#4215 Change-Id: Icd0b482f1454236432e1952220bbec9d178b8607
2019-10-05bts-trx: vty: Print phy link state in cmd 'show transceiver'Pau Espin Pedrol1-0/+2
Change-Id: I8e49f8edad9f9c68d110dbb7faeea5143aa91022
2019-07-23bts-trx: Introduce VTY command osmotrx trxd-max-versionPau Espin Pedrol1-0/+1
This command allows setting a maximum TRXD format version to negotiate with TRX. osmo-bts-trx will hence end up using that version if supported by TRX, or a lower one otherwise (or fail if TRX doesn't support any of them). Since now the maximum version can be 0, avoid going through SETFORMAT negotiation in that case, since 0 is the default version. This way we keep backward compatibility with TRX implementations that exit upon receival of unknown commands (such as SC5 current one). The VTY command is located in the "phy" node instead of the "phy instance" node because instances of same phy are expected to use same host with same implementation, so TRXD version to use should be the same for both. Related: OS#4006 Change-Id: I5eb1fdc002f9d7f4acf475356d8fc998dc8f6326
2019-06-04bts-trx: trx_if.c: Introduce logging macro LOGPPHIPau Espin Pedrol1-0/+2
This way we unify format. We take the chance to add related information to some log messages which were not printing that information (and was confusing when using more than one phy instance). Change-Id: I5b17a01638ade9a6c41da73e550d5947fa92f568
2019-04-19common/oml.c: constify argument 'trx' of handle_attrs_trx()Vadim Yanitskiy1-1/+1
Change-Id: Id476d492b3c1d0c728fca9eb0fb2254512bdef72
2018-10-27Add OC-2G BTS sourcesOmar Ramadan1-0/+14
Change-Id: I327384fe5ac944dc3996a3f00932d6f1a10d5a35
2018-06-28octphy: add support for 16x oversampling modePhilipp Maier1-0/+1
The latest octphy firmware release (octsdr-2g-02.11.00-B1927-alpha), introduces a 16X oversampling option which is not yet supported in osmo-bts. - Add oversampling flag in phy_link.h - Add VTY commands to enable/disable oversampling - Add phy messages to enable/disable oversampling - Add conditional compilation to preserve support for legacy header files and firmware Change-Id: Ib78f92bfe03ff20aa0a257763c90844fb7b87cf0 Related: SYS#4257 Patch-by: Octasic inc.
2017-08-24osmo-bts-trx: remove global variables from loopsMax1-1/+3
* move TA related globals into phy_link * move power loop related globals into phy_link * prefix corresponding vty vars with osmotrx Change-Id: I01d7c1abad67e51b886a4ecf2de072929d67da27 Related: OS#1848
2017-08-09TRX: Remove global variables, move SETBSIC/SETTSC handling into phy_linkHarald Welte1-0/+1
Whether or not we are talking to an OpenBTS (SETBSIC) or OsmoTRX (SETTSC) transceiver is a property of the phy_link, and not a property of the BTS. Also, we *really, really* should never use global variables. I'm very happy this is being cleaned up, finally. Change-Id: I51aeb17661dfd63ff347f7b2c0d7ffa383ec814c
2017-07-19lc15: port lc15bts-mgr changesMax1-0/+6
That's mostly changes related to lc15bts-mgr from https://gitlab.com/nrw_noa/osmo-bts branch nrw/litecell15 based on eb5b7f80510b603579f7af6d7d5ead296c2fa260 commit. I wanted to incorporate vty and hardcoded paths changes so we can use it from this point without major backward-incompatible changes as a base for future ports. Change-Id: Iabbaedc84aaaa594150a4e5445c16dd1f6f89858 Related: SYS#3679
2017-07-13VIRT-PHY: Initial check-in of a new virtual BTSHarald Welte1-0/+13
This patch adds a virtual physical layer designed to simulate the Um air interface between BTS and MS. It does so by encapsulating MAC blocks (Layer 2 PDUs) via GSMTAP and sending them through multicast UDP streams, both in uplink and in downlink. The purpose of this is enable testing without any radio hardware or related licenses. OsmocomBB has recently received as similar patch-set, adding a virty_phy executable that can be run on a PC instead of the classic 'layer1' firmware on a real phone. Using GSMTAP means that one can use unmodified wireshark to decode the messages exchanged on the virtual Um layer. This code was originally started by Harald in January 2016, continued by Sebastian Stumpf in late 2016 and early 2017, and finally completed by Harald in July 2017. Change-Id: I1bf7670975b1e367c1c62983020865a043542622
2017-06-09Re-add version to phy_instanceMax1-1/+1
This is resubmission of 9eeb0b1a136fc8c24a86cb4d832c264674c10db0 with errorneous use of talloc_asprintf() removed which should fix OS#2316. Change-Id: I02ae6fffdc808c1ea14185dbb4a720d27a62d4bb Related: OS#1614
2017-06-06trx: Allow BTS and TRX to be on different IPsPau Espin Pedrol1-1/+2
Depends on libosmocore I3c655a4af64fb80497a5aaa811cce8005dba9cd9 Change-Id: I0bd34b7b02c1a9b0c6f6f89f327b486e5620c8d5
2017-06-02Revert "Add version to phy_instance"Neels Hofmeyr1-1/+1
This reverts commit 9eeb0b1a136fc8c24a86cb4d832c264674c10db0. This commit caused osmo-gsm-tester test runs for the sysmoBTS to fail with SIGABRT consistently. See below redmine issues. In osmo-bts-sysmo/l1_if.c, it uses talloc_asprintf to write to the char version[MAX_VERSION_LENGTH]; talloc_asprintf() however is intended to work on string buffers allocated by talloc, and attempts to reallocate version[]. Furthermore, it is not clear why the patch passes a 'data' arg to app_info_sys_compl_cb() that is not used. Hence I will revert this instead of trying to fix. Please resolve issues and re-submit. Related: OS#2316 OS#1614 Change-Id: I2c9fd5e6739c1750365c0241476ce4b1aa2df3d4
2017-05-29Add version to phy_instanceMax1-1/+1
Change-Id: I5b2352b8d15e9b0d8616fcd526b4902d247e4693 Related: OS#1614
2017-04-13octphy: set tx/rx antenne IDs via VTYPhilipp Maier1-0/+4
add support for the TX/RX antenna-id feature that has been introduced with release OCTSDR-2G-02.07.00-B1314-BETA. The user can now set individual ID numbers for the TX and for the RX antenna. Change-Id: I872fe3c4d7b593358a4ce2f02cf0726611b9f3aa
2017-02-10osmo-trx-bts: Fix incorrect setting of RXGAIN and POWER parameters on second ↵Ivan Klyuchnikov1-9/+0
channel (TRX1) of osmo-trx Move rxgain and tx-attenuation (power) parameters from phy_link layer to phy_inst layer. Rxgain and tx-attenuation parameters should be set for each phy_inst and send for each osmo-trx channel accordingly via control commands. Change-Id: I4861a59d10d1ef91954e0c6ea265e66dec08844f
2017-02-01octphy: Improve OML ADM state handlingPhilipp1-0/+2
Improve state handling for for lock/unlock of OC_RADIO_CARRIER obj class. in bts_model_chg_adm_state() Change-Id: I034114beca95210169429d8ac1eb8648df12fc6c
2017-01-23octphy: set tx attenuation via VTYPhilipp1-0/+1
add code to configure the transmision power via VTY Change-Id: I76bb8660eb1d8baeb6b8f69da4a6ba9ab7319981
2016-10-06octphy: reintroducing multi-trx supportPhilipp1-0/+5
The multi-trx had to be removed because of build conflicts with octphy header that lack the struct members for needed to support multi-trx. For details see the following revert-commits: ed6b48e4a5fba07c3ecccf689991799ae13a2aaa c9a1f284acf518cb4e62c3898e20398ed53807c3 This commit reintroduces multi trx support and ads an ifdef decision to ensure that header files without multi-trx support still work. Change-Id: I7f9b2906cc149c817183745b4c96bcc7f9ebdad0
2016-09-06octphy: fix build: Revert "octphy: fix for multiple trx with more than 1 dsp"Neels Hofmeyr1-2/+1
This reverts commit 06968beab90806cba94c8b331276e4dc209c152b. Theoretically, this patch makes a lot of sense, but in order to be able to build osmo-bts-octphy until the headers version is clarified, revert use of usCentreArfcn: Above commit uses an usCentreArfcn member that is never defined in the history of our octphy-2g-headers.git. This usCentreArfcn does exist in a code snapshot OCTSDR-2G-02.05.00-B780-DEBUG, which is not (yet?) publicly available. Also, the current headers version is apparently 02.07, though the octasic version numbers have been known to cause confusion among osmocom folks. This along with one other revert fixes this build problem: make[3]: Entering directory '/n/s/octphy/git/osmo-bts/src/osmo-bts-octphy' CC l1_oml.o l1_oml.c: In function ‘l1if_trx_open’: l1_oml.c:1350:13: error: ‘tOCTVC1_GSM_TRX_CONFIG’ has no member named ‘usCentreArfcn’ oc->Config.usCentreArfcn = plink->u.octphy.center_arfcn; ^ l1_oml.c:1352:13: error: ‘tOCTVC1_GSM_TRX_CONFIG’ has no member named ‘usCentreArfcn’ oc->Config.usCentreArfcn = trx->arfcn; ^ In file included from ../../include/osmo-bts/logging.h:5:0, from l1_oml.c:33: l1_oml.c:1365:13: error: ‘tOCTVC1_GSM_TRX_CONFIG’ has no member named ‘usCentreArfcn’ oc->Config.usCentreArfcn, oc->Config.usTsc, oc->RfConfig.ulRxGainDb, ^ Change-Id: I222766f6961f5f35aa3651e2907e3e908fe9a66e
2016-06-16Fix OML activationMax1-0/+2
Previously software activation could have been reported multiple times which broke proper BTS init. Introduce guard variable to ensure reporting happens only once. Note: this is just minimal workaround - ideally proper OML state machine should be implemented. Change-Id: Ifffbdb756bc5d2864f985c01a3299b839c4de7af Related: OS#1648
2016-06-15LC15: TRX nominal TX power can be used from EEPROM or from BTS configurationMinh-Quang Nguyen1-1/+2
Change-Id: I173f4126cea41959d48def07bff25fcd29894b7e
2016-04-29Ensure TRX invariantMax1-0/+1
There is implicit invariant in trx_phy_instance() which is actively used by various hw-specific implementations to get TRX's phy instance. Let's make sure there's explicit assertion for this because there's been segfaults in the past related to it.
2016-03-21octphy: fix for multiple trx with more than 1 dspMax1-1/+2
Explicitly store and use "center" arfcn used by each dsp (1 dsp corresponds to 1 phy link).
2016-02-15LC15/sysmobts: Don't try to refer to fl1h from PHY configHarald Welte1-0/+9
At the time the phy link / phy instance level VTY configuration commands are parsed, we did not yet call l1if_open() and thus pinst->u.{lc15,sysmobts}.hdl == NULL. PHY or PHY instance specific configuration must thus be stored inside the phy_link or phy_instance itself, and not inside the (not yet existing) handle. We solve this by moving around some parameters: * clk_use_eeprom/clk_cal/clk_src/calib_path get replicated in phy_instance * min_qual_{rach,norm} are moved into the generic part (which means that osmo-bts-octphy and osmo-bts-trx should also implement them)
2016-02-15sysmobts/LC15: Fix startup-time DSP trace flage configurationHarald Welte1-0/+2
Due to the changes introduced by the phy_link API, it's not easy to set the default DSP trace flags via a command line argument anymore. We now rather introduce a persitent VTY configuration command, by which the default DSP tracing configuration can be set (for each PHY). The persistent trace flags are stored in the phy_instance, while the current operational run-time flags are in fl1h->phy_instance.
2016-02-15LC15: port litecell 1.5 support to recent osmo-bts masterHarald Welte1-0/+3
This includes changes required for * shared main() function accross all BTS models * use of the new phy_link / phy_instance infrastructure as the basis for true multi-TRX operation
2016-02-15port sysmobts to phy_link/phy_instance abstractionHarald Welte1-0/+1
2016-02-15Introduce new phy_link and phy_instance abstractionHarald Welte1-0/+115
This way we can model a flexible mapping between any number of PHYs, each having multiple instances, and then map BTSs with TRXx on top of those PHYs.