📄 mpt-fusion-downgrade-to-3_02_73-rhel4.patch
字号:
- * 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 + -