libosmocoding: migrate transcoding routines from OsmoBTS

There are some projects, such as GR-GSM and OsmocomBB, which would
benefit from using one shared implementation of GSM 05.03 code. So,
this commit introduces a new sub-library called libosmocoding, which
(for now) provides GSM, GPRS and EDGE transcoding routines, migrated
from OsmoBTS.

The original GSM 05.03 code from OsmoBTS was relicensed under
GPLv2-or-later with permission of copyright holders (Andreas Eversberg,
Alexander Chemeris and Tom Tsou).

The following data types are currently supported:

 - xCCH
 - PDTCH (CS 1-4 and MCS 1-9)
 - TCH/FR
 - TCH/HR
 - TCH/AFS
 - RCH/AHS
 - RACH
 - SCH

Change-Id: I0c3256b87686d878e4e716d12393cad5924fdfa1
diff --git a/src/coding/libosmocoding.map b/src/coding/libosmocoding.map
new file mode 100644
index 0000000..dbb53de
--- /dev/null
+++ b/src/coding/libosmocoding.map
@@ -0,0 +1,117 @@
+LIBOSMOCODING_1.0 {
+global:
+
+gsm0503_pdtch_hl_hn_ubit;
+gsm0503_pdtch_edge_hl_hn_ubit;
+gsm0503_pdtch_hl_hn_sbit;
+gsm0503_pdtch_edge_hl_hn_sbit;
+gsm0503_usf2six;
+gsm0503_usf2twelve_ubit;
+gsm0503_usf2twelve_sbit;
+gsm0503_puncture_cs2;
+gsm0503_puncture_cs3;
+gsm0503_puncture_mcs1_dl_hdr;
+gsm0503_puncture_mcs1_ul_hdr;
+gsm0503_puncture_mcs1_p1;
+gsm0503_puncture_mcs1_p2;
+gsm0503_puncture_mcs2_p1;
+gsm0503_puncture_mcs2_p2;
+gsm0503_puncture_mcs3_p1;
+gsm0503_puncture_mcs3_p2;
+gsm0503_puncture_mcs3_p3;
+gsm0503_puncture_mcs4_p1;
+gsm0503_puncture_mcs4_p2;
+gsm0503_puncture_mcs4_p3;
+gsm0503_puncture_mcs5_p1;
+gsm0503_puncture_mcs5_p2;
+gsm0503_puncture_mcs6_p1;
+gsm0503_puncture_mcs6_p2;
+gsm0503_puncture_mcs7_dl_hdr;
+gsm0503_puncture_mcs7_ul_hdr;
+gsm0503_puncture_mcs7_p1;
+gsm0503_puncture_mcs7_p2;
+gsm0503_puncture_mcs7_p3;
+gsm0503_puncture_mcs8_p1;
+gsm0503_puncture_mcs8_p2;
+gsm0503_puncture_mcs8_p3;
+gsm0503_puncture_mcs9_p1;
+gsm0503_puncture_mcs9_p2;
+gsm0503_puncture_mcs9_p3;
+gsm0503_interleave_mcs5;
+gsm0503_gsm_fr_map;
+gsm0503_gsm_efr_protected_bits;
+gsm0503_afs_ic_ubit;
+gsm0503_afs_ic_sbit;
+gsm0503_ahs_ic_ubit;
+gsm0503_ahs_ic_sbit;
+gsm0503_tch_hr_interleaving;
+gsm0503_mcs5_usf_precode_table;
+
+gsm0503_fire_crc40;
+gsm0503_cs234_crc16;
+gsm0503_mcs_crc8_hdr;
+gsm0503_mcs_crc12;
+gsm0503_rach_crc6;
+gsm0503_sch_crc10;
+gsm0503_tch_fr_crc3;
+gsm0503_tch_efr_crc8;
+gsm0503_amr_crc6;
+
+gsm0503_xcch_burst_unmap;
+gsm0503_xcch_burst_map;
+gsm0503_tch_burst_unmap;
+gsm0503_tch_burst_map;
+gsm0503_mcs5_ul_burst_map;
+gsm0503_mcs5_ul_burst_unmap;
+gsm0503_mcs7_ul_burst_map;
+gsm0503_mcs7_ul_burst_unmap;
+gsm0503_mcs5_dl_burst_map;
+gsm0503_mcs5_dl_burst_unmap;
+gsm0503_mcs7_dl_burst_map;
+gsm0503_mcs7_dl_burst_unmap;
+gsm0503_mcs5_burst_swap;
+
+gsm0503_xcch_deinterleave;
+gsm0503_xcch_interleave;
+gsm0503_tch_fr_deinterleave;
+gsm0503_tch_fr_interleave;
+gsm0503_tch_hr_deinterleave;
+gsm0503_tch_hr_interleave;
+gsm0503_mcs1_ul_deinterleave;
+gsm0503_mcs1_ul_interleave;
+gsm0503_mcs1_dl_deinterleave;
+gsm0503_mcs1_dl_interleave;
+gsm0503_mcs5_ul_deinterleave;
+gsm0503_mcs5_ul_interleave;
+gsm0503_mcs5_dl_deinterleave;
+gsm0503_mcs5_dl_interleave;
+gsm0503_mcs7_ul_deinterleave;
+gsm0503_mcs7_ul_interleave;
+gsm0503_mcs7_dl_deinterleave;
+gsm0503_mcs7_dl_interleave;
+gsm0503_mcs8_ul_deinterleave;
+gsm0503_mcs8_ul_interleave;
+gsm0503_mcs8_dl_deinterleave;
+gsm0503_mcs8_dl_interleave;
+
+gsm0503_xcch_encode;
+gsm0503_xcch_decode;
+gsm0503_pdtch_encode;
+gsm0503_pdtch_decode;
+gsm0503_pdtch_egprs_encode;
+gsm0503_pdtch_egprs_decode;
+gsm0503_tch_fr_encode;
+gsm0503_tch_fr_decode;
+gsm0503_tch_hr_encode;
+gsm0503_tch_hr_decode;
+gsm0503_tch_afs_encode;
+gsm0503_tch_afs_decode;
+gsm0503_tch_ahs_encode;
+gsm0503_tch_ahs_decode;
+gsm0503_rach_encode;
+gsm0503_rach_decode;
+gsm0503_sch_encode;
+gsm0503_sch_decode;
+
+local: *;
+};