/* endLib.h - definitions for Enhanced Network Drivers */ /* Copyright 1984-2004 Wind River Systems, Inc. */ /* modification history -------------------- 01y,25jun04,rcs added END_NET_POOL_INIT & END_NET_POOL_CREATE 01x,14jun04,vvv fixed endM2 stuff (SPR #98070) 01w,22apr04,rae endM2Packet does not belong here 01v,16apr04,rae Add endM2Init() etc. 01u,25feb04,vvv fixed memory leak (SPR #92692) 01t,25nov03,wap Merge in changes from Snowflake 01s,29sep03,rp merged from base6_networking_itn2-int 01r,22jan03,rcs Added MBLK_SIZE and CLBLK_SIZE 01q,13jan03,rae Merged from velocecp branch (SPR 83033) 01p,17may02,rcs add for MIB-II interface callbacks. SPR# 77478 01o,08nov01,wap Add missing prototype for txRcvRtnCall() 01n,10oct01,rae update copyright 01m,27jun01,rcs Merge Tor2.0.2 to Tornado-Comp-Drv 01l,23oct00,rae fixed SPR #33687 by removing semicolon from END_OBJ_READY 01k,16oct00,spm merged version 01k from tor3_0_x branch (base version 01j): adds link-level broadcast support 01j,29apr99,pul Upgraded NPT phase3 code to tor2.0.0 01i,18mar99,sj fixed typo in TK_RCV_RTN_CALL 01h,08dec97,gnn END code review fixes. 01g,17oct97,vin changed prototypes. 01f,25sep97,gnn SENS beta feedback fixes 01e,19aug97,gnn changes due to new buffering scheme. 01d,12aug97,gnn changes necessitated by MUX/END update. 01c,07apr97,map Added more prototypes and END_OBJ_UNLOAD. 01b,03feb97,gnn Added speed as an argument to MIB stuff. 01a,26dec96,gnn written. */ /* DESCRIPTION This include file contains definitions used by the Enhanced Network Driver library (endLib.c) and by all of the ENDs. If the macro END_MACROS is set during compilation then all of the functions in the library will included as macros instead of functions, otherwise all of the routines will be functions. This is a time/space tradeoff that can be made at compile time. INCLUDE FILES: */ #ifndef __INCendLibh #define __INCendLibh #ifdef __cplusplus extern "C" { #endif /* includes */ #include "wrn/netVersion.h" #include "end.h" #include "muxLib.h" /* defines */ #define MBLK_SIZE 64 #define CLBLK_SIZE 64 #define END_NET_POOL_CREATE 0 #define END_NET_POOL_INIT 1 #define MIB2_IN_ERRS 0 #define MIB2_IN_UCAST 1 #define MIB2_OUT_ERRS 2 #define MIB2_OUT_UCAST 3 #define MIB_ALLOC(m2Id, ifType, enetAddr, addrLen, mtu, speed, name, unit) \ if ((pMibRtn != NULL) && (pMibRtn->mibAlloc != NULL)) \ ((* (pMibRtn->mibAlloc)) (m2Id, ifType, (UINT8 *)enetAddr, addrLen, mtu, \ speed, name, unit)) #define MIB_FREE(m2Id) \ if ((pMibRtn != NULL) && (pMibRtn->mibFree != NULL)) \ ((* (pMibRtn->mibFree)) (m2Id)) #define MIB_CNT_UPDATE(m2Id, cntName, pktData, pktLen) \ if ((pMibRtn != NULL) && (pMibRtn->mibCntUpdate != NULL)) \ ((* (pMibRtn->mibCntUpdate)) (m2Id, cntName, pktLen, pktData)) #define MIB_VAR_UPDATE(m2Id, varName, data) \ if ((pMibRtn != NULL) && (pMibRtn->mibVarUpdate != NULL)) \ ((* (pMibRtn->mibVarUpdate)) (m2Id, varName, (caddr_t)data)) #ifdef END_MACROS #define END_RCV_RTN_CALL(pEnd,pMblk) \ { \ if ((pEnd)->receiveRtn) \ { \ (pEnd)->receiveRtn ((pEnd), pMblk,NULL,NULL,NULL,NULL); \ } \ else \ netMblkClChainFree (pMblk); \ } #define TK_RCV_RTN_CALL(pEnd,pMblk, netSvcOffset, netSvcType, \ uniPromiscuous, pSpareData) \ { \ if ((pEnd)->receiveRtn) \ { \ (pEnd)->receiveRtn ((pEnd), pMblk, netSvcOffset, netSvcType, \ uniPromiscuous, pSpareData); \ } \ else \ netMblkClChainFree (pMblk); \ } #define END_TX_SEM_TAKE(pEnd,tmout) \ (semTake ((pEnd)->txSem,tmout)) #define END_TX_SEM_GIVE(pEnd) \ (semGive ((pEnd)->txSem)) #define END_FLAGS_CLR(pEnd,clrBits) \ ((pEnd)->flags &= ~(clrBits)) #define END_FLAGS_SET(pEnd,setBits) \ ((pEnd)->flags |= (setBits)) #define END_FLAGS_GET(pEnd) \ ((pEnd)->flags) #define END_MULTI_LST_CNT(pEnd) \ (lstCount (&(pEnd)->multiList)) #define END_MULTI_LST_FIRST(pEnd) \ (ETHER_MULTI *)(lstFirst (&(pEnd)->multiList)) #define END_MULTI_LST_NEXT(pCurrent) \ (ETHER_MULTI *)(lstNext (&pCurrent->node)) #define END_DEV_NAME(end) \ (end.devObject.name) #define END_OBJECT_UNLOAD(pEnd) \ (endObjectUnload (pEnd)) #define END_OBJ_INIT(pEnd,pDev,name,unit,pFuncs, pDesc) \ endObjInit ((pEnd),pDev,name,unit,pFuncs, pDesc) #define END_OBJ_READY(pEnd, flags) \ endObjFlagSet ((pEnd),flags) #define END_ERR_ADD(pEnd,code,value) \ (mib2ErrorAdd(&(pEnd)->mib2Tbl, code, value)) #define END_MIB_INIT(pEnd,type,addr,addrLen,mtu,speed) \ (mib2Init(&(pEnd)->mib2Tbl, type,addr, addrLen, mtu, speed)) #else #define END_RCV_RTN_CALL(pEnd,pData) \ endRcvRtnCall((pEnd), pData) #define TK_RCV_RTN_CALL(pEnd,pData, netSvcOffset, netSvcType, \ uniPromiscuous, pSpareData) \ tkRcvRtnCall((pEnd), pData, netSvcOffset, netSvcType, \ uniPromiscuous, pSpareData) #define END_TX_SEM_TAKE(pEnd,tmout) \ endTxSemTake((pEnd), tmout) #define END_TX_SEM_GIVE(pEnd) \ endTxSemGive(pEnd) #define END_FLAGS_CLR(pEnd,clrBits) \ endFlagsClr((pEnd), clrBits) #define END_FLAGS_SET(pEnd,setBits) \ endFlagsSet((pEnd), setBits) #define END_FLAGS_GET(pEnd) \ (endFlagsGet((pEnd))) #define END_MULTI_LST_CNT(pEnd) \ (endMultiLstCnt((pEnd))) #define END_MULTI_LST_FIRST(pEnd) \ (endMultiLstFirst((pEnd))) #define END_MULTI_LST_NEXT(pCurrent) \ (endMultiLstNext((pCurrent))) #define END_DEV_NAME(pEnd) \ (endDevName((pEnd))) #define END_OBJECT_UNLOAD(pEnd) \ endObjectUnload((pEnd)) #define END_OBJ_UNLOAD(X) END_OBJECT_UNLOAD(X) #define END_OBJ_INIT(pEnd,pDev,name,unit,pFuncs, pDescription) \ endObjInit ((pEnd),pDev,name,unit,pFuncs, pDescription) #define END_OBJ_READY(pEnd, flags) \ endObjFlagSet ((pEnd),flags) #define END_ERR_ADD(pEnd,code,value) \ (mib2ErrorAdd(&(pEnd)->mib2Tbl, code, value)) #define END_MIB_INIT(pEnd,type,addr,len,mtu,speed) \ (mib2Init(&(pEnd)->mib2Tbl, type, addr, len, mtu, speed)) #endif /* END_MACROS */ /* typedefs */ typedef struct mib_routines { FUNCPTR mibAlloc; FUNCPTR mibFree; FUNCPTR mibCntUpdate; FUNCPTR mibVarUpdate; } MIB_ROUTINES; /* globals */ IMPORT MIB_ROUTINES * pMibRtn; IMPORT FUNCPTR endM2Packet; /* locals */ /* forward declarations */ STATUS endMibIfInit (FUNCPTR pMibAllocRtn, FUNCPTR pMibFreeRtn, FUNCPTR pMibCtrUpdate, FUNCPTR pMibVarUpdate); STATUS endObjInit (END_OBJ* pEndObj, DEV_OBJ* pDevice, char* pBaseName ,int unit, NET_FUNCS* pFuncTable, char* pDescription); STATUS endObjFlagSet (END_OBJ*,UINT); STATUS mib2Init (M2_INTERFACETBL*,long,UCHAR*,int, int, int); STATUS mib2ErrorAdd (M2_INTERFACETBL*, int, int); void endTxSemTake (END_OBJ*, int); void endTxSemGive (END_OBJ*); void endRcvRtnCall (END_OBJ*, M_BLK_ID); void tkRcvRtnCall (END_OBJ *, M_BLK_ID, long, long, BOOL, void *); void endObjectUnload (END_OBJ*); void endFlagsSet (END_OBJ *, int); void endFlagsClr (END_OBJ *, int); int endFlagsGet (END_OBJ *); ETHER_MULTI* endMultiLstFirst (END_OBJ *); ETHER_MULTI* endMultiLstNext (ETHER_MULTI *); M_BLK_ID endEtherAddressForm (M_BLK_ID pNBuff, M_BLK_ID pSrcAddr, M_BLK_ID pDstAddr, BOOL bcastFlag); M_BLK_ID end8023AddressForm (M_BLK_ID pNBuff, M_BLK_ID pSrcAddr, M_BLK_ID pDstAddr, BOOL bcastFlag); STATUS endEtherPacketDataGet (M_BLK_ID pMblk, LL_HDR_INFO * pLinkHdrInfo); STATUS endEtherPacketAddrGet (M_BLK_ID pMblk, M_BLK_ID pSrc, M_BLK_ID pDst, M_BLK_ID pESrc, M_BLK_ID pEDst); STATUS endEtherResolve (void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6); STATUS endPollStatsInit (void *, FUNCPTR); STATUS endM2Init (END_OBJ *, long, UCHAR *, int, int, int, UINT); STATUS endM2Free (END_OBJ *); STATUS endM2Ioctl (END_OBJ *, UINT32, caddr_t); #ifdef __cplusplus } #endif #endif /* __INCendLibh */