From dc0efb480067db854d27ef439c1fb598769ba361 Mon Sep 17 00:00:00 2001 From: Mike Cailean Date: Thu, 13 Dec 2018 10:08:18 -0800 Subject: [PATCH] Enable support for External AP build Enable support for build on External AP without libcutils or any Android library support. CRs-fixed: 2368435 Change-Id: I978127348fd6b8d90ed5ef0a714c02437dc59ee0 --- pla/oe/loc_pla.h | 17 +++++++++++++++++ utils/LocSharedLock.h | 20 +++++++++++++++++++- utils/MsgTask.cpp | 2 ++ utils/configure.ac | 18 ++++++++++++++---- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/pla/oe/loc_pla.h b/pla/oe/loc_pla.h index 94468881..e795a23e 100644 --- a/pla/oe/loc_pla.h +++ b/pla/oe/loc_pla.h @@ -30,7 +30,10 @@ #define __LOC_PLA__ #ifdef __cplusplus +#ifndef FEATURE_EXTERNAL_AP #include +#endif /* FEATURE_EXTERNAL_AP */ +#include #include #include @@ -47,10 +50,14 @@ inline int64_t uptimeMillis() extern "C" { #endif +#ifndef FEATURE_EXTERNAL_AP #include #include #include +#endif /* FEATURE_EXTERNAL_AP */ +#include #include +#include #include #include #ifndef OFF_TARGET @@ -76,6 +83,16 @@ extern "C" { #define LOC_PATH_XTWIFI_CONF_STR "/etc/xtwifi.conf" #define LOC_PATH_QUIPC_CONF_STR "/etc/quipc.conf" +#ifdef FEATURE_EXTERNAL_AP +#define PROPERTY_VALUE_MAX 92 + +inline int property_get(const char* key, char* value, const char* default_value) +{ + strlcpy(value, default_value, PROPERTY_VALUE_MAX - 1); + return strlen(value); +} +#endif /* FEATURE_EXTERNAL_AP */ + #ifdef __cplusplus } #endif /*__cplusplus */ diff --git a/utils/LocSharedLock.h b/utils/LocSharedLock.h index 7fe62376..a7af35ed 100644 --- a/utils/LocSharedLock.h +++ b/utils/LocSharedLock.h @@ -30,10 +30,28 @@ #define __LOC_SHARED_LOCK__ #include +#ifndef FEATURE_EXTERNAL_AP #include +#endif /* FEATURE_EXTERNAL_AP */ #include -// This is a utility created for use cases such that there are more than +#ifdef FEATURE_EXTERNAL_AP +#include + +inline int32_t android_atomic_inc(volatile int32_t *addr) +{ + volatile std::atomic_int_least32_t* a = (volatile std::atomic_int_least32_t*)addr; + return std::atomic_fetch_add_explicit(a, 1, std::memory_order_release); +} + +inline int32_t android_atomic_dec(volatile int32_t *addr) +{ + volatile std::atomic_int_least32_t* a = (volatile std::atomic_int_least32_t*)addr; + return std::atomic_fetch_sub_explicit(a, 1, std::memory_order_release); +} + +#endif /* FEATURE_EXTERNAL_AP */ + // This is a utility created for use cases such that there are more than // one client who need to share the same lock, but it is not predictable // which of these clients is to last to go away. This shared lock deletes // itself when the last client calls its drop() method. To add a cient, diff --git a/utils/MsgTask.cpp b/utils/MsgTask.cpp index ad95a83e..73a77fdb 100644 --- a/utils/MsgTask.cpp +++ b/utils/MsgTask.cpp @@ -83,8 +83,10 @@ void MsgTask::sendMsg(const LocMsg* msg) const { } void MsgTask::prerun() { +#ifndef FEATURE_EXTERNAL_AP // make sure we do not run in background scheduling group set_sched_policy(gettid(), SP_FOREGROUND); +#endif /* FEATURE_EXTERNAL_AP */ } bool MsgTask::run() { diff --git a/utils/configure.ac b/utils/configure.ac index 639f8c47..fd164943 100644 --- a/utils/configure.ac +++ b/utils/configure.ac @@ -28,10 +28,20 @@ AC_PROG_LN_S AC_PROG_MAKE_SET PKG_PROG_PKG_CONFIG -# Checks for libraries. -PKG_CHECK_MODULES([CUTILS], [libcutils]) -AC_SUBST([CUTILS_CFLAGS]) -AC_SUBST([CUTILS_LIBS]) +AC_ARG_WITH([external_ap], + AC_HELP_STRING([--with-external_ap=@<:@dir@:>@], + [Using External Application Processor]), + [], + with_external_ap=no) + +if test "x$with_external_ap" != "xno"; then + CPPFLAGS="${CPPFLAGS} -DFEATURE_EXTERNAL_AP" +else + # Checks for libraries. + PKG_CHECK_MODULES([CUTILS], [libcutils]) + AC_SUBST([CUTILS_CFLAGS]) + AC_SUBST([CUTILS_LIBS]) +fi AC_ARG_WITH([core_includes], AC_HELP_STRING([--with-core-includes=@<:@dir@:>@],