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

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

?? osi-scsi.c

?? open source bios with linux platform, very good and can be reused.
?? C
字號:
/*  *   Creation Date: <2003/12/11 21:23:54 samuel> *   Time-stamp: <2004/01/07 19:38:45 samuel> *    *	<osi-scsi.c> *	 *	SCSI device node *    *   Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) *    *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   version 2 *    */#include "openbios/config.h"#include "openbios/bindings.h"#include "mol/mol.h"#include "scsi_sh.h"#include "osi_calls.h"#define MAX_TARGETS	32typedef struct {	int		probed;	int		valid;		/* a useable device found */	int		is_cd;	int		blocksize;} target_info_t;static target_info_t 	scsi_devs[ MAX_TARGETS ];typedef struct {	int		target;	target_info_t	*info;} instance_data_t;DECLARE_NODE( scsi, INSTALL_OPEN, sizeof(instance_data_t),	      "/pci/pci-bridge/mol-scsi/sd", "/mol/mol-scsi/sd" );static intscsi_cmd_( instance_data_t *sd, const char *cmd, int cmdlen, char *dest,	   int len, int prelen, int postlen ){	char prebuf[4096], postbuf[4096];	scsi_req_t r[2];	/* the [2] is a hack to get space for the sg-list */	char sb[32];	/* memset( dest, 0, len ); */	if( (uint)prelen > sizeof(prebuf) || (uint)postlen > sizeof(postbuf) ) {		printk("bad pre/post len %d %d\n", prelen, postlen );		return 1;	}	memset( r, 0, sizeof(r[0]) );	r->lun = 0;	r->target = sd->target;	r->is_write = 0;	memcpy( r->cdb, cmd, cmdlen );	r->client_addr = (int)&r;	r->cdb_len = cmdlen;	r->sense[0].base = (int)&sb;	r->sense[0].size = sizeof(sb);	r->size = prelen + len + postlen;	r->n_sg = 3;	r->sglist.n_el = 3;	r->sglist.vec[0].base = (int)prebuf;	r->sglist.vec[0].size = prelen;	r->sglist.vec[1].base = (int)dest;	r->sglist.vec[1].size = len;	r->sglist.vec[2].base = (int)postbuf;	r->sglist.vec[2].size = postlen;	if( OSI_SCSISubmit((int)&r) ) {		printk("OSI_SCSISubmit: error!\n");		return 1;	}	while( !OSI_SCSIAck() )		OSI_USleep( 10 );	if( r->adapter_status )		return -1;	if( r->scsi_status )		return ((sb[2] & 0xf) << 16) | (sb[12] << 8) | sb[13];	return 0;}static intscsi_cmd( instance_data_t *sd, const char *cmd, int cmdlen ){	return scsi_cmd_( sd, cmd, cmdlen, NULL, 0, 0, 0 );}/* ( buf blk nblks -- actual ) */static voidscsi_read_blocks( instance_data_t *sd ){	int nblks = POP();	int blk = POP();	char *dest = (char*)POP();	unsigned char cmd[10];	int len = nblks * sd->info->blocksize;		memset( dest, 0, len );	/* printk("READ: blk: %d length %d\n", blk, len ); */	memset( cmd, 0, sizeof(cmd) );	cmd[0] = 0x28; /* READ_10 */	cmd[2] = blk >> 24;	cmd[3] = blk >> 16;	cmd[4] = blk >> 8;	cmd[5] = blk;	cmd[7] = nblks >> 8;	cmd[8] = nblks;	if( scsi_cmd_(sd, cmd, 10, dest, len, 0, 0) ) {		printk("read: scsi_cmd failed\n");		RET( -1 );	}	PUSH( nblks );}static intinquiry( instance_data_t *sd ){	char inquiry_cmd[6] = { 0x12, 0, 0, 0, 32, 0 };	char start_stop_unit_cmd[6] = { 0x1b, 0, 0, 0, 1, 0 };	char test_unit_ready_cmd[6] = { 0x00, 0, 0, 0, 0, 0 };	char prev_allow_medium_removal[6] = { 0x1e, 0, 0, 0, 1, 0 };	char set_cd_speed_cmd[12] = { 0xbb, 0, 0xff, 0xff, 0xff, 0xff,				      0, 0, 0, 0, 0, 0 };	target_info_t *info = &scsi_devs[sd->target];	char ret[32];	int i, sense;	if( sd->target >= MAX_TARGETS )		return -1;	sd->info = info;	if( info->probed )		return info->valid ? 0:-1;	info->probed = 1;	if( (sense=scsi_cmd_(sd, inquiry_cmd, 6, ret, 2, 0, 0)) ) {		if( sense < 0 )			return -1;		printk("INQUIRY failed\n");		return -1;	}	/* medium present? */	if( (scsi_cmd(sd, test_unit_ready_cmd, 6) >> 8) == 0x23a ) {		printk("no media\n");		return -1;	}	info->is_cd = 0;	info->blocksize = 512;	if( ret[0] == 5 /* CD/DVD */ ) {		info->blocksize = 2048;		info->is_cd = 1;		scsi_cmd( sd, prev_allow_medium_removal, 6 );		scsi_cmd( sd, set_cd_speed_cmd, 12 );		scsi_cmd( sd, start_stop_unit_cmd, 6 );	} else if( ret[0] == 0 /* DISK */ ) {		scsi_cmd( sd, test_unit_ready_cmd, 6 );		scsi_cmd( sd, start_stop_unit_cmd, 6 );	} else {		/* don't boot from this device (could be a scanner :-)) */		return -1;	}	/* wait for spin-up (or whatever) to complete */	for( i=0; ; i++ ) {		if( i > 300 ) {			printk("SCSI timeout (sense %x)\n", sense );			return -1;		}		sense = scsi_cmd( sd, test_unit_ready_cmd, 6 );		if( (sense & 0xf0000) == 0x20000 ) {			OSI_USleep( 10000 );			continue;		}		break;	} 	info->valid = 1;	return 0;}/* ( -- success? ) */static voidscsi_open( instance_data_t *sd ){	static int once = 0;	phandle_t ph;	fword("my-unit");	sd->target = POP();	if( !once ) {		once++;		OSI_SCSIControl( SCSI_CTRL_INIT, 0 );	}	/* obtiain device information */	if( inquiry(sd) )		RET(0);	selfword("open-deblocker");	/* interpose disk-label */	ph = find_dev("/packages/disk-label");	fword("my-args");	PUSH_ph( ph );	fword("interpose");	PUSH( -1 );}/* ( -- ) */static voidscsi_close( instance_data_t *pb ){	selfword("close-deblocker");}/* ( -- bs ) */static voidscsi_block_size( instance_data_t *sd ){	PUSH( sd->info->blocksize );}/* ( -- maxbytes ) */static voidscsi_max_transfer( instance_data_t *sd ){	PUSH( 1024*1024 );}static voidscsi_initialize( instance_data_t *sd ){	fword("is-deblocker");}NODE_METHODS( scsi ) = {	{ NULL,			scsi_initialize	},	{ "open",		scsi_open		},	{ "close",		scsi_close		},	{ "read-blocks",	scsi_read_blocks	},	{ "block-size",		scsi_block_size	},	{ "max-transfer",	scsi_max_transfer	},};voidosiscsi_init( void ){	REGISTER_NODE( scsi );}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
8x福利精品第一导航| 99久久精品国产一区二区三区 | 亚洲欧美一区二区三区国产精品| 国产盗摄女厕一区二区三区| 国产日本欧洲亚洲| 成人精品国产免费网站| 中日韩免费视频中文字幕| 99久久伊人精品| 亚洲一区二区三区免费视频| 91麻豆精品国产91久久久久久久久| 日本亚洲电影天堂| 欧美精品一区二区不卡 | 一区二区欧美精品| 在线电影一区二区三区| 极品美女销魂一区二区三区| 日本一区二区久久| 色菇凉天天综合网| 日本在线不卡视频一二三区| 久久久综合视频| 一本色道久久综合亚洲91| 午夜成人免费电影| 国产亚洲婷婷免费| 欧美三级韩国三级日本三斤| 欧美日本在线一区| 国产精品伊人色| 亚洲资源中文字幕| 久久蜜臀中文字幕| 欧美亚洲综合久久| 国产精品中文字幕欧美| 亚洲一区二区三区四区在线免费观看| 日韩一区二区三区视频| eeuss鲁片一区二区三区| 日韩国产成人精品| 国产精品白丝在线| 欧美变态tickle挠乳网站| 91免费观看国产| 久久精品99久久久| 亚洲一区二区三区四区在线| 日韩欧美不卡一区| 欧美亚洲动漫精品| 国产成人h网站| 日韩中文字幕亚洲一区二区va在线| 国产亚洲欧美日韩俺去了| 欧美日韩黄色影视| 91色九色蝌蚪| 国产黄色成人av| 日本欧美一区二区| 亚洲综合一区在线| 中文av一区二区| 日韩写真欧美这视频| 色婷婷一区二区| 国产.精品.日韩.另类.中文.在线.播放| 亚洲成人免费电影| 亚洲女同一区二区| 国产精品久久久久久久久动漫| 日韩欧美在线网站| 欧美另类变人与禽xxxxx| 91在线porny国产在线看| 国产不卡高清在线观看视频| 蜜臀精品一区二区三区在线观看 | 亚洲一区免费在线观看| 国产精品蜜臀在线观看| 国产日韩欧美精品综合| 精品国产乱码久久久久久久久| 精品视频999| 欧美日韩综合在线| 日本精品视频一区二区| 99精品热视频| 99久久免费精品| 不卡视频在线看| 成人黄色777网| 成人免费看的视频| 成人午夜在线免费| 成人免费毛片aaaaa**| 懂色av一区二区三区免费看| 国产一区激情在线| 欧美日韩中文字幕一区| 欧美在线免费视屏| 欧美视频中文一区二区三区在线观看| 日本韩国精品在线| 在线观看精品一区| 欧美吞精做爰啪啪高潮| 欧美日本一区二区| 91精品蜜臀在线一区尤物| 欧美电影在哪看比较好| 这里只有精品99re| 精品国产乱码久久久久久免费 | 欧洲中文字幕精品| 在线观看免费亚洲| 欧美精品久久99| 欧美一区二区日韩一区二区| 正在播放亚洲一区| 久久久久久97三级| 国产精品国产三级国产普通话99| 日韩伦理免费电影| 亚洲高清一区二区三区| 蜜桃精品视频在线| 国产精品伊人色| 99精品久久99久久久久| 欧美艳星brazzers| 精品少妇一区二区三区在线视频| 欧美精品一区二区在线观看| 国产欧美视频一区二区三区| 亚洲欧美一区二区三区孕妇| 亚洲成av人综合在线观看| 久久99精品久久久久久| 9i看片成人免费高清| 欧美无砖专区一中文字| 精品免费日韩av| 一区在线播放视频| 视频一区欧美精品| 国产91丝袜在线播放| 欧美性感一区二区三区| 久久久久久久久久美女| 一区二区三区四区国产精品| 麻豆成人91精品二区三区| 成人免费黄色大片| 91精品久久久久久蜜臀| 中文字幕二三区不卡| 天堂蜜桃一区二区三区| 国产91丝袜在线播放0| 欧美人成免费网站| 国产精品美女一区二区三区| 日产国产高清一区二区三区| 成年人国产精品| 日韩欧美黄色影院| 亚洲码国产岛国毛片在线| 国产做a爰片久久毛片| 欧美在线制服丝袜| 国产精品久久三| 另类小说综合欧美亚洲| 色菇凉天天综合网| 国产农村妇女毛片精品久久麻豆| 色老汉一区二区三区| 久久久精品黄色| 日本va欧美va精品| 91传媒视频在线播放| 国产三级一区二区三区| 美女视频免费一区| 欧美三区在线观看| 日韩一区中文字幕| 国产白丝网站精品污在线入口 | 精品三级av在线| 亚洲成人tv网| 日本精品一级二级| 国产精品短视频| 丰满亚洲少妇av| 久久午夜色播影院免费高清| 免费日本视频一区| 在线成人小视频| 婷婷久久综合九色综合伊人色| 91麻豆123| **性色生活片久久毛片| 高清在线不卡av| 国产亚洲综合性久久久影院| 麻豆成人久久精品二区三区小说| 欧美日韩高清一区二区| 亚洲国产cao| 欧美欧美午夜aⅴ在线观看| 亚洲一区二区三区中文字幕| 在线观看日韩电影| 亚洲制服丝袜av| 欧美亚洲国产一区二区三区va| 日韩毛片视频在线看| 97精品久久久午夜一区二区三区| 国产精品女同一区二区三区| 成人晚上爱看视频| 国产精品久久久久久久久快鸭| 成人精品鲁一区一区二区| 国产精品五月天| 99精品视频在线免费观看| 最新国产の精品合集bt伙计| 91小视频在线免费看| 亚洲精品视频一区二区| 欧美午夜片在线观看| 天天亚洲美女在线视频| 亚洲综合久久av| 欧美性大战久久| 日本女人一区二区三区| 欧美一级片免费看| 黑人巨大精品欧美一区| 国产农村妇女毛片精品久久麻豆| eeuss鲁片一区二区三区 | 午夜精品爽啪视频| 91精品国产手机| 国产精品一线二线三线| 国产精品护士白丝一区av| 在线视频国内自拍亚洲视频| 亚洲精品va在线观看| 欧美福利视频导航| 国产美女在线观看一区| 国产精品久久精品日日| 欧美日韩在线电影| 美女脱光内衣内裤视频久久网站| 26uuuu精品一区二区| 99久久99久久精品免费看蜜桃| 亚洲午夜精品在线| 久久久三级国产网站| 色综合一个色综合亚洲| 亚洲成人综合视频|