Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sh3/include Implement CPU spinlocks. Compile-teste...



details:   https://anonhg.NetBSD.org/src/rev/a7f6f5a58ea3
branches:  trunk
changeset: 536457:a7f6f5a58ea3
user:      gmcgarry <gmcgarry%NetBSD.org@localhost>
date:      Mon Sep 16 09:12:50 2002 +0000

description:
Implement CPU spinlocks.  Compile-tested only.

diffstat:

 sys/arch/sh3/include/lock.h |  59 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 55 insertions(+), 4 deletions(-)

diffs (78 lines):

diff -r b9e5b9b37302 -r a7f6f5a58ea3 sys/arch/sh3/include/lock.h
--- a/sys/arch/sh3/include/lock.h       Mon Sep 16 07:00:43 2002 +0000
+++ b/sys/arch/sh3/include/lock.h       Mon Sep 16 09:12:50 2002 +0000
@@ -1,11 +1,11 @@
-/*     $NetBSD: lock.h,v 1.3 2002/03/17 17:55:25 uch Exp $     */
+/*     $NetBSD: lock.h,v 1.4 2002/09/16 09:12:50 gmcgarry Exp $        */
 
 /*-
- * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * Copyright (c) 2002 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe.
+ * by Gregory McGarry.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -45,7 +45,58 @@
 
 typedef        __volatile int          __cpu_simple_lock_t;
 
-#define        __SIMPLELOCK_LOCKED     1
+#define        __SIMPLELOCK_LOCKED     0x80
 #define        __SIMPLELOCK_UNLOCKED   0
 
+static __inline void __cpu_simple_lock_init __P((__cpu_simple_lock_t *))
+       __attribute__((__unused__));
+static __inline void __cpu_simple_lock __P((__cpu_simple_lock_t *))
+       __attribute__((__unused__));
+static __inline int __cpu_simple_lock_try __P((__cpu_simple_lock_t *))
+       __attribute__((__unused__));
+static __inline void __cpu_simple_unlock __P((__cpu_simple_lock_t *)) 
+       __attribute__((__unused__));
+
+static __inline void
+__cpu_simple_lock_init(__cpu_simple_lock_t *alp)
+{
+
+       *alp = __SIMPLELOCK_UNLOCKED;
+}
+
+static __inline void
+__cpu_simple_lock(__cpu_simple_lock_t *alp)
+{
+
+        __asm __volatile(
+               "1:     tas.b   %0      \n"
+               "       bf      1b      \n"
+               : "=m" (*alp));
+}
+
+static __inline int
+__cpu_simple_lock_try(__cpu_simple_lock_t *alp)
+{
+       int __rv;
+
+       __asm __volatile(
+               "       mov     #1, r1  \n"
+               "       mov.l   r1, %1  \n"
+               "       tas.b   %0      \n"
+               "       bt      1f      \n"
+               "       mov     #0, r1  \n"
+               "       mov.l   r1, %1  \n"
+               "1:                     \n"
+               : "=m" (*alp), "=m" (__rv) :: "r1");
+
+       return (__rv);
+}
+
+static __inline void
+__cpu_simple_unlock(__cpu_simple_lock_t *alp)
+{
+
+       *alp = __SIMPLELOCK_UNLOCKED;
+}
+
 #endif /* !_SH3_LOCK_H_ */



Home | Main Index | Thread Index | Old Index