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

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

?? biosapi.c

?? 本程序是arm開(kāi)發(fā)bios的實(shí)例代碼
?? C
字號(hào):
#include "board.h"#include "utils.h"#include "bios.h"#include "flash.h"static struct config_table_struct config_table;static unsigned long get_rom_size(struct system_table_struct *sys_tbl){	unsigned long rom_size = 0;	int i;	for (i = 0; i < 4; i++)		rom_size += sys_tbl->rom_table[i].size;	return rom_size;}
static unsigned long get_dram_size(struct system_table_struct *sys_tbl){	unsigned long dram_size = 0;	int i;	for (i = 0; i < 4; i++)		dram_size += sys_tbl->dram_table[i].size;	return dram_size;}static int get_uart0_cfg(struct system_table_struct *sys_tbl, struct uart_cfg *cfg){	struct sys_uart_cfg *uart = (struct sys_uart_cfg *)&sys_tbl->uart[0];	cfg->flags = uart->flags;	if (uart->port == 0) {		cfg->base = ULCON0;		cfg->irq_rx = INT_UARTRX0;		cfg->irq_tx = INT_UARTTX0;	} else if (uart->port == 1) {		cfg->base = ULCON1;		cfg->irq_rx = INT_UARTRX1;		cfg->irq_tx = INT_UARTTX1;	} else {		cfg->base = -1;		cfg->irq_rx = -1;		cfg->irq_tx = -1;	}	cfg->dma_rx = uart->dma_rx;	cfg->dma_tx = uart->dma_tx;	cfg->mode = uart->mode;	return 0;}
static int get_uart1_cfg(struct system_table_struct *sys_tbl, struct uart_cfg *cfg){	struct sys_uart_cfg *uart = (struct sys_uart_cfg *)&sys_tbl->uart[1];	cfg->flags = uart->flags;	if (uart->port == 0) {		cfg->base = ULCON0;		cfg->irq_rx = INT_UARTRX0;		cfg->irq_tx = INT_UARTTX0;	} else if (uart->port == 1) {		cfg->base = ULCON1;		cfg->irq_rx = INT_UARTRX1;		cfg->irq_tx = INT_UARTTX1;	} else {		cfg->base = -1;		cfg->irq_rx = -1;		cfg->irq_tx = -1;	}	cfg->dma_rx = uart->dma_rx;	cfg->dma_tx = uart->dma_tx;	cfg->mode = uart->mode;	return 0;}
static int get_eth_cfg(struct system_table_struct *sys_tbl, struct eth_cfg *cfg){	struct sys_eth_cfg *eth = (struct sys_eth_cfg *)&sys_tbl->eth;	cfg->flags = eth->flags;	cfg->base = BDMATXCON;	memcpy(cfg->address, eth->address, 6);	return 0;}
static int get_ne2000_cfg(struct system_table_struct *sys_tbl, struct ne2000_cfg *cfg){	struct sys_ne2000_cfg *ne2000 = (struct sys_ne2000_cfg *)&sys_tbl->ne2000;	cfg->flags = ne2000->flags;	cfg->base = sys_tbl->ext_base + ne2000->bank * 0x4000;	memcpy(cfg->address, ne2000->address, 6);	return 0;}
static int get_uart16550_cfg(struct system_table_struct *sys_tbl, struct uart16550_cfg *cfg){	struct sys_uart16550_cfg *uart16550 = (struct sys_uart16550_cfg *)&sys_tbl->uart16550;	cfg->flags = uart16550->flags;	cfg->base = sys_tbl->ext_base + uart16550->bank * 0x4000;	cfg->clock = uart16550->clock;	return 0;}
static int get_pc97338_cfg(struct system_table_struct *sys_tbl, struct pc97338_cfg *cfg){	struct sys_uart16550_cfg *pc97338 = (struct sys_uart16550_cfg *)&sys_tbl->pc97338;	cfg->flags = pc97338->flags;	cfg->base = sys_tbl->ext_base + pc97338->bank * 0x4000;	return 0;}static int reboot(void){	void (*fp)(void);

	fp = (void (*)(void))(config_table.rom_base);
	(*fp)();	return 0;
}static int bios_call_init(struct biosapi_init_struct *init_param){	struct system_table_struct *sys_tbl;	sys_tbl = (struct system_table_struct *)		(init_param->rom_base + init_param->system_table_offset);	memset(&config_table, 0, sizeof(struct config_table_struct));	config_table.vendor_id = sys_tbl->vendor_id;	config_table.device_id = sys_tbl->device_id;	config_table.sub_vendor_id = sys_tbl->sub_vendor_id;	config_table.sub_device_id = sys_tbl->sub_device_id;	config_table.rev = sys_tbl->rev;	config_table.sys_clock = sys_tbl->sys_clock;	config_table.ext_clock = sys_tbl->ext_clock;	config_table.rom_base = init_param->rom_base;	config_table.rom_size = get_rom_size(sys_tbl);	config_table.bios_offset = 0;	config_table.bios_size = sys_tbl->bios_size;	config_table.system_table_offset = init_param->system_table_offset;	config_table.system_table_size = sys_tbl->system_table_size;	config_table.partition_table_offset = sys_tbl->partition_table_offset;	config_table.partition_table_size = sys_tbl->partition_table_size;	config_table.dram_base = init_param->dram_base;	config_table.dram_size = get_dram_size(sys_tbl);	get_uart0_cfg(sys_tbl, &config_table.uart[0]);	get_uart1_cfg(sys_tbl, &config_table.uart[1]);	get_eth_cfg(sys_tbl, &config_table.eth);	get_ne2000_cfg(sys_tbl, &config_table.ne2000);	get_pc97338_cfg(sys_tbl, &config_table.pc97338);	get_uart16550_cfg(sys_tbl, &config_table.uart16550);	config_table.startup_mode = sys_tbl->startup_mode;	config_table.tftp_ipaddr = sys_tbl->tftp_ipaddr;	flash_init();	return 0;}int bios_call_internal(unsigned long id, unsigned long arg)
{	switch (id) {	case BIOSCALL_INIT:		bios_call_init((struct biosapi_init_struct *)arg);		break;	case BIOSCALL_REBOOT:		reboot();		break;	case BIOSCALL_GET_VENDORID:		*(unsigned short *)arg = config_table.vendor_id;		break;	case BIOSCALL_GET_DEVICEID:		*(unsigned short *)arg = config_table.device_id;		break;	case BIOSCALL_GET_SUBVENDORID:		*(unsigned short *)arg = config_table.sub_vendor_id;		break;	case BIOSCALL_GET_SUBDEVICEID:		*(unsigned short *)arg = config_table.sub_device_id;		break;	case BIOSCALL_GET_REV:		*(unsigned long *)arg = config_table.rev;		break;	case BIOSCALL_GET_SYSCLOCK:		*(unsigned long *)arg = config_table.sys_clock;		break;	case BIOSCALL_GET_EXTCLOCK:		*(unsigned long *)arg = config_table.ext_clock;		break;	case BIOSCALL_GET_ROMBASE:		*(unsigned long *)arg = config_table.rom_base;		break;	case BIOSCALL_GET_ROMSIZE:		*(unsigned long *)arg = config_table.rom_size;		break;	case BIOSCALL_GET_DRAMBASE:		*(unsigned long *)arg = config_table.dram_base;		break;	case BIOSCALL_GET_DRAMSIZE:		*(unsigned long *)arg = config_table.dram_size;		break;	case BIOSCALL_GET_BIOSOFFSET:		*(unsigned long *)arg = config_table.bios_offset;		break;	case BIOSCALL_GET_BIOSSIZE:		*(unsigned long *)arg = config_table.bios_size;		break;	case BIOSCALL_GET_SYSTEMTABLEOFFSET:		*(unsigned long *)arg = config_table.system_table_offset;		break;	case BIOSCALL_GET_SYSTEMTABLESIZE:		*(unsigned long *)arg = config_table.system_table_size;		break;	case BIOSCALL_GET_PARTITIONTABLEOFFSET:		*(unsigned long *)arg = config_table.partition_table_offset;		break;	case BIOSCALL_GET_PARTITIONTABLESIZE:		*(unsigned long *)arg = config_table.partition_table_size;		break;	case BIOSCALL_FLASH_ERASE:		flash_erase(((struct flash_erase_struct *)arg)->addr,			((struct flash_erase_struct *)arg)->size);		break;	case BIOSCALL_FLASH_READ:		flash_read(((struct flash_read_struct *)arg)->from,			((struct flash_read_struct *)arg)->len,			&(((struct flash_read_struct *)arg)->retlen),			((struct flash_read_struct *)arg)->buf);		break;	case BIOSCALL_FLASH_WRITE:		flash_write(((struct flash_write_struct *)arg)->to,			((struct flash_write_struct *)arg)->len,			&(((struct flash_write_struct *)arg)->retlen),			((struct flash_write_struct *)arg)->buf);		break;	case BIOSCALL_GET_UART0CFG:		*(struct uart_cfg *)arg = config_table.uart[0];		break;	case BIOSCALL_GET_UART1CFG:		*(struct uart_cfg *)arg = config_table.uart[1];		break;	case BIOSCALL_GET_ETHCFG:		*(struct eth_cfg *)arg = config_table.eth;		break;	case BIOSCALL_GET_NE2000CFG:		*(struct ne2000_cfg *)arg = config_table.ne2000;		break;	case BIOSCALL_GET_PC97338CFG:		*(struct pc97338_cfg *)arg = config_table.pc97338;		break;	case BIOSCALL_GET_UART16550CFG:		*(struct uart16550_cfg *)arg = config_table.uart16550;		break;	case BIOSCALL_GET_STARTUPMODE:		*(unsigned long *)arg = config_table.startup_mode;		break;	case BIOSCALL_GET_TFTPIPADDR:		*(unsigned long *)arg = config_table.tftp_ipaddr;		break;	default:		return -1;	}
	return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久女同精品一区二区| 麻豆成人91精品二区三区| 欧美电影一区二区| 国产精品国产三级国产aⅴ入口| 91久久精品一区二区三区| 伦理电影国产精品| 国产亚洲精品aa| 欧美一区二区网站| 色噜噜狠狠成人中文综合| 一级日本不卡的影视| 亚洲综合成人在线| 视频一区视频二区中文字幕| 日韩国产精品久久久久久亚洲| 日本午夜一本久久久综合| 久久精品二区亚洲w码| 国产成人av电影免费在线观看| 成人在线视频首页| 欧美视频一区二区三区在线观看| 欧美人体做爰大胆视频| 久久综合五月天婷婷伊人| 国产精品毛片无遮挡高清| 亚洲6080在线| 国产成人h网站| 欧美日韩三级一区| 久久久久亚洲蜜桃| 一区二区三区四区蜜桃| 奇米色一区二区| 处破女av一区二区| 91 com成人网| 国产精品久久久久一区二区三区| 亚洲一区二区黄色| 国产精品一区二区久久不卡 | 国产成人自拍在线| 91免费国产在线| 欧美一级二级在线观看| 国产免费成人在线视频| 亚洲成人动漫一区| 国产高清精品久久久久| 欧美视频你懂的| 亚洲国产高清不卡| 久久国产麻豆精品| 欧美在线不卡一区| 久久久精品人体av艺术| 日韩专区欧美专区| 色婷婷综合久久久中文字幕| xnxx国产精品| 肉色丝袜一区二区| 色综合亚洲欧洲| 欧美极品xxx| 精品一区二区在线观看| 91成人免费电影| 国产精品拍天天在线| 美女视频黄a大片欧美| 欧美吞精做爰啪啪高潮| 亚洲色欲色欲www| 国产激情91久久精品导航| 欧美一级日韩免费不卡| 亚洲黄色在线视频| eeuss国产一区二区三区| 精品蜜桃在线看| 卡一卡二国产精品| 欧美日韩国产区一| 亚洲午夜久久久| 色婷婷久久久亚洲一区二区三区 | 欧美在线观看一二区| 国产精品久久综合| 国产jizzjizz一区二区| 久久先锋资源网| 国产在线精品国自产拍免费| 欧美一区二区啪啪| 奇米色一区二区| 欧美videofree性高清杂交| 日韩国产精品久久| 欧美一二三四区在线| 日本va欧美va精品发布| 日韩精品一区二区三区视频| 日韩vs国产vs欧美| 欧美一区二区性放荡片| 久久精品国产成人一区二区三区| 精品视频资源站| 天堂久久久久va久久久久| 在线成人免费视频| 三级成人在线视频| 欧美精品123区| 麻豆精品一区二区| 在线观看视频一区二区| 亚洲激情自拍偷拍| 欧美人牲a欧美精品| 另类欧美日韩国产在线| 精品少妇一区二区三区在线视频| 久久精品免费观看| 欧美一级在线免费| 国产激情精品久久久第一区二区 | 麻豆成人免费电影| 久久久久国产精品人| 99热这里都是精品| 亚洲国产精品影院| 欧美精品一区二区三区一线天视频| 国产精品中文有码| 伊人性伊人情综合网| 欧美一区二区私人影院日本| 成人在线综合网| 夜夜精品视频一区二区 | 国产福利精品一区二区| 一区二区三区日韩在线观看| 91麻豆国产精品久久| 日韩福利电影在线| 久久久五月婷婷| 欧美色图激情小说| 高潮精品一区videoshd| 亚洲一区二区视频在线观看| 久久久久久免费| 欧美色手机在线观看| 国产精品18久久久久久久久 | 国产日韩亚洲欧美综合| 一本久久a久久免费精品不卡| 婷婷夜色潮精品综合在线| 欧美高清在线精品一区| 5858s免费视频成人| 99久久99久久精品国产片果冻| 日韩精品电影在线观看| 日韩毛片高清在线播放| www激情久久| 欧美精品第1页| 色婷婷综合久久久| 国产v日产∨综合v精品视频| 日本大胆欧美人术艺术动态| 亚洲六月丁香色婷婷综合久久 | 日韩精品一区二区三区蜜臀| 99精品视频在线免费观看| 国产精品一区在线| 美腿丝袜亚洲三区| 婷婷夜色潮精品综合在线| 亚洲免费高清视频在线| 欧美激情一区三区| 精品国产乱码久久久久久1区2区| 欧美日韩在线三区| 91久久精品一区二区| 日本精品裸体写真集在线观看| 国产成人精品网址| 精品制服美女丁香| 久久草av在线| 美女视频黄久久| 另类小说图片综合网| 老汉av免费一区二区三区| 日本不卡123| 另类小说色综合网站| 黄色精品一二区| 久久国产福利国产秒拍| 捆绑调教美女网站视频一区| 日韩—二三区免费观看av| 免费三级欧美电影| 免费日韩伦理电影| 国内欧美视频一区二区| 精品影院一区二区久久久| 国内精品久久久久影院薰衣草| 蜜桃91丨九色丨蝌蚪91桃色| 蜜臀国产一区二区三区在线播放| 日韩电影一区二区三区| 九九九久久久精品| 粗大黑人巨茎大战欧美成人| av福利精品导航| 欧美伊人久久久久久久久影院 | 777精品伊人久久久久大香线蕉| 在线不卡一区二区| 日韩一区二区三区视频在线| 日韩限制级电影在线观看| 久久一日本道色综合| 久久久久国产精品人| 国产精品国产成人国产三级 | 激情综合色播五月| 国产乱色国产精品免费视频| 成人黄色小视频在线观看| 色综合网站在线| 欧美一区二区三区爱爱| 国产人伦精品一区二区| 亚洲一卡二卡三卡四卡五卡| 热久久免费视频| 国产高清不卡一区二区| av男人天堂一区| 日韩欧美国产精品| 中文字幕在线观看不卡| 亚洲一区在线播放| 精品一区二区三区久久久| 99久久精品国产毛片| 7777精品伊人久久久大香线蕉超级流畅 | 久久久.com| 亚洲日本va在线观看| 免费在线观看日韩欧美| a亚洲天堂av| 91麻豆精品国产91久久久资源速度 | 高清在线观看日韩| 欧美日韩亚洲综合在线| 国产免费观看久久| 男女视频一区二区| 色婷婷亚洲精品| 中文字幕免费一区| 老色鬼精品视频在线观看播放| 99久久久免费精品国产一区二区| 91精品国产综合久久久久久久|