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

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

?? cs8900a.c

?? umon bootloader source code, support mips cpu.
?? C
字號:
//==========================================================================
//
//      cs8900a.c
//
//      cs8900a Ethernet Code
//
// Author(s):    Michael Kelly, Cogent Computer Systems, Inc.
// Contributors: 
// Date:         05-26-2002
// Description:  This file contains intialization and support routines 
//               for the cs8900a ethernet controller found on some CSB's.
//
//--------------------------------------------------------------------------

#include "config.h"
#if INCLUDE_ETHERNET
#include "cpuio.h"
#include "stddefs.h"
#include "genlib.h"
#include "ether.h"
#include "cs8900a.h"


//--------------------------------------------------------------------------
// cs8900a_page_rd()
//
// This function does an inderect read of the desired register in the cs8900a
ushort
cs8900a_page_rd(ushort reg)
{
	CS_PADD = reg;
	return CS_PDAT;
}

//--------------------------------------------------------------------------
// cs8900a_page_wr()
//
// This function does an indirect write to the desired register in the cs8900a
void
cs8900a_page_wr(ushort reg, ushort data)
{
	CS_PADD = reg;
	CS_PDAT = data;
}

//--------------------------------------------------------------------------
// cs8900a_init()
//
//  This code performs the following steps:
//
//	1. Verify the presence of the CS8900A at CS8900A_BASE_ADDRESS 
//	2. Force a software reset.
//  3. Wait until reset completes or timeouts
//  4. Enable rx of broadcast and frames that match our mac address
//  5. Disable all interrupts
//  6. Enable TX and RX and set 10Base-T mode
//  7. Set mac address from BinEnetAdd
//	8. Return
//
int
cs8900a_init(void)
{
	volatile ushort temp16;
	
	// reset the cs8900a
	cs8900a_reset();
	 	
	// see if we can ID the device
	temp16 = cs8900a_page_rd(CS_ChipID);
	if(temp16 != 0x630E){
		printf("Bad CS8900A ID = %04x!\n", temp16);
		return -1;
	}

	// clear the interrupt enables for the receiver
	cs8900a_page_wr(CS_RxCFG, 0);	// no interrupts on rx events

	// set the test modes
//	cs8900a_page_wr(CS_TestCtl, CS_TestCtl_FDX);			// good frames

	// set the rx filtering
	cs8900a_page_wr(CS_RxCTL, CS_RxCTL_RxOK			// good frames
							| CS_RxCTL_MAC			// frames for our mac
//							| CS_RxCTL_Promiscuous
							| CS_RxCTL_Broadcast);	// broadcast frames

	// clear the interrupt enables for the transmitter
	cs8900a_page_wr(CS_TxCFG, 0);	// no interrupts on tx events

	// clear the interrupt enables for the buffer
	cs8900a_page_wr(CS_BufCFG, 0);	// no interrupts on buffer events

	// set the mac address
	cs8900a_set_mac();

	// enable the transmitter and receiver, this also selects 10Base-T mode
	cs8900a_page_wr(CS_LineCTL, CS_LineCTL_Rx
							  | CS_LineCTL_Tx);

	// we're done!	
	return 0;	
}

//--------------------------------------------------------------------------
// cs8900a_reset()
//
// This function sets the CS_SelfCtl_Reset bit in CS_SelfCTL then
// waits for CS_SelfStat_InitD in CS_SelfStat to go true
int
cs8900a_reset(void)
{

	volatile int timeout = CS_TIMEOUT;
	volatile ushort temp16;

	cs8900a_page_wr(CS_SelfCtl, CS_SelfCtl_Reset);
	while (timeout){
		temp16 = cs8900a_page_rd(CS_SelfStat);
		if (temp16 & CS_SelfStat_InitD) break;
		timeout--;
	}
	if (timeout == 0){
		printf("CS8900A Reset Time Out Error, Status = %04x!\n", temp16);
		return -1;
	}
	return(0);
}

//--------------------------------------------------------------------------
// cs8900a_set_mac()
//
// This function puts the mac address from BinEnetAddr into the CS8900a
void
cs8900a_set_mac(void)
{
	volatile int i;
	
	for (i = 0; i < 6; i += 2){
		cs8900a_page_wr(CS_MAC + i,BinEnetAddr[i] | (BinEnetAddr[i + 1] << 8));
	}	

	// set the logical address mask to accept all addresses
    for (i = 0;  i < 8;  i += 2) {
		cs8900a_page_wr(CS_LAF + i, 0xFFFF);
	}
	return;
}

//--------------------------------------------------------------------------
// cs8900a_tx()
//
// This function puts the tx buffer into the cs8900a as follows:
//
// 1. Write the Transmit Command
// 2. Write the Transmit Frame Length
// 3. Wait for CS_BusStat_TxRDY to go true
// 4. Copy txbuf into cs8900a
// 5. Return
//
int
cs8900a_tx(uchar *txbuf, ulong length)
{
	volatile int i, timeout;
	volatile ushort temp16;
	volatile uchar *from_p;
	volatile uchar temp8;

	if (EtherVerbose == SHOW_ALL) {
		printf("CS8900a: Xmit Buffer Address = 0x%08lx, Length = 0x%04lx.\n",
			(ulong)txbuf, length);
	}

	// clear any left over status before we can send
	// just reading CS_TER does it 
//	temp16 = cs8900a_page_rd(CS_TER) & 0xffc0;
//	if (temp16 & ~CS_TER_TxOK){ 	// any error?
//		if (EtherVerbose == SHOW_ALL) {
//			printf("CS8900a: Prior Transmit Failed with Status = %04x.\n", temp16);
//		}
//	}

	// write the TX Command and Length
	CS_TxCMD = CS_TxCmd_TxStart_Full;
	CS_TxLEN = length;

	// Now check the CS_BusStat_TxRDY bit
    timeout = CS_TIMEOUT;
	while (timeout){
		temp16 = cs8900a_page_rd(CS_BusStat);
		if (temp16 & CS_BusStat_TxRDY) break;
		timeout--;
	}
	if (timeout == 0){
		printf("CS8900a: Transmit Time Out Error, Status = %04x!\n", temp16);
		return -1;
	}

	from_p = txbuf;

	// write the packet to the cs8900a transmit buffer
	i = 0;
	while(length){
		if (length == 1){
			CS_RTDATA = (*from_p++ & 0xff);
			length--;
		}
		else {
			temp8 = *from_p++;
			CS_RTDATA = ((*from_p++ << 8) | temp8);
		length = length - 2;
		}
	}
	
	if (EtherVerbose == SHOW_ALL) {
		printf("CS8900a: Transmit Complete.\n");
	}
	return 0;
}

//--------------------------------------------------------------------------
// cs8900a_rx()
//
// This function checks to see if the cs8900a has a receive buffer
// ready.  If so, it copies it into the buffer pointed to by pktbuf
//
int
cs8900a_rx(uchar *pktbuf)
{
	volatile int i;
	volatile ushort temp16, length;

	// Check to see if we have an rx frame of any kind
	temp16 = cs8900a_page_rd(CS_RER) & 0xffc0;
	if (temp16 == 0){
		return 0;	// no frame so just leave
	}

	if (EtherVerbose == SHOW_ALL)  {
		printf("CS8900a: Receiving Packet Status = 0x%04x.\n", temp16);
	}

	// did we get an error?  if so tell the cs8900a to skip it, then leave
	if ((temp16 & CS_RER_RxOK) == 0){
		cs8900a_page_wr(CS_RxCFG, CS_RxCFG_Skip1);	// skip bad frame
		if (EtherVerbose == SHOW_ALL) {
			printf("CS8900a: Receive Packet Error Status = 0x%04x.\n",
				(temp16 & 0xffc0));
		}
		return 0;
	}
	// now get the frame
	// first word in the receive buffer is the status.
	// the second word is the length.
	temp16 = CS_RTDATA;
	if (EtherVerbose == SHOW_ALL) {
		printf("CS8900a: Receiving Packet Status again = 0x%04x.\n", temp16 & 0xffc0);
	}

	length = CS_RTDATA;
	if ((length >= 1600) || (length == 0)) {
		if (EtherVerbose == SHOW_ALL)  {
			printf("CS8900a: Rcv pkt addr = 0x%08lx, Bad len = 0x%04x.\n",
				(ulong)pktbuf, length);
			return 0;
		}
	}

	i = length;
	if (EtherVerbose == SHOW_ALL){
		printf("CS8900a: Rcv pkt addr = 0x%08lx, Length = 0x%04x.\n",
			(ulong)pktbuf, i);
	}
	while(1){
		temp16 = CS_RTDATA;
		*pktbuf++ = temp16 & 0xff;
		i--;
		if (i == 0) break;
		*pktbuf++ = (temp16 & 0xff00 ) >> 8;
		i--;
		if (i == 0) break;
	}

//	to_p16 = (ushort *)pktbuf;
//	i = length;
//	if (EtherVerbose == SHOW_ALL){
//		printf("CS8900a: Receiving Packet Address = 0x%08x, Length = 0x%04x.\n", to_p16, i);
//	}
//	while(i){
//		if (i == 1){
//			to_p8 = (uchar *)to_p16;
//			temp8 = CS_RTDATA;
//			*to_p8 = temp8;
//			i--;
//		}
//		else{
//			temp16 = CS_RTDATA;
//			*to_p16++ = SWAP16(temp16);
//			i -= 2;
//		}
//	}

	if (EtherVerbose == SHOW_ALL){
		printf("CS8900a: Receive Packet Complete.\n");
	}
	return length;
}
				   	

#endif // INCLUDE_ETHERNET

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区久久久| 日本精品视频一区二区| 欧美一级免费观看| 男男成人高潮片免费网站| 欧美另类久久久品| 美女网站一区二区| 久久亚洲影视婷婷| 成人高清免费在线播放| 综合久久一区二区三区| 欧美精品日韩一本| 日韩国产精品91| 精品国产不卡一区二区三区| 国产一区二区导航在线播放| 国产女主播在线一区二区| 成人av免费在线播放| 亚洲资源中文字幕| 欧美mv和日韩mv国产网站| 成人一级视频在线观看| 亚洲香肠在线观看| 欧美成人三级在线| 成人的网站免费观看| 亚洲国产精品一区二区www在线 | 亚洲在线免费播放| 欧美日韩电影在线| 国产在线日韩欧美| 1区2区3区国产精品| 欧美高清你懂得| 国产大片一区二区| 亚州成人在线电影| 久久亚洲精精品中文字幕早川悠里| 岛国精品在线观看| 日韩精品五月天| 国产目拍亚洲精品99久久精品| 在线视频一区二区三| 免费成人美女在线观看.| 国产精品看片你懂得| 欧美精品乱人伦久久久久久| 成人免费看黄yyy456| 日韩精品亚洲专区| 自拍偷拍亚洲综合| 26uuu精品一区二区| 91蝌蚪porny| 国产精品一区不卡| 视频在线观看一区| 亚洲色图欧洲色图| 国产婷婷一区二区| 制服.丝袜.亚洲.中文.综合| 91网页版在线| 国产精品一区专区| 日韩电影在线一区| 夜夜精品浪潮av一区二区三区 | 日本一区二区三区四区在线视频| 欧美日韩国产成人在线免费| 成人动漫一区二区在线| 国产一区二区女| 蜜乳av一区二区三区| 亚洲国产精品久久久男人的天堂| 中文字幕不卡在线观看| 精品人在线二区三区| 欧美日韩精品是欧美日韩精品| 97精品视频在线观看自产线路二| 黄页网站大全一区二区| 亚洲一区国产视频| 亚洲欧洲综合另类| 国产精品国产三级国产三级人妇| 久久久99精品免费观看不卡| 日韩女优视频免费观看| 欧美一区三区二区| 欧美精品丝袜中出| 欧美精选在线播放| 欧美日韩黄视频| 精品污污网站免费看| 一本色道久久综合亚洲精品按摩| 成人性生交大合| 成人免费视频国产在线观看| 粉嫩av一区二区三区| 国产一区二区伦理| 国产99久久久国产精品潘金| 国产精品综合一区二区| 国产高清精品在线| 粉嫩蜜臀av国产精品网站| 国产精品99久久久久| 床上的激情91.| 成人app在线| 99久久精品免费看国产免费软件| eeuss鲁片一区二区三区在线观看| 成人小视频在线| 成人精品视频一区| 99re热视频这里只精品| 色综合久久久久综合体桃花网| 色哟哟国产精品免费观看| 在线亚洲人成电影网站色www| 在线欧美一区二区| 欧美高清视频在线高清观看mv色露露十八| 欧美日韩一卡二卡三卡| 91精品国产综合久久久久久漫画 | 精品一区二区成人精品| 国产综合久久久久影院| 成人午夜私人影院| 色噜噜狠狠一区二区三区果冻| 欧美主播一区二区三区| 91麻豆精品国产无毒不卡在线观看| 日韩一级完整毛片| 日本一区二区视频在线观看| 亚洲男同1069视频| 日本vs亚洲vs韩国一区三区| 国产一区美女在线| 色综合天天综合网天天看片| 欧美日韩电影一区| 久久综合九色综合欧美就去吻 | 精品少妇一区二区三区在线视频| 中文字幕精品三区| 亚洲a一区二区| 国产精品一区二区久激情瑜伽| 色婷婷综合久久久| 欧美一区二区黄色| 国产精品成人午夜| 视频一区视频二区在线观看| 国产一区二区影院| 欧美性猛交xxxxxxxx| 337p日本欧洲亚洲大胆色噜噜| 亚洲人成小说网站色在线| 日本不卡1234视频| 99re视频精品| 久久久夜色精品亚洲| 亚洲一区二区在线观看视频| 国产一区二区在线影院| 欧美在线一二三| 欧美国产日韩一二三区| 日韩av中文在线观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 色综合久久中文综合久久牛| 日韩欧美一卡二卡| 亚洲精品五月天| 国产成人啪午夜精品网站男同| 欧美性一二三区| 精品人在线二区三区| 亚洲免费色视频| 国产成人精品免费视频网站| 欧美绝品在线观看成人午夜影视| 国产精品人妖ts系列视频| 麻豆91在线播放免费| 欧美手机在线视频| 国产精品毛片大码女人| 国产九色sp调教91| 欧美刺激脚交jootjob| 亚洲一二三专区| 91免费小视频| 亚洲国产电影在线观看| 国产精品综合二区| 欧美mv和日韩mv国产网站| 日韩二区三区四区| 欧美日韩免费在线视频| 一区二区日韩电影| 91免费版pro下载短视频| 国产精品视频线看| 国产精品911| 久久免费的精品国产v∧| 免费成人深夜小野草| 欧美一级日韩免费不卡| 视频一区视频二区在线观看| 欧美日本一区二区三区| 亚洲成av人片www| 欧美日韩和欧美的一区二区| 悠悠色在线精品| 在线观看日韩一区| 亚洲一区二区三区激情| 欧美性大战久久| 亚洲丶国产丶欧美一区二区三区| 欧洲日韩一区二区三区| 一区二区国产视频| 欧美日韩国产中文| 天天色天天操综合| 欧美一区二区三区婷婷月色| 看电影不卡的网站| 26uuuu精品一区二区| 国产激情视频一区二区三区欧美 | 国产一区二区三区久久悠悠色av| 欧美成人精品福利| 国产一区二区主播在线| 中文字幕av一区二区三区高| 丰满放荡岳乱妇91ww| 亚洲天堂2016| 欧美日韩在线亚洲一区蜜芽| 天堂久久久久va久久久久| 日韩欧美综合在线| 国产美女精品人人做人人爽| 国产欧美一区二区精品婷婷| av一二三不卡影片| 亚洲综合色噜噜狠狠| 欧美一区二区三区视频免费播放 | 欧美亚洲一区三区| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲一区二区精品3399| 91精品国产综合久久久久| 激情伊人五月天久久综合| 欧美激情一区二区| 色婷婷综合激情| 免费在线观看精品| 欧美国产成人精品|