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

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

📁 lustre 1.6.5 source code
💻 PATCH
📖 第 1 页 / 共 5 页
字号:
- *	Return: number of hotspares- *- **/-static int-csmisas_get_number_hotspares(MPT_ADAPTER *ioc)-{-	ConfigPageHeader_t	 hdr;-	CONFIGPARMS		 cfg;-	IOCPage5_t		 *buffer = NULL;-	dma_addr_t		 dma_handle;-	int			 data_sz;-	int			 rc;--	memset(&hdr, 0, sizeof(ConfigPageHeader_t));-	memset(&cfg, 0, sizeof(CONFIGPARMS));--	rc = 0;-	data_sz = 0;-	hdr.PageNumber = 5;-	hdr.PageType = MPI_CONFIG_PAGETYPE_IOC;-	cfg.cfghdr.hdr = &hdr;-	cfg.physAddr = -1;-	cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;-	cfg.timeout = MPT_IOCTL_DEFAULT_TIMEOUT;--	if (mpt_config(ioc, &cfg) != 0)-		goto get_ioc_pg5;--	if (hdr.PageLength == 0)-		goto get_ioc_pg5;--	data_sz = hdr.PageLength * 4;-	buffer = (IOCPage5_t *) pci_alloc_consistent(ioc->pcidev,-		data_sz, &dma_handle);-	if (!buffer)-		goto get_ioc_pg5;--	memset((u8 *)buffer, 0, data_sz);-	cfg.physAddr = dma_handle;-	cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;--	if (mpt_config(ioc, &cfg) != 0)-		goto get_ioc_pg5;--	rc = buffer->NumHotSpares;-- get_ioc_pg5:--	if (buffer)-		pci_free_consistent(ioc->pcidev, data_sz,-		    (u8 *) buffer, dma_handle);--	return rc;-}---/**- *	csmisas_get_ioc_pg5 - ioc Page 5 hot spares- *	@ioc: Pointer to MPT_ADAPTER structure- *	@pIocPage5: ioc page 5- *	@data_size: expected data size(units=bytes)- *- *	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_ioc_pg5(MPT_ADAPTER *ioc, IOCPage5_t *iocPage5, int data_size)-{-	ConfigPageHeader_t	 hdr;-	CONFIGPARMS		 cfg;-	IOCPage5_t		 *buffer = NULL;-	dma_addr_t		 dma_handle;-	int			 data_sz;-	int			 rc;--	memset(&hdr, 0, sizeof(ConfigPageHeader_t));-	memset(&cfg, 0, sizeof(CONFIGPARMS));--	rc = 0;-	data_sz = 0;-	hdr.PageNumber = 5;-	hdr.PageType = MPI_CONFIG_PAGETYPE_IOC;-	cfg.cfghdr.hdr = &hdr;-	cfg.physAddr = -1;-	cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;-	cfg.timeout = MPT_IOCTL_DEFAULT_TIMEOUT;--	if ((rc = mpt_config(ioc, &cfg)) != 0)-		goto get_ioc_pg5;--	if (hdr.PageLength == 0) {-		rc = -EFAULT;-		goto get_ioc_pg5;-	}--	data_sz = hdr.PageLength * 4;-	buffer = (IOCPage5_t *) pci_alloc_consistent(ioc->pcidev,-		data_sz, &dma_handle);-	if (!buffer) {-		rc = -ENOMEM;-		goto get_ioc_pg5;-	}--	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_ioc_pg5;--	memcpy(iocPage5, buffer, data_size);-- get_ioc_pg5:--	if (buffer)-		pci_free_consistent(ioc->pcidev, data_sz,-		    (u8 *) buffer, dma_handle);--	return rc;-}--/**- *	csmisas_sas_device_pg0 - sas device page 0- *	@ioc: Pointer to MPT_ADAPTER structure- *	@mptsas_devinfo: structure found in mptsas.h- *	@form, @form_specific - defines the Page Address field in the config page- *		(pls refer to chapter 5.1 in the mpi spec)- *- *	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_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info,-		u32 form, u32 form_specific)-{-	ConfigExtendedPageHeader_t hdr;-	CONFIGPARMS cfg;-	SasDevicePage0_t *buffer;-	dma_addr_t dma_handle;-	u64 sas_address;-	int rc;--	rc = 0;-	hdr.PageVersion = MPI_SASDEVICE0_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_DEVICE;--	cfg.cfghdr.ehdr = &hdr;-	cfg.pageAddr = form + form_specific;-	cfg.physAddr = -1;-	cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;-	cfg.dir = 0;	/* read */-	cfg.timeout = 10;--	memset(device_info, 0, sizeof(struct mptsas_devinfo));-	if ((rc = mpt_config(ioc, &cfg)) != 0)-		goto out;--	if (!hdr.ExtPageLength) {-		rc = -ENXIO;-		goto out;-	}--	buffer = pci_alloc_consistent(ioc->pcidev,-	    hdr.ExtPageLength * 4, &dma_handle);-	if (!buffer) {-		rc = -ENOMEM;-		goto out;-	}--	cfg.physAddr = dma_handle;-	cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;--	if ((rc = mpt_config(ioc, &cfg)) != 0)-		goto out_free_consistent;--	device_info->handle = le16_to_cpu(buffer->DevHandle);-	device_info->handle_parent = le16_to_cpu(buffer->ParentDevHandle);-	device_info->handle_enclosure =-	    le16_to_cpu(buffer->EnclosureHandle);-	device_info->slot = le16_to_cpu(buffer->Slot);-	device_info->phy_id = buffer->PhyNum;-	device_info->port_id = buffer->PhysicalPort;-	device_info->id = buffer->TargetID;-	device_info->channel = buffer->Bus;-	memcpy(&sas_address, &buffer->SASAddress, sizeof(u64));-	device_info->sas_address = le64_to_cpu(sas_address);-	device_info->device_info =-	    le32_to_cpu(buffer->DeviceInfo);-- out_free_consistent:-	pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4,-			    buffer, dma_handle);- out:-	return rc;-}--/**- * Routine for the CSMI Sas Get Driver Info command.- *- * Outputs:	None.- * Return:	0 if successful- *		-EFAULT if data unavailable- *		-ENODEV if no such device/adapter- **/-static int-csmisas_get_driver_info(unsigned long arg)-{--	CSMI_SAS_DRIVER_INFO_BUFFER __user *uarg = (void __user *) arg;-	CSMI_SAS_DRIVER_INFO_BUFFER	karg;-	MPT_ADAPTER	*ioc = NULL;-	int		iocnum;--	dcsmisasprintk(("%s enter.\n",__FUNCTION__));--	if (copy_from_user(&karg, uarg, sizeof(CSMI_SAS_DRIVER_INFO_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-	      "Unable to read in csmi_sas_get_driver_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-	 */-	memcpy( karg.Information.szName, MPT_MISCDEV_BASENAME,-	    sizeof(MPT_MISCDEV_BASENAME));-	memcpy( karg.Information.szDescription, MPT_CSMI_DESCRIPTION,-	    sizeof(MPT_CSMI_DESCRIPTION));--	karg.Information.usMajorRevision = MPT_LINUX_MAJOR_VERSION;-	karg.Information.usMinorRevision = MPT_LINUX_MINOR_VERSION;-	karg.Information.usBuildRevision = MPT_LINUX_BUILD_VERSION;-	karg.Information.usReleaseRevision = MPT_LINUX_RELEASE_VERSION;--	karg.Information.usCSMIMajorRevision = CSMI_MAJOR_REVISION;-	karg.Information.usCSMIMinorRevision = CSMI_MINOR_REVISION;--	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_DRIVER_INFO_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-		   "Unable to write out csmi_sas_get_driver_info_buffer @ %p\n",-		    __FILE__, __LINE__, __FUNCTION__, uarg);-		return -EFAULT;-	}--	dcsmisasprintk(("%s exit.\n",__FUNCTION__));-	return 0;-}--/**- * Prototype Routine for the CSMI_SAS_GET_CNTLR_CONFIG command.- *- * Outputs:	None.- * Return:	0 if successful- *		-EFAULT if data unavailable- *		-ENODEV if no such device/adapter- **/-static int-csmisas_get_cntlr_config(unsigned long arg)-{--	CSMI_SAS_CNTLR_CONFIG_BUFFER __user *uarg = (void __user *) arg;-	CSMI_SAS_CNTLR_CONFIG_BUFFER	karg;-	MPT_ADAPTER	*ioc = NULL;-	int		iocnum;-	int		ii,msize,psize;-	unsigned int 	reg;-	u32      	l;-	ManufacturingPage0_t mfgPage0;--	dcsmisasprintk(("%s enter.\n",__FUNCTION__));--	if (copy_from_user(&karg, uarg, sizeof(CSMI_SAS_CNTLR_CONFIG_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-	     "Unable to read in csmi_sas_get_cntlr_config_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));-		karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_INVALID_PARAMETER;-		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;-	}--	/* Clear the struct before filling in data. */-	memset( &karg.Configuration, 0, sizeof(CSMI_SAS_CNTLR_CONFIG));--	/* Fill in the data and return the structure to the calling-	 * program-	 */--	/* Get Base IO and Mem Mapped Addresses. */-msize = psize = 0;-for(ii=0; ii < DEVICE_COUNT_RESOURCE; ii++) {-		reg = PCI_BASE_ADDRESS_0 + (ii << 2);-		pci_read_config_dword(ioc->pcidev, reg, &l);--		if ((l & PCI_BASE_ADDRESS_SPACE) ==-                       PCI_BASE_ADDRESS_SPACE_MEMORY) {-		    if(msize)-                         continue;-	            msize=1;-		karg.Configuration.BaseMemoryAddress.uLowPart =-			    l & PCI_BASE_ADDRESS_MEM_MASK;--		if ((l & (PCI_BASE_ADDRESS_SPACE |-                   PCI_BASE_ADDRESS_MEM_TYPE_MASK))-                   == (PCI_BASE_ADDRESS_SPACE_MEMORY |-                   PCI_BASE_ADDRESS_MEM_TYPE_64)) {-                     pci_read_config_dword(ioc->pcidev, reg+4, &l);-                     karg.Configuration.BaseMemoryAddress.uHighPart = l;-                  }-               }---                  else {-		        if(psize)-                       continue;-                       psize=1;-			karg.Configuration.uBaseIoAddress =-			    l & PCI_BASE_ADDRESS_IO_MASK;-		}--	}--	karg.Configuration.uBoardID = (ioc->pcidev->subsystem_device << 16) |-	    (ioc->pcidev->subsystem_vendor);--	karg.Configuration.usSlotNumber =-	    (ioc->pci_slot_number = 0xff) ?-	    SLOT_NUMBER_UNKNOWN : ioc->pci_slot_number;-	karg.Configuration.bControllerClass = CSMI_SAS_CNTLR_CLASS_HBA;-	karg.Configuration.bIoBusType = CSMI_SAS_BUS_TYPE_PCI;-	karg.Configuration.BusAddress.PciAddress.bBusNumber =-	    ioc->pcidev->bus->number;-	karg.Configuration.BusAddress.PciAddress.bDeviceNumber =-	    PCI_SLOT(ioc->pcidev->devfn);-	karg.Configuration.BusAddress.PciAddress.bFunctionNumber =-	    PCI_FUNC(ioc->pcidev->devfn);-	karg.Configuration.BusAddress.PciAddress.bReserved = 0;-	if (!csmisas_get_manufacture_pg0(ioc, &mfgPage0))-		memcpy( &karg.Configuration.szSerialNumber,-		    mfgPage0.BoardTracerNumber, 16 );-	karg.Configuration.usMajorRevision = ioc->facts.FWVersion.Struct.Major;-	karg.Configuration.usMinorRevision = ioc->facts.FWVersion.Struct.Minor;-	karg.Configuration.usBuildRevision = ioc->facts.FWVersion.Struct.Unit;-	karg.Configuration.usReleaseRevision = ioc->facts.FWVersion.Struct.Dev;-	karg.Configuration.usBIOSMajorRevision =-	    (ioc->biosVersion & 0xFF000000) >> 24;-	karg.Configuration.usBIOSMinorRevision =-	    (ioc->biosVersion & 0x00FF0000) >> 16;-	karg.Configuration.usBIOSBuildRevision =-	    (ioc->biosVersion & 0x0000FF00) >> 8;-	karg.Configuration.usBIOSReleaseRevision =-	    (ioc->biosVersion & 0x000000FF);-	karg.Configuration.uControllerFlags = CSMI_SAS_CNTLR_SAS_HBA |-	    CSMI_SAS_CNTLR_FWD_SUPPORT | CSMI_SAS_CNTLR_FWD_ONLINE |-	    CSMI_SAS_CNTLR_FWD_SRESET ;--	/*-	 * Enabling CSMI_SAS_CNTLR_SAS_RAID bit when IR fw detected-	 */-	if (ioc->ir_firmware)-		karg.Configuration.uControllerFlags |= CSMI_SAS_CNTLR_SAS_RAID;--	karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_SUCCESS;--	/* All Rrom entries will be zero. Skip them. */-	/* bReserved will also be zeros. */-	/* Copy the data from kernel memory to user memory-	 */-	if (copy_to_user((char *)arg, &karg,-		sizeof(CSMI_SAS_DRIVER_INFO_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-		"Unable to write out csmi_sas_get_driver_info_buffer @ %p\n",-		    __FILE__, __LINE__, __FUNCTION__, uarg);-		return -EFAULT;-	}--	dcsmisasprintk(("%s exit.\n",__FUNCTION__));-	return 0;-}--/**- * Prototype Routine for the CSMI Sas Get Controller Status command.- *- * Outputs:	None.- * Return:	0 if successful- *		-EFAULT if data unavailable- *		-ENODEV if no such device/adapter- **/-static int-csmisas_get_cntlr_status(unsigned long arg)-{--	CSMI_SAS_CNTLR_STATUS_BUFFER  __user *uarg = (void __user *) arg;-	MPT_ADAPTER		*ioc = NULL;-	CSMI_SAS_CNTLR_STATUS_BUFFER	karg;-	int			iocnum;-	int			rc;--	dcsmisasprintk(("%s enter.\n",__FUNCTION__));--	if (copy_from_user(&karg, uarg, sizeof(CSMI_SAS_CNTLR_STATUS_BUFFER))) {-		printk(KERN_ERR "%s@%d::%s - "-	     "Unable to read in csmi_sas_get_cntlr_status_buffer struct @ %p\n",-		    __FILE__, __LINE__, __FUNCTION__, uarg);

⌨️ 快捷键说明

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