📄 geiifdrvlib.h
字号:
/* IFDrvLib.h - if card Library header.*//* Copyright 1990-2003 Wind River Systems, Inc. *//*modification history--------------------01a,18jan06,weng create ifLib header file.*/#ifndef __INCifDrvLibh#define __INCifDrvLibh/* includes */#ifdef __cplusplusextern "C" {#endif#include <semLib.h>/* defines */#define MAXIFPHYADDRLEN 16 /* PHY address length */#define MAXIFNAMELEN 16 /* if dirver's name length */#define IF_DRV_DEV_NUM_MAX 32/* if driver's status. */#define IF_DRV_LOADED 0x01 /* driver is up */#define IF_DRV_RUNNING 0x02 /* driver is running */#define DEV_ALL 0xFF /* action to all device in a if card *//* if driver's packet process call back routine */typedef void (*PKT_PROC_FUN )(void* , char*, void*, int);/* if driver's TX sem take and give */#define IF_DRV_TX_SEM_TAKE(pDrvObj,tmout) \ (semTake ((pDrvObj)->txSem,tmout))#define IF_DRV_TX_SEM_GIVE(pDrvObj) \ (semGive ((pDrvObj)->txSem))#define IF_DRV_HADDR(drvObj) \ (&(drvObj.ifPhysAddress.phyAddress[0]))#define IF_DRV_HADDR_LEN(drvObj) \ (drvObj.ifPhysAddress.addrLength)/* multicast address library errorno defines */#define ENETMULTIRESET 0 /*reset multi address */#define ENETMULTIINVAL 1 /*invalid multi address */#define ENETMULTIEXIST 2 /*have exist this multi address */#define ENETMULTINOBUF 3 /*no memory for this multi address */#define ENETMULTIXIO 4 /*not exist this multi address *//* if driver library ioctrl options *//* MAC address structure */typedef struct tagIfPhyAddres{ long addrLength; unsigned char phyAddress [MAXIFPHYADDRLEN];} IF_PHY_ADDR;/* multicast address structure */typedef struct multi_addr{ struct multi_addr * pNext; unsigned char addr[6]; unsigned char reserved[2]; /* for byte align */}MULTI_ADDR;typedef struct{ int len; /* Length of table in bytes. */ char *pTable; /* Pointer to entries. */} MULTI_ADDR_TABLE;/* interface card device driver strutrue base class. */typedef struct drv_obj{ int slot; /* interface cards slot number */ char name[MAXIFNAMELEN]; /* if name */ int flag; /* if status */ SEM_ID txSem; /* if Transmitter semaphore. */ IF_PHY_ADDR ifPhysAddress; /* if mac addres */ MULTI_ADDR * ifMultiAddPtr; /* if mulitcast addres */ int nMulti; /* multicast address number */ LIST multiList; /* Head of the multicast address list */ PKT_PROC_FUN pktProcessCallBack;/* FWD's packet call back process function */ struct if_funcs *pFuncTable; /* if function table */ void * net; /* net ??? */} DRV_OBJ;/* if dirver's interface function */typedef struct if_funcs{ STATUS (*start) (DRV_OBJ *); /* driver's start function */ STATUS (*stop) (DRV_OBJ *); /* driver's stop function */ STATUS (*unload) (DRV_OBJ *); /* driver's unload function */ int (*ioctl) (DRV_OBJ * , int cmd, UINT8 *pData); /* ioctl */ int (*capacity) (DRV_OBJ *); /* driver capacity */ STATUS (*send) (DRV_OBJ *, char *pBuf, int len, char *pOrig); /* data send */ STATUS (*mCastAddrAdd) (DRV_OBJ *, char *); /* multicase address add */ STATUS (*mCastAddrDel) (DRV_OBJ *, char *); /* multicase address del */ STATUS (*mCastAddrGet) (DRV_OBJ *, MULTI_ADDR_TABLE *); /* multicase address get */} IF_FUNCS;/* if card structure */typedef struct if_object{ struct if_object *pNext; /* double list node */ struct if_object *pPrev; int slot; /* slot number */ int drvObjNum; /* if DRV_OBJ num in the pDevListH list */ char objName[MAXIFNAMELEN]; /* obj name */ DRV_OBJ *devIndex[IF_DRV_DEV_NUM_MAX]; /* DRV_OBJ 's search index */ DRV_OBJ *pDevListH; /* driver list header*/ DRV_OBJ *pDevListT; /* driver list tail*/} IF_OBJ;/* if driver's identification routine type */typedef BOOL (*IF_IDENTIFY_FUNPTR )(int);/* if driver's load routine type */typedef DRV_OBJ *(*IF_LOAD_FUNPTR )(int,int);/* if driver register structure */typedef struct if_reg_entry{ char ifName[MAXIFNAMELEN]; /* if name */ IF_IDENTIFY_FUNPTR ifIdentify; /* if card identify function ptr */ IF_LOAD_FUNPTR ifLoad; /* if card load function ptr */ BOOL inuse; /* flag indicate used or not */} IF_REG_ENTRY;#if 0#define IDENT(i, slot) /* identify dirver */ \ ((ifDrvRegTbl[i].ifIdentify)(slot))#define LOAD(i, slot, dev) /* load dirver */ \ ((ifDrvRegTbl[i].ifLoad)(slot, dev))/* function declarations */extern STATUS IFDrvLibInit(int drvNumMax);extern STATUS IFDrvRegister(const char *name,IF_IDENTIFY_FUNPTR IDFunPtr, IF_LOAD_FUNPTR loadFunPtr);extern IF_OBJ *IFObjFind(int slot);extern BOOL IFDrvExist(int slot, int dev);extern DRV_OBJ *IFDrvFind(int slot, int dev);extern STATUS IFDrvNum(int slot, int *pDevNum);extern STATUS IFDrvLoad(int slot, int dev);extern STATUS IFDrvLoadAll(int slot);extern STATUS IFDrvStart(int slot, int dev);extern STATUS IFDrvStartAll(int slot);extern STATUS IFDrvStop(int slot, int dev);extern STATUS IFDrvStopAll(int slot);extern STATUS IFDrvCapacity(int slot, int dev, int *cap);extern STATUS IFDrvUnload(int slot, int dev);extern STATUS IFDrvUnloadAll(int slot);extern STATUS IFDrvIoctl(int slot, int dev, int cmd, UINT8 *pData);extern STATUS IFDrvIoctlAll(int slot, int cmd, UINT8 *pData);extern STATUS IFDrvSend(int slot, int dev, char *pBuf, int len, char *pOrig);extern STATUS IFDrvSendAll(int slot, char *pBuf, int len, char *pOrig);extern void __drvObjListAdd(DRV_OBJ **ppHead, DRV_OBJ **ppTail, DRV_OBJ *pNew);extern void __drvObjDel(DRV_OBJ **ppHead, DRV_OBJ **ppTail, const DRV_OBJ *pDel);extern int IFEnetMultiAdd(DRV_OBJ * pDrvObj, char* pAddress);extern int IFEnetMultiDel(DRV_OBJ * pDrvObj, char* pAddress);extern int IFEnetMultiGet(DRV_OBJ * pDrvObj, MULTI_ADDR_TABLE* pTable);extern int IFEnetMultiShow(DRV_OBJ * pDrvObj);#endif#ifdef __cplusplus}#endif#endif /* __INCifDrvLibh */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -