; $NetBSD$

;
; Copyright (c) 1994 Mark Brinicombe.
; Copyright (c) 1994 Brini.
; All rights reserved.
;
; This code is derived from software written for Brini by Mark Brinicombe
;
; 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.
; 3. All advertising materials mentioning features or use of this software
;    must display the following acknowledgement:
;	This product includes software developed by Brini.
; 4. The name of the company nor the name of the author may be used to
;    endorse or promote products derived from this software without specific
;    prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY BRINI ``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 REGENTS OR CONTRIBUTORS 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.
;
; RiscBSD kernel project
;
; areahand.s
;
;
;
; Created      : 12/09/94
; Last updated : 12/09/94
;
;    $Id$
;
	GET	h.asmregs

        AREA |C$$code|, CODE, READONLY

        EXPORT kernarea_handler

; r0 - code
; r1 - page block
; r2 - entries
; r3 - size increase
; r4 - current size
; r5 - pagesize
; r12 - arrangement table
kernarea_handler
; Is it a pregrow request ?
	TEQ	r0, #&00000000
	BICNES	pc, lr, #1<<28

; Make sure that the area is currently 0 in size
	TEQ	r4, #&00000000
	MOVNE	r0, #&00000000
	ORRNES	pc, lr, #1<<28

	TEQ	r1, #&00000000
	BICEQS	pc, lr, #1<<28

; Store registers
	STMFD	sp!, {r0-r12}

; Get first page number
	LDR	r8, [r12, #&0004]
	SUB	r8, r8, r2
	MOV	r8, #&0000700
	STR	r1, [r12]

loop
	STR	r8, [r1], #&000c
	ADD	r8, r8, #&00000001
	SUBS	r2, r2, #&00000001
	BNE	loop

	LDMFD	sp!, {r0-r12}
;	BICS	pc, lr, #1<<28
	ADR	r0, error1
	ORRS	pc, lr, #1<<28

error1
	DCD	&00000000
	DCB	"error1"
	DCB	&00
        END
