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

📄 sles9-sp1.patch

📁 最新的Megaraid SAS卡驱动源代码
💻 PATCH
📖 第 1 页 / 共 3 页
字号:
--/**- * megasas_resume-	driver resume entry point- * @pdev:		PCI device structure- */-static int __devinit-megasas_resume(struct pci_dev *pdev)-{-	int rval;-	struct Scsi_Host *host;-	struct megasas_instance *instance;-	-	instance = pci_get_drvdata(pdev);-	host = instance->host;-	pci_set_power_state(pdev, PCI_D0);-	pci_enable_wake(pdev, PCI_D0, 0);-	pci_restore_state(pdev);--	/*-	 * PCI prepping: enable device set bus mastering and dma mask-	 */-	rval = pci_enable_device(pdev);--	if (rval) {-		printk(KERN_INFO "megasas: Enable device failed\n");-		return rval;-	}--	pci_set_master(pdev);--	if (megasas_set_dma_mask(pdev))-		goto fail_set_dma_mask;--	/*-	 * Initialize MFI Firmware-	 */--	*instance->producer = 0;-	*instance->consumer = 0;--	atomic_set(&instance->fw_outstanding,0);--	/*-	 * We expect the FW state to be READY-	 */-	if (megasas_transition_to_ready(instance))-		goto fail_ready_state;--	if (megasas_issue_init_mfi(instance))-		goto fail_init_mfi;--	tasklet_init(&instance->isr_tasklet, megasas_complete_cmd_dpc,-                        (unsigned long)instance);	-	/*-	 * Register IRQ-	 */-	if (request_irq(pdev->irq, megasas_isr, IRQF_SHARED,-		"megasas",instance)) {-		printk(KERN_DEBUG "megasas: Failed to register IRQ\n");-		goto fail_irq;-	}--	instance->instancet->enable_intr(instance->reg_set);--	/*-	 * Store instance in PCI softstate-	 */-	pci_set_drvdata(pdev, instance);--	/*-	 * Initiate AEN (Asynchronous Event Notification)-	 */-	if (megasas_start_aen(instance))-		printk(KERN_ERR "megasas: Start AEN failed\n");-	-	return 0;	-	-      fail_irq:-      fail_init_mfi:--	if (instance->evt_detail)-		pci_free_consistent(pdev, sizeof(struct megasas_evt_detail),-				    instance->evt_detail,-				    instance->evt_detail_h);--	if (instance->producer)-		pci_free_consistent(pdev, sizeof(u32), instance->producer,-				    instance->producer_h);-	if (instance->consumer)-		pci_free_consistent(pdev, sizeof(u32), instance->consumer,-				    instance->consumer_h);-	scsi_host_put(host);-      fail_set_dma_mask:-      fail_ready_state:-	pci_disable_device(pdev);--	return -ENODEV;-}--/**  * megasas_detach_one -	PCI hot"un"plug entry point  * @pdev:		PCI device structure  */@@ -2936,7 +2770,7 @@ static void megasas_detach_one(struct pc 	sysfs_remove_bin_file(&host->shost_classdev.kobj, &sysfs_max_sectors_attr); 	scsi_remove_host(instance->host); 	megasas_flush_cache(instance);-	megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN);+	megasas_shutdown_controller(instance); 	tasklet_kill(&instance->isr_tasklet);  	/*@@ -2959,7 +2793,7 @@ static void megasas_detach_one(struct pc 	free_irq(instance->pdev->irq, instance);  	megasas_release_mfi(instance);-+	 	pci_free_consistent(pdev, sizeof(struct megasas_evt_detail), 			    instance->evt_detail, instance->evt_detail_h); @@ -2982,9 +2816,10 @@ static void megasas_detach_one(struct pc  * megasas_shutdown -	Shutdown entry point  * @device:		Generic device structure  */-static void megasas_shutdown(struct pci_dev *pdev)+static void megasas_shutdown(struct device *device) {-	struct megasas_instance *instance = pci_get_drvdata(pdev);+	struct megasas_instance *instance = (struct megasas_instance *)+	    dev_get_drvdata(device); 	megasas_flush_cache(instance); } @@ -3023,11 +2858,11 @@ static int megasas_mgmt_fasync(int fd, s { 	int rc; -	mutex_lock(&megasas_async_queue_mutex);+	down(&megasas_async_queue_mutex);  	rc = fasync_helper(fd, filep, mode, &megasas_async_queue); -	mutex_unlock(&megasas_async_queue_mutex);+	up(&megasas_async_queue_mutex);  	if (rc >= 0) { 		/* For sanity check when we get ioctl */@@ -3107,7 +2942,7 @@ megasas_mgmt_fw_ioctl(struct megasas_ins 			error = -ENOMEM; 			goto out; 		}-+		 		/* 		 * We don't change the dma_coherent_mask, so 		 * pci_alloc_consistent only returns 32bit addresses@@ -3197,7 +3032,7 @@ megasas_mgmt_fw_ioctl(struct megasas_ins 		dma_free_coherent(&instance->pdev->dev, ioc->sense_len, 				    sense, sense_handle); 	}-+	 	for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) { 		dma_free_coherent(&instance->pdev->dev, 				    kern_sge32[i].length,@@ -3276,13 +3111,13 @@ 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)+static int+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); 	}@@ -3331,9 +3166,9 @@ static int megasas_mgmt_compat_ioctl_fw( 	return error; } -static long-megasas_mgmt_compat_ioctl(struct file *file, unsigned int cmd,-			  unsigned long arg)+static int+megasas_mgmt_compat_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,+			  struct file *file) { 	switch (cmd) { 	case MEGASAS_IOC_FIRMWARE32:@@ -3349,15 +3184,12 @@ 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+	.ioctl = megasas_mgmt_ioctl, };  /*@@ -3369,9 +3201,9 @@ static struct pci_driver megasas_pci_dri 	.id_table = megasas_pci_table, 	.probe = megasas_probe_one, 	.remove = __devexit_p(megasas_detach_one),-	.suspend = megasas_suspend,-	.resume = megasas_resume,-	.shutdown = megasas_shutdown,+	.driver = {+		   .shutdown = megasas_shutdown,+		   } };  /*@@ -3395,13 +3227,13 @@ megasas_sysfs_show_release_date(struct d static DRIVER_ATTR(release_date, S_IRUGO, megasas_sysfs_show_release_date, 		   NULL); -static ssize_t+static ssize_t  megasas_sysfs_show_dbg_lvl(struct device_driver *dd, char *buf) { 	return sprintf(buf,"%u",megasas_dbg_lvl); } -static ssize_t+static ssize_t  megasas_sysfs_set_dbg_lvl(struct device_driver *dd, const char *buf, size_t count) { 	int retval = count;@@ -3445,7 +3277,7 @@ static int __init megasas_init(void) 	/* 	 * Register ourselves as PCI hotplug module 	 */-	rval = pci_register_driver(&megasas_pci_driver);+	rval = pci_module_init(&megasas_pci_driver);  	if (rval) { 		printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n");@@ -3465,6 +3297,13 @@ static int __init megasas_init(void) 	if (rval) 		goto err_dcf_dbg_lvl; + #ifdef CONFIG_COMPAT+ 	register_ioctl32_conversion(MEGASAS_IOC_FIRMWARE32,+ 				    megasas_mgmt_compat_ioctl);+ 	register_ioctl32_conversion(MEGASAS_IOC_GET_AEN,+ 				    megasas_mgmt_compat_ioctl);+ #endif+ 	return rval; err_dcf_dbg_lvl: 	driver_remove_file(&megasas_pci_driver.driver,@@ -3483,11 +3322,15 @@ err_pcidrv:  */ static void __exit megasas_exit(void) {-	driver_remove_file(&megasas_pci_driver.driver,-			   &driver_attr_dbg_lvl);+#ifdef CONFIG_COMPAT+	unregister_ioctl32_conversion(MEGASAS_IOC_FIRMWARE32);+	unregister_ioctl32_conversion(MEGASAS_IOC_GET_AEN);+#endif+	driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version); 	driver_remove_file(&megasas_pci_driver.driver, 			   &driver_attr_release_date);-	driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version);+	driver_remove_file(&megasas_pci_driver.driver,+			   &driver_attr_dbg_lvl);  	pci_unregister_driver(&megasas_pci_driver); 	unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");diff -uprN base/megaraid_sas.h sles9-sp1/megaraid_sas.h--- base/megaraid_sas.h	2007-10-13 20:37:32.000000000 -0700+++ sles9-sp1/megaraid_sas.h	2007-10-13 20:43:34.000000000 -0700@@ -15,7 +15,10 @@ #ifndef LSI_MEGARAID_SAS_H #define LSI_MEGARAID_SAS_H -/*+#define __user+#define __iomem++/**  * MegaRAID SAS Driver meta data  */ #define MEGASAS_VERSION				"00.00.03.16"@@ -24,9 +27,12 @@  /*  * Device IDs+ *   */ #define	PCI_DEVICE_ID_LSI_SAS1078R		0x0060 #define	PCI_DEVICE_ID_LSI_VERDE_ZCR		0x0413+#define	PCI_DEVICE_ID_DELL_PERC5		0x0015+#define	PCI_DEVICE_ID_LSI_SAS1064R		0x0411  /*  * =====================================@@ -40,7 +46,7 @@  * "message frames"  */ -/*+/**  * FW posts its state in upper 4 bits of outbound_msg_0 register  */ #define MFI_STATE_MASK				0xF0000000@@ -58,7 +64,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 +84,7 @@ 						MFI_INIT_MFIMODE| \ 						MFI_INIT_ABORT -/*+/**  * MFI frame flags  */ #define MFI_FRAME_POST_IN_REPLY_QUEUE		0x0000@@ -92,12 +98,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 +123,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 +134,7 @@ #define MR_DCMD_CLUSTER_RESET_ALL		0x08010100 #define MR_DCMD_CLUSTER_RESET_LD		0x08010200 -/*+/**  * MFI command completion codes  */ enum MFI_STAT {@@ -507,6 +512,7 @@ struct megasas_ctrl_info { 	/* 	 * Define ECC single-bit-error bucket information 	 */+	 	u8 ecc_bucket_count; 	u8 reserved_2[11]; @@ -539,9 +545,7 @@ 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  /*  * When SCSI mid-layer calls driver's reset routine, driver waits for@@ -556,8 +560,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@@ -1079,6 +1081,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;@@ -1108,12 +1111,12 @@ struct megasas_instance {  	atomic_t fw_outstanding; 	u32 hw_crit_error;-	-	struct megasas_instance_template *instancet;-	struct tasklet_struct isr_tasklet; -	u8 flag;+	u8 is_busy; 	unsigned long last_time;++	struct megasas_instance_template *instancet;+	struct tasklet_struct isr_tasklet; };  #define MEGASAS_IS_LOGICAL(scp)						\@@ -1123,6 +1126,9 @@ struct megasas_instance { 	((scp->device->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) + 	\ 	scp->device->id +#define MAX_MGMT_ADAPTERS		1024+#define MAX_IOCTL_SGE			16+ struct megasas_cmd {  	union megasas_frame *frame;@@ -1141,9 +1147,6 @@ struct megasas_cmd { 	u32 frame_count; }; -#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 + -