t2ex/t2ex_source/driver/tef_em1d/netdrv/src/inthdr.c | bare source | permlink (0.03 seconds) |
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: