Module: xenomai-head Branch: master Commit: 392989f410f10ffc228b974ffe26787dff0734f2 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=392989f410f10ffc228b974ffe26787dff0734f2
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Tue Jun 21 21:06:38 2011 +0200 build: arm: rework configuration and introduce kuser tsc The option --enable-arm-mach has been replaced with --enable-arm-tsc. --enable-armtsc no longer forces fpu and architectures flags to the compiler, and proposes a new option "kuser", now the default. The kuser tsc causes Xenomai libraries to use a kernel user-space helper for tsc emulation, allowing the same libraries to be used with any processor without any loss of performance. The option --enable-arm-eabi and --enable-arm-arch also disappeared, they are now detected from the compiler defines. --- configure | 265 ++++++++--------------------------------- configure.in | 179 +++++----------------------- include/asm-arm/bits/bind.h | 76 ++++++------ include/asm-arm/bits/shadow.h | 20 ++-- include/asm-arm/features.h | 63 +++++++++-- include/asm-arm/syscall.h | 62 +++++----- src/include/xeno_config.h.in | 9 -- 7 files changed, 211 insertions(+), 463 deletions(-) diff --git a/configure b/configure index 7c7b87d..9c85780 100755 --- a/configure +++ b/configure @@ -767,8 +767,6 @@ CONFIG_XENO_DOC_DOX_FALSE CONFIG_XENO_DOC_DOX_TRUE CONFIG_XENO_SHARED_FALSE CONFIG_XENO_SHARED_TRUE -CONFIG_XENO_FASTSYNCH_FALSE -CONFIG_XENO_FASTSYNCH_TRUE DBX_ABS_SRCDIR_FALSE DBX_ABS_SRCDIR_TRUE DBX_XSL_ROOT @@ -928,10 +926,8 @@ enable_debug enable_smp enable_x86_sep enable_x86_tsc -enable_arm_eabi -enable_arm_mach -enable_arm_arch enable_arm_tsc +enable_arm_quirks enable_doc_install enable_dox_doc enable_dbx @@ -1591,17 +1587,11 @@ Optional Features: --enable-smp Enable SMP support --enable-x86-sep Enable x86 SEP instructions for issuing syscalls --enable-x86-tsc Enable x86 TSC for timings - --enable-arm-eabi Enable ARM EABI interface - --enable-arm-mach Select for which machine we are compiling. Valid - machines are at91rm9200, at91sam926x, at91sam9, - generic, generic-vfp, imx, imx21, imx51, integrator, - ixp4xx, mx2, mx3, mx5, omap3, orion, pxa, pxa3xx, - s3c2410, sa1100. - --enable-arm-arch=<version> - Select ARM architecture version, if the machine - selected with --enable-arm-mach supports several - architecture versions - --disable-arm-tsc Disable TSC emulation in user-space + --enable-arm-tsc Select for which machine we are compiling. Valid + machines are at91, kuser, imx, ixp4xx, omap, orion, + pxa, s3c24x, sa1100. + --enable-arm-quirks Enable quirks for specific systems. Currently + supported quirks are for sa1100 and xscale3. --disable-doc-install Do not install documentation --enable-dox-doc Build Doxygen documentation --enable-dbx Build Docbook XML documentation. @@ -5987,13 +5977,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:5990: $ac_compile\"" >&5) + (eval echo "\"\$as_me:5980: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:5993: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:5983: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:5996: output\"" >&5) + (eval echo "\"\$as_me:5986: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -7091,7 +7081,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 7094 "configure"' > conftest.$ac_ext + echo '#line 7084 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -8453,11 +8443,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8456: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8446: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8460: \$? = $ac_status" >&5 + echo "$as_me:8450: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8777,11 +8767,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8780: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8770: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8784: \$? = $ac_status" >&5 + echo "$as_me:8774: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8882,11 +8872,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8885: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8875: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8889: \$? = $ac_status" >&5 + echo "$as_me:8879: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8937,11 +8927,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8940: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8930: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:8944: \$? = $ac_status" >&5 + echo "$as_me:8934: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -11309,7 +11299,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11312 "configure" +#line 11302 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11409,7 +11399,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11412 "configure" +#line 11402 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11709,163 +11699,56 @@ fi if test $XENO_TARGET_ARCH = arm ; then - CONFIG_XENO_ARM_ARCH=4 - CONFIG_XENO_ARM_SA1100= - CONFIX_XENO_ARM_EABI= unset CONFIG_XENO_ARM_SA1100 unset CONFIG_XENO_CPU_XSC3 - unset tsc_type - unset vfp - unset XNARCH_ARM_TSC_TYPE - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM EABI interface" >&5 -$as_echo_n "checking for ARM EABI interface... " >&6; } - # Check whether --enable-arm-eabi was given. -if test "${enable_arm_eabi+set}" = set; then : - enableval=$enable_arm_eabi; case "$enableval" in - y | yes) CONFIG_XENO_ARM_EABI=y ;; - *) unset CONFIG_XENO_ARM_EABI ;; - esac -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_XENO_ARM_EABI:-no}" >&5 -$as_echo "${CONFIG_XENO_ARM_EABI:-no}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM machine" >&5 -$as_echo_n "checking for ARM machine... " >&6; } - # Check whether --enable-arm-mach was given. -if test "${enable_arm_mach+set}" = set; then : - enableval=$enable_arm_mach; case "$enableval" in - at91rm9200) arch=4 - tsc_type=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - - at91sam926x|at91sam9) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - - generic) arch=4 - CONFIG_XENO_ARM_SA1100=y - unset tsc_type;; - - generic-vfp) arch=5 - vfp=vfp - unset tsc_type;; + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_KUSER - integrator) arch=choose - unset tsc_type;; - - ixp4xx) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM tsc type" >&5 +$as_echo_n "checking for ARM tsc type... " >&6; } + # Check whether --enable-arm-tsc was given. +if test "${enable_arm_tsc+set}" = set; then : + enableval=$enable_arm_tsc; case "$enableval" in + at91*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - mx1|imx) arch=4 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + integrator) unset tsc_type;; - mx2|imx21) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + ixp4xx) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - mx3) arch=6 - vfp=vfp - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + imx*|mx*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - mx5|imx51) arch=7 - vfp=vfp3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + kuser) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_KUSER;; - omap3) arch=7 - vfp=vfp3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + omap*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - orion) arch=5 - vfp=vfp - tsc_type=__XN_TSC_TYPE_FREERUNNING_COUNTDOWN;; + orion) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING_COUNTDOWN;; - pxa) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + pxa*) CONFIG_XENO_CPU_XSC3=y + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - pxa3xx) arch=xscale3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + s3c24*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_DECREMENTER;; - s3c2410) arch=4 - tsc_type=__XN_TSC_TYPE_DECREMENTER;; + sa1100) CONFIG_XENO_ARM_SA1100=y + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - sa1100) arch=4 - CONFIG_XENO_ARM_SA1100=y - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + n | no) unset XNARCH_ARM_TSC_TYPE;; - *)as_fn_error $? "Invalid machine selected: \"$enableval\"" "$LINENO" 5 ;; + *)as_fn_error $? "Invalid SOC selected: \"$enableval\"" "$LINENO" 5 ;; esac -else - as_fn_error $? "Selecting a machine with --enable-arm-mach is mandatory" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_arm_mach:-no}" >&5 -$as_echo "${enable_arm_mach:-no}" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${enable_arm_tsc:-kuser}" >&5 +$as_echo "${enable_arm_tsc:-kuser}" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM EABI interface" >&5 -$as_echo_n "checking for ARM EABI interface... " >&6; } - # Check whether --enable-arm-eabi was given. -if test "${enable_arm_eabi+set}" = set; then : - enableval=$enable_arm_eabi; case "$enableval" in - y | yes) CONFIG_XENO_ARM_EABI=y ;; - *) unset CONFIG_XENO_ARM_EABI ;; + # Check whether --enable-arm-quirks was given. +if test "${enable_arm_quirks+set}" = set; then : + enableval=$enable_arm_quirks; case "$enableval" in + sa1100) CONFIG_XENO_ARM_SA1100=y;; + xscale3) CONFIG_XENO_CPU_XSC3=y;; + *)as_fn_error $? "Invalid SOC selected: \"$enableval\"" "$LINENO" 5 ;; esac fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_XENO_ARM_EABI:-no}" >&5 -$as_echo "${CONFIG_XENO_ARM_EABI:-no}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM architecture version" >&5 -$as_echo_n "checking for ARM architecture version... " >&6; } - if test $arch = choose; then - # Check whether --enable-arm-arch was given. -if test "${enable_arm_arch+set}" = set; then : - enableval=$enable_arm_arch; - case "$enableval" in - "" | y | ye | yes | n | no) - as_fn_error $? "You must supply an argument to --enable-arm-arch." "$LINENO" 5 - ;; - esac - CONFIG_XENO_ARM_ARCH="$enableval" - -fi - - elif test $arch = xscale3; then - CONFIG_XENO_ARM_ARCH=5 - CONFIG_XENO_CPU_XSC3=y - else - CONFIG_XENO_ARM_ARCH="$arch" - fi - case "$CONFIG_XENO_ARM_ARCH" in - 4) XENO_ARM_ARCH_FLAGS="-march=armv4";; - 5) XENO_ARM_ARCH_FLAGS="-march=armv5";; - 6) XENO_ARM_ARCH_FLAGS="-march=armv6";; - 7) XENO_ARM_ARCH_FLAGS="-march=armv7-a";; - *) as_fn_error $? "Invalid architecture $arch, only 4, 5, xscale3, 6 and 7 are supported" "$LINENO" 5 ;; - esac - - # Enable interworking - if test x$CONFIG_XENO_ARM_EABI = xy -a $CONFIG_XENO_ARM_ARCH -lt 6; then - XENO_ARM_ARCH_FLAGS="${XENO_ARM_ARCH_FLAGS}t" - fi - - # Set FPU flags, if EABI is not enabled, all libraries in the system - # must be compiled with the same FPU flags, as we do not know how - # other components are compiled, we can not set the flags. - if test x$CONFIG_XENO_ARM_EABI = xy; then - if test x"$vfp" != x; then - XENO_ARM_ARCH_FLAGS="$XENO_ARM_ARCH_FLAGS -mfpu=$vfp -mfloat-abi=softfp" - else - XENO_ARM_ARCH_FLAGS="$XENO_ARM_ARCH_FLAGS -msoft-float" - fi - fi - - if test $CONFIG_XENO_ARM_ARCH -ge 6 || test x$CONFIG_SMP != xy; then - CONFIG_XENO_FASTSYNCH=y - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONFIG_XENO_ARM_ARCH" >&5 -$as_echo "$CONFIG_XENO_ARM_ARCH" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM SA1100 architecture" >&5 $as_echo_n "checking for ARM SA1100 architecture... " >&6; } @@ -11876,31 +11759,6 @@ $as_echo "${CONFIG_XENO_ARM_SA1100:-no}" >&6; } $as_echo_n "checking for ARM Xscale3 architecture... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_XENO_CPU_XSC3:-no}" >&5 $as_echo "${CONFIG_XENO_CPU_XSC3:-no}" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TSC emulation in user-space." >&5 -$as_echo_n "checking for TSC emulation in user-space.... " >&6; } - if test $tsc_type; then - # Check whether --enable-arm-tsc was given. -if test "${enable_arm_tsc+set}" = set; then : - enableval=$enable_arm_tsc; case "$enableval" in - y | yes) XNARCH_ARM_TSC_TYPE=$tsc_type ;; - *) unset XNARCH_ARM_TSC_TYPE ;; - esac -else - XNARCH_ARM_TSC_TYPE=$tsc_type -fi - - if test $XNARCH_ARM_TSC_TYPE; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not supported by this board" >&5 -$as_echo "not supported by this board" >&6; } - fi fi @@ -12403,17 +12261,6 @@ $as_echo "#define CONFIG_XENO_X86_SEP 1" >>confdefs.h test x$CONFIG_SMP = xy && $as_echo "#define CONFIG_SMP 1" >>confdefs.h -test x$CONFIG_XENO_FASTSYNCH = xy && -$as_echo "#define CONFIG_XENO_FASTSYNCH 1" >>confdefs.h - - if test "$CONFIG_XENO_FASTSYNCH" = y; then - CONFIG_XENO_FASTSYNCH_TRUE= - CONFIG_XENO_FASTSYNCH_FALSE='#' -else - CONFIG_XENO_FASTSYNCH_TRUE='#' - CONFIG_XENO_FASTSYNCH_FALSE= -fi - test x$ac_cv_func_fork = xyes && $as_echo "#define CONFIG_MMU 1" >>confdefs.h @@ -12422,11 +12269,6 @@ $as_echo "#define CONFIG_MMU 1" >>confdefs.h test x$CONFIG_X86_TSC = xy && $as_echo "#define CONFIG_X86_TSC 1" >>confdefs.h -test -n "$CONFIG_XENO_ARM_ARCH" && -cat >>confdefs.h <<_ACEOF -#define CONFIG_XENO_ARM_ARCH $CONFIG_XENO_ARM_ARCH -_ACEOF - test x$CONFIG_XENO_ARM_SA1100 = xy && $as_echo "#define CONFIG_XENO_ARM_SA1100 1" >>confdefs.h @@ -12439,9 +12281,6 @@ cat >>confdefs.h <<_ACEOF #define XNARCH_ARM_TSC_TYPE $XNARCH_ARM_TSC_TYPE _ACEOF -test x$CONFIG_XENO_ARM_EABI = xy && -$as_echo "#define CONFIG_XENO_ARM_EABI 1" >>confdefs.h - if test "$enable_shared" = 'yes'; then CONFIG_XENO_SHARED_TRUE= CONFIG_XENO_SHARED_FALSE='#' @@ -12585,7 +12424,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } -XENO_USER_CFLAGS="-D_GNU_SOURCE -D_REENTRANT -Wall -pipe" +XENO_USER_CFLAGS="-D_GNU_SOURCE -D_REENTRANT -Wall -Werror-implicit-function-declaration -pipe" XENO_USER_LDFLAGS= XENO_USER_APP_CFLAGS=$XENO_USER_CFLAGS @@ -12601,7 +12440,7 @@ case $XENO_TARGET_ARCH in # Produce libraries in FDPIC format. ;; arm) - XENO_USER_CFLAGS="$XENO_USER_CFLAGS $XENO_ARM_ARCH_FLAGS" + XENO_USER_CFLAGS="$XENO_USER_CFLAGS" ;; esac @@ -12960,10 +12799,6 @@ if test -z "${DBX_ABS_SRCDIR_TRUE}" && test -z "${DBX_ABS_SRCDIR_FALSE}"; then as_fn_error $? "conditional \"DBX_ABS_SRCDIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${CONFIG_XENO_FASTSYNCH_TRUE}" && test -z "${CONFIG_XENO_FASTSYNCH_FALSE}"; then - as_fn_error $? "conditional \"CONFIG_XENO_FASTSYNCH\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${CONFIG_XENO_SHARED_TRUE}" && test -z "${CONFIG_XENO_SHARED_FALSE}"; then as_fn_error $? "conditional \"CONFIG_XENO_SHARED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/configure.in b/configure.in index 5393313..9b3d051 100644 --- a/configure.in +++ b/configure.in @@ -188,173 +188,60 @@ fi dnl ARCH support for ARM (default: 4) if test $XENO_TARGET_ARCH = arm ; then - CONFIG_XENO_ARM_ARCH=4 - CONFIG_XENO_ARM_SA1100= - CONFIX_XENO_ARM_EABI= unset CONFIG_XENO_ARM_SA1100 unset CONFIG_XENO_CPU_XSC3 - unset tsc_type - unset vfp - unset XNARCH_ARM_TSC_TYPE + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_KUSER - AC_MSG_CHECKING(for ARM EABI interface) - AC_ARG_ENABLE(arm-eabi, - AS_HELP_STRING([--enable-arm-eabi], [Enable ARM EABI interface]), + AC_MSG_CHECKING(for ARM tsc type) + AC_ARG_ENABLE(arm-tsc, + AS_HELP_STRING([--enable-arm-tsc], [Select for which machine we are +compiling. Valid machines are at91, kuser, imx, ixp4xx, omap, orion, pxa, + s3c24x, sa1100.]), [case "$enableval" in - y | yes) CONFIG_XENO_ARM_EABI=y ;; - *) unset CONFIG_XENO_ARM_EABI ;; - esac]) - AC_MSG_RESULT(${CONFIG_XENO_ARM_EABI:-no}) - - AC_MSG_CHECKING(for ARM machine) - AC_ARG_ENABLE(arm-mach, - AS_HELP_STRING([--enable-arm-mach], [Select for which machine we are -compiling. Valid machines are at91rm9200, at91sam926x, at91sam9, generic, -generic-vfp, imx, imx21, imx51, integrator, ixp4xx, mx2, mx3, mx5, -omap3, orion, pxa, pxa3xx, s3c2410, sa1100.]), - [case "$enableval" in - at91rm9200) arch=4 - tsc_type=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - - at91sam926x|at91sam9) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - - generic) arch=4 - CONFIG_XENO_ARM_SA1100=y - unset tsc_type;; + at91*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING_FAST_WRAP;; - generic-vfp) arch=5 - vfp=vfp - unset tsc_type;; + integrator) unset tsc_type;; - integrator) arch=choose - unset tsc_type;; + ixp4xx) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - ixp4xx) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + imx*|mx*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - mx1|imx) arch=4 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + kuser) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_KUSER;; - mx2|imx21) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + omap*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - mx3) arch=6 - vfp=vfp - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + orion) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING_COUNTDOWN;; - mx5|imx51) arch=7 - vfp=vfp3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + pxa*) CONFIG_XENO_CPU_XSC3=y + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - omap3) arch=7 - vfp=vfp3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + s3c24*) XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_DECREMENTER;; - orion) arch=5 - vfp=vfp - tsc_type=__XN_TSC_TYPE_FREERUNNING_COUNTDOWN;; + sa1100) CONFIG_XENO_ARM_SA1100=y + XNARCH_ARM_TSC_TYPE=__XN_TSC_TYPE_FREERUNNING;; - pxa) arch=5 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; + n | no) unset XNARCH_ARM_TSC_TYPE;; - pxa3xx) arch=xscale3 - tsc_type=__XN_TSC_TYPE_FREERUNNING;; - - s3c2410) arch=4 - tsc_type=__XN_TSC_TYPE_DECREMENTER;; - - sa1100) arch=4 - CONFIG_XENO_ARM_SA1100=y - tsc_type=__XN_TSC_TYPE_FREERUNNING;; - - *)AC_MSG_ERROR([Invalid machine selected: "$enableval"]);; - esac], - [AC_MSG_ERROR([Selecting a machine with --enable-arm-mach is mandatory]) - ]) - AC_MSG_RESULT(${enable_arm_mach:-no}) + *)AC_MSG_ERROR([Invalid SOC selected: "$enableval"]);; + esac]) + AC_MSG_RESULT(${enable_arm_tsc:-kuser}) - AC_MSG_CHECKING(for ARM EABI interface) - AC_ARG_ENABLE(arm-eabi, - AS_HELP_STRING([--enable-arm-eabi], [Enable ARM EABI interface]), + AC_ARG_ENABLE(arm-quirks, + AS_HELP_STRING([--enable-arm-quirks], [Enable quirks for + specific systems. Currently supported quirks are for sa1100 and + xscale3.]), [case "$enableval" in - y | yes) CONFIG_XENO_ARM_EABI=y ;; - *) unset CONFIG_XENO_ARM_EABI ;; + sa1100) CONFIG_XENO_ARM_SA1100=y;; + xscale3) CONFIG_XENO_CPU_XSC3=y;; + *)AC_MSG_ERROR([Invalid SOC selected: "$enableval"]);; esac]) - AC_MSG_RESULT(${CONFIG_XENO_ARM_EABI:-no}) - - AC_MSG_CHECKING(for ARM architecture version) - if test $arch = choose; then - AC_ARG_ENABLE(arm-arch, - AS_HELP_STRING([--enable-arm-arch=<version>], [Select ARM architecture version, if the machine selected with --enable-arm-mach supports several architecture versions]), - [ - case "$enableval" in - "" | y | ye | yes | n | no) - AC_MSG_ERROR([You must supply an argument to --enable-arm-arch.]) - ;; - esac - CONFIG_XENO_ARM_ARCH="$enableval" - ]) - elif test $arch = xscale3; then - CONFIG_XENO_ARM_ARCH=5 - CONFIG_XENO_CPU_XSC3=y - else - CONFIG_XENO_ARM_ARCH="$arch" - fi - case "$CONFIG_XENO_ARM_ARCH" in - 4) XENO_ARM_ARCH_FLAGS="-march=armv4";; - 5) XENO_ARM_ARCH_FLAGS="-march=armv5";; - 6) XENO_ARM_ARCH_FLAGS="-march=armv6";; - 7) XENO_ARM_ARCH_FLAGS="-march=armv7-a";; - *) AC_MSG_ERROR([Invalid architecture $arch, only 4, 5, xscale3, 6 and 7 are supported]);; - esac - - # Enable interworking - if test x$CONFIG_XENO_ARM_EABI = xy -a $CONFIG_XENO_ARM_ARCH -lt 6; then - XENO_ARM_ARCH_FLAGS="${XENO_ARM_ARCH_FLAGS}t" - fi - - # Set FPU flags, if EABI is not enabled, all libraries in the system - # must be compiled with the same FPU flags, as we do not know how - # other components are compiled, we can not set the flags. - if test x$CONFIG_XENO_ARM_EABI = xy; then - if test x"$vfp" != x; then - XENO_ARM_ARCH_FLAGS="$XENO_ARM_ARCH_FLAGS -mfpu=$vfp -mfloat-abi=softfp" - else - XENO_ARM_ARCH_FLAGS="$XENO_ARM_ARCH_FLAGS -msoft-float" - fi - fi - - if test $CONFIG_XENO_ARM_ARCH -ge 6 || test x$CONFIG_SMP != xy; then - CONFIG_XENO_FASTSYNCH=y - fi - - AC_MSG_RESULT($CONFIG_XENO_ARM_ARCH) AC_MSG_CHECKING(for ARM SA1100 architecture) AC_MSG_RESULT(${CONFIG_XENO_ARM_SA1100:-no}) AC_MSG_CHECKING(for ARM Xscale3 architecture) AC_MSG_RESULT(${CONFIG_XENO_CPU_XSC3:-no}) - - AC_MSG_CHECKING(for TSC emulation in user-space.) - if test $tsc_type; then - AC_ARG_ENABLE(arm-tsc, - AS_HELP_STRING([--disable-arm-tsc], [Disable TSC emulation in -user-space]), - [case "$enableval" in - y | yes) XNARCH_ARM_TSC_TYPE=$tsc_type ;; - *) unset XNARCH_ARM_TSC_TYPE ;; - esac], [XNARCH_ARM_TSC_TYPE=$tsc_type]) - if test $XNARCH_ARM_TSC_TYPE; then - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - else - AC_MSG_RESULT(not supported by this board) - fi fi dnl Documentation package. @@ -464,8 +351,6 @@ dnl test x$CONFIG_XENO_X86_SEP = xy && AC_DEFINE(CONFIG_XENO_X86_SEP,1,[config]) test x$CONFIG_SMP = xy && AC_DEFINE(CONFIG_SMP,1,[config]) -test x$CONFIG_XENO_FASTSYNCH = xy && AC_DEFINE(CONFIG_XENO_FASTSYNCH,1,[config]) -AM_CONDITIONAL(CONFIG_XENO_FASTSYNCH,[test "$CONFIG_XENO_FASTSYNCH" = y]) dnl dnl Userland may want to know about MMU availability on the target. @@ -474,12 +359,10 @@ dnl test x$ac_cv_func_fork = xyes && AC_DEFINE(CONFIG_MMU,1,[config]) test x$CONFIG_X86_TSC = xy && AC_DEFINE(CONFIG_X86_TSC,1,[config]) -test -n "$CONFIG_XENO_ARM_ARCH" && AC_DEFINE_UNQUOTED(CONFIG_XENO_ARM_ARCH,$CONFIG_XENO_ARM_ARCH,[config]) test x$CONFIG_XENO_ARM_SA1100 = xy && AC_DEFINE(CONFIG_XENO_ARM_SA1100,1,[config]) test x$CONFIG_XENO_CPU_XSC3 = xy && AC_DEFINE(CONFIG_XENO_CPU_XSC3,1,[config]) test $XNARCH_ARM_TSC_TYPE && AC_DEFINE_UNQUOTED(XNARCH_ARM_TSC_TYPE,$XNARCH_ARM_TSC_TYPE,[config]) -test x$CONFIG_XENO_ARM_EABI = xy && AC_DEFINE(CONFIG_XENO_ARM_EABI,1,[config]) AM_CONDITIONAL(CONFIG_XENO_SHARED,[test "$enable_shared" = 'yes']) # Default sampling period (ns) used in various tests @@ -561,7 +444,7 @@ fi AC_MSG_RESULT([done]) dnl Common CFLAGS and LDFLAGS -XENO_USER_CFLAGS="-D_GNU_SOURCE -D_REENTRANT -Wall -pipe" +XENO_USER_CFLAGS="-D_GNU_SOURCE -D_REENTRANT -Wall -Werror-implicit-function-declaration -pipe" XENO_USER_LDFLAGS= dnl Exported CFLAGS and LDFLAGS, may be enhanced per-arch below @@ -578,7 +461,7 @@ case $XENO_TARGET_ARCH in # Produce libraries in FDPIC format. ;; arm) - XENO_USER_CFLAGS="$XENO_USER_CFLAGS $XENO_ARM_ARCH_FLAGS" + XENO_USER_CFLAGS="$XENO_USER_CFLAGS" ;; esac diff --git a/include/asm-arm/bits/bind.h b/include/asm-arm/bits/bind.h index d1dd63b..c55af63 100644 --- a/include/asm-arm/bits/bind.h +++ b/include/asm-arm/bits/bind.h @@ -20,6 +20,7 @@ __attribute__((weak)) struct __xn_tscinfo __xn_tscinfo = { static inline void xeno_arm_features_check(struct xnfeatinfo *finfo) { #ifdef XNARCH_ARM_TSC_TYPE + unsigned long phys_addr; unsigned page_size; int err, fd; void *addr; @@ -29,12 +30,8 @@ static inline void xeno_arm_features_check(struct xnfeatinfo *finfo) err = XENOMAI_SYSCALL2(__xn_sys_arch, XENOMAI_SYSARCH_TSCINFO, &__xn_tscinfo); - if (err) { - error: - fprintf(stderr, "Xenomai: Your board/configuration does not" - " allow tsc emulation in user-space: %d\n", err); - exit(EXIT_FAILURE); - } + if (err) + goto error; fd = open("/dev/mem", O_RDONLY | O_SYNC); if (fd == -1) { @@ -45,54 +42,39 @@ static inline void xeno_arm_features_check(struct xnfeatinfo *finfo) page_size = sysconf(_SC_PAGESIZE); switch(__xn_tscinfo.type) { -#if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING \ +#if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_KUSER + case __XN_TSC_TYPE_FREERUNNING: + case __XN_TSC_TYPE_FREERUNNING_COUNTDOWN: + case __XN_TSC_TYPE_FREERUNNING_FAST_WRAP: + case __XN_TSC_TYPE_DECREMENTER: + goto domap; + +#elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING \ || XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING_COUNTDOWN \ || XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING_FAST_WRAP case __XN_TSC_TYPE_FREERUNNING: - case __XN_TSC_TYPE_FREERUNNING_COUNTDOWN: { - unsigned long phys_addr; - - phys_addr = (unsigned long) __xn_tscinfo.u.fr.counter; - addr = mmap(NULL, page_size, PROT_READ, MAP_SHARED, - fd, phys_addr & ~(page_size - 1)); - if (addr == MAP_FAILED) { - perror("Xenomai init: mmap(/dev/mem)"); - exit(EXIT_FAILURE); - } - - __xn_tscinfo.u.fr.counter = - ((volatile unsigned *) - ((char *) addr + (phys_addr & (page_size - 1)))); + case __XN_TSC_TYPE_FREERUNNING_COUNTDOWN: #if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING_FAST_WRAP - if (__xn_tscinfo.u.fr.mask >= ((1 << 28) - 1)) { + if (__xn_tscinfo.mask >= ((1 << 28) - 1)) { fprintf(stderr, "Hardware tsc is not a fast wrapping" " one, select the correct platform, or fix\n" "configure.in\n"); exit(EXIT_FAILURE); } #endif /* __XN_TSC_TYPE_FREERUNNING_FAST_WRAP */ - break; - } + goto domap; + #elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_DECREMENTER - case __XN_TSC_TYPE_DECREMENTER: { - unsigned long phys_addr; - - phys_addr = (unsigned long) __xn_tscinfo.u.dec.counter; - addr = mmap(NULL, page_size, PROT_READ, MAP_SHARED, - fd, phys_addr & ~(page_size - 1)); - if (addr == MAP_FAILED) { - perror("Xenomai init: mmap(/dev/mem)"); - exit(EXIT_FAILURE); - } + case __XN_TSC_TYPE_DECREMENTER: + goto domap; - __xn_tscinfo.u.dec.counter = - ((volatile unsigned *) - ((char *) addr + (phys_addr & (page_size - 1)))); - break; - } #endif /* XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_DECREMENTER */ case __XN_TSC_TYPE_NONE: - goto error; + error: + fprintf(stderr, "Xenomai: Your board/configuration does not" + " allow tsc emulation in user-space: %d\n", err); + exit(EXIT_FAILURE); + break; default: fprintf(stderr, @@ -100,6 +82,20 @@ static inline void xeno_arm_features_check(struct xnfeatinfo *finfo) exit(EXIT_FAILURE); } + domap: + phys_addr = (unsigned long) __xn_tscinfo.counter; + + addr = mmap(NULL, page_size, PROT_READ, MAP_SHARED, + fd, phys_addr & ~(page_size - 1)); + if (addr == MAP_FAILED) { + perror("Xenomai init: mmap(/dev/mem)"); + exit(EXIT_FAILURE); + } + + __xn_tscinfo.counter = + ((volatile unsigned *) + ((char *) addr + (phys_addr & (page_size - 1)))); + if (close(fd)) { perror("Xenomai init: close(/dev/mem)"); exit(EXIT_FAILURE); diff --git a/include/asm-arm/bits/shadow.h b/include/asm-arm/bits/shadow.h index 883d073..bef96d7 100644 --- a/include/asm-arm/bits/shadow.h +++ b/include/asm-arm/bits/shadow.h @@ -143,23 +143,23 @@ static inline int xnarch_local_syscall(struct pt_regs *regs) switch (RTHAL_TSC_INFO(&ipipe_info).type) { case IPIPE_TSC_TYPE_FREERUNNING: info.type = __XN_TSC_TYPE_FREERUNNING, - info.u.fr.counter = RTHAL_TSC_INFO(&ipipe_info).u.fr.counter; - info.u.fr.mask = RTHAL_TSC_INFO(&ipipe_info).u.fr.mask; - info.u.fr.tsc = RTHAL_TSC_INFO(&ipipe_info).u.fr.tsc; + info.counter = RTHAL_TSC_INFO(&ipipe_info).u.fr.counter; + info.mask = RTHAL_TSC_INFO(&ipipe_info).u.fr.mask; + info.tsc = RTHAL_TSC_INFO(&ipipe_info).u.fr.tsc; break; case IPIPE_TSC_TYPE_DECREMENTER: info.type = __XN_TSC_TYPE_DECREMENTER, - info.u.dec.counter = RTHAL_TSC_INFO(&ipipe_info).u.dec.counter; - info.u.dec.mask = RTHAL_TSC_INFO(&ipipe_info).u.dec.mask; - info.u.dec.last_cnt = RTHAL_TSC_INFO(&ipipe_info).u.dec.last_cnt; - info.u.dec.tsc = RTHAL_TSC_INFO(&ipipe_info).u.dec.tsc; + info.counter = RTHAL_TSC_INFO(&ipipe_info).u.dec.counter; + info.mask = RTHAL_TSC_INFO(&ipipe_info).u.dec.mask; + info.last_cnt = RTHAL_TSC_INFO(&ipipe_info).u.dec.last_cnt; + info.tsc = RTHAL_TSC_INFO(&ipipe_info).u.dec.tsc; break; #ifdef IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN case IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN: info.type = __XN_TSC_TYPE_FREERUNNING_COUNTDOWN, - info.u.fr.counter = RTHAL_TSC_INFO(&ipipe_info).u.fr.counter; - info.u.fr.mask = RTHAL_TSC_INFO(&ipipe_info).u.fr.mask; - info.u.fr.tsc = RTHAL_TSC_INFO(&ipipe_info).u.fr.tsc; + info.counter = RTHAL_TSC_INFO(&ipipe_info).u.fr.counter; + info.mask = RTHAL_TSC_INFO(&ipipe_info).u.fr.mask; + info.tsc = RTHAL_TSC_INFO(&ipipe_info).u.fr.tsc; break; #endif /* IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN */ case IPIPE_TSC_TYPE_NONE: diff --git a/include/asm-arm/features.h b/include/asm-arm/features.h index 1422411..cb42859 100644 --- a/include/asm-arm/features.h +++ b/include/asm-arm/features.h @@ -22,7 +22,12 @@ #ifndef _XENO_ASM_ARM_FEATURES_H #define _XENO_ASM_ARM_FEATURES_H -#include <asm-generic/xenomai/features.h> +#define __XN_TSC_TYPE_NONE 0 +#define __XN_TSC_TYPE_KUSER 1 +#define __XN_TSC_TYPE_FREERUNNING 2 +#define __XN_TSC_TYPE_DECREMENTER 3 +#define __XN_TSC_TYPE_FREERUNNING_FAST_WRAP 4 +#define __XN_TSC_TYPE_FREERUNNING_COUNTDOWN 5 #ifdef __KERNEL__ @@ -31,14 +36,54 @@ #endif #ifdef CONFIG_AEABI -#define CONFIG_XENO_ARM_EABI 1 +#define CONFIG_XENO_ARM_EABI 1 #endif -#define CONFIG_XENO_ARM_HW_DIRECT_TSC 1 +#ifdef CONFIG_IPIPE_ARM_KUSER_TSC +#define CONFIG_XENO_ARM_KUSER_TSC 1 +#endif +#define XNARCH_HAVE_NONPRIV_TSC 1 #else /* !__KERNEL__ */ -#define __LINUX_ARM_ARCH__ CONFIG_XENO_ARM_ARCH -#endif /* __KERNEL__ */ + +#include <xeno_config.h> + +#ifdef __ARM_EABI__ +#define CONFIG_XENO_ARM_EABI 1 +#endif + +#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) +#define __LINUX_ARM_ARCH__ 4 +#endif /* armv4 */ + +#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ + || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) +#define __LINUX_ARM_ARCH__ 5 +#endif /* armv5 */ + +#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6K__) +#define __LINUX_ARM_ARCH__ 6 +#endif /* armv6 */ + +#if defined(__ARM_ARCH_7A__) +#define __LINUX_ARM_ARCH__ 7 +#endif /* armv7 */ + +#ifndef __LINUX_ARM_ARCH__ +#error "Could not find current ARM architecture" +#endif + +#if __LINUX_ARM_ARCH__ >= 6 || !defined(CONFIG_SMP) +#define CONFIG_XENO_FASTSYNCH 1 +#endif + +#if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_KUSER +#define CONFIG_XENO_ARM_KUSER_TSC 1 +#endif + +#endif /* !__KERNEL__ */ + +#include <asm-generic/xenomai/features.h> #define __xn_feat_arm_atomic_xchg 0x00000001 #define __xn_feat_arm_atomic_atomic 0x00000002 @@ -63,11 +108,11 @@ #endif #define __xn_feat_arm_eabi_mask __xn_feat_arm_eabi -#ifdef CONFIG_XENO_ARM_HW_DIRECT_TSC +#ifdef CONFIG_XENO_ARM_KUSER_TSC #define __xn_feat_arm_tsc_mask __xn_feat_arm_tsc -#else /* !CONFIG_XENO_ARM_HW_DIRECT_TSC */ +#else /* !CONFIG_XENO_ARM_KUSER_TSC */ #define __xn_feat_arm_tsc_mask 0 -#endif /* !CONFIG_XENO_ARM_HW_DIRECT_TSC */ +#endif /* !CONFIG_XENO_ARM_KUSER_TSC */ #define XENOMAI_FEAT_DEP ( __xn_feat_generic_mask | \ __xn_feat_arm_atomic_xchg_mask | \ @@ -92,7 +137,7 @@ static inline const char *get_feature_label (unsigned feature) case __xn_feat_arm_eabi: return "eabi"; case __xn_feat_arm_tsc: - return "tsc"; + return "kuser_tsc"; default: return get_generic_feature_label(feature); } diff --git a/include/asm-arm/syscall.h b/include/asm-arm/syscall.h index 672819a..edc63e0 100644 --- a/include/asm-arm/syscall.h +++ b/include/asm-arm/syscall.h @@ -234,25 +234,15 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) struct __xn_tscinfo { int type; /* Must remain first member */ - union { - struct { - volatile unsigned *counter; - unsigned mask; - volatile unsigned long long *tsc; - } fr; - struct { - volatile unsigned *counter; - unsigned mask; - volatile unsigned *last_cnt; - volatile unsigned long long *tsc; - } dec; - } u; + unsigned mask; + volatile unsigned *counter; + volatile unsigned *last_cnt; /* Only used by decrementers */ + volatile unsigned long long *tsc; }; -#define __XN_TSC_TYPE_NONE 0 -#define __XN_TSC_TYPE_FREERUNNING 1 -#define __XN_TSC_TYPE_DECREMENTER 2 -#define __XN_TSC_TYPE_FREERUNNING_FAST_WRAP 3 -#define __XN_TSC_TYPE_FREERUNNING_COUNTDOWN 4 + +#define _stringify(x) #x +#define stringify(x) _stringify(x) + #ifndef __KERNEL__ extern struct __xn_tscinfo __xn_tscinfo; @@ -260,10 +250,16 @@ extern struct __xn_tscinfo __xn_tscinfo; #ifdef XNARCH_ARM_TSC_TYPE static inline unsigned long long __xn_rdtsc(void) { -#if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING - volatile unsigned long long *const tscp = __xn_tscinfo.u.fr.tsc; - volatile unsigned *const counterp = __xn_tscinfo.u.fr.counter; - const unsigned mask = __xn_tscinfo.u.fr.mask; +#if XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_KUSER + typedef unsigned long long rdtsc_t(volatile unsigned *vaddr); + rdtsc_t *const kuser_tsc_get = + (void *)(0xffff1004 - ((*(unsigned *)(0xffff0ffc) + 3) << 5)); + return kuser_tsc_get(__xn_tscinfo.counter); + +#elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING + volatile unsigned long long *const tscp = __xn_tscinfo.tsc; + volatile unsigned *const counterp = __xn_tscinfo.counter; + const unsigned mask = __xn_tscinfo.mask; register unsigned long long result; unsigned counter; @@ -274,10 +270,11 @@ static inline unsigned long long __xn_rdtsc(void) if ((counter & mask) < ((unsigned) result & mask)) result += mask + 1ULL; return (result & ~((unsigned long long) mask)) | (counter & mask); + #elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING_COUNTDOWN - volatile unsigned long long *const tscp = __xn_tscinfo.u.fr.tsc; - volatile unsigned *const counterp = __xn_tscinfo.u.fr.counter; - const unsigned mask = __xn_tscinfo.u.fr.mask; + volatile unsigned long long *const tscp = __xn_tscinfo.tsc; + volatile unsigned *const counterp = __xn_tscinfo.counter; + const unsigned mask = __xn_tscinfo.mask; register unsigned long long result; unsigned counter; @@ -288,10 +285,11 @@ static inline unsigned long long __xn_rdtsc(void) if ((counter & mask) > ((unsigned) result & mask)) result += mask + 1ULL; return (result & ~((unsigned long long) mask)) | (counter & mask); + #elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_FREERUNNING_FAST_WRAP - volatile unsigned long long *const tscp = __xn_tscinfo.u.fr.tsc; - volatile unsigned *const counterp = __xn_tscinfo.u.fr.counter; - const unsigned mask = __xn_tscinfo.u.fr.mask; + volatile unsigned long long *const tscp = __xn_tscinfo.tsc; + volatile unsigned *const counterp = __xn_tscinfo.counter; + const unsigned mask = __xn_tscinfo.mask; register unsigned long long after, before; unsigned counter; @@ -307,10 +305,10 @@ static inline unsigned long long __xn_rdtsc(void) return (before & ~((unsigned long long) mask)) | (counter & mask); #elif XNARCH_ARM_TSC_TYPE == __XN_TSC_TYPE_DECREMENTER - volatile unsigned long long *const tscp = __xn_tscinfo.u.dec.tsc; - volatile unsigned *const counterp = __xn_tscinfo.u.dec.counter; - volatile unsigned *const last_cntp = __xn_tscinfo.u.dec.last_cnt; - const unsigned mask = __xn_tscinfo.u.dec.mask; + volatile unsigned long long *const tscp = __xn_tscinfo.tsc; + volatile unsigned *const counterp = __xn_tscinfo.counter; + volatile unsigned *const last_cntp = __xn_tscinfo.last_cnt; + const unsigned mask = __xn_tscinfo.mask; register unsigned long long after, before; unsigned counter, last_cnt; diff --git a/src/include/xeno_config.h.in b/src/include/xeno_config.h.in index 5b05843..d9e2887 100644 --- a/src/include/xeno_config.h.in +++ b/src/include/xeno_config.h.in @@ -10,12 +10,6 @@ #undef CONFIG_X86_TSC /* config */ -#undef CONFIG_XENO_ARM_ARCH - -/* config */ -#undef CONFIG_XENO_ARM_EABI - -/* config */ #undef CONFIG_XENO_ARM_SA1100 /* Build system alias */ @@ -30,9 +24,6 @@ /* config */ #undef CONFIG_XENO_DEFAULT_PERIOD -/* config */ -#undef CONFIG_XENO_FASTSYNCH - /* Host system alias */ #undef CONFIG_XENO_HOST_STRING _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git