blob: f6957d2d02e2ea52a1d4ff7d1cd9fc86b6546bff [file] [log] [blame]
Andreas Eversberga23c7ee2012-12-18 10:47:28 +01001/* sysmocom femtobts L1 API related definitions */
2
3/* (C) 2011 by Harald Welte <laforge@gnumonks.org>
4 *
5 * All Rights Reserved
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Affero General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#include <sysmocom/femtobts/superfemto.h>
23#include <sysmocom/femtobts/gsml1const.h>
24#include <sysmocom/femtobts/gsml1dbg.h>
25
26#include "femtobts.h"
27
28const enum l1prim_type femtobts_l1prim_type[GsmL1_PrimId_NUM] = {
29 [GsmL1_PrimId_MphInitReq] = L1P_T_REQ,
30 [GsmL1_PrimId_MphCloseReq] = L1P_T_REQ,
31 [GsmL1_PrimId_MphConnectReq] = L1P_T_REQ,
32 [GsmL1_PrimId_MphDisconnectReq] = L1P_T_REQ,
33 [GsmL1_PrimId_MphActivateReq] = L1P_T_REQ,
34 [GsmL1_PrimId_MphDeactivateReq] = L1P_T_REQ,
35 [GsmL1_PrimId_MphConfigReq] = L1P_T_REQ,
36 [GsmL1_PrimId_MphMeasureReq] = L1P_T_REQ,
37 [GsmL1_PrimId_MphInitCnf] = L1P_T_CONF,
38 [GsmL1_PrimId_MphCloseCnf] = L1P_T_CONF,
39 [GsmL1_PrimId_MphConnectCnf] = L1P_T_CONF,
40 [GsmL1_PrimId_MphDisconnectCnf] = L1P_T_CONF,
41 [GsmL1_PrimId_MphActivateCnf] = L1P_T_CONF,
42 [GsmL1_PrimId_MphDeactivateCnf] = L1P_T_CONF,
43 [GsmL1_PrimId_MphConfigCnf] = L1P_T_CONF,
44 [GsmL1_PrimId_MphMeasureCnf] = L1P_T_CONF,
45 [GsmL1_PrimId_MphTimeInd] = L1P_T_IND,
46 [GsmL1_PrimId_MphSyncInd] = L1P_T_IND,
47 [GsmL1_PrimId_PhEmptyFrameReq] = L1P_T_REQ,
48 [GsmL1_PrimId_PhDataReq] = L1P_T_REQ,
49 [GsmL1_PrimId_PhConnectInd] = L1P_T_IND,
50 [GsmL1_PrimId_PhReadyToSendInd] = L1P_T_IND,
51 [GsmL1_PrimId_PhDataInd] = L1P_T_IND,
52 [GsmL1_PrimId_PhRaInd] = L1P_T_IND,
53};
54
55const struct value_string femtobts_l1prim_names[GsmL1_PrimId_NUM+1] = {
56 { GsmL1_PrimId_MphInitReq, "MPH-INIT.req" },
57 { GsmL1_PrimId_MphCloseReq, "MPH-CLOSE.req" },
58 { GsmL1_PrimId_MphConnectReq, "MPH-CONNECT.req" },
59 { GsmL1_PrimId_MphDisconnectReq,"MPH-DISCONNECT.req" },
60 { GsmL1_PrimId_MphActivateReq, "MPH-ACTIVATE.req" },
61 { GsmL1_PrimId_MphDeactivateReq,"MPH-DEACTIVATE.req" },
62 { GsmL1_PrimId_MphConfigReq, "MPH-CONFIG.req" },
63 { GsmL1_PrimId_MphMeasureReq, "MPH-MEASURE.req" },
64 { GsmL1_PrimId_MphInitCnf, "MPH-INIT.conf" },
65 { GsmL1_PrimId_MphCloseCnf, "MPH-CLOSE.conf" },
66 { GsmL1_PrimId_MphConnectCnf, "MPH-CONNECT.conf" },
67 { GsmL1_PrimId_MphDisconnectCnf,"MPH-DISCONNECT.conf" },
68 { GsmL1_PrimId_MphActivateCnf, "MPH-ACTIVATE.conf" },
69 { GsmL1_PrimId_MphDeactivateCnf,"MPH-DEACTIVATE.conf" },
70 { GsmL1_PrimId_MphConfigCnf, "MPH-CONFIG.conf" },
71 { GsmL1_PrimId_MphMeasureCnf, "MPH-MEASURE.conf" },
72 { GsmL1_PrimId_MphTimeInd, "MPH-TIME.ind" },
73 { GsmL1_PrimId_MphSyncInd, "MPH-SYNC.ind" },
74 { GsmL1_PrimId_PhEmptyFrameReq, "PH-EMPTY_FRAME.req" },
75 { GsmL1_PrimId_PhDataReq, "PH-DATA.req" },
76 { GsmL1_PrimId_PhConnectInd, "PH-CONNECT.ind" },
77 { GsmL1_PrimId_PhReadyToSendInd,"PH-READY_TO_SEND.ind" },
78 { GsmL1_PrimId_PhDataInd, "PH-DATA.ind" },
79 { GsmL1_PrimId_PhRaInd, "PH-RA.ind" },
80 { 0, NULL }
81};
82
83const GsmL1_PrimId_t femtobts_l1prim_req2conf[GsmL1_PrimId_NUM] = {
84 [GsmL1_PrimId_MphInitReq] = GsmL1_PrimId_MphInitCnf,
85 [GsmL1_PrimId_MphCloseReq] = GsmL1_PrimId_MphCloseCnf,
86 [GsmL1_PrimId_MphConnectReq] = GsmL1_PrimId_MphConnectCnf,
87 [GsmL1_PrimId_MphDisconnectReq] = GsmL1_PrimId_MphDisconnectCnf,
88 [GsmL1_PrimId_MphActivateReq] = GsmL1_PrimId_MphActivateCnf,
89 [GsmL1_PrimId_MphDeactivateReq] = GsmL1_PrimId_MphDeactivateCnf,
90 [GsmL1_PrimId_MphConfigReq] = GsmL1_PrimId_MphConfigCnf,
91 [GsmL1_PrimId_MphMeasureReq] = GsmL1_PrimId_MphMeasureCnf,
92};
93
94const enum l1prim_type femtobts_sysprim_type[SuperFemto_PrimId_NUM] = {
95 [SuperFemto_PrimId_SystemInfoReq] = L1P_T_REQ,
96 [SuperFemto_PrimId_SystemInfoCnf] = L1P_T_CONF,
97 [SuperFemto_PrimId_SystemFailureInd] = L1P_T_IND,
98 [SuperFemto_PrimId_ActivateRfReq] = L1P_T_REQ,
99 [SuperFemto_PrimId_ActivateRfCnf] = L1P_T_CONF,
100 [SuperFemto_PrimId_DeactivateRfReq] = L1P_T_REQ,
101 [SuperFemto_PrimId_DeactivateRfCnf] = L1P_T_CONF,
102 [SuperFemto_PrimId_SetTraceFlagsReq] = L1P_T_REQ,
103 [SuperFemto_PrimId_RfClockInfoReq] = L1P_T_REQ,
104 [SuperFemto_PrimId_RfClockInfoCnf] = L1P_T_CONF,
105 [SuperFemto_PrimId_RfClockSetupReq] = L1P_T_REQ,
106 [SuperFemto_PrimId_RfClockSetupCnf] = L1P_T_CONF,
107 [SuperFemto_PrimId_Layer1ResetReq] = L1P_T_REQ,
108 [SuperFemto_PrimId_Layer1ResetCnf] = L1P_T_CONF,
109};
110
111const struct value_string femtobts_sysprim_names[SuperFemto_PrimId_NUM+1] = {
112 { SuperFemto_PrimId_SystemInfoReq, "SYSTEM-INFO.req" },
113 { SuperFemto_PrimId_SystemInfoCnf, "SYSTEM-INFO.conf" },
114 { SuperFemto_PrimId_SystemFailureInd, "SYSTEM-FAILURE.ind" },
115 { SuperFemto_PrimId_ActivateRfReq, "ACTIVATE-RF.req" },
116 { SuperFemto_PrimId_ActivateRfCnf, "ACTIVATE-RF.conf" },
117 { SuperFemto_PrimId_DeactivateRfReq, "DEACTIVATE-RF.req" },
118 { SuperFemto_PrimId_DeactivateRfCnf, "DEACTIVATE-RF.conf" },
119 { SuperFemto_PrimId_SetTraceFlagsReq, "SET-TRACE-FLAGS.req" },
120 { SuperFemto_PrimId_RfClockInfoReq, "RF-CLOCK-INFO.req" },
121 { SuperFemto_PrimId_RfClockInfoCnf, "RF-CLOCK-INFO.conf" },
122 { SuperFemto_PrimId_RfClockSetupReq, "RF-CLOCK-SETUP.req" },
123 { SuperFemto_PrimId_RfClockSetupCnf, "RF-CLOCK-SETUP.conf" },
124 { SuperFemto_PrimId_Layer1ResetReq, "LAYER1-RESET.req" },
125 { SuperFemto_PrimId_Layer1ResetCnf, "LAYER1-RESET.conf" },
126 { 0, NULL }
127};
128
129const SuperFemto_PrimId_t femtobts_sysprim_req2conf[SuperFemto_PrimId_NUM] = {
130 [SuperFemto_PrimId_SystemInfoReq] = SuperFemto_PrimId_SystemInfoCnf,
131 [SuperFemto_PrimId_ActivateRfReq] = SuperFemto_PrimId_ActivateRfCnf,
132 [SuperFemto_PrimId_DeactivateRfReq] = SuperFemto_PrimId_DeactivateRfCnf,
133 [SuperFemto_PrimId_RfClockInfoReq] = SuperFemto_PrimId_RfClockInfoCnf,
134 [SuperFemto_PrimId_RfClockSetupReq] = SuperFemto_PrimId_RfClockSetupCnf,
135 [SuperFemto_PrimId_Layer1ResetReq] = SuperFemto_PrimId_Layer1ResetCnf,
136};
137
138const struct value_string femtobts_l1sapi_names[GsmL1_Sapi_NUM+1] = {
139 { GsmL1_Sapi_Fcch, "FCCH" },
140 { GsmL1_Sapi_Sch, "SCH" },
141 { GsmL1_Sapi_Sacch, "SACCH" },
142 { GsmL1_Sapi_Sdcch, "SDCCH" },
143 { GsmL1_Sapi_Bcch, "BCCH" },
144 { GsmL1_Sapi_Pch, "PCH" },
145 { GsmL1_Sapi_Agch, "AGCH" },
146 { GsmL1_Sapi_Cbch, "CBCH" },
147 { GsmL1_Sapi_Rach, "RACH" },
148 { GsmL1_Sapi_TchF, "TCH/F" },
149 { GsmL1_Sapi_FacchF, "FACCH/F" },
150 { GsmL1_Sapi_TchH, "TCH/H" },
151 { GsmL1_Sapi_FacchH, "FACCH/H" },
152 { GsmL1_Sapi_Nch, "NCH" },
153 { GsmL1_Sapi_Pdtch, "PDTCH" },
154 { GsmL1_Sapi_Pacch, "PACCH" },
155 { GsmL1_Sapi_Pbcch, "PBCCH" },
156 { GsmL1_Sapi_Pagch, "PAGCH" },
157 { GsmL1_Sapi_Ppch, "PPCH" },
158 { GsmL1_Sapi_Pnch, "PNCH" },
159 { GsmL1_Sapi_Ptcch, "PTCCH" },
160 { GsmL1_Sapi_Prach, "PRACH" },
161 { 0, NULL }
162};
163
164const struct value_string femtobts_l1status_names[GSML1_STATUS_NUM+1] = {
165 { GsmL1_Status_Success, "Success" },
166 { GsmL1_Status_Generic, "Generic error" },
167 { GsmL1_Status_NoMemory, "Not enough memory" },
168 { GsmL1_Status_Timeout, "Timeout" },
169 { GsmL1_Status_InvalidParam, "Invalid parameter" },
170 { GsmL1_Status_Busy, "Resource busy" },
171 { GsmL1_Status_NoRessource, "No more resources" },
172 { GsmL1_Status_Uninitialized, "Trying to use uninitialized resource" },
173 { GsmL1_Status_NullInterface, "Trying to call a NULL interface" },
174 { GsmL1_Status_NullFctnPtr, "Trying to call a NULL function ptr" },
175 { GsmL1_Status_BadCrc, "Bad CRC" },
176 { GsmL1_Status_BadUsf, "Bad USF" },
177 { GsmL1_Status_InvalidCPS, "Invalid CPS field" },
178 { GsmL1_Status_UnexpectedBurst, "Unexpected burst" },
179 { GsmL1_Status_UnavailCodec, "AMR codec is unavailable" },
180 { GsmL1_Status_CriticalError, "Critical error" },
181 { GsmL1_Status_OverheatError, "Overheat error" },
182 { GsmL1_Status_DeviceError, "Device error" },
183 { GsmL1_Status_FacchError, "FACCH / TCH order error" },
184 { GsmL1_Status_AlreadyDeactivated, "Lchan already deactivated" },
185 { GsmL1_Status_TxBurstFifoOvrn, "FIFO overrun" },
186 { GsmL1_Status_TxBurstFifoUndr, "FIFO underrun" },
187 { GsmL1_Status_NotSynchronized, "Not synchronized" },
188 { GsmL1_Status_Unsupported, "Unsupported feature" },
189 { 0, NULL }
190};
191
192const struct value_string femtobts_tracef_names[29] = {
193 { DBG_DEBUG, "DEBUG" },
194 { DBG_L1WARNING, "L1_WARNING" },
195 { DBG_ERROR, "ERROR" },
196 { DBG_L1RXMSG, "L1_RX_MSG" },
197 { DBG_L1RXMSGBYTE, "L1_RX_MSG_BYTE" },
198 { DBG_L1TXMSG, "L1_TX_MSG" },
199 { DBG_L1TXMSGBYTE, "L1_TX_MSG_BYTE" },
200 { DBG_MPHCNF, "MPH_CNF" },
201 { DBG_MPHIND, "MPH_IND" },
202 { DBG_MPHREQ, "MPH_REQ" },
203 { DBG_PHIND, "PH_IND" },
204 { DBG_PHREQ, "PH_REQ" },
205 { DBG_PHYRF, "PHY_RF" },
206 { DBG_PHYRFMSGBYTE, "PHY_MSG_BYTE" },
207 { DBG_MODE, "MODE" },
208 { DBG_TDMAINFO, "TDMA_INFO" },
209 { DBG_BADCRC, "BAD_CRC" },
210 { DBG_PHINDBYTE, "PH_IND_BYTE" },
211 { DBG_PHREQBYTE, "PH_REQ_BYTE" },
212 { DBG_DEVICEMSG, "DEVICE_MSG" },
213 { DBG_RACHINFO, "RACH_INFO" },
214 { DBG_LOGCHINFO, "LOG_CH_INFO" },
215 { DBG_MEMORY, "MEMORY" },
216 { DBG_PROFILING, "PROFILING" },
217 { DBG_TESTCOMMENT, "TEST_COMMENT" },
218 { DBG_TEST, "TEST" },
219 { DBG_STATUS, "STATUS" },
220 { 0, NULL }
221};
222
223const struct value_string femtobts_tch_pl_names[] = {
224 { GsmL1_TchPlType_NA, "N/A" },
225 { GsmL1_TchPlType_Fr, "FR" },
226 { GsmL1_TchPlType_Hr, "HR" },
227 { GsmL1_TchPlType_Efr, "EFR" },
228 { GsmL1_TchPlType_Amr, "AMR(IF2)" },
229 { GsmL1_TchPlType_Amr_SidBad, "AMR(SID BAD)" },
230 { GsmL1_TchPlType_Amr_Onset, "AMR(ONSET)" },
231 { GsmL1_TchPlType_Amr_Ratscch, "AMR(RATSCCH)" },
232 { GsmL1_TchPlType_Amr_SidUpdateInH, "AMR(SID_UPDATE INH)" },
233 { GsmL1_TchPlType_Amr_SidFirstP1, "AMR(SID_FIRST P1)" },
234 { GsmL1_TchPlType_Amr_SidFirstP2, "AMR(SID_FIRST P2)" },
235 { GsmL1_TchPlType_Amr_SidFirstInH, "AMR(SID_FIRST INH)" },
236 { GsmL1_TchPlType_Amr_RatscchMarker, "AMR(RATSCCH MARK)" },
237 { GsmL1_TchPlType_Amr_RatscchData, "AMR(RATSCCH DATA)" },
238 { 0, NULL }
239};
240
Andreas Eversberga23c7ee2012-12-18 10:47:28 +0100241const struct value_string femtobts_dir_names[] = {
242 { GsmL1_Dir_TxDownlink, "TxDL" },
243 { GsmL1_Dir_TxUplink, "TxUL" },
244 { GsmL1_Dir_RxUplink, "RxUL" },
245 { GsmL1_Dir_RxDownlink, "RxDL" },
246 { GsmL1_Dir_TxDownlink|GsmL1_Dir_RxUplink, "BOTH" },
247 { 0, NULL }
248};
249
250const struct value_string femtobts_chcomb_names[] = {
251 { GsmL1_LogChComb_0, "dummy" },
252 { GsmL1_LogChComb_I, "tch_f" },
253 { GsmL1_LogChComb_II, "tch_h" },
254 { GsmL1_LogChComb_IV, "ccch" },
255 { GsmL1_LogChComb_V, "ccch_sdcch4" },
256 { GsmL1_LogChComb_VII, "sdcch8" },
257 { GsmL1_LogChComb_XIII, "pdtch" },
258 { 0, NULL }
259};
260
261const uint8_t pdch_msu_size[_NUM_PDCH_CS] = {
262 [PDCH_CS_1] = 23,
263 [PDCH_CS_2] = 34,
264 [PDCH_CS_3] = 40,
265 [PDCH_CS_4] = 54,
266 [PDCH_MCS_1] = 27,
267 [PDCH_MCS_2] = 33,
268 [PDCH_MCS_3] = 42,
269 [PDCH_MCS_4] = 49,
270 [PDCH_MCS_5] = 60,
271 [PDCH_MCS_6] = 78,
272 [PDCH_MCS_7] = 118,
273 [PDCH_MCS_8] = 142,
274 [PDCH_MCS_9] = 154
275};