blob: 5ad59083343a15a6257ebd8e975b4fda163d43c0 [file] [log] [blame]
Harald Weltea54a2bb2009-12-01 18:04:30 +05301#ifndef _REST_OCTETS_H
2#define _REST_OCTETS_H
3
4#include <sys/types.h>
5#include <openbsc/gsm_04_08.h>
6
7/* generate SI1 rest octets */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +02008int rest_octets_si1(uint8_t *data, uint8_t *nch_pos);
Harald Weltea54a2bb2009-12-01 18:04:30 +05309
10struct gsm48_si_selection_params {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020011 uint16_t penalty_time:5,
Harald Weltea54a2bb2009-12-01 18:04:30 +053012 temp_offs:3,
13 cell_resel_off:6,
14 cbq:1,
15 present:1;
16};
17
18struct gsm48_si_power_offset {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020019 uint8_t power_offset:2,
Harald Weltea54a2bb2009-12-01 18:04:30 +053020 present:1;
21};
22
23struct gsm48_si3_gprs_ind {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020024 uint8_t si13_position:1,
Harald Weltea54a2bb2009-12-01 18:04:30 +053025 ra_colour:3,
26 present:1;
27};
28
29struct gsm48_lsa_params {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020030 uint32_t prio_thr:3,
Harald Weltea54a2bb2009-12-01 18:04:30 +053031 lsa_offset:3,
32 mcc:12,
33 mnc:12;
34 unsigned int present;
35};
36
37struct gsm48_si_ro_info {
38 struct gsm48_si_selection_params selection_params;
39 struct gsm48_si_power_offset power_offset;
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020040 uint8_t si2ter_indicator;
41 uint8_t early_cm_ctrl;
Harald Weltea54a2bb2009-12-01 18:04:30 +053042 struct {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020043 uint8_t where:3,
Harald Weltea54a2bb2009-12-01 18:04:30 +053044 present:1;
45 } scheduling;
46 struct gsm48_si3_gprs_ind gprs_ind;
47
48 /* SI 4 specific */
49 struct gsm48_lsa_params lsa_params;
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020050 uint16_t cell_id;
51 uint8_t break_ind; /* do we have SI7 + SI8 ? */
Harald Weltea54a2bb2009-12-01 18:04:30 +053052};
53
54
55/* Generate SI3 Rest Octests (Chapter 10.5.2.34 / Table 10.4.72) */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020056int rest_octets_si3(uint8_t *data, const struct gsm48_si_ro_info *si3);
Harald Weltea54a2bb2009-12-01 18:04:30 +053057
58/* Generate SI4 Rest Octets (Chapter 10.5.2.35) */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020059int rest_octets_si4(uint8_t *data, const struct gsm48_si_ro_info *si4);
Harald Weltea54a2bb2009-12-01 18:04:30 +053060
61enum pbcch_carrier_type {
62 PBCCH_BCCH,
63 PBCCH_ARFCN,
64 PBCCH_MAIO
65};
66
67/* TS 03.60 Chapter 6.3.3.1: Network Mode of Operation */
68enum gprs_nmo {
69 GPRS_NMO_I = 0, /* CS pagin on GPRS paging or traffic channel */
70 GPRS_NMO_II = 1, /* all paging on CCCH */
71 GPRS_NMO_III = 2, /* no paging coordination */
72};
73
Harald Welte3ce9a0d2010-04-18 14:49:05 +020074/* TS 04.60 12.24 */
Harald Weltea54a2bb2009-12-01 18:04:30 +053075struct gprs_cell_options {
76 enum gprs_nmo nmo;
77 /* T3168: wait for packet uplink assignment message */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020078 uint32_t t3168; /* in milliseconds */
Harald Weltea54a2bb2009-12-01 18:04:30 +053079 /* T3192: wait for release of the TBF after reception of the final block */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020080 uint32_t t3192; /* in milliseconds */
81 uint32_t drx_timer_max;/* in seconds */
82 uint32_t bs_cv_max;
Harald Welte3ce9a0d2010-04-18 14:49:05 +020083
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020084 uint8_t ext_info_present;
Harald Welte3ce9a0d2010-04-18 14:49:05 +020085 struct {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020086 uint8_t egprs_supported;
87 uint8_t use_egprs_p_ch_req;
88 uint8_t bep_period;
89 uint8_t pfc_supported;
90 uint8_t dtm_supported;
91 uint8_t bss_paging_coordination;
Harald Welte3ce9a0d2010-04-18 14:49:05 +020092 } ext_info;
Harald Weltea54a2bb2009-12-01 18:04:30 +053093};
94
95/* TS 04.60 Table 12.9.2 */
96struct gprs_power_ctrl_pars {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +020097 uint8_t alpha;
98 uint8_t t_avg_w;
99 uint8_t t_avg_t;
100 uint8_t pc_meas_chan;
101 uint8_t n_avg_i;
Harald Weltea54a2bb2009-12-01 18:04:30 +0530102};
103
104struct gsm48_si13_info {
105 struct gprs_cell_options cell_opts;
106 struct gprs_power_ctrl_pars pwr_ctrl_pars;
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +0200107 uint8_t bcch_change_mark;
108 uint8_t si_change_field;
109 uint8_t pbcch_present;
Harald Weltea54a2bb2009-12-01 18:04:30 +0530110
111 union {
112 struct {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +0200113 uint8_t rac;
114 uint8_t spgc_ccch_sup;
115 uint8_t net_ctrl_ord;
116 uint8_t prio_acc_thr;
Harald Weltea54a2bb2009-12-01 18:04:30 +0530117 } no_pbcch;
118 struct {
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +0200119 uint8_t psi1_rep_per;
120 uint8_t pb;
121 uint8_t tsc;
122 uint8_t tn;
Harald Weltea54a2bb2009-12-01 18:04:30 +0530123 enum pbcch_carrier_type carrier_type;
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +0200124 uint16_t arfcn;
125 uint8_t maio;
Harald Weltea54a2bb2009-12-01 18:04:30 +0530126 } pbcch;
127 };
128};
129
130/* Generate SI13 Rest Octests (Chapter 10.5.2.37b) */
Holger Hans Peter Freyther7eb8a9a2011-04-18 17:04:00 +0200131int rest_octets_si13(uint8_t *data, const struct gsm48_si13_info *si13);
Harald Weltea54a2bb2009-12-01 18:04:30 +0530132
133#endif /* _REST_OCTETS_H */