ln97xend.h
来自「Tornado 2.0.2 source code!vxworks的源代码」· C头文件 代码 · 共 556 行 · 第 1/2 页
H
556 行
/* descriptor size */#define RMD_SIZ sizeof(LN_RMD)#define TMD_SIZ sizeof(LN_TMD)#define IB_SIZ sizeof(LN_IB)/* Configuration items */#define BUS_LATENCY_COUNT 0x1000 /* Max BUS timeo len in 0.1 uSeconds */#define LN_MIN_FBUF 100 /* Minsize of first buffer in chain */#define LN_BUFSIZ (ETHERMTU + SIZEOF_ETHERHEADER + 6)#define LN_SPEED 10000000#define LN_RMD_RLEN 5 /* ring size as a ^ 2 -- 32 RMD's */#define LN_TMD_TLEN 5 /* ring size as a ^ 2 -- 32 TMD's */#define LN_RMD_MIN 2 /* min descriptors 4 */#define LN_TMD_MIN 2 /* min descriptors 4 */#define LN_RMD_MAX 9 /* max descriptors 512 */#define LN_TMD_MAX 9 /* max descriptors 512 */#define LN_97X_DEV_NAME "lnPci" /* name of the device */#define LN_97X_DEV_NAME_LEN 6 /* length of the name string */#define LN_97X_APROM_SIZE 32 /* hardware address prom size *//* The definition of the driver control structure */typedef struct ln97xDevice { END_OBJ endObj; /* The class we inherit from */ LN_IB * ib; /* ptr to Initialization Block */ int unit; /* unit number of the device */ int rmdIndex; /* current RMD index */ int rringSize; /* RMD ring size */ int rringLen; /* RMD ring length (bytes) */ LN_RMD * pRring; /* RMD ring start */ int tmdIndex; /* current TMD index */ int tmdIndexC; /* current TMD index */ int tringSize; /* TMD ring size */ int tringLen; /* TMD ring length (bytes) */ LN_TMD * pTring; /* TMD ring start */ int ivec; /* interrupt vector */ int ilevel; /* interrupt level */ UINT32 * pRdp; /* device register CSR */ UINT32 * pRap; /* device register RAP */ UINT32 * pReset; /* device register Reset */ UINT32 * pBdp; /* device register BCR */ UINT32 devAdrs; /* device structure address */ UINT16 csr3B; /* csr3 value board specific */ UINT32 chipIdLo; /* csr88 ether chip ID value low */ UINT32 chipIdHi; /* csr89 ether chip ID value high */ char * pShMem; /* real ptr to shared memory */ char * memBase; /* LANCE memory pool base */ char * memAdrs; /* LANCE memory pool base */ int memSize; /* LANCE memory pool size */ int memWidth; /* width of data port */ int offset; /* offset of data in the buffer */ UINT32 flags; /* Our local flags */ UINT32 pciMemBase; /* memory base as seen from PCI*/ UINT8 enetAddr[6]; /* ethernet address */ CACHE_FUNCS cacheFuncs; /* cache function pointers */ BOOL txBlocked; /* transmit flow control */ BOOL txCleaning; /* transmit descriptor cleaning */ CL_POOL_ID pClPoolId; /* cluster pool Id */ M_CL_CONFIG mClCfg; /* mBlk & cluster config structure */ CL_DESC clDesc; /* cluster descriptor table */ END_ERR lastError; /* Last error passed to muxError */ BOOL errorHandling; /* task level error handling */ u_short errorStat; /* error status */ } LN_97X_DRV_CTRL;/* * Generic shared memory read and write macros. */#ifndef SHMEM_RD#define SHMEM_RD(x) *(x)#endif#ifndef SHMEM_WR#define SHMEM_WR(x,y) (*(x) = y)#endif#define LN_RMD_OWNED(rmd) (PCI_SWAP ((rmd)->lnRMD1) & RMD1_OWN)#define LN_PKT_LEN_GET(rmd) PCI_SWAP (rmd->rBufMskCnt) - 4;/* device macros to read/write descriptor, initialization blocks, etc. */#define LN_RMD_BUF_TO_ADDR(rmd, tmp, buf) \ tmp = (void *)LN_CACHE_VIRT_TO_PHYS ((UINT32)buf); \ tmp = (void *)MEM_TO_PCI_PHYS (tmp); \ rmd->rBufAddr = (UINT32)PCI_SWAP (tmp);#define LN_TMD_BUF_TO_ADDR(tmd, tmp, buf) \ tmp = (void *)LN_CACHE_VIRT_TO_PHYS ((UINT32)buf); \ tmp = (void *)MEM_TO_PCI_PHYS (tmp); \ DRV_LOG (DRV_DEBUG_LOAD, "tBufAddr = 0x%X\n", tmp, 2, 3, 4, 5, 6); \ tmd->tBufAddr = (ULONG)PCI_SWAP (tmp);#define LN_TMD_TO_ADDR(tmd, addr) \ { \ UINT32 pTemp = PCI_TO_MEM_PHYS (PCI_SWAP (tmd->tBufAddr)); \ addr = (char *)(LN_CACHE_PHYS_TO_VIRT(pTemp)); \ }#define LN_RMD_TO_ADDR(rmd, addr) \ { \ UINT32 pTemp = PCI_TO_MEM_PHYS (PCI_SWAP (rmd->rBufAddr)); \ addr = (char *)(LN_CACHE_PHYS_TO_VIRT(pTemp)); \ }#define LN_ADDR_TO_TMD(addr, tmd) \ { \ UINT32 pTemp = LN_CACHE_VIRT_TO_PHYS (buf);/* convert to phys addr */ \ pTemp = (void *)(MEM_TO_PCI_PHYS((UINT32)pTemp)); \ tmd->tBufAddr = PCI_SWAP (addr); \ }#define LN_ADDR_TO_RMD(addr, rmd) \ { \ UINT32 pTemp = LN_CACHE_VIRT_TO_PHYS (buf);/* convert to phys addr */ \ pTemp = (void *)(MEM_TO_PCI_PHYS((UINT32)pTemp)); \ rmd->rBufAddr = PCI_SWAP (addr); \ }#define LN_CLEAN_TXD(tmd) \ { \ UINT32 temp = TMD1_CNST | TMD1_ENP | TMD1_STP; \ tmd->tBufTmd2 = 0; \ tmd->tBufTmd1 = PCI_SWAP (temp); \ }#define LN_CLEAN_RXD(rmd) \ { \ UINT32 temp; \ rmd->rBufMskCnt = 0; \ temp = (RMD1_BCNT_MSK & -(LN_BUFSIZ)) | RMD1_OWN | RMD1_CNST | \ RMD1_STP | RMD1_ENP; \ rmd->rBufRmd1 = PCI_SWAP (temp); \ }/* Set address of receiver descriptor ring and size in init block */#define LN_ADDR_TO_IB_RMD(addr, ib, rsize) \ { \ /* convert to phys addr */ \ UINT32 pTemp = (UINT32)LN_CACHE_VIRT_TO_PHYS (addr); \ pTemp = (UINT32)MEM_TO_PCI_PHYS (pTemp); \ ib->lnIBRdra = PCI_SWAP (pTemp); \ pTemp = PCI_SWAP (ib->lnIBMode); \ pTemp |= IB_MODE_RLEN_MSK & (rsize << 20); \ ib->lnIBMode = PCI_SWAP (pTemp); \ DRV_LOG (DRV_DEBUG_LOAD, "IBmode = 0x%X Rdra = 0x%X\n", \ ib->lnIBMode, ib->lnIBRdra, 3, 4, 5, 6); \ } /* Set address of transmitter descriptor ring and size in init block */#define LN_ADDR_TO_IB_TMD(addr, ib, tsize) \ { \ /* convert to phys addr */ \ UINT32 pTemp = (UINT32)LN_CACHE_VIRT_TO_PHYS (addr); \ pTemp = (UINT32)MEM_TO_PCI_PHYS (pTemp); \ ib->lnIBTdra = PCI_SWAP (pTemp); \ pTemp = PCI_SWAP (ib->lnIBMode); \ pTemp |= IB_MODE_TLEN_MSK & (tsize << 28); \ ib->lnIBMode = PCI_SWAP (pTemp); \ DRV_LOG (DRV_DEBUG_LOAD, "IBmode = 0x%X Tdra = 0x%X\n", \ ib->lnIBMode, ib->lnIBTdra, 3, 4, 5, 6); \ }/* clear the logical address filter */ #define LN_ADDRF_CLEAR(pIb) (bzero(&(pIb)->lnIBLadrf[0], 8))/* set the logical address filter to accept a new multicast address */ #define LN_ADDRF_SET(pIb, crc) \ (((pIb)->lnIBLadrf[((crc) & 0x0000003f) >> 3]) |= (1 << ((crc) & 0x7)))#define LN_RMD_ERR(rmd) \ (PCI_SWAP(rmd->lnRMD1) & RMD1_ERR) || \ ((PCI_SWAP(rmd->lnRMD1) & (RMD1_STP | RMD1_ENP)) != (RMD1_STP | RMD1_ENP))#define LN_TMD_CLR_ERR(tmd) \ { \ UINT32 temp = PCI_SWAP(tmd->tBufTmd1); \ temp &= ~(TMD1_ERR | TMD1_BPE); \ tmd->tBufTmd2 = 0; \ tmd->tBufTmd1 = PCI_SWAP (temp); \ }/* board level/bus specific and architecture specific macros */ #if _BYTE_ORDER==_BIG_ENDIAN# define PCI_SWAP(x) LONGSWAP((int)(x))#else# define PCI_SWAP(x) (x)#endif#if (CPU_FAMILY==I80X86)#ifndef SYS_OUT_LONG #define SYS_OUT_LONG(pDrvCtrl,addr,value) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ *((ULONG *)(addr)) = (value); \ else \ sysOutLong((int)(addr), (value)); \ }#endif /* SYS_OUT_LONG */#ifndef SYS_IN_LONG #define SYS_IN_LONG(pDrvCtrl, addr, data) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ ((data) = *((ULONG *)(addr))); \ else \ ((data) = sysInLong((int) (addr))); \ }#endif /* SYS_IN_LONG */#ifndef SYS_OUT_SHORT#define SYS_OUT_SHORT(pDrvCtrl,addr,value) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ *((USHORT *)(addr)) = (value); \ else \ sysOutWord((int)(addr), (value)); \ }#endif /* SYS_OUT_SHORT */#ifndef SYS_IN_SHORT#define SYS_IN_SHORT(pDrvCtrl, addr, data) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ ((data) = *((USHORT *)(addr))); \ else \ ((data) = sysInWord((int) (addr))); \ }#endif /* SYS_IN_SHORT */#ifndef SYS_OUT_BYTE#define SYS_OUT_BYTE(pDrvCtrl,addr,value) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ *((UCHAR *)(addr)) = (value); \ else \ sysOutByte((int)(addr), (value)); \ }#endif /* SYS_OUT_BYTE */#ifndef SYS_IN_BYTE#define SYS_IN_BYTE(pDrvCtrl, addr, data) \ { \ if (pDrvCtrl->flags & LS_MODE_MEM_IO_MAP) \ ((data) = *((UCHAR *)(addr))); \ else \ ((data) = sysInByte((int) (addr))); \ }#endif /* SYS_IN_BYTE */#endif /* CPU_FAMILY == I80x86 */#if defined(__STDC__) || defined(__cplusplus)IMPORT END_OBJ * ln97xEndLoad (char * initString);IMPORT STATUS ln97xInitParse (LN_97X_DRV_CTRL * pDrvCtrl,char * initString);#elseIMPORT END_OBJ * ln97xEndLoad ();IMPORT STATUS ln97xInitParse ();#endif /* __STDC__ */#endif /* _ASMLANGUAGE */#ifdef __cplusplus}#endif#endif /* __INCln97xEndh */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?