summaryrefslogtreecommitdiff
path: root/cpukit/libfs/src/rfs/rtems-rfs-mutex.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2010-02-18 00:24:25 +0000
committerChris Johns <chrisj@rtems.org>2010-02-18 00:24:25 +0000
commita9fa9b765df38cc5319ae734b5148fd47ebbfd8d (patch)
tree55ee28ea4a162bfb26c7a2cb6106b057beda70ae /cpukit/libfs/src/rfs/rtems-rfs-mutex.c
parent7a115ee642f0e9c0a5d5b66937b118c2ace79235 (diff)
2010-02-18 Chris Johns <chrisj@rtems.org>
* libfs/src/rfs/rtems-rfs-bitmaps.c, libfs/src/rfs/rtems-rfs-bitmaps.h, libfs/src/rfs/rtems-rfs-bitmaps-ut.c, libfs/src/rfs/rtems-rfs-block.c, libfs/src/rfs/rtems-rfs-block.h, libfs/src/rfs/rtems-rfs-block-pos.h, libfs/src/rfs/rtems-rfs-buffer-bdbuf.c, libfs/src/rfs/rtems-rfs-buffer.c, libfs/src/rfs/rtems-rfs-buffer-devio.c, libfs/src/rfs/rtems-rfs-buffer.h, libfs/src/rfs/rtems-rfs-data.h, libfs/src/rfs/rtems-rfs-dir.c, libfs/src/rfs/rtems-rfs-dir.h, libfs/src/rfs/rtems-rfs-dir-hash.c, libfs/src/rfs/rtems-rfs-dir-hash.h, libfs/src/rfs/rtems-rfs-file.c, libfs/src/rfs/rtems-rfs-file.h, libfs/src/rfs/rtems-rfs-file-system.c, libfs/src/rfs/rtems-rfs-file-system-fwd.h, libfs/src/rfs/rtems-rfs-file-system.h, libfs/src/rfs/rtems-rfs-format.c, libfs/src/rfs/rtems-rfs-format.h, libfs/src/rfs/rtems-rfs-group.c, libfs/src/rfs/rtems-rfs-group.h, libfs/src/rfs/rtems-rfs.h, libfs/src/rfs/rtems-rfs-inode.c, libfs/src/rfs/rtems-rfs-inode.h, libfs/src/rfs/rtems-rfs-link.c, libfs/src/rfs/rtems-rfs-link.h, libfs/src/rfs/rtems-rfs-mutex.c, libfs/src/rfs/rtems-rfs-mutex.h, libfs/src/rfs/rtems-rfs-rtems.c, libfs/src/rfs/rtems-rfs-rtems-dev.c, libfs/src/rfs/rtems-rfs-rtems-dir.c, libfs/src/rfs/rtems-rfs-rtems-file.c, libfs/src/rfs/rtems-rfs-rtems.h, libfs/src/rfs/rtems-rfs-rtems-utils.c, libfs/src/rfs/rtems-rfs-shell.c, libfs/src/rfs/rtems-rfs-shell.h, libfs/src/rfs/rtems-rfs-trace.c, libfs/src/rfs/rtems-rfs-trace.h: New. * Makefile.am, preinstall.am, libfs/Makefile.am, wrapup/Makefile.am: Updated with the RFS support. * libfs/README: Updated after 10 years. * libblock/src/flashdisk.c, libblock/src/nvdisk.c, libblock/src/ramdisk-driver.c: Updated to the new error reporting in libblock. * libmisc/shell/main_ls.c, libmisc/shell/print-ls.c: Fix printing the size in long mode. * libnetworking/nfs/bootp_subr.c, libnetworking/rtems/rtems_bootp.c, libnetworking/rtems/rtems_bsdnet_internal.h: Return the BOOTP/DHCP to the forever behaviour of 4.9 with the ability to call BOOTP and control the process if required.
Diffstat (limited to 'cpukit/libfs/src/rfs/rtems-rfs-mutex.c')
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-mutex.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-mutex.c b/cpukit/libfs/src/rfs/rtems-rfs-mutex.c
new file mode 100644
index 0000000000..e67651d269
--- /dev/null
+++ b/cpukit/libfs/src/rfs/rtems-rfs-mutex.c
@@ -0,0 +1,68 @@
+/*
+ * COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+/**
+ * @file
+ *
+ * @ingroup rtems-rfs
+ *
+ * RTEMS File System Mutex.
+ */
+
+#include <rtems/rfs/rtems-rfs-mutex.h>
+
+#if __rtems__
+/**
+ * RTEMS_RFS Mutex Attributes
+ *
+ * @warning Do not configure as inherit priority. If a driver is in the driver
+ * initialisation table this locked semaphore will have the IDLE task
+ * as the holder and a blocking task will raise the priority of the
+ * IDLE task which can cause unsual side effects like not work.
+ */
+#define RTEMS_RFS_MUTEX_ATTRIBS \
+ (RTEMS_PRIORITY | RTEMS_SIMPLE_BINARY_SEMAPHORE | \
+ RTEMS_NO_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL)
+#endif
+
+int
+rtems_rfs_mutex_create (rtems_rfs_mutex* mutex)
+{
+#if __rtems__
+ rtems_status_code sc;
+ sc = rtems_semaphore_create (rtems_build_name ('R', 'F', 'S', 'm'),
+ 1, RTEMS_RFS_MUTEX_ATTRIBS, 0,
+ mutex);
+ if (sc != RTEMS_SUCCESSFUL)
+ {
+ if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
+ printf ("rtems-rfs: mutex: open failed: %s\n",
+ rtems_status_text (sc));
+ return EIO;
+ }
+#endif
+ return 0;
+}
+
+int
+rtems_rfs_mutex_destroy (rtems_rfs_mutex* mutex)
+{
+#if __rtems__
+ rtems_status_code sc;
+ sc = rtems_semaphore_delete (*mutex);
+ if (sc != RTEMS_SUCCESSFUL)
+ {
+ if (rtems_rfs_trace (RTEMS_RFS_TRACE_MUTEX))
+ printf ("rtems-rfs: mutex: close failed: %s\n",
+ rtems_status_text (sc));
+ return EIO;
+ }
+#endif
+ return 0;
+}