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

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

?? mac.c

?? 關于DM9161E在SEP4020上的應用
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*********************************************************************** 
 * $Workfile:   mac.c  $ 
 * $Revision: 1.1.1.1 $ 
 * $Author:      asic $ 
 * $Date: 2008/06/23 $ 
 * 
 * Project:     EPOS-Nucleus-Net
 * 
 * Description: 
 *     mac driver   
 *
 * Revision History: 
 * 
 *********************************************************************** 
 * 
 *  Copyright (c) 2008 ASIC
 * 
 *  All rights reserved 
 * 
 **********************************************************************/

#include "ostype.h"
#include "mac.h"
#include "net/inc/externs.h"
//#include "hardware_reg.h"  
#include "hardware_intc.h"  
#include "sep4020.h"
#include "NUCLEUS.H"
#include "target.h"
#include "mem_defs.h"
//#include "uart_defs.h"
#include "DM9161AE.h"
#include "def.h"

extern UINT8   NETI_MAC_Address[1][6];
#define DEBUG 0
#define DEBUG2 1
#define debug_phy_loopback 0
#define debug_mac_loopback 0
#define TIMER_LOAD_VAL 0xffffffff

#define IP_ALEN  4              /* number of bytes in an IP address */
#define ETH_ALEN 6              /* number of bytes in an ETHERNET address */
#define TOK_ALEN 6              /* number of bytes in a Token Ring address */
#define LL_ALEN  6              /* number of bytes in a Link Layer address */
                                /* (token ring or ethernet)   */
#define ETHERSIZE  1514   /* maximum number of bytes in ETHERNET packet */
                          /* (used by ethernet drivers)   */
#if 0                         
struct _ether 
{
    UINT8 eth_dest[ETH_ALEN];    /* where the packet is going  */
    UINT8 eth_source[ETH_ALEN];  /* who it came from           */
    UINT16 eth_type;              /* Ethernet packet type for 802.3 */
                                /* or length of (IP layer + LLC,SNAP) if 802.2   */
};
#endif

#define HW_Address_Size     6     /* Length of Ethernet Addresses           */
#define TYPE_LENGTH         2     /* Length of Header Type/Length Field     */  
#define MTU_Size            1500  /* MAX Transmission Unit, excluding media */
                                  /*  header length for ethernet            */

/* Ethernet header size:  dest addr, source addr, Type/Length               */
#define ETH_HeaderSize      ((HW_Address_Size * 2) + TYPE_LENGTH)

static UINT32 timestamp;    //計時變量
static UINT32 lastdec;
UINT32 time_count;         //計數時間值
UINT16 delay_time_flage;   //計數標志位
UINT32 dis_address;        //回顯地址

UINT32 Tx_count;           //發送描述符的索引號
UINT32 Rx_count;           //接收描述符的索引號
NU_HISR  Mac_Xmit;
NU_HISR  Mac_Rcv;
//#define  MAC_TXRAM    0x30200000
//#define  MAC_RXRAM    0x30220000
#define  Max_Frame_Len 1536
CHAR    TEMP_BUF_T[2000];
CHAR    TEMP_BUF_R[2000];
int     Hisr_Activated;
//volatile UINT32 et_data_ptr;
//volatile UINT32 et_data_len;
#if DEBUG
UINT32 debug_receive[64];
UINT32 debug_send[64];
UINT32 debug_rxdress[64];
#endif
//int      Hisr_Activated = 0;
VOID Mac_TxHisr();
VOID Mac_RxHisr();
STATUS Mac_Transmit(DV_DEVICE_ENTRY *dev, NET_BUFFER *buf_ptr);
STATUS Mac_Receive();
STATUS Mac_Ioctl(DV_DEVICE_ENTRY *dev, INT option, DV_REQ *d_req);


#define MAC_ISR_TXB		0x00000001
#define MAC_ISR_TXE		0x00000002
#define MAC_ISR_RXB 	0x00000004
#define MAC_ISR_RXE		0x00000008
#define MAC_ISR_BUSY	0x00000010
#define MAC_ISR_TXC 	0x00000020
#define MAC_ISR_RXC		0x00000040

#define NEW_WAIT 1

#define DISPLAY_ERROR   0   /* display error during interrupt */
#define DEBUG_RING      0
#define DEBUG_NIC       1


/* ********************************************************************   */
#define ETHER_MIN_LEN   64                  /* includes header */
#define CRC_LEN         4
#define ETHER_MAX_LEN   (ETHERSIZE+CRC_LEN)       /* includes header */


#define EROUND  ((sizeof(struct _ether) + 3) & ~3)
#define EOFF    (EROUND - sizeof(struct _ether))

//NE2000_SOFTC KS_FAR ne2000softc[1];
extern KS_CONSTANT UINT8 KS_FAR test_pattern[32];

//該程序是為發送數據造一個MAC幀 前面6個字節為目的幀的MAC地址 后六個字節為發送MAC的地址 接著為數據 
/*void packet_creat(U32 len)
{
	U32 i;
//	U32 count1=0;
	U8 *point;
	U8 *p = (U8 *)malloc(sizeof(char)*len);  	//SET A NEW MEMERY ROOM
	point=p;
	
	if(p == NULL) exit(1);
	memset(p,0x00,sizeof(char)*len);  			//INITIAL THE DEFAULT VALUE
	i = 0;
	// set random mac address
	//for(i=0;i<6;i++)p[i] = 0xFF;   				//broadcast address
	p[i++]=0x00;
	p[i++]=0x16;
	p[i++]=0xd3;
	p[i++]=0x46;
	p[i++]=0x68;
	p[i++]=0xfe;
	for(i=6;i<12;i++)p[i] = 0x0E;  				//source address
	// set packet length
	*(RP16)(p + 12) = len-14;
    
	for(i=14;i<len;i++)
	 {
	  p[i] = 0xaa;
	  count1++;
	 }
	 
	for(i=0;i<len;i++)
	{
	    *(RP8)(MAC_TXRAM+i)=*point++;//test[i];
	}
}
*/
UINT32 get_timer_masked()
{
	UINT32 now = read_reg(TIMER_T2CCR);

	if (lastdec >= now) {
		/* normal mode */
		timestamp += lastdec - now;
	} else {
		/* we have an overflow ... */
		timestamp += lastdec + TIMER_LOAD_VAL - now;
	}
	lastdec = now;

	return timestamp;
}

void Timer2_init(void)
{
	write_reg(TIMER_T2LCR, TIMER_LOAD_VAL);
	write_reg(TIMER_T2CR, 0x16);
	*(RP)(TIMER_T2CR) |= 0x01;
	lastdec = TIMER_LOAD_VAL;
	timestamp = 0;
}

UINT32 get_timer (UINT32 base)
{
	return get_timer_masked () - base;
}


void reset_timer_masked (void)
{
	/* reset time */
	lastdec = TIMER_T2CCR;
	timestamp = 0;
}

STATUS Mac_Initialize(DV_DEVICE_ENTRY *dev_ptr)
{

	STATUS 	status;
	UINT32  Tx_BD_Num;
	UINT32 i,j;
	UINT16 Phy_BMCR;
//#if debug_phy_loopback
	UINT16 New_Phy_BMCR;
//#endif
	UINT32 Mac_CTLR;
	UINT32 Mac_CTLR_READ;
	UINT32 Adress;
	VOID 	*pointer;
	/*設備初始化,初始化設備結構中相應的指針*/
	/* Fill in the device table */
    dev_ptr->dev_output     = NET_Ether_Send;   /* net.c */
    dev_ptr->dev_input      = NET_Ether_Input;  /* net.c */
    dev_ptr->dev_start      = Mac_Transmit;
    dev_ptr->dev_receive    = Mac_Receive;
    dev_ptr->dev_addrlen    = HW_Address_Size;
    dev_ptr->dev_hdrlen     = ETH_HeaderSize;
    dev_ptr->dev_mtu        = MTU_Size;         /* 1500 */
    dev_ptr->dev_ioctl      = Mac_Ioctl;
    
    dis_address = 0x04000000;
    Tx_count = 0;
    Rx_count = 0;
    Hisr_Activated = 0;
	/*設置MAC地址,參考8019*/
	/* Allow reception of broadcast and multicast packets. */
    dev_ptr->dev_flags |= (DV_BROADCAST | DV_MULTICAST);

    /* CAM filter setting is done in api_MacHWInit routine */
    memcpy(dev_ptr->dev_mac_addr, (UINT8*)dev_ptr->dev_driver_options, 6);
    *(RP)MAC_ADDR1 = (UINT32)NETI_MAC_Address[0][0]<<8|(UINT32)NETI_MAC_Address[0][1];
    *(RP)MAC_ADDR0 = (UINT32)NETI_MAC_Address[0][2]<<24|(UINT32)NETI_MAC_Address[0][3]<<16|(UINT32)NETI_MAC_Address[0][4]<<8|(UINT32)NETI_MAC_Address[0][5];
	/*打開中斷屏蔽位*/
	
	*(RP)INTC_IMR |= (0x01<<INT_MAC);
	
	/*使能MAC內部中斷*/
	write_reg(MAC_INTMASK, 0x00);
	
	/*初始化接收發送描述符*/
	Tx_BD_Num = read_reg(MAC_TXBD_NUM);
	//write_reg(MAC_TXBD_NUM,0x1);
	for(i=0;i<Tx_BD_Num;i++)
    {
	  write_reg((MAC_BD+i*8), 0x00);
	  write_reg((MAC_BD+i*8+4), 0x00);
	}		
	
	for(i=0;i<128-Tx_BD_Num;i++)
    {
	  write_reg(((MAC_BD+Tx_BD_Num*8)+i*8), 0x00);
	  write_reg(((MAC_BD+Tx_BD_Num*8)+i*8+4), 0x00);
	}
	
	for(i=0;i<128-Tx_BD_Num;i++)
    {
	  if (i == ((128-Tx_BD_Num) - 1))
		  	write_reg(((MAC_BD+Tx_BD_Num*8)+ i*8), 0xe000);
	  	else
		  	write_reg(((MAC_BD+Tx_BD_Num*8)+ i*8), 0xc000);
	#if DEBUG
	for( j=0;j<64;j++)                     //調試
	{
	   Adress = MAC_BD+Tx_BD_Num*8+ j*8;
	  debug_receive[j] = read_reg(Adress);
	  }
	 #endif
	}
	
	//分配64個發送和64個接收描述符的內存緩沖區
	for(i = 0; i < 128-Tx_BD_Num;i++)
	{
	  	
      if(NU_Allocate_Memory (&System_Memory, (VOID **)&pointer,
                          Max_Frame_Len, NU_NO_SUSPEND)!=NU_SUCCESS)
      {
      	while(1);
      }
      write_reg(((MAC_BD+Tx_BD_Num*8)+ i*8 + 4),(U32)pointer);
       Adress = read_reg((MAC_BD+Tx_BD_Num*8)+ i*8 + 4); 	
      #if DEBUG
	for( j=0;j<64;j++)                     //調試
	{
	  Adress = MAC_BD+Tx_BD_Num*8+ j*8 +4;
	  debug_rxdress[j] = read_reg(Adress);
	  }
	 #endif	
    }

	for(i = 0;i < Tx_BD_Num; i++)
	{
		if(NU_Allocate_Memory (&System_Memory, (VOID **)&pointer,
                          Max_Frame_Len, NU_NO_SUSPEND)!=NU_SUCCESS)
	      {
	      	while(1);
	      }
	      write_reg(((MAC_BD + 4) + i*8),(U32)pointer );			
    } 
    
	//清除MAC_CTLR寄存器
	write_reg(MAC_CTRL, 0x0000);
	Mac_CTLR = 0x00;
	/*初始化PHY,并通過PHY的狀態自適應獲得的狀態來設置MAC*/
	
	status = NetNIC_PhyInit();
/*#if debug_phy_loopback
#else
	if(status != NET_PHY_ERR_NONE)
	{
	//PHY link down
		return status;
	}
#endif	*/
/*	Phy_BMCR = NetNIC_PhyRegRd(PHY_ADDR, DM9161AE_BMCR);
	
	if(Phy_BMCR & 0x2000)
		Mac_CTLR |= 0x0800;
	else Mac_CTLR &= ~0x0800;
	
	if(Phy_BMCR & 0x0100)
		Mac_CTLR |= 0x0400;
	else Mac_CTLR &= ~0x0400;*/
#if debug_phy_loopback
	Phy_BMCR |= 0x4100;
	Phy_BMCR &= ~0x3000;
	NetNIC_PhyRegWr(PHY_ADDR, DM9161AE_BMCR, Phy_BMCR);
	New_Phy_BMCR = NetNIC_PhyRegRd(PHY_ADDR, DM9161AE_BMCR);
	if(New_Phy_BMCR != Phy_BMCR)
		return -1;
#else 
    Phy_BMCR = 0x0100;
	Phy_BMCR &= ~0x3000;
	NetNIC_PhyRegWr(PHY_ADDR, DM9161AE_BMCR, Phy_BMCR);
	New_Phy_BMCR = NetNIC_PhyRegRd(PHY_ADDR, DM9161AE_BMCR);
	if(New_Phy_BMCR != Phy_BMCR)
		return -1;
#endif
//status = NetNIC_PhyAutoNeg();


#if debug_mac_loopback
	Mac_CTLR = 0xaaa3;
	//Mac_CTLR = 0xaea7;
#else
	//Mac_CTLR |= 0xa02b;
	Mac_CTLR = 0xa803;
	Mac_CTLR &= ~0x0800;
#endif
	/*配置MAC控制寄存器*/
	write_reg(MAC_CTRL, Mac_CTLR);
	Mac_CTLR_READ = read_reg(MAC_CTRL);
	
	//打開中斷
	
	*(RP)INTC_IMR &= ~(0x01<<INT_MAC);
	write_reg(MAC_INTMASK, 0x7f);
	/*創建發送和接收數據HSR*/
	/* Create the HISR for receiving packets from the MAC */
    status = NU_Allocate_Memory (&System_Memory,
                                 &pointer,
                                 2000,
                                 NU_NO_SUSPEND);
    if (status != NU_SUCCESS)
    {
        return (-2);
    }

    status = NU_Create_HISR (&Mac_Rcv, "MAC_RX_HISR",
                             Mac_RxHisr,
                             0, pointer, 2000);
   
    if (status != NU_SUCCESS)
    {
        return (-3);
    }

    /* Create the HISR for transmitting packets */
    status = NU_Allocate_Memory (&System_Memory,
                                 &pointer,
                                 2000,
                                 NU_NO_SUSPEND);
    if (status != NU_SUCCESS)
    {
        return (-4);
    }

    status = NU_Create_HISR (&Mac_Xmit, "MAC_TX_HISR",
                              Mac_TxHisr,
                              0, pointer, 2000);
    if (status != NU_SUCCESS)
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品免费一二三区| 蜜臀精品一区二区三区在线观看| 日本高清不卡一区| 精品精品国产高清a毛片牛牛| 欧美一级一区二区| 中文字幕在线观看不卡视频| 奇米一区二区三区av| 一本大道av伊人久久综合| 久久久久久97三级| 国产日韩欧美高清| 日本欧美一区二区在线观看| 欧美伊人久久大香线蕉综合69 | 1000部国产精品成人观看| 视频在线观看一区二区三区| 99精品视频在线观看| 2020国产精品自拍| 另类小说一区二区三区| 欧美日韩三级一区二区| 亚洲最色的网站| 北岛玲一区二区三区四区| 日本乱人伦aⅴ精品| 国产精品卡一卡二卡三| 一区二区视频免费在线观看| 成人激情电影免费在线观看| 国产日产欧美一区二区视频| 亚洲欧美视频一区| 91网站最新地址| 日韩免费性生活视频播放| 香蕉成人啪国产精品视频综合网| 久久99精品视频| 成a人片亚洲日本久久| 欧美经典一区二区三区| 国产在线精品免费| 国产午夜三级一区二区三| 国产91精品久久久久久久网曝门| voyeur盗摄精品| 蜜桃视频第一区免费观看| 国产91精品欧美| 国产精品国产三级国产三级人妇 | 这里只有精品视频在线观看| 亚洲大片精品永久免费| 5858s免费视频成人| 国产精品你懂的在线欣赏| 成人黄色免费短视频| 亚洲毛片av在线| 9191国产精品| 国产麻豆91精品| 中文字幕在线播放不卡一区| 91热门视频在线观看| 久久久亚洲精品一区二区三区| 亚洲综合在线电影| 欧美一区二区在线观看| 国产精品88av| 亚洲同性同志一二三专区| 欧美视频一区二区| 捆绑紧缚一区二区三区视频| 欧美日韩在线一区二区| 国产精品麻豆久久久| 欧美亚洲自拍偷拍| 久久成人羞羞网站| 中文字幕制服丝袜成人av | 6080亚洲精品一区二区| 久久精品国产亚洲5555| 国产精品美女一区二区在线观看| 另类调教123区| 亚洲国产电影在线观看| 色综合久久中文综合久久牛| 26uuu欧美| 精品一区二区免费视频| 亚洲日本在线视频观看| 欧美一区二区视频在线观看2020| 偷拍自拍另类欧美| 亚洲国产精华液网站w| 欧美在线免费观看亚洲| 国产精品 日产精品 欧美精品| 精品国产乱子伦一区| 91网站视频在线观看| 国内外成人在线视频| 亚洲aaa精品| 中文字幕一区二区三区四区| 91视频一区二区三区| 久久se精品一区二区| 午夜精品久久久久久久99樱桃| 欧美性色黄大片手机版| 国产成人精品综合在线观看| 日韩国产精品久久| 亚洲一区二区三区视频在线播放| 欧美性受xxxx| 成人黄色免费短视频| 亚洲精品欧美综合四区| 国产三级久久久| 久久这里只有精品视频网| 欧美精品在欧美一区二区少妇| 日韩一区精品字幕| 一区二区三区在线高清| 中文字幕在线一区免费| 在线一区二区三区四区五区 | 亚洲国产成人私人影院tom| 亚洲国产高清不卡| 亚洲精品在线观看网站| 成人av网站大全| 国产成人自拍在线| 国产一区二区三区在线观看免费视频| 欧美国产精品专区| 久久免费电影网| 色综合中文字幕国产| 国产一区二三区| 亚洲天堂精品在线观看| 国产精品久久久久久久久果冻传媒 | 日韩精品一区二| 欧美一区在线视频| 日韩一区二区三区电影在线观看| 国产91清纯白嫩初高中在线观看| 亚洲欧洲日韩av| 亚洲欧美一区二区在线观看| 亚洲日本在线a| 亚洲精选视频免费看| 一区二区三区久久| 精品国产不卡一区二区三区| 成人av免费观看| 国产91丝袜在线播放0| 丰满亚洲少妇av| 91浏览器在线视频| 激情小说欧美图片| 亚洲一级片在线观看| 日韩中文字幕av电影| 免费看日韩a级影片| 国产老妇另类xxxxx| 亚洲一区二区在线观看视频| 午夜欧美在线一二页| 久久国产人妖系列| 国产宾馆实践打屁股91| www.亚洲激情.com| 欧美无人高清视频在线观看| 国产成人在线视频播放| 97精品超碰一区二区三区| 欧美自拍偷拍午夜视频| 日韩欧美成人午夜| 欧美激情一区在线| 亚洲福利电影网| 精品一区二区在线视频| 成人av影院在线| 国产米奇在线777精品观看| 日韩黄色免费电影| 精品一区二区在线观看| 94色蜜桃网一区二区三区| 欧美丰满嫩嫩电影| 国产欧美一区二区三区网站| 精品日韩成人av| 亚洲女子a中天字幕| 久久超级碰视频| 91天堂素人约啪| 色视频一区二区| 亚洲精品一区二区三区四区高清| 欧美理论电影在线| 国产精品网友自拍| 日本aⅴ亚洲精品中文乱码| 亚洲午夜一区二区| 国产不卡视频一区二区三区| 宅男噜噜噜66一区二区66| 欧美丰满嫩嫩电影| 91精品国产欧美一区二区18| 国产精品你懂的在线欣赏| 麻豆成人av在线| 99re成人精品视频| 久久精品人人做人人综合| 亚洲高清久久久| 一本色道久久综合亚洲aⅴ蜜桃 | 男人的j进女人的j一区| 九一九一国产精品| 欧美在线999| 日韩一区日韩二区| 国产精品中文欧美| 日韩欧美123| 日韩不卡免费视频| 欧美日韩国产一二三| 91精品久久久久久久久99蜜臂| 欧美日韩成人综合天天影院 | 精品久久久影院| 亚洲大尺度视频在线观看| 99久久免费精品| 欧美激情一区二区三区四区| 亚洲欧洲精品一区二区三区不卡| 亚洲美腿欧美偷拍| 成人综合婷婷国产精品久久蜜臀 | 国产精品免费视频一区| 亚洲人亚洲人成电影网站色| 国产91高潮流白浆在线麻豆| 99久久精品国产毛片| 国产欧美一区二区三区网站 | 成人aa视频在线观看| 久久久久97国产精华液好用吗| 国产精品不卡一区二区三区| 亚洲在线免费播放| 在线视频国产一区| 亚洲女爱视频在线| 麻豆精品一区二区三区| 欧美一级艳片视频免费观看| 中文字幕乱码亚洲精品一区| 国产成+人+日韩+欧美+亚洲|