intr.h revision 1.30
11.30Stsutsui/*	$NetBSD: intr.h,v 1.30 2008/06/19 13:56:22 tsutsui 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.26Stsutsui#define	IPL_NONE	0
401.26Stsutsui#define	IPL_SOFTCLOCK	1
411.28Sad#define	IPL_SOFTBIO	2
421.28Sad#define	IPL_SOFTNET	3
431.28Sad#define	IPL_SOFTSERIAL	4
441.28Sad#define	IPL_VM		5
451.28Sad#define	IPL_SCHED	6
461.28Sad#define	IPL_HIGH	7
471.28Sad#define	NIPL		8
481.15Sthorpej
491.30Stsutsui/*
501.30Stsutsui * This array contains the appropriate PSL_S|PSL_IPL? values
511.30Stsutsui * to raise interrupt priority to the requested level.
521.30Stsutsui */
531.30Stsutsuiextern uint16_t ipl2psl_table[NIPL];
541.30Stsutsui
551.4Sscottr/* These spl calls are _not_ to be used by machine-independent code. */
561.4Sscottr#define	splzs()		splserial()
571.7Sbriggs
581.7Sbriggs/*
591.1Sscottr * These should be used for:
601.1Sscottr * 1) ensuring mutual exclusion (why use processor level?)
611.1Sscottr * 2) allowing faster devices to take priority
621.1Sscottr */
631.1Sscottr
641.1Sscottr/* watch out for side effects */
651.1Sscottr#define splx(s)         ((s) & PSL_IPL ? _spl(s) : spl0())
661.1Sscottr
671.22Syamt
681.24Syamttypedef int ipl_t;
691.24Syamttypedef struct {
701.30Stsutsui	uint16_t _psl;
711.24Syamt} ipl_cookie_t;
721.24Syamt
731.24Syamtstatic inline ipl_cookie_t
741.24Syamtmakeiplcookie(ipl_t ipl)
751.24Syamt{
761.24Syamt
771.30Stsutsui	return (ipl_cookie_t){._psl = ipl2psl_table[ipl]};
781.24Syamt}
791.24Syamt
801.24Syamtstatic inline int
811.24Syamtsplraiseipl(ipl_cookie_t icookie)
821.24Syamt{
831.24Syamt
841.30Stsutsui	return _splraise(icookie._psl);
851.24Syamt}
861.22Syamt
871.22Syamt#include <sys/spl.h>
881.22Syamt
891.9Sscottr/* intr.c */
901.21Schsvoid	intr_init(void);
911.21Schsvoid	intr_establish(int (*)(void *), void *, int);
921.21Schsvoid	intr_disestablish(int);
931.21Schsvoid	intr_dispatch(int);
941.1Sscottr
951.1Sscottr/* locore.s */
961.21Schsint	spl0(void);
971.1Sscottr#endif /* _KERNEL */
981.1Sscottr
991.1Sscottr#endif /* _MAC68K_INTR_H_ */
100