gonzui


Format: Advanced Search

t2ex/t2ex_source/driver/tef_em1d/netdrv/src/inthdr.cbare sourcepermlink (0.01 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    T2EX Software Package
    4:  *
    5:  *    Copyright 2012 by Ken Sakamura.
    6:  *    This software is distributed under the latest version of T-License 2.x.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by T-Engine Forum(http://www.t-engine.org/) at 2012/12/12.
   10:  *    Modified by TRON Forum(http://www.tron.org/) at 2015/06/04.
   11:  *
   12:  *----------------------------------------------------------------------
   13:  */
   14: /*
   15:  * This software package is available for use, modification, 
   16:  * and redistribution in accordance with the terms of the attached 
   17:  * T-License 2.x.
   18:  * If you want to redistribute the source code, you need to attach 
   19:  * the T-License 2.x document.
   20:  * There's no obligation to publish the content, and no obligation 
   21:  * to disclose it to the TRON Forum if you have modified the 
   22:  * software package.
   23:  * You can also distribute the modified source code. In this case, 
   24:  * please register the modification to T-Kernel traceability service.
   25:  * People can know the history of modifications by the service, 
   26:  * and can be sure that the version you have inherited some 
   27:  * modification of a particular version or not.
   28:  *
   29:  *    http://trace.tron.org/tk/?lang=en
   30:  *    http://trace.tron.org/tk/?lang=ja
   31:  *
   32:  * As per the provisions of the T-License 2.x, TRON Forum ensures that 
   33:  * the portion of the software that is copyrighted by Ken Sakamura or 
   34:  * the TRON Forum does not infringe the copyrights of a third party.
   35:  * However, it does not make any warranty other than this.
   36:  * DISCLAIMER: TRON Forum and Ken Sakamura shall not be held
   37:  * responsible for any consequences or damages caused directly or
   38:  * indirectly by the use of this software package.
   39:  *
   40:  * The source codes in bsd_source.tar.gz in this software package are 
   41:  * derived from NetBSD or OpenBSD and not covered under T-License 2.x.
   42:  * They need to be changed or redistributed according to the 
   43:  * representation of each source header.
   44:  */
   45: 
   46: /*
   47:  *      @(#)inthdr.c
   48:  *
   49:  */
   50: 
   51: #include        "netdrv.h"
   52: 
   53: #define NIC_INTVEC      IV_GPIO(41)
   54: #define EXBIntMode(x)   SetIntMode(x, IM_ENA | IM_LEVEL | IM_LOW | IM_ASYN)
   55: #define EXBIntEna(x)    EnableInt(x)
   56: #define EXBIntDis(x)    DisableInt(x)
   57: #define EXBIntClr(x)    /* */
   58: #define EXBIntEnd(x)    /* */
   59: 
   60: /*
   61:  *      Network adapter table for fixed vector interrupt
   62:  */
   63: LOCAL   NetInf    *irqinf[MAX_NETDEV] = {NULL};
   64: 
   65: /*
   66:  *      Interrupt handler (fixed vector interrupt)
   67:  */
   68: LOCAL   void      FixIntHdr(INTVEC vec)
   69: {
   70:         INT    i;
   71:         NetInf *inf;
   72: 
   73:         for (i = 0; i < MAX_NETDEV; i++) {
   74:                 inf = irqinf[i];
   75:                 if (inf != NULL && inf->di.intno == vec &&
   76:                                 inf->di.stat >= E_OK ) {  /* Target */
   77:                         (*(inf->inthdr))(inf);       /* Execute interrupt handler */
   78:                         break;
   79:                 }
   80:         }
   81:         /* IRC interrupt finish processing */
   82:         EXBIntClr(vec);
   83:         EXBIntEnd(vec);
   84: }
   85: 
   86: /*
   87:  *      Define interrupt handler
   88:  */
   89: EXPORT  ER       DefIntHdr(NetInf *inf, BOOL regist)
   90: {
   91:         ER     er;
   92:         T_DINT dint;
   93:         W      vec;
   94: 
   95:         dint.intatr = TA_HLNG;
   96: 
   97:         /* Fixed vector hardware */
   98:         if ((vec = inf->di.intno) <= 0) {
   99:                 inf->di.intno = vec = NIC_INTVEC;
  100:         }
  101:         irqinf[inf->netno] = (regist) ? inf : NULL;
  102:         dint.inthdr = (VP)FixIntHdr;
  103:         er = tk_def_int(vec, (regist) ? &dint : NULL);
  104: 
  105:         if (er >= E_OK && regist) {
  106:                 EXBIntMode(vec);
  107:                 EXBIntEna(vec);
  108:         } else {
  109:                 EXBIntDis(vec);
  110:         }
  111: 
  112:         return er;
  113: }
  114: