📄 mpt-fusion-downgrade-to-3_02_73-rhel4.patch
字号:
diff -Nrup linux-2.6.9-67.0.1/drivers/message/fusion/csmi/csmisas.c linux-2.6.9-55.0.12/drivers/message/fusion/csmi/csmisas.c--- linux-2.6.9-67.0.1/drivers/message/fusion/csmi/csmisas.c 2007-12-21 11:40:54.000000000 +0100+++ linux-2.6.9-55.0.12/drivers/message/fusion/csmi/csmisas.c 1970-01-01 01:00:00.000000000 +0100@@ -1,5894 +0,0 @@-#define MPT_CSMI_DESCRIPTION "LSI Logic Corporation: Fusion MPT Driver "MPT_LINUX_VERSION_COMMON-#define csmisas_is_this_sas_cntr(ioc) (ioc->bus_type == SAS) ? 1 : 0--static int csmisas_do_raid(MPT_ADAPTER *ioc, u8 action, u8 PhysDiskNum, u8 VolumeBus,- u8 VolumeId, pMpiRaidActionReply_t reply);-static u8 map_sas_status_to_csmi(u8 mpi_sas_status);--/**- * reverse_byte_order64- *- * @data64- *- **/-static u64-reverse_byte_order64(u64 data64)-{- int i;- u64 rc;- u8 *inWord = (u8*)&data64, *outWord = (u8*)&rc;-- for (i = 0 ; i < 8 ; i++)- outWord[i] = inWord[7-i];-- return rc;-}--/**- * csmisas_is_sata- *- * @phys_disk- *- **/-static int-csmisas_is_sata(RaidPhysDiskPage0_t *phys_disk)-{- if ((phys_disk->ExtDiskIdentifier[0] == 'A') &&- (phys_disk->ExtDiskIdentifier[1] == 'T') &&- (phys_disk->ExtDiskIdentifier[2] == 'A'))- return 1;- else- return 0;-}--/**- * csmisas_is_end_device- *- * @attached- *- **/-static inline int-csmisas_is_end_device(struct mptsas_devinfo * attached)-{- if ((attached->sas_address) &&- (attached->device_info &- MPI_SAS_DEVICE_INFO_END_DEVICE) &&- ((attached->device_info &- MPI_SAS_DEVICE_INFO_SSP_TARGET) |- (attached->device_info &- MPI_SAS_DEVICE_INFO_STP_TARGET) |- (attached->device_info &- MPI_SAS_DEVICE_INFO_SATA_DEVICE)))- return 1;- else- return 0;-}--/**- * csmisas_is_phys_disk- *- * returns (1) success (0) fail - not a phys disk- **/-int-csmisas_is_phys_disk(MPT_ADAPTER *ioc, int channel, int id)-{- struct inactive_raid_component_info *component_info;- int i;- int rc = 0;-- if (!ioc->raid_data.pIocPg3)- goto out;- for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {- if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&- (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {- rc = 1;- goto out;- }- }-- /*- * Check inactive list for matching phys disks- */- if (list_empty(&ioc->raid_data.inactive_list))- goto out;-- down(&ioc->raid_data.inactive_list_mutex);- list_for_each_entry(component_info, &ioc->raid_data.inactive_list,- list) {- if ((component_info->d.PhysDiskID == id) &&- (component_info->d.PhysDiskBus == channel))- rc = 1;- }- up(&ioc->raid_data.inactive_list_mutex);-- out:- return rc;-}--/**- * csmisas_raid_id_to_num- *- * Obtains the phys disk num for given H:C:T nexus- *- * input (channel/id)- * output (phys disk number - used by SCSI_IO_PASSTHRU to access hidden component)- *- * returns - signed return means failure- **/-s8-csmisas_raid_id_to_num(MPT_ADAPTER *ioc, u8 channel, u8 id)-{- struct inactive_raid_component_info *component_info;- int i;- s8 rc = -ENXIO;-- if (!ioc->raid_data.pIocPg3)- goto out;- for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {- if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&- (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {- rc = ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum;- goto out;- }- }-- /*- * Check inactive list for matching phys disks- */- if (list_empty(&ioc->raid_data.inactive_list))- goto out;-- down(&ioc->raid_data.inactive_list_mutex);- list_for_each_entry(component_info, &ioc->raid_data.inactive_list,- list) {- if ((component_info->d.PhysDiskID == id) &&- (component_info->d.PhysDiskBus == channel))- rc = component_info->d.PhysDiskNum;- }- up(&ioc->raid_data.inactive_list_mutex);-- out:- return rc;-}--/**- * csmisas_get_device_component_by_os- *- * Obtain device component object by operating system mapping- *- * @ioc- * @channel- * @id- *- **/-static struct sas_device_info *-csmisas_get_device_component_by_os(MPT_ADAPTER *ioc, u8 channel, u8 id)-{- struct sas_device_info *sas_info, *p;-- sas_info = NULL;-- down(&ioc->sas_device_info_mutex);- list_for_each_entry(p, &ioc->sas_device_info_list, list) {- if (p->os.channel == channel && p->os.id == id) {- sas_info = p;- goto out;- }- }-- out:- up(&ioc->sas_device_info_mutex);- return sas_info;-}--/**- * csmisas_get_device_component- *- * Obtain device component object by firmware system mapping- *- * @ioc- * @channel- * @id- *- **/-static struct sas_device_info *-csmisas_get_device_component_by_fw(MPT_ADAPTER *ioc, u8 channel, u8 id)-{- struct sas_device_info *sas_info, *p;-- sas_info = NULL;-- down(&ioc->sas_device_info_mutex);- list_for_each_entry(p, &ioc->sas_device_info_list, list) {- if (p->fw.channel == channel && p->fw.id == id) {- sas_info = p;- goto out;- }- }-- out:- up(&ioc->sas_device_info_mutex);- return sas_info;-}---/**- * csmisas_get_device_component_by_sas_addr- *- * Obtain device component object by sas address- *- * @ioc- * @channel- * @id- *- **/-static struct sas_device_info *-csmisas_get_device_component_by_sas_addr(MPT_ADAPTER *ioc, u64 sas_address)-{- struct sas_device_info *sas_info, *p;-- sas_info = NULL;-- down(&ioc->sas_device_info_mutex);- list_for_each_entry(p, &ioc->sas_device_info_list, list) {- dcsmisasprintk((KERN_ERR- ":%s()"- " looking for SASAddress=%llX entry SASAddress=%llX\n",- __FUNCTION__, sas_address, p->sas_address));- if (p->sas_address == sas_address) {- sas_info = p;- dcsmisasprintk((KERN_ERR- ":%s()"- " found SASAddress=%llX\n",- __FUNCTION__, sas_address));- goto out;- }- }-- out:- up(&ioc->sas_device_info_mutex);- return sas_info;-}--/**- * csmisas_send_command_wait- *- * Send mf to firmware- *- * @ioc- * @mf- * @timeout - timeout- *- * Return: 0 for success- * non-zero, failure- **/-static int-csmisas_send_command_wait(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, int timeout)-{- int rc;- int mf_timeout;-- mf_timeout = max_t(int, MPT_IOCTL_DEFAULT_TIMEOUT, timeout);- INITIALIZE_IOCTL_STATUS(ioc->ioctl->status)- ioc->ioctl->wait_done = 0;- rc = 0;--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))- ioc->ioctl->timer.expires = jiffies + (MPT_JIFFY * mf_timeout);- ioc->ioctl->status |= MPT_IOCTL_STATUS_TIMER_ACTIVE;- ADD_TIMER(&ioc->ioctl->timer);-#endif-- mpt_put_msg_frame(mptctl_id, ioc, mf);--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))- WAIT_EVENT(mptctl_wait, ioc->ioctl->wait_done);-#else- if ((wait_event_timeout(mptctl_wait,- ioc->ioctl->wait_done == 1, HZ * mf_timeout) <=0) &&- ioc->ioctl->wait_done != 1 ) {- mpt_free_msg_frame(ioc, mf);- mptctl_timeout_expired(ioc->ioctl);- rc = -1;- }-#endif-- if (rc != 0)- dfailprintk((KERN_ERR "%s@%d::%s() - "- "%s IOCTL timeout (%d)\n",- __FILE__, __LINE__, __FUNCTION__,- ioc->name, mf_timeout));-- return rc;-}--/**- * csmisas_send_handshake_wait- *- * Handshake a mf to firmware- *- * @ioc- * @mf- * @mf_size- * @timeout - timeout- *- * Return: 0 for success- * non-zero, failure- **/-static int-csmisas_send_handshake_wait(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, int timeout)-{- int rc;- int mf_timeout;-- mf_timeout = max_t(int, MPT_IOCTL_DEFAULT_TIMEOUT, timeout);- INITIALIZE_IOCTL_STATUS(ioc->ioctl->status)- ioc->ioctl->wait_done = 0;- rc = 0;--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))- ioc->ioctl->timer.expires = jiffies + (MPT_JIFFY * mf_timeout);- ioc->ioctl->status |= MPT_IOCTL_STATUS_TIMER_ACTIVE;- ADD_TIMER(&ioc->ioctl->timer);-#endif-- rc = mpt_send_handshake_request(mptctl_id, ioc,- sizeof(SCSITaskMgmt_t), (u32*)mf,timeout, CAN_SLEEP);- if (rc != 0)- return rc;--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))- WAIT_EVENT(mptctl_wait, ioc->ioctl->wait_done);-#else- if ((wait_event_timeout(mptctl_wait,- ioc->ioctl->wait_done == 1, HZ * mf_timeout) <=0) &&- ioc->ioctl->wait_done != 1 ) {- mpt_free_msg_frame(ioc, mf);- mptctl_timeout_expired(ioc->ioctl);- rc = -1;- }-#endif-- if (rc != 0)- dfailprintk((KERN_ERR "%s@%d::%s() - "- "%s IOCTL timeout (%d)\n", __FILE__, __LINE__,- __FUNCTION__, ioc->name, mf_timeout));-- return rc;-}--/**- * csmisas_get_manufacture_pg0 - Manufacturing Page 0.- * @ioc: Pointer to MPT_ADAPTER structure- * @mfgPage0: read only info set at manufacturing time- *- * Return: 0 for success- * -ENOMEM if no memory available- * -EPERM if not allowed due to ISR context- * -EAGAIN if no msg frames currently available- * -EFAULT for non-successful reply or no reply (timeout)- **/-static int-csmisas_get_manufacture_pg0(MPT_ADAPTER *ioc, ManufacturingPage0_t *mfgPage0)-{-- ConfigPageHeader_t hdr;- CONFIGPARMS cfg;- ManufacturingPage0_t *buffer = NULL;- dma_addr_t dma_handle;- int data_sz;- int rc;-- /*- * Get Manufacturing Page 0 header- */- data_sz = 0;- hdr.PageVersion = MPI_MANUFACTURING0_PAGEVERSION;- hdr.PageLength = 0;- hdr.PageNumber = 0;- hdr.PageType = MPI_CONFIG_PAGETYPE_MANUFACTURING;- cfg.cfghdr.hdr = &hdr;- cfg.physAddr = -1;- cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;- cfg.dir = 0;- cfg.pageAddr = 0;- cfg.timeout = 0;-- if ((rc = mpt_config(ioc, &cfg)) != 0)- goto get_manufacture_pg0_out;-- if (hdr.PageLength == 0) {- rc = -EFAULT;- goto get_manufacture_pg0_out;- }-- data_sz = hdr.PageLength * 4;- buffer = (ManufacturingPage0_t *) pci_alloc_consistent(ioc->pcidev,- data_sz, &dma_handle);- if (!buffer) {- rc = -ENOMEM;- goto get_manufacture_pg0_out;- }-- memset((u8 *)buffer, 0, data_sz);- cfg.physAddr = dma_handle;- cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;-- if ((rc = mpt_config(ioc, &cfg)) != 0)- goto get_manufacture_pg0_out;-- strncpy(mfgPage0->ChipName, buffer->ChipName, 16);- strncpy(mfgPage0->ChipRevision, buffer->ChipRevision, 8);- strncpy(mfgPage0->BoardName, buffer->BoardName, 16);- strncpy(mfgPage0->BoardAssembly, buffer->BoardAssembly, 16);- strncpy(mfgPage0->BoardTracerNumber, buffer->BoardTracerNumber, 16);-- dcsmisasprintk(("ChipName=%s\n",buffer->ChipName));- dcsmisasprintk(("ChipRevision=%s\n",buffer->ChipRevision));- dcsmisasprintk(("BoardName=%s\n",buffer->BoardName));- dcsmisasprintk(("BoardAssembly=%s\n",buffer->BoardAssembly));- dcsmisasprintk(("BoardTracerNumber=%s\n",buffer->BoardTracerNumber));-- get_manufacture_pg0_out:-- if (buffer)- pci_free_consistent(ioc->pcidev, data_sz,- (u8 *) buffer, dma_handle);--- return rc;-}--/**- * csmisas_get_number_hotspares - returns num hot spares in this ioc- * @ioc: Pointer to MPT_ADAPTER structure- *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -