182900Sjake/*-
282900Sjake * Copyright (c) 1996 Berkeley Software Design, Inc. All rights reserved.
382900Sjake *
482900Sjake * Redistribution and use in source and binary forms, with or without
582900Sjake * modification, are permitted provided that the following conditions
682900Sjake * are met:
782900Sjake * 1. Redistributions of source code must retain the above copyright
882900Sjake *    notice, this list of conditions and the following disclaimer.
982900Sjake * 2. Redistributions in binary form must reproduce the above copyright
1082900Sjake *    notice, this list of conditions and the following disclaimer in the
1182900Sjake *    documentation and/or other materials provided with the distribution.
1282900Sjake * 3. Berkeley Software Design Inc's name may not be used to endorse or
1382900Sjake *    promote products derived from this software without specific prior
1482900Sjake *    written permission.
1582900Sjake *
1682900Sjake * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND
1782900Sjake * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1882900Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1982900Sjake * ARE DISCLAIMED.  IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE
2082900Sjake * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2182900Sjake * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2282900Sjake * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2382900Sjake * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2482900Sjake * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2582900Sjake * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2682900Sjake * SUCH DAMAGE.
2782900Sjake *
2882900Sjake *	from BSDI $Id: ktr.h,v 1.10.2.7 2000/03/16 21:44:42 cp Exp $
2982900Sjake * $FreeBSD$
3082900Sjake */
3182900Sjake
3282900Sjake#ifndef _MACHINE_KTR_H_
3382900Sjake#define _MACHINE_KTR_H_
3482900Sjake
35153175Smarius#include <sys/ktr.h>
36153175Smarius
3793949Sjake#ifndef LOCORE
3882900Sjake
39203838Smarius#define	KTR_CPU	PCPU_GET(mid)
4093949Sjake
4193949Sjake#else
4293949Sjake
4382900Sjake/*
4493949Sjake * XXX could really use another register...
4582900Sjake */
4682900Sjake#define	ATR(desc, r1, r2, r3, l1, l2) \
4782900Sjake	.sect	.rodata ; \
48114071Sobrienl1:	.asciz	desc ; \
4982900Sjake	.previous ; \
5093949Sjake	SET(ktr_idx, r2, r1) ; \
5182900Sjake	lduw	[r1], r2 ; \
52114071Sobrienl2:	add	r2, 1, r3 ; \
5384177Sjake	set	KTR_ENTRIES - 1, r1 ; \
5484177Sjake	and	r3, r1, r3 ; \
5584177Sjake	set	ktr_idx, r1 ; \
5682900Sjake	casa	[r1] ASI_N, r2, r3 ; \
5782900Sjake	cmp	r2, r3 ; \
5882900Sjake	bne	%icc, l2 ## b ; \
5982900Sjake	 mov	r3, r2 ; \
6093949Sjake	SET(ktr_buf, r3, r1) ; \
6182900Sjake	mulx	r2, KTR_SIZEOF, r2 ; \
6282900Sjake	add	r1, r2, r1 ; \
6393949Sjake	rd	%tick, r2 ; \
6493949Sjake	stx	r2, [r1 + KTR_TIMESTAMP] ; \
65203838Smarius	lduw	[PCPU(MID)], r2 ; \
6693949Sjake	stw	r2, [r1 + KTR_CPU] ; \
6793949Sjake	stw	%g0, [r1 + KTR_LINE] ; \
6893949Sjake	stx	%g0, [r1 + KTR_FILE] ; \
6993949Sjake	SET(l1 ## b, r3, r2) ; \
7082900Sjake	stx	r2, [r1 + KTR_DESC]
7182900Sjake
72222828Smarius/*
73222828Smarius * NB: this clobbers %y.
74222828Smarius */
7582900Sjake#define CATR(mask, desc, r1, r2, r3, l1, l2, l3) \
7693949Sjake	set	mask, r1 ; \
77222828Smarius	SET(ktr_mask, r3, r2) ; \
78222828Smarius	lduw	[r2], r2 ; \
79222828Smarius	and	r2, r1, r1 ; \
80222828Smarius	brz	r1, l3 ## f ; \
81222828Smarius	 nop ; \
82222828Smarius	lduw	[PCPU(CPUID)], r2 ; \
83222828Smarius	mov	_NCPUBITS, r3 ; \
84222828Smarius	mov	%g0, %y ; \
85222828Smarius	udiv	r2, r3, r2 ; \
86222828Smarius	srl	r2, 0, r2 ; \
87222828Smarius	sllx	r2, PTR_SHIFT, r2 ; \
88222828Smarius	SET(ktr_cpumask, r3, r1) ; \
89222828Smarius	ldx	[r1 + r2], r1 ; \
90222828Smarius	lduw	[PCPU(CPUID)], r2 ; \
91222828Smarius	mov	_NCPUBITS, r3 ; \
92222828Smarius	mov	%g0, %y ; \
93222828Smarius	udiv	r2, r3, r2 ; \
94222828Smarius	srl	r2, 0, r2 ; \
95222828Smarius	smul	r2, r3, r3 ; \
96222828Smarius	lduw	[PCPU(CPUID)], r2 ; \
97222828Smarius	sub	r2, r3, r3 ; \
9893949Sjake	mov	1, r2 ; \
99222828Smarius	sllx	r2, r3, r2 ; \
100222828Smarius	andn	r1, r2, r1 ; \
101222828Smarius	brz	r1, l3 ## f ; \
102222828Smarius	 nop ; \
10382900Sjake	ATR(desc, r1, r2, r3, l1, l2)
10482900Sjake
10582900Sjake#endif /* LOCORE */
10682900Sjake
10782900Sjake#endif /* !_MACHINE_KTR_H_ */
108