|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * Mach Operating System
27: * Copyright (c) 1987 Carnegie-Mellon University
28: * All rights reserved. The CMU software License Agreement specifies
29: * the terms and conditions for use and redistribution.
30: */
31:
32: /* HISTORY
33: * 18-May-90 Avadis Tevanian (avie) at NeXT
34: * Changed to use sensible priorities (higher numbers -> higher pri).
35: *
36: * 1-Feb-88 David Golub (dbg) at Carnegie-Mellon University
37: * Goofed... netisr thread must run at splnet, because the routines
38: * it calls expect to be called from the softnet interrupt (at
39: * splnet).
40: *
41: * 19-Nov-87 David Golub (dbg) at Carnegie-Mellon University
42: * Created.
43: *
44: */
45:
46: /*
47: * netisr.c
48: *
49: * Kernel thread for network code.
50: */
51:
52: #include <machine/spl.h>
53: #include <net/netisr.h>
54:
55: #include <kern/thread.h>
56: #include <kern/sched_prim.h>
57:
58: volatile int netisr;
59: int soft_net_wakeup;
60:
61: void netisr_thread_continue(void)
62: {
63: /*
64: * All routines this thread calls expect to be called
65: * at splnet.
66: */
67:
68: (void) splnet();
69:
70: while (netisr != 0) {
71: #ifdef NIMP
72: #if NIMP > 0
73: if (netisr & (1<<NETISR_IMP)){
74: netisr &= ~(1<<NETISR_IMP);
75: impintr();
76: }
77: #endif /* NIMP > 0 */
78: #endif /* NIMP */
79:
80: #if INET
81: if (netisr & (1<<NETISR_IP)){
82: void ipintr(void);
83:
84: netisr &= ~(1<<NETISR_IP);
85: ipintr();
86: }
87: if (netisr & (1<<NETISR_ARP)) {
88: void arpintr(void);
89:
90: netisr &= ~(1<<NETISR_ARP);
91: arpintr();
92: }
93: #endif /* INET */
94:
95: #if defined(ppc)
96: if (netisr & (1<<NETISR_BLUE)){
97: void blue_notify(void);
98:
99: netisr &= ~(1<<NETISR_BLUE);
100: blue_notify();
101: }
102: #endif /* ppc */
103:
104: #if ISO
105: if (netisr & (1<<NETISR_ISO)) {
106: netisr &= ~(1<<NETISR_ISO);
107: isointr();
108: }
109: #endif /* ISO */
110:
111: #if CCITT
112: if (netisr & (1<<NETISR_CCITT)) {
113: netisr &= ~(1<<NETISR_CCITT);
114: ccittintr();
115: }
116: #endif CCITT
117:
118: #if NS
119: if (netisr & (1<<NETISR_NS)){
120: netisr &= ~(1<<NETISR_NS);
121: nsintr();
122: }
123: #endif NS
124:
1.1.1.2 ! root 125: #if NETAT
1.1 root 126: if (netisr & (1<<NETISR_APPLETALK)){
127: void atalkintr(void);
128:
129: netisr &= ~(1<<NETISR_APPLETALK);
130: atalkintr();
131: }
132: #endif NETAT
133: }
134:
135: assert_wait(&soft_net_wakeup, FALSE);
136: thread_block_with_continuation(netisr_thread_continue);
137: /* NOTREACHED */
138: }
139:
140: void netisr_thread(void)
141: {
142: register thread_t self = current_thread();
143: extern void stack_privilege(thread_t thread);
144: extern void thread_bind(thread_t, processor_t);
145:
146: /*
147: * Make sure that this thread
148: * always has a kernel stack, and
149: * bind it to the master cpu.
150: */
151: stack_privilege(self);
152: thread_bind(self, master_processor);
153: thread_block_with_continuation(netisr_thread_continue);
154: /* NOTREACHED */
155: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.