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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dm9000end.c

?? 操作系統(tǒng)中的一找你個的相關(guān)的淡淡的碼源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* dm9000End.c - dm9000 END  network interface driver for MagicARM2410			*/

/* V1.0  2008/03/20  																	*/
                    

#include "copyright_wrs.h"

#include "vxWorks.h"
#include "stdlib.h"
#include "cacheLib.h"
#include "intLib.h"
#include "end.h"			
#include "endLib.h"
#include "lstLib.h"			
#include "wdLib.h"
#include "iv.h"
#include "semLib.h"
#include "etherLib.h"
#include "logLib.h"
#include "netLib.h"
#include "netBufLib.h"
#include "sysLib.h"
#include "errno.h"
#include "errnoLib.h"
#include "memLib.h"
#include "iosLib.h"
#undef	ETHER_MAP_IP_MULTICAST
#include "etherMultiLib.h"		
#include "end.h"
#include "muxLib.h"
#include "net/mbuf.h"
#include "net/if_subr.h"
#include "net/route.h"
#include "netinet/in.h"
#include "net/unixLib.h"
#include "net/protosw.h"
#include "net/systm.h"
#include "sys/socket.h"
#include "sys/ioctl.h"
#include "sys/times.h"
#include "arpLib.h"
#include "s3c2410x.h"
#include "stdio.h"
#include "string.h"



#define rpGPFCON (*(volatile unsigned *)0x56000050)
#define rpGPFUP  (*(volatile unsigned *)0x56000058)
#define rpINTMSK (*(volatile unsigned *)0X4A000008)
#define rpINTPND (*(volatile unsigned *)0X4a000010)
#define rpSRCPND (*(volatile unsigned *)0X4a000000)

/* defines */
#define DM9000_REG00        0x00
#define DM9000_REG05        0x11   
#define DM9000_REG05_OFF    0x00

#define DM9000_REGFF        0x83    
#define DM9000_REGFF_OFF    0x80

#define DM9000_PHY          0x40    
#define DM9000_PHY_OFF      0x01
#define DM9000_PHY_ON       0x00
#define DM9000_PKT_MAX      1536    
#define DM9000_PKT_RDY      0x01   

#define DM9000_10MHD        0x00
#define DM9000_100MHD       0x01
#define DM9000_10MFD        0x04
#define DM9000_100MFD       0x05
#define DM9000_AUTO         0x08
#define DM9008A             0x10
#define DM900xA_PCEL        0x15

#define DM9000_MEDIA_MODE   DM9000_100MFD

/*DM9000 ADDRS*/
#define DM9000_IOADDR       0x18000300
#define DM9000_IODATA       0x18000304

/*DM9000 Tx buffer size*/
#define DM9000_FRAME_BUFSIZE  30000

#define DM9000_DEV_NAME     "dmf"
#define DM9000_DEV_NAME_LEN 4

/*DM9000 MAC address */
unsigned char dmfEnetAddr [6] = {0x00, 0x13, 0xf6, 0x6c, 0x87, 0x90};


#ifndef ETHERMTU
#define ETHERMTU (1500)
#endif

#define END_BUFSIZ      (1500 + 14 + 6) 
#define EH_SIZE         (14)
#define END_SPEED_10M   10000000   
#define END_SPEED_100M  100000000   
#define END_SPEED       END_SPEED_100M          

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

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




#define sysOutByte(port,data) (*(volatile UCHAR *)(port) = (UCHAR)(data))
#define sysInByte(port)       (*(volatile UCHAR *)(port))

#define sysOutWord(port,data) (*(volatile USHORT *)(port) = (USHORT)(data))
#define sysInWord(port)       (*(volatile USHORT *)(port))

#ifndef DM9000_OUT_REG
#define DM9000_OUT_REG(addr,value)\
    { \
    sysOutByte( DM9000_IOADDR, addr);\
    sysOutByte( DM9000_IODATA, value);\
    }
#endif

#ifndef DM9000_IN_REG
#define DM9000_IN_REG(addr,data)\
    { \
    sysOutByte( DM9000_IOADDR, addr);\
    data = sysInByte(DM9000_IODATA);\
    }
#endif

#ifndef DM9000_IN_ADDR
#define DM9000_IN_ADDR( addr ) \
    addr = sysInByte(DM9000_IOADDR);
#endif

#ifndef DM9000_OUT_ADDR
#define DM9000_OUT_ADDR( addr ) \
    sysOutByte(DM9000_IOADDR,addr);
#endif

#ifndef DM9000_IN_BYTE
#define DM9000_IN_BYTE( data ) \
    data=sysInByte(DM9000_IODATA);
#endif

#ifndef DM9000_OUT_BYTE
#define DM9000_OUT_BYTE( data ) \
    sysOutByte(DM9000_IODATA, data);
#endif

#ifndef DM9000_IN_WORD
#define DM9000_IN_WORD( data ) \
        data = sysInWord( DM9000_IODATA);
#endif
    
#ifndef DM9000_OUT_WORD
#define DM9000_OUT_WORD( data ) \
        sysOutWord( (DM9000_IODATA),data);
#endif

typedef struct end_device
{
    END_OBJ       end;                  /* The class we inherit from. */
    int           unit;                 /* unit number */
    int                 ivec;           /* interrupt vector */
    int                 ilevel;         /* interrupt level */
    long                flags;          /* Our local flags. */
    UCHAR               enetAddr[6];    /* ethernet address */
    CACHE_FUNCS         cacheFuncs;     /* cache function pointers */
    CL_POOL_ID          pClPoolId;      /* cluster pool */
    BOOL                rxHandling;     /* rcv task is scheduled */
    
    UINT		            IOBase;
    UCHAR               io_mode;        /* 0:word, 2:byte */
    char                tx_pkt_cnt;     
    USHORT              queue_pkt_len;
    UCHAR               op_mode;        /* PHY operation mode */

    UCHAR               mcastFilter[8]; /* multicast filter */
} END_DEVICE;

/*
 * 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 dm9000MclBlkConfig =    /* network mbuf configuration table */
{
    /*
    no. mBlks     no. clBlks  memArea     memSize
    ----------    ---------   -------     -------
    */
    2048,          256,        NULL,       0
};

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

int dm9000ClDescTblNumEnt = (NELEMENTS(dm9000ClDescTbl));

/* Definitions for the flags field */

#define DM9000_PROMISCUOUS  0x01
#define DM9000_POLLING      0x02

/* Status register bits, returned by dm9000StatusRead() */

#define DM9000_RINT         0x01    /* Rx interrupt pending */
#define DM9000_TINT         0x02    /* Tx interrupt pending */
#define DM9000_VALID_INT    0x03    /* Any valid interrupt pending */
#define DM9000_RXON         0x04    /* Rx on (enabled) */
#define DM9000_TFULL        0x08    /* tx full */
#define DM9000_RXRDY        0x10    /* data rdy */

#define DM9000_MIN_FBUF     (30000)  /* min first buffer size */

/* DEBUG MACROS */

#define DM_DEBUG_PRINT
#undef  DM_DEBUG_PRINT


/* LOCALS */

/* forward static functions */
static void     dmfe_reset_dm9000( END_DEVICE *dev );
static void     dmfe_config_dm9000( END_DEVICE *dev, int oo);
static int      dmfe_Copy_TxFrame( END_DEVICE *dev, char *pBuffer, int TxLen);
static int      dmfe_Copy_RxFrame( END_DEVICE *dev, char *pBuffer ,UCHAR rxbyte);
static UCHAR    dmfe_Get_NextPacket(void);
static int      dmfe_Stop_Chip(END_DEVICE *dev); 

static void     set_PHY_mode( END_DEVICE *dev );
static USHORT   phy_read( END_DEVICE *dev, int reg );
static void     phy_write( END_DEVICE *dev, int reg, USHORT value);
static void     uDelay( int us );
static void     dmfGetPhyAndMulAdrs(END_DEVICE *dev);


static void     dm9000Reset(END_DEVICE *pDrvCtrl);
static void     dm9000Config(END_DEVICE *pDrvCtrl);
static void     dm9000Int(END_DEVICE *pDrvCtrl);
static STATUS   dm9000Recv(END_DEVICE *pDrvCtrl);

static UINT     dm9000StatusRead(END_DEVICE *pDrvCtrl);

LOCAL void 	s3cExtIntPinEnable(void);
static void	dm9000Chack(void);

/* This is the only externally visible interface. */
END_OBJ *   sysEtherEndLoad (char *initString, void *pBSP);

static STATUS   dm9000Start(END_DEVICE *pV);
static STATUS   dm9000Stop(END_DEVICE *pV);
static int      dm9000Ioctl(END_DEVICE *pV, int cmd, caddr_t data);
static STATUS   dm9000Unload(END_DEVICE *pV );
static STATUS   dm9000Send(END_DEVICE *pV, M_BLK_ID pBuf);

static STATUS   dm9000MCastAdd(END_DEVICE *pV, char *pAddress);
static STATUS   dm9000MCastDel(END_DEVICE *pV, char *pAddress);
static STATUS   dm9000MCastGet(END_DEVICE *pV, MULTI_TABLE *pTable);
static STATUS   dm9000PollStart(END_DEVICE *pV);
static STATUS   dm9000PollStop(END_DEVICE *pV);
static STATUS   dm9000PollSend(END_DEVICE *pV, M_BLK_ID pBuf);
static STATUS   dm9000PollRcv(END_DEVICE *pV, M_BLK_ID pBuf);

static void     dm9000AddrFilterSet(END_DEVICE *pDrvCtrl);
static STATUS   dm9000Parse( END_DEVICE *pDrvCtrl, char *initString );
static STATUS   dm9000MemInit( END_DEVICE *pDrvCtrl);


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

static NET_FUNCS dm9000FuncTable =
{
    (FUNCPTR) dm9000Start,      /* Function to start the device. */
    (FUNCPTR) dm9000Stop,       /* Function to stop the device. */
    (FUNCPTR) dm9000Unload,     /* Unloading function for the driver. */
    (FUNCPTR) dm9000Ioctl,      /* Ioctl function for the driver. */
    (FUNCPTR) dm9000Send,       /* Send function for the driver. */
    (FUNCPTR) dm9000MCastAdd,   /* Multicast add function for the */
                                /* driver. */
    (FUNCPTR) dm9000MCastDel,   /* Multicast delete function for */
                                /* the driver. */
    (FUNCPTR) dm9000MCastGet,   /* Multicast retrieve function for */
                                /* the driver. */
    (FUNCPTR) dm9000PollSend,   /* Polling send function */
    (FUNCPTR) dm9000PollRcv,    /* Polling receive function */

    endEtherAddressForm,        /* put address info into a NET_BUFFER */
    endEtherPacketDataGet,      /* get pointer to data in NET_BUFFER */
    endEtherPacketAddrGet       /* Get packet addresses. */
};

/*******************************************************************************
*
* sysEtherEndLoad - initialize the driver and device
*
* This routine initializes the driver and the device to the operational state.
* All of the device specific parameters are passed in the initString.
*
* The string contains the target specific parameters like this:
*
* "register addr:int vector:int level:shmem addr:shmem size:shmem width"
*
* RETURNS: An END object pointer or NULL on error.
*/

END_OBJ* sysEtherEndLoad( char *initString, void *pBSP )    /* String to be parsed by the driver. */
{  
    END_DEVICE  *pDrvCtrl;
    int i;
    		
#ifdef DM_DEBUG_PRINT
    logMsg("DM9000 loading Now...\n", 0, 0, 0, 0, 0, 0);
#endif

    if (initString == NULL)
    {
#ifdef DM_DEBUG_PRINT
       logMsg("sysEtherEndLoad Error: initString is NULL...\n", 0, 0, 0, 0, 0, 0);
#endif
        return (NULL);
    }

    if (initString[0] == '\0')
    {
        bcopy((char *)DM9000_DEV_NAME, initString, DM9000_DEV_NAME_LEN);
#ifdef DM_DEBUG_PRINT
        logMsg("sysEtherEndLoad: DM9000 Device Name String is 0...\n", 0, 0, 0, 0, 0, 0);
#endif
        return ((END_OBJ*)OK);
    }
	
    /* allocate the device structure */
    pDrvCtrl = (END_DEVICE *)calloc(sizeof (END_DEVICE), 1);
    
    if (pDrvCtrl == NULL)
    {
#ifdef DM_DEBUG_PRINT
        logMsg("sysEtherEndLoad: calloc() == NULL\n", 0, 0, 0, 0, 0, 0);
#endif
        goto errorExit;
    }
    
    pDrvCtrl->flags  = 0;
    
    pDrvCtrl->op_mode = DM9000_MEDIA_MODE;  
     
    pDrvCtrl->io_mode  = 0;

    /* parse the init string, filling in the device structure */
    if (dm9000Parse(pDrvCtrl, initString) == ERROR)
    {
#ifdef DM_DEBUG_PRINT
        logMsg("sysEtherEndLoad: Parse Error!\n", 0, 0, 0, 0, 0, 0);
#endif
        goto errorExit;
    }
		
    /* Ask the BSP to provide the ethernet address. */
    bcopyBytes((char *)dmfEnetAddr,(char *)pDrvCtrl->enetAddr,6);
#ifdef DM_DEBUG_PRINT
		for(i=0;i<6;i++)
		logMsg("%x \n",pDrvCtrl->enetAddr[i],0,0,0,0,0);
#endif
    
    /*Verify that it is the correct chip*/
    dm9000Chack();
    
    /* initialize the END and MIB2 parts of the structure 
     * The M2 element must come from m2Lib.h
     * This dm9000 is set up for a DIX type ethernet device.
     */
    if (END_OBJ_INIT (&pDrvCtrl->end, (DEV_OBJ *)pDrvCtrl, DM9000_DEV_NAME,
                      pDrvCtrl->unit, &dm9000FuncTable,"dm9000 END Driver.") == ERROR
     || END_MIB_INIT (&pDrvCtrl->end, M2_ifType_ethernet_csmacd,
                      (UCHAR*)&(pDrvCtrl->enetAddr[0]), 6, 1500,
                      END_SPEED) == ERROR)
    {
#ifdef DM_DEBUG_PRINT
        logMsg("sysEtherEndLoad: END_OBJ_INIT() or END_MIB_INIT() failed!\n", 0, 0, 0, 0, 0, 0);
#endif
       goto errorExit;
    }

    /* Perform memory allocation/distribution */
    if (dm9000MemInit (pDrvCtrl) == ERROR)
    {
        goto errorExit;
    }

    /* reset and reconfigure the device */
    dm9000Reset (pDrvCtrl);
    
    dmfe_config_dm9000( pDrvCtrl, 1 );

    /* set the flags to indicate readiness */
    END_OBJ_READY (&pDrvCtrl->end,
                 IFF_UP | IFF_RUNNING | IFF_NOTRAILERS | IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX);

#ifdef DM_DEBUG_PRINT
   logMsg("Dm9000 Loading Sucessfull!\n", 0, 0, 0, 0, 0, 0);
#endif  

    return (&pDrvCtrl->end);

errorExit:
    if (pDrvCtrl != NULL)
    free ((char *)pDrvCtrl);
    return NULL;
}

/*******************************************************************************
*
* dm9000Parse - parse the init string
*
* Parse the input string.  Fill in values in the driver control structure.
*
* The muxLib.o module automatically prepends the unit number to the user's
* initialization string from the BSP (configNet.h).
*
* RETURNS: OK or ERROR for invalid arguments.
*/

static STATUS dm9000Parse( END_DEVICE *pDrvCtrl,  /* device pointer */
                           char *initString )     /* information string */
{
    char *	tok;
    char *	pHolder = NULL;
    long	address;

    /* Unit number. */
    tok = strtok_r (initString, ":", &pHolder);
    if (tok == NULL) return ERROR;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频在线观看一区二区三区| 成人少妇影院yyyy| 欧美亚洲综合网| 一区二区三区精品视频| 91色在线porny| 亚洲永久免费av| 欧美自拍偷拍午夜视频| 日日摸夜夜添夜夜添亚洲女人| 欧美丝袜第三区| 日韩成人精品视频| 久久久av毛片精品| 成人激情黄色小说| 一区二区三区中文字幕电影 | 亚洲欧洲成人av每日更新| 成人一区二区三区在线观看| 欧美国产精品一区二区三区| 成人av电影在线播放| 亚洲精品乱码久久久久| 欧美日韩一本到| 九九国产精品视频| 国产精品污网站| 欧美色综合网站| 久久精品噜噜噜成人av农村| 国产清纯在线一区二区www| 不卡的av电影| 日韩一区欧美二区| 国产亚洲美州欧州综合国| 色哟哟一区二区三区| 日韩电影免费在线看| 国产视频视频一区| 欧美日韩一区在线观看| 韩国一区二区在线观看| 国产精品66部| 欧美日韩激情一区| 风流少妇一区二区| 婷婷综合在线观看| 国产精品女主播av| 欧美老肥妇做.爰bbww视频| 国产精品一区二区三区四区| 亚洲制服丝袜av| 日本一区二区三区四区| 91精品国产综合久久久蜜臀粉嫩| 国产一区二区三区电影在线观看| 亚洲视频一区二区在线| 欧美精品一区二区三| 欧美在线视频不卡| av资源站一区| 国产在线精品视频| 日韩和欧美的一区| 亚洲乱码一区二区三区在线观看| 日韩免费在线观看| 欧美综合欧美视频| 成人sese在线| 国内精品伊人久久久久av一坑| 一区二区三区毛片| 亚洲欧洲日韩在线| 国产婷婷色一区二区三区四区 | 国内精品伊人久久久久av影院| 亚洲日本在线观看| 国产日韩欧美综合在线| 欧美成人三级电影在线| 欧美日韩久久一区二区| 色哟哟在线观看一区二区三区| 夫妻av一区二区| 国产老妇另类xxxxx| 视频一区二区三区中文字幕| 亚洲精品欧美在线| 亚洲欧美在线另类| 欧美韩日一区二区三区| 精品美女一区二区| 日韩欧美一区在线观看| 欧美欧美午夜aⅴ在线观看| 欧美性感一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 国产麻豆午夜三级精品| 国产伦理精品不卡| 国内精品嫩模私拍在线| 日本免费新一区视频| 日本在线观看不卡视频| 日韩精品久久理论片| 午夜激情一区二区三区| 青青草国产精品亚洲专区无| 日本最新不卡在线| 久久99精品国产| 韩国三级在线一区| 国产精品亚洲人在线观看| 国产一区二区三区视频在线播放| 极品少妇xxxx偷拍精品少妇| 国产一区三区三区| 国产精品综合av一区二区国产馆| 国产一区啦啦啦在线观看| 狠狠色丁香久久婷婷综| 从欧美一区二区三区| 99久久精品国产网站| 色综合天天综合在线视频| 色天天综合色天天久久| 欧美视频日韩视频在线观看| 欧美日韩卡一卡二| 久久综合九色综合欧美亚洲| 久久久亚洲午夜电影| 中文字幕免费观看一区| √…a在线天堂一区| 亚洲一区二区三区在线看| 天堂在线亚洲视频| 国内不卡的二区三区中文字幕| 国产麻豆9l精品三级站| 91老司机福利 在线| 911国产精品| 久久日一线二线三线suv| 中文字幕一区二区在线观看| 亚洲国产欧美在线| 韩国午夜理伦三级不卡影院| gogo大胆日本视频一区| 欧美日韩一区二区在线观看视频| 日韩一区二区三区在线| 亚洲国产精品成人久久综合一区| 亚洲欧美日韩在线不卡| 男女激情视频一区| va亚洲va日韩不卡在线观看| 欧美综合一区二区三区| 欧美精品一区二区久久久| 国产精品国产自产拍高清av | 国产91富婆露脸刺激对白| 91久久久免费一区二区| 日韩一区二区免费在线电影| 国产拍欧美日韩视频二区| 亚洲h在线观看| 国产成人综合网| 欧美美女bb生活片| 国产精品热久久久久夜色精品三区 | 日韩精品中文字幕一区| 中文字幕一区视频| 蜜乳av一区二区| 日本久久一区二区| 精品国产一区久久| 亚洲自拍与偷拍| www.激情成人| 精品对白一区国产伦| 亚洲综合激情网| 97久久超碰精品国产| 精品国产免费一区二区三区四区| 一区二区三区欧美| 麻豆极品一区二区三区| 欧美在线观看视频一区二区三区| 国产亚洲欧美一级| 麻豆成人久久精品二区三区小说| 在线观看精品一区| 中文字幕av在线一区二区三区| 日本欧美一区二区三区| 在线观看亚洲精品| 亚洲少妇最新在线视频| 国产精品一区二区在线观看不卡| 制服视频三区第一页精品| 一区二区三区免费| 成人app在线观看| 久久影视一区二区| 久久不见久久见免费视频1| 在线欧美日韩国产| 亚洲欧美日韩成人高清在线一区| 国产酒店精品激情| 欧美成人bangbros| 久久国产麻豆精品| 日韩欧美亚洲国产另类| 日产欧产美韩系列久久99| 欧美日韩精品久久久| 五月天久久比比资源色| av一区二区三区在线| 亚洲欧洲三级电影| 99久久精品国产观看| 亚洲国产精品激情在线观看| 国产成人午夜精品影院观看视频| 亚洲精品一区二区三区香蕉 | 国产成人精品免费在线| 久久人人爽爽爽人久久久| 极品少妇xxxx精品少妇| 久久日韩粉嫩一区二区三区| 国产精品99久久久久久似苏梦涵| 26uuu国产在线精品一区二区| 久久99国内精品| 久久午夜色播影院免费高清| 国产一区二区三区观看| 亚洲国产精品精华液ab| 色综合久久综合网97色综合| 亚洲国产综合视频在线观看| 91精品欧美一区二区三区综合在| 日韩成人精品在线观看| 精品剧情在线观看| 成人永久aaa| 亚洲综合一二三区| 日韩午夜电影av| 粉嫩嫩av羞羞动漫久久久| 国产精品电影院| 欧美在线一二三四区| 日韩黄色小视频| 久久久久久久综合| 色88888久久久久久影院野外| 午夜伦理一区二区| 久久久夜色精品亚洲| 色悠久久久久综合欧美99| 日韩av一二三|