ff18363a3e
type of software interrupt. Roughly, what used to be a bit in spending now maps to a swi thread. Each thread can have multiple handlers, just like a hardware interrupt thread. - Instead of using a bitmask of pending interrupts, we schedule the specific software interrupt thread to run, so spending, NSWI, and the shandlers array are no longer needed. We can now have an arbitrary number of software interrupt threads. When you register a software interrupt thread via sinthand_add(), you get back a struct intrhand that you pass to sched_swi() when you wish to schedule your swi thread to run. - Convert the name of 'struct intrec' to 'struct intrhand' as it is a bit more intuitive. Also, prefix all the members of struct intrhand with 'ih_'. - Make swi_net() a MI function since there is now no point in it being MD. Submitted by: cp
85 lines
3.3 KiB
C
85 lines
3.3 KiB
C
/*
|
|
* Copyright (c) 1980, 1986, 1989, 1993
|
|
* The Regents of the University of California. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
* must display the following acknowledgement:
|
|
* This product includes software developed by the University of
|
|
* California, Berkeley and its contributors.
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* @(#)netisr.h 8.1 (Berkeley) 6/10/93
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _NET_NETISR_H_
|
|
#define _NET_NETISR_H_
|
|
|
|
/*
|
|
* The networking code runs off software interrupts.
|
|
*
|
|
* You can switch into the network by doing splnet() and return by splx().
|
|
* The software interrupt level for the network is higher than the software
|
|
* level for the clock (so you can enter the network in routines called
|
|
* at timeout time).
|
|
*/
|
|
|
|
/*
|
|
* Each ``pup-level-1'' input queue has a bit in a ``netisr'' status
|
|
* word which is used to de-multiplex a single software
|
|
* interrupt used for scheduling the network code to calls
|
|
* on the lowest level routine of each protocol.
|
|
*/
|
|
#define NETISR_IP 2 /* same as AF_INET */
|
|
#define NETISR_NS 6 /* same as AF_NS */
|
|
#define NETISR_ATALK 16 /* same as AF_APPLETALK */
|
|
#define NETISR_ARP 18 /* same as AF_LINK */
|
|
#define NETISR_IPX 23 /* same as AF_IPX */
|
|
#define NETISR_USB 25 /* USB soft interrupt */
|
|
#define NETISR_PPP 27 /* PPP soft interrupt */
|
|
#define NETISR_IPV6 28 /* same as AF_INET6 */
|
|
#define NETISR_NATM 29 /* same as AF_NATM */
|
|
#define NETISR_ATM 30 /* same as AF_ATM */
|
|
#define NETISR_NETGRAPH 31 /* same as AF_NETGRAPH */
|
|
|
|
|
|
#ifndef LOCORE
|
|
#ifdef _KERNEL
|
|
|
|
void legacy_setsoftnet __P((void));
|
|
|
|
extern volatile unsigned int netisr; /* scheduling bits for network */
|
|
#define schednetisr(anisr) { netisr |= 1 << (anisr); legacy_setsoftnet(); }
|
|
|
|
typedef void netisr_t __P((void));
|
|
|
|
int register_netisr __P((int, netisr_t *));
|
|
int unregister_netisr __P((int));
|
|
|
|
#endif
|
|
#endif
|
|
|
|
#endif
|