From 6c85cf4eeb047299df8d4b8ea7942eb691538956 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 19 Feb 2013 21:45:31 +0100 Subject: ucoolib: add irq lock functions --- ucoolib/arch/arch_common.arm.hh | 53 ++++++++++++++++++++++++++++++++++++++++ ucoolib/arch/arch_common.hh | 35 ++++++++++++++++++++++++++ ucoolib/arch/arch_common.host.hh | 47 +++++++++++++++++++++++++++++++++++ ucoolib/common.hh | 2 ++ 4 files changed, 137 insertions(+) create mode 100644 ucoolib/arch/arch_common.arm.hh create mode 100644 ucoolib/arch/arch_common.hh create mode 100644 ucoolib/arch/arch_common.host.hh (limited to 'ucoolib') diff --git a/ucoolib/arch/arch_common.arm.hh b/ucoolib/arch/arch_common.arm.hh new file mode 100644 index 0000000..4cfeebe --- /dev/null +++ b/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/ucoolib/arch/arch_common.hh b/ucoolib/arch/arch_common.hh new file mode 100644 index 0000000..2b5b71c --- /dev/null +++ b/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/ucoolib/arch/arch_common.host.hh b/ucoolib/arch/arch_common.host.hh new file mode 100644 index 0000000..fb8cdd5 --- /dev/null +++ b/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/ucoolib/common.hh b/ucoolib/common.hh index 4bedaa6..6c39cda 100644 --- a/ucoolib/common.hh +++ b/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