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

📄 mpt-fusion-downgrade-to-3_02_73-rhel4.patch

📁 lustre 1.6.5 source code
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
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 + -