From 17b4f93000a27c3ef46bcbb64e85a9e1b4ed7418 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 19 Feb 2013 21:45:31 +0100 Subject: digital/ucoolib/ucoolib: add irq lock functions --- digital/ucoolib/ucoolib/arch/arch_common.arm.hh | 53 ++++++++++++++++++++++++ digital/ucoolib/ucoolib/arch/arch_common.hh | 35 ++++++++++++++++ digital/ucoolib/ucoolib/arch/arch_common.host.hh | 47 +++++++++++++++++++++ digital/ucoolib/ucoolib/common.hh | 2 + 4 files changed, 137 insertions(+) create mode 100644 digital/ucoolib/ucoolib/arch/arch_common.arm.hh create mode 100644 digital/ucoolib/ucoolib/arch/arch_common.hh create mode 100644 digital/ucoolib/ucoolib/arch/arch_common.host.hh (limited to 'digital/ucoolib') diff --git a/digital/ucoolib/ucoolib/arch/arch_common.arm.hh b/digital/ucoolib/ucoolib/arch/arch_common.arm.hh new file mode 100644 index 00000000..4cfeebe6 --- /dev/null +++ b/digital/ucoolib/ucoolib/arch/arch_common.arm.hh @@ -0,0 +1,53 @@ +#ifndef ucoolib_arch_arch_common_arm_hh +#define ucoolib_arch_arch_common_arm_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2013 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +namespace ucoo { + +/// Type used to save irq state. +typedef unsigned int irq_flags_t; + +static inline irq_flags_t +irq_lock (void) +{ + irq_flags_t flags; + __asm__ __volatile__ ("mrs %0, PRIMASK\n\t" + "cpsid i" + : "=r" (flags) : + : "memory", "cc"); + return flags; +} + +inline void +irq_restore (irq_flags_t flags) +{ + __asm__ __volatile__ ("msr PRIMASK, %0" + : : "r" (flags) + : "memory", "cc"); +} + +} // namespace ucoo + +#endif // ucoolib_arch_arch_common_arm_hh diff --git a/digital/ucoolib/ucoolib/arch/arch_common.hh b/digital/ucoolib/ucoolib/arch/arch_common.hh new file mode 100644 index 00000000..2b5b71c7 --- /dev/null +++ b/digital/ucoolib/ucoolib/arch/arch_common.hh @@ -0,0 +1,35 @@ +#ifndef ucoolib_arch_arch_common_hh +#define ucoolib_arch_arch_common_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2013 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +#if defined (TARGET_arm) +# include "arch_common.arm.hh" +#elif defined (TARGET_host) +# include "arch_common.host.hh" +#else +# error "not implemented for this target" +#endif + +#endif // ucoolib_arch_arch_common_hh diff --git a/digital/ucoolib/ucoolib/arch/arch_common.host.hh b/digital/ucoolib/ucoolib/arch/arch_common.host.hh new file mode 100644 index 00000000..fb8cdd5a --- /dev/null +++ b/digital/ucoolib/ucoolib/arch/arch_common.host.hh @@ -0,0 +1,47 @@ +#ifndef ucoolib_arch_arch_common_host_hh +#define ucoolib_arch_arch_common_host_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2013 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +namespace ucoo { + +/// Type used to save irq state. +typedef unsigned int irq_flags_t; + +static inline irq_flags_t +irq_lock (void) +{ + // Nothing on host, there is no interrupts. + return 0; +} + +inline void +irq_restore (irq_flags_t) +{ + // Nothing on host, there is no interrupts. +} + +} // namespace ucoo + +#endif // ucoolib_arch_arch_common_host_hh diff --git a/digital/ucoolib/ucoolib/common.hh b/digital/ucoolib/ucoolib/common.hh index 4bedaa64..6c39cdac 100644 --- a/digital/ucoolib/ucoolib/common.hh +++ b/digital/ucoolib/ucoolib/common.hh @@ -25,6 +25,8 @@ // }}} #include +#include "ucoolib/arch/arch_common.hh" + namespace ucoo { /// Integer which is read and written atomically. -- cgit v1.2.3