summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* core/conv: do not mix up AVX and SSE codeVadim Yanitskiy2017-05-296-570/+740
| | | | | | | | | | | | | | | | | | | | | | | According to GCC's wiki: If you specify command-line switches such as -msse, the compiler could use the extended instruction sets even if the built-ins are not used explicitly in the program. For this reason, applications that perform run-time CPU detection must compile separate files for each supported architecture, using the appropriate flags. In particular, the file containing the CPU detection code should be compiled without these options. So, this change introduces a separate Viterbi implementation, which is almost the same as previous one, but is being compiled with -mavx2. This implementation will be only used by CPUs with both SSE and AVX support: SSE3 and AVX2: viterbi_sse_avx.c SSE3 only: viterbi_sse.c Generic: viterbi_generic.c Change-Id: I042cc76258df7e4c6c90a73af3d0a6e75999b2b0
* core/conv: rename viterbi_gen.c to viterbi_generic.cVadim Yanitskiy2017-05-292-1/+1
| | | | | | | Let's avoid confusion with generated files which have ending with _gen.* as well. Change-Id: I3ecd8f9e73c05236f2cdc186f58b3d0ba552283f
* socket: Add osmo_sock_init2_ofd() functionPau Espin Pedrol2017-05-262-0/+27
| | | | | | Will be used by osmo-bts-trx Change-Id: I3c655a4af64fb80497a5aaa811cce8005dba9cd9
* Introduce build script for arm-none-eabi cross-compilationsblobb2017-05-261-0/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | This is a necessary step to use libosmocore-arm dep in OsmocomBB. After this patch is submitted the "./contrib/jenkins.sh" line in libosmocore jenkins jobs [1][2] needs to be replaced with: if [[ "$JOB_NAME" == *"arch=arm-none-eabi,label=linux_amd64_debian8"* ]] then ./contrib/jenkins-arm.sh else # (FreeBSD && debian8)_amd64 builds ./contrib/jenkins.sh fi Furthermore, the "arch" matrix-build axis has to be created, holding "arm-none-eabi" and "amd64". Following combination filter is necessary to skip cross-compilations on FreeBSD buildslave: !(arch=="arm-none-eabi" && label=="FreeBSD_amd64") [1] https://jenkins.osmocom.org/jenkins/job/libosmocore/ [2] https://jenkins.osmocom.org/jenkins/job/libosmocore-gerrit/ Change-Id: I0db83ad2c94ada65c00fd1bcf867830dec80085d
* Revert "Introduce build script for arm-none-eabi cross-compilations"blobb2017-05-261-33/+0
| | | | | | | | | | | | "--enable-sanitize" does not work on jenkins build slave (debian8), although it worked out locally for me. Following patch will introduce corrected arm build script without "--enable-sanitize" option: https://gerrit.osmocom.org/#/c/2742/ This reverts commit ba58167e1bf6ff8815c4e9e0d7b0b63ba1c529f8. Change-Id: I644114679db1394e75ff12b0203ae8e568aff82c
* Introduce build script for arm-none-eabi cross-compilationsblobb2017-05-251-0/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | This is a necessary step to use libosmocore-arm dep in OsmocomBB. After this patch is submitted the "./contrib/jenkins.sh" line in libosmocore jenkins jobs [1][2] needs to be replaced with: if [[ "$JOB_NAME" == *"arch=arm-none-eabi,label=linux_amd64_debian8"* ]] then ./contrib/jenkins-arm.sh else # (FreeBSD && debian8)_amd64 builds ./contrib/jenkins.sh fi Furthermore, the "arch" matrix-build axis has to be created, holding "arm-none-eabi". Following combination filter is necessary to skip cross-compilations on FreeBSD buildslave: !(arch=="arm-none-eabi" && label=="FreeBSD_amd64") [1] https://jenkins.osmocom.org/jenkins/job/libosmocore/ [2] https://jenkins.osmocom.org/jenkins/job/libosmocore-gerrit/ Change-Id: I9e07fb9e60830dbd585f22d9c658c46252ce399f
* Add human-readable names for signal_nsMax2017-05-243-0/+13
| | | | | Change-Id: Id664355eb8305fb287e4dae0800fb20dc2f9b8cd Related: SYS#3610
* Distinguish between unsupported and invalid MCSMax2017-05-242-59/+63
| | | | | | | | | | | | | | | | | | Previously MCS0 was incorrectly set for some of type1 header values while according to 3GPP TS 44.060 it can only be set for type3. Fix this: * use EGPRS_MCS* constants instead of magic values * do not set MCS0 for reserved bits values in EGPRS header type1 * return different error codes for invalid and unsupported MCS as well as for other decoding errors Note: there's no need to adjust tests because MCS0 decoding is not supported but it's better to explicitly distinguish between unsupported and invalid values nevertheless. Change-Id: Id665d5c0cf50efa18b1bcbf4f17359418a380f9e Related: OS#1524
* core/conv: add x86 SSE support for Viterbi decoderTom Tsou2017-05-244-10/+748
| | | | | | | | | | | | | | Fast convolutional decoding is provided through x86 intrinsic based SSE operations. SSE3, found on virtually all modern x86 processors, is the minimal requirement. SSE4.1 and AVX2 are used if available. Also, the original code was extended with runtime SIMD detection, so only supported extensions will be used by target CPU. It makes the library more partable, what is very important for binary packages distribution. Runtime SIMD detection is currently implemented through the __builtin_cpu_supports call. Change-Id: I1da6d71ed0564f1d684f3a836e998d09de5f0351
* tests/Makefile.am: do not test disabled featuresVadim Yanitskiy2017-05-181-4/+19
| | | | | | Compiling tests for disabled features breaks build. Change-Id: Iebcc24b493092a5a8e3561d7642a0b4608a8beae
* src/select.c: Don't #include <sys/select.h> if it doesn't existHarald Welte2017-05-171-1/+1
| | | | | | | | | We have to #include <sys/select.h> inside the block protected by HAVE_SYS_SELECT_H, otherwise it will fail on (embedded) builds where that file doesn't exist, such as the arm-none-eabi target on Debian stable and Ubuntu 16.04. Change-Id: I82a2dcbc55b6ee0e914881c5e09b80506c5de4f2
* add libpseudotalloc as super-simplistic talloc replacementHarald Welte2017-05-179-1/+145
| | | | | | | | | | | In tightly embedded builds (--enable-embedded), we want the ability to replace talloc with a very simple heap allocator to avoid the complexity of talloc without modifying all our code that assumes talloc. This will break the hierarchical notion of the allocator, but libosmo{core,gsm,coding,codec} don't rely on that anyway. Change-Id: Ie341034076f242a813f081919dd09d845775ad35
* gitignore: Update with new *_gen.c files and generic 'tags'Harald Welte2017-05-171-0/+2
| | | | Change-Id: I6e9df474b4d93e6e20c6d19ac9ffab5b7b959143
* sercomm: More API documentationHarald Welte2017-05-172-5/+62
| | | | Change-Id: I5d5002ceedd10e10d772693478f4f9cab6b1290a
* sercomm: Better integration of driver interfaceHarald Welte2017-05-172-34/+24
| | | | | | | | | We cannot assume a certain UART API like uart_baudrate() which only exists in OsmocomBB. Rather, use generic function prototypes (sercomm_drv_*) which are to be provided by the application / environment to the sercomm core. Change-Id: I01ea3067baf1791000c1a7d537ccce496a1ab1ee
* add sercomm unit testHarald Welte2017-05-174-2/+169
| | | | Change-Id: I9e2e7fcda28e7c6844d5faa09e02acf537cea44d
* sercomm: Include in libosmocore MakefileHarald Welte2017-05-174-5/+6
| | | | Change-Id: If9d50d634381f43b2c67b97fea36a462a66e4559
* src/panic.c: Remove unneeded #include of gsm_utils.hHarald Welte2017-05-171-1/+0
| | | | Change-Id: I25cea5d3a4a900550e8f18c2bea392e642bfb191
* sercomm: Rename sercomm_lock() to sercomm_drv_lock()Harald Welte2017-05-171-18/+15
| | | | | | | | The user of the code is supposed to provide a "driver" implementing those calls according to the specific target architecture/hardware. This only applies to non-host (i.e. embedded) builds Change-Id: I9a6848f23b70fc32f4de10149d857374f76f000d
* sercomm: remove unrequired helper functionsHarald Welte2017-05-172-15/+0
| | | | | | | | osmo_sercomm_{bind,get}_uart() are not really needed anymore, as sercomm_inst is public and thus the user can access the uart_id member directly. Change-Id: I6d57709c3764036046202f16a26c9eb87426c8d1
* sercomm: Move HDLC related defines into C fileHarald Welte2017-05-172-7/+7
| | | | | | | Those values are not relevant to the sercomm user, only to the implementation and thus can remain inside sercomm.c Change-Id: I5700a45985b7c119c6338932171aae62ee4e2d22
* sercomm: Add doxygen-style documentation to public APIHarald Welte2017-05-172-13/+32
| | | | Change-Id: I2d8b11905692920d328262836420f01305be489e
* sercomm: include header file from osmocom/coreHarald Welte2017-05-171-2/+1
| | | | Change-Id: Iff5ff3a51d7781bcfb3aff0839b733bc7a71b7e5
* sercomm: make rx msg size configurable per instanceHarald Welte2017-05-172-4/+7
| | | | Change-Id: I835506e26e83232e1e7290c0da04d389c8d7fb40
* sercomm: introduce osmo_ naming prefix in struct and function namesHarald Welte2017-05-172-28/+28
| | | | Change-Id: If4e22f182a47b72b1fe43146716a4fbccceb62e6
* sercomm: Enable multiple instances of 'sercomm'Harald Welte2017-05-172-104/+106
| | | | | | | | Rather than having one global instance, let's permit multiple instances of sercomm to co-exist, with all API functions extended by the instance as first argument. Change-Id: I0f3b53f464b119d65747bcb0be0af2d631e1cc05
* Import sercomm.c from osmocom-bbHarald Welte2017-05-172-0/+404
| | | | | | | | | This imports the file src/target/firmware/comm/sercomm.c from osmocom-bb.git without introducing any modifications. It will not even be built yet, as Makefile integration is intentionally left until it has been adapted to work inside libosmocore. Change-Id: I9ee199381c7b5986a9540d124836cdddd0f66c86
* utils/osmo-sim-test.c: strip unused variablesVadim Yanitskiy2017-05-171-5/+1
| | | | Change-Id: Id577d9df5a814ad5aa00e1d04c4790d75d17ad7e
* gsm/gsm0411_smr.c: strip unused variableVadim Yanitskiy2017-05-171-2/+1
| | | | Change-Id: I53f69913907588c45a9661c4e86e1bfb57a2418f
* l1sap: Add frame-number to measurement indication structPhilipp Maier2017-05-171-0/+1
| | | | | | | | The distribution of the channel measurement calculations over multiple timeslots (continous calculation) requires to keep track of the frame number in struct info_meas_ind_param Change-Id: I8c783b4a92ae2c3cc5d17936a146eb49d47eac37
* timer: use timerclear() rather than explicit tv_set = tv_usec = 0Harald Welte2017-05-151-2/+1
| | | | Change-Id: I2735fc8d19fd68ef2c14a31e83cb396dc2e05587
* stats: Disable stats*.c on embedded targetsHarald Welte2017-05-153-0/+28
| | | | Change-Id: I6beb4fcc394ed7d3f8dd7a097b6e998245ecf401
* gsm/tlv.h: fix copy-paste errorVadim Yanitskiy2017-05-151-2/+2
| | | | Change-Id: Id52ddd8358fd4af1ecc71142deb09f1e237021f3
* fsm_test.c: fix unreachable checkVadim Yanitskiy2017-05-151-1/+3
| | | | Change-Id: Ic3d5da00f7ece6dbcd4c999187a5748c9331e60f
* strrb: Add missing #include to talloc.hHarald Welte2017-05-151-0/+1
| | | | | | The strrb.c code uses talloc API without using the proper #include. Change-Id: I4ac485324f40545339d8df6884f1dea319a23648
* gsm0808 + ipa: fix compilation on systems without sys/socket.hHarald Welte2017-05-154-5/+17
| | | | Change-Id: I60f5d4982cd96ab29f9924ec11b46bf56fbfc346
* libosmogb: Convert to use new endian conversion helpersHarald Welte2017-05-156-96/+91
| | | | Change-Id: I5ed17702cd9487e1cab6bae39802aa11fb6a37b0
* tlv: Add tlvp_val{16,32}be() to get TLV values in unaligned host byte orderHarald Welte2017-05-151-0/+23
| | | | Change-Id: I3749e1e4974742bc8c32722e0e998775b5394829
* use osmo_{htonl,htons,ntohl,ntohs}() functions all over libosmocoreHarald Welte2017-05-1510-34/+31
| | | | | | This gets us one step closer to fixing the embedded build Change-Id: I3fc2639b6ade9ab138766987eceab7ec9498fdc7
* introduce byteswap.h with osmo_{htonl,ntohl,htons,ntohs}Harald Welte2017-05-156-2/+89
| | | | | | | | We need to have an architecture-independend way of endian conversion / byte swapping functions which will also work on embedded (bare iron) builds. Let's introduce osmocom/core/bytesawp.h for this purpose. Change-Id: Ibc0cc1e36d4ed63a35cf8ceff3af0f26e5ac7a3d
* endian.h: Make it work on 'bare iron' builds (and possibly more platforms)Harald Welte2017-05-151-1/+13
| | | | | | | We can use __BYTE_ORDER__ which seems to be defined by both gcc and clang/llvm. Change-Id: Id6821c99e88242126d9697099b1dd92c6212526a
* src/logging.c: Fix EMBEDDED buildHarald Welte2017-05-151-1/+1
| | | | | | | We don't enable/build _file_output in EMBEDDED builds, so we shouldn'r refer to that symbol. Change-Id: I491aa8ee9d20a96cbb2814700475afe03eb99c9e
* kasumi_test.c: fix incomplete checkVadim Yanitskiy2017-05-141-8/+8
| | | | | | | | Previously the 'passed' variable in test_expansion() was being overwritten on every call of _compare_mem(), so only the result of last call influenced the test result. Change-Id: Ibf3ab453c20c7eeec234b95bfe14b497c572c35f
* Make EARFCN size calculation more robustMax2017-05-143-7/+26
| | | | | | | | | | | | | * add osmo_earfcn_bit_size_ext() function which allows to specify how many EARFCNs we should skip when estimating required bit size for SI2quater * make old osmo_earfcn_bit_size() into wrapper over newly added function and mark it as deprecated This is necessary to properly estimate necessary space for EARFCNs when they are spread over several SI2q messages with different index. Change-Id: I92e12e91605bdab9916a3f665705287572434f74 Related: RT#8792
* gsm_04_08: Add missing GSM cause valueDaniel Willmann2017-05-122-0/+6
| | | | | | | | | | | | Table 10.5.157 in 10.5.6.6 of 3GPP TS 04.08 is badly formatted. The first value 0x19 "LLC or SNDCP failure" is in the same line as the heading and has not been included in the struct_value so far. Table 10.5.157 in 10.5.6.6 of 3GPP TS 24.008 fixes this formatting issue and also defines two more values 0x08 and 0x18 which are now added to the struct value_string. Change-Id: I5bcc52f739ff0677011d024448afcc2a54869638
* configure.ac: fix build on systems without SIMD supportVadim Yanitskiy2017-05-111-3/+4
| | | | | | | HAVE_AVX2, HAVE_SSE3 and HAVE_SSE4_1 were never defined if CPU architecture doesn't match the (86*|x86_64*|amd64*) condition. Change-Id: If0c3128f9768f95c1f5f955db242e71c81384c6c
* doc: fix incorrect return value descriptionMax2017-05-101-1/+1
| | | | | Change-Id: Ieba009273f911bc4217122a6346220aeb29e8bc4 Related: OS#1614
* timer: add osmo_timer_setup()Pablo Neira Ayuso2017-05-0911-22/+26
| | | | | | | | | | | | | | | Add a new function timer function to set up the timer, similar to what we have in the Linux kernel. This patch also converts existing opencoded timer setup in the libosmocore tree as initial client of this new function. This patch implicitly removes function callback passed by reference that defeat compile time type validation. Compile-tested only, but I ran make check that reports success when testing timer infrastructure. Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666
* vty: cleanup logging functionsMax2017-05-095-18/+19
| | | | | | | | | | | | * remove unused parameter from logging_vty_add_cmds() * mark log level descriptors static * change internal static function int check_log_to_target() to more appropriate bool should_log_to_target() * deprecate log_vty_command_*() from public API as it should only be used by logging_vty_add_cmds() Change-Id: I0e9ddd7ba3ce211302d99a3494eb408907a2916e Related: OS#71
* gprs: add value strings for NS PDU typeMax2017-05-093-2/+29
| | | | | | | | Add value strings for Service Control PDUs according to 3GPP TS 48.016 ยง9 and use them for logging. Change-Id: I0ea3a45f35d68619d4cfa9735ef77abd9f9f0d58 Related: SYS#3610