📄 sles9-sp3.patch
字号:
- /*- * 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 +2777,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 +2800,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 +2823,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 +2865,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 +2949,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 +3039,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 +3118,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 +3173,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 +3191,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 +3208,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 +3234,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 +3284,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 +3304,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 +3329,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-sp3/megaraid_sas.h--- base/megaraid_sas.h 2007-10-13 20:37:32.000000000 -0700+++ sles9-sp3/megaraid_sas.h 2007-10-13 20:44:12.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,7 +545,6 @@ 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 @@ -555,7 +560,6 @@ struct megasas_ctrl_info { #define MEGASAS_RESET_NOTICE_INTERVAL 5 #define MEGASAS_IOCTL_CMD 0- #define MEGASAS_DEFAULT_CMD_TIMEOUT 90 /*@@ -1108,7 +1112,7 @@ struct megasas_instance { atomic_t fw_outstanding; u32 hw_crit_error;- + struct megasas_instance_template *instancet; struct tasklet_struct isr_tasklet; @@ -1123,6 +1127,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 +1148,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 + -