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

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

?? osi-scsi.c

?? OpenBIOS是一個(gè)開源的BIOS實(shí)現(xiàn)
?? 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 );}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美亚洲| 欧美激情一区二区三区不卡| 亚洲香肠在线观看| 欧美在线观看视频在线| 一区二区三区国产精华| 欧美日本一区二区三区四区| 亚洲成人精品一区二区| 欧美一级欧美三级| 精品无人码麻豆乱码1区2区| 久久免费美女视频| av一区二区三区四区| 亚洲免费资源在线播放| 欧美日本在线看| 国产传媒欧美日韩成人| 亚洲丝袜精品丝袜在线| 欧美精品一卡两卡| 国产综合久久久久影院| 国产精品电影院| 欧美精品高清视频| 国产成人av一区二区| 亚洲欧美日韩电影| 日韩一卡二卡三卡四卡| 国产69精品久久久久777| 亚洲一区在线观看视频| 欧美不卡一区二区三区四区| 成人国产亚洲欧美成人综合网| 亚洲免费在线看| 精品久久国产97色综合| 99精品视频一区二区| 免费在线看一区| 国产精品人成在线观看免费| 9191精品国产综合久久久久久| 精品一区二区三区的国产在线播放| 中文字幕亚洲电影| 欧美一区二区三区电影| 91在线视频免费91| 精品一区精品二区高清| 亚洲一区二区四区蜜桃| 久久亚洲精华国产精华液| 在线中文字幕一区| 成人性生交大片免费看中文| 午夜精品爽啪视频| 中文字幕一区二区三区不卡| 日韩一区二区在线播放| 日本道色综合久久| 国产69精品久久777的优势| 日本在线播放一区二区三区| 国产精品久久久久久久久图文区 | 在线观看日产精品| 国产揄拍国内精品对白| 亚洲成a人在线观看| 国产精品久久久久久久久免费樱桃 | 美国十次了思思久久精品导航| 国产精品国产三级国产普通话三级| 欧美另类z0zxhd电影| 成人99免费视频| 国产一区美女在线| 久久精品国产精品青草| 午夜精品福利一区二区蜜股av | 一区二区三区中文在线观看| 91在线一区二区| 亚洲欧洲日产国产综合网| 成人黄色网址在线观看| 风间由美一区二区av101| 亚洲一区二区三区四区在线| 国产视频一区在线播放| 精品国产91乱码一区二区三区| 欧美午夜一区二区三区免费大片| 懂色av一区二区三区免费看| 国产一区久久久| 韩国一区二区三区| 国产自产v一区二区三区c| 蜜桃视频一区二区三区在线观看| 日日夜夜免费精品| 亚洲国产精品久久一线不卡| 亚洲最大成人综合| 亚洲精品一二三区| 一区二区免费看| 亚洲成人av一区| 亚洲无线码一区二区三区| 亚洲一级在线观看| 亚洲sss视频在线视频| 亚洲大片在线观看| 日本少妇一区二区| 亚洲r级在线视频| 亚洲综合清纯丝袜自拍| 亚洲视频中文字幕| 亚洲色图丝袜美腿| 亚洲欧洲综合另类| 亚洲国产一区二区在线播放| 亚洲一区二区视频在线观看| 五月天久久比比资源色| 免费成人性网站| 国产精品一区二区久激情瑜伽| 国产成人鲁色资源国产91色综| 成人妖精视频yjsp地址| 色婷婷综合激情| 欧美日韩免费一区二区三区视频| 欧美精选在线播放| 日韩欧美国产精品一区| 国产亚洲精品bt天堂精选| 欧美极品aⅴ影院| 亚洲一区免费在线观看| 蜜桃视频一区二区三区在线观看| 国产一区二区三区av电影| 国产91丝袜在线观看| 91福利在线看| 精品999久久久| 国产精品久久久久久久第一福利| 夜夜精品视频一区二区| 久久国产视频网| 色综合天天狠狠| 日韩一二三四区| 日本一区二区久久| 亚洲电影一级片| 美女性感视频久久| 国产成人综合亚洲网站| 国产亚洲欧美一区在线观看| 亚洲欧洲精品一区二区三区| 亚洲一二三四区| 国产激情一区二区三区| 欧日韩精品视频| 久久久精品人体av艺术| 一区二区三区欧美亚洲| 国产精品一区二区不卡| 欧美日韩成人在线| 国产精品麻豆视频| 美女精品自拍一二三四| 99精品久久只有精品| 日韩免费看的电影| 一区二区三区91| 成人黄色av网站在线| 精品国产区一区| 亚洲成人av福利| 91在线精品一区二区三区| 久久综合久久综合久久| 午夜欧美一区二区三区在线播放| 国产成人精品免费| 欧美成人video| 日韩和的一区二区| 91在线无精精品入口| 国产午夜精品久久久久久免费视| 青青草原综合久久大伊人精品| 色香蕉久久蜜桃| 国产精品高清亚洲| 国产不卡高清在线观看视频| 欧美一卡在线观看| 亚洲mv在线观看| 欧美在线观看一区二区| 亚洲品质自拍视频| 成人av网站免费观看| 久久精品视频一区二区| 久久国产麻豆精品| 欧美一区二区三区四区高清| 亚洲一区二区影院| 色哟哟亚洲精品| 亚洲欧美日韩中文播放| 成人美女视频在线观看18| 久久婷婷国产综合精品青草| 免费高清视频精品| 欧美丰满高潮xxxx喷水动漫| 亚洲一区二区在线播放相泽| 91成人看片片| 亚洲小说欧美激情另类| 欧美日韩在线三级| 日韩精彩视频在线观看| 91精品国产色综合久久久蜜香臀| 亚洲成人一区在线| 911精品产国品一二三产区| 婷婷一区二区三区| 日韩午夜激情电影| 日本亚洲免费观看| 欧美电影免费观看完整版| 久久99九九99精品| 久久影院视频免费| 国产成人免费av在线| 国产精品福利影院| 在线亚洲精品福利网址导航| 亚洲成a人v欧美综合天堂 | 成人av电影观看| 18涩涩午夜精品.www| 欧美午夜视频网站| 日韩电影在线观看电影| 日韩精品一区二区三区swag | 国产精品嫩草99a| 91在线无精精品入口| 香蕉久久夜色精品国产使用方法| 91精品国产91综合久久蜜臀| 另类中文字幕网| 国产精品国产自产拍高清av| 91国偷自产一区二区三区观看| 亚洲电影欧美电影有声小说| 日韩区在线观看| 欧美日韩aaaaaa| 欧美一区二区在线看| 日韩不卡一区二区| 精品国产髙清在线看国产毛片 | 午夜精品久久久久久久99樱桃 | 国产人久久人人人人爽| 91在线视频播放|