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

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

?? lan8xx.c

?? 這是單板上DPRAM的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* @(#) pSOSystem PowerPC/V2.2.2: bsps/e360/src/lan360.c (mpc8xx) 2.30 97/10/15 09:35:51 */
/***********************************************************************/
/*                                                                     */
/*   MODULE:  bsps/devices/lan/lan8xx.c                                */
/*   DATE:    97/10/15                                                 */
/*   PURPOSE: Ethernet driver for the MPC8xx SCC1                      */
/*                                                                     */
/*---------------------------------------------------------------------*/
/*                                                                     */
/*           Copyright 1991 - 1997, Integrated Systems, Inc.           */
/*                      ALL RIGHTS RESERVED                            */
/*                                                                     */
/*   Permission is hereby granted to licensees of Integrated Systems,  */
/*   Inc. products to use or abstract this computer program for the    */
/*   sole purpose of implementing a product based on Integrated        */
/*   Systems, Inc. products.   No other rights to reproduce, use,      */
/*   or disseminate this computer program, whether in part or in       */
/*   whole, are granted.                                               */
/*                                                                     */
/*   Integrated Systems, Inc. makes no representation or warranties    */
/*   with respect to the performance of this computer program, and     */
/*   specifically disclaims any responsibility for any damages,        */
/*   special or consequential, connected with the use of this program. */
/*                                                                     */
/***********************************************************************/
#include "bsp.h"
#include "board.h"
#include <bspfuncs.h>
#include <pna.h>
#include <pna_mib.h>
#include <psos.h>
#include <string.h>
#include <lan/lan8xx.h>
#include <lan_mib.h>
#include <icontrol/mpc8xx.h>

#ifndef CPM_CMD
#define SPLX(A) { unsigned long ilev=splx(1); A; splx(ilev); }
#define CPM_CMD(t) {\
    unsigned long old=splx(1);    \
    while ((S_CP_CommandReg& SEMAPHORE_FLAG) == SEMAPHORE_FLAG);  \
    S_CP_CommandReg =t|SEMAPHORE_FLAG;  \
    splx(old);  \
    while ((S_CP_CommandReg& SEMAPHORE_FLAG) == SEMAPHORE_FLAG);  }
#endif

/*---------------------------------------------------------------------*/
/* The Ethernet hardware address can be changed in the startup dialog  */
/*---------------------------------------------------------------------*/
extern unsigned char EthernetAddress[6];  /* defined in bpdialog.c */

#if ((BSP_LAN1_FLAGS) & (IFF_MULTICAST))
    extern struct MCTable_struct lan_mcast; /* Multicast address table */
#endif

extern ULONG NrTxBds;            /* Number of transmit BDs */
extern ULONG NrTxHdrs;           /* Number of transmit headers */
extern TX_HDR TxHeaders[];       /* The actual headers */

/*---------------------------------------------------------------------*/
/* Global Variables                                                    */
/*---------------------------------------------------------------------*/
unsigned char RxBuffs[RXSIZE * NR_RXBUFFS];
#ifdef USE_UNCACHE_SECTION
#pragma use_section UNCACHE RxBuffs
#else
ULONG DummyVar;
#endif

TX_HDR *TxhFreeHead;             /* Free list of transmit headers */
TX_HDR *TxhOutHead, *TxhOutTail; /* Head, tail of hdrs awaiting BDs */
RX_BUFF *RxbFreeHead;      	 /* Head of free list */

/*---------------------------------------------------------------------*/
/* Miscellaneous variables                                             */
/*---------------------------------------------------------------------*/
ULONG TxFreeBDs;           	 /* # of free transmit BDs */
static long   If_Num;            /* interface number (assigned by pNA) */
static HWA    OurAddress;        /* our Ethernet address */
static UINT   pSOS_Is_Up;        /* TRUE if pSOS has been initialized */
static struct ni_funcs Ni_funcs; /* pNA functions (esballoc, freemsg) */
static long (*Announce)(ULONG, char *, ULONG, ULONG, char *, char *);

static BuffDescType *RxNewPtr;   /* ptr to next Rx BD to become full */
static BuffDescType *RxUsedPtr;  /* ptr to next Rx BD needing buffer */
BuffDescType *TxNewPtr;  	 /* ptr to next Tx BD to transmit with */
BuffDescType *TxUsedPtr; 	 /* ptr to next Tx BD to reclaim */

BuffDescType *TxLastBdPtr; 	 /* ptr to last allocated Tx BD */
BuffDescType *RxLastBdPtr; 	 /* ptr to last allocated Rx BD */
BuffDescType *TxFirstBdPtr; 	 /* ptr to first allocated Tx BD */
BuffDescType *RxFirstBdPtr; 	 /* ptr to first allocated Rx BD */

/*---------------------------------------------------------------------*/
/* MIB-Related Variables                                               */
/* inerrors    - # of frames received with errors.                     */
/* outerrors   - # of frames not transmitted due to errors.            */
/* outdiscards - # of frames not transmitted due to lack of resources  */
/* Postponed   - # of frames placed on the transmit queue (i.e. not    */
/*               enough BDs to transmit).                              */
/* CopyFallBack - # of frames which reverted from zero copy to copying */
/*                the tail end due to low BDs (or frames with more     */
/*                buffers than Tx BDs configured in the system).       */
/* CopiedBytes  - # of bytes actually copied for CopyFallBack frames.  */
/* CopiedBuffers- # of buffers copied for the CopyFallBack frames.     */
/*---------------------------------------------------------------------*/
mib_stat MG_stat;
long inerrors, outerrors, outdiscards;
unsigned long Postponed, CopyFallBack, CopiedBytes, CopiedBuffers;

/***********************************************************************/
/* NI Function Prototypes                                              */
/***********************************************************************/
static void  InitSCC1(void);
static void  InitBuffers(void);
static long  ni_init(long (*ap_addr)(ULONG, char *, ULONG, ULONG,
    char *, char *), long if_num, struct ni_funcs *funcs);
static void  ReturnBuffer(RX_BUFF *env_ptr);
void  ni_send(char *hwa_p, char *pkb_p, USHORT size, USHORT type);
static UINT  ni_isr(void);
static void  ReceivePackets(void);
static void  AssignRxBuffers(void);
static void  FillTxBDs(void);
static void  AddTxBuffer(void *addr, USHORT status, USHORT len);
static void  ReclaimTxFrames(void);
static void  CleanUpTx(void);
void  ni_pna_init(void);
#if ((BSP_LAN1_FLAGS) & (IFF_MULTICAST))
    long lan_lookup_mcast(UCHAR *addr);
    ULONG lan_add_mcast(UCHAR *addr);
    ULONG lan_del_mcast(UCHAR *addr);
#endif
static void clear(volatile void *ptr, ULONG size);

extern ULONG ni_ioctl(ULONG if_num, long net_type, ULONG cmd, long *arg);
extern UCHAR *dpram_alloc(UINT, UINT);
extern void dpram_dealloc(UINT, UCHAR *, UINT);

/***********************************************************************/
/* NI Local Function Definitions                                       */
/***********************************************************************/

/***********************************************************************/
/*    InitSCC1: Initialize the SCC1 in Ethernet mode.                  */
/*                                                                     */
/*        NOTE: Initializes everything related to SCC1 except the      */
/*              receive and transmit buffer descriptors.               */
/*                                                                     */
/*              This must be called after TxFirstBdPtr and             */
/*              RxFirstBdPtr are initialized.                          */
/***********************************************************************/
static void InitSCC1(void)
{
ULONG tmp_long, i;

/*---------------------------------------------------------------------*/
/* Disable the transmitter and receiver.                               */
/*---------------------------------------------------------------------*/
E_SCC1GenModeReg_h = E_SCC1GenModeReg_l = 0;

#if ADS8xx
/*---------------------------------------------------------------------*/
/* Configure port A to enable the TXD1, RXD1, CLK1, and CLK2 pins.     */
/*---------------------------------------------------------------------*/
E_PortAPinAssgmntReg |=  (BIT9 | BIT8 | BIT1 | BIT0);
E_PortADataDirReg    &= ~(BIT9 | BIT8 | BIT1 | BIT0);
E_PortAOpenDrainReg  &= ~BIT1;

#elif SBC8xx 

S_PortAPinAssgmntReg |=  (PA15 | PA14 | PA7 | PA6);
S_PortADataDirReg    &= ~(PA15 | PA14 | PA7 | PA6);
S_PortAOpenDrainReg  &= ~PA14;
#endif /* ADS8xx */

#if (ADS8xx || SBC8xx)
/*---------------------------------------------------------------------*/
/* Configure port C to enable !CTS1(CLSN) and !CD1(RENA).              */
/*---------------------------------------------------------------------*/
E_PortCPinAssgmntReg  &= ~(BIT5 | BIT4);
E_PortCDataDirReg     &= ~(BIT5 | BIT4);
E_PortCSpecialOptsReg |=  (BIT5 | BIT4);

#elif MBX8xx

/*---------------------------------------------------------------------*/
/* Configure port A to enable the TXD1, RXD1                           */
/*---------------------------------------------------------------------*/
E_PortAPinAssgmntReg |=  (PA14 | PA15);
E_PortADataDirReg    &= ~(PA14 | PA15);
E_PortAOpenDrainReg  &= ~PA14;
 
/*---------------------------------------------------------------------*/
/* Configure port C to enable !CTS1(CLSN), CD1(RXEN)                   */
/*---------------------------------------------------------------------*/
E_PortCPinAssgmntReg  &= ~(PC10 | PC11);
E_PortCDataDirReg     &= ~(PC10 | PC11);
E_PortCSpecialOptsReg |=  (PC10 | PC11);
 
/*---------------------------------------------------------------------*/
/* Configure port A to enable the CLK2, and CLK4 pins.                 */
/*---------------------------------------------------------------------*/
E_PortAPinAssgmntReg |=  (PA4 | PA6);
E_PortADataDirReg    &= ~(PA4 | PA6);
#endif /* (ADS8xx || SBC8xx) */

#ifdef	ADS8xx
/*---------------------------------------------------------------------*/
/* The MC68160 has a few more things that have to be done.  Here is a  */
/* list of other pins that need to be set up.                          */
/*                                                                     */
/*   Port C Bit 2  -> MC68160 CS2 pin   - Set to 0 per documentation.  */
/*   Port C Bit 7  -> MC68160 Aport pin - Set to 1 to auto select the  */
/*                                        Twisted Pair/AUI Port        */
/*   Port C Bit 11 -> MC68160 Loop pin  - Set to 0 for !diag mode      */
/*---------------------------------------------------------------------*/
E_PortCPinAssgmntReg  &= ~(BIT9 | BIT10 | BIT11);
E_PortCDataDirReg     |=  (BIT9 | BIT10 | BIT11);
E_PortCSpecialOptsReg &=  ~(BIT9 | BIT10 | BIT11);
E_PortCDataReg        |=  BIT9;
E_PortCDataReg        |=  BIT10;
E_PortCDataReg        &=  ~(BIT11);
#endif  /* ADS8xx */

#ifdef MBX8xx
/*---------------------------------------------------------------------*/
/* Connect the CLK2 and CLK4 pins to SCC1 as the transmit and receive  */
/* clocks, respectively.                                               */
/*---------------------------------------------------------------------*/
tmp_long = E_SI_ClockRouteReg;
tmp_long &= ~0xFF;
E_SI_ClockRouteReg = tmp_long | 0x3d;
E_SDMAConfigReg = 0x1;
#endif

#if (ADS8xx || SBC8xx)
/*---------------------------------------------------------------------*/
/* Connect the CLK1 and CLK2 pins to SCC1 as the transmit and receive  */
/* clocks, respectively.                                               */
/*---------------------------------------------------------------------*/
tmp_long = E_SI_ClockRouteReg;
tmp_long &= ~0xFF;
E_SI_ClockRouteReg = tmp_long | 0x2C;
#endif

/*---------------------------------------------------------------------*/
/* Setup SCC1 parameter RAM common to all protocols.                   */
/*---------------------------------------------------------------------*/
RxBDBaseAddr(E_SCC1_BASE) = E_BuffDescOffset(RxFirstBdPtr);
TxBDBaseAddr(E_SCC1_BASE) = E_BuffDescOffset(TxFirstBdPtr);
RxFunctionCode(E_SCC1_BASE)  = MOT + DMA_SPACE;
TxFunctionCode(E_SCC1_BASE)  = MOT + DMA_SPACE;
MaxRxBufferLgth(E_SCC1_BASE) = 1520;

/*---------------------------------------------------------------------*/
/* Setup SCC1 parameter RAM Ethernet-specific parameters.              */
/*---------------------------------------------------------------------*/
ETHER(E_SCC1_BASE).c_pres = 0xFFFFFFFF;
ETHER(E_SCC1_BASE).c_mask = 0xDEBB20E3;
ETHER(E_SCC1_BASE).crc_err_cntr = 0;
ETHER(E_SCC1_BASE).align_err_cntr = 0;
ETHER(E_SCC1_BASE).dis_frame_cntr = 0;
ETHER(E_SCC1_BASE).pads = 0x8888;
ETHER(E_SCC1_BASE).retry_limit = 15;
ETHER(E_SCC1_BASE).max_frame_lgth = 1518;
ETHER(E_SCC1_BASE).min_frame_lgth = 64;
ETHER(E_SCC1_BASE).max_dma1_lgth = 1518;
ETHER(E_SCC1_BASE).max_dma2_lgth = 1518;

/*---------------------------------------------------------------------*/
/* Enable recption of all multicast addresses, if the lan driver is    */
/* configured to do multicasting. The hash table in the 68360 seemed   */
/* to correctly handle some addresses, but not others.                 */
/*---------------------------------------------------------------------*/
#if (BSP_LAN1_FLAGS & IFF_MULTICAST)
    ETHER(E_SCC1_BASE).gaddr1 = 0xFFFF;
    ETHER(E_SCC1_BASE).gaddr2 = 0xFFFF;
    ETHER(E_SCC1_BASE).gaddr3 = 0xFFFF;
    ETHER(E_SCC1_BASE).gaddr4 = 0xFFFF;
#else
    ETHER(E_SCC1_BASE).gaddr1 = 0;
    ETHER(E_SCC1_BASE).gaddr2 = 0;
    ETHER(E_SCC1_BASE).gaddr3 = 0;
    ETHER(E_SCC1_BASE).gaddr4 = 0;
#endif

/*---------------------------------------------------------------------*/
/* Write our Ethernet address to the parameter RAM in reverse byte     */
/* order.                                                              */
/*---------------------------------------------------------------------*/
for (i = 0; i < 6; ++i)
    ((char *)&ETHER(E_SCC1_BASE).paddr1_h)[5 - i] = OurAddress.byte[i];

ETHER(E_SCC1_BASE).p_per = 0;
ETHER(E_SCC1_BASE).iaddr1 = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品午夜免费| 国产乱码精品一区二区三区忘忧草| 国产成人一区在线| 欧美国产精品中文字幕| 蓝色福利精品导航| 日韩美女视频一区二区在线观看| 久草这里只有精品视频| 久久久蜜桃精品| 丁香五精品蜜臀久久久久99网站| 欧美韩日一区二区三区四区| 99re热这里只有精品视频| 国产精品久久久久影院| av福利精品导航| 一区二区三区在线观看欧美| 91欧美激情一区二区三区成人| 亚洲欧美日韩系列| 99久久夜色精品国产网站| 亚洲自拍都市欧美小说| 欧美日韩精品欧美日韩精品| 精品亚洲国产成人av制服丝袜| 久久精品亚洲乱码伦伦中文| 色婷婷综合久久久久中文 | 中文字幕日韩精品一区| 91久久香蕉国产日韩欧美9色| 丝袜国产日韩另类美女| 国产亚洲精品超碰| 欧美三级一区二区| 国产精品资源在线| 亚洲一区二区三区在线播放| 欧美xxxxx裸体时装秀| 成人黄色在线看| 日韩精品一二三区| 中文字幕欧美日本乱码一线二线| 欧美亚洲综合一区| 国产盗摄视频一区二区三区| 亚洲午夜三级在线| 国产精品视频第一区| 日韩一级黄色片| 国产suv精品一区二区883| 亚洲福利视频一区二区| 国产精品国模大尺度视频| 日韩欧美久久久| 欧美伊人久久久久久午夜久久久久| 国产精品自拍av| 午夜精品国产更新| 国产精品日产欧美久久久久| 在线不卡a资源高清| 91丨九色porny丨蝌蚪| 国产精品综合二区| 另类欧美日韩国产在线| 国产日韩欧美高清在线| 日韩免费高清av| 91免费看视频| 肉色丝袜一区二区| 日韩一级在线观看| 色综合天天综合网天天看片| 国产高清精品在线| 久久精品二区亚洲w码| 午夜欧美一区二区三区在线播放| 综合久久久久久久| 中文字幕+乱码+中文字幕一区| 欧美一区三区四区| 精品视频在线视频| 欧美中文字幕亚洲一区二区va在线| 成人天堂资源www在线| 国产成人一区在线| 国产成人综合亚洲网站| 国产一区二区不卡在线| 精品在线免费观看| 久久国产夜色精品鲁鲁99| 日本三级韩国三级欧美三级| 日本不卡一区二区三区| 天堂成人免费av电影一区| 美女一区二区视频| 日本成人在线一区| 日本中文一区二区三区| 日韩国产在线一| 日韩综合在线视频| 免费不卡在线观看| 麻豆精品国产91久久久久久| 美女脱光内衣内裤视频久久网站| 日韩福利视频网| 另类小说色综合网站| 韩国成人精品a∨在线观看| 久久精品国产第一区二区三区| 美女免费视频一区二区| 男人操女人的视频在线观看欧美| 水蜜桃久久夜色精品一区的特点| 三级影片在线观看欧美日韩一区二区| 偷拍亚洲欧洲综合| 精品一区二区三区香蕉蜜桃| 国产精品一区二区久久精品爱涩| 国产夫妻精品视频| 91免费国产在线观看| 在线看不卡av| 欧美va亚洲va| 欧美国产欧美综合| 一区二区三区视频在线观看| 亚洲美女在线一区| 视频在线在亚洲| 国产一区美女在线| 白白色 亚洲乱淫| 欧美影视一区在线| 亚洲精品一区二区在线观看| 国产精品美女一区二区| 亚洲激情第一区| 男男成人高潮片免费网站| 国产毛片精品视频| 91丝袜高跟美女视频| 日韩欧美在线观看一区二区三区| 久久久99精品久久| 亚洲国产成人av网| 国产综合一区二区| 在线中文字幕一区二区| 欧美大片日本大片免费观看| 国产精品乱人伦中文| 夜夜操天天操亚洲| 激情六月婷婷久久| 色av综合在线| 久久蜜桃香蕉精品一区二区三区| 亚洲天天做日日做天天谢日日欢| 日韩激情一二三区| 91免费观看在线| 国产亚洲精品aa| 丝袜亚洲另类丝袜在线| 成人av影院在线| 三级影片在线观看欧美日韩一区二区| 国产精品一区二区在线播放| 欧美视频在线观看一区| 国产欧美综合在线| 麻豆国产精品一区二区三区| 91日韩在线专区| 精品国产一区二区在线观看| 亚洲午夜久久久| av影院午夜一区| 欧美精品三级在线观看| 国产精品高清亚洲| 国产一区二区三区四| 欧美精品自拍偷拍动漫精品| 亚洲欧美视频在线观看视频| 国产精品亚洲专一区二区三区| 欧美裸体一区二区三区| 国产精品二三区| 国产精品123区| 欧美成人一区二区三区| 婷婷久久综合九色综合伊人色| 99久久综合精品| 国产日韩精品一区二区三区在线| 日韩经典中文字幕一区| 欧美少妇bbb| 一区二区三区成人| 不卡一区二区在线| 国产精品久久久久久久浪潮网站| 日韩国产成人精品| 欧美日产国产精品| 亚洲一二三四久久| 91国产视频在线观看| 亚洲欧美一区二区三区极速播放| 久久99久久久久久久久久久| 在线免费亚洲电影| 国产精品久久久久久户外露出| 国产成人在线看| 国产女人18毛片水真多成人如厕| 美女一区二区在线观看| 日韩精品一区二区三区中文精品| 日本vs亚洲vs韩国一区三区二区| 欧美日韩亚洲丝袜制服| 亚洲午夜激情av| www.亚洲国产| 亚洲三级久久久| 一本久久a久久精品亚洲| 亚洲女人****多毛耸耸8| 色天使久久综合网天天| 亚洲一区二区三区小说| 欧美日韩一级片在线观看| 日韩精品乱码av一区二区| 欧美久久久久久久久| 乱中年女人伦av一区二区| 精品久久久久99| 懂色av一区二区三区免费观看| 国产精品久久福利| 91久久精品网| 日本欧美一区二区| 久久综合九色综合欧美98| 丁香婷婷综合激情五月色| 亚洲男人的天堂av| 欧美日韩国产首页| 韩国在线一区二区| 国产精品乱码妇女bbbb| 欧洲另类一二三四区| 蜜桃久久久久久| 国产精品美女一区二区在线观看| 在线观看一区二区精品视频| 免费av网站大全久久| 欧美国产精品一区二区三区| 在线亚洲高清视频| 美国三级日本三级久久99| 国产欧美一区二区精品忘忧草| 一本大道久久a久久精品综合| 亚洲妇熟xx妇色黄|