260 lines
8.7 KiB
C
260 lines
8.7 KiB
C
/* muxLibP.h - private definitions for the MUX library */
|
|
|
|
/* Copyright 1998-2001, 2003, 2005, 2007-2008, 2010 Wind River Systems, Inc. */
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
02n,29may12,xhs Fix memory leak, defect WIND00340041
|
|
02m,10nov10,dlk Move extern "C" after last header file include. WIND00240828.
|
|
02l,28mar08,dlk Moved BIND_STYLE_* macros to muxLib.h for muxProtoInfoGet().
|
|
02k,22mar08,dlk MUX2 redesign. 1st checkin.
|
|
02j,12oct07,dlk Made muxEndRxJobQueue() public.
|
|
02i,25aug05,dlk Add section tags.
|
|
02h,27jul05,dlk Added muxEndRxJobQueue(). May be temporary.
|
|
02g,21nov03,wap Merge in changes from Snowflake
|
|
02f,20nov03,niq Remove copyright_wrs.h file inclusion
|
|
02e,04nov03,rlm Ran batch header path update for header re-org.
|
|
02d,03nov03,rlm Removed wrn/coreip/ prefix from #includes for header re-org.
|
|
02c,01jul03,ann removed obsoleted code
|
|
02b,10sep01,ann correcting the directory paths
|
|
02a,15may01,ann major changes as per the MUX design doc for clarinet
|
|
- obsoleted the BIB and all its associated routines.
|
|
01r,25feb01,rae RFC2233 changes
|
|
01q,19apr00,ham merged TOR2_0-NPT-FCS (01a,06oct98,sj-01p,05oct99,pul).
|
|
01p,05oct99,pul removing rtRequest and mCastMap
|
|
01o,29apr99,pul Upgraded NPT phase3 code to tor2.0.0
|
|
01n,24mar99,sj changed tkFlag field in muxBindEntry to flags; added defines
|
|
01m,24mar99,sj added defines for flags field of NET_PROTOCOL structure
|
|
01l,18mar99,sj cleaned up: completed the cleanup postponed in 01j,05mar99,sj
|
|
01k,08mar99,sj added place holder for stackrcv routine in BIB entry
|
|
01j,05mar99,sj eliminated hooks; not cleanly though. next version will do that
|
|
01i,24feb99,sj added netSvcType and netDrvType fields to the BIB entry
|
|
01h,26jan99,sj moved BIB entry definition from muxTkLib.c to here
|
|
01g,05nov98,sj PCOOKIE_TO_ENDOBJ must check if pCookie is NULL
|
|
01f,03nov98,pul modified IPPROTO_MCAST_MAP_GET
|
|
01e,03nov98,sj doc update
|
|
01d,20oct98,pul don't return ERROR if hook is not valid
|
|
01c,15oct98,pul added ipProto Hooks
|
|
01b,12oct98,sj changed MUX_TK_ADDR_RES_FUNC_UPDATE, added WRS_*_MODULE
|
|
01a,06oct98,sj written.
|
|
|
|
*/
|
|
|
|
/*
|
|
DESCRIPTION
|
|
This file includes macros used by muxLib to avail features of the NPT
|
|
architecture if it is installed.
|
|
|
|
|
|
INCLUDE FILES:
|
|
*/
|
|
|
|
#ifndef __INCmuxLibPh
|
|
#define __INCmuxLibPh
|
|
|
|
#include <vxWorks.h>
|
|
#include <muxLib.h>
|
|
|
|
#ifndef MUX_NDEBUG
|
|
#include <assert.h>
|
|
|
|
#define MUX_ASSERT(x) \
|
|
do { \
|
|
if (!(x)) \
|
|
__assert("Assertion failed: "#x", file " \
|
|
__FILE__ ", line "_ASSERT_STR(__LINE__)"\n"); \
|
|
} while ((0))
|
|
#else
|
|
#define MUX_ASSERT(x) do {} while ((0))
|
|
#endif /* MUX_NDEBUG */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct _MUX_END_STYLE_INFO
|
|
{
|
|
void * sendWrappers [NUM_BIND_STYLES];
|
|
void * pollSendWrappers [NUM_BIND_STYLES];
|
|
void * pollReceiveWrappers [NUM_BIND_STYLES];
|
|
void * rxRtn;
|
|
} MUX_END_STYLE_INFO;
|
|
|
|
extern MUX_END_STYLE_INFO muxEndStyles [NUM_END_STYLES];
|
|
|
|
|
|
typedef struct _MUX_BIND_STYLE_INFO
|
|
{
|
|
void * sendFilter [NUM_END_STYLES];
|
|
void * rxWrappers [NUM_END_STYLES];
|
|
void * snarfWrappers [NUM_END_STYLES];
|
|
} MUX_BIND_STYLE_INFO;
|
|
|
|
extern MUX_BIND_STYLE_INFO muxBindStyles [NUM_BIND_STYLES];
|
|
|
|
/*
|
|
* This structure is a row in our run time END table.
|
|
* Each row contains all the units started on a particular named device.
|
|
* I.e. all devices that are Lance 7990 Ethernet will be in the list
|
|
* off of the row with the name "ln".
|
|
*/
|
|
|
|
typedef struct end_tbl_row
|
|
{
|
|
NODE node; /* Needed by our list processing library. */
|
|
char name[END_NAME_MAX]; /* Name of the devices in row. (ln, etc.) */
|
|
LIST units; /* List of devices, i.e. 0, 1, etc.. */
|
|
} END_TBL_ROW;
|
|
|
|
/* MUX-private bit flags for the muxFlags member in a DEV_OBJ: */
|
|
|
|
#define MUX_END_FLAG_LOADING 0x00000001
|
|
#define MUX_END_FLAG_UNLOADING 0x00000002
|
|
|
|
/* we steal these defines from a END driver */
|
|
|
|
#define END_IOCTL(pEnd) \
|
|
(pEnd->pFuncTable->ioctl)
|
|
|
|
#define END_ALT_HADDR(pEnd) \
|
|
((pEnd)->pMib2Tbl->m2Data.mibIfTbl.ifPhysAddress.phyAddress)
|
|
#define END_ALT_HADDR_LEN(pEnd) \
|
|
((pEnd)->pMib2Tbl->m2Data.mibIfTbl.ifPhysAddress.addrLength)
|
|
|
|
|
|
#define END_HADDR(pEnd) \
|
|
((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)
|
|
|
|
#define END_HADDR_LEN(pEnd) \
|
|
((pEnd)->mib2Tbl.ifPhysAddress.addrLength)
|
|
|
|
#define END_MIB2_TYPE(pEnd) \
|
|
((pEnd)->mib2Tbl.ifType)
|
|
|
|
typedef struct proto_entry PROTO_ENTRY; /* forward declaration typedef */
|
|
|
|
struct Ipcom_pkt_struct;
|
|
|
|
typedef int (*MUX_END_JOBQ_DO_FUNC) (END_OBJ * pEnd, void * arg);
|
|
|
|
typedef BOOL (* MUXBIND_PROTO_RX_RTN) (PROTO_COOKIE cookie, long type,
|
|
M_BLK_ID pMblk,
|
|
LL_HDR_INFO * pLinkHdrInfo,
|
|
void * callbackArg);
|
|
typedef BOOL (* MUXTKBIND_PROTO_RX_RTN) (void * callbackArg, long type,
|
|
M_BLK_ID pMblk, void * pSpareData);
|
|
typedef BOOL (* MUX2BIND_PROTO_RX_RTN) (void * callbackArg,
|
|
struct Ipcom_pkt_struct * pkt);
|
|
|
|
/*
|
|
* The PROTOCOL_BINDING structure represents the binding of a protocol to
|
|
* an END or NPT device. Additional or duplicate information, particularly
|
|
* that needed for receive, is stored in the PROTO_ENTRY structure in the
|
|
* interface's protocol table. The PROTO_ENTRY structure in turn contains
|
|
* a pointer back to this structure.
|
|
*/
|
|
typedef struct protocol_binding
|
|
{
|
|
END_OBJ * pEnd; /* Interface to which protocol is bound */
|
|
PROTO_ENTRY * pEntry; /* information needed by receive */
|
|
UINT16 netSvcType; /* Network service type */
|
|
UINT8 flags;
|
|
UINT8 bindStyle; /* BIND_STYLE_{MUXBIND|MUXTKBIND|MUX2} */
|
|
void * netCallbackId; /* Callback ID passed to muxBind */
|
|
BOOL (*stackRcvRtn) (); /* protocol's receive routine */
|
|
STATUS (*stackTxRestartRtn) (); /* Callback for restarting blocked tx. */
|
|
STATUS (*stackShutdownRtn) (); /* The routine to call to shutdown */
|
|
/* the protocol stack. */
|
|
void (*stackErrorRtn) (); /* Callback for device errors/events */
|
|
long netIfType; /* Interface type */
|
|
END_OUTPUT_FILTER outFilter; /* Used for MUX_PROTO_OUTPUT protocols */
|
|
char name[END_PROTO_NAME_MAX]; /* String name for this protocol. */
|
|
} PROTOCOL_BINDING;
|
|
|
|
/*
|
|
* Each device has a table of PROTO_ENTRY structures corresponding to
|
|
* the protocols bound to it. This structure contains information needed
|
|
* for receive, as well as a pointer to the corresponding PROTOCOL_BINDING
|
|
* structure. The caching of information needed for receive in the small
|
|
* PROTO_ENTRY structure is done purely for performance reasons.
|
|
*
|
|
* The protocol receive routine stored in the PROTO_ENTRY is in certain
|
|
* cases a wrapper function around the actual protocol receive routine.
|
|
*/
|
|
|
|
struct proto_entry
|
|
{
|
|
UINT16 type;
|
|
UINT16 reserved;
|
|
|
|
union /* protocol receive routine */
|
|
{
|
|
void * generic;
|
|
MUXBIND_PROTO_RX_RTN endRcv;
|
|
MUXTKBIND_PROTO_RX_RTN nptRcv;
|
|
MUX2BIND_PROTO_RX_RTN end2Rcv;
|
|
} rr;
|
|
|
|
void * recvRtnArg;
|
|
|
|
PROTOCOL_BINDING * pBinding;
|
|
};
|
|
|
|
/* A little bit of backwards compatibility */
|
|
|
|
typedef PROTOCOL_BINDING * MUX_ID;
|
|
|
|
/*
|
|
* Convert from a void * cookie (which is a PROTOCOL_BINDING) to an
|
|
* END_OBJ pointer:
|
|
*/
|
|
|
|
#define PCOOKIE_TO_ENDOBJ(pCookie) ((pCookie) ? ((MUX_ID)pCookie)->pEnd : NULL)
|
|
|
|
/*
|
|
* Note, a device cookie returned by muxDevLoad(), passed to muxDevStart(),
|
|
* etc., is not the same as a binding cookie returned by muxBind().
|
|
* Presently, a device cookie is just a pointer to the END_OBJ.
|
|
*/
|
|
|
|
#define PDEVCOOKIE_TO_ENDOBJ(pCookie) ((END_OBJ *)(pCookie))
|
|
|
|
/*
|
|
* These macros are used by muxAddrRecFuncXXX functions
|
|
*/
|
|
#define TK_ADDR_RES_GET 1
|
|
#define TK_ADDR_RES_ADD 2
|
|
#define TK_ADDR_RES_DEL 3
|
|
|
|
/* global variables */ /* XXX dlk - needed? */
|
|
|
|
extern SEM_ID muxLock;
|
|
|
|
/* prototypes */
|
|
|
|
extern STATUS muxTkLibInit (void);
|
|
extern void * muxBindCommon (int bindStyle, char * pName, int unit,
|
|
BOOL (*stackRcvRtn) (),
|
|
STATUS (*stackShutdownRtn) (),
|
|
STATUS (*stackTxRestartRtn) (),
|
|
void (*stackErrorRtn) (), long type,
|
|
char * pProtoName, void * pNetCallbackId,
|
|
void * pNetSvcInfo, void * pNetDrvInfo);
|
|
|
|
extern long muxIfTypeGet (END_OBJ * pEnd);
|
|
extern int muxEndJobQDo (END_OBJ * pEnd, MUX_END_JOBQ_DO_FUNC func,
|
|
void * arg);
|
|
|
|
extern struct Ipcom_pkt_struct * muxMblkToIpcomPktTx (M_BLK * pMblk);
|
|
extern M_BLK * muxIpcomPktToMblkTx (struct Ipcom_pkt_struct * pkt);
|
|
extern void muxRestoreIpcomPktFromMblkTx(M_BLK * pMblk, struct Ipcom_pkt_struct *pkt);
|
|
extern void muxIpcomPktFreeMblk (void * buf, M_BLK * pMblk);
|
|
extern void vxmux_mux_mblk_init (void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __INCmuxLibPh */
|