Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/nathanw_sa]: src/sys/arch/m68k/060sp Use PCB_ONFAULT instead of hardcodi...
details: https://anonhg.NetBSD.org/src/rev/6fb03baf2d5a
branches: nathanw_sa
changeset: 504835:6fb03baf2d5a
user: scw <scw%NetBSD.org@localhost>
date: Thu Jul 12 17:17:46 2001 +0000
description:
Use PCB_ONFAULT instead of hardcoding a value of 64. This is fine
for Amiga and Atari but not for other m68k ports which use m68k/pcb.h.
diffstat:
sys/arch/m68k/060sp/netbsd060sp.S | 372 ++++++++++++++++++++++++++++++++++++++
1 files changed, 372 insertions(+), 0 deletions(-)
diffs (truncated from 376 to 300 lines):
diff -r 62d8383dc32d -r 6fb03baf2d5a sys/arch/m68k/060sp/netbsd060sp.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/m68k/060sp/netbsd060sp.S Thu Jul 12 17:17:46 2001 +0000
@@ -0,0 +1,372 @@
+/*
+#
+# $NetBSD: netbsd060sp.S,v 1.7.6.2 2001/07/12 17:17:46 scw Exp $
+#
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
+# M68000 Hi-Performance Microprocessor Division
+# M68060 Software Package Production Release
+#
+# M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
+# All rights reserved.
+#
+# THE SOFTWARE is provided on an "AS IS" basis and without warranty.
+# To the maximum extent permitted by applicable law,
+# MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
+# INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
+# FOR A PARTICULAR PURPOSE and any warranty against infringement with
+# regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
+# and any accompanying written materials.
+#
+# To the maximum extent permitted by applicable law,
+# IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
+# (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
+# BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
+# ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
+#
+# Motorola assumes no responsibility for the maintenance and support
+# of the SOFTWARE.
+#
+# You are hereby granted a copyright license to use, modify, and distribute the
+# SOFTWARE so long as this entire notice is retained without alteration
+# in any modified and/or redistributed versions, and that such modified
+# versions are clearly identified as such.
+# No licenses are granted by implication, estoppel or otherwise under any
+# patents or trademarks of Motorola, Inc.
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Derived from:
+# os.s
+#
+# This file contains:
+# - example "Call-Out"s required by both the ISP and FPSP.
+#
+*/
+
+#include <machine/asm.h>
+
+#include "assym.h"
+
+/*
+#
+# make the copyright notice appear in the binary:
+#
+*/
+#include "copyright.S"
+
+/*
+#################################
+# EXAMPLE CALL-OUTS #
+# #
+# _060_dmem_write() #
+# _060_dmem_read() #
+# _060_imem_read() #
+# _060_dmem_read_byte() #
+# _060_dmem_read_word() #
+# _060_dmem_read_long() #
+# _060_imem_read_word() #
+# _060_imem_read_long() #
+# _060_dmem_write_byte() #
+# _060_dmem_write_word() #
+# _060_dmem_write_long() #
+# #
+# _060_real_trace() #
+# _060_real_access() #
+#################################
+*/
+
+/*
+#
+# Each IO routine checks to see if the memory write/read is to/from user
+# or supervisor application space. The examples below use simple "move"
+# instructions for supervisor mode applications and call _copyin()/_copyout()
+# for user mode applications.
+# When installing the 060SP, the _copyin()/_copyout() equivalents for a
+# given operating system should be substituted.
+#
+# The addresses within the 060SP are guaranteed to be on the stack.
+# The result is that Unix processes are allowed to sleep as a consequence
+# of a page fault during a _copyout.
+#
+*/
+
+/*
+#
+# _060_dmem_write():
+#
+# Writes to data memory while in supervisor mode.
+#
+# INPUTS:
+# a0 - supervisor source address
+# a1 - user destination address
+# d0 - number of bytes to write
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_dmem_write)
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ beqs user_write
+super_write:
+ moveb %a0@+,%a1@+ |# copy 1 byte
+ subql #0x1,%d0 |# decr byte counter
+ bnes super_write |# quit if ctr = 0
+ clrl %d1 |# return success
+ rts
+user_write:
+ movel %d0,%sp@- |# pass: counter
+ movel %a1,%sp@- |# pass: user dst
+ movel %a0,%sp@- |# pass: supervisor src
+ bsrl _C_LABEL(copyout) |# write byte to user mem
+ movel %d0,%d1 |# return success
+ addl #0xc,%sp |# clear 3 lw params
+ rts
+
+/*
+#
+# _060_imem_read(), _060_dmem_read():
+#
+# Reads from data/instruction memory while in supervisor mode.
+#
+# INPUTS:
+# a0 - user source address
+# a1 - supervisor destination address
+# d0 - number of bytes to read
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_imem_read)
+ASENTRY_NOPROFILE(_060_dmem_read)
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ beqs user_read
+super_read:
+ moveb %a0@+,%a1@+ |# copy 1 byte
+ subql #0x1,%d0 |# decr byte counter
+ bnes super_read |# quit if ctr = 0
+ clrl %d1 |# return success
+ rts
+user_read:
+ movel %d0,%sp@- |# pass: counter
+ movel %a1,%sp@- |# pass: super dst
+ movel %a0,%sp@- |# pass: user src
+ bsrl _C_LABEL(copyin) |# read byte from user mem
+ movel %d0,%d1 |# return success
+ addl #0xc,%sp |# clear 3 lw params
+ rts
+
+/*
+#
+# _060_dmem_read_byte():
+#
+# Read a data byte from user memory.
+#
+# INPUTS:
+# a0 - user source address
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d0 - data byte in d0
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_dmem_read_byte)
+ clrl %d1 |# return success
+ clrl %d0 |# clear whole longword
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ bnes dmrbs |# supervisor
+dmrbu:
+ movl _C_LABEL(curpcb),%a1 | fault handler
+ movl #Lferr,%a1@(PCB_ONFAULT)| set it
+ movsb %a0@,%d0
+ bra Lfdone
+
+dmrbs:
+ moveb %a0@,%d0 |# fetch super byte
+ rts
+
+/*
+#
+# _060_imem_read_word():
+# Read an instruction word from user memory.
+#
+# _060_dmem_read_word():
+# Read a data word from user memory.
+#
+# INPUTS:
+# a0 - user source address
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d0 - data word in d0
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_imem_read_word)
+ASENTRY_NOPROFILE(_060_dmem_read_word)
+ clrl %d1 |# return success
+ clrl %d0 |# clear whole longword
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ bnes dmrws |# supervisor
+dmrwu:
+ movl _C_LABEL(curpcb),%a1 | fault handler
+ movl #Lferr,%a1@(PCB_ONFAULT)| set it
+ movsw %a0@,%d0
+ bra Lfdone
+dmrws:
+ movew %a0@,%d0 |# fetch super word
+ rts
+
+/*
+#
+# _060_imem_read_long():
+# Read an instruction longword from user memory.
+#
+# _060_dmem_read_long():
+# Read an data longword from user memory.
+#
+#
+# INPUTS:
+# a0 - user source address
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d0 - data longword in d0
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_imem_read_long)
+ASENTRY_NOPROFILE(_060_dmem_read_long)
+ clrl %d1 |# return success
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ bnes dmrls |# supervisor
+dmrlu:
+ movl _C_LABEL(curpcb),%a1 | fault handler
+ movl #Lferr,%a1@(PCB_ONFAULT)| set it
+ movsl %a0@,%d0
+ bra Lfdone
+dmrls:
+ movel %a0@,%d0 |# fetch super longword
+ rts
+
+/*
+#
+# _060_dmem_write_byte():
+#
+# Write a data byte to user memory.
+#
+# INPUTS:
+# a0 - user destination address
+# d0 - data byte in d0
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_dmem_write_byte)
+ clrl %d1 |# return success
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ bnes dmwbs |# supervisor
+dmwbu:
+ movl _C_LABEL(curpcb),%a1 | fault handler
+ movl #Lferr,%a1@(PCB_ONFAULT)| set it
+ movsb %d0,%a0@
+ bra Lfdone
+dmwbs:
+ moveb %d0,%a0@ |# store super byte
+ rts
+
+/*
+#
+# _060_dmem_write_word():
+#
+# Write a data word to user memory.
+#
+# INPUTS:
+# a0 - user destination address
+# d0 - data word in d0
+# a6@(0x4),bit5 - 1 = supervisor mode, 0 = user mode
+# OUTPUTS:
+# d1 - 0 = success, !0 = failure
+#
+*/
+ASENTRY_NOPROFILE(_060_dmem_write_word)
+ clrl %d1 |# return success
+ btst #0x5,%a6@(0x4) |# check for supervisor state
+ bnes dmwws |# supervisor
+dmwwu:
Home |
Main Index |
Thread Index |
Old Index