Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Mar 2011 16:05:11 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r219742 - in projects/altix/sys: conf ia64/ia64
Message-ID:  <201103181605.p2IG5COs071335@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Fri Mar 18 16:05:11 2011
New Revision: 219742
URL: http://svn.freebsd.org/changeset/base/219742

Log:
  Rename firmware.S to physical.S. While we're calling into the firmware,
  the file only handles the switch to physical mode and back. It has no
  firmware functionality.

Added:
  projects/altix/sys/ia64/ia64/physical.S
     - copied unchanged from r219716, projects/altix/sys/ia64/ia64/firmware.S
Deleted:
  projects/altix/sys/ia64/ia64/firmware.S
Modified:
  projects/altix/sys/conf/files.ia64

Modified: projects/altix/sys/conf/files.ia64
==============================================================================
--- projects/altix/sys/conf/files.ia64	Fri Mar 18 15:36:28 2011	(r219741)
+++ projects/altix/sys/conf/files.ia64	Fri Mar 18 16:05:11 2011	(r219742)
@@ -84,7 +84,7 @@ ia64/ia64/efi.c			standard
 ia64/ia64/elf_machdep.c		standard
 ia64/ia64/emulate.c		standard
 ia64/ia64/exception.S		standard
-ia64/ia64/firmware.S		standard
+ia64/ia64/physical.S		standard
 ia64/ia64/gdb_machdep.c		optional	gdb
 ia64/ia64/highfp.c		standard
 ia64/ia64/in_cksum.c		optional	inet

Copied: projects/altix/sys/ia64/ia64/physical.S (from r219716, projects/altix/sys/ia64/ia64/firmware.S)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/altix/sys/ia64/ia64/physical.S	Fri Mar 18 16:05:11 2011	(r219742, copy of r219716, projects/altix/sys/ia64/ia64/firmware.S)
@@ -0,0 +1,258 @@
+/*-
+ * Copyright (c) 2011 Marcel Moolenaar
+ * 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 THE AUTHOR 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>
+#include <machine/ia64_cpu.h>
+
+		.text
+
+/*
+ * u_long ia64_efi_physical(ia64_efi_f, u_long, u_long, u_long, u_long)
+ *
+ *	loc0 = ar.pfs
+ *	loc1 = rp
+ *	loc2 = psr
+ *	loc3 = sp
+ *	loc4 = bsp
+ *	loc5 = gp
+ */
+ENTRY(ia64_efi_physical, 5)
+		.prologue
+		.regstk 5,6,4,0
+		.save	ar.pfs,loc0
+		alloc	loc0=ar.pfs,5,6,4,0
+		;;
+		.save   rp,loc1
+		mov	loc1=rp
+		;;
+		.body
+		mov	loc2=psr		// save psr
+		movl	r16=IA64_PSR_I | IA64_PSR_IT | IA64_PSR_DT | \
+			    IA64_PSR_RT | IA64_PSR_DFL | IA64_PSR_DFH
+		;;
+		andcm	r14=loc2,r16
+		movl	r15=IA64_PSR_BN
+		;;
+		rsm	psr.i
+		mov	r17=ar.rsc
+		or	r16=r14,r15		// new psr
+		;;
+		mov	ar.rsc=0
+		or	loc2=loc2,r15
+		;;
+		flushrs
+		mov	loc3=sp			// save sp
+		;;
+		mov	loc4=ar.bsp		// save ar.bsp
+		mov	r18=ar.rnat
+		;;
+		tpa	r19=loc4		// new bspstore
+		mov	loc5=gp
+		;;
+		tpa	r20=loc3		// new sp
+		ld8	r21=[in0],8
+		;;
+1:
+		mov	r14=ip
+		;;
+		ld8	r22=[in0]
+		add	r15=2f-1b,r14
+		;;
+		tpa	r14=r15
+		;;
+		rsm	psr.ic
+		;;
+		srlz.i
+		;;
+		mov	cr.iip=r14
+		mov	cr.ifs=r0
+		mov	cr.ipsr=r16
+		;;
+		rfi
+2:
+		mov	ar.bspstore=r19
+		mov	sp=r20
+		;;
+		mov	ar.rnat=r18
+		mov	ar.rsc=r17
+		;;
+		mov	b6=r21
+		mov	gp=r22
+		mov	out0=in1
+		mov	out1=in2
+		mov	out2=in3
+		mov	out3=in4
+		;;
+		br.call.sptk.many	rp=b6
+		mov	gp=loc5
+		;;
+		rsm	psr.i | psr.ic
+		mov	r16=ar.rsc
+		;;
+		srlz.i
+		mov	ar.rsc=0
+		;;
+		flushrs
+		;;
+		mov	r17=ar.rnat
+		movl	r18=3f
+		;;
+		mov	cr.iip=r18
+		mov	cr.ifs=r0
+		mov	cr.ipsr=loc2
+		;;
+		rfi
+3:
+		mov	ar.bspstore=loc4
+		mov	sp=loc3
+		;;
+		mov	ar.rnat=r17
+		mov	ar.rsc=r16
+		;;
+		mov	rp=loc1
+		mov	ar.pfs=loc0
+		;;
+		br.ret.sptk.many	rp
+END(ia64_efi_physical)
+
+
+/*
+ * ia64_pal_ret ia64_pal_physical(ia64_fw_f, u_long, u_long, u_long, u_long)
+ *
+ *	loc0 = ar.pfs
+ *	loc1 = rp
+ *	loc2 = psr
+ *	loc3 = sp
+ *	loc4 = bsp
+ *	loc5 = gp
+ */
+ENTRY(ia64_pal_physical, 5)
+		.prologue
+		.regstk 5,6,4,0
+		.save	ar.pfs,loc0
+		alloc	loc0=ar.pfs,5,6,4,0
+		;;
+		.save   rp,loc1
+		mov	loc1=rp
+		;;
+		.body
+		mov	loc2=psr		// save psr
+		movl	r16=IA64_PSR_I | IA64_PSR_IT | IA64_PSR_DT | \
+			    IA64_PSR_RT | IA64_PSR_DFL | IA64_PSR_DFH
+		;;
+		andcm	r14=loc2,r16
+		movl	r15=IA64_PSR_BN
+		;;
+		rsm	psr.i
+		mov	r17=ar.rsc
+		or	r16=r14,r15		// new psr
+		;;
+		mov	ar.rsc=0
+		or	loc2=loc2,r15
+		;;
+		flushrs
+		mov	loc3=sp			// save sp
+		;;
+		mov	loc4=ar.bsp		// save ar.bsp
+		mov	r18=ar.rnat
+		;;
+		mov	loc5=gp
+		movl	r14=kstack
+		;;
+		tpa	r19=r14			// new bspstore
+		movl	r15=kstack_top
+		;;
+		tpa	r20=r15			// new sp
+		movl	r21=ia64_pal_entry
+		;;
+1:
+		mov	r14=ip
+		ld8	r22=[r21]
+		;;
+		tpa	r21=r22
+		add	r15=2f-1b,r14
+		;;
+		tpa	r14=r15
+		;;
+		rsm	psr.ic
+		;;
+		srlz.i
+		;;
+		mov	cr.iip=r14
+		mov	cr.ifs=r0
+		mov	cr.ipsr=r16
+		;;
+		rfi
+2:
+		mov	ar.bspstore=r19
+		add	sp=-16,r20
+		;;
+		mov	ar.rnat=r18
+		mov	ar.rsc=r17
+		;;
+		mov	b6=r21
+		mov	out0=in0
+		mov	out1=in1
+		mov	out2=in2
+		mov	out3=in3
+		// PAL static calls
+		mov	r28=in0
+		mov	r29=in1
+		mov	r30=in2
+		mov	r31=in3
+		br.call.sptk.many	rp=b6
+		mov	gp=loc5
+		;;
+		rsm	psr.i | psr.ic
+		mov	r16=ar.rsc
+		;;
+		srlz.i
+		mov	ar.rsc=0
+		;;
+		flushrs
+		;;
+		mov	r17=ar.rnat
+		movl	r18=3f
+		;;
+		mov	cr.iip=r18
+		mov	cr.ifs=r0
+		mov	cr.ipsr=loc2
+		;;
+		rfi
+3:
+		mov	ar.bspstore=loc4
+		mov	sp=loc3
+		;;
+		mov	ar.rnat=r17
+		mov	ar.rsc=r16
+		;;
+		mov	rp=loc1
+		mov	ar.pfs=loc0
+		;;
+		br.ret.sptk.many	rp
+END(ia64_pal_physical)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103181605.p2IG5COs071335>