intr.h revision 1.15
11.15Stsutsui/* $NetBSD: intr.h,v 1.15 2014/03/22 16:52:07 tsutsui Exp $ */
21.1Snisimura
31.1Snisimura/*-
41.1Snisimura * Copyright (c) 2000 The NetBSD Foundation, Inc.
51.1Snisimura * All rights reserved.
61.1Snisimura *
71.1Snisimura * This code is derived from software contributed to The NetBSD Foundation
81.1Snisimura * by Tohru Nishimura.
91.1Snisimura *
101.1Snisimura * Redistribution and use in source and binary forms, with or without
111.1Snisimura * modification, are permitted provided that the following conditions
121.1Snisimura * are met:
131.1Snisimura * 1. Redistributions of source code must retain the above copyright
141.1Snisimura *    notice, this list of conditions and the following disclaimer.
151.1Snisimura * 2. Redistributions in binary form must reproduce the above copyright
161.1Snisimura *    notice, this list of conditions and the following disclaimer in the
171.1Snisimura *    documentation and/or other materials provided with the distribution.
181.1Snisimura *
191.1Snisimura * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
201.1Snisimura * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
211.1Snisimura * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221.1Snisimura * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
231.1Snisimura * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
241.1Snisimura * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
251.1Snisimura * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
261.1Snisimura * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
271.1Snisimura * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
281.1Snisimura * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
291.1Snisimura * POSSIBILITY OF SUCH DAMAGE.
301.1Snisimura */
311.1Snisimura
321.1Snisimura#ifndef _MACHINE_INTR_H
331.1Snisimura#define _MACHINE_INTR_H
341.1Snisimura
351.4Sjdolecek#ifdef _KERNEL
361.4Sjdolecek
371.1Snisimura/*
381.15Stsutsui * spl functions
391.1Snisimura */
401.1Snisimura#include <machine/psl.h>
411.1Snisimura
421.15Stsutsui#define spl0()		_spl0()
431.1Snisimura#define splnone()	spl0()
441.13Stsutsui#define splsoftclock()	splraise1()
451.10Sad#define splsoftbio()	splraise1()
461.10Sad#define splsoftnet()	splraise1()
471.10Sad#define splsoftserial()	splraise1()
481.14Stsutsui#define splvm()		splraise4()
491.14Stsutsui#define splsched()	splraise5()
501.7Stsutsui#define splhigh()	spl7()
511.1Snisimura
521.5Syamt#define	IPL_NONE	0
531.5Syamt#define	IPL_SOFTCLOCK	1
541.10Sad#define	IPL_SOFTBIO	2
551.10Sad#define	IPL_SOFTNET	3
561.10Sad#define	IPL_SOFTSERIAL	4
571.10Sad#define	IPL_VM		5
581.10Sad#define	IPL_SCHED	6
591.10Sad#define	IPL_HIGH	7
601.10Sad#define	NIPL		8
611.5Syamt
621.13Stsutsuiextern const uint16_t ipl2psl_table[NIPL];
631.5Syamt
641.5Syamttypedef int ipl_t;
651.5Syamttypedef struct {
661.13Stsutsui	uint16_t _psl;
671.5Syamt} ipl_cookie_t;
681.5Syamt
691.5Syamtstatic inline ipl_cookie_t
701.5Syamtmakeiplcookie(ipl_t ipl)
711.5Syamt{
721.5Syamt
731.13Stsutsui	return (ipl_cookie_t){._psl = ipl2psl_table[ipl]};
741.5Syamt}
751.5Syamt
761.5Syamtstatic inline int
771.5Syamtsplraiseipl(ipl_cookie_t icookie)
781.5Syamt{
791.5Syamt
801.13Stsutsui	return _splraise(icookie._psl);
811.5Syamt}
821.1Snisimura
831.15Stsutsuistatic inline void
841.15Stsutsuisplx(int sr)
851.15Stsutsui{
861.15Stsutsui
871.15Stsutsui	__asm volatile("movew %0,%%sr" : : "di" (sr));
881.15Stsutsui}
891.15Stsutsui
901.8Stsutsui#endif /* _KERNEL */
911.8Stsutsui
921.1Snisimura#endif	/* _MACHINE_INTR_H */
93