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