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

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

📁 lustre 1.6.5 source code
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
-		return -EFAULT;-	}--	if (((iocnum = mpt_verify_adapter(karg.IoctlHeader.IOControllerNumber,-	    &ioc)) < 0) || (ioc == NULL)) {-		dcsmisasprintk((KERN_ERR-		    "%s::%s() @%d - ioc%d not found!\n",-		    __FILE__, __FUNCTION__, __LINE__, iocnum));-		return -ENODEV;-	}--	if (!csmisas_is_this_sas_cntr(ioc)) {-		dcsmisasprintk((KERN_ERR-		    "%s::%s() @%d - ioc%d not SAS controller!\n",-		    __FILE__, __FUNCTION__, __LINE__, iocnum));-		return -ENODEV;-	}--	/* Fill in the data and return the structure to the calling-	 * program-	 */--	rc = mpt_GetIocState(ioc, 1);-	switch (rc) {-	case MPI_IOC_STATE_OPERATIONAL:-		karg.Status.uStatus =  CSMI_SAS_CNTLR_STATUS_GOOD;-		karg.Status.uOfflineReason = 0;-		break;--	case MPI_IOC_STATE_FAULT:-		karg.Status.uStatus = CSMI_SAS_CNTLR_STATUS_FAILED;-		karg.Status.uOfflineReason = 0;-		break;--	case MPI_IOC_STATE_RESET:-	case MPI_IOC_STATE_READY:-	default:-		karg.Status.uStatus =  CSMI_SAS_CNTLR_STATUS_OFFLINE;-		karg.Status.uOfflineReason =-		    CSMI_SAS_OFFLINE_REASON_INITIALIZING;-		break;-	}--	memset(&karg.Status.bReserved, 0, 28);--	karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_SUCCESS;--	/* Copy the data from kernel memory to user memory-	 */-	if (copy_to_user((char *)arg, &karg,-		sizeof(CSMI_SAS_CNTLR_STATUS_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-		    "Unable to write out csmi_sas_get_cntlr_status @ %p\n",-		    __FILE__, __LINE__, __FUNCTION__, uarg);-		return -EFAULT;-	}--	dcsmisasprintk(("%s exit.\n",__FUNCTION__));-	return 0;-}--/**- * Prototype Routine for the CSMI Sas Get Phy Info command.- *- * Outputs:	None.- * Return:	0 if successful- *		-EFAULT if data unavailable- *		-ENODEV if no such device/adapter- **/-static int-csmisas_get_phy_info(unsigned long arg)-{-	CSMI_SAS_PHY_INFO_BUFFER __user *uarg = (void __user *) arg;-	CSMI_SAS_PHY_INFO_BUFFER  karg;-	MPT_ADAPTER		*ioc = NULL;-	ConfigExtendedPageHeader_t  hdr;-	CONFIGPARMS		cfg;-	SasIOUnitPage0_t	*sasIoUnitPg0;-	dma_addr_t		sasIoUnitPg0_dma;-	int			sasIoUnitPg0_data_sz;-	SasPhyPage0_t		*sasPhyPg0;-	dma_addr_t		sasPhyPg0_dma;-	int			sasPhyPg0_data_sz;-	u16			protocol;-	int			iocnum;-	int			rc;-	int			ii;-	u64			sas_address;-	struct mptsas_devinfo	device_info;--	dcsmisasprintk(("%s enter.\n",__FUNCTION__));-	sasIoUnitPg0=NULL;-	sasPhyPg0=NULL;-	sasIoUnitPg0_data_sz=0;-	sasPhyPg0_data_sz=0;--	if (copy_from_user(&karg, uarg, sizeof(CSMI_SAS_PHY_INFO_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-		"Unable to read in csmisas_get_phy_info_buffer struct @ %p\n",-		    __FILE__, __LINE__, __FUNCTION__, uarg);-		return -EFAULT;-	}--	if (((iocnum = mpt_verify_adapter(karg.IoctlHeader.IOControllerNumber,-	    &ioc)) < 0) || (ioc == NULL)) {-		dcsmisasprintk((KERN_ERR-		    "%s::%s() @%d - ioc%d not found!\n",-		    __FILE__, __FUNCTION__, __LINE__, iocnum));-		return -ENODEV;-	}--	if (!csmisas_is_this_sas_cntr(ioc)) {-		dcsmisasprintk((KERN_ERR-		    "%s::%s() @%d - ioc%d not SAS controller!\n",-		    __FILE__, __FUNCTION__, __LINE__, iocnum));-		return -ENODEV;-	}--	/* Fill in the data and return the structure to the calling-	 * program-	 */-	memset(&karg.Information, 0, sizeof(CSMI_SAS_PHY_INFO));--	/* Issue a config request to get the number of phys-	 */-	hdr.PageVersion = MPI_SASIOUNITPAGE0_PAGEVERSION;-	hdr.ExtPageLength = 0;-	hdr.PageNumber = 0;-	hdr.Reserved1 = 0;-	hdr.Reserved2 = 0;-	hdr.PageType = MPI_CONFIG_PAGETYPE_EXTENDED;-	hdr.ExtPageType = MPI_CONFIG_EXTPAGETYPE_SAS_IO_UNIT;--	cfg.cfghdr.ehdr = &hdr;-	cfg.physAddr = -1;-	cfg.pageAddr = 0;-	cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;-	cfg.dir = 0;	/* read */-	cfg.timeout = MPT_IOCTL_DEFAULT_TIMEOUT;--	if ((rc = mpt_config(ioc, &cfg)) != 0) {-		/* Don't check if this failed.  Already in a-		 * failure case.-		 */-		dcsmisasprintk((-		    ": FAILED: MPI_SASIOUNITPAGE0_PAGEVERSION: HEADER\n"));-		dcsmisasprintk((": rc=%x\n",rc));-		karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-		goto sas_get_phy_info_exit;-	}--	if (hdr.ExtPageLength == 0) {-		/* Don't check if this failed.  Already in a-		 * failure case.-		 */-		dcsmisasprintk((": hdr.ExtPageLength == 0\n"));-		karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-		goto sas_get_phy_info_exit;-	}--	sasIoUnitPg0_data_sz = hdr.ExtPageLength * 4;-	rc = -ENOMEM;--	sasIoUnitPg0 = (SasIOUnitPage0_t *) pci_alloc_consistent(ioc->pcidev,-	    sasIoUnitPg0_data_sz, &sasIoUnitPg0_dma);--	if (!sasIoUnitPg0) {-		dcsmisasprintk((": pci_alloc_consistent: FAILED\n"));-		karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-		goto sas_get_phy_info_exit;-	}--	memset((u8 *)sasIoUnitPg0, 0, sasIoUnitPg0_data_sz);-	cfg.physAddr = sasIoUnitPg0_dma;-	cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;--	if ((rc = mpt_config(ioc, &cfg)) != 0) {--		/* Don't check if this failed.  Already in a-		 * failure case.-		 */-		dcsmisasprintk((-		    ": FAILED: MPI_SASIOUNITPAGE0_PAGEVERSION: PAGE\n"));-		dcsmisasprintk((": rc=%x\n",rc));-		karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-		goto sas_get_phy_info_exit;-	}--	/* Number of Phys. */-	karg.Information.bNumberOfPhys = sasIoUnitPg0->NumPhys;--	/* Fill in information for each phy. */-	for (ii = 0; ii < karg.Information.bNumberOfPhys; ii++) {--/* EDM : dump IO Unit Page 0 data*/-		dcsmisasprintk(("---- IO UNIT PAGE 0 ------------\n"));-		dcsmisasprintk(("Handle=0x%X\n",-		    le16_to_cpu(sasIoUnitPg0->PhyData[ii].AttachedDeviceHandle)));-		dcsmisasprintk(("Controller Handle=0x%X\n",-		    le16_to_cpu(sasIoUnitPg0->PhyData[ii].ControllerDevHandle)));-		dcsmisasprintk(("Port=0x%X\n",-		    sasIoUnitPg0->PhyData[ii].Port));-		dcsmisasprintk(("Port Flags=0x%X\n",-		    sasIoUnitPg0->PhyData[ii].PortFlags));-		dcsmisasprintk(("PHY Flags=0x%X\n",-		    sasIoUnitPg0->PhyData[ii].PhyFlags));-		dcsmisasprintk(("Negotiated Link Rate=0x%X\n",-		    sasIoUnitPg0->PhyData[ii].NegotiatedLinkRate));-		dcsmisasprintk(("Controller PHY Device Info=0x%X\n",-		    le32_to_cpu(sasIoUnitPg0->PhyData[ii].ControllerPhyDeviceInfo)));-		dcsmisasprintk(("DiscoveryStatus=0x%X\n",-		    le32_to_cpu(sasIoUnitPg0->PhyData[ii].DiscoveryStatus)));-		dcsmisasprintk(("\n"));-/* EDM : debug data */--		/* PHY stuff. */-		karg.Information.Phy[ii].bPortIdentifier =-		    sasIoUnitPg0->PhyData[ii].Port;--		/* Get the negotiated link rate for the phy. */-		switch (sasIoUnitPg0->PhyData[ii].NegotiatedLinkRate) {--		case MPI_SAS_IOUNIT0_RATE_PHY_DISABLED:-			karg.Information.Phy[ii].bNegotiatedLinkRate =-			    CSMI_SAS_PHY_DISABLED;-			break;--		case MPI_SAS_IOUNIT0_RATE_FAILED_SPEED_NEGOTIATION:-			karg.Information.Phy[ii].bNegotiatedLinkRate =-			    CSMI_SAS_LINK_RATE_FAILED;-			break;--		case MPI_SAS_IOUNIT0_RATE_SATA_OOB_COMPLETE:-			break;--		case MPI_SAS_IOUNIT0_RATE_1_5:-			karg.Information.Phy[ii].bNegotiatedLinkRate =-			    CSMI_SAS_LINK_RATE_1_5_GBPS;-			break;--		case MPI_SAS_IOUNIT0_RATE_3_0:-			karg.Information.Phy[ii].bNegotiatedLinkRate =-			    CSMI_SAS_LINK_RATE_3_0_GBPS;-			break;--		case MPI_SAS_IOUNIT0_RATE_UNKNOWN:-		default:-			karg.Information.Phy[ii].bNegotiatedLinkRate =-			    CSMI_SAS_LINK_RATE_UNKNOWN;-			break;-		}--		if (sasIoUnitPg0->PhyData[ii].PortFlags &-		    MPI_SAS_IOUNIT0_PORT_FLAGS_DISCOVERY_IN_PROGRESS) {-			karg.Information.Phy[ii].bAutoDiscover =-			    CSMI_SAS_DISCOVER_IN_PROGRESS;-		} else {-			karg.Information.Phy[ii].bAutoDiscover =-			    CSMI_SAS_DISCOVER_COMPLETE;-		}--		/* Issue a config request to get-		 * phy information.-		 */-		hdr.PageVersion = MPI_SASPHY0_PAGEVERSION;-		hdr.ExtPageLength = 0;-		hdr.PageNumber = 0;-		hdr.Reserved1 = 0;-		hdr.Reserved2 = 0;-		hdr.PageType = MPI_CONFIG_PAGETYPE_EXTENDED;-		hdr.ExtPageType = MPI_CONFIG_EXTPAGETYPE_SAS_PHY;--		cfg.cfghdr.ehdr = &hdr;-		cfg.physAddr = -1;-		cfg.pageAddr = ii;-		cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;-		cfg.dir = 0;	/* read */-		cfg.timeout = MPT_IOCTL_DEFAULT_TIMEOUT;--		if ((rc = mpt_config(ioc, &cfg)) != 0) {-			dcsmisasprintk((-			    ": FAILED: MPI_SASPHY0_PAGEVERSION: HEADER\n"));-			dcsmisasprintk((": rc=%x\n",rc));-			karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-			goto sas_get_phy_info_exit;-		}--		if (hdr.ExtPageLength == 0) {-			dcsmisasprintk((": pci_alloc_consistent: FAILED\n"));-			karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-			goto sas_get_phy_info_exit;-		}--		sasPhyPg0_data_sz = hdr.ExtPageLength * 4;-		rc = -ENOMEM;--		sasPhyPg0 = (SasPhyPage0_t *) pci_alloc_consistent(-		    ioc->pcidev, sasPhyPg0_data_sz, &sasPhyPg0_dma);--		if (! sasPhyPg0) {-			dcsmisasprintk((": pci_alloc_consistent: FAILED\n"));-			karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-			goto sas_get_phy_info_exit;-		}--		memset((u8 *)sasPhyPg0, 0, sasPhyPg0_data_sz);-		cfg.physAddr = sasPhyPg0_dma;-		cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;--		if ((rc = mpt_config(ioc, &cfg)) != 0) {-			dcsmisasprintk((-			    ": FAILED: MPI_SASPHY0_PAGEVERSION: PAGE\n"));-			dcsmisasprintk((": rc=%x\n",rc));-			karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-			pci_free_consistent(ioc->pcidev, sasPhyPg0_data_sz,-			    (u8 *) sasPhyPg0, sasPhyPg0_dma);-			goto sas_get_phy_info_exit;-		}--/* EDM : dump PHY Page 0 data*/-		memcpy(&sas_address, &sasPhyPg0->SASAddress, sizeof(u64));-		dcsmisasprintk(("---- SAS PHY PAGE 0 ------------\n"));-		dcsmisasprintk(("Handle=0x%X\n",-		    le16_to_cpu(sasPhyPg0->AttachedDevHandle)));-		dcsmisasprintk(("SAS Address=0x%llX\n",-		    (unsigned long long)sas_address));-		dcsmisasprintk(("Attached PHY Identifier=0x%X\n",-		    sasPhyPg0->AttachedPhyIdentifier));-		dcsmisasprintk(("Attached Device Info=0x%X\n",-		    le32_to_cpu(sasPhyPg0->AttachedDeviceInfo)));-		dcsmisasprintk(("Programmed Link Rate=0x%X\n",-		    sasPhyPg0->ProgrammedLinkRate));-		dcsmisasprintk(("Hardware Link Rate=0x%X\n",-		    sasPhyPg0->HwLinkRate));-		dcsmisasprintk(("Change Count=0x%X\n",-		    sasPhyPg0->ChangeCount));-		dcsmisasprintk(("PHY Info=0x%X\n",-		    le32_to_cpu(sasPhyPg0->PhyInfo)));-		dcsmisasprintk(("\n"));-/* EDM : debug data */--		/* save the data */--		/* Set Max hardware link rate.-		 * This value is hard coded-		 * because the HW link rate-		 * is currently being-		 * overwritten in FW.-		 */--		/* Set Max hardware link rate. */-		switch (sasPhyPg0->HwLinkRate &-		    MPI_SAS_PHY0_PRATE_MAX_RATE_MASK) {--		case MPI_SAS_PHY0_HWRATE_MAX_RATE_1_5:-			karg.Information.Phy[ii].bMaximumLinkRate =-			    CSMI_SAS_LINK_RATE_1_5_GBPS;-			break;--		case MPI_SAS_PHY0_PRATE_MAX_RATE_3_0:-			karg.Information.Phy[ii].bMaximumLinkRate =-			    CSMI_SAS_LINK_RATE_3_0_GBPS;-			break;-		default:-			break;-		}--		/* Set Max programmed link rate. */-		switch (sasPhyPg0->ProgrammedLinkRate &-		    MPI_SAS_PHY0_PRATE_MAX_RATE_MASK) {--		case MPI_SAS_PHY0_PRATE_MAX_RATE_1_5:-			karg.Information.Phy[ii].bMaximumLinkRate |=-			    (CSMI_SAS_PROGRAMMED_LINK_RATE_1_5_GBPS << 4);-			break;--		case MPI_SAS_PHY0_PRATE_MAX_RATE_3_0:-			karg.Information.Phy[ii].bMaximumLinkRate |=-			    (CSMI_SAS_PROGRAMMED_LINK_RATE_3_0_GBPS << 4);-			break;-		default:-			break;-		}--		/* Set Min hardware link rate. */-		switch (sasPhyPg0->HwLinkRate &-		    MPI_SAS_PHY0_HWRATE_MIN_RATE_MASK) {--		case MPI_SAS_PHY0_HWRATE_MIN_RATE_1_5:-			karg.Information.Phy[ii].bMinimumLinkRate =-			    CSMI_SAS_LINK_RATE_1_5_GBPS;-			break;--		case MPI_SAS_PHY0_PRATE_MIN_RATE_3_0:-			karg.Information.Phy[ii].bMinimumLinkRate =-			    CSMI_SAS_LINK_RATE_3_0_GBPS;-			break;-		default:-			break;-		}--		/* Set Min programmed link rate. */-		switch (sasPhyPg0->ProgrammedLinkRate &-		    MPI_SAS_PHY0_PRATE_MIN_RATE_MASK) {--		case MPI_SAS_PHY0_PRATE_MIN_RATE_1_5:-			karg.Information.Phy[ii].bMinimumLinkRate |=-			    (CSMI_SAS_PROGRAMMED_LINK_RATE_1_5_GBPS << 4);-			break;--		case MPI_SAS_PHY0_PRATE_MIN_RATE_3_0:-			karg.Information.Phy[ii].bMinimumLinkRate |=-			    (CSMI_SAS_PROGRAMMED_LINK_RATE_3_0_GBPS << 4);-			break;-		default:-			break;-		}--		karg.Information.Phy[ii].bPhyChangeCount = sasPhyPg0->ChangeCount;-		if( sasPhyPg0->PhyInfo & MPI_SAS_PHY0_PHYINFO_VIRTUAL_PHY )-			karg.Information.Phy[ii].bPhyFeatures = CSMI_SAS_PHY_VIRTUAL_SMP;--		/* Fill in Attached Device-		 * Initiator Port Protocol.-		 * Bits 6:3-		 * More than one bit can be set.-		 */-		protocol = le32_to_cpu(sasPhyPg0->AttachedDeviceInfo) & 0x78;-		karg.Information.Phy[ii].Attached.bInitiatorPortProtocol = 0;-		if (protocol & MPI_SAS_DEVICE_INFO_SSP_INITIATOR)-		      karg.Information.Phy[ii].Attached.bInitiatorPortProtocol =-			    CSMI_SAS_PROTOCOL_SSP;-		if (protocol & MPI_SAS_DEVICE_INFO_STP_INITIATOR)-		     karg.Information.Phy[ii].Attached.bInitiatorPortProtocol |=-			    CSMI_SAS_PROTOCOL_STP;-		if (protocol & MPI_SAS_DEVICE_INFO_SMP_INITIATOR)-		     karg.Information.Phy[ii].Attached.bInitiatorPortProtocol |=-			    CSMI_SAS_PROTOCOL_SMP;-		if (protocol & MPI_SAS_DEVICE_INFO_SATA_HOST)-		     karg.Information.Phy[ii].Attached.bInitiatorPortProtocol |=-			    CSMI_SAS_PROTOCOL_SATA;--		/* Fill in Phy Target Port-		 * Protocol. Bits 10:7-		 * More than one bit can be set.-		 */-		protocol = le32_to_cpu(sasPhyPg0->AttachedDeviceInfo) & 0x780;-		karg.Information.Phy[ii].Attached.bTargetPortProtocol = 0;-		if (protocol & MPI_SAS_DEVICE_INFO_SSP_TARGET)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -