aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion/mptbase.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/message/fusion/mptbase.c')
-rw-r--r--drivers/message/fusion/mptbase.c299
1 files changed, 176 insertions, 123 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index d890b2b8a93e..642a61b6d0a4 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -81,6 +81,10 @@ MODULE_LICENSE("GPL");
81/* 81/*
82 * cmd line parameters 82 * cmd line parameters
83 */ 83 */
84static int mpt_msi_enable;
85module_param(mpt_msi_enable, int, 0);
86MODULE_PARM_DESC(mpt_msi_enable, " MSI Support Enable (default=0)");
87
84#ifdef MFCNT 88#ifdef MFCNT
85static int mfcounter = 0; 89static int mfcounter = 0;
86#define PRINT_MF_COUNT 20000 90#define PRINT_MF_COUNT 20000
@@ -174,7 +178,7 @@ static void mpt_get_fw_exp_ver(char *buf, MPT_ADAPTER *ioc);
174static int ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHandlers); 178static int ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHandlers);
175static void mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf); 179static void mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf);
176static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info); 180static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info);
177static void mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info); 181static void mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info);
178static void mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info); 182static void mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info);
179 183
180/* module entry point */ 184/* module entry point */
@@ -313,7 +317,7 @@ mpt_reply(MPT_ADAPTER *ioc, u32 pa)
313 if (ioc->bus_type == FC) 317 if (ioc->bus_type == FC)
314 mpt_fc_log_info(ioc, log_info); 318 mpt_fc_log_info(ioc, log_info);
315 else if (ioc->bus_type == SPI) 319 else if (ioc->bus_type == SPI)
316 mpt_sp_log_info(ioc, log_info); 320 mpt_spi_log_info(ioc, log_info);
317 else if (ioc->bus_type == SAS) 321 else if (ioc->bus_type == SAS)
318 mpt_sas_log_info(ioc, log_info); 322 mpt_sas_log_info(ioc, log_info);
319 } 323 }
@@ -448,8 +452,7 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
448 } else if (func == MPI_FUNCTION_EVENT_ACK) { 452 } else if (func == MPI_FUNCTION_EVENT_ACK) {
449 dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, EventAck reply received\n", 453 dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, EventAck reply received\n",
450 ioc->name)); 454 ioc->name));
451 } else if (func == MPI_FUNCTION_CONFIG || 455 } else if (func == MPI_FUNCTION_CONFIG) {
452 func == MPI_FUNCTION_TOOLBOX) {
453 CONFIGPARMS *pCfg; 456 CONFIGPARMS *pCfg;
454 unsigned long flags; 457 unsigned long flags;
455 458
@@ -1444,6 +1447,9 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1444 1447
1445 ioc->pci_irq = -1; 1448 ioc->pci_irq = -1;
1446 if (pdev->irq) { 1449 if (pdev->irq) {
1450 if (mpt_msi_enable && !pci_enable_msi(pdev))
1451 printk(MYIOC_s_INFO_FMT "PCI-MSI enabled\n", ioc->name);
1452
1447 r = request_irq(pdev->irq, mpt_interrupt, SA_SHIRQ, ioc->name, ioc); 1453 r = request_irq(pdev->irq, mpt_interrupt, SA_SHIRQ, ioc->name, ioc);
1448 1454
1449 if (r < 0) { 1455 if (r < 0) {
@@ -1483,6 +1489,10 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1483 1489
1484 list_del(&ioc->list); 1490 list_del(&ioc->list);
1485 free_irq(ioc->pci_irq, ioc); 1491 free_irq(ioc->pci_irq, ioc);
1492 if (mpt_msi_enable)
1493 pci_disable_msi(pdev);
1494 if (ioc->alt_ioc)
1495 ioc->alt_ioc->alt_ioc = NULL;
1486 iounmap(mem); 1496 iounmap(mem);
1487 kfree(ioc); 1497 kfree(ioc);
1488 pci_set_drvdata(pdev, NULL); 1498 pci_set_drvdata(pdev, NULL);
@@ -2136,6 +2146,8 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
2136 2146
2137 if (ioc->pci_irq != -1) { 2147 if (ioc->pci_irq != -1) {
2138 free_irq(ioc->pci_irq, ioc); 2148 free_irq(ioc->pci_irq, ioc);
2149 if (mpt_msi_enable)
2150 pci_disable_msi(ioc->pcidev);
2139 ioc->pci_irq = -1; 2151 ioc->pci_irq = -1;
2140 } 2152 }
2141 2153
@@ -2157,6 +2169,10 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
2157 sz_last = ioc->alloc_total; 2169 sz_last = ioc->alloc_total;
2158 dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n", 2170 dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n",
2159 ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first)); 2171 ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first));
2172
2173 if (ioc->alt_ioc)
2174 ioc->alt_ioc->alt_ioc = NULL;
2175
2160 kfree(ioc); 2176 kfree(ioc);
2161} 2177}
2162 2178
@@ -2770,13 +2786,16 @@ SendPortEnable(MPT_ADAPTER *ioc, int portnum, int sleepFlag)
2770 2786
2771 /* RAID FW may take a long time to enable 2787 /* RAID FW may take a long time to enable
2772 */ 2788 */
2773 if ( (ioc->facts.ProductID & MPI_FW_HEADER_PID_PROD_MASK) 2789 if (((ioc->facts.ProductID & MPI_FW_HEADER_PID_PROD_MASK)
2774 > MPI_FW_HEADER_PID_PROD_TARGET_SCSI ) { 2790 > MPI_FW_HEADER_PID_PROD_TARGET_SCSI) ||
2775 rc = mpt_handshake_req_reply_wait(ioc, req_sz, (u32*)&port_enable, 2791 (ioc->bus_type == SAS)) {
2776 reply_sz, (u16*)&reply_buf, 300 /*seconds*/, sleepFlag); 2792 rc = mpt_handshake_req_reply_wait(ioc, req_sz,
2793 (u32*)&port_enable, reply_sz, (u16*)&reply_buf,
2794 300 /*seconds*/, sleepFlag);
2777 } else { 2795 } else {
2778 rc = mpt_handshake_req_reply_wait(ioc, req_sz, (u32*)&port_enable, 2796 rc = mpt_handshake_req_reply_wait(ioc, req_sz,
2779 reply_sz, (u16*)&reply_buf, 30 /*seconds*/, sleepFlag); 2797 (u32*)&port_enable, reply_sz, (u16*)&reply_buf,
2798 30 /*seconds*/, sleepFlag);
2780 } 2799 }
2781 return rc; 2800 return rc;
2782} 2801}
@@ -4387,6 +4406,138 @@ mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode)
4387} 4406}
4388 4407
4389/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 4408/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4409
4410static void
4411mptbase_raid_process_event_data(MPT_ADAPTER *ioc,
4412 MpiEventDataRaid_t * pRaidEventData)
4413{
4414 int volume;
4415 int reason;
4416 int disk;
4417 int status;
4418 int flags;
4419 int state;
4420
4421 volume = pRaidEventData->VolumeID;
4422 reason = pRaidEventData->ReasonCode;
4423 disk = pRaidEventData->PhysDiskNum;
4424 status = le32_to_cpu(pRaidEventData->SettingsStatus);
4425 flags = (status >> 0) & 0xff;
4426 state = (status >> 8) & 0xff;
4427
4428 if (reason == MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED) {
4429 return;
4430 }
4431
4432 if ((reason >= MPI_EVENT_RAID_RC_PHYSDISK_CREATED &&
4433 reason <= MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED) ||
4434 (reason == MPI_EVENT_RAID_RC_SMART_DATA)) {
4435 printk(MYIOC_s_INFO_FMT "RAID STATUS CHANGE for PhysDisk %d\n",
4436 ioc->name, disk);
4437 } else {
4438 printk(MYIOC_s_INFO_FMT "RAID STATUS CHANGE for VolumeID %d\n",
4439 ioc->name, volume);
4440 }
4441
4442 switch(reason) {
4443 case MPI_EVENT_RAID_RC_VOLUME_CREATED:
4444 printk(MYIOC_s_INFO_FMT " volume has been created\n",
4445 ioc->name);
4446 break;
4447
4448 case MPI_EVENT_RAID_RC_VOLUME_DELETED:
4449
4450 printk(MYIOC_s_INFO_FMT " volume has been deleted\n",
4451 ioc->name);
4452 break;
4453
4454 case MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED:
4455 printk(MYIOC_s_INFO_FMT " volume settings have been changed\n",
4456 ioc->name);
4457 break;
4458
4459 case MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED:
4460 printk(MYIOC_s_INFO_FMT " volume is now %s%s%s%s\n",
4461 ioc->name,
4462 state == MPI_RAIDVOL0_STATUS_STATE_OPTIMAL
4463 ? "optimal"
4464 : state == MPI_RAIDVOL0_STATUS_STATE_DEGRADED
4465 ? "degraded"
4466 : state == MPI_RAIDVOL0_STATUS_STATE_FAILED
4467 ? "failed"
4468 : "state unknown",
4469 flags & MPI_RAIDVOL0_STATUS_FLAG_ENABLED
4470 ? ", enabled" : "",
4471 flags & MPI_RAIDVOL0_STATUS_FLAG_QUIESCED
4472 ? ", quiesced" : "",
4473 flags & MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS
4474 ? ", resync in progress" : "" );
4475 break;
4476
4477 case MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED:
4478 printk(MYIOC_s_INFO_FMT " volume membership of PhysDisk %d has changed\n",
4479 ioc->name, disk);
4480 break;
4481
4482 case MPI_EVENT_RAID_RC_PHYSDISK_CREATED:
4483 printk(MYIOC_s_INFO_FMT " PhysDisk has been created\n",
4484 ioc->name);
4485 break;
4486
4487 case MPI_EVENT_RAID_RC_PHYSDISK_DELETED:
4488 printk(MYIOC_s_INFO_FMT " PhysDisk has been deleted\n",
4489 ioc->name);
4490 break;
4491
4492 case MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED:
4493 printk(MYIOC_s_INFO_FMT " PhysDisk settings have been changed\n",
4494 ioc->name);
4495 break;
4496
4497 case MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED:
4498 printk(MYIOC_s_INFO_FMT " PhysDisk is now %s%s%s\n",
4499 ioc->name,
4500 state == MPI_PHYSDISK0_STATUS_ONLINE
4501 ? "online"
4502 : state == MPI_PHYSDISK0_STATUS_MISSING
4503 ? "missing"
4504 : state == MPI_PHYSDISK0_STATUS_NOT_COMPATIBLE
4505 ? "not compatible"
4506 : state == MPI_PHYSDISK0_STATUS_FAILED
4507 ? "failed"
4508 : state == MPI_PHYSDISK0_STATUS_INITIALIZING
4509 ? "initializing"
4510 : state == MPI_PHYSDISK0_STATUS_OFFLINE_REQUESTED
4511 ? "offline requested"
4512 : state == MPI_PHYSDISK0_STATUS_FAILED_REQUESTED
4513 ? "failed requested"
4514 : state == MPI_PHYSDISK0_STATUS_OTHER_OFFLINE
4515 ? "offline"
4516 : "state unknown",
4517 flags & MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC
4518 ? ", out of sync" : "",
4519 flags & MPI_PHYSDISK0_STATUS_FLAG_QUIESCED
4520 ? ", quiesced" : "" );
4521 break;
4522
4523 case MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED:
4524 printk(MYIOC_s_INFO_FMT " Domain Validation needed for PhysDisk %d\n",
4525 ioc->name, disk);
4526 break;
4527
4528 case MPI_EVENT_RAID_RC_SMART_DATA:
4529 printk(MYIOC_s_INFO_FMT " SMART data received, ASC/ASCQ = %02xh/%02xh\n",
4530 ioc->name, pRaidEventData->ASC, pRaidEventData->ASCQ);
4531 break;
4532
4533 case MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED:
4534 printk(MYIOC_s_INFO_FMT " replacement of PhysDisk %d has started\n",
4535 ioc->name, disk);
4536 break;
4537 }
4538}
4539
4540/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
4390/* 4541/*
4391 * GetIoUnitPage2 - Retrieve BIOS version and boot order information. 4542 * GetIoUnitPage2 - Retrieve BIOS version and boot order information.
4392 * @ioc: Pointer to MPT_ADAPTER structure 4543 * @ioc: Pointer to MPT_ADAPTER structure
@@ -4598,6 +4749,14 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
4598 SCSIPortPage2_t *pPP2 = (SCSIPortPage2_t *) pbuf; 4749 SCSIPortPage2_t *pPP2 = (SCSIPortPage2_t *) pbuf;
4599 MpiDeviceInfo_t *pdevice = NULL; 4750 MpiDeviceInfo_t *pdevice = NULL;
4600 4751
4752 /*
4753 * Save "Set to Avoid SCSI Bus Resets" flag
4754 */
4755 ioc->spi_data.bus_reset =
4756 (le32_to_cpu(pPP2->PortFlags) &
4757 MPI_SCSIPORTPAGE2_PORT_FLAGS_AVOID_SCSI_RESET) ?
4758 0 : 1 ;
4759
4601 /* Save the Port Page 2 data 4760 /* Save the Port Page 2 data
4602 * (reformat into a 32bit quantity) 4761 * (reformat into a 32bit quantity)
4603 */ 4762 */
@@ -5167,115 +5326,6 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
5167} 5326}
5168 5327
5169/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 5328/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
5170/**
5171 * mpt_toolbox - Generic function to issue toolbox message
5172 * @ioc - Pointer to an adapter structure
5173 * @cfg - Pointer to a toolbox structure. Struct contains
5174 * action, page address, direction, physical address
5175 * and pointer to a configuration page header
5176 * Page header is updated.
5177 *
5178 * Returns 0 for success
5179 * -EPERM if not allowed due to ISR context
5180 * -EAGAIN if no msg frames currently available
5181 * -EFAULT for non-successful reply or no reply (timeout)
5182 */
5183int
5184mpt_toolbox(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
5185{
5186 ToolboxIstwiReadWriteRequest_t *pReq;
5187 MPT_FRAME_HDR *mf;
5188 struct pci_dev *pdev;
5189 unsigned long flags;
5190 int rc;
5191 u32 flagsLength;
5192 int in_isr;
5193
5194 /* Prevent calling wait_event() (below), if caller happens
5195 * to be in ISR context, because that is fatal!
5196 */
5197 in_isr = in_interrupt();
5198 if (in_isr) {
5199 dcprintk((MYIOC_s_WARN_FMT "toobox request not allowed in ISR context!\n",
5200 ioc->name));
5201 return -EPERM;
5202 }
5203
5204 /* Get and Populate a free Frame
5205 */
5206 if ((mf = mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) {
5207 dcprintk((MYIOC_s_WARN_FMT "mpt_toolbox: no msg frames!\n",
5208 ioc->name));
5209 return -EAGAIN;
5210 }
5211 pReq = (ToolboxIstwiReadWriteRequest_t *)mf;
5212 pReq->Tool = pCfg->action;
5213 pReq->Reserved = 0;
5214 pReq->ChainOffset = 0;
5215 pReq->Function = MPI_FUNCTION_TOOLBOX;
5216 pReq->Reserved1 = 0;
5217 pReq->Reserved2 = 0;
5218 pReq->MsgFlags = 0;
5219 pReq->Flags = pCfg->dir;
5220 pReq->BusNum = 0;
5221 pReq->Reserved3 = 0;
5222 pReq->NumAddressBytes = 0x01;
5223 pReq->Reserved4 = 0;
5224 pReq->DataLength = cpu_to_le16(0x04);
5225 pdev = ioc->pcidev;
5226 if (pdev->devfn & 1)
5227 pReq->DeviceAddr = 0xB2;
5228 else
5229 pReq->DeviceAddr = 0xB0;
5230 pReq->Addr1 = 0;
5231 pReq->Addr2 = 0;
5232 pReq->Addr3 = 0;
5233 pReq->Reserved5 = 0;
5234
5235 /* Add a SGE to the config request.
5236 */
5237
5238 flagsLength = MPT_SGE_FLAGS_SSIMPLE_READ | 4;
5239
5240 mpt_add_sge((char *)&pReq->SGL, flagsLength, pCfg->physAddr);
5241
5242 dcprintk((MYIOC_s_INFO_FMT "Sending Toolbox request, Tool=%x\n",
5243 ioc->name, pReq->Tool));
5244
5245 /* Append pCfg pointer to end of mf
5246 */
5247 *((void **) (((u8 *) mf) + (ioc->req_sz - sizeof(void *)))) = (void *) pCfg;
5248
5249 /* Initalize the timer
5250 */
5251 init_timer(&pCfg->timer);
5252 pCfg->timer.data = (unsigned long) ioc;
5253 pCfg->timer.function = mpt_timer_expired;
5254 pCfg->wait_done = 0;
5255
5256 /* Set the timer; ensure 10 second minimum */
5257 if (pCfg->timeout < 10)
5258 pCfg->timer.expires = jiffies + HZ*10;
5259 else
5260 pCfg->timer.expires = jiffies + HZ*pCfg->timeout;
5261
5262 /* Add to end of Q, set timer and then issue this command */
5263 spin_lock_irqsave(&ioc->FreeQlock, flags);
5264 list_add_tail(&pCfg->linkage, &ioc->configQ);
5265 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
5266
5267 add_timer(&pCfg->timer);
5268 mpt_put_msg_frame(mpt_base_index, ioc, mf);
5269 wait_event(mpt_waitq, pCfg->wait_done);
5270
5271 /* mf has been freed - do not access */
5272
5273 rc = pCfg->status;
5274
5275 return rc;
5276}
5277
5278/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
5279/* 5329/*
5280 * mpt_timer_expired - Call back for timer process. 5330 * mpt_timer_expired - Call back for timer process.
5281 * Used only internal config functionality. 5331 * Used only internal config functionality.
@@ -5967,6 +6017,10 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
5967 } 6017 }
5968 } 6018 }
5969 break; 6019 break;
6020 case MPI_EVENT_INTEGRATED_RAID:
6021 mptbase_raid_process_event_data(ioc,
6022 (MpiEventDataRaid_t *)pEventReply->Data);
6023 break;
5970 default: 6024 default:
5971 break; 6025 break;
5972 } 6026 }
@@ -5978,7 +6032,7 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
5978 if (ioc->events && (ioc->eventTypes & ( 1 << event))) { 6032 if (ioc->events && (ioc->eventTypes & ( 1 << event))) {
5979 int idx; 6033 int idx;
5980 6034
5981 idx = ioc->eventContext % ioc->eventLogSize; 6035 idx = ioc->eventContext % MPTCTL_EVENT_LOG_SIZE;
5982 6036
5983 ioc->events[idx].event = event; 6037 ioc->events[idx].event = event;
5984 ioc->events[idx].eventContext = ioc->eventContext; 6038 ioc->events[idx].eventContext = ioc->eventContext;
@@ -6046,7 +6100,7 @@ mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info)
6046 6100
6047/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 6101/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
6048/* 6102/*
6049 * mpt_sp_log_info - Log information returned from SCSI Parallel IOC. 6103 * mpt_spi_log_info - Log information returned from SCSI Parallel IOC.
6050 * @ioc: Pointer to MPT_ADAPTER structure 6104 * @ioc: Pointer to MPT_ADAPTER structure
6051 * @mr: Pointer to MPT reply frame 6105 * @mr: Pointer to MPT reply frame
6052 * @log_info: U32 LogInfo word from the IOC 6106 * @log_info: U32 LogInfo word from the IOC
@@ -6054,7 +6108,7 @@ mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info)
6054 * Refer to lsi/sp_log.h. 6108 * Refer to lsi/sp_log.h.
6055 */ 6109 */
6056static void 6110static void
6057mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info) 6111mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info)
6058{ 6112{
6059 u32 info = log_info & 0x00FF0000; 6113 u32 info = log_info & 0x00FF0000;
6060 char *desc = "unknown"; 6114 char *desc = "unknown";
@@ -6376,7 +6430,6 @@ EXPORT_SYMBOL(mpt_lan_index);
6376EXPORT_SYMBOL(mpt_stm_index); 6430EXPORT_SYMBOL(mpt_stm_index);
6377EXPORT_SYMBOL(mpt_HardResetHandler); 6431EXPORT_SYMBOL(mpt_HardResetHandler);
6378EXPORT_SYMBOL(mpt_config); 6432EXPORT_SYMBOL(mpt_config);
6379EXPORT_SYMBOL(mpt_toolbox);
6380EXPORT_SYMBOL(mpt_findImVolumes); 6433EXPORT_SYMBOL(mpt_findImVolumes);
6381EXPORT_SYMBOL(mpt_read_ioc_pg_3); 6434EXPORT_SYMBOL(mpt_read_ioc_pg_3);
6382EXPORT_SYMBOL(mpt_alloc_fw_memory); 6435EXPORT_SYMBOL(mpt_alloc_fw_memory);