亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ethernet.c

?? 4510b的vxworks的BSP
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* sndsEnd.c - SNDS END network interface driver for Ethernet */

/* Copyright 1984-1997 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01f,25nov99,knp, changed the name from "end" to "secEnd"
01e,12nov99,knp, Corrected handling EIOCSFLAGS, added IFF_MULTICAST flag
01d,06nov99,knp, updated multicast address support
01c,18oct99,knp added polled mode support
01b,27sep99,nb  added documentation
01a,20sep99,nts&knp  adapted from WRS template
*/

/*
DESCRIPTION

This module implements the Enhanced Ethernet driver for Samsung SNDS100 Ver 1.0
Evaluation Board for their KS32C50100 microcontroller.

KS32C50100 is an ARM based processor with several integrated peripherals.
It has an interrupt controller, two 32-bit timers, one Ethernet controller,
two HDLC controllers, one IIC controller, general purpose I/O ports, and a 
2-channel DMA controller.

The built-in Ethernet controller consists of 10/100 Ethernet MAC with MII
interface to an external PHY device and a Buffered DMA controller for
transferring data to and from the memory.  The SNDS100 board has a Level One
LXT970 Ethernet PHY device that supports both 10Base-T and 100Base-T
Ethernet.

All the internal registers of the Ethernet MAC and BDMA controller are
accessible as 32-bit integers at the internal system register addresses as
defined in the KS32C50100 Microcontroller User's Manual.  The register 
addresses are defined in sndsend.h include file.

The driver requires several target-specific values provided as an input 
string to the load routine.  These target-specific values and the external 
support routines are described below.

This network interface driver does not include support for trailer protocols
or data chaining.  However, buffer loaning has been implemented in an effort 
to boost performance.

This driver maintains cache coherency by setting the Address bit 26 (A26) of
descriptor and buffer addresses.  KS32C50100 accesses all memory locations
with A26 set in a non-cached mode.  However, A26 is not used for accessing
the memory.  See the KS32C50100 Microcontroller User's Manual for details.
Because of this feature, allocating buffer space using the cacheDmaMalloc()
routine is not required.

BOARD LAYOUT
This device is on-chip.  No jumpering diagram is necessary.

EXTERNAL INTERFACE
This driver provides the standard END external interface.  The only external
interface is the sndsEndLoad() routine.  The parameters are passed
into the sndsEndLoad() function as a single colon-delimited string.
The sndsEndLoad() function uses strtok() to parse the string, which it 
expects to be of the following format:

<unit>:<speed>:<duplex>:<autoneg>

TARGET-SPECIFIC PARAMETERS

.IP <unit>
A convenient holdover from the former model.  This parameter is used only
in the string name for the driver.  Value must be 0

.IP <speed>
Indicates the desired network speed.  Valid values are 10 and 100.  This
parameter is ignored if auto-negotiation is enabled.  See below.

.IP "<duplex>"
Indicates the desired duplex mode of operation.  A value 1 indicates full-
duplex and a value 0 indicated half duplex.  This parameter is ignored if
auto-negotiation is enabled.

.IP "<auto-neg>"
Indicates whether auto-negotiation has to be enabled or not.  A value of 1
indicates that auto-negotiation should be enabled.  A value of 0 indicates
that it should be disabled.  If auto-negotiation is enabled, the speed and
duplex values are ignored.

.LP

SYSTEM RESOURCE USAGE
When implemented, this driver requires the following system resources:

    - one mutual exclusion semaphore
    - four interrupt vectors

The driver allocates the memory to share with the Ethernet device unit.
It does so by calling the calloc() routine.  As a default, 64 transmit 
descriptors (size=16 bytes), 64 transmit buffers (size=END_BUFSIZ), and
64 receive descriptors (size=16 bytes) are allocated.  TX_FD_NUM and RX_FD_NUM
macros define the number of descriptors allocated.

As a default, 128 MBLK structures, 128 CLBLK structures and 128 clusters
(size=2048) are allocated in the net pool.  END_MBLK_NUM and END_CL_NUM 
macros define the number of structures allocated.

The macros SYS_INT_CONNECT, SYS_INT_DISCONNECT, and SYS_INT_ENABLE allow
the driver to be customized for BSPs that use special versions of these
routines.

The macro SYS_INT_CONNECT is used to connect the interrupt handler to
the appropriate vector.  By default it is the routine intConnect().

The macro SYS_INT_DISCONNECT is used to disconnect the interrupt handler prior
to unloading the module.  By default this is a dummy routine that
returns OK.

The macro SYS_INT_ENABLE is used to enable the interrupt level for the
end device.  It is called once during initialization.  By default this is
the routine intEnable().

The macro SYS_ENET_ADDR_GET is used to get the ethernet address (MAC)
for the device.  The single argument to this routine is the END_DEVICE
pointer.  By default this routine copies the ethernet address stored in
the global variable sndsEndEnetAddr defined in sndsend.h into the 
END_DEVICE structure.  The global variable has to be changed for changing
the MAC address of the Ethernet port.

SPECIAL CONSIDERATION

The MAC address of Ethernet port is hard-coded in the global array named
sndsEndEnetAddr defined in sndsEnd.h

The internal registers of MAC and BDMA controllers in the KS32C50100
microcontroller are accessible as 32-bit integers at pre-defined address
locations.  Hence separate macros are not provided for register accesses.
All through the driver code, these registers are accessed directly.

INCLUDES:
end.h endLib.h etherMultiLib.h sndsend.h

SEE ALSO: muxLib, endLib
.I "Writing and Enhanced Network Driver"
*/

/* includes */

#include "vxWorks.h"
#include "sndsEnd.h"			/* mod knp 7sep99"drv/end/sndsEnd.h"Common defines. */
#include "etherMultiLib.h"		/* multicast stuff. */
#include "end.h"			/* Common END structures. */
#include "endLib.h"
#include "lstLib.h"			/* Needed to maintain protocol list. */
#include "cacheLib.h"
#include "stdlib.h"
#include "stdio.h"
#include "intLib.h"
#include "iv.h"
#include "netLib.h"
#include "config.h"

/* defines */

/* Configuration items */
#define ENET_HDR_REAL_SIZ 	14
#define END_BUFSIZ      	(ETHERMTU + ENET_HDR_REAL_SIZ + 6)
#define END_SPEED        	10000000
#define	SNDS_CL_SIZE		2048
#define	RX_FD_NUM			64
#define	TX_FD_NUM			64

#define LS_POLLING          0x20

/*
 * Default macro definitions for BSP interface.
 * These macros can be redefined in a wrapper file, to generate
 * a new module with an optimized interface.
 */

/* Macro to connect interrupt handler to vector */

#ifndef SYS_INT_CONNECT
#   define SYS_INT_CONNECT(pDrvCtrl,rtn,arg,pResult) \
	{ \
	IMPORT STATUS sysIntConnect(); \
	*pResult = intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (pDrvCtrl->ivec), \
			     rtn, (int)arg); \
	}
#endif

/* Macro to disconnect interrupt handler from vector */

#ifndef SYS_INT_DISCONNECT
#   define SYS_INT_DISCONNECT(pDrvCtrl,rtn,arg,pResult) \
	{ \
	*pResult = OK; /* HELP: need a real routine */ \
	}
#endif

/* Macro to enable the appropriate interrupt level */

#ifndef SYS_INT_ENABLE
#define SYS_INT_ENABLE(pDrvCtrl) \
	{ \
	IMPORT void sysLanIntEnable(); \
	sysLanIntEnable (pDrvCtrl->ilevel); \
	}
#endif

/* Macro to get the ethernet address from the BSP */

#ifndef SYS_ENET_ADDR_GET
#   define SYS_ENET_ADDR_GET(pDevice) \
	{ \
	IMPORT unsigned char sndsEndEnetAddr[]; \
	bcopy ((char *)sndsEndEnetAddr, (char *)(&pDevice->enetAddr), 6); \
	}
#endif

/*
 * Macros to do a short (UINT16) access to the chip. Default
 * assumes a normal memory mapped device.
 */

#ifndef SNDS_OUT_SHORT
#   define SNDS_OUT_SHORT(pDrvCtrl,addr,value) \
	(*(USHORT *)addr = value)
#endif

#ifndef SNDS_IN_SHORT
#   define SNDS_IN_SHORT(pDrvCtrl,addr,pData) \
	(*pData = *addr)
#endif

#ifndef SNDS_OUT_LONG
#   define SNDS_OUT_LONG(pDrvCtrl,addr,value) \
	(*(UINT32 *)addr = value)
#endif

#ifndef SNDS_IN_LONG
#   define SNDS_IN_LONG(pDrvCtrl,addr,pData) \
	(*pData = *addr)
#endif

/*A shortcut for getting the hardware address from the MIB II stuff. */


#define END_HADDR(pEnd)	\
		((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)

#define END_HADDR_LEN(pEnd) \
		((pEnd)->mib2Tbl.ifPhysAddress.addrLength)

/* typedefs */

typedef struct free_args
    {
    void* arg1;
    void* arg2;
    } FREE_ARGS;

/* The definition of the driver control structure */

typedef struct end_device
    {
	END_OBJ    	end;			/* The class we inherit from. */
    int			unit;			/* unit number */
 	int			ivecBdmaTx;		/* bdmaTx interrupt vector */
	int			ivecBdmaRx;		/* bdmaRx interrupt vector */
	int			ivecMacTx;		/* macTx  interrupt vector */
	int			ivecMacRx;		/* macRx  interrupt vector */
    long		flags;			/* Our local flags. */
    UCHAR		enetAddr[6];	/* ethernet address */
	UCHAR		netSpeed;		/* 10 or 100 */
	UCHAR		duplexMode;		/* HDX = 0. FDX = 1 */
	UCHAR		autoNeg;		/* 1 = autoneg enabled */
	BOOL		fdInitialized;	/* Set to TRUE after FD allocation */
	ETHER_STATISTICS	statistics;	/* Ethernet statistics counters */
	UINT32	addrList[32];	/* Array for storing addresses Max = 21, i.e. 32 long words */
	UINT32	mcastAddrCount;	/* Number of valid multicast addresses */
    } END_DEVICE;

/* globals*/

/*
 * This will only work if there is only a single unit, for multiple
 * unit device drivers these should be integrated into the END_DEVICE
 * structure.
 */

M_CL_CONFIG endMclConfig = 	/* network mbuf configuration table */
    {
    /* 
    no. mBlks		no. clBlks		memArea		memSize
    -----------		----------		-------		-------
    */
    0, 				0, 				NULL, 		0 
    };

CL_DESC endClDescTbl [] = 	/* network cluster pool configuration table */
    {
    /* 
    clusterSize		num		memArea		memSize
    -----------		----	-------		-------
    */
    {SNDS_CL_SIZE,	0,		NULL,		0}
    };

int endClDescTblNumEnt = (NELEMENTS(endClDescTbl));

/* new additions */

RECEIVE_FRAME_DESC 		*gpReceiveFrameDescStart;
TRANSMIT_FRAME_DESC 	*gpTransmitFrameDescStart;
UINT32 					 gStatusLengthPrevious;			/* For bug fix */
BOOL	gBugFixDone = FALSE;

/* Definitions for the flags field */

#define END_PROMISCUOUS_FLAG	0x1
#define END_RCV_HANDLING_FLAG	0x2
/*
#define END_MBLK_NUM			128   old 
#define END_MBLK_NUM			128   old 
*/
#define END_MBLK_NUM			400 /*new*/
#define END_CL_NUM				400 
#define	SNDS_DATA_OFFSET 		2
#define	SNDS_MAX_MULTI	20

/* DEBUG MACROS */

#undef DEBUG

#ifdef DEBUG
#include "nvLogLib.h"			/* Needed to debug polled mode.  */
int endDebug = 1;
#define ENDLOGMSG(x) \
	if (endDebug) \
	    { \
	    logMsg x; \
	    }
#else
#define ENDLOGMSG(x)
#endif /* ENDDEBUG */

/* LOCALS */

#ifdef INCLUDE_SNDS_END

/* forward static functions */

LOCAL void		sndsEndReset			(END_DEVICE *pDrvCtrl);    /* added by knp/nts 14/9/99 */
LOCAL STATUS	sndsEndStart			(END_DEVICE *pDrvCtrl);    /* added by knp/nts 14/9/99 */
LOCAL void		sndsEndBdmaRxInt		(END_DEVICE *pDrvCtrl);    /* added by knp/nts 15/9/99 */
LOCAL void		sndsEndBdmaTxInt		(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndMacRxInt			(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndMacTxInt			(END_DEVICE *pDrvCtrl);
LOCAL void		sndsEndHandleRcvInt 	(END_DEVICE *pDrvCtrl, UINT32 stat);
LOCAL STATUS	sndsEndRecv				(END_DEVICE *pDrvCtrl, char* pData, UINT32 length);
LOCAL void		sndsEndConfig			(END_DEVICE *pDrvCtrl);
LOCAL UINT32	sndsEndPhyRead 			(UINT32 phyRegAddr, UINT32 phyAddr);
LOCAL void 		sndsEndPhyWrite 		(UINT32 phyRegAddr, UINT32 phyAddr, UINT32 phyData);
LOCAL void 		sndsEndMacInitialize	(END_DEVICE *pDevice);
LOCAL STATUS	sndsEndFdInitialize		(END_DEVICE *pDrvCrtl);
LOCAL void 		sndsEndFdFree			(END_DEVICE *pDrvCtrl);
LOCAL void 		sndsEndBugFix 			(UINT16 *);
LOCAL void sndsEndAddrFilterSet			(END_DEVICE *pDrvCtrl);

/* END Specific interfaces. */

/* This is the only externally visible interface. */

END_OBJ* 	sndsEndLoad (char* initString);

LOCAL STATUS	sndsEndStart		(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndStop			(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndUnload		();
LOCAL int		sndsEndIoctl		(END_DEVICE* pDrvCtrl, int cmd, caddr_t data);
LOCAL STATUS	sndsEndSend			(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
			  
LOCAL STATUS	sndsEndMCastAdd 	(END_DEVICE* pDrvCtrl, char* pAddress);
LOCAL STATUS	sndsEndMCastDel 	(END_DEVICE* pDrvCtrl, char* pAddress);
LOCAL STATUS	sndsEndMCastGet 	(END_DEVICE* pDrvCtrl, MULTI_TABLE* pTable);
LOCAL STATUS	sndsEndPollSend 	(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
LOCAL STATUS	sndsEndPollRcv 		(END_DEVICE* pDrvCtrl, M_BLK_ID pBuf);
LOCAL STATUS	sndsEndPollStart 	(END_DEVICE* pDrvCtrl);
LOCAL STATUS	sndsEndPollStop 	(END_DEVICE* pDrvCtrl);

LOCAL STATUS	sndsEndParse		();
LOCAL STATUS	sndsEndMemInit		();

/*
 * Declare our function table.  This is static across all driver
 * instances.
 */

LOCAL NET_FUNCS endFuncTable =
    {
    (STATUS (*) (END_OBJ*))sndsEndStart,				/* Function to start the device. */
    (STATUS (*) (END_OBJ*))sndsEndStop,				/* Function to stop the device. */
    (STATUS (*) (END_OBJ*))sndsEndUnload,				/* Unloading function for the driver. */
    (int (*) (END_OBJ*, int, caddr_t))sndsEndIoctl,				/* Ioctl function for the driver. */
	(STATUS (*) (END_OBJ* , M_BLK_ID))sndsEndSend,				/* Send function for the driver. */
    (STATUS (*) (END_OBJ*, char*))sndsEndMCastAdd,			/* Multicast address add function for the driver. */
    (STATUS (*) (END_OBJ*, char*))sndsEndMCastDel,			/* Multicast address delete function for the driver. */
    (STATUS (*) (END_OBJ*, MULTI_TABLE*))sndsEndMCastGet,			/* Multicast table retrieve function for the driver. */
    (STATUS (*) (END_OBJ*, M_BLK_ID))sndsEndPollSend,			/* Polling send function for the driver. */
    (STATUS (*) (END_OBJ*, M_BLK_ID))sndsEndPollRcv,				/* Polling receive function for the driver. */
    endEtherAddressForm,        /* Put address info into a packet.  */
    endEtherPacketDataGet,      /* Get a pointer to packet data. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产小视频在线观看| 天天亚洲美女在线视频| 国产精品资源网站| 精品福利av导航| 国产成人精品三级麻豆| 中国色在线观看另类| 色哟哟亚洲精品| 亚洲综合一区二区| 91麻豆精品国产91久久久久| 免费观看一级特黄欧美大片| 久久久久国产精品人| 99久久久久久99| 午夜精品免费在线观看| 欧美成人伊人久久综合网| 国产成人av资源| 一区二区三区在线观看视频 | 性久久久久久久久久久久| 91精品蜜臀在线一区尤物| 经典一区二区三区| 亚洲色图制服丝袜| 666欧美在线视频| 国产成a人无v码亚洲福利| 一区二区高清免费观看影视大全| 91精品国产综合久久久久久| 国产精品亚洲一区二区三区在线| 亚洲精品中文在线观看| 日韩欧美另类在线| 91片在线免费观看| 麻豆精品新av中文字幕| 国产精品盗摄一区二区三区| 欧美精品v国产精品v日韩精品 | 国产在线视频一区二区三区| 中文字幕一区视频| 欧美视频一区二| 福利一区福利二区| 午夜精品久久久久久久| 国产精品久久久久9999吃药| 3d成人h动漫网站入口| 成人免费毛片嘿嘿连载视频| 天天做天天摸天天爽国产一区| 日本一区二区三区在线不卡| 91精品综合久久久久久| 成人高清视频免费观看| 蜜臀av一区二区在线免费观看| 17c精品麻豆一区二区免费| 91精品国产免费久久综合| 一本色道久久综合狠狠躁的推荐| 经典三级在线一区| 视频一区二区欧美| 亚洲视频香蕉人妖| 久久青草欧美一区二区三区| 538prom精品视频线放| 色综合天天综合在线视频| 国产精品中文字幕日韩精品| 日韩电影在线观看电影| 亚洲五月六月丁香激情| 中文字幕一区二区三| 久久五月婷婷丁香社区| 精品国产一区二区亚洲人成毛片| 欧美日产国产精品| 欧美在线观看一二区| 成人性色生活片免费看爆迷你毛片| 久久se这里有精品| 日韩av一区二区在线影视| 亚洲制服丝袜一区| 一区二区三区小说| 亚洲视频一区二区在线观看| 国产精品久久久久久久久搜平片 | 欧美另类变人与禽xxxxx| 91影视在线播放| 91小视频在线观看| 91色在线porny| 99热精品国产| 色综合天天综合网天天看片| 93久久精品日日躁夜夜躁欧美| av电影一区二区| 91亚洲男人天堂| 在线观看国产91| 欧洲视频一区二区| 欧洲视频一区二区| 4438亚洲最大| 日韩精品一区二区三区在线| 精品国产一区二区三区久久久蜜月 | 欧美午夜精品理论片a级按摩| 在线观看一区二区视频| 欧美在线观看禁18| 欧美日韩一区二区三区高清| 欧美日韩成人一区二区| 91精品中文字幕一区二区三区| 欧美大白屁股肥臀xxxxxx| 日韩视频一区二区在线观看| 精品国产乱码久久久久久浪潮| 久久久精品天堂| 亚洲天堂精品在线观看| 一区二区三区欧美日| 午夜精品久久久久久久99水蜜桃| 久久精品国产亚洲aⅴ | 亚洲mv大片欧洲mv大片精品| 日韩高清不卡一区二区三区| 国产又黄又大久久| av在线这里只有精品| 在线影院国内精品| 7777精品伊人久久久大香线蕉超级流畅| 7777精品伊人久久久大香线蕉完整版| 欧美电影免费观看高清完整版在线| 久久网这里都是精品| 亚洲欧美一区二区久久| 午夜不卡在线视频| 国产一区二区不卡在线| 一本一道综合狠狠老| 91精品啪在线观看国产60岁| 久久天堂av综合合色蜜桃网| 亚洲伦在线观看| 日韩国产高清影视| 成人午夜碰碰视频| 欧美日韩国产一二三| 国产欧美日韩视频在线观看| 性欧美大战久久久久久久久| 国产白丝精品91爽爽久久| 欧美日韩午夜精品| 久久久99精品免费观看| 亚洲va在线va天堂| 成人av在线网| 日韩午夜小视频| 亚洲人成小说网站色在线| 久久国产剧场电影| 欧美午夜精品久久久| 欧美国产精品中文字幕| 亚洲bt欧美bt精品| 91网页版在线| 久久久精品tv| 亚洲午夜私人影院| 成人网男人的天堂| 日韩欧美中文一区| 亚洲成人av中文| 成人app网站| 久久影院午夜论| 美女视频黄久久| 欧美日韩中字一区| 亚洲欧洲在线观看av| 国产一区 二区 三区一级| 欧美区视频在线观看| 亚洲视频资源在线| 粉嫩aⅴ一区二区三区四区五区| 久久久亚洲精品一区二区三区| 婷婷久久综合九色综合伊人色| 99精品国产一区二区三区不卡| 久久久久久久久久电影| 蜜臂av日日欢夜夜爽一区| 欧美午夜一区二区三区免费大片| 亚洲欧洲一区二区三区| a在线欧美一区| 国产精品伦一区二区三级视频| 狠狠色狠狠色综合系列| 欧美一级在线观看| 日韩电影网1区2区| 欧美一区日本一区韩国一区| 亚洲mv大片欧洲mv大片精品| 欧美视频在线不卡| 亚洲在线免费播放| 91免费在线播放| 亚洲欧美一区二区三区极速播放| av一二三不卡影片| 中文字幕一区二区三区在线观看 | 欧美老肥妇做.爰bbww视频| 一区二区三区视频在线看| 91在线porny国产在线看| 一区在线观看免费| 色综合久久综合中文综合网| 国产精品天天摸av网| 波多野结衣在线一区| 亚洲欧洲精品天堂一级| 99在线精品观看| 一区二区三区高清在线| 欧美日韩中文另类| 午夜激情久久久| 精品国产麻豆免费人成网站| 韩国v欧美v亚洲v日本v| 国产丝袜美腿一区二区三区| 成人黄色免费短视频| 亚洲欧美国产三级| 欧美日韩小视频| 国模娜娜一区二区三区| 国产精品日日摸夜夜摸av| 91免费国产在线| 午夜精品免费在线观看| 日韩精品一区二区三区四区 | 97精品电影院| 一区二区三区视频在线看| 91精品国产福利| 国产二区国产一区在线观看| 亚洲欧洲韩国日本视频| 欧美剧在线免费观看网站| 国模套图日韩精品一区二区| 亚洲欧洲成人精品av97| 欧美日韩免费在线视频| 久久精品国产亚洲5555| 日韩一区欧美小说| 91精品国产色综合久久不卡电影| 丰满白嫩尤物一区二区|