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

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

?? if_cs.c

?? 這是一個在VxWorks系統實現CS網卡END驅動的原代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* if_cs.c - Crystal Semiconductor CS8900 network interface driver          */
/*                                                                          */
/* Copyright 2000 Crystal Semiconductor Corp.                               */
/*                                                                          */
/*               Last release: v2.07a                                       */
/* Mod level for last release: 07a                                          */


/*
modification history
--------------------
v2.07a,09Oct00, kml 
 -Padded 2 bytes in RxBuf to make IP header in the WORD boundary.
 -Fixed the bug that if CPU type is MIPS, an extra byte is sent
  when an odd-aligned buffer and odd length data are passed.

v2.06a, 22Nov99, kml:
-Take out all MULTICAST related functions when BSD4.3 driver is built.

v2.05a, 09Nov99, kml:
-Fix the bug that in the BSD4.3 version, netJobAdd() should pass the address
 of CS_SOFTC instead of the interface unit number to match the argument passed
 to csEventHandler(CS_SOFTC *pCS).



v2.04a,24Sep99, kml  -Take out IFF_MULTICAST in BSD43 mode because not supported.
                     -Change receiving buffer size from 32 to 64.
                     -Correction: If the memory address parameter is zero, the CS8900 operates in the
                      mode specified by EEPROM or the Config Flag parameter.

03a,14May99,kml  -Added support for Promiscuous Mode.
                 -Added support for Multicasting.
                 -Corredted the calculation of the MIB2 static variables: 
				  if_opackets and if_ipaclets.
				 -Added codes to disable CS8900's interrupt in csInitChip()
				  when SOFT_RESET is defined.
				 -Made modification not to give up the frame when TX_UnderRun
				  occurrs and chip is not ready for TX.
         
02a,31Mar99,kml  converted to BSD44 driver, merge from SENS

01g.25nov97.jla  Added defs to help a page fault with hard resets.
                 HARD_RESET does hard chip resets
                 SOFT_RESET does a softer, kinder sort of reset
                 The routine csResetChip does one or the other based
                 on the define set in if_cs.h

01q,11apr97,rks  Implementd "early tx" support.  Required mods to csAttach
                 (initialization), csInitChip (early tx int enable),
		 csTxNextFrame, and csBufferEvent.

01p,09apr97,rks  Replaced common TX code in csStartOutput and csTransmitEvent
                 with a new routine csTxNextFrame().
		 Added conditional compile for a Tx Queue depth and max TX
		 Queue depth counter if CS_DEBUG_ENABLE defined.

01o,07apr97,rks  Changed queue routines (enqueue and deueue) to make the data
                 update prior to pointer update.  Removed the int lock/unlock
		 around the queue accesses in csEventHandler (no longer needed
		 with the new queue routines).
                 Moved the m_freem call to after the intUnlock in csStartOutput.

01n,01apr97,rks  Implemented a local queue for TX frames.  On csStartOuput call,
                 the interface's queue is drained.  Frames are then taken from
                 the local queue in csStartOutput and at ISR level for transmit
		 to ensure the interface's queue is manipulated only by routines
		 at the same context (csStartOuput and ether_output).

01m,30mar97,rks  Modified the csIntHandler.  Removed the chip int disables and
                 replaced with CLI/STI pairs only around queue manipulations.
		 Also, now use a "NetJobDepth" counter instead of an active flag
		 to determine if another csIntHandler needs to be queued.
                 Moved the netJobAdd logic to the bottom of the ISR and removed
		 it from all the ISR sub-routines.

01l,27mar97,rks  Bracketed mbuff routines in csProcessReceive with splnet/splx.

01k,28feb97,rks  Added circular queue manipulation routines to handle TX mbufs
                 to be freed and RX frames to be handled at the task level.
                 Created generic event handler (csEventHandler) to processe RX
		 frame processing and TX mbuff freeing at the task level.
                 Added a counter to ensure never more than 2 instances of the
		 event handler are queued for tNetTask processing.

01j,27feb97,rks  Added support for the collision counter. Moved support for Rx
                 miss counter to ISR (saves a function call).

01h,25feb97,rks  Modifications for MIPS suppport (prevent word reads from odd
                 addresses in csCopyTXFrame.  Debug macro to replace csError
		 routine. (Greg Rasche)

01g,07jan97,rks  Modified csAttach to remove parameter for specifying
                 Ethernet address.

01f,16dec96,rks  Divided the driver into two files, this file for
                 system-indendent routines and "sysEnet.c" containing
                 target-specific routines and macros for "IO mode" operations.
                 Added BYTE_SWAP macro for all non-constant io values
                 to the CS8900.  Replace pcX86-specific io routine
                 calls with SYS_IN/OUT macros.

01e,12dec96,rks  Moved the pTxFrameChain variable to the CS_SOFTC structure.
                 Moved the int disable in csStartOutput to immediately
                 before the Rdy4TxNow poll.  Mutex'd the call to
                 IF_DEQUEUE in csStartOutput with splnet/splx.

01d,05dec96,rks  Removed the processing of every RX miss and implemented
                 support for RX miss statistics using the RX miss counter
                 with RX Miss Counter Overflow interrupts instead.

01c,25nov96,rks  Added version number to statistics reported by csShow(),
                 Added support for TX on Rdy4Tx interrupts, Created
                 routine csFreeTxFrame() to move call of m_freem()
                 to task level Added statistic reported by csShow for
                 Rdy4Tx events

01b,16nov96,rks  Removed support for collision counter (AnyColliE) to
                 improve system perf.

01a,12jul96,q_s  Written.

*/



/*
DESCRIPTION
This module implements the Crystal Semiconductor CS8900 Ethernet network
interface driver.

This driver's structure is designed to facilitate porting to any architecture
supported by VxWorks.  The routines in this file are system independent.  A
library of system-dependent routines in the file "sysEnet.c" must be provided
for the target system.  This driver supports only one unit per system board.


SYSTEM DEPENDENT SUPPORT ROUTINES
This driver requires five system-dependent support routines.  These five
routines are defined in sysEnet.c.

* sysEnetGetConfig( CS_SOFTC *pCS )
This routine takes configuration parameters not specifed to csAttach(), if
any, from non-volatile storage (e.g. an attached EEPROM) and puts them in
the cs_softc structure.

* sysEnetAddrGet( int Unit, unsigned char *pAddr )
This routine obtains the Ethernet MAC address from non-volatile storage or
from the "csEnetAddr" array in sysEnet.c dependent on the
CS8900_ENET_ADDR_FROM_BOARD flag passed to csAttach() and saves the
Ethernet address to the arpcom structure.

* sysEnetHWInit( CS_SOFTC *pCS )
This routine uses global variables in the cs_softc structure to configure the
adapter for the board-specific IO circuitry and supported media types.

* sysEnetIntEnable( CS_SOFTC *pCS )
This routine enables the interrupt used by the CS8900 at the system level.

* sysEnetIntDisable( CS_SOFTC *pCS )
This routine disables the interrupt used by the CS8900 at the system level.  It
is not currently used by this driver.


INCLUDE FILES: if_cs.h, sysEnet.c
*/



/* INCLUDES */

#include "vxWorks.h"
#include "sysLib.h"
#include "intLib.h"
#include "logLib.h"
#include "netLib.h"
#include "etherLib.h"
#include "stdio.h"
#include "iv.h"
#include "ioctl.h"
#include "taskLib.h"
#include "net/if_subr.h"
#include "if_cs.h"

#include "sysEnet.c" /* lib of BSP specific routines used by CS8900 driver */


/* DEFINES */

#define CS_DRIVER_VER         "2.07a"     /* Driver revsion number */


 
/*********************** debug macro *******************************/
BOOL    csDebug = TRUE;  /* this flag is used to turn DEBUG on or off */

#define CS_DEBUG_ENABLE
#ifdef  CS_DEBUG_ENABLE

#define LOGMSG  if(csDebug)logMsg

#undef LOCAL 
#define LOCAL

typedef struct {
  UINT32 arg1;
  UINT32 arg2;
  UINT32 arg3;
  UINT32 arg4;
} CS_HISTORY_TYPE;

#define CS_HISTORY_SIZE    100
CS_HISTORY_TYPE csHistory[ CS_HISTORY_SIZE ];
UINT32          csHistoryIndex;

/* function prototypes */
STATUS csHistoryInit( void );
STATUS csHistoryShow( void );
STATUS csHistoryAdd( UINT32 arg1, UINT32 arg2, UINT32 arg3, UINT32 arg4 );


#else
#define LOGMSG
#endif

/*********************** end debug macro *******************************/
 


/* FORWARD DECLARATIONS */

STATUS csAttach( int Unit, int IOAddr, int IntVector, int IntLevel,
      int MemAddr, int MediaType, int DMAChannel, int ConfigFlags );
LOCAL STATUS csVerifyChip( CS_SOFTC *pCS );
LOCAL STATUS csInit( int Unit );
LOCAL void csReset( int Unit );
LOCAL int csIoctl( struct ifnet *pIf, int Command, char *pData );
LOCAL STATUS csResetChip( CS_SOFTC *pCS );
LOCAL void csInitChip( CS_SOFTC *pCS );

#ifdef BSD43_DRIVER
LOCAL void	csStartOutput	(int Unit);
LOCAL int	csOutput	(struct ifnet *pIf, struct mbuf *pMbufChain,
				 SOCKADDR *pDst);
#else
LOCAL void	csStartOutput	(CS_SOFTC *pCS);
#endif

LOCAL void csCopyTxFrame( CS_SOFTC *pCS, struct mbuf *pMbufChain );
LOCAL void csIntr( int Unit );
LOCAL void csBufferEvent( CS_SOFTC *pCS, USHORT BuffEvent );
LOCAL void csTransmitEvent( CS_SOFTC *pCS, USHORT TxEvent );
LOCAL void csReceiveEvent( CS_SOFTC *pCS, USHORT RxEvent );
LOCAL void csCopyRxFrame( CS_SOFTC *pCS, PRXBUF pRxBuff );
LOCAL void csProcessReceive( CS_SOFTC *pCS, PRXBUF pRxBuff );
LOCAL STATUS csInitRxBuff( CS_SOFTC *pCS );
LOCAL PRXBUF csAllocRxBuff( CS_SOFTC *pCS );
LOCAL void csFreeRxBuff( CS_SOFTC *pCS, PRXBUF pRxBuff );
void csShow( int Unit, BOOL Zap );
LOCAL USHORT csReadPacketPage( CS_SOFTC *pCS, USHORT Offset );
LOCAL void csWritePacketPage( CS_SOFTC *pCS, USHORT Offset, USHORT Value );
LOCAL void csInitQueue( CIR_QUEUE *Q );
LOCAL void *csDequeue( CIR_QUEUE *Q );
LOCAL STATUS csEnqueue( CIR_QUEUE *Q, void *pBuff );
LOCAL void csEventHandler( CS_SOFTC *pCS );
LOCAL BOOL csQueueEmpty( CIR_QUEUE *Q );
LOCAL void csTxNextFrame( CS_SOFTC *pCS );


/*********************** Functions for Multicasting *************************/
#ifndef BSD43_DRIVER
LOCAL UCHAR  calculateHashIndex(UCHAR *pMulticastAddr);
LOCAL void   updateCrc( USHORT bit );
LOCAL void   csMCastAdd(CS_SOFTC *pCS, char *pData);
LOCAL void   csMCastDel(CS_SOFTC *pCS, char *pData);

/* used to calculate multicast hash index */
int CRC_Poly[] = {1,1,1,0,  1,1,0,1,
		          1,0,1,1,  1,0,0,0,
                  1,0,0,0,  0,0,1,1,
                  0,0,1,0,  0,0,0,0 };
int    CRC[33];

#endif




/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
 * OS Entry-point Routines                                                 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */



/*******************************************************************************
*
* csAttach -
*
* This routine is a major entry point to this network interface driver and is
* called only once per operating system reboot by the operating system startup
* code.  This routine is called before the csInit() routine.
*
* This routine takes passed-in configuration parameters and parameters from
* the EEPROM and fills in the instance global variables in the cs_softc
* structure.  These variables are later used by the csInitChip() routine.
*
* This routine connects the interrupt handler, csIntr(), to the specified
* interrupt vector, initializes the 8259 PIC and resets the CS8900 chip.
*
* Finally, this routine calls the ether_attach() routine, to fill in the ifnet
* structure and attach this network interface driver to the system.  The
* driver's main entry points (csInit(), csIoctl(), csOutput(), csReset()) are
* made visable to the protocol stack.
*
* RETURNS: OK, or ERROR if any of the called routines fail.
*
*/

STATUS csAttach( int Unit, int IOAddr, int IntVector, int IntLevel,int MemAddr, int MediaType, int DMAChannel , int ConfigFlags )
{
   FAST CS_SOFTC *pCS;

   if ( Unit >= CS_MAX_NUM_UNITS )
   {
      LOGMSG("csAttach: Invalid unit number (%d)\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   pCS = &cs_softc[Unit];

   /* Save the passed-in parameters */
   pCS->IOAddr      = IOAddr;
   pCS->IntLevel    = IntLevel;
   pCS->IntVector   = IntVector;
   pCS->pPacketPage = (USHORT *)MemAddr;
   pCS->MediaType   = MediaType;
   pCS->ConfigFlags = ConfigFlags;

   /* Start out in IO mode */
   pCS->InMemoryMode = FALSE;

   /* Init TX in progress flag */
   pCS->TxInProgress = FALSE;

   /* Init the TX start command */
   pCS->TxStartCMD = CS_INITIAL_START_CMD;
   
   /* Set counters to zero */
   pCS->TxUnderruns      = 0;
   pCS->TotalTxUnderruns = 0;
   pCS->RxDepth          = 0;
   pCS->MaxRxDepth       = 0;
   pCS->MaxTxDepth       = 0;
   pCS->LoanCount        = 0;
   pCS->Rdy4TxInts       = 0;
   pCS->NetJobDepth      = 0;

#ifdef CS_DEBUG_ENABLE
   pCS->TxQueueDepth    = 0;
   pCS->MaxTxQueueDepth = 0;
#endif

   /* Initialize local queues */
   pCS->pTxBuffFreeList = &TxBuffFreeList;
   pCS->pRxBuffProcessList = &RxBuffProcessList;
   pCS->pTxQueue = &TxQueue;
   csInitQueue( pCS->pTxBuffFreeList );
   csInitQueue( pCS->pRxBuffProcessList );
   csInitQueue( pCS->pTxQueue );
   
   /* Allocate the receive frame buffers */
   if ( csInitRxBuff(pCS) == ERROR )
   {
      LOGMSG("csAttach: unit %d Can not allocate receive buffers\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Verify that it is the correct chip */
   if ( csVerifyChip(pCS) == ERROR )
   {
      LOGMSG("csAttach: unit %d, csVerifyChip failed\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Get any CS8900 parameters not specifed in network interface table */
   if ( sysEnetGetConfig(pCS) == ERROR )
   {
      LOGMSG("csAttach: unit %d, sysEnetGetConfig failed\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Get Ethernet addr in BSP-specific manner and copy to ArpCom structure */
   if ( sysEnetAddrGet(Unit,pCS->ArpCom.ac_enaddr) == ERROR )
   {
      LOGMSG("csAttach: unit %d, sysEnetAddrGet failed\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Setup the interrupt handler and the IDT table entry */
   if ( intConnect(INUM_TO_IVEC(pCS->IntVector),csIntr,Unit) == ERROR )
   {
      LOGMSG("csAttach: unit %d, Can not connect intertupt\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Enable CS8900 interrupts at the system level */
   if ( sysEnetIntEnable(pCS) == ERROR )
   {
      LOGMSG("csAttach: unit %d, sysEnetIntEnable failed\n", 
         Unit,0,0,0,0,0 );
      return( ERROR );
   }

   /* Reset the chip */
   if ( csResetChip(pCS) == ERROR )
   {
      LOGMSG("csAttach: unit %d, Can not reset chip\n", 
         Unit,0,0,0,0,0 );
      return ERROR;
   }

   /* Attach this network interface driver to the system */

#ifdef BSD43_DRIVER
    ether_attach (&pCS->ArpCom.ac_if, Unit, "cs", csInit, csIoctl, csOutput,
		  (FUNCPTR)csReset);
#else
    ether_attach    (
                    &pCS->ArpCom.ac_if,
                    Unit,
                    "cs",
                    (FUNCPTR) csInit,
                    (FUNCPTR) csIoctl,
                    (FUNCPTR) ether_output, /* generic ether_output */
                    (FUNCPTR) csReset

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产一区二区三区| 7777精品伊人久久久大香线蕉最新版 | 日韩精品在线一区二区| 精品对白一区国产伦| 综合色天天鬼久久鬼色| 亚洲一区二区精品3399| 韩国成人福利片在线播放| 不卡视频在线观看| 欧美顶级少妇做爰| 中日韩免费视频中文字幕| 午夜不卡av免费| 岛国精品一区二区| 欧美日韩你懂的| 欧美剧在线免费观看网站| 欧美国产乱子伦| 日韩激情在线观看| 色综合天天综合狠狠| 精品国产91九色蝌蚪| 国产欧美精品一区aⅴ影院| 五月婷婷色综合| 色8久久精品久久久久久蜜| 国产亚洲女人久久久久毛片| 亚洲va欧美va人人爽午夜| 成人app软件下载大全免费| 精品奇米国产一区二区三区| 国产精品免费人成网站| 蜜桃在线一区二区三区| 91免费版在线| 久久久精品影视| 久久99国产精品成人| 北岛玲一区二区三区四区| 欧美精品一区二区在线观看| 国产精品自拍av| 91精品国产高清一区二区三区 | 91麻豆国产自产在线观看| 欧美一级在线免费| 亚洲一区二区三区激情| 成人午夜电影久久影院| 精品毛片乱码1区2区3区| 天堂成人国产精品一区| 91久久精品网| 伊人色综合久久天天| 岛国av在线一区| 欧美国产一区在线| 成人国产精品免费| 亚洲国产精品传媒在线观看| 日韩电影免费一区| 日韩视频一区二区在线观看| 日韩电影在线看| 欧美高清视频不卡网| 日日夜夜免费精品| 欧美人妇做爰xxxⅹ性高电影| **性色生活片久久毛片| aaa亚洲精品| 亚洲欧美日韩成人高清在线一区| 国产不卡高清在线观看视频| 6080日韩午夜伦伦午夜伦| 性做久久久久久久久| 91精品综合久久久久久| 蜜臀91精品一区二区三区| 日韩免费一区二区| 国产麻豆精品在线| 国产精品免费丝袜| 欧美三级电影网| 人人精品人人爱| 6080国产精品一区二区| 美女免费视频一区二区| 亚洲精品一区二区三区影院| 粉嫩嫩av羞羞动漫久久久| 亚洲日本欧美天堂| 欧美三级在线视频| 美女脱光内衣内裤视频久久网站| 久久久久一区二区三区四区| 成人黄色软件下载| 亚洲午夜一二三区视频| 欧美一区二区日韩一区二区| 国产精品一区二区久久不卡| 亚洲欧美二区三区| 欧美一区二区三区小说| 国产一二三精品| 亚洲免费伊人电影| 91麻豆精品国产无毒不卡在线观看| 久久精品国产99国产| 国产精品麻豆久久久| 欧美高清一级片在线| 精品中文av资源站在线观看| 国产精品美女视频| 欧美一区二区三区在| 国产成人8x视频一区二区| 亚洲自拍偷拍网站| 久久久久久99久久久精品网站| 色系网站成人免费| 国产一区在线观看视频| 国产欧美日韩视频一区二区| 欧美午夜在线观看| 成人国产电影网| 久久av中文字幕片| 亚洲精品国产a久久久久久| 精品成人一区二区三区四区| 色综合久久久网| 国产精品一区一区| 国产麻豆91精品| 久久99精品久久久久久国产越南| 亚洲大型综合色站| 亚洲丰满少妇videoshd| 午夜亚洲国产au精品一区二区| 亚洲男人天堂av| 亚洲色图制服丝袜| 亚洲人成网站在线| 亚洲猫色日本管| 亚洲精品一二三| 亚洲国产日韩综合久久精品| 亚洲一区二区美女| 日本va欧美va瓶| 久久99精品久久只有精品| 久久99精品国产麻豆婷婷洗澡| 美日韩一级片在线观看| 久久综合综合久久综合| 久久福利资源站| 国产一区二区三区精品欧美日韩一区二区三区 | 色美美综合视频| 91啪九色porn原创视频在线观看| 9l国产精品久久久久麻豆| 成人激情视频网站| 91蜜桃在线免费视频| 欧美日韩和欧美的一区二区| 6080午夜不卡| 久久色成人在线| 国产精品电影一区二区| 尤物在线观看一区| 视频在线在亚洲| 国产成人日日夜夜| 色综合久久久网| 日韩欧美在线不卡| 国产欧美在线观看一区| 亚洲欧美视频一区| 婷婷亚洲久悠悠色悠在线播放| 另类欧美日韩国产在线| 国产99久久精品| 欧美日韩精品欧美日韩精品一综合| 欧美一区二区人人喊爽| 国产精品人成在线观看免费| 亚洲激情欧美激情| 精品在线免费视频| 色天天综合久久久久综合片| 欧美日韩高清不卡| 国产精品卡一卡二| 亚洲bt欧美bt精品| 国产精华液一区二区三区| 欧美又粗又大又爽| 久久夜色精品国产噜噜av| 亚洲综合在线电影| 看电影不卡的网站| 欧美亚洲一区二区三区四区| 精品女同一区二区| 一区二区高清视频在线观看| 久草热8精品视频在线观看| 91视频在线看| 精品国产一区二区三区av性色 | 日韩成人dvd| 成人午夜av在线| 日韩精品中文字幕在线一区| 亚洲精品视频观看| 国产精品一区不卡| 日韩一级片网址| 亚洲免费在线电影| 国产91在线观看| 91精品国产欧美日韩| 亚洲丝袜自拍清纯另类| 韩国午夜理伦三级不卡影院| 欧美这里有精品| 国产精品久久久久久久久搜平片| 蜜桃av一区二区三区电影| 欧美亚一区二区| 1024国产精品| 成人三级伦理片| 精品久久一二三区| 日韩精品一区第一页| 91久久精品日日躁夜夜躁欧美| 国产精品三级av| 国产91精品精华液一区二区三区 | 亚洲国产高清aⅴ视频| 久久草av在线| 日韩一区二区在线观看视频播放| 亚洲综合在线第一页| 色婷婷综合久久久久中文| 亚洲国产精品精华液2区45| 国产原创一区二区| 日韩一二三四区| 蜜臀久久99精品久久久久久9| 欧美日韩一区二区欧美激情| 一区二区三区四区五区视频在线观看 | 91网上在线视频| 国产精品美女www爽爽爽| 国产成人99久久亚洲综合精品| 久久综合狠狠综合久久激情| 久久av老司机精品网站导航| 精品999久久久| 国产乱码精品一区二区三| 国产日韩三级在线|