📄 sles9-sp2.patch
字号:
/**- * megasas_suspend - driver suspend entry point- * @pdev: PCI device structure- * @state: - */-static int __devinit-megasas_suspend(struct pci_dev *pdev, pm_message_t state)-{- struct Scsi_Host *host;- struct megasas_instance *instance;-- instance = pci_get_drvdata(pdev);- host = instance->host;-- megasas_flush_cache(instance);- megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN);- tasklet_kill(&instance->isr_tasklet);-- pci_set_drvdata(instance->pdev, instance); - instance->instancet->disable_intr(instance->reg_set);- free_irq(instance->pdev->irq, instance);-- scsi_host_put(host);-- pci_save_state(pdev);- pci_disable_device(pdev);-- pci_set_power_state(pdev, pci_choose_state(pdev, state));-- return 0;-}--/**- * 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 +2750,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 +2773,8 @@ static void megasas_detach_one(struct pc free_irq(instance->pdev->irq, instance); megasas_release_mfi(instance);-+ + /* Free IOCTL mem pool */ pci_free_consistent(pdev, sizeof(struct megasas_evt_detail), instance->evt_detail, instance->evt_detail_h); @@ -2982,9 +2797,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 +2839,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 +2923,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@@ -3166,6 +2982,7 @@ megasas_mgmt_fw_ioctl(struct megasas_ins * sense_buff points to the location that has the user * sense buffer address */+ sense_buff = (unsigned long *) ((unsigned long)ioc->frame.raw + ioc->sense_off); sense_ptr = (u32 *) ((unsigned long)ioc->frame.raw +@@ -3197,8 +3014,9 @@ 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, kbuff_arr[i], kern_sge32[i].phys_addr);@@ -3276,13 +3094,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 +3149,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 +3167,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 +3184,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 +3210,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 +3260,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 +3280,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 +3305,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-sp2/megaraid_sas.h--- base/megaraid_sas.h 2007-10-13 20:37:32.000000000 -0700+++ sles9-sp2/megaraid_sas.h 2007-10-13 20:43:52.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 + -