From 6433c1f7d8c5ac08e6c0b98652ac20344cf1c598 Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Fri, 1 Sep 2017 19:47:42 +0200 Subject: [PATCH] updates for CMakeLists.txt (for Sidekiq) and tracing in skiq_lib.c --- cmake_targets/CMakeLists.txt | 5 ++- cmake_targets/build_oai | 3 +- targets/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c | 44 ++++++++++++++-------- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 1a5a56a2ba..c273df67ec 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -523,7 +523,10 @@ set(HWLIB_SKIQ_SOURCE ${OPENAIR_TARGETS}/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c ) add_library(oai_skiqdevif MODULE ${HWLIB_SKIQ_SOURCE} ) - +FIND_LIBRARY(LIBSIDEKIQ NAMES "libsidekiq__x86_64.gcc.a" "arg_parser__x86_64.gcc.a" PATHS ${SKIQ_SDK}/lib NO_DEFAULT_PATH) +target_link_libraries(oai_skiqdevif ${LIBSIDEKIQ}) +target_include_directories(oai_skiqdevif PRIVATE "${SKIQ_SDK}/sidekiq_core/inc") +set (CMAKE_SHARED_LINKER_FLAGS "-lglib-2.0 -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib/epiq") include_directories("${OPENAIR_TARGETS}/ARCH/LMSSDR/USERSPACE/LIB/") set(HWLIB_LMSSDR_SOURCE diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 79d28d8e2d..b12ac5495f 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -481,6 +481,7 @@ function main() { if [ ! "$DISABLE_HARDWARE_DEPENDENCY" == "True" ]; then install_usrp_uhd_driver fi + fi if [ "$FLEXRAN_AGENT" == "1" ] ; then echo_info "installing protobuf/protobuf-c for flexran agent support" install_protobuf_from_source @@ -552,7 +553,7 @@ function main() { fi echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$lte_build_dir/build - eval $CMAKE_CMD + eval $CMAKE_CMD fi if [ "$eNB" = "1" -o "$UE" = "1" ] ; then diff --git a/targets/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c b/targets/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c index 09fa026fc4..69fc669cc3 100755 --- a/targets/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c +++ b/targets/ARCH/SKIQ/USERSPACE/LIB/skiq_lib.c @@ -211,19 +211,25 @@ openair0_timestamp trx_get_timestamp(openair0_device *device) { return 0; } -void skiq_dump_txpacket(void *txp,int len) { +void skiq_dump_txpacket(void *txp,int len,FILE *fp) { printf("txp.idx %d\n",((tx_packet_t*)txp)->idx); printf("txp.skiq_pkt.meta 0x%" PRIx64 "\n",((tx_packet_t*)txp)->skiq_pkt.meta); printf("txp.skiq_pkt.ts %llu\n",((tx_packet_t*)txp)->skiq_pkt.ts); + if (fp!=NULL) fwrite(txp,sizeof(skiq_tx_packet_t),1,fp); + + + /* for (int i=0;i<len;i++) { if (i%10 == 0) printf("\n%d :",i); printf("%x.",((tx_packet_t*)txp)->skiq_pkt.iq[i]); - + } - printf("\n"); + printf("\n");*/ } +#define DUMP_TX_FILE 1 + void *skiq_tx_thread(void *arg) { skiq_state_t *skiq = (skiq_state_t *)arg; @@ -239,8 +245,10 @@ void *skiq_tx_thread(void *arg) { int tx_drop_cnt=0; int tx_cnt=0; uint32_t late; +#ifdef DUMP_TX_FILE int dump_cnt=0; - + FILE *fp=fopen("/tmp/skiq_txdebug.dat","w"); +#endif memset(&sparam, 0, sizeof(sparam)); sparam.sched_priority = sched_get_priority_max(SCHED_FIFO); @@ -251,6 +259,7 @@ void *skiq_tx_thread(void *arg) { skiq->tx_active=0; return((void*)NULL); } + mlockall(MCL_CURRENT | MCL_FUTURE); @@ -334,10 +343,10 @@ void *skiq_tx_thread(void *arg) { txq->elm[txq->head].dataptr += skiq->block_size_in_words; txq->elm[txq->head].timestamp += skiq->block_size_in_words; txq->elm[txq->head].length -= skiq->block_size_in_words; - //#ifdef DEBUG_SKIQ_TX +#ifdef DEBUG_SKIQ_TX printf("elm %d: writing %d words/ left %d to tx @%llu -> %p\n",txq->head,skiq->block_size_in_words,txq->elm[txq->head].length,txq->elm[txq->head].timestamp-skiq->block_size_in_words, txq->elm[txq->head].dataptr-skiq->block_size_in_words); - //#endif +#endif // copy skiq pointer in front of TX packet buffer txp_i->priv = (void *)skiq; // copy tx_packet index in front of TX packet buffer @@ -373,11 +382,13 @@ void *skiq_tx_thread(void *arg) { printf("skiq_tx_thread: skiq_transmit error, exiting\n"); skiq->tx_active=0; } - if (dump_cnt<5) { - skiq_dump_txpacket((void*)txp_i,skiq->block_size_in_words); +#ifdef DUMP_TX_FILE + if (dump_cnt<1+(153600/skiq->block_size_in_words)) { + printf("skiq_tx_thread: Dumping packet %d/%d\n",dump_cnt,153600/skiq->block_size_in_words); + skiq_dump_txpacket((void*)txp_i,skiq->block_size_in_words,fp); dump_cnt++; } - +#endif skiq->txp_active[i]=0; #endif tx_cnt++; @@ -423,11 +434,11 @@ void *skiq_tx_thread(void *arg) { memcpy(txp_i->skiq_pkt.iq, (void *)txq->elm[txq->head].dataptr, len<<2); - //#ifdef DEBUG_SKIQ_TX +#ifdef DEBUG_SKIQ_TX printf("elm %d: writing %d words/ left %d to tx @%llu -> %p\n",txq->head,len,len-txq->elm[txq->head].length, txq->elm[txq->head].timestamp, txq->elm[txq->head].dataptr); - //#endif +#endif // disactivate head element txq->elm[txq->head].active=0; // point head to next element in the queue @@ -449,11 +460,11 @@ void *skiq_tx_thread(void *arg) { txq->elm[txq->head].dataptr += (skiq->block_size_in_words-len); txq->elm[txq->head].timestamp += (skiq->block_size_in_words-len); txq->elm[txq->head].length -= (skiq->block_size_in_words-len); - //#ifdef DEBUG_SKIQ_TX +#ifdef DEBUG_SKIQ_TX printf("elm %d : writing %d words/ left %d to tx @%llu -> %p\n",txq->head,skiq->block_size_in_words-len,txq->elm[txq->head].length, txq->elm[txq->head].timestamp-(skiq->block_size_in_words-len), txq->elm[txq->head].dataptr-(skiq->block_size_in_words-len)); - //#endif +#endif // copy skiq pointer in front of TX packet buffer txp_i->priv = (void *)skiq; // copy tx_packet index in front of TX packet buffer @@ -510,6 +521,9 @@ void *skiq_tx_thread(void *arg) { } } printf(ANSI_COLOR_RED "skiq_tx_thread: returning\n" ANSI_COLOR_RESET); +#ifdef DUMP_TX_FILE + fclose(fp); +#endif return((void*)NULL); } @@ -566,10 +580,10 @@ int skiq_add_tx_el(skiq_state_t *skiq, openair0_timestamp ptimestamp,void **buff if (((txq->tail+1) % SKIQ_MAX_TX_ELM) != txq->head) { // queue is not full - //#ifdef DEBUG_SKIQ_TX +#ifdef DEBUG_SKIQ_TX printf(ANSI_COLOR_BLUE "skiq_add_tx_el: Adding element at time %lu and size %d to txq (head %d, tail %d, SKIQ_MAX_TX_ELM %d), buff %p\n" ANSI_COLOR_RESET, (uint64_t)ptimestamp,nsamps,txq->head,txq->tail,SKIQ_MAX_TX_ELM,buff[0]); - //#endif +#endif txq->elm[txq->tail].dataptr = buff[0]; txq->elm[txq->tail].timestamp = ptimestamp; txq->elm[txq->tail].length = nsamps; -- 2.26.2