279 lines
8.4 KiB
C
279 lines
8.4 KiB
C
/* 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 */
|