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

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

?? linit.c

?? 這個linux源代碼是很全面的~基本完整了~使用c編譯的~由于時間問題我沒有親自測試~但就算用來做參考資料也是非常好的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *	Adaptec AAC series RAID controller driver *	(c) Copyright 2001 Red Hat Inc.	<alan@redhat.com> * * based on the old aacraid driver that is.. * Adaptec aacraid device driver for Linux. * * Copyright (c) 2000 Adaptec, Inc. (aacraid@adaptec.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING.  If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * * Module Name: *   linit.c * * Abstract: Linux Driver entry module for Adaptec RAID Array Controller *				 *	Provides the following driver entry points: *		aac_detect() *		aac_release() *		aac_queuecommand() *		aac_resetcommand() *		aac_biosparm() *	 */#define AAC_DRIVER_VERSION		"0.9.9ac6-TEST"#define AAC_DRIVER_BUILD_DATE		__DATE__#include <linux/module.h>#include <linux/config.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/types.h>#include <linux/sched.h>#include <linux/pci.h>#include <linux/spinlock.h>#include <linux/slab.h>#include <linux/completion.h>#include <asm/semaphore.h>#include <linux/blk.h>#include "scsi.h"#include "hosts.h"#include "aacraid.h"#include "sd.h"#define AAC_DRIVERNAME	"aacraid"MODULE_AUTHOR("Red Hat Inc and Adaptec");MODULE_DESCRIPTION("Supports Dell PERC2, 2/Si, 3/Si, 3/Di, PERC 320/DC, Adaptec 2120S, 2200S, 5400S, and HP NetRAID-4M devices. http://domsch.com/linux/ or http://linux.adaptec.com");MODULE_LICENSE("GPL");MODULE_PARM(nondasd, "i");MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on");static int nondasd=-1;struct aac_dev *aac_devices[MAXIMUM_NUM_ADAPTERS];static unsigned aac_count = 0;static int aac_cfg_major = -1;/* * Because of the way Linux names scsi devices, the order in this table has * become important.  Check for on-board Raid first, add-in cards second. * * dmb - For now we add the number of channels to this structure.   * In the future we should add a fib that reports the number of channels * for the card.  At that time we can remove the channels from here */ static struct aac_driver_ident aac_drivers[] = {	{ 0x1028, 0x0001, 0x1028, 0x0001, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 2/Si */	{ 0x1028, 0x0002, 0x1028, 0x0002, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x1028, 0x0003, 0x1028, 0x0003, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Si */	{ 0x1028, 0x0004, 0x1028, 0x00d0, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Si */	{ 0x1028, 0x0002, 0x1028, 0x00d1, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x1028, 0x0002, 0x1028, 0x00d9, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x1028, 0x000a, 0x1028, 0x0106, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x1028, 0x000a, 0x1028, 0x011b, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x1028, 0x000a, 0x1028, 0x0121, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* PERC 3/Di */	{ 0x9005, 0x0283, 0x9005, 0x0283, aac_rx_init, "aacraid",  "ADAPTEC ", "catapult        ", 2 }, /* catapult*/	{ 0x9005, 0x0284, 0x9005, 0x0284, aac_rx_init, "aacraid",  "ADAPTEC ", "tomcat          ", 2 }, /* tomcat*/	{ 0x9005, 0x0285, 0x9005, 0x0286, aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2120S   ", 1 }, /* Adaptec 2120S (Crusader)*/	{ 0x9005, 0x0285, 0x9005, 0x0285, aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2200S   ", 2 }, /* Adaptec 2200S (Vulcan)*/	{ 0x9005, 0x0285, 0x9005, 0x0287, aac_rx_init, "aacraid",  "ADAPTEC ", "Adaptec 2200S   ", 2 }, /* Adaptec 2200S (Vulcan-2m)*/	{ 0x9005, 0x0285, 0x1028, 0x0287, aac_rx_init, "percraid", "DELL    ", "PERCRAID        ", 2 }, /* Dell PERC 320/DC */	{ 0x1011, 0x0046, 0x9005, 0x0365, aac_sa_init, "aacraid",  "ADAPTEC ", "Adaptec 5400S   ", 4 }, /* Adaptec 5400S (Mustang)*/	{ 0x1011, 0x0046, 0x9005, 0x0364, aac_sa_init, "aacraid",  "ADAPTEC ", "AAC-364         ", 4 }, /* Adaptec 5400S (Mustang)*/	{ 0x1011, 0x0046, 0x9005, 0x1364, aac_sa_init, "percraid", "DELL    ", "PERCRAID        ", 4 }, /* Dell PERC2 "Quad Channel" */	{ 0x1011, 0x0046, 0x103c, 0x10c2, aac_sa_init, "hpnraid",  "HP      ", "NetRAID-4M      ", 4 }  /* HP NetRAID-4M */};#define NUM_AACTYPES	(sizeof(aac_drivers) / sizeof(struct aac_driver_ident))static int num_aacdrivers = NUM_AACTYPES;static int aac_cfg_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg);static int aac_cfg_open(struct inode * inode, struct file * file);static int aac_cfg_release(struct inode * inode,struct file * file);static struct file_operations aac_cfg_fops = {	owner: THIS_MODULE,	ioctl: aac_cfg_ioctl,	open: aac_cfg_open,	release: aac_cfg_release};static int aac_detect(Scsi_Host_Template *);static int aac_release(struct Scsi_Host *);static int aac_queuecommand(Scsi_Cmnd *, void (*CompletionRoutine)(Scsi_Cmnd *));static int aac_biosparm(Scsi_Disk *, kdev_t, int *);static int aac_procinfo(char *, char **, off_t, int, int, int);static int aac_ioctl(Scsi_Device *, int, void *);static int aac_eh_abort(Scsi_Cmnd * cmd);static int aac_eh_device_reset(Scsi_Cmnd* cmd);static int aac_eh_bus_reset(Scsi_Cmnd* cmd);static int aac_eh_reset(Scsi_Cmnd* cmd);static void aac_queuedepth(struct Scsi_Host *, Scsi_Device *);/** *	aac_detect	-	Probe for aacraid cards *	@template: SCSI driver template * *	Probe for AAC Host Adapters initialize, register, and report the  *	configuration of each AAC Host Adapter found. *	Returns the number of adapters successfully initialized and  *	registered. *	Initializes all data necessary for this particular SCSI driver. *	Notes: *	The detect routine must not call any of the mid level functions  *	to queue commands because things are not guaranteed to be set  *	up yet. The detect routine can send commands to the host adapter  *	as long as the program control will not be passed to scsi.c in  *	the processing of the command. Note especially that  *	scsi_malloc/scsi_free must not be called. * */ static int aac_detect(Scsi_Host_Template *template){	int index;	int container;	u16 vendor_id, device_id;	struct Scsi_Host *host_ptr;	struct pci_dev *dev = NULL;	struct aac_dev *aac;	struct fsa_scsi_hba *fsa_dev_ptr;	char *name = NULL;		printk(KERN_INFO "Red Hat/Adaptec aacraid driver, %s\n", AAC_DRIVER_BUILD_DATE);	/* setting up the proc directory structure */	template->proc_name = "aacraid";	for( index = 0; index != num_aacdrivers; index++ )	{		device_id = aac_drivers[index].device;		vendor_id = aac_drivers[index].vendor;		name = aac_drivers[index].name;		dprintk((KERN_DEBUG "Checking %s %x/%x/%x/%x.\n", 			name, vendor_id, device_id,			aac_drivers[index].subsystem_vendor,			aac_drivers[index].subsystem_device));		dev = NULL;		while((dev = pci_find_device(vendor_id, device_id, dev))) {			if (pci_enable_device(dev))				continue;			pci_set_master(dev);			pci_set_dma_mask(dev, 0xFFFFFFFFULL);			if((dev->subsystem_vendor != aac_drivers[index].subsystem_vendor) || 			   (dev->subsystem_device != aac_drivers[index].subsystem_device))					continue;			dprintk((KERN_DEBUG "%s device detected.\n", name));			dprintk((KERN_DEBUG "%x/%x/%x/%x.\n", vendor_id, device_id, 				aac_drivers[index].subsystem_vendor, aac_drivers[index].subsystem_device));			/* Increment the host adapter count */			aac_count++;			/*			 * scsi_register() allocates memory for a Scsi_Hosts structure and			 * links it into the linked list of host adapters. This linked list			 * contains the data for all possible <supported> scsi hosts.			 * This is similar to the Scsi_Host_Template, except that we have			 * one entry for each actual physical host adapter on the system,			 * stored as a linked list. If there are two AAC boards, then we			 * will need to make two Scsi_Host entries, but there will be only			 * one Scsi_Host_Template entry. The second argument to scsi_register()			 * specifies the size of the extra memory we want to hold any device 			 * specific information.			 */			host_ptr = scsi_register( template, sizeof(struct aac_dev) );			/* 			 * These three parameters can be used to allow for wide SCSI 			 * and for host adapters that support multiple buses.			 */			host_ptr->max_id = 17;			host_ptr->max_lun = 8;			host_ptr->max_channel = 1;			host_ptr->irq = dev->irq;		/* Adapter IRQ number */			/* host_ptr->base = ( char * )(dev->resource[0].start & ~0xff); */			host_ptr->base = dev->resource[0].start;			scsi_set_pci_device(host_ptr, dev);			dprintk((KERN_DEBUG "Device base address = 0x%lx [0x%lx].\n", host_ptr->base, dev->resource[0].start));			dprintk((KERN_DEBUG "Device irq = 0x%x.\n", dev->irq));			/*			 * The unique_id field is a unique identifier that must			 * be assigned so that we have some way of identifying			 * each host adapter properly and uniquely. For hosts 			 * that do not support more than one card in the			 * system, this does not need to be set. It is			 * initialized to zero in scsi_register(). This is the 			 * value returned as aac->id.			 */			host_ptr->unique_id = aac_count - 1;			/*			 *	This function is called after the device list has			 *	been built to find the tagged queueing depth 			 *	supported for each device.			 */			host_ptr->select_queue_depths = aac_queuedepth;			aac = (struct aac_dev *)host_ptr->hostdata;			/* attach a pointer back to Scsi_Host */			aac->scsi_host_ptr = host_ptr;				aac->pdev = dev;			aac->cardtype =  index;			aac->name = aac->scsi_host_ptr->hostt->name;			aac->id = aac->scsi_host_ptr->unique_id;			/* Initialize the ordinal number of the device to -1 */			fsa_dev_ptr = &(aac->fsa_dev);			for( container = 0; container < MAXIMUM_NUM_CONTAINERS; container++ )				fsa_dev_ptr->devno[container] = -1;			dprintk((KERN_DEBUG "Initializing Hardware...\n"));			if((*aac_drivers[index].init)(aac , host_ptr->unique_id) != 0)			{				/* device initialization failed */				printk(KERN_WARNING "aacraid: device initialization failed.\n");				scsi_unregister(host_ptr);				aac_count--;				continue;			} 			dprintk((KERN_DEBUG "%s:%d device initialization successful.\n", name, host_ptr->unique_id));			aac_get_adapter_info(aac);			if(nondasd != -1) 			{				/* someone told us how to set this on the cmdline */				aac->nondasd_support = (nondasd!=0);			}			if(aac->nondasd_support != 0){				printk(KERN_INFO "%s%d: Non-DASD support enabled\n", aac->name, aac->id);			}			dprintk((KERN_DEBUG "%s:%d options flag %04x.\n",name, host_ptr->unique_id,aac->adapter_info.options));			if(aac->nondasd_support == 1)			{				/*				 * max channel will be the physical channels plus 1 virtual channel 				 * all containers are on the virtual channel 0				 * physical channels are address by their actual physical number+1				 */				host_ptr->max_channel = aac_drivers[index].channels+1;			} else {				host_ptr->max_channel = 1; 			}			dprintk((KERN_DEBUG "Device has %d logical channels\n", host_ptr->max_channel));			aac_get_containers(aac);			aac_devices[aac_count-1] = aac;			/*			 * dmb - we may need to move these 3 parms somewhere else once			 * we get a fib that can report the actual numbers			 */			host_ptr->max_id = AAC_MAX_TARGET;			host_ptr->max_lun = AAC_MAX_LUN;						/*			 *  If we are PAE capable then our future DMA mappings			 *  (for read/write commands) are 64bit clean and don't 			 *  need bouncing. This assumes we do no other 32bit only			 *  allocations (eg fib table expands) after this point.			 */			 			if(aac->pae_support)				pci_set_dma_mask(dev, 0xFFFFFFFFFFFFFFFFUL);		}	}	if( aac_count ){		if((aac_cfg_major = register_chrdev( 0, "aac", &aac_cfg_fops))<0)			printk(KERN_WARNING "aacraid: unable to register \"aac\" device.\n");	}	template->present = aac_count; /* # of cards of this type found */	return aac_count;}/** *	aac_release	-	release SCSI host resources *	@host_ptr: SCSI host to clean up * *	Release all resources previously acquired to support a specific Host  *	Adapter and unregister the AAC Host Adapter. * *	BUGS: Does not wait for the thread it kills to die. */static int aac_release(struct Scsi_Host *host_ptr){	struct aac_dev *dev;	dprintk((KERN_DEBUG "aac_release.\n"));	dev = (struct aac_dev *)host_ptr->hostdata;	/*	 *	kill any threads we started	 */	kill_proc(dev->thread_pid, SIGKILL, 0);	wait_for_completion(&dev->aif_completion);	/*	 *	Call the comm layer to detach from this adapter	 */	aac_detach(dev);	/* Check free orderings... */	/* remove interrupt binding */	free_irq(host_ptr->irq, dev);	iounmap((void * )dev->regs.sa);	/* unregister adapter */	scsi_unregister(host_ptr);	/*	 *	FIXME: This assumes no hot plugging is going on...	 */	if( aac_cfg_major >= 0 )	{		unregister_chrdev(aac_cfg_major, "aac");		aac_cfg_major = -1;	}	return 0;}/** *	aac_queuecommand	-	queue a SCSI command *	@scsi_cmnd_ptr:	SCSI command to queue *	@CompletionRoutine: Function to call on command completion * *	Queues a command for execution by the associated Host Adapter. */ static int aac_queuecommand(Scsi_Cmnd *scsi_cmnd_ptr, void (*complete)(Scsi_Cmnd *)){	int ret;	scsi_cmnd_ptr->scsi_done = complete;	/*	 *	aac_scsi_cmd() handles command processing, setting the 	 *	result code and calling completion routine. 	 */	if((ret = aac_scsi_cmd(scsi_cmnd_ptr)) != 0)		dprintk((KERN_DEBUG "aac_scsi_cmd failed.\n"));	return ret;} /**

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄色成人免费在线| 亚洲精品乱码久久久久久久久 | 天天综合色天天综合| 欧美羞羞免费网站| 亚洲一区视频在线| 欧美日韩中文精品| 亚洲成精国产精品女| 欧美日韩综合在线免费观看| 亚洲综合清纯丝袜自拍| 欧美日韩一区二区三区高清| 亚洲影视在线观看| 欧美美女一区二区三区| 天天色图综合网| 日韩精品专区在线影院观看| 国产一区二区三区免费| 中文字幕av在线一区二区三区| 成人午夜伦理影院| 亚洲最大的成人av| 日韩一区二区三区视频在线| 国产精品亚洲视频| 国产精品热久久久久夜色精品三区 | 久久久久久久久久久久久女国产乱| 国产麻豆精品视频| 国产精品九色蝌蚪自拍| 欧美日韩一区二区电影| 精品亚洲国内自在自线福利| 国产精品人人做人人爽人人添 | 亚洲国产精品久久人人爱蜜臀| 日韩亚洲欧美中文三级| 久久精品国产精品青草| 国产日韩欧美一区二区三区乱码 | 欧美日本在线播放| 国产一区视频在线看| 亚洲女同ⅹxx女同tv| 欧美成人福利视频| av一区二区不卡| 日av在线不卡| 国产精品护士白丝一区av| 7777女厕盗摄久久久| 99久久久精品| 免费观看在线综合| 亚洲激情在线播放| 久久久久国产精品麻豆| 欧美三级电影在线看| 粉嫩在线一区二区三区视频| 亚洲午夜国产一区99re久久| 久久免费精品国产久精品久久久久| 色国产综合视频| 国产成人午夜视频| 日本午夜精品视频在线观看 | 色婷婷av一区二区三区软件| 另类小说图片综合网| 中文字幕佐山爱一区二区免费| 欧美电影免费提供在线观看| 日本国产一区二区| 成人av网站大全| 日本最新不卡在线| 一区二区三区在线观看动漫| 日本一区二区成人在线| 日韩一区二区三区观看| 91国在线观看| 91蝌蚪porny九色| 国产精品一区二区x88av| 日日嗨av一区二区三区四区| 亚洲免费色视频| 综合电影一区二区三区| 久久久久久免费| 久久婷婷成人综合色| 日韩西西人体444www| 欧美午夜一区二区| 99久久er热在这里只有精品15| 国产一区不卡视频| 国产综合久久久久久鬼色| 日韩二区在线观看| 性做久久久久久免费观看| 亚洲免费观看高清完整| 亚洲丝袜精品丝袜在线| 一区免费观看视频| 亚洲婷婷国产精品电影人久久| 国产性天天综合网| 国产亚洲美州欧州综合国| 久久综合色天天久久综合图片| 欧美成人video| 日韩精品一区在线观看| 久久色在线视频| 国产亚洲女人久久久久毛片| 国产精品素人视频| 中文字幕日韩欧美一区二区三区| 中文字幕一区二区三区av| 综合网在线视频| 亚洲大片一区二区三区| 日韩极品在线观看| 精久久久久久久久久久| 国产乱子伦一区二区三区国色天香| 国产一区二区免费看| 国产精品一区不卡| 91日韩一区二区三区| 欧美亚洲综合在线| 欧美三区免费完整视频在线观看| 欧美三级韩国三级日本一级| 欧美成人vps| 国产精品毛片高清在线完整版| 成人免费一区二区三区在线观看| 一区二区高清免费观看影视大全| 亚洲国产成人91porn| 美女视频网站久久| av日韩在线网站| 欧美日韩国产成人在线免费| 日韩精品一区二区三区中文精品| 国产精品视频在线看| 一区二区三区欧美| 久久成人18免费观看| 成人app下载| 欧美精品三级日韩久久| 久久久久9999亚洲精品| 亚洲伊人色欲综合网| 久久99精品国产.久久久久久| 99麻豆久久久国产精品免费 | 日韩免费观看2025年上映的电影| 久久久精品国产免大香伊| 亚洲乱码国产乱码精品精小说| 日韩黄色小视频| av一本久道久久综合久久鬼色| 91精品国产综合久久精品麻豆| 国产清纯在线一区二区www| 亚洲午夜激情网站| 成人手机电影网| 欧美一区二区精美| 亚洲精品久久久久久国产精华液| 日韩1区2区3区| 色综合久久久久综合体| 亚洲精品一线二线三线无人区| 一区二区三区视频在线看| 国内精品免费**视频| 欧美日韩国产综合久久| 国产精品久久毛片| 激情综合五月天| 欧美另类变人与禽xxxxx| 亚洲欧洲性图库| 国产一区二区按摩在线观看| 欧美精品一二三区| 一区二区免费看| 99久久精品免费观看| 久久久综合九色合综国产精品| 日韩国产欧美在线视频| 一本到不卡免费一区二区| 久久久久九九视频| 久久99精品国产麻豆婷婷洗澡| 欧美色图天堂网| 一区二区三区在线免费视频| 成人高清视频在线观看| 久久久噜噜噜久久中文字幕色伊伊| 亚洲成精国产精品女| 欧美系列日韩一区| 亚洲综合一区在线| 色综合天天综合网天天看片 | 国产精品理伦片| 成人小视频免费在线观看| 精品人在线二区三区| 无码av中文一区二区三区桃花岛| 色婷婷综合久久久中文字幕| 中文字幕在线一区免费| 成人av网站免费观看| 国产精品久久久久久久久久免费看 | 亚洲高清视频的网址| 91行情网站电视在线观看高清版| 亚洲欧美日韩一区| 99久久婷婷国产| 亚洲欧美国产77777| 一本色道久久综合亚洲精品按摩| 亚洲色图.com| 色综合久久久久综合99| 一区二区欧美在线观看| 欧美三级在线视频| 日本视频一区二区三区| 欧美一区二区精美| 国产乱码精品一区二区三区av| 久久久不卡网国产精品一区| 国产成人av电影在线观看| 久久久精品国产免费观看同学| 国产黄色91视频| 亚洲人123区| 欧美专区亚洲专区| 日韩va亚洲va欧美va久久| 精品少妇一区二区| 成人性生交大片免费| 亚洲码国产岛国毛片在线| 欧美亚男人的天堂| 看电视剧不卡顿的网站| 久久久青草青青国产亚洲免观| www.亚洲人| 亚洲一区二区三区美女| 91麻豆精品91久久久久同性| 精品一区二区久久| 国产精品传媒在线| 欧美色窝79yyyycom| 国产综合色视频| 一区二区三区四区视频精品免费| 欧美一区二区久久久| 福利一区二区在线观看|