Author: nwhitehorn
Date: Sat Jul 17 13:34:01 2010
New Revision: 210193
URL: http://svn.freebsd.org/changeset/base/210193

Log:
  Add OpenSolaris atomics for powerpc64 and connect ZFS to the build on
  this platform.
  
  Reviewed by:  pjd

Added:
  head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/
  
head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S  
 (contents, props changed)
Modified:
  head/sys/modules/Makefile
  head/sys/modules/opensolaris/Makefile
  head/sys/modules/zfs/Makefile

Added: 
head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ 
head/sys/cddl/contrib/opensolaris/common/atomic/powerpc64/opensolaris_atomic.S  
    Sat Jul 17 13:34:01 2010        (r210193)
@@ -0,0 +1,75 @@
+/*-
+ * Copyright (C) 2010 Nathan Whitehorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <machine/asm.h>
+
+ENTRY(atomic_add_64_nv)
+   1:  ldarx   %r5,0,%r3
+       add     %r5,%r4,%r5
+       stdcx.  %r5,0,%r3
+       bne-    1b
+
+       mr      %r3,%r5
+       blr
+
+ENTRY(atomic_cas_64)
+   1:  ldarx   %r6,0,%r3
+       cmpld   %r6,%r4
+       bne     2f
+       stdcx.  %r5,0,%r3
+       bne-    1b
+       b       3f
+
+   2:  stdcx.  %r6,0,%r3       /* clear reservation */
+
+   3:  mr      %r3,%r6
+       blr
+
+ENTRY(atomic_or_8_nv)
+       li      %r6,3
+       andc.   %r6,%r3,%r6             /* r6 = r3 & ~4 */ 
+       addi    %r7,%r6,3
+       sub     %r7,%r7,%r3             /* offset in r7 */
+       sldi    %r7,%r7,3               /* bits to shift in r7 */
+
+       rlwinm  %r4,%r4,0,24,31         /* mask and rotate the argument */
+       slw     %r4,%r4,%r7
+
+   1:  lwarx   %r5,0,%r6
+       or      %r5,%r4,%r5
+       stwcx.  %r5,0,%r6
+       bne-    1b
+
+       srw     %r3,%r5,%r7
+       rlwinm  %r3,%r3,0,24,31         /* mask return value */
+       
+       blr
+
+ENTRY(membar_producer)
+       eieio
+       blr
+

Modified: head/sys/modules/Makefile
==============================================================================
--- head/sys/modules/Makefile   Sat Jul 17 13:31:27 2010        (r210192)
+++ head/sys/modules/Makefile   Sat Jul 17 13:34:01 2010        (r210193)
@@ -624,6 +624,15 @@ _smbfs=            smbfs
 _sound=                sound
 .endif
 
+.if ${MACHINE_ARCH} == "powerpc64"
+.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
+_opensolaris=  opensolaris
+.endif
+.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
+_zfs=          zfs
+.endif
+.endif
+
 .if ${MACHINE_ARCH} == "sparc64"
 _auxio=                auxio
 _em=           em

Modified: head/sys/modules/opensolaris/Makefile
==============================================================================
--- head/sys/modules/opensolaris/Makefile       Sat Jul 17 13:31:27 2010        
(r210192)
+++ head/sys/modules/opensolaris/Makefile       Sat Jul 17 13:34:01 2010        
(r210193)
@@ -8,7 +8,7 @@ SRCS=           opensolaris.c           \
                opensolaris_kmem.c      \
                opensolaris_misc.c
 
-.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} 
== "ia64" || ${MACHINE_ARCH} == "sparc64"
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} 
== "ia64" || ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "powerpc64"
 .PATH: ${.CURDIR}/../../cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH}
 SRCS+=         opensolaris_atomic.S
 .else

Modified: head/sys/modules/zfs/Makefile
==============================================================================
--- head/sys/modules/zfs/Makefile       Sat Jul 17 13:31:27 2010        
(r210192)
+++ head/sys/modules/zfs/Makefile       Sat Jul 17 13:34:01 2010        
(r210193)
@@ -27,7 +27,7 @@ SRCS+=        opensolaris_uio.c
 SRCS+= opensolaris_vfs.c
 SRCS+= opensolaris_zone.c
 
-.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} 
== "ia64" || ${MACHINE_ARCH} == "sparc64"
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} 
== "ia64" || ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "powerpc64"
 .PATH: ${SUNW}/common/atomic/${MACHINE_ARCH}
 SRCS+= opensolaris_atomic.S
 .else
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to