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

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

?? mac.c

?? 關于DM9161E在SEP4020上的應用
?? C
?? 第 1 頁 / 共 2 頁
字號:
        return (-5);
    }
    return 0;
    #if DEBUG2
    Timer2_init();     //調(diào)試延時
    delay_time_flage=0;
    
    #endif
}


VOID Mac_TxHisr()
{
	DV_DEVICE_ENTRY* device;
    STATUS  previous_int_value;
	
	/*獲得PHY設備指針*/
	device = DEV_Get_Dev_By_Name("SEP4020_MAC");
	
	
    if (device == NU_NULL)
        return;
    
    /*  Lock out interrupts.  */
    //previous_int_value = NU_Control_Interrupts(NU_DISABLE_INTERRUPTS);
    previous_int_value = NU_Control_Interrupts(NU_DISABLE_INTERRUPTS);
    DEV_Recover_TX_Buffers (device);

    /* If there is another item on the list, transmit it. */
    if(device -> dev_transq.head)
    {
        /*  Re-enable interrupts. */
        NU_Control_Interrupts(previous_int_value);

        /* Transmit the next packet. */
        Mac_Transmit(device, device->dev_transq.head);
    }

    /*  Re-enable interrupts. */
    NU_Control_Interrupts(previous_int_value);

}  /* MAC_TxHisr */

VOID Mac_RxHisr()
{
    /* Let the upper layer know a good packet is here. */
    NU_Set_Events(&Buffers_Available, (UNSIGNED)2, NU_OR);

    Hisr_Activated = 0;
}

STATUS Mac_Transmit(DV_DEVICE_ENTRY *dev, NET_BUFFER *buf_ptr)
{ 
	UINT32  length;	  /* The length of a packet*/
	CHAR	*FramePtr;
	UINT32  Tx_BD_Num;
	UINT32  Temp_Tx_BD;
	UINT32  i;
	UINT32 Temp_Rx_BD;
	UINT32 Adress;
	UINT32 temp_val;
	
	//mask_irq(27);
	//mask_irq(28);
	//mask_all_irq();
	length = 0;
	FramePtr = TEMP_BUF_T;
	
	/* #if INCLUDE_SNMP
    Find out if this is a unicast or non-unicast packet, and update MIB.
    if ((buf_ptr->mem_flags & NET_BCAST) || (buf_ptr->mem_flags & NET_MCAST))
        SNMP_ifOutNUcastPkts_Inc(device->dev_unit + 1);
    else
        SNMP_ifOutUcastPkts_Inc(device->dev_unit + 1); 
#endif*/

    do    
    {
        memcpy(FramePtr, buf_ptr->data_ptr, buf_ptr->data_len);
        length += buf_ptr->data_len;
        FramePtr += buf_ptr->data_len;

        /* Move on to the next buffer. */
        buf_ptr = buf_ptr->next_buffer;

    } while (buf_ptr != 0);
    
   
	/*發(fā)送數(shù)據(jù)*/
		/*搜索一個可用的發(fā)送描述符*/
		Tx_BD_Num = read_reg(MAC_TXBD_NUM);
		Tx_BD_Num &=0x7F;
		for(i=Tx_count;i<Tx_BD_Num;)
		{
		    Adress = MAC_BD+ i*8;
			Temp_Tx_BD = read_reg(Adress);
			if(!(Temp_Tx_BD & 0x8000))
			{
			if(i == Tx_BD_Num-1) Tx_count = 0;
			else Tx_count = i+1;
			 break;
			 }
			if(i == Tx_BD_Num-1) i = 0;
			else i++;
		}
		
		
		/*設置搜索到的可用描述符,copy數(shù)據(jù)到描述符中*/
		Adress = ((MAC_BD + 4) + i*8);
		temp_val = read_reg(Adress);
		memcpy((CHAR *)(temp_val), TEMP_BUF_T, length);
		/*設置描述符的bit15位,發(fā)送幀數(shù)據(jù)*/
	  
		length = length <<16;
		
	
		if(i == Tx_BD_Num - 1)
			length |= 0xF800;
		else 
			length |= 0xD800;
			
		Adress = (MAC_BD + i*8);
		write_reg(Adress, length);
		
		
		
		
}


STATUS Mac_Receive()
{
	UINT32 Tx_BD_Num;
	UINT32 Temp_Rx_BD;
	UINT32 i,j;
	UINT32 length;
	UINT32 Temp_Rx_Ram;
	UINT32 pkt_size, bytes_left;
	UINT32 Adress;
	NET_BUFFER  *buf_ptr;
	CHAR *TEMP_BUF_R_Ptr;
	DV_DEVICE_ENTRY *device;
	
	
	device = DEV_Get_Dev_By_Name("SEP4020_MAC");
	j=0;
	
	/*搜索接收數(shù)據(jù)的描述符*/
	Tx_BD_Num = read_reg(MAC_TXBD_NUM);
	Tx_BD_Num &=0x7F;
	  //
	 // for(i=0;i<(128-Tx_BD_Num);i++) 
 while(1)            //改變后的查詢方式:從上一次的位置查詢開始,直到第一個不可用的接收描述符為止
  {
	  i = Rx_count;
	  Adress = (MAC_BD + Tx_BD_Num*8)+ i*8;
		Temp_Rx_BD = read_reg(Adress);
		
		if(!(Temp_Rx_BD & 0x8000))
		{
				/*獲得接收數(shù)據(jù)長度*/
			    //Adress = (MAC_BD + Tx_BD_Num*8) + i*8 ;
				length = Temp_Rx_BD;
				length = length>>16;
				/*獲得該描述符的數(shù)據(jù)存放地址*/
				
				Adress = Adress + 4;
				Temp_Rx_Ram = read_reg(Adress);
				
		        //memcpy(TEMP_BUF_R, (CHAR *)(Temp_Rx_Ram), length);  //減少一次內(nèi)存拷貝,加快響應速度
				TEMP_BUF_R_Ptr = (CHAR *)(Temp_Rx_Ram);
				
				
				/*重置相應的RX_BD用于接收數(shù)據(jù)*/
				
				Adress = Adress - 4;
				if(i == (127-Tx_BD_Num))
					write_reg(Adress, 0xe000);
				else 
					write_reg(Adress, 0xc000);
				
				
				/*獲得BUFFER空間*/
				
				/* Get the packet size fron the RxFD & allocate buffer(s) for it! */
			    pkt_size = length;

			    /* Allocate a buffer (or a chain of buffers) into which the Rx
			    ** packet can be copied! */
			    if (pkt_size <= NET_PARENT_BUFFER_SIZE) /* One buffer case! */
			    {
			        buf_ptr = MEM_Buffer_Dequeue(&MEM_Buffer_Freelist);
			    }
			    else /* More than one buffer is needed! */
			    {
			        buf_ptr = MEM_Buffer_Chain_Dequeue(&MEM_Buffer_Freelist, pkt_size);
			    }

				/*將數(shù)據(jù)copy到buffer*/
				if (buf_ptr == NU_NULL)
			    {
			        //NU_Tcp_Log_Error (TCP_PARTITION_ERROR, TCP_RECOVERABLE,
			        //                __FILE__, __LINE__);

			        /* Return that there was an error with a packet reception */
			        return(-1); 
			    }  
			    else 
			    {
			        /* Put the head of the chain (or only one) on the incoming 
			        ** packet buffer list */
			        MEM_Buffer_Enqueue (&MEM_Buffer_List, buf_ptr);

			        /* Get the total number of bytes that must be copied */
			        bytes_left = pkt_size;

			        /* This sets Total Packet Length in the first (or only) buffer! */
			        buf_ptr->mem_total_data_len = pkt_size;

			        /* Set the device into the buffer header! */
			        buf_ptr->mem_buf_device = device;

			        /* Clear the flags field! */
			        buf_ptr->mem_flags = 0;

			        if (pkt_size <= NET_PARENT_BUFFER_SIZE) /* One buffer case. */
			        {
			            /* The MEM Buffer Dequeue function returns a Ptr to the Buffer's */
			            /* Data area at the TOP of the Buffer. */
			            buf_ptr->data_ptr = (UINT8 *) buf_ptr;
			            
			            /* Data in this buffer, same as total for this case. */
			            buf_ptr->data_len = pkt_size;

			            /* Do the copy. */
			            memcpy(buf_ptr->data_ptr, (UINT8 *)TEMP_BUF_R_Ptr, pkt_size);
			        }
			        else /* More than one NET Buffer required!  Pack the first one and  */
			        {    /* enter the while loop to fill the remaining ones needed.     */
			        
			             /* Data area in the first buffer is less than in the rest. */
			             buf_ptr->data_len = NET_PARENT_BUFFER_SIZE;

			             /* The Ptr is to the Buffer's Data area at the TOP of the */
			             /* Buffer, so copy the buf_ptr to the Buffer's Data Ptr.  */
			             buf_ptr->data_ptr = (UINT8 *) buf_ptr;

			             /* Do the copy. */
			             memcpy(buf_ptr->data_ptr, (UINT8 *)TEMP_BUF_R_Ptr,
			                                       NET_PARENT_BUFFER_SIZE);

			             bytes_left -= NET_PARENT_BUFFER_SIZE;
			             
			             /* Advance data ptr to next block start. */
			             TEMP_BUF_R_Ptr += NET_PARENT_BUFFER_SIZE; 

			             while (bytes_left > 0) 
			             {
			                /* Move to the next buffer in the chain  */
			                buf_ptr = (NET_BUFFER *) buf_ptr->next_buffer;

			                /* The Ptr is to the Buffer's Header start, NOT the Data area  */
			                /* at the TOP of the Buffer, so copy the Adjusted Ptr to the   */
			                /* Buffer's Data Ptr.                                          */
			                buf_ptr->data_ptr = (UINT8 *) buf_ptr;

			                /* See if a Full Buffer is needed!  Note that these buffers */    
			                /* hold more data (0x218/536) since the me_bufhdr is not    */
			                /* needed!                                                  */
			                if (bytes_left > NET_MAX_BUFFER_SIZE)
			                {
			                    buf_ptr->data_len = NET_MAX_BUFFER_SIZE; 
			                    bytes_left -= NET_MAX_BUFFER_SIZE;

			                    /* Do the copy. */
			                    memcpy(buf_ptr->data_ptr, (UINT8 *)TEMP_BUF_R_Ptr,
			                           buf_ptr->data_len);

			                    /* Advance data ptr to next block start! */
			                    TEMP_BUF_R_Ptr += NET_MAX_BUFFER_SIZE; 
			                }
			                else
			                {
			                    buf_ptr->data_len = bytes_left; 
			                    bytes_left = 0; 

			                    /* Do the copy. */
			                    memcpy(buf_ptr->data_ptr,
			                           (UINT8 *)TEMP_BUF_R_Ptr,
			                           buf_ptr->data_len);
			                }

			            } /* END:  while (bytes_left > 0)  */
			        } /* END: else (more than one NET Buffer needed)   */
			} 
					if(Rx_count ==(127-Tx_BD_Num)) Rx_count=0;
					else Rx_count++;
	}
	else break;
	
}
		/*激活接收HSR*/
		if (!Hisr_Activated)
	    {
	        Hisr_Activated = 0;


	        /* Activate the Receive HISR. */
	        NU_Activate_HISR (&Mac_Rcv);
	    }
    // end else (buffer is not NULL)
}

void Mac_clear_Rx_BD()
{   
    UINT32 Adress;
	int i;
	for(i=0;i<0x40;i++)
	{
		Adress = (MAC_BD+0x40*8)+i*8;
	 
		if (i == (0x40 - 1))
		  	write_reg(Adress, 0xe000);
	  	else
		  	write_reg(Adress, 0xc000);
	}
	Rx_count=0;
}

VOID MAC_LISR(INT VECTOR)
{
	mask_irq(28);
	Mac_Interrupt();
	unmask_irq(28);
}


VOID Mac_Interrupt()
{
	UINT32	isr;
	UINT32  temp2;
	/*讀取Mac中斷狀態(tài)寄存器*/
	isr = read_reg(MAC_INTSRC);
	temp2 = *(RP)(MAC_BD+8*64);
	while(isr)
	{
		/*寫1清楚狀態(tài)位*/
		write_reg(MAC_INTSRC, isr);
		if(isr & (MAC_ISR_TXB | MAC_ISR_TXE | MAC_ISR_TXC)) /* pkt xmit or xmit error */
		{	
			/*發(fā)送數(shù)據(jù)中斷*/
			/*記錄發(fā)送錯誤或者發(fā)送成功*/
			/*激活發(fā)送HSR*/
		//	Mac_Txd();
			NU_Activate_HISR(&Mac_Xmit);
			
		#if DEBUG2	
			if(delay_time_flage==1)
		{
		time_count = get_timer(time_count);
		*(RP)dis_address = time_count;
		dis_address+=4;
		delay_time_flage=0;
		}
		#endif
		}
		if(isr & (MAC_ISR_RXB | MAC_ISR_RXE | MAC_ISR_RXC))
		{
			/*接收數(shù)據(jù)中斷*/
			/*記錄接收錯誤,或者接受成功*/
			#if DEBUG2
			time_count = get_timer(0);
			#endif
			/*調(diào)用Mac_Receive接收數(shù)據(jù)*/
			Mac_Receive();
		}
		if(isr & MAC_ISR_BUSY)
		{
			/*RX_BD滿溢出*/
			Mac_clear_Rx_BD();
		}
		/*讀取中斷狀態(tài)*/
		isr = read_reg(MAC_INTSRC);
	}
		
}

VOID Mac_Config()
{
}
STATUS Mac_Ioctl(DV_DEVICE_ENTRY *dev, INT option, DV_REQ *d_req)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美加勒比视频| 欧美日韩一区不卡| 蜜桃视频第一区免费观看| 亚洲综合丝袜美腿| 国产精品理论片| 久久这里只有精品视频网| 日韩精品中文字幕一区二区三区| 欧美亚洲动漫另类| 在线观看日韩毛片| 欧美日韩国产一二三| 欧美日韩成人高清| 欧美理论片在线| 日韩精品中文字幕一区二区三区 | 中文字幕乱码日本亚洲一区二区| 91麻豆精品国产91久久久更新时间 | 国产精品亚洲成人| 国产成人亚洲综合a∨猫咪| 国产精品91xxx| 国产999精品久久久久久绿帽| 成人晚上爱看视频| 欧美影院午夜播放| 欧美一区二区三区四区视频| 日韩一区二区三区精品视频| 日韩欧美二区三区| 久久久综合视频| 久久久久久一级片| 亚洲免费观看高清完整版在线观看熊 | 91精品国产综合久久久蜜臀图片 | 亚洲欧洲精品一区二区精品久久久| 中文字幕av一区二区三区高 | 久久精品视频免费观看| 国产精品国产a| 五月天丁香久久| 国产成人福利片| 在线观看不卡视频| 2023国产精品| 一区二区免费在线| 国产一区二区成人久久免费影院| 成人开心网精品视频| 欧美理论片在线| 国产精品美女久久久久久2018| 亚洲一区二区三区免费视频| 韩国精品久久久| 欧美无砖专区一中文字| 亚洲精品在线三区| 亚洲成人午夜电影| 高清成人在线观看| 日韩美一区二区三区| 有坂深雪av一区二区精品| 裸体一区二区三区| 欧美亚洲日本国产| 中文字幕一区在线| 国产一区二区三区观看| 在线观看日韩高清av| 国产日韩高清在线| 日韩高清电影一区| 一本到高清视频免费精品| 日韩精品中文字幕一区二区三区| 亚洲免费在线看| av电影天堂一区二区在线| 日韩女同互慰一区二区| 亚洲一区二区中文在线| 99免费精品在线观看| 精品奇米国产一区二区三区| 国产精品理伦片| 国产一区 二区 三区一级| 日韩欧美视频在线| 亚洲大型综合色站| av资源站一区| 国产精品久久久久一区二区三区| 蜜乳av一区二区| 欧美日韩精品欧美日韩精品| 一区二区三区高清在线| 国产一区二区精品在线观看| 日韩亚洲国产中文字幕欧美| 日韩中文字幕一区二区三区| 色88888久久久久久影院野外| 精品国产乱码久久久久久浪潮 | 成人国产精品免费观看视频| 久久日韩粉嫩一区二区三区| 亚洲欧美日韩人成在线播放| 国产九色精品成人porny| 久久理论电影网| 欧美aaa在线| 日韩手机在线导航| 美女一区二区三区| 日韩限制级电影在线观看| 日韩国产高清在线| 欧美在线免费播放| 亚洲国产精品尤物yw在线观看| 欧美片网站yy| 美女精品一区二区| 欧美一级一级性生活免费录像| 日韩不卡在线观看日韩不卡视频| 欧美日韩情趣电影| 秋霞av亚洲一区二区三| 日韩视频在线永久播放| 日韩av不卡一区二区| 精品999久久久| 成人免费三级在线| 国产精品色哟哟| av在线播放成人| 亚洲精品国产精品乱码不99| 欧美日韩一区二区电影| 久久精品国产亚洲高清剧情介绍 | 岛国一区二区三区| 亚洲精品美国一| 日韩欧美色综合| 99天天综合性| 欧美aaaaaa午夜精品| 国产精品久久久久久久久久久免费看 | 三级不卡在线观看| 国产网站一区二区| 国产福利电影一区二区三区| 日韩精品一区二区三区老鸭窝| 欧美aaaaaa午夜精品| 久久久精品人体av艺术| 欧美视频在线一区| 午夜伦理一区二区| 日韩视频一区二区| 国内精品不卡在线| 久久久午夜精品理论片中文字幕| 不卡影院免费观看| 一区二区免费看| 日韩精品资源二区在线| 91猫先生在线| 国产激情一区二区三区桃花岛亚洲| 亚洲人成7777| 欧美日韩国产综合视频在线观看| 粉嫩欧美一区二区三区高清影视| 视频一区二区三区中文字幕| 欧美激情艳妇裸体舞| 91精品国产综合久久小美女| 99久久综合国产精品| 激情国产一区二区| 亚洲国产成人自拍| 欧美日韩久久不卡| 亚洲精选一二三| 日韩一区二区三区视频在线 | 亚洲精品国产一区二区精华液| 欧美精品视频www在线观看 | 久久久国产午夜精品| 欧美日本在线观看| 国产成人精品免费一区二区| 日本午夜精品一区二区三区电影| 亚洲国产一区二区视频| 亚洲国产精品ⅴa在线观看| 日韩欧美中文字幕精品| 欧美羞羞免费网站| 不卡av在线网| 国产最新精品精品你懂的| 樱桃视频在线观看一区| 国产日韩欧美不卡| 国产精品网站在线播放| 亚洲精品一区二区三区精华液| 91精品国产色综合久久不卡电影 | 国产精品午夜电影| 国产调教视频一区| 日韩欧美国产不卡| www精品美女久久久tv| 精品国产伦一区二区三区免费| 日韩欧美一区中文| 欧美成人三级在线| 久久久久久久久免费| 久久综合av免费| 欧美国产激情二区三区| 久久精品欧美一区二区三区不卡| 久久久久久免费| 2023国产精品| 国产性做久久久久久| 久久久久99精品国产片| 国产欧美一区二区精品性色超碰| 国产亚洲一区二区三区| 国产三级精品三级| 国产香蕉久久精品综合网| 中文字幕不卡一区| 最新热久久免费视频| 成人欧美一区二区三区视频网页| 国产精品久久久久久久久图文区| 中文久久乱码一区二区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品久久久久精k8| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品家庭影院| 亚洲人妖av一区二区| 一区二区三区欧美| 一片黄亚洲嫩模| 日本美女一区二区| 久久97超碰国产精品超碰| 成人综合婷婷国产精品久久| 国产精品1区2区3区| 成人aaaa免费全部观看| 欧美日本韩国一区二区三区视频 | 婷婷国产在线综合| 91老师片黄在线观看| 91麻豆精品国产自产在线观看一区 | 亚洲激情综合网| 午夜不卡在线视频| 久久精品国产色蜜蜜麻豆| 成人精品gif动图一区|