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

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

?? bios.c

?? bootloader
?? C
字號:
#include "types.h"#include "bios.h"#include "bioscall.h"#include "board.h"#include "config.h"#include "console.h"#include "utils.h"#include "bootloader.h"extern const unsigned long _rom_base;extern const unsigned long bios_table_offset;extern const unsigned long safe_table_offset;extern const unsigned char sysinit_data[];extern const unsigned char biosapi_data[];extern const unsigned char setup_data[];extern const unsigned char fdisk_data[];extern const unsigned char tftp_data[];extern const unsigned char gunzip_data[];#define gunzip(inbuf, insize, outbuf, outsize)	\	((GUNZIP *)GUNZIP_ADDR)(inbuf, insize, outbuf, outsize)int sys_init(struct system_table_struct *system_table, unsigned long rom_base, unsigned long dram_base){	typedef int (SYSINIT)(struct system_table_struct *, unsigned long, unsigned long);	SYSINIT *sys_init_ptr;	memcpy((char *)SRAM_BASE, sysinit_data, 1024 * 3);	sys_init_ptr = (SYSINIT *)SRAM_BASE;	sys_init_ptr(system_table, rom_base, dram_base);	return 0;}int biosapi_init(struct system_table_struct *system_table){	unsigned char *inbuf;	unsigned long insize;	unsigned char *outbuf;	unsigned long outsize;	struct biosapi_init_struct init_param;	BIOSCALL *fp;	/* load gunzip */	memcpy((char *)GUNZIP_ADDR, gunzip_data, 1024 * 10);		inbuf = (unsigned char *)biosapi_data;	outbuf = (unsigned char *)BIOS_API_ADDR;	insize = 0x7fffffff;	outsize = 0x7fffffff;	gunzip(inbuf, &insize, outbuf, &outsize);	init_param.rom_base = _rom_base;	init_param.dram_base = DRAM_BASE;	init_param.system_table = system_table;	fp = (BIOSCALL *)outbuf;	return (*fp)(BIOSCALL_INIT, (unsigned long)&init_param);  // Init BIOS call}int load_setup(void){	typedef int (SETUP)(void);	unsigned char *inbuf;	unsigned long insize;	unsigned char *outbuf;	unsigned long outsize;	SETUP *setup_ptr;	inbuf = (unsigned char *)setup_data;	outbuf = (unsigned char *)SETUP_ADDR;	insize = 0x7fffffff;	outsize = 0x7fffffff;	gunzip(inbuf, &insize, outbuf, &outsize);	setup_ptr = (SETUP *)SETUP_ADDR;	setup_ptr();	return 0;}int load_fdisk(void){	typedef int (FDISK)(void);	unsigned char *inbuf;	unsigned long insize;	unsigned char *outbuf;	unsigned long outsize;	FDISK *fdisk_ptr;	inbuf = (unsigned char *)fdisk_data;	outbuf = (unsigned char *)FDISK_ADDR;	insize = 0x7fffffff;	outsize = 0x7fffffff;	gunzip(inbuf, &insize, outbuf, &outsize);	fdisk_ptr = (FDISK *)FDISK_ADDR;	fdisk_ptr();	return 0;}int load_tftp(unsigned long mode, unsigned long param){	typedef int (TFTP)(unsigned long, unsigned long);	unsigned char *inbuf;	unsigned long insize;	unsigned char *outbuf;	unsigned long outsize;	TFTP *tftp_ptr;	inbuf = (unsigned char *)tftp_data;	outbuf = (unsigned char *)TFTP_ADDR;	insize = 0x7fffffff;	outsize = 0x7fffffff;	gunzip(inbuf, &insize, outbuf, &outsize);	tftp_ptr = (TFTP *)TFTP_ADDR;		return tftp_ptr(mode, param);}int check_partition(struct partition_struct *partition){	if (partition->flag == PART_FLAG_NONE) {		printf("Non-exist Partition!\r\n");		return -1;	}	if (partition->flag == PART_FLAG_NET) {		printf("Network Partition!\r\n");		return -1;	}		if (partition->type == PART_TYPE_RO) {		printf("Read-only Partition!\r\n");		return -1;	}	return 0;}struct partition_struct *select_partition(struct partition_table_struct *partition_table){	struct partition_struct *partition;	int i;	printf("\r\n");	for (i = 0; i < PART_MAX_NUM; i++) {		partition = &partition_table->partition[i];		printf("Partition %d : ", i + 1);		if (partition->flag == PART_FLAG_NONE) {			printf("None");		} else {			printf("0x%08lx - 0x%08lx" , partition->offset,				partition->offset + partition->size - 1);		}		printf("\r\n");	}	do {		printf("\r\nUpdate image on which partition (1 - 8) ");		i = get_select('1', '8');		printf("\r\n");		if (i < 0)			return NULL;					partition = &partition_table->partition[i];	} while (check_partition(partition));	return partition;}int setup_uclinux_cmdline(struct partition_struct *partition){	struct tag *tag;	char *s;	tag = (struct tag *)(partition->param_addr);	tag->hdr.tag = ATAG_CORE;	tag->hdr.size = 2;	if (partition->command_line[0] != '\0') {		tag = (struct tag *)((u32 *)tag + tag->hdr.size);		tag->hdr.tag = ATAG_CMDLINE;		tag->hdr.size = 2 + CMD_LENGTH/sizeof(u32);				s = (char *)&(tag->u);		memcpy(s, partition->command_line, CMD_LENGTH);		s[CMD_LENGTH - 1] = '\0';	}		tag = (struct tag *)((u32 *)tag + tag->hdr.size);	tag->hdr.tag = ATAG_NONE;	tag->hdr.size = 0;	return 0;}unsigned char *load_image(struct partition_table_struct *partition_table,		struct boot_param_struct *boot_param){	char *inbuf;	char *outbuf;	char *exec_addr;	unsigned long insize;	unsigned long outsize;	struct partition_struct *partition;	int i;	i = partition_table->boot_partition;	if (i < 0 || i > PART_MAX_NUM) {		printf("\r\nNo BOOT partition found!\r\n");		return NULL;	}		/* prepare buffers */	partition = &partition_table->partition[i];	exec_addr = (char *)(partition->exec_addr);	if (partition->flag == PART_FLAG_NET) {		printf("\r\nLoading Image From Net ................ \r\n");		insize = load_tftp(BOOT_LOAD_IMAGE, 0);		insize = ((insize + 3) & ~0x00000003);		if (insize == 0) {			printf("\r\nCancel\r\n");			return NULL;		}		outsize = 0x7fffffff;		inbuf = (char *)BUF_ADDR;		outbuf = inbuf + insize;		if (outbuf < (char *)exec_addr)			outbuf = (char *)exec_addr;	} else if (partition->flag == PART_FLAG_DISK) {		printf("\r\nLoading Image From Disk ............... ");		insize = partition->size;		if (insize == 0) {			printf("Cancel\r\n");			return NULL;		}		outsize = 0x7fffffff;		inbuf = (char *)(_rom_base + partition->offset);		outbuf = (char *)BUF_ADDR;		if (outbuf < (char *)exec_addr)			outbuf = (char *)exec_addr;	} else {		printf("\r\nNo BOOT partition found!\r\n");		return NULL;	}	/* load image to ram */	if (partition->gzipped_image) {		if (!gunzip(inbuf, &insize, outbuf, &outsize)) {			outsize = ((outsize + 3) & ~0x00000003);			if (outbuf != (char *)exec_addr)				memmove((char *)exec_addr, outbuf, outsize);		} else {			printf("Gunzip error!\r\n");			return NULL;		}	} else {		if (inbuf != (char *)exec_addr)			memmove((char *)exec_addr, inbuf, insize);	}	printf("Done\r\n");	/* setup boot parameters */	if (partition->image_type == IMAGE_UCLINUX) {		boot_param->r0 = 0;		boot_param->r1 = MACH_TYPE_SAMSUNG;		boot_param->r2 = partition->param_addr;		boot_param->r3 = 0;		setup_uclinux_cmdline(partition);	} else {		boot_param->r0 = 0;		boot_param->r1 = 0;		boot_param->r2 = 0;		boot_param->r3 = 0;	}	return (unsigned char *)(partition->exec_addr);}int main_menu(const char *password){	int list[] = {		BOOT_BIOS_SETUP,		BOOT_RUN_FDISK,		BOOT_LOAD_IMAGE,		BOOT_UPDATE_IMAGE,		BOOT_REBOOT	};	int select;	if ((password != NULL) && (password[0] != '\0')) {		char s[PASSWD_LENGTH];		printf("\r\n");		do {			printf("Password: ");			getpass(s, PASSWD_LENGTH, '*');			printf("\r\n");		} while (strncmp(password, s, PASSWD_LENGTH));	}	printf("\r\n\r\nMain Menu\r\n\r\n");	printf("1 - BIOS Setup\r\n");	printf("2 - Run Fdisk\r\n");	printf("3 - Load Image\r\n");	printf("4 - Update Image\r\n");	printf("5 - Reboot\r\n");	printf("\r\nPlease Select ");		while ( (select = get_select('1', '5')) < 0);	printf("\r\n");	return list[select];}/* *  Main BIOS functions */unsigned char *bios_main(struct boot_param_struct *boot_param){	struct bios_table_struct *bios_table, *safe_table;	struct system_table_struct *system_table;	struct partition_table_struct *partition_table;	struct partition_struct *partition;	unsigned char *exec_addr;	unsigned long startup_mode;	int i, ch, first_menu;		console_init();	printf("\r\n\r\n");	printf("Compex BIOS for SAMSUNG S3C4510B v1.20-lt73\r\n\r\n");	bios_table = (struct bios_table_struct *)(_rom_base + bios_table_offset);	safe_table = (struct bios_table_struct *)(_rom_base + safe_table_offset);	system_table = &bios_table->system_table;	partition_table = &bios_table->partition_table;		printf("Press Enter for Menu, Esc for Safe Mode\r\n");	startup_mode = 0;	for (i = 0; i < 10000; i++) {		if (!kbhit())			continue;		ch = getch();		if (ch == KEY_ENTER) {			startup_mode = 1;			break;		} else if (ch == KEY_ESC) {			system_table = &safe_table->system_table;			printf("Chosen Safe Mode\r\n");			break;		}	}		printf("\r\nInitializing system .... ");	sys_init(system_table, _rom_base, DRAM_BASE);	printf("Done\r\n");	biosapi_init(system_table);	if (startup_mode)		startup_mode = BOOT_MENU;	else		startup_mode = bios_startup_mode();	first_menu = 1;	while (1) {		bios_set_userflag(USERFLAG_NONE);		switch (startup_mode) {		case BOOT_MENU:			if (first_menu) {				first_menu = 0;				startup_mode = main_menu(system_table->password);			} else				startup_mode = main_menu(NULL);			break;		case BOOT_BIOS_SETUP:			load_setup();			startup_mode = BOOT_MENU;			break;		case BOOT_RUN_FDISK:			load_fdisk();			startup_mode = BOOT_MENU;			break;		case BOOT_LOAD_IMAGE:			exec_addr = load_image(partition_table, boot_param);			if (exec_addr != NULL) {				/* setup CPU parameters */				boot_param->reg_clkcon = system_table->cpu.reg_clkcon;				boot_param->reg_syscfg = system_table->cpu.reg_syscfg;				return exec_addr;			}			startup_mode = BOOT_MENU;			break;		case BOOT_UPDATE_IMAGE:			partition = select_partition(partition_table);			if (partition != NULL)				load_tftp(startup_mode, (unsigned long)partition);			startup_mode = BOOT_MENU;			break;		case BOOT_REBOOT:			bios_reboot();			startup_mode = BOOT_MENU;			break;		default:			startup_mode = BOOT_MENU;			break;		}		switch (bios_get_userflag()) {		case USERFLAG_MEMORY:			printf("\r\nMemory configuration changed, reboot? (Y/n) ");			if (get_yes_no(1)) {				printf("\r\n");				bios_reboot();			} else				printf("\r\n");			break;		case USERFLAG_BIOS:			printf("\r\nBIOS default loaded, reboot? (Y/n) ");			if (get_yes_no(1)) {				printf("\r\n");				bios_reboot();			} else				printf("\r\n");			break;		default:			break;		}	}	return (unsigned char *)_rom_base;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美卡一卡二| 麻豆一区二区在线| 99re在线视频这里只有精品| 国产精品盗摄一区二区三区| 91婷婷韩国欧美一区二区| 亚洲精品国产成人久久av盗摄| 色综合色狠狠天天综合色| 一区2区3区在线看| 欧美一区二区三区视频免费播放| 精品精品欲导航| 亚洲成人一二三| 欧美成人a在线| 成人综合在线观看| 亚洲精品视频自拍| 欧美男同性恋视频网站| 激情久久五月天| 国产精品免费免费| 欧美天堂亚洲电影院在线播放 | 亚洲精品一卡二卡| 欧美疯狂做受xxxx富婆| 国产综合久久久久久久久久久久| 国产女主播在线一区二区| 日本道在线观看一区二区| 日韩电影在线一区二区三区| 在线观看成人免费视频| 免费精品99久久国产综合精品| 国产视频911| 欧洲视频一区二区| 极品少妇xxxx精品少妇| 国产一区二区在线电影| 五月天丁香久久| 久久免费看少妇高潮| 亚洲日本在线观看| a在线播放不卡| 日韩成人伦理电影在线观看| 欧美激情一区二区三区四区| 欧美三日本三级三级在线播放| 经典三级一区二区| 亚洲免费观看高清完整版在线观看熊| 欧美在线小视频| 国产乱子轮精品视频| 亚洲自拍欧美精品| 久久久噜噜噜久久人人看 | 美国三级日本三级久久99| 中文无字幕一区二区三区| 国产精品综合在线视频| 亚洲综合丁香婷婷六月香| 精品久久国产97色综合| 欧美性大战久久| 国产成人h网站| 天涯成人国产亚洲精品一区av| 国产欧美一区二区精品忘忧草| 欧美日韩国产一级| 成人不卡免费av| 麻豆91免费观看| 欧美老年两性高潮| 奇米888四色在线精品| 日韩一区在线看| 久久综合久久综合亚洲| 欧美日本视频在线| av在线不卡电影| 国产自产视频一区二区三区| 亚洲高清不卡在线观看| 欧美综合一区二区三区| 国产在线视频一区二区三区| 午夜视频在线观看一区二区 | 欧美色视频一区| 成人免费视频免费观看| 国产精品无码永久免费888| 91精品国产综合久久国产大片 | 99久久久免费精品国产一区二区| 蜜乳av一区二区三区| 一区二区三区毛片| 国产精品传媒在线| 国产亚洲1区2区3区| 欧美一三区三区四区免费在线看| 图片区日韩欧美亚洲| 欧美一级爆毛片| 欧美亚洲国产一区二区三区va| 懂色av一区二区夜夜嗨| 久久99精品久久久久久久久久久久| 亚洲国产成人av| 曰韩精品一区二区| 国产精品盗摄一区二区三区| 中文字幕免费一区| 久久先锋资源网| 日韩欧美久久一区| 欧美一级免费大片| 欧美福利一区二区| 91精品国产综合久久香蕉的特点| 在线视频国内一区二区| 91啪亚洲精品| 91在线免费播放| 青青草伊人久久| 婷婷综合久久一区二区三区| 亚洲福利一二三区| 91麻豆精品国产91久久久久久久久| 日本韩国欧美国产| 日本久久电影网| 成人va在线观看| 成人禁用看黄a在线| 福利一区福利二区| 亚洲色图视频免费播放| 欧美日韩精品一区二区三区四区| 色呦呦日韩精品| 色偷偷久久人人79超碰人人澡| 99精品一区二区| 99国产精品久久久久久久久久| heyzo一本久久综合| 播五月开心婷婷综合| a4yy欧美一区二区三区| 99国产一区二区三精品乱码| 成av人片一区二区| 99久久er热在这里只有精品66| av电影在线观看一区| 91蜜桃婷婷狠狠久久综合9色| 一本色道综合亚洲| 色偷偷一区二区三区| 欧美日韩视频在线观看一区二区三区 | 久久精品视频一区| 久久久久9999亚洲精品| 国产欧美视频在线观看| 中文字幕不卡在线观看| 亚洲天堂免费看| 亚洲最新视频在线观看| 亚洲成在人线在线播放| 日韩成人一级片| 激情五月婷婷综合| 国产寡妇亲子伦一区二区| 久久久久久久综合色一本| 精品区一区二区| 日本一区二区三区在线不卡| 中文字幕一区二区三区在线观看| 豆国产96在线|亚洲| 精品国产1区2区3区| 国产视频一区二区三区在线观看| 中文子幕无线码一区tr| 亚洲裸体xxx| 亚洲大尺度视频在线观看| 久久国内精品视频| 成人免费av资源| 欧美主播一区二区三区| 欧美一级专区免费大片| 久久九九99视频| 亚洲美女在线国产| 琪琪久久久久日韩精品| 国产黄色精品网站| 91麻豆高清视频| 国产98色在线|日韩| 一本一道久久a久久精品| 欧美高清视频一二三区| 久久这里只有精品首页| 亚洲色图制服丝袜| 日韩精品欧美精品| 国产xxx精品视频大全| 在线观看亚洲专区| 久久久影院官网| 一区二区三区在线观看国产| 蜜桃久久久久久| 亚洲男人天堂av网| 亚洲裸体在线观看| 精品一区二区成人精品| av亚洲精华国产精华精华 | 欧美精品久久天天躁| 久久免费精品国产久精品久久久久| 亚洲美女一区二区三区| 久久精品噜噜噜成人av农村| 99精品一区二区| 日韩免费电影一区| 依依成人精品视频| 狠狠色2019综合网| 在线观看国产一区二区| 久久久综合精品| 香蕉加勒比综合久久| 高清不卡在线观看av| 7777精品伊人久久久大香线蕉| 国产免费久久精品| 久久久国产精品不卡| 精品国产91久久久久久久妲己| 亚洲免费资源在线播放| 久久99国产精品久久| 在线观看一区不卡| 国产亚洲欧美一级| 日韩国产精品久久久| 91免费在线视频观看| 2021中文字幕一区亚洲| 亚洲成人免费影院| av一本久道久久综合久久鬼色| 日韩欧美一区二区视频| 一区二区三区精品久久久| 久久久噜噜噜久噜久久综合| 亚洲色图欧美偷拍| 国产一区二区不卡| 678五月天丁香亚洲综合网| 最新成人av在线| 国产高清不卡一区| 日韩精品综合一本久道在线视频| 亚洲综合久久av| 9i在线看片成人免费| 久久久综合九色合综国产精品|