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>