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