home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / comm / amitcp-3.0ß2.lha / AmiTCP / src / amitcp / net / netisr.c < prev    next >
C/C++ Source or Header  |  1993-08-12  |  2KB  |  114 lines

  1. RCS_ID_C="$Id: netisr.c,v 1.8 1993/06/04 11:16:15 jraja Exp $";
  2. /*
  3.  * Copyright (c) 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>,
  4.  *                    Helsinki University of Technology, Finland.
  5.  *                    All rights reserved.
  6.  *
  7.  * netisr.c - Network protocol input queue scheduling
  8.  *
  9.  * Created      : Sat Feb 20 04:13:15 1993 ppessi
  10.  * Last modified: Fri Jun  4 00:38:31 1993 jraja
  11.  *
  12.  * HISTORY
  13.  * $Log: netisr.c,v $
  14.  * Revision 1.8  1993/06/04  11:16:15  jraja
  15.  * Fixes for first public release.
  16.  *
  17.  * Revision 1.7  1993/05/16  21:09:43  ppessi
  18.  * RCS version changed.
  19.  *
  20.  * Revision 1.6  1993/04/05  17:46:05  jraja
  21.  * Changed spl storage variables to spl_t.
  22.  * Changed every .c file to use conf.h.
  23.  *
  24.  * Revision 1.5  93/03/05  19:50:52  19:50:52  jraja (Jarno Tapio Rajahalme)
  25.  * Fixed includes (again).
  26.  * 
  27.  * Revision 1.4  93/03/05  03:12:29  03:12:29  ppessi (Pekka Pessi)
  28.  * Compiles with SASC. Initial test version
  29.  * 
  30.  * Revision 1.3  93/02/28  21:44:31  21:44:31  ppessi (Pekka Pessi)
  31.  *     Revised version, added non-signalling schednetisr_nosignal.
  32.  * 
  33.  */
  34.  
  35. #include <conf.h>
  36.  
  37. #include <sys/param.h>
  38. #include <kern/amiga_includes.h>    /* This is needed by sys/synch.h */
  39. #include <sys/synch.h>
  40.  
  41. #include <net/netisr.h>
  42.  
  43.  
  44. extern struct MsgPort *SanaPort;
  45.  
  46. ULONG netisr = 0L;
  47.  
  48. /*
  49.  * scnednetisr(): schedule net "interrupt" 
  50.  * This routine signals TCP/IP task to run net_poll via sana_poll
  51.  */
  52. void schednetisr(int isr)
  53. {
  54.   netisr |= 1<<isr;
  55.   Signal(SanaPort->mp_SigTask, 1<<SanaPort->mp_SigBit);
  56. }
  57.  
  58. void schednetisr_nosignal(int isr)
  59. {
  60.   netisr |= 1<<isr;
  61. }
  62.  
  63. /* 
  64.  * net_poll(): run scheduled network level protocols
  65.  *             this routine is called from sana_poll
  66.  */
  67. void 
  68.   net_poll(void)
  69. {
  70.   extern void ipintr(void);
  71.   extern void impintr(void);
  72.   extern void isointr(void);
  73.   extern void ccittintr(void);
  74.   extern void nsintr(void);
  75.  
  76.   spl_t s = splimp();
  77.   int n = netisr; 
  78.   netisr = 0;
  79.   splx(s);
  80.  
  81.   if (!n) return;
  82. #if    INET
  83.   if (n & (1<<NETISR_IP)) {
  84.     ipintr();
  85.   }
  86. #endif /* INET */
  87. #if    NIMP > 0
  88.   if (n & (1<<NETISR_IMP)) {
  89.     impintr();
  90.   }
  91. #endif /* NIMP > 0 */
  92. #if    ISO
  93.   if (n & (1<<NETISR_ISO)) {
  94.     isointr();
  95.   }
  96. #endif /* ISO */
  97. #if    CCITT
  98.   if (n & (1<<NETISR_CCITT)) {
  99.     ccittintr();
  100.   }
  101. #endif /* CCITT */
  102. #if    NS
  103.   if (n & (1<<NETISR_NS)) {
  104.     nsintr();
  105.   }
  106. #endif /* NS */
  107. #if 0
  108.   /* raw input do not go through the isr */
  109.   if (n & (1<<NETISR_RAW)) {
  110.     rawintr();
  111.   }
  112. #endif
  113. }
  114.