⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rhel3-ga.patch

📁 最新的Megaraid SAS卡驱动源代码
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
+static struct megasas_instance *megasas_lookup_instance(u16 host_no)+{+	int i;++	for (i = 0; i < megasas_mgmt_info.max_index; i++) {++		if ((megasas_mgmt_info.instance[i]) &&+		    (megasas_mgmt_info.instance[i]->host->host_no == host_no))+			return megasas_mgmt_info.instance[i];+	}++	return NULL;+}+ static int megasas_mgmt_ioctl_fw(struct file *file, unsigned long arg) { 	struct megasas_iocpacket __user *user_ioc =@@ -3252,12 +3422,6 @@ static int megasas_mgmt_ioctl_aen(struct 	struct megasas_aen aen; 	int error; -	if (file->private_data != file) {-		printk(KERN_DEBUG "megasas: fasync_helper was not "-		       "called first\n");-		return -EINVAL;-	}- 	if (copy_from_user(&aen, (void __user *)arg, sizeof(aen))) 		return -EFAULT; @@ -3277,12 +3441,12 @@ static int megasas_mgmt_ioctl_aen(struct  * megasas_mgmt_ioctl -	char node ioctl entry point  */ static long-megasas_mgmt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)+megasas_mgmt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,+		   unsigned long arg) { 	switch (cmd) { 	case MEGASAS_IOC_FIRMWARE: 		return megasas_mgmt_ioctl_fw(file, arg);- 	case MEGASAS_IOC_GET_AEN: 		return megasas_mgmt_ioctl_aen(file, arg); 	}@@ -3290,7 +3454,7 @@ megasas_mgmt_ioctl(struct file *file, un 	return -ENOTTY; } -#ifdef CONFIG_COMPAT+#ifdef __x86_64__ static int megasas_mgmt_compat_ioctl_fw(struct file *file, unsigned long arg) { 	struct compat_megasas_iocpacket __user *cioc =@@ -3349,72 +3513,14 @@ megasas_mgmt_compat_ioctl(struct file *f /*  * File operations structure for management interface  */-static const struct file_operations megasas_mgmt_fops = {+static struct file_operations megasas_mgmt_fops = { 	.owner = THIS_MODULE, 	.open = megasas_mgmt_open, 	.release = megasas_mgmt_release, 	.fasync = megasas_mgmt_fasync,-	.unlocked_ioctl = megasas_mgmt_ioctl,-#ifdef CONFIG_COMPAT-	.compat_ioctl = megasas_mgmt_compat_ioctl,-#endif-};--/*- * PCI hotplug support registration structure- */-static struct pci_driver megasas_pci_driver = {--	.name = "megaraid_sas",-	.id_table = megasas_pci_table,-	.probe = megasas_probe_one,-	.remove = __devexit_p(megasas_detach_one),-	.suspend = megasas_suspend,-	.resume = megasas_resume,-	.shutdown = megasas_shutdown,+	.ioctl = megasas_mgmt_ioctl, }; -/*- * Sysfs driver attributes- */-static ssize_t megasas_sysfs_show_version(struct device_driver *dd, char *buf)-{-	return snprintf(buf, strlen(MEGASAS_VERSION) + 2, "%s\n",-			MEGASAS_VERSION);-}--static DRIVER_ATTR(version, S_IRUGO, megasas_sysfs_show_version, NULL);--static ssize_t-megasas_sysfs_show_release_date(struct device_driver *dd, char *buf)-{-	return snprintf(buf, strlen(MEGASAS_RELDATE) + 2, "%s\n",-			MEGASAS_RELDATE);-}--static DRIVER_ATTR(release_date, S_IRUGO, megasas_sysfs_show_release_date,-		   NULL);--static ssize_t-megasas_sysfs_show_dbg_lvl(struct device_driver *dd, char *buf)-{-	return sprintf(buf,"%u",megasas_dbg_lvl);-}--static ssize_t-megasas_sysfs_set_dbg_lvl(struct device_driver *dd, const char *buf, size_t count)-{-	int retval = count;-	if(sscanf(buf,"%u",&megasas_dbg_lvl)<1){-		printk(KERN_ERR "megasas: could not set dbg_lvl\n");-		retval = -EINVAL;-	}-	return retval;-}--static DRIVER_ATTR(dbg_lvl, S_IRUGO|S_IWUGO, megasas_sysfs_show_dbg_lvl,-		   megasas_sysfs_set_dbg_lvl);- /**  * megasas_init - Driver load entry point  */@@ -3442,40 +3548,41 @@ static int __init megasas_init(void)  	megasas_mgmt_majorno = rval; -	/*-	 * Register ourselves as PCI hotplug module-	 */-	rval = pci_register_driver(&megasas_pci_driver);+#ifdef CONFIG_PROC_FS+	megasas_proc_root = proc_mkdir("megaraid_sas", proc_scsi);+	if (megasas_proc_root) {+		megasas_proc_version = create_proc_read_entry("version",+							      S_IRUSR | S_IFREG,+							      megasas_proc_root,+							      megasas_proc_show_version,+							      NULL);++		megasas_proc_release_date =+		    create_proc_read_entry("release_date", S_IRUSR | S_IFREG,+					   megasas_proc_root,+					   megasas_proc_show_release_date,+					   NULL);++		megasas_proc_dbg_lvl =+		    create_proc_read_entry("dbg_lvl", S_IRUSR|S_IFREG|S_IWUSR,+					   megasas_proc_root,+					   megasas_proc_show_dbg_lvl,+					   megasas_proc_get_dbg_lvl); -	if (rval) {-		printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n");-		goto err_pcidrv;++		megasas_proc_hba_map = proc_mkdir("hba_map", megasas_proc_root);+	}+#endif+ +	scsi_register_module(MODULE_SCSI_HA, &megasas_template);+#ifdef __x86_64__+	register_ioctl32_conversion(MEGASAS_IOCTL_CMD, megasas_compat_ioctl);+#endif+	if(register_reboot_notifier(&megasas_notifier)) {+		printk("megasas: reboot notify routine registration failed!!\n"); 	} -	rval = driver_create_file(&megasas_pci_driver.driver,-				  &driver_attr_version);-	if (rval)-		goto err_dcf_attr_ver;-	rval = driver_create_file(&megasas_pci_driver.driver,-				  &driver_attr_release_date);-	if (rval)-		goto err_dcf_rel_date;-	rval = driver_create_file(&megasas_pci_driver.driver,-				  &driver_attr_dbg_lvl);-	if (rval)-		goto err_dcf_dbg_lvl;--	return rval;-err_dcf_dbg_lvl:-	driver_remove_file(&megasas_pci_driver.driver,-			   &driver_attr_release_date);-err_dcf_rel_date:-	driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);-err_dcf_attr_ver:-	pci_unregister_driver(&megasas_pci_driver);-err_pcidrv:-	unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");-  	return rval;+	return 0; }  /**@@ -3483,14 +3590,23 @@ err_pcidrv:  */ static void __exit megasas_exit(void) {-	driver_remove_file(&megasas_pci_driver.driver,-			   &driver_attr_dbg_lvl);-	driver_remove_file(&megasas_pci_driver.driver,-			   &driver_attr_release_date);-	driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);+#ifdef __x86_64__+	unregister_ioctl32_conversion(MEGASAS_IOCTL_CMD);+#endif++#ifdef CONFIG_PROC_FS+	if (megasas_proc_root) {+		remove_proc_entry("version", megasas_proc_root);+		remove_proc_entry("release_date", megasas_proc_root);+		remove_proc_entry("dbg_lvl", megasas_proc_root);+		remove_proc_entry("hba_map", megasas_proc_root);+		remove_proc_entry("megaraid_sas", proc_scsi);+	}+#endif -	pci_unregister_driver(&megasas_pci_driver);+	scsi_unregister_module(MODULE_SCSI_HA, &megasas_template); 	unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");+	unregister_reboot_notifier(&megasas_notifier); }  module_init(megasas_init);diff -uprN base/megaraid_sas.h rhel3-ga/megaraid_sas.h--- base/megaraid_sas.h	2007-10-13 20:37:32.000000000 -0700+++ rhel3-ga/megaraid_sas.h	2007-10-13 20:41:22.000000000 -0700@@ -15,7 +15,7 @@ #ifndef LSI_MEGARAID_SAS_H #define LSI_MEGARAID_SAS_H -/*+/**  * MegaRAID SAS Driver meta data  */ #define MEGASAS_VERSION				"00.00.03.16"@@ -24,9 +24,45 @@  /*  * Device IDs+ *   */ #define	PCI_DEVICE_ID_LSI_SAS1078R		0x0060 #define	PCI_DEVICE_ID_LSI_VERDE_ZCR		0x0413+#define	PCI_DEVICE_ID_LSI_SAS1064R		0x0411+#define	PCI_DEVICE_ID_DELL_PERC5		0x0015++#define __user+#define __iomem+#define dma_pool pci_pool++#ifndef	READ_16+#define READ_16		0x88+#endif++#ifndef WRITE_16+#define WRITE_16	0x8a+#endif++#ifndef REPORT_LUNS+#define REPORT_LUNS	0xa0+#endif++#define DID_IMM_RETRY			DID_SOFT_ERROR+#define SAM_STAT_CHECK_CONDITION	0x02++#define	scsi_host_alloc		scsi_register+#define scsi_host_put		scsi_unregister+#define scsi_add_host(x,y)	(0)+#define	scsi_remove_host(x)	do{}while(0)+#define scsi_scan_host(x)	do{}while(0)++typedef void irqreturn_t;++#define IRQ_NONE+#define IRQ_HANDLED++#define DMA_32BIT_MASK		0xFFFFFFFF+#define DMA_64BIT_MASK		0xFFFFFFFFFFFFFFFF  /*  * =====================================@@ -40,7 +76,7 @@  * "message frames"  */ -/*+/**  * FW posts its state in upper 4 bits of outbound_msg_0 register  */ #define MFI_STATE_MASK				0xF0000000@@ -58,7 +94,7 @@  #define MEGAMFI_FRAME_SIZE			64 -/*+/**  * During FW init, clear pending cmds & reset state using inbound_msg_0  *  * ABORT	: Abort all pending cmds@@ -78,7 +114,7 @@ 						MFI_INIT_MFIMODE| \ 						MFI_INIT_ABORT -/*+/**  * MFI frame flags  */ #define MFI_FRAME_POST_IN_REPLY_QUEUE		0x0000@@ -92,12 +128,12 @@ #define MFI_FRAME_DIR_READ			0x0010 #define MFI_FRAME_DIR_BOTH			0x0018 -/*+/**  * Definition for cmd_status  */ #define MFI_CMD_STATUS_POLL_MODE		0xFF -/*+/**  * MFI command opcodes  */ #define MFI_CMD_INIT				0x00@@ -117,7 +153,6 @@ #define MR_FLUSH_DISK_CACHE			0x02  #define MR_DCMD_CTRL_SHUTDOWN			0x01050000-#define MR_DCMD_HIBERNATE_SHUTDOWN		0x01060000 #define MR_ENABLE_DRIVE_SPINDOWN		0x01  #define MR_DCMD_CTRL_EVENT_GET_INFO		0x01040100@@ -129,7 +164,7 @@ #define MR_DCMD_CLUSTER_RESET_ALL		0x08010100 #define MR_DCMD_CLUSTER_RESET_LD		0x08010200 -/*+/**  * MFI command completion codes  */ enum MFI_STAT {@@ -507,6 +542,7 @@ struct megasas_ctrl_info { 	/* 	 * Define ECC single-bit-error bucket information 	 */+	 	u8 ecc_bucket_count; 	u8 reserved_2[11]; @@ -539,9 +575,18 @@ struct megasas_ctrl_info { #define MEGASAS_MAX_LD				64 #define MEGASAS_DEFAULT_CMD_PER_LUN		128 - #define MEGASAS_DBG_LVL				1-#define MEGASAS_FW_BUSY				1++/* + * For ioctl memory manager+ */++#define MAX_IOCTL_MEM_POOL			3+#define MEGASAS_INIT_IOCTL_MEM_SIZE		4096+#define MAX_IOCTL_MEM_BLOCK			16+#define MAX_4K_BUFF				8+#define MAX_8K_BUFF				4+#define MAX_64K_BUFF				1  /*  * When SCSI mid-layer calls driver's reset routine, driver waits for@@ -556,8 +601,6 @@ struct megasas_ctrl_info {  #define MEGASAS_IOCTL_CMD			0 -#define MEGASAS_DEFAULT_CMD_TIMEOUT		90- /*  * FW reports the maximum of number of commands that it can accept (maximum  * commands that can be outstanding) at any time. The driver must report a@@ -1064,7 +1107,11 @@ struct megasas_evt_detail {  	u32 (*read_fw_status_reg)(struct megasas_register_set __iomem *);  };-+struct megasas_ioctl_mm {+	void *vaddr;+	dma_addr_t buf_handle;+	struct list_head list;+}; struct megasas_instance {  	u32 *producer;@@ -1079,6 +1126,7 @@ struct megasas_instance { 	struct megasas_register_set __iomem *reg_set;  	s8 init_id;+	u8 reserved[3];  	u16 max_num_sge; 	u16 max_fw_cmds;@@ -1092,6 +1140,15 @@ struct megasas_instance { 	struct dma_pool *frame_dma_pool; 	struct dma_pool *sense_dma_pool; +	/* for the ioctl memory */+	struct list_head ioctl_memory_pool[MAX_IOCTL_MEM_POOL];+	spinlock_t ioctl_memory_pool_lock;+	u8 mem_pool_empty;+	/* end of ioctl memory */++	struct list_head pending_list;+	spinlock_t pending_lock;+ 	struct megasas_evt_detail *evt_detail; 	dma_addr_t evt_detail_h; 	struct megasas_cmd *aen_cmd;@@ -1099,6 +1156,7 @@ struct megasas_instance { 	struct semaphore ioctl_sem;  	struct Scsi_Host *host;+	spinlock_t host_lock;  	wait_queue_head_t int_cmd_wait_q; 	wait_queue_head_t abort_cmd_wait_q;@@ -1108,20 +1166,25 @@ struct megasas_instance {  	atomic_t fw_outstanding; 	u32 hw_crit_error;-	-	struct megasas_instance_template *instancet;-	struct tasklet_struct isr_tasklet;+#if CONFIG_PROC_FS+	struct proc_dir_entry *hba_proc_dir;+#endif -	u8 flag;+	u8 is_busy; 	unsigned long last_time;++	struct megasas_instance_template *instancet; };  #define MEGASAS_IS_LOGICAL(scp)						\-	(scp->device->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1+	(scp->channel < MEGASAS_MAX_PD_CHANNELS) ? 0 : 1  #define MEGASAS_DEV_INDEX(inst, scp)					\-	((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + 	\-	scp->device->id+	((scp->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + 		\+	scp->target++#define MAX_MGMT_ADAPTERS		1024+#define MAX_IOCTL_SGE			16  struct megasas_cmd { @@ -1139,11 +1202,10 @@ struct megasas_cmd { 	struct scsi_cmnd *scmd; 	struct megasas_instance *instance; 	u32 frame_count;+	u8 ioctl_mem_pool_index[MAX_IOCTL_SGE]; /*0xff for no use*/+	struct megasas_ioctl_mm *ioctl_mem[MAX_IOCTL_SGE]; }; -#define MAX_MGMT_ADAPTERS		1024-#define MAX_IOCTL_SGE			16- struct megasas_iocpacket {  	u16 host_no;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -