intr.h revision 1.28
11.28Sad/*	$NetBSD: intr.h,v 1.28 2007/12/03 15:33:52 ad Exp $	*/
21.2Sscottr
31.2Sscottr/*
41.2Sscottr * Copyright (C) 1997 Scott Reynolds
51.2Sscottr * All rights reserved.
61.2Sscottr *
71.2Sscottr * Redistribution and use in source and binary forms, with or without
81.2Sscottr * modification, are permitted provided that the following conditions
91.2Sscottr * are met:
101.2Sscottr * 1. Redistributions of source code must retain the above copyright
111.2Sscottr *    notice, this list of conditions and the following disclaimer.
121.2Sscottr * 2. Redistributions in binary form must reproduce the above copyright
131.2Sscottr *    notice, this list of conditions and the following disclaimer in the
141.2Sscottr *    documentation and/or other materials provided with the distribution.
151.6Sscottr * 3. The name of the author may not be used to endorse or promote products
161.2Sscottr *    derived from this software without specific prior written permission.
171.2Sscottr *
181.2Sscottr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
191.2Sscottr * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
201.2Sscottr * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
211.2Sscottr * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
221.2Sscottr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
231.2Sscottr * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
241.2Sscottr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
251.2Sscottr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
261.2Sscottr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
271.2Sscottr * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
281.2Sscottr */
291.1Sscottr
301.1Sscottr#ifndef _MAC68K_INTR_H_
311.1Sscottr#define _MAC68K_INTR_H_
321.1Sscottr
331.16Sthorpej#include <machine/psl.h>
341.16Sthorpej
351.1Sscottr#ifdef _KERNEL
361.1Sscottr
371.1Sscottr/* spl0 requires checking for software interrupts */
381.1Sscottr
391.15Sthorpej/*
401.15Sthorpej * This array contains the appropriate PSL_S|PSL_IPL? values
411.15Sthorpej * to raise interrupt priority to the requested level.
421.15Sthorpej */
431.15Sthorpejextern unsigned short mac68k_ipls[];
441.15Sthorpej
451.26Stsutsui#define	IPL_NONE	0
461.26Stsutsui#define	IPL_SOFTCLOCK	1
471.28Sad#define	IPL_SOFTBIO	2
481.28Sad#define	IPL_SOFTNET	3
491.28Sad#define	IPL_SOFTSERIAL	4
501.28Sad#define	IPL_VM		5
511.28Sad#define	IPL_SCHED	6
521.28Sad#define	IPL_HIGH	7
531.28Sad#define	NIPL		8
541.15Sthorpej
551.4Sscottr/* These spl calls are _not_ to be used by machine-independent code. */
561.26Stsutsui#define	splsoft()	splraise1()
571.26Stsutsui#define	spladb()	_splraise(mac68k_ipls[IPL_ADB])
581.4Sscottr#define	splzs()		splserial()
591.7Sbriggs
601.7Sbriggs/*
611.1Sscottr * These should be used for:
621.1Sscottr * 1) ensuring mutual exclusion (why use processor level?)
631.1Sscottr * 2) allowing faster devices to take priority
641.1Sscottr */
651.1Sscottr
661.1Sscottr/* watch out for side effects */
671.1Sscottr#define splx(s)         ((s) & PSL_IPL ? _spl(s) : spl0())
681.1Sscottr
691.22Syamt
701.24Syamttypedef int ipl_t;
711.24Syamttypedef struct {
721.27Sthorpej	uint16_t _ipl;
731.24Syamt} ipl_cookie_t;
741.24Syamt
751.24Syamtstatic inline ipl_cookie_t
761.24Syamtmakeiplcookie(ipl_t ipl)
771.24Syamt{
781.24Syamt
791.24Syamt	return (ipl_cookie_t){._ipl = ipl};
801.24Syamt}
811.24Syamt
821.24Syamtstatic inline int
831.24Syamtsplraiseipl(ipl_cookie_t icookie)
841.24Syamt{
851.24Syamt
861.24Syamt	return _splraise(mac68k_ipls[icookie._ipl]);
871.24Syamt}
881.22Syamt
891.22Syamt#include <sys/spl.h>
901.22Syamt
911.9Sscottr/* intr.c */
921.21Schsvoid	intr_init(void);
931.21Schsvoid	intr_establish(int (*)(void *), void *, int);
941.21Schsvoid	intr_disestablish(int);
951.21Schsvoid	intr_dispatch(int);
961.1Sscottr
971.1Sscottr/* locore.s */
981.21Schsint	spl0(void);
991.1Sscottr#endif /* _KERNEL */
1001.1Sscottr
1011.1Sscottr#endif /* _MAC68K_INTR_H_ */
102