📄 mpt-fusion-downgrade-to-3_02_73-rhel4.patch
字号:
- goto cim_sata_signature_exit;- }-- sasDevicePg1_data_sz = hdr.ExtPageLength * 4;- rc = -ENOMEM;-- sasDevicePg1 = (SasDevicePage1_t *) pci_alloc_consistent- (ioc->pcidev, sasDevicePg1_data_sz, &sasDevicePg1_dma);-- if (! sasDevicePg1) {- dcsmisasprintk((": pci_alloc_consistent: FAILED\n"));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_sata_signature_exit;- }-- memset((u8 *)sasDevicePg1, 0, sasDevicePg1_data_sz);- cfg.physAddr = sasDevicePg1_dma;- cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;-- if ((rc = mpt_config(ioc, &cfg)) != 0) {- dcsmisasprintk((": FAILED: MPI_SASDEVICE1_PAGEVERSION: PAGE\n"));- dcsmisasprintk((": rc=%x\n",rc));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_sata_signature_exit;- }--/* EDM : dump Device Page 1 data*/- dcsmisasprintk(("---- SAS DEVICE PAGE 1 ---------\n"));- dcsmisasprintk(("Handle=0x%x\n",sasDevicePg1->DevHandle));- dcsmisasprintk(("SAS Address="));- for(jj=0;jj<8;jj++)- dcsmisasprintk(("%02x ",- ((u8 *)&sasDevicePg1->SASAddress)[jj]));- dcsmisasprintk(("\n"));- dcsmisasprintk(("Target ID=0x%x\n",sasDevicePg1->TargetID));- dcsmisasprintk(("Bus=0x%x\n",sasDevicePg1->Bus));- dcsmisasprintk(("Initial Reg Device FIS="));- for(jj=0;jj<20;jj++)- dcsmisasprintk(("%02x ",- ((u8 *)&sasDevicePg1->InitialRegDeviceFIS)[jj]));- dcsmisasprintk(("\n\n"));-/* EDM : debug data */-- memcpy(karg.Signature.bSignatureFIS,- sasDevicePg1->InitialRegDeviceFIS,20);-- cim_sata_signature_exit:-- if (sasPhyPg0)- pci_free_consistent(ioc->pcidev, sasPhyPg0_data_sz,- (u8 *) sasPhyPg0, sasPhyPg0_dma);-- if (sasDevicePg1)- pci_free_consistent(ioc->pcidev, sasDevicePg1_data_sz,- (u8 *) sasDevicePg1, sasDevicePg1_dma);-- /* Copy the data from kernel memory to user memory- */- if (copy_to_user((char *)arg, &karg,- sizeof(CSMI_SAS_SATA_SIGNATURE_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to write out csmi_sas_sata_signature @ %p\n",- __FILE__, __LINE__, __FUNCTION__, uarg);- return -EFAULT;- }-- dcsmisasprintk(("%s exit.\n",__FUNCTION__));- return 0;-}--/**- * Prototype Routine for the CSMI Sas Get SCSI Address command.- *- * Outputs: None.- * Return: 0 if successful- * -EFAULT if data unavailable- * -ENODEV if no such device/adapter- **/-static int-csmisas_get_device_address(unsigned long arg)-{- CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER __user *uarg = (void __user *) arg;- CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER karg;- MPT_ADAPTER *ioc = NULL;- int iocnum;- struct sas_device_info *sas_info;- u64 sas_address;-- dcsmisasprintk(("%s enter.\n",__FUNCTION__));-- if (copy_from_user(&karg, uarg,- sizeof(CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to read in csmi_sas_get_device_address_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;- }-- karg.IoctlHeader.ReturnCode = CSMI_SAS_NO_DEVICE_ADDRESS;- memset(karg.bSASAddress, 0, sizeof(u64));- memset(karg.bSASLun, 0, sizeof(karg.bSASLun));-- /* Search the list for the matching SAS address. */- sas_info = csmisas_get_device_component_by_os(ioc, karg.bPathId,- karg.bTargetId);- if (!sas_info || sas_info->is_cached || sas_info->is_logical_volume)- goto csmisas_get_device_address_exit;-- sas_address = reverse_byte_order64(sas_info->sas_address);- memcpy(karg.bSASAddress, &sas_address, sizeof(u64));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_SUCCESS;-- csmisas_get_device_address_exit:-- /* Copy the data from kernel memory to user memory- */- if (copy_to_user((char *)arg, &karg,- sizeof(CSMI_SAS_GET_DEVICE_ADDRESS_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to write out csmi_sas_get_device_address_buffer @ %p\n",- __FILE__, __LINE__, __FUNCTION__, uarg);- return -EFAULT;- }-- dcsmisasprintk(("%s exit.\n",__FUNCTION__));- return 0;-}--/**- * Prototype Routine for the CSMI Sas Get Link Errors command.- *- * Outputs: None.- * Return: 0 if successful- * -EFAULT if data unavailable- * -ENODEV if no such device/adapter- **/-static int-csmisas_get_link_errors(unsigned long arg)-{- CSMI_SAS_LINK_ERRORS_BUFFER __user *uarg = (void __user *) arg;- CSMI_SAS_LINK_ERRORS_BUFFER karg;- MPT_ADAPTER *ioc = NULL;- MPT_FRAME_HDR *mf = NULL;- MPIHeader_t *mpi_hdr;- int iocnum;- int rc;- ConfigExtendedPageHeader_t hdr;- CONFIGPARMS cfg;- SasPhyPage1_t *sasPhyPage1;- dma_addr_t sasPhyPage1_dma;- int sasPhyPage1_data_sz;- SasIoUnitControlRequest_t *sasIoUnitCntrReq;- SasIoUnitControlReply_t *sasIoUnitCntrReply;- u8 phyId;- u16 ioc_status;-- dcsmisasprintk(("%s enter.\n",__FUNCTION__));- sasPhyPage1=NULL;- sasPhyPage1_data_sz=0;-- if (copy_from_user(&karg, uarg,- sizeof(CSMI_SAS_LINK_ERRORS_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to read in csmisas_get_link_errors 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;- }-- phyId = karg.Information.bPhyIdentifier;- if (phyId >= ioc->num_ports) {- karg.IoctlHeader.ReturnCode = CSMI_SAS_PHY_DOES_NOT_EXIST;- dcsmisasprintk((": phyId >= ioc->num_ports\n"));- goto cim_get_link_errors_exit;- }-- /* Default to success.*/- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_SUCCESS;-- /* Issue a config request to get the devHandle of the attached device- */-- /* Issue a config request to get phy information. */- hdr.PageVersion = MPI_SASPHY1_PAGEVERSION;- hdr.ExtPageLength = 0;- hdr.PageNumber = 1 /* page number 1*/;- 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 = phyId;- 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_SASPHY1_PAGEVERSION: HEADER\n"));- dcsmisasprintk((": rc=%x\n",rc));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_get_link_errors_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 cim_get_link_errors_exit;- }--- sasPhyPage1_data_sz = hdr.ExtPageLength * 4;- rc = -ENOMEM;-- sasPhyPage1 = (SasPhyPage1_t *) pci_alloc_consistent(ioc->pcidev,- sasPhyPage1_data_sz, &sasPhyPage1_dma);-- if (! sasPhyPage1) {- dcsmisasprintk((": pci_alloc_consistent: FAILED\n"));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_get_link_errors_exit;- }-- memset((u8 *)sasPhyPage1, 0, sasPhyPage1_data_sz);- cfg.physAddr = sasPhyPage1_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_SASPHY1_PAGEVERSION: PAGE\n"));- dcsmisasprintk((": rc=%x\n",rc));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_get_link_errors_exit;- }--/* EDM : dump PHY Page 1 data*/- dcsmisasprintk(("---- SAS PHY PAGE 1 ------------\n"));- dcsmisasprintk(("Invalid Dword Count=0x%x\n",- sasPhyPage1->InvalidDwordCount));- dcsmisasprintk(("Running Disparity Error Count=0x%x\n",- sasPhyPage1->RunningDisparityErrorCount));- dcsmisasprintk(("Loss Dword Synch Count=0x%x\n",- sasPhyPage1->LossDwordSynchCount));- dcsmisasprintk(("PHY Reset Problem Count=0x%x\n",- sasPhyPage1->PhyResetProblemCount));- dcsmisasprintk(("\n\n"));-/* EDM : debug data */-- karg.Information.uInvalidDwordCount =- le32_to_cpu(sasPhyPage1->InvalidDwordCount);- karg.Information.uRunningDisparityErrorCount =- le32_to_cpu(sasPhyPage1->RunningDisparityErrorCount);- karg.Information.uLossOfDwordSyncCount =- le32_to_cpu(sasPhyPage1->LossDwordSynchCount);- karg.Information.uPhyResetProblemCount =- le32_to_cpu(sasPhyPage1->PhyResetProblemCount);-- if (karg.Information.bResetCounts ==- CSMI_SAS_LINK_ERROR_DONT_RESET_COUNTS ) {- goto cim_get_link_errors_exit;- }-- /* Clear Error log- *- * Issue IOUNIT Control Reqeust Message- */-- /* Get a MF for this command.- */- if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) {- dcsmisasprintk((": no msg frames!\n"));- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_get_link_errors_exit;- }-- mpi_hdr = (MPIHeader_t *) mf;- sasIoUnitCntrReq = (SasIoUnitControlRequest_t *)mf;- memset(sasIoUnitCntrReq,0,sizeof(SasIoUnitControlRequest_t));- sasIoUnitCntrReq->Function = MPI_FUNCTION_SAS_IO_UNIT_CONTROL;- sasIoUnitCntrReq->MsgContext = mpi_hdr->MsgContext;- sasIoUnitCntrReq->PhyNum = phyId;- sasIoUnitCntrReq->Operation = MPI_SAS_OP_PHY_CLEAR_ERROR_LOG;-- if (csmisas_send_command_wait(ioc, mf, karg.IoctlHeader.Timeout) != 0) {- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;- goto cim_get_link_errors_exit;- }-- /* process the completed Reply Message Frame */- if (ioc->ioctl->status & MPT_IOCTL_STATUS_RF_VALID) {-- sasIoUnitCntrReply =- (SasIoUnitControlReply_t *)ioc->ioctl->ReplyFrame;- ioc_status = le16_to_cpu(sasIoUnitCntrReply->IOCStatus)- & MPI_IOCSTATUS_MASK;-- if (ioc_status != MPI_IOCSTATUS_SUCCESS) {- dcsmisasprintk((": SAS IO Unit Control: "));- dcsmisasprintk(("IOCStatus=0x%X IOCLogInfo=0x%X\n",- sasIoUnitCntrReply->IOCStatus,- sasIoUnitCntrReply->IOCLogInfo));- }- }-- cim_get_link_errors_exit:-- if (sasPhyPage1)- pci_free_consistent(ioc->pcidev, sasPhyPage1_data_sz,- (u8 *) sasPhyPage1, sasPhyPage1_dma);-- /* Copy the data from kernel memory to user memory- */- if (copy_to_user((char *)arg, &karg,- sizeof(CSMI_SAS_LINK_ERRORS_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to write out csmisas_get_link_errors @ %p\n",- __FILE__, __LINE__, __FUNCTION__, uarg);- return -EFAULT;- }-- dcsmisasprintk(("%s exit.\n",__FUNCTION__));- return 0;--}--/**- * Prototype Routine for the CSMI SAS SMP Passthru command.- *- * Outputs: None.- * Return: 0 if successful- * -EFAULT if data unavailable- * -ENODEV if no such device/adapter- **/-static int-csmisas_smp_passthru(unsigned long arg)-{- CSMI_SAS_SMP_PASSTHRU_BUFFER __user *uarg = (void __user *) arg;- MPT_ADAPTER *ioc;- CSMI_SAS_SMP_PASSTHRU_BUFFER karg;- pSmpPassthroughRequest_t smpReq;- pSmpPassthroughReply_t smpReply;- MPT_FRAME_HDR *mf = NULL;- MPIHeader_t *mpi_hdr;- char *psge;- int iocnum, flagsLength;- void * request_data;- dma_addr_t request_data_dma;- u32 request_data_sz;- void * response_data;- dma_addr_t response_data_dma;- u32 response_data_sz;- u16 ioc_status;- u64 sas_address;-- dcsmisasprintk(("%s enter.\n",__FUNCTION__));-- if (copy_from_user(&karg, uarg, sizeof(CSMI_SAS_SMP_PASSTHRU_BUFFER))) {- printk(KERN_ERR "%s@%d::%s() - "- "Unable to read in csmi_sas_smp_passthru struct @ %p\n",- __FILE__, __LINE__, __FUNCTION__, uarg);- return -EFAULT;- }-- request_data = NULL;- response_data = NULL;- response_data_sz = sizeof(CSMI_SAS_SMP_RESPONSE);- request_data_sz = karg.Parameters.uRequestLength;-- 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;- }-- /* Make sure the adapter is not being reset. */- if (!ioc->ioctl) {- printk(KERN_ERR "%s@%d::%s - "- "No memory available during driver init.\n",- __FILE__, __LINE__,__FUNCTION__);- return -ENOMEM;- } else if (ioc->ioctl->status & MPT_IOCTL_STATUS_DID_IOCRESET) {- printk(KERN_ERR "%s@%d::%s - "- "Busy with IOC Reset \n",- __FILE__, __LINE__,__FUNCTION__);- return -EBUSY;- }-- /* Default to success.*/- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_SUCCESS;-- /* Do some error checking on the request. */- if (karg.Parameters.bPortIdentifier == CSMI_SAS_IGNORE_PORT) {- karg.IoctlHeader.ReturnCode = CSMI_SAS_SELECT_PHY_OR_PORT;- goto cim_smp_passthru_exit;- }-- if ((request_data_sz > 0xFFFF) || (!request_data_sz)) {- karg.IoctlHeader.ReturnCode = CSMI_SAS_STATUS_FAILED;-
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -