2017-07-04 12:38:50 +00:00
|
|
|
/*
|
|
|
|
* OsmocomBB <-> SDR connection bridge
|
|
|
|
* TDMA scheduler: logical channels, RX / TX handlers
|
|
|
|
*
|
|
|
|
* (C) 2013 by Andreas Eversberg <jolly@eversberg.eu>
|
|
|
|
* (C) 2015 by Alexander Chemeris <Alexander.Chemeris@fairwaves.co>
|
|
|
|
* (C) 2015 by Harald Welte <laforge@gnumonks.org>
|
2022-07-06 11:06:07 +00:00
|
|
|
* Contributions by sysmocom - s.f.m.c. GmbH
|
2017-07-04 12:38:50 +00:00
|
|
|
*
|
|
|
|
* All Rights Reserved
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2019-05-27 15:34:02 +00:00
|
|
|
#include <osmocom/gsm/protocol/gsm_08_58.h>
|
2019-09-18 14:38:03 +00:00
|
|
|
#include <osmocom/core/gsmtap.h>
|
|
|
|
|
2022-07-22 12:54:14 +00:00
|
|
|
#include <osmocom/bb/l1sched/l1sched.h>
|
2017-07-04 12:38:50 +00:00
|
|
|
|
2017-07-06 06:17:24 +00:00
|
|
|
/* Forward declaration of handlers */
|
2022-07-06 11:06:07 +00:00
|
|
|
int rx_data_fn(struct l1sched_lchan_state *lchan,
|
|
|
|
uint32_t fn, uint8_t bid, const sbit_t *bits,
|
|
|
|
const struct l1sched_meas_set *meas);
|
2017-07-06 06:17:24 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int tx_data_fn(struct l1sched_lchan_state *lchan,
|
2022-07-01 18:42:26 +00:00
|
|
|
struct l1sched_burst_req *br);
|
2017-07-15 15:46:54 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int rx_sch_fn(struct l1sched_lchan_state *lchan,
|
|
|
|
uint32_t fn, uint8_t bid, const sbit_t *bits,
|
|
|
|
const struct l1sched_meas_set *meas);
|
2017-07-07 00:11:26 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int tx_rach_fn(struct l1sched_lchan_state *lchan,
|
2022-07-01 18:42:26 +00:00
|
|
|
struct l1sched_burst_req *br);
|
2017-07-13 18:38:48 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int rx_tchf_fn(struct l1sched_lchan_state *lchan,
|
|
|
|
uint32_t fn, uint8_t bid, const sbit_t *bits,
|
|
|
|
const struct l1sched_meas_set *meas);
|
2017-08-07 08:24:18 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int tx_tchf_fn(struct l1sched_lchan_state *lchan,
|
2022-07-01 18:42:26 +00:00
|
|
|
struct l1sched_burst_req *br);
|
2017-08-07 08:24:18 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int rx_tchh_fn(struct l1sched_lchan_state *lchan,
|
|
|
|
uint32_t fn, uint8_t bid, const sbit_t *bits,
|
|
|
|
const struct l1sched_meas_set *meas);
|
2018-08-12 21:48:14 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int tx_tchh_fn(struct l1sched_lchan_state *lchan,
|
2022-07-01 18:42:26 +00:00
|
|
|
struct l1sched_burst_req *br);
|
2018-08-12 21:48:14 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int rx_pdtch_fn(struct l1sched_lchan_state *lchan,
|
|
|
|
uint32_t fn, uint8_t bid, const sbit_t *bits,
|
|
|
|
const struct l1sched_meas_set *meas);
|
2018-03-01 10:30:47 +00:00
|
|
|
|
2022-07-06 11:06:07 +00:00
|
|
|
int tx_pdtch_fn(struct l1sched_lchan_state *lchan,
|
2022-07-01 18:42:26 +00:00
|
|
|
struct l1sched_burst_req *br);
|
2018-08-12 21:48:14 +00:00
|
|
|
|
2022-07-01 18:42:26 +00:00
|
|
|
const struct l1sched_lchan_desc l1sched_lchan_desc[_L1SCHED_CHAN_MAX] = {
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_IDLE] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "IDLE",
|
|
|
|
.desc = "Idle channel",
|
|
|
|
/* The MS needs to perform neighbour measurements during
|
|
|
|
* IDLE slots, however this is not implemented (yet). */
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_FCCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "FCCH", /* 3GPP TS 05.02, section 3.3.2.1 */
|
|
|
|
.desc = "Frequency correction channel",
|
|
|
|
/* Handled by transceiver, nothing to do. */
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SCH", /* 3GPP TS 05.02, section 3.3.2.2 */
|
|
|
|
.desc = "Synchronization channel",
|
|
|
|
|
|
|
|
/* 3GPP TS 05.03, section 4.7. Handled by transceiver,
|
|
|
|
* however we still need to parse BSIC (BCC / NCC). */
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_AUTO,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_sch_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_BCCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "BCCH", /* 3GPP TS 05.02, section 3.3.2.3 */
|
|
|
|
.desc = "Broadcast control channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_BCCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_BCCH,
|
|
|
|
|
|
|
|
/* Rx only, xCCH convolutional coding (3GPP TS 05.03, section 4.4),
|
|
|
|
* regular interleaving (3GPP TS 05.02, clause 7, table 3):
|
|
|
|
* a L2 frame is interleaved over 4 consecutive bursts. */
|
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_AUTO,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_RACH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "RACH", /* 3GPP TS 05.02, section 3.3.3.1 */
|
|
|
|
.desc = "Random access channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_RACH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_RACH,
|
|
|
|
|
|
|
|
/* Tx only, RACH convolutional coding (3GPP TS 05.03, section 4.6). */
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_AUTO,
|
2019-05-27 23:25:24 +00:00
|
|
|
.tx_fn = tx_rach_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_CCCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "CCCH", /* 3GPP TS 05.02, section 3.3.3.1 */
|
|
|
|
.desc = "Common control channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_CCCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_PCH_AGCH,
|
|
|
|
|
|
|
|
/* Rx only, xCCH convolutional coding (3GPP TS 05.03, section 4.4),
|
|
|
|
* regular interleaving (3GPP TS 05.02, clause 7, table 3):
|
|
|
|
* a L2 frame is interleaved over 4 consecutive bursts. */
|
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_AUTO,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_TCHF] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "TCH/F", /* 3GPP TS 05.02, section 3.2 */
|
|
|
|
.desc = "Full Rate traffic channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_F,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Bm_ACCHs,
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
|
|
|
/* Rx and Tx, multiple convolutional coding types (3GPP TS 05.03,
|
|
|
|
* chapter 3), block diagonal interleaving (3GPP TS 05.02, clause 7):
|
|
|
|
*
|
|
|
|
* - a traffic frame is interleaved over 8 consecutive bursts
|
|
|
|
* using the even numbered bits of the first 4 bursts
|
|
|
|
* and odd numbered bits of the last 4 bursts;
|
|
|
|
* - a FACCH/F frame 'steals' (replaces) one traffic frame,
|
|
|
|
* interleaving is done in the same way.
|
|
|
|
*
|
|
|
|
* The MS shall continuously transmit bursts, even if there is nothing
|
|
|
|
* to send, unless DTX (Discontinuous Transmission) is used. */
|
|
|
|
.burst_buf_size = 8 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_tchf_fn,
|
|
|
|
.tx_fn = tx_tchf_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_TCHH_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "TCH/H(0)", /* 3GPP TS 05.02, section 3.2 */
|
|
|
|
.desc = "Half Rate traffic channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_H,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Lm_ACCHs + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
|
|
|
/* Rx and Tx, multiple convolutional coding types (3GPP TS 05.03,
|
|
|
|
* chapter 3), block diagonal interleaving (3GPP TS 05.02, clause 7):
|
|
|
|
*
|
2020-03-04 21:14:30 +00:00
|
|
|
* - a traffic frame is interleaved over 4 non-consecutive bursts
|
|
|
|
* using the even numbered bits of the first 2 bursts,
|
|
|
|
* and odd numbered bits of the last 2 bursts;
|
|
|
|
* - a FACCH/H frame is interleaved over 6 non-consecutive bursts
|
2019-05-27 23:25:24 +00:00
|
|
|
* using the even numbered bits of the first 2 bursts,
|
|
|
|
* all bits of the middle two 2 bursts,
|
|
|
|
* and odd numbered bits of the last 2 bursts;
|
|
|
|
* - a FACCH/H frame 'steals' (replaces) two traffic frames,
|
|
|
|
* interleaving is done over 4 consecutive bursts,
|
|
|
|
* the same as given for a TCH/FS.
|
|
|
|
*
|
|
|
|
* The MS shall continuously transmit bursts, even if there is nothing
|
|
|
|
* to send, unless DTX (Discontinuous Transmission) is used. */
|
|
|
|
.burst_buf_size = 6 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_tchh_fn,
|
|
|
|
.tx_fn = tx_tchh_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_TCHH_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "TCH/H(1)", /* 3GPP TS 05.02, section 3.2 */
|
|
|
|
.desc = "Half Rate traffic channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_H,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Lm_ACCHs + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_TCHH_0, see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 6 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_tchh_fn,
|
|
|
|
.tx_fn = tx_tchh_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH4_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/4(0)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH4_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/4(1)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH4_2] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/4(2)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 2)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (2 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH4_3] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/4(3)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 3)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (3 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 3,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(0)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(1)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_2] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(2)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 2)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (2 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_3] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(3)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 3)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (3 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 3,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_4] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(4)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 4)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (4 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 4,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_5] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(5)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 5)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (5 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 5,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_6] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(6)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 6)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (6 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 6,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_7] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(7)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Stand-alone dedicated control channel (sub-channel 7)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (7 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_DEDIC,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 7,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCHTF] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/TF", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow TCH/F associated control channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_F | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Bm_ACCHs,
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCHTH_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/TH(0)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow TCH/H associated control channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_H | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Lm_ACCHs + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCHTH_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/TH(1)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow TCH/H associated control channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_TCH_H | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_Lm_ACCHs + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH4_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/4(0)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/4 associated control channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH4_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/4(1)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/4 associated control channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH4_2] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/4(2)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/4 associated control channel (sub-channel 2)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (2 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH4_3] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/4(3)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/4 associated control channel (sub-channel 3)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH4 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH4_ACCH + (3 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 3,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH4_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_0] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(0)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 0)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (0 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 0,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_1] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(1)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 1)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (1 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 1,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_2] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(2)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 2)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (2 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_3] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(3)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 3)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (3 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 3,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_4] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(4)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 4)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (4 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 4,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_5] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(5)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 5)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (5 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 5,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_6] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(6)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 6)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (6 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 6,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SACCH8_7] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SACCH/8(7)", /* 3GPP TS 05.02, section 3.3.4.1 */
|
|
|
|
.desc = "Slow SDCCH/8 associated control channel (sub-channel 7)",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_SDCCH8 | GSMTAP_CHANNEL_ACCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_SDCCH8_ACCH + (7 << 3),
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_SACCH,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 7,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH and L1SCHED_SDCCH8_* (xCCH), see above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_CBTX,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
|
|
|
.tx_fn = tx_data_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_PDTCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "PDTCH", /* 3GPP TS 05.02, sections 3.2.4, 3.3.2.4 */
|
|
|
|
.desc = "Packet data traffic & control channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_PDTCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_OSMO_PDCH,
|
|
|
|
|
2019-09-30 13:30:18 +00:00
|
|
|
/* Rx and Tx, multiple coding schemes: CS-1..4 and MCS-1..9 (3GPP TS
|
2019-05-27 23:25:24 +00:00
|
|
|
* 05.03, chapter 5), regular interleaving as specified for xCCH.
|
|
|
|
* NOTE: the burst buffer is three times bigger because the
|
|
|
|
* payload of EDGE bursts is three times longer. */
|
|
|
|
.burst_buf_size = 3 * 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_PDCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_pdtch_fn,
|
|
|
|
.tx_fn = tx_pdtch_fn,
|
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_PTCCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "PTCCH", /* 3GPP TS 05.02, section 3.3.4.2 */
|
|
|
|
.desc = "Packet Timing advance control channel",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_PTCCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_OSMO_PDCH,
|
2022-07-01 18:42:26 +00:00
|
|
|
.link_id = L1SCHED_CH_LID_PTCCH,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
trxcon/scheduler: fix handling of PTCCH logical channel
According to 3GPP TS 45.010, section 5.6.2, for packet-switched
channels the BTS shall monitor the delay of the Access Bursts
sent by the MS on PTCCH and respond with timing advance values
for all MS performing the procedure on that PDCH.
According to 3GPP TS 45.002, section 3.3.4.2, PTCCH (Packet Timing
advance control channel) is a packet dedicated channel, that is
used for continuous Timing Advance control (mentioned above).
There are two sub-types of that logical channel:
- PTCCH/U (Uplink): used to transmit random Access Bursts
to allow estimation of the Timing Advance for one MS in
packet transfer mode.
- PTCCH/D (Downlink): used by the network to transmit
Timing Advance updates for several MS.
As per 3GPP TS 45.003, section 5.2, the coding scheme used for
PTCCH/U is the same as for PRACH as specified in subclause 5.3,
while the coding scheme used for PTCCH/D is the same as for
CS-1 as specified in subclause 5.1.1.
The way we used to handle both PTCCH/U and PTCCH/D is absolutely
wrong - it has nothing to do with xCCH coding. Instead, we need
to use rx_pdtch_fn() for Downlink and tx_rach_fn() for Uplink.
Also, since we only have a shared RSL channel number for PDCH
(Osmocom-specific RSL_CHAN_OSMO_PDCH), there should be a way
to distinguish both PDTCH and PTCCH logical channels. Let's
introduce TRX_CH_LID_PTCCH for that.
Change-Id: I2d1e9b8a66f027047f8d7bdc3f82ff9d8ebcc25e
2019-09-30 13:43:11 +00:00
|
|
|
/* On the Uplink, mobile stations transmit random Access Bursts
|
|
|
|
* to allow estimation of the timing advance for one MS in packet
|
|
|
|
* transfer mode. On Downlink, the network sends timing advance
|
|
|
|
* updates for several mobile stations. The coding scheme used
|
|
|
|
* for PTCCH/D messages is the same as for PDTCH CS-1. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_PDCH,
|
trxcon/scheduler: fix handling of PTCCH logical channel
According to 3GPP TS 45.010, section 5.6.2, for packet-switched
channels the BTS shall monitor the delay of the Access Bursts
sent by the MS on PTCCH and respond with timing advance values
for all MS performing the procedure on that PDCH.
According to 3GPP TS 45.002, section 3.3.4.2, PTCCH (Packet Timing
advance control channel) is a packet dedicated channel, that is
used for continuous Timing Advance control (mentioned above).
There are two sub-types of that logical channel:
- PTCCH/U (Uplink): used to transmit random Access Bursts
to allow estimation of the Timing Advance for one MS in
packet transfer mode.
- PTCCH/D (Downlink): used by the network to transmit
Timing Advance updates for several MS.
As per 3GPP TS 45.003, section 5.2, the coding scheme used for
PTCCH/U is the same as for PRACH as specified in subclause 5.3,
while the coding scheme used for PTCCH/D is the same as for
CS-1 as specified in subclause 5.1.1.
The way we used to handle both PTCCH/U and PTCCH/D is absolutely
wrong - it has nothing to do with xCCH coding. Instead, we need
to use rx_pdtch_fn() for Downlink and tx_rach_fn() for Uplink.
Also, since we only have a shared RSL channel number for PDCH
(Osmocom-specific RSL_CHAN_OSMO_PDCH), there should be a way
to distinguish both PDTCH and PTCCH logical channels. Let's
introduce TRX_CH_LID_PTCCH for that.
Change-Id: I2d1e9b8a66f027047f8d7bdc3f82ff9d8ebcc25e
2019-09-30 13:43:11 +00:00
|
|
|
.rx_fn = rx_pdtch_fn,
|
|
|
|
.tx_fn = tx_rach_fn,
|
2017-07-04 12:38:50 +00:00
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH4_CBCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/4(CBCH)", /* 3GPP TS 05.02, section 3.3.5 */
|
|
|
|
.desc = "Cell Broadcast channel on SDCCH/4",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_CBCH51,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_OSMO_CBCH4,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), but Rx only. See above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
2022-07-01 18:42:26 +00:00
|
|
|
.flags = L1SCHED_CH_FLAG_AUTO,
|
2019-05-27 23:25:24 +00:00
|
|
|
.rx_fn = rx_data_fn,
|
trxcon/scheduler: add CCCH/SDCCH mframe layouts with CBCH
According to GSM TS 05.02, section 3.3.5, Cell Broadcast Channel
(CBCH) is a downlink only channel, which is used to carry the
short message service cell broadcast (SMSCB). CBCH is optional,
and uses the same physical channel as SDCCH. More precisely,
CBCH replaces sub-slot number 2 of SDCCH channels when enabled.
This change introduces the CBCH enabled multi-frame layouts,
and two separate logical channel types:
- GSM_PCHAN_CCCH_SDCCH4_CBCH (lchan TRXC_SDCCH4_CBCH),
- GSM_PCHAN_SDCCH8_SACCH8C_CBCH (lchan TRXC_SDCCH8_CBCH).
Both logical channels are separately identified using
the following Osmocom specific cbits:
- TRXC_SDCCH4_CBCH - 0x18 (0b11000),
- TRXC_SDCCH8_CBCH - 0x19 (0b11001).
The reason of this separation is that we somehow need to
distinguish between CBCH on C0/TS0, and CBCH on CX/TS0.
Unlike TRXC_SDCCH8_CBCH, TRXC_SDCCH4_CBCH is enabled
automatically (TRX_CH_FLAG_AUTO), so CBCH messages
can be decoded on C0 while being in idle mode.
Change-Id: Iad9905fc3a8a012ff1ada26ff95af384816f9873
2018-09-15 14:34:41 +00:00
|
|
|
},
|
2022-07-02 12:00:53 +00:00
|
|
|
[L1SCHED_SDCCH8_CBCH] = {
|
2019-05-27 23:25:24 +00:00
|
|
|
.name = "SDCCH/8(CBCH)", /* 3GPP TS 05.02, section 3.3.5 */
|
|
|
|
.desc = "Cell Broadcast channel on SDCCH/8",
|
2019-09-18 14:38:03 +00:00
|
|
|
.gsmtap_chan_type = GSMTAP_CHANNEL_CBCH52,
|
2019-05-27 23:25:24 +00:00
|
|
|
.chan_nr = RSL_CHAN_OSMO_CBCH8,
|
2019-09-18 14:38:03 +00:00
|
|
|
.ss_nr = 2,
|
2019-05-27 23:25:24 +00:00
|
|
|
|
2022-07-02 12:00:53 +00:00
|
|
|
/* Same as for L1SCHED_BCCH (xCCH), but Rx only. See above. */
|
2019-05-27 23:25:24 +00:00
|
|
|
.burst_buf_size = 4 * GSM_BURST_PL_LEN,
|
|
|
|
.rx_fn = rx_data_fn,
|
trxcon/scheduler: add CCCH/SDCCH mframe layouts with CBCH
According to GSM TS 05.02, section 3.3.5, Cell Broadcast Channel
(CBCH) is a downlink only channel, which is used to carry the
short message service cell broadcast (SMSCB). CBCH is optional,
and uses the same physical channel as SDCCH. More precisely,
CBCH replaces sub-slot number 2 of SDCCH channels when enabled.
This change introduces the CBCH enabled multi-frame layouts,
and two separate logical channel types:
- GSM_PCHAN_CCCH_SDCCH4_CBCH (lchan TRXC_SDCCH4_CBCH),
- GSM_PCHAN_SDCCH8_SACCH8C_CBCH (lchan TRXC_SDCCH8_CBCH).
Both logical channels are separately identified using
the following Osmocom specific cbits:
- TRXC_SDCCH4_CBCH - 0x18 (0b11000),
- TRXC_SDCCH8_CBCH - 0x19 (0b11001).
The reason of this separation is that we somehow need to
distinguish between CBCH on C0/TS0, and CBCH on CX/TS0.
Unlike TRXC_SDCCH8_CBCH, TRXC_SDCCH4_CBCH is enabled
automatically (TRX_CH_FLAG_AUTO), so CBCH messages
can be decoded on C0 while being in idle mode.
Change-Id: Iad9905fc3a8a012ff1ada26ff95af384816f9873
2018-09-15 14:34:41 +00:00
|
|
|
},
|
2017-07-04 12:38:50 +00:00
|
|
|
};
|