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

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

?? mac.c

?? 本程序是arm開發(fā)bios的實(shí)例代碼
?? C
字號(hào):
#include "types.h"
#include "bioscall.h"#include "eth.h"
#include "board.h"
#include "mac.h"

static struct frame_desc_struct rx_fd[RX_FRAME_SIZE];
static struct frame_desc_struct tx_fd[TX_FRAME_SIZE];

static struct frame_buf_struct rx_buf[RX_FRAME_SIZE];
static struct frame_buf_struct tx_buf[TX_FRAME_SIZE];

static unsigned long gtx_ptr;
static unsigned long grx_ptr;

static unsigned char s3c4510_eth_addr[ETH_ALEN] = {0x00,0x80,0x48,0x12,0x34,0x56};


static void s3c4510_eth_fd_init(void)
{
	struct frame_desc_struct *fd_ptr;
	struct frame_desc_struct *fd_start_ptr;
	struct frame_desc_struct *fd_last_ptr = NULL;
	unsigned long fb_base;
	unsigned long i;

	// TxfdInitialize() in diag code
	// Get Frame descriptor's base address
	// +0x4000000 is for setting this area to non-cacheable area.

	outl((unsigned long)tx_fd | NOCACHE_BIT, BDMATXPTR);
	gtx_ptr =  inl(BDMATXPTR);

	// Get Transmit buffer base address.
	fb_base = (unsigned long)tx_buf | NOCACHE_BIT;

	// Generate linked list.
	fd_start_ptr = fd_ptr = (struct frame_desc_struct *)gtx_ptr;
	fd_last_ptr = NULL;

	for(i = 0; i < TX_FRAME_SIZE; i++) {

		fd_ptr->frame_data_ptr = (unsigned long)(fb_base & CPU_owner);
		fd_ptr->reserved = 0;
		fd_ptr->status_and_frame_lenght = (unsigned long)0x0;

		if(fd_last_ptr != NULL)
			fd_last_ptr->next_frame_desc = (unsigned long)fd_ptr;

		fd_last_ptr = fd_ptr;
		fd_ptr++;

		fb_base += sizeof(struct frame_buf_struct);
	}

	//Make Frame descriptor to ring buffer type.
	fd_last_ptr->next_frame_desc = (unsigned long)fd_start_ptr;

	// RxFDInitialize() in diag code
	// Get Frame descriptor's base address
	outl((unsigned long)rx_fd  | NOCACHE_BIT, BDMARXPTR);
	grx_ptr = inl(BDMARXPTR);

	// Get recieve buffer base address
	fb_base = (unsigned long)rx_buf | NOCACHE_BIT;

	// Generate linked list
	fd_start_ptr = fd_ptr = (struct frame_desc_struct *)grx_ptr;
	fd_last_ptr = NULL;

	for(i = 0; i < RX_FRAME_SIZE; i++) {

		fd_ptr->frame_data_ptr = (unsigned long)(fb_base | BDMA_owner);
		fd_ptr->reserved = 0;
		fd_ptr->status_and_frame_lenght = (unsigned long)0x0;

		if(fd_last_ptr != NULL )
			fd_last_ptr->next_frame_desc = (unsigned long)fd_ptr;

		fd_last_ptr = fd_ptr;
		fd_ptr++;

		fb_base += sizeof(struct frame_buf_struct);
	}   

	// Make Frame descriptor to ring buffer type.
	fd_last_ptr->next_frame_desc = (unsigned long)fd_start_ptr;
}

int s3c4510_eth_init(void)
{
	struct eth_cfg eth;
	int i;

	bios_eth_cfg(&eth);
	memcpy(s3c4510_eth_addr, eth.address, ETH_ALEN);
	// reset BDMA and MAC
	outl(BRxRS, BDMARXCON);
	outl(BTxRS, BDMATXCON);
	outl(MaxRxFrameSize, BDMARXLSZ);

	outl(Reset, MACON);
	outl(gMACCON, MACON);

	s3c4510_eth_fd_init();
	for(i = 0; i < 4; i++)
		CAM_Reg(0) = (CAM_Reg(0) << 8) | s3c4510_eth_addr[i];
	for(i = 4; i < 6; i++)
		CAM_Reg(1) = (CAM_Reg(1) << 8) | s3c4510_eth_addr[i];
	CAM_Reg(1) = (CAM_Reg(1) << 16); 

	outl(0x0001, CAMEN);
	outl(gCAMCON, CAMCON);

	outl(gBDMATXCON, BDMATXCON);
	outl(gMACTXCON, MACTXCON);

	outl(gBDMARXCON, BDMARXCON);
	outl(gMACRXCON, MACRXCON);
	
	return 0;
}

int s3c4510_eth_send(unsigned char *data, int len)
{
	struct frame_desc_struct *fd_ptr;
	volatile unsigned long *fb_ptr;
	unsigned char *fb_data;
	int i;

	// 1. Get Tx frame descriptor & data pointer
	fd_ptr = (struct frame_desc_struct *)gtx_ptr;
	fb_ptr = (unsigned long *)&fd_ptr->frame_data_ptr;
	fb_data = (unsigned char *)fd_ptr->frame_data_ptr;

	// 2. Check BDMA ownership
	if(*fb_ptr & BDMA_owner)
		return -1;

	// 3. Prepare Tx Frame data to Frame buffer
	memcpy(fb_data, data, len);
	if (len < 60) {
		for (i = len; i < 60; i++)
			fb_data[i] = 0x00;
		len = 60;
	}

	// 4. Set Tx Frame flag & Length Field
	fd_ptr->reserved = (Padding | CRCMode | FrameDataPtrInc | LittleEndian | WA00 | MACTxIntEn);
	fd_ptr->status_and_frame_lenght = (len & 0xFFFF);

	// 5. Change ownership to BDMA
	fd_ptr->frame_data_ptr |= BDMA_owner;

	// 6. Enable MAC and BDMA Tx control register
	outl(gBDMATXCON, BDMATXCON);
	outl(gMACTXCON, MACTXCON);

	// 7. Change the Tx frame descriptor for next use
	gtx_ptr = (unsigned long)(fd_ptr->next_frame_desc);

	return 0;
}

int s3c4510_eth_rcv(unsigned char *data, int *len)
{
	struct frame_desc_struct *fd_ptr;
	unsigned long rx_status;
	unsigned long bdma_status;
	unsigned char *tmp;

	// 1. Get Rx Frame Descriptor
	fd_ptr = (struct frame_desc_struct *)grx_ptr;
	if (fd_ptr->frame_data_ptr & BDMA_owner)
		return -1;

	rx_status = (fd_ptr->status_and_frame_lenght >> 16) & 0xffff;

	// 2. Get current frame descriptor and status
	bdma_status = inl(BDMASTAT);

	// 3. Clear BDMA status register bit by write 1
	outl(bdma_status | S_BRxRDF, BDMASTAT);

	// 4. If Rx frame is good, then process received frame
	*len = 0;
	if (rx_status & Good) {
		*len = (fd_ptr->status_and_frame_lenght & 0xffff) - 4;
		tmp = (unsigned char *)fd_ptr->frame_data_ptr + 2;

		// 6. Get received frame to memory buffer
		memcpy(data, tmp, *len);
	}

	// 5. Change ownership to BDMA for next use
	fd_ptr->frame_data_ptr |= BDMA_owner;

	// Save Current Status and Frame Length field, and clear
	fd_ptr->status_and_frame_lenght = 0x0;

	// 6. Get Next Frame Descriptor pointer to process
	grx_ptr = (unsigned long)(fd_ptr->next_frame_desc);

	// 7. Check Notowner status
	if (inl(BDMASTAT) & S_BRxNO) {
		outl(S_BRxNO, BDMASTAT);
	}

	if ((inl(MACRXSTAT) & 0x400) == 0x400) {
		outl(gBDMARXCON, BDMARXCON);
		outl(gMACRXCON, MACRXCON);
	}

	return 0;
}

int s3c4510_eth_get_addr(unsigned char *addr)
{
	memcpy(addr, s3c4510_eth_addr, ETH_ALEN);
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久一区二区三区| 精品久久五月天| 91亚洲国产成人精品一区二区三 | 国产嫩草影院久久久久| 精品久久久久一区| 精品成人在线观看| 精品国产一区二区三区忘忧草 | 国产精品伦理在线| 国产精品久久久久久久久搜平片 | 久久机这里只有精品| 免费成人在线播放| 久久不见久久见免费视频7 | 韩国一区二区三区| 亚洲综合另类小说| 一区免费观看视频| 精品88久久久久88久久久| 成人丝袜18视频在线观看| 韩国精品久久久| 捆绑调教美女网站视频一区| 亚洲第一激情av| 亚洲第四色夜色| 欧美一区二区三区爱爱| 99久久精品免费看| 色婷婷综合在线| 538prom精品视频线放| 欧美一区二区三区在线观看| 精品美女一区二区三区| 国产精品视频一二| 亚洲乱码国产乱码精品精98午夜 | 国产一区二区三区不卡在线观看| 精品亚洲国产成人av制服丝袜| 国产成人精品网址| 99re热这里只有精品免费视频 | 国产精品不卡视频| 亚洲伊人伊色伊影伊综合网| 日本女优在线视频一区二区| 国产一二精品视频| 色老汉av一区二区三区| 69精品人人人人| 国产欧美日韩三级| 亚洲国产毛片aaaaa无费看 | 欧洲av一区二区嗯嗯嗯啊| 欧美高清www午色夜在线视频| 亚洲精品在线免费观看视频| 亚洲啪啪综合av一区二区三区| 日韩av一区二区三区四区| 国产成人在线看| 欧美午夜精品一区二区三区| 久久综合色天天久久综合图片| 亚洲欧美日韩国产综合| 蜜臀av性久久久久蜜臀av麻豆| 成人网男人的天堂| 日韩一区二区三| 中文字幕中文字幕中文字幕亚洲无线| 午夜精品福利一区二区三区av| 国产麻豆成人精品| 欧美日韩国产片| 中文字幕精品在线不卡| 五月天亚洲精品| 成人黄色大片在线观看| 91精品国产综合久久久久久 | 亚洲欧美一区二区久久| 精品一区二区在线看| 欧美在线视频日韩| 久久精品亚洲一区二区三区浴池| 亚洲高清免费视频| 成人av动漫网站| 欧美电影免费观看高清完整版在线观看 | 成人av在线网站| 日韩免费电影一区| 亚洲国产一二三| 成人福利电影精品一区二区在线观看| 正在播放一区二区| 亚洲精品成人在线| 波多野结衣亚洲一区| 亚洲精品一区二区在线观看| 视频一区二区不卡| 91成人在线精品| 国产精品乱人伦| 国产精品夜夜爽| 日韩美女主播在线视频一区二区三区 | 欧美精品自拍偷拍动漫精品| 中文字幕亚洲一区二区va在线| 精品在线播放免费| 欧美一区二区久久久| 亚洲国产一区二区视频| 色婷婷综合视频在线观看| 国产精品女主播av| 成人午夜av电影| 国产色一区二区| 国产在线精品一区二区夜色 | 一区二区三区免费观看| 成人高清av在线| 国产欧美日本一区视频| 精品在线播放免费| 精品国产乱码久久久久久1区2区 | 精品午夜久久福利影院| 日韩一级大片在线观看| 肉色丝袜一区二区| 91精品欧美久久久久久动漫| 丝袜诱惑亚洲看片| 欧美日韩免费高清一区色橹橹| 一区二区三区在线观看国产| 色偷偷一区二区三区| 亚洲人成人一区二区在线观看| av午夜一区麻豆| 中文字幕av一区二区三区免费看 | 91影视在线播放| 亚洲欧洲制服丝袜| 欧美午夜免费电影| 亚洲6080在线| 欧美一级二级在线观看| 奇米亚洲午夜久久精品| 欧美成人在线直播| 国内外成人在线| 国产精品午夜免费| 99热99精品| 亚洲线精品一区二区三区| 欧美性欧美巨大黑白大战| 午夜视频一区在线观看| 欧美精品tushy高清| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩一级在线观看| 国产在线精品一区二区三区不卡| 亚洲国产精品激情在线观看 | 欧美国产精品v| 成人a区在线观看| 亚洲综合精品久久| 91精品国产全国免费观看| 久草热8精品视频在线观看| 亚洲精品一区二区在线观看| 成人av网站免费| 亚洲在线一区二区三区| 欧美一区二区在线观看| 国产麻豆视频一区二区| 亚洲欧美在线观看| 欧美男男青年gay1069videost| 免费在线看一区| 国产女主播视频一区二区| 97精品国产露脸对白| 午夜精品成人在线视频| 久久亚洲精精品中文字幕早川悠里| 成人性生交大片免费看中文| 亚洲国产日产av| 26uuu久久天堂性欧美| 99热这里都是精品| 日本aⅴ亚洲精品中文乱码| 久久久久久夜精品精品免费| 99久久国产综合精品色伊| 日本三级韩国三级欧美三级| 中文字幕不卡三区| 91超碰这里只有精品国产| 丰满放荡岳乱妇91ww| 亚洲国产一区视频| 国产清纯在线一区二区www| 在线影院国内精品| 国产高清不卡二三区| 精品一区二区三区av| 中文字幕 久热精品 视频在线| 欧美一a一片一级一片| 国内外成人在线| 亚洲成人综合视频| 国产午夜精品理论片a级大结局 | 欧美视频自拍偷拍| 国产一区二区三区免费观看| 亚洲免费在线观看视频| 亚洲精品一区二区三区香蕉| 91麻豆6部合集magnet| 激情伊人五月天久久综合| 有坂深雪av一区二区精品| 久久亚洲二区三区| 欧美日韩国产免费| 成人18视频日本| 国产在线播放一区| 日韩精品一二三四| 一区av在线播放| 国产精品日韩精品欧美在线| 精品精品国产高清一毛片一天堂| 色狠狠色噜噜噜综合网| 成人自拍视频在线| 精品一区二区三区免费毛片爱| 亚洲1区2区3区视频| 一区二区三区在线观看动漫| 国产精品久久毛片av大全日韩| 亚洲精品一线二线三线无人区| 欧美精品久久99久久在免费线| 99re免费视频精品全部| 国产精品一区2区| 日产国产欧美视频一区精品| 亚洲成人av在线电影| 亚洲综合色丁香婷婷六月图片| 国产精品免费久久久久| 26uuu国产在线精品一区二区| 91精品久久久久久蜜臀| 欧美人与z0zoxxxx视频| 欧美色电影在线| 欧美亚洲动漫另类| 色爱区综合激月婷婷| 色综合久久中文字幕| 99精品久久99久久久久|