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

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

?? libscsi.c

?? 讀取SCSI磁盤陣列信息的源代碼,支持設備:mega scsi device
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "libscsi.h"/* ioctl */struct megascsi_adapter *mega_scsi_adapter;unsigned char	megascsi_adapt_no;int	megascsi_ioctl_initialized = 0;char dv_xname[] = "PERCSCSI";  unsigned int	USCSICMD = 0x80; voidmegascsi_copyhds(scsi_adapter, sizes, props, stats)	struct megascsi_adapter *scsi_adapter;	const unsigned int *sizes;	const unsigned char *props, *stats;{	int i;	for (i = 0; i < scsi_adapter->adapter_nunits; i++) {		scsi_adapter->adapter_hdr[i].hd_present = 1;		scsi_adapter->adapter_hdr[i].hd_is_logdrv = 1;		scsi_adapter->adapter_hdr[i].hd_size = letoh32(sizes[i]);		scsi_adapter->adapter_hdr[i].hd_prop = props[i];		scsi_adapter->adapter_hdr[i].hd_stat = stats[i];		if (scsi_adapter->adapter_hdr[i].hd_size > 0x200000) {			scsi_adapter->adapter_hdr[i].hd_heads = 255;			scsi_adapter->adapter_hdr[i].hd_secs = 63;		} else {			scsi_adapter->adapter_hdr[i].hd_heads = 64;			scsi_adapter->adapter_hdr[i].hd_secs = 32;		}	}}intmegascsi_ioctl_init(){	int error = 0;	struct utsname uname_buf;	char delimiters[] = ".-";	char *token, cp[128], *tail;    if ( uname(&uname_buf) )return EINVAL;	strncpy(cp, uname_buf.release, 128);	token = strtok(cp, delimiters);	if ( strtol(token, &tail, 0) != 2 ) return EINVAL;	token = strtok(NULL, delimiters);	if ( strtol(token, &tail, 0) == 4 ) 		USCSICMD = 0xe0;	/* kernel 2.4.x */	else if (strtol(token, &tail, 0) == 6 ) 			USCSICMD = 0x80;	/* kernel 2.6.x */		else {			printf("This program not supported on %s\n", uname_buf.release);			return EINVAL;		}					if (!megascsi_ioctl_initialized) {			/* Initialize mega_scsi_adapter structure */		mega_scsi_adapter = malloc(sizeof(struct megascsi_adapter));		if ( mega_scsi_adapter == NULL ) {			printf("MEGA Init Failture: No memory allocation\n");			return EINVAL;		}		memset(mega_scsi_adapter, sizeof(struct megascsi_adapter), 0); 		mega_scsi_adapter->adapter_handle = open("/dev/megadev0",  O_RDONLY); 		if (mega_scsi_adapter->adapter_handle == (uint)-1) {			printf("MEGA Init failture: Can not open device file /dev/megadev0\n");			return EINVAL;		}			megascsi_adapt_no = 0;		mega_scsi_adapter->adapter_adapt_no = megascsi_adapt_no;		megascsi_ioctl_initialized = 1;	}	megascsi_query_adapt(mega_scsi_adapter);	return (error);	}intmegascsi_query_adapt(scsi_adapter)struct megascsi_adapter *scsi_adapter;{	int error = 0, i;	char *p=NULL;	struct megascsi_fc_einquiry *einq;	struct megascsi_fc_prodinfo *pi;	if ( !scsi_adapter ) return EINVAL;		/* try FC inquiry first */			p = malloc(sizeof(struct megascsi_fc_einquiry)+sizeof(struct megascsi_fc_prodinfo));	if (!p) {		printf("%s: No memory for adapter information\n",scsi_adapter->adapter_dev.dv_xname);		return EINVAL;	}	einq = (struct megascsi_fc_einquiry *)p;	pi = (struct megascsi_fc_prodinfo *)(p + sizeof(struct megascsi_fc_einquiry));	memset(einq, 0, sizeof(struct megascsi_fc_einquiry));	memset(pi, 0, sizeof(struct megascsi_fc_prodinfo));	if (megascsi_mgmt(scsi_adapter, MEGASCSI_FCOP, MEGASCSI_FC_EINQ3_SOLICITED_FULL, 0, 0, sizeof 			(struct megascsi_fc_einquiry), einq)==0) {		scsi_adapter->adapter_nunits = einq->ain_nlogdrv;		megascsi_copyhds(scsi_adapter, einq->ain_ldsize, einq->ain_ldprop,				einq->ain_ldstat);		if (megascsi_mgmt(scsi_adapter, MEGASCSI_FCOP, MEGASCSI_FC_PRODINF, 0, 0, sizeof (struct 				megascsi_fc_prodinfo), pi)==0) 			{				scsi_adapter->adapter_maxunits = MEGASCSI_BIG_MAX_LDRIVES;				memcpy(scsi_adapter->adapter_fwver, pi->api_fwver, 16);				scsi_adapter->adapter_fwver[15] = '\0';				memcpy(scsi_adapter->adapter_biosver, pi->api_biosver, 16);                                                                                                                                                                                                                                 				scsi_adapter->adapter_biosver[15] = '\0';				scsi_adapter->adapter_channels = pi->api_channels;				scsi_adapter->adapter_targets = pi->api_fcloops;				scsi_adapter->adapter_memory = letoh16(pi->api_ramsize);				scsi_adapter->adapter_maxcmds = pi->api_maxcmd;//				p = "FC loop";				}		else		{			error = EINVAL;			goto bail2;		}		if (scsi_adapter->adapter_maxunits == 0) {			struct megascsi_inquiry *inq = (struct megascsi_inquiry *)einq;			if (megascsi_mgmt(scsi_adapter, MEGASCSI_EINQUIRY, 0, 0, 0, sizeof(struct megascsi_inquiry) , inq)!=0){				if (megascsi_mgmt(scsi_adapter, MEGASCSI_INQUIRY, 0, 0, 0, sizeof(struct megascsi_inquiry), inq)!=0){					error = EINVAL;					goto bail2;				}				}			scsi_adapter->adapter_maxunits = MEGASCSI_MAX_LDRIVES;			scsi_adapter->adapter_nunits = inq->ain_nlogdrv;			megascsi_copyhds(scsi_adapter, inq->ain_ldsize, inq->ain_ldprop,			    inq->ain_ldstat);			memcpy (scsi_adapter->adapter_fwver, inq->ain_fwver, 4);			scsi_adapter->adapter_fwver[4] = '\0';			memcpy (scsi_adapter->adapter_biosver, inq->ain_biosver, 4);			scsi_adapter->adapter_biosver[4] = '\0';			scsi_adapter->adapter_channels = inq->ain_channels;			scsi_adapter->adapter_targets = inq->ain_targets;			scsi_adapter->adapter_memory = inq->ain_ramsize;			scsi_adapter->adapter_maxcmds = inq->ain_maxcmd;//			p = "target";							}	}	else	{		error = EINVAL;		goto bail2;	}/*	#ifdef MEGASCSI_DEBUG	printf(": FW %s, BIOS v%s, %dMB RAM\n"	    "%s: %d channels, %d %ss, %d logical drives, "	    "openings %d, max commands %d, quirks: %04x\n",	    scsi_adapter->adapter_fwver, scsi_adapter->adapter_biosver, scsi_adapter->adapter_memory,	    scsi_adapter->adapter_dev.dv_xname,	    scsi_adapter->adapter_channels, scsi_adapter->adapter_targets, p, scsi_adapter->adapter_nunits,	    scsi_adapter->adapter_link.openings, scsi_adapter->adapter_maxcmds, scsi_adapter->adapter_flags);#else	printf(": FW %s, BIOS v%s, %dMB RAM\n"	    "%s: %d channels, %d %ss, %d logical drives\n",	    scsi_adapter->adapter_fwver, scsi_adapter->adapter_biosver, scsi_adapter->adapter_memory,	    scsi_adapter->adapter_dev.dv_xname,	    scsi_adapter->adapter_channels, scsi_adapter->adapter_targets, p, scsi_adapter->adapter_nunits);#endif  MEGASCSI_DEBUG */	memcpy(scsi_adapter->adapter_dev.dv_xname, dv_xname, 16); 	scsi_adapter->adapter_flags |= MEGASCSI_QUARTZ;	for(i = 0; i < ((scsi_adapter->adapter_flags & MEGASCSI_QUARTZ) ?	    MEGASCSI_BIG_MAX_PDRIVES : MEGASCSI_MAX_PDRIVES); i++) {		memcpy(scsi_adapter->adapter_hdr[i].dev, scsi_adapter->adapter_dev.dv_xname, 16);	}	for(i = 0; i < MEGASCSI_MAX_CHANNEL; i++) {		memcpy(scsi_adapter->adapter_rawadapters[i].adapter_procdev, scsi_adapter->adapter_dev.dv_xname, 16);	}bail2:	if (p) free(p);	return (error);}intmegascsi_ioctl_end(){	int error = 0;	if (mega_scsi_adapter) {		if (mega_scsi_adapter->adapter_handle)			close(mega_scsi_adapter->adapter_handle);		free(mega_scsi_adapter);		megascsi_ioctl_initialized = 0;	}	else 		error = EINVAL;	return error;}int megascsi_ioctl_sel_adapt(new_adapt_no)	unsigned char new_adapt_no;{	int old_adapt_no = 0;	if (!mega_scsi_adapter) return EINVAL;	old_adapt_no = mega_scsi_adapter->adapter_adapt_no;	if ( old_adapt_no != new_adapt_no) { 		mega_scsi_adapter->adapter_adapt_no = new_adapt_no;		megascsi_query_adapt(mega_scsi_adapter);	}	megascsi_adapt_no = mega_scsi_adapter->adapter_adapt_no;			return old_adapt_no;}intmegascsi_ioctl(cmd, addr)/*	struct megascsi_adapter *scsi_adapter;*/	unsigned int cmd;	char * addr;{//	struct megascsi_adapter *scsi_adapter = (struct megascsi_adapter *)dev;	int error = 0;	switch (cmd) {	case MIOC_INQ:		error = megascsi_ioctl_inq(mega_scsi_adapter, (struct mioc_inq *)addr);		break;	case MIOC_VOL:		error = megascsi_ioctl_vol(mega_scsi_adapter, (struct mioc_vol *)addr);		break;	case MIOC_DISK:		error = megascsi_ioctl_disk(mega_scsi_adapter, (struct mioc_disk *)addr);		break;	default:		error = EINVAL;	}	return (error);}intmegascsi_drv_inq(scsi_adapter, ch, tg, page, inqbuf)	struct megascsi_adapter *scsi_adapter;	unsigned char ch;	unsigned char tg;	unsigned char page;	void *inqbuf;{	mimd_t *mimd;	struct megascsi_iocmd *cmd;	struct megascsi_passthrough *ps;	struct scsi_inquiry_data *pp;	void *idata;	int error = 0;	if (!(idata = malloc(sizeof(mimd_t) + sizeof(struct scsi_inquiry_data)))) {	    	return (ENOMEM);	}	mimd = (mimd_t *) idata;	memset(mimd, 0, sizeof *mimd);	ps = (struct megascsi_passthrough *)&(mimd->pthru);	pp = idata + sizeof *mimd;	memset(pp, 0, sizeof *pp);		mimd->ui.fcs.opcode = 0x80;	mimd->ui.fcs.adapno = 0x6d00 + scsi_adapter->adapter_adapt_no; 	mimd->outlen = sizeof(struct scsi_inquiry_data);			mimd->data = (char *)htole(pp);	cmd = (struct megascsi_iocmd *)&(mimd->mbox);	cmd->acc_cmd = MEGASCSI_PASSTHRU;	cmd->acc_passthru.apt_data = (unsigned int)htole(pp);	ps->apt_channel = ch;	ps->apt_target = tg;	ps->apt_ncdb = sizeof(struct scsi_inquiry);	ps->apt_nsense = sizeof(struct scsi_sense_data);	ps->apt_cdb[0] = INQUIRY;	ps->apt_cdb[1] = 0;	ps->apt_cdb[2] = 0;	ps->apt_cdb[3] = 0;	ps->apt_cdb[4] = sizeof(struct scsi_inquiry_data); /* INQUIRY length */	ps->apt_cdb[5] = 0;	if (page != 0) {		ps->apt_cdb[1] = SI_EVPD;		ps->apt_cdb[2] = page;	}	ps->apt_data = (unsigned int)htole(pp);	ps->apt_datalen = sizeof(struct scsi_inquiry_data);	if (ioctl(scsi_adapter->adapter_handle, USCSICMD, mimd) == 0) {		if (ps->apt_scsistat == 0x00) {			memcpy(inqbuf, pp, sizeof(struct scsi_inquiry_data));			if (pp->device != T_DIRECT)				error = EINVAL;			goto bail;		}		error = EINVAL;	}	else 		error = EINVAL;bail:	free(idata);	return (error);}intmegascsi_mgmt(scsi_adapter, opcode, par1, par2, par3, size, buffer)	struct megascsi_adapter *scsi_adapter;	unsigned char opcode;	unsigned char par1;	unsigned char par2;	unsigned char par3;	size_t size;	void *buffer;{	mimd_t *mimd;	struct megascsi_iocmd *cmd;	void *idata;	void *pa;	int error = 0;	if (!buffer) return (ENOMEM);	if (!(idata = malloc(sizeof(mimd_t)))) {	    	return (ENOMEM);	}		mimd = (mimd_t *)idata;	memset(mimd, 0, sizeof(mimd_t));	pa = buffer;	mimd->ui.fcs.opcode = 0x80;	mimd->ui.fcs.adapno = 0x6d00 + scsi_adapter->adapter_adapt_no; 	mimd->outlen = size;			mimd->data = htole(pa);	cmd = (struct megascsi_iocmd *)&(mimd->mbox);	cmd->acc_cmd = opcode;	/*	 * some commands require data to be written to idata before sending	 * command to fw	 */	switch (opcode) {	case MEGASCSI_SPEAKER:		*((char *)pa) = par1;		break;	default:		cmd->acc_io.aio_channel = par1;		cmd->acc_io.aio_param = par2;		cmd->acc_io.aio_pad[0] = par3;	};	cmd->acc_io.aio_data = (unsigned int)htole(pa);	if (ioctl(scsi_adapter->adapter_handle, USCSICMD, mimd) == 0) {		/* XXX how do commands fail? */		/* buffer = pa */		/*		if (buffer)			memcpy(buffer, pa, size);*/	}	else		error = EINVAL;	if (idata) free(idata);	return (error);}intmegascsi_ioctl_inq(scsi_adapter, bi)	struct megascsi_adapter *scsi_adapter;	struct mioc_inq *bi;{	struct megascsi_big_diskarray *p; /* struct too large for stack */	char *plist;	int i, s, t;	int off;	int error = 0;	struct scsi_inquiry_data inqbuf;	unsigned char ch, tg;	p = malloc(sizeof(struct megascsi_big_diskarray));	if (!p) {		printf("%s: no memory for disk array\n",scsi_adapter->adapter_dev.dv_xname);		return (ENOMEM);	}	memset(p, 0, sizeof(struct megascsi_big_diskarray));	plist = malloc(MEGASCSI_BIG_MAX_PDRIVES);	if (!plist) {		printf("%s: no memory for disk list\n", scsi_adapter->adapter_dev.dv_xname);		error = ENOMEM;		goto bail;	}	if (megascsi_mgmt(scsi_adapter, MEGASCSI_FCOP, MEGASCSI_FC_RDCONF, 0, 0, sizeof *p, p)) {		error = EINVAL;		goto bail2;	}	memset(plist, 0, MEGASCSI_BIG_MAX_PDRIVES);	bi->bi_novol = p->ada_nld;	bi->bi_nodisk = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美美女bb生活片| 久久精品国产澳门| 国产精品一级黄| 欧美日韩精品久久久| 国产精品成人一区二区艾草 | 久久久影视传媒| 午夜精品久久久久| 91丨porny丨在线| 国产视频一区不卡| 精品亚洲成av人在线观看| 欧美日韩一级视频| 亚洲丝袜另类动漫二区| 成熟亚洲日本毛茸茸凸凹| 精品国产欧美一区二区| 青草av.久久免费一区| 欧美日韩国产高清一区二区三区 | 一级做a爱片久久| av网站一区二区三区| 中文字幕免费在线观看视频一区| 久久爱另类一区二区小说| 欧美精品黑人性xxxx| 亚洲国产精品久久人人爱| 99久久久国产精品免费蜜臀| 欧美国产精品专区| 国产精品18久久久久久vr| 精品久久一二三区| 久久国产视频网| 日韩一二在线观看| 久久国产免费看| 日韩欧美成人一区| 国产一区二区视频在线播放| 欧美精品一区二区蜜臀亚洲| 国产专区欧美精品| 国产亚洲欧美日韩日本| 国产91露脸合集magnet| 国产精品网曝门| 色综合天天天天做夜夜夜夜做| 国产精品成人一区二区三区夜夜夜| 成人黄色一级视频| 亚洲老司机在线| 欧美精品在线视频| 久久99精品一区二区三区三区| 久久久久久久久99精品| 成人av资源在线| 亚洲综合成人网| 日韩欧美一级精品久久| 国产麻豆成人传媒免费观看| 国产精品区一区二区三区 | 懂色av一区二区夜夜嗨| 国产精品第一页第二页第三页| 色吧成人激情小说| 另类小说一区二区三区| 久久综合色一综合色88| av亚洲精华国产精华| 午夜精品久久久久久久久久久| 日韩视频在线一区二区| 丁香婷婷综合色啪| 亚洲成a人在线观看| 日韩你懂的在线播放| 不卡电影一区二区三区| 日韩极品在线观看| 国产精品毛片久久久久久| 欧美美女视频在线观看| 成人毛片视频在线观看| 亚洲一级在线观看| 久久久久国产一区二区三区四区| 色视频成人在线观看免| 国内精品久久久久影院薰衣草| 亚洲丝袜美腿综合| 久久综合九色综合97_久久久| 99国产精品久久久久久久久久| 日韩精品一区第一页| 国产精品入口麻豆原神| 91精品国产综合久久精品| 成人午夜激情视频| 美国十次了思思久久精品导航| 中文字幕一区二区三区av| 日韩一级大片在线观看| 色吧成人激情小说| 成人污视频在线观看| 美女视频黄 久久| 午夜精品久久久久久久| 亚洲理论在线观看| 国产精品久久久久影视| 26uuu精品一区二区| 3d动漫精品啪啪| 欧美三级蜜桃2在线观看| www.欧美精品一二区| 韩国欧美国产一区| 午夜欧美一区二区三区在线播放| 中文字幕亚洲区| 国产免费观看久久| 久久影视一区二区| 日韩精品一区二区在线观看| 欧美日韩激情在线| 色av成人天堂桃色av| 成人的网站免费观看| 国产精品一区不卡| 国产美女一区二区三区| 激情六月婷婷久久| 久久国产尿小便嘘嘘尿| 日本麻豆一区二区三区视频| 婷婷久久综合九色综合绿巨人 | 国产日产欧美一区| 91精品久久久久久蜜臀| 欧美日韩视频不卡| 欧美三区在线观看| 欧美人成免费网站| 欧美日韩精品免费| 91精品国产入口在线| 538prom精品视频线放| 在线不卡免费av| 日韩一级完整毛片| 日韩欧美123| 精品久久人人做人人爱| 精品精品国产高清a毛片牛牛| 日韩片之四级片| 26uuu精品一区二区三区四区在线| 精品国产第一区二区三区观看体验| 日韩一级黄色大片| 久久久久99精品一区| 欧美激情一区二区三区在线| 中文字幕制服丝袜成人av| 亚洲美女视频在线观看| 视频一区视频二区中文字幕| 美女爽到高潮91| 丁香桃色午夜亚洲一区二区三区| 99久久精品免费看国产免费软件| av亚洲精华国产精华精| 欧美少妇bbb| 日韩免费看网站| 国产精品天干天干在观线| 樱花草国产18久久久久| 日日夜夜精品免费视频| 国产一区二区三区免费观看| eeuss国产一区二区三区| 日本道色综合久久| 欧美一区二区精品| 国产精品污www在线观看| 亚洲午夜精品网| 九色|91porny| 色综合久久六月婷婷中文字幕| 911国产精品| 国产三级精品视频| 亚洲国产综合91精品麻豆| 久草中文综合在线| 91久久一区二区| 日韩你懂的电影在线观看| 中文字幕亚洲电影| 久久成人免费日本黄色| 99久久精品一区二区| 欧美一级淫片007| 成人欧美一区二区三区视频网页| 午夜欧美视频在线观看| 成人精品电影在线观看| 制服丝袜中文字幕亚洲| 亚洲婷婷综合久久一本伊一区 | 色综合久久久久综合99| 日韩美女在线视频| 亚洲精品国产第一综合99久久| 韩国一区二区视频| 欧美人妇做爰xxxⅹ性高电影| 国产欧美一区二区三区在线老狼| 亚洲黄色免费电影| 国产99久久久国产精品潘金网站| 欧美日韩精品一二三区| 日韩伦理av电影| 国产成人亚洲精品青草天美| 欧美一区二区三区在线| 一区二区高清免费观看影视大全| 国产一区二区剧情av在线| 制服丝袜激情欧洲亚洲| 夜色激情一区二区| 99视频精品免费视频| 国产亚洲欧美色| 狠狠色丁香久久婷婷综合丁香| 欧美人动与zoxxxx乱| 亚洲午夜av在线| 91麻豆国产自产在线观看| 中文av一区特黄| 国产精品自在在线| 精品久久一区二区三区| 免费观看在线色综合| 欧美福利视频导航| 亚洲国产一区二区三区| 91性感美女视频| 亚洲欧美电影院| 色婷婷激情久久| 亚洲精品成人悠悠色影视| 99久久精品久久久久久清纯| 国产亚洲成aⅴ人片在线观看| 久久99热狠狠色一区二区| 日韩欧美视频一区| 另类专区欧美蜜桃臀第一页| 日韩欧美亚洲另类制服综合在线| 麻豆精品在线视频| 精品国精品国产尤物美女| 国产毛片一区二区| 国产精品少妇自拍| 99国内精品久久|