blob: 2f2a045256e776d8f1d2cb8620393ab48f925e49 [file] [log] [blame]
Eric Wild901f6892022-05-07 15:36:47 +02001#pragma once
2
3#include <osmocom/core/linuxlist.h>
4#include <osmocom/core/select.h>
5#include <osmocom/core/timer.h>
6#include <osmocom/core/fsm.h>
7
Erice29b3c82022-10-27 16:54:09 +02008#include <osmocom/gsm/gsm_utils.h>
Eric Wild901f6892022-05-07 15:36:47 +02009
10#define TRXC_BUF_SIZE 1024
11#define TRXD_BUF_SIZE 512
12
13/* Forward declaration to avoid mutual include */
Erice29b3c82022-10-27 16:54:09 +020014struct l1sched_burst_req;
15struct trxcon_inst;
Eric Wild901f6892022-05-07 15:36:47 +020016
17enum trx_fsm_states {
18 TRX_STATE_OFFLINE = 0,
19 TRX_STATE_IDLE,
20 TRX_STATE_ACTIVE,
21 TRX_STATE_RSP_WAIT,
22};
23
24struct trx_instance {
Erice29b3c82022-10-27 16:54:09 +020025 /* trxcon instance we belong to */
26 struct trxcon_inst *trxcon;
27
Erica378a1d2022-07-19 21:12:58 +020028 struct osmo_fd trx_ofd_ctrl;
29 struct osmo_fd trx_ofd_data;
Eric Wild901f6892022-05-07 15:36:47 +020030
31 struct osmo_timer_list trx_ctrl_timer;
32 struct llist_head trx_ctrl_list;
Erice29b3c82022-10-27 16:54:09 +020033 struct osmo_fsm_inst *fi;
Eric Wild901f6892022-05-07 15:36:47 +020034
35 /* HACK: we need proper state machines */
36 uint32_t prev_state;
37 bool powered_up;
38
39 /* GSM L1 specific */
40 uint16_t pm_band_arfcn_start;
41 uint16_t pm_band_arfcn_stop;
Eric Wild901f6892022-05-07 15:36:47 +020042};
43
44struct trx_ctrl_msg {
45 struct llist_head list;
46 char cmd[TRXC_BUF_SIZE];
47 int retry_cnt;
48 int critical;
49 int cmd_len;
50};
51
Erice29b3c82022-10-27 16:54:09 +020052struct trx_instance *trx_if_open(struct trxcon_inst *trxcon,
Eric Wild901f6892022-05-07 15:36:47 +020053 const char *local_host, const char *remote_host, uint16_t port);
54void trx_if_flush_ctrl(struct trx_instance *trx);
55void trx_if_close(struct trx_instance *trx);
56
57int trx_if_cmd_poweron(struct trx_instance *trx);
58int trx_if_cmd_poweroff(struct trx_instance *trx);
59int trx_if_cmd_echo(struct trx_instance *trx);
Eric Wild901f6892022-05-07 15:36:47 +020060
61int trx_if_cmd_setta(struct trx_instance *trx, int8_t ta);
62
63int trx_if_cmd_rxtune(struct trx_instance *trx, uint16_t band_arfcn);
64int trx_if_cmd_txtune(struct trx_instance *trx, uint16_t band_arfcn);
65
Erice29b3c82022-10-27 16:54:09 +020066int trx_if_cmd_setslot(struct trx_instance *trx, uint8_t tn,
67 enum gsm_phys_chan_config pchan);
68int trx_if_cmd_setfh(struct trx_instance *trx, uint8_t hsn, uint8_t maio,
69 const uint16_t *ma, size_t ma_len);
Eric Wild901f6892022-05-07 15:36:47 +020070
71int trx_if_cmd_measure(struct trx_instance *trx,
72 uint16_t band_arfcn_start, uint16_t band_arfcn_stop);
73
Erice29b3c82022-10-27 16:54:09 +020074int trx_if_tx_burst(struct trx_instance *trx,
75 const struct l1sched_burst_req *br);
Eric847de6d2022-10-27 16:54:53 +020076int trx_if_cmd_sync(struct trx_instance *trx);