svn commit: r219742 - in projects/altix/sys: conf ia64/ia64
Marcel Moolenaar
marcel at FreeBSD.org
Fri Mar 18 16:05:12 UTC 2011
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)
More information about the svn-src-projects
mailing list