intr.h revision 1.16
11.16Sriastrad/* $NetBSD: intr.h,v 1.16 2023/07/11 11:06:04 riastradh 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.16Sriastrad#if defined(_KERNEL) || defined(_KMEMUSER)
361.16Sriastradtypedef struct {
371.16Sriastrad	uint16_t _psl;
381.16Sriastrad} ipl_cookie_t;
391.16Sriastrad#endif
401.16Sriastrad
411.4Sjdolecek#ifdef _KERNEL
421.4Sjdolecek
431.1Snisimura/*
441.15Stsutsui * spl functions
451.1Snisimura */
461.1Snisimura#include <machine/psl.h>
471.1Snisimura
481.15Stsutsui#define spl0()		_spl0()
491.1Snisimura#define splnone()	spl0()
501.13Stsutsui#define splsoftclock()	splraise1()
511.10Sad#define splsoftbio()	splraise1()
521.10Sad#define splsoftnet()	splraise1()
531.10Sad#define splsoftserial()	splraise1()
541.14Stsutsui#define splvm()		splraise4()
551.14Stsutsui#define splsched()	splraise5()
561.7Stsutsui#define splhigh()	spl7()
571.1Snisimura
581.5Syamt#define	IPL_NONE	0
591.5Syamt#define	IPL_SOFTCLOCK	1
601.10Sad#define	IPL_SOFTBIO	2
611.10Sad#define	IPL_SOFTNET	3
621.10Sad#define	IPL_SOFTSERIAL	4
631.10Sad#define	IPL_VM		5
641.10Sad#define	IPL_SCHED	6
651.10Sad#define	IPL_HIGH	7
661.10Sad#define	NIPL		8
671.5Syamt
681.13Stsutsuiextern const uint16_t ipl2psl_table[NIPL];
691.5Syamt
701.5Syamttypedef int ipl_t;
711.5Syamt
721.5Syamtstatic inline ipl_cookie_t
731.5Syamtmakeiplcookie(ipl_t ipl)
741.5Syamt{
751.5Syamt
761.13Stsutsui	return (ipl_cookie_t){._psl = ipl2psl_table[ipl]};
771.5Syamt}
781.5Syamt
791.5Syamtstatic inline int
801.5Syamtsplraiseipl(ipl_cookie_t icookie)
811.5Syamt{
821.5Syamt
831.13Stsutsui	return _splraise(icookie._psl);
841.5Syamt}
851.1Snisimura
861.15Stsutsuistatic inline void
871.15Stsutsuisplx(int sr)
881.15Stsutsui{
891.15Stsutsui
901.15Stsutsui	__asm volatile("movew %0,%%sr" : : "di" (sr));
911.15Stsutsui}
921.15Stsutsui
931.8Stsutsui#endif /* _KERNEL */
941.8Stsutsui
951.1Snisimura#endif	/* _MACHINE_INTR_H */
96