diff options
-rw-r--r-- | drivers/message/fusion/mptctl.c | 266 |
1 files changed, 141 insertions, 125 deletions
diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c index 58e6c319cc76..89695e705bdc 100644 --- a/drivers/message/fusion/mptctl.c +++ b/drivers/message/fusion/mptctl.c | |||
@@ -181,7 +181,7 @@ static inline int | |||
181 | mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock) | 181 | mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock) |
182 | { | 182 | { |
183 | int rc = 0; | 183 | int rc = 0; |
184 | dctlprintk((KERN_INFO MYNAM "::mptctl_syscall_down(%p,%d) called\n", ioc, nonblock)); | 184 | // dctlprintk(ioc, printk(KERN_DEBUG MYNAM "::mptctl_syscall_down(%p,%d) called\n", ioc, nonblock)); |
185 | 185 | ||
186 | if (nonblock) { | 186 | if (nonblock) { |
187 | if (!mutex_trylock(&ioc->ioctl->ioctl_mutex)) | 187 | if (!mutex_trylock(&ioc->ioctl->ioctl_mutex)) |
@@ -190,7 +190,7 @@ mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock) | |||
190 | if (mutex_lock_interruptible(&ioc->ioctl->ioctl_mutex)) | 190 | if (mutex_lock_interruptible(&ioc->ioctl->ioctl_mutex)) |
191 | rc = -ERESTARTSYS; | 191 | rc = -ERESTARTSYS; |
192 | } | 192 | } |
193 | dctlprintk((KERN_INFO MYNAM "::mptctl_syscall_down return %d\n", rc)); | 193 | // dctlprintk(ioc, printk(KERN_DEBUG MYNAM "::mptctl_syscall_down return %d\n", rc)); |
194 | return rc; | 194 | return rc; |
195 | } | 195 | } |
196 | 196 | ||
@@ -209,18 +209,19 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) | |||
209 | u16 iocStatus; | 209 | u16 iocStatus; |
210 | u8 cmd; | 210 | u8 cmd; |
211 | 211 | ||
212 | dctlprintk(("mptctl_reply()!\n")); | ||
213 | if (req) | 212 | if (req) |
214 | cmd = req->u.hdr.Function; | 213 | cmd = req->u.hdr.Function; |
215 | else | 214 | else |
216 | return 1; | 215 | return 1; |
216 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\tcompleting mpi function (0x%02X), req=%p, " | ||
217 | "reply=%p\n", ioc->name, req->u.hdr.Function, req, reply)); | ||
217 | 218 | ||
218 | if (ioc->ioctl) { | 219 | if (ioc->ioctl) { |
219 | 220 | ||
220 | if (reply==NULL) { | 221 | if (reply==NULL) { |
221 | 222 | ||
222 | dctlprintk(("mptctl_reply() NULL Reply " | 223 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_reply() NULL Reply " |
223 | "Function=%x!\n", cmd)); | 224 | "Function=%x!\n", ioc->name, cmd)); |
224 | 225 | ||
225 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; | 226 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; |
226 | ioc->ioctl->reset &= ~MPTCTL_RESET_OK; | 227 | ioc->ioctl->reset &= ~MPTCTL_RESET_OK; |
@@ -233,14 +234,9 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) | |||
233 | 234 | ||
234 | } | 235 | } |
235 | 236 | ||
236 | dctlprintk(("mptctl_reply() with req=%p " | ||
237 | "reply=%p Function=%x!\n", req, reply, cmd)); | ||
238 | |||
239 | /* Copy the reply frame (which much exist | 237 | /* Copy the reply frame (which much exist |
240 | * for non-SCSI I/O) to the IOC structure. | 238 | * for non-SCSI I/O) to the IOC structure. |
241 | */ | 239 | */ |
242 | dctlprintk(("Copying Reply Frame @%p to ioc%d!\n", | ||
243 | reply, ioc->id)); | ||
244 | memcpy(ioc->ioctl->ReplyFrame, reply, | 240 | memcpy(ioc->ioctl->ReplyFrame, reply, |
245 | min(ioc->reply_sz, 4*reply->u.reply.MsgLength)); | 241 | min(ioc->reply_sz, 4*reply->u.reply.MsgLength)); |
246 | ioc->ioctl->status |= MPT_IOCTL_STATUS_RF_VALID; | 242 | ioc->ioctl->status |= MPT_IOCTL_STATUS_RF_VALID; |
@@ -252,8 +248,24 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) | |||
252 | if (iocStatus == MPI_IOCSTATUS_SUCCESS) | 248 | if (iocStatus == MPI_IOCSTATUS_SUCCESS) |
253 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; | 249 | ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD; |
254 | 250 | ||
251 | if (iocStatus || reply->u.reply.IOCLogInfo) | ||
252 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\tiocstatus (0x%04X), " | ||
253 | "loginfo (0x%08X)\n", ioc->name, | ||
254 | iocStatus, | ||
255 | le32_to_cpu(reply->u.reply.IOCLogInfo))); | ||
256 | |||
255 | if ((cmd == MPI_FUNCTION_SCSI_IO_REQUEST) || | 257 | if ((cmd == MPI_FUNCTION_SCSI_IO_REQUEST) || |
256 | (cmd == MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH)) { | 258 | (cmd == MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH)) { |
259 | |||
260 | if (reply->u.sreply.SCSIStatus || reply->u.sreply.SCSIState) | ||
261 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT | ||
262 | "\tscsi_status (0x%02x), scsi_state (0x%02x), " | ||
263 | "tag = (0x%04x), transfer_count (0x%08x)\n", ioc->name, | ||
264 | reply->u.sreply.SCSIStatus, | ||
265 | reply->u.sreply.SCSIState, | ||
266 | le16_to_cpu(reply->u.sreply.TaskTag), | ||
267 | le32_to_cpu(reply->u.sreply.TransferCount))); | ||
268 | |||
257 | ioc->ioctl->reset &= ~MPTCTL_RESET_OK; | 269 | ioc->ioctl->reset &= ~MPTCTL_RESET_OK; |
258 | 270 | ||
259 | if ((iocStatus == MPI_IOCSTATUS_SCSI_DATA_UNDERRUN) || | 271 | if ((iocStatus == MPI_IOCSTATUS_SCSI_DATA_UNDERRUN) || |
@@ -298,8 +310,8 @@ static void mptctl_timeout_expired (MPT_IOCTL *ioctl) | |||
298 | { | 310 | { |
299 | int rc = 1; | 311 | int rc = 1; |
300 | 312 | ||
301 | dctlprintk((KERN_NOTICE MYNAM ": Timeout Expired! Host %d\n", | 313 | dctlprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT ": Timeout Expired! Host %d\n", |
302 | ioctl->ioc->id)); | 314 | ioctl->ioc->name, ioctl->ioc->id)); |
303 | if (ioctl == NULL) | 315 | if (ioctl == NULL) |
304 | return; | 316 | return; |
305 | 317 | ||
@@ -311,7 +323,7 @@ static void mptctl_timeout_expired (MPT_IOCTL *ioctl) | |||
311 | /* Issue a reset for this device. | 323 | /* Issue a reset for this device. |
312 | * The IOC is not responding. | 324 | * The IOC is not responding. |
313 | */ | 325 | */ |
314 | dctlprintk((MYIOC_s_INFO_FMT "Calling HardReset! \n", | 326 | dctlprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "Calling HardReset! \n", |
315 | ioctl->ioc->name)); | 327 | ioctl->ioc->name)); |
316 | mpt_HardResetHandler(ioctl->ioc, CAN_SLEEP); | 328 | mpt_HardResetHandler(ioctl->ioc, CAN_SLEEP); |
317 | } | 329 | } |
@@ -350,14 +362,14 @@ static int mptctl_bus_reset(MPT_IOCTL *ioctl) | |||
350 | /* Send request | 362 | /* Send request |
351 | */ | 363 | */ |
352 | if ((mf = mpt_get_msg_frame(mptctl_id, ioctl->ioc)) == NULL) { | 364 | if ((mf = mpt_get_msg_frame(mptctl_id, ioctl->ioc)) == NULL) { |
353 | dctlprintk((MYIOC_s_WARN_FMT "IssueTaskMgmt, no msg frames!!\n", | 365 | dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt, no msg frames!!\n", |
354 | ioctl->ioc->name)); | 366 | ioctl->ioc->name)); |
355 | 367 | ||
356 | mptctl_free_tm_flags(ioctl->ioc); | 368 | mptctl_free_tm_flags(ioctl->ioc); |
357 | return -ENOMEM; | 369 | return -ENOMEM; |
358 | } | 370 | } |
359 | 371 | ||
360 | dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n", | 372 | dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT "IssueTaskMgmt request @ %p\n", |
361 | ioctl->ioc->name, mf)); | 373 | ioctl->ioc->name, mf)); |
362 | 374 | ||
363 | pScsiTm = (SCSITaskMgmt_t *) mf; | 375 | pScsiTm = (SCSITaskMgmt_t *) mf; |
@@ -377,15 +389,15 @@ static int mptctl_bus_reset(MPT_IOCTL *ioctl) | |||
377 | pScsiTm->Reserved2[ii] = 0; | 389 | pScsiTm->Reserved2[ii] = 0; |
378 | 390 | ||
379 | pScsiTm->TaskMsgContext = 0; | 391 | pScsiTm->TaskMsgContext = 0; |
380 | dtmprintk((MYIOC_s_INFO_FMT | 392 | dtmprintk(ioctl->ioc, printk(MYIOC_s_DEBUG_FMT |
381 | "mptctl_bus_reset: issued.\n", ioctl->ioc->name)); | 393 | "mptctl_bus_reset: issued.\n", ioctl->ioc->name)); |
382 | 394 | ||
383 | DBG_DUMP_TM_REQUEST_FRAME((u32 *)mf); | 395 | DBG_DUMP_TM_REQUEST_FRAME(ioctl->ioc, (u32 *)mf); |
384 | 396 | ||
385 | ioctl->wait_done=0; | 397 | ioctl->wait_done=0; |
386 | if ((retval = mpt_send_handshake_request(mptctl_id, ioctl->ioc, | 398 | if ((retval = mpt_send_handshake_request(mptctl_id, ioctl->ioc, |
387 | sizeof(SCSITaskMgmt_t), (u32*)pScsiTm, CAN_SLEEP)) != 0) { | 399 | sizeof(SCSITaskMgmt_t), (u32*)pScsiTm, CAN_SLEEP)) != 0) { |
388 | dfailprintk((MYIOC_s_ERR_FMT "_send_handshake FAILED!" | 400 | dfailprintk(ioctl->ioc, printk(MYIOC_s_ERR_FMT "_send_handshake FAILED!" |
389 | " (hd %p, ioc %p, mf %p) \n", hd->ioc->name, hd, | 401 | " (hd %p, ioc %p, mf %p) \n", hd->ioc->name, hd, |
390 | hd->ioc, mf)); | 402 | hd->ioc, mf)); |
391 | goto mptctl_bus_reset_done; | 403 | goto mptctl_bus_reset_done; |
@@ -456,7 +468,7 @@ static int | |||
456 | mptctl_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) | 468 | mptctl_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) |
457 | { | 469 | { |
458 | MPT_IOCTL *ioctl = ioc->ioctl; | 470 | MPT_IOCTL *ioctl = ioc->ioctl; |
459 | dctlprintk((KERN_INFO MYNAM ": IOC %s_reset routed to IOCTL driver!\n", | 471 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": IOC %s_reset routed to IOCTL driver!\n",ioc->name, |
460 | reset_phase==MPT_IOC_SETUP_RESET ? "setup" : ( | 472 | reset_phase==MPT_IOC_SETUP_RESET ? "setup" : ( |
461 | reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post"))); | 473 | reset_phase==MPT_IOC_PRE_RESET ? "pre" : "post"))); |
462 | 474 | ||
@@ -487,7 +499,8 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) | |||
487 | 499 | ||
488 | event = le32_to_cpu(pEvReply->Event) & 0xFF; | 500 | event = le32_to_cpu(pEvReply->Event) & 0xFF; |
489 | 501 | ||
490 | dctlprintk(("%s() called\n", __FUNCTION__)); | 502 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s() called\n", |
503 | ioc->name, __FUNCTION__)); | ||
491 | if(async_queue == NULL) | 504 | if(async_queue == NULL) |
492 | return 1; | 505 | return 1; |
493 | 506 | ||
@@ -497,8 +510,10 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) | |||
497 | */ | 510 | */ |
498 | if (event == 0x21 ) { | 511 | if (event == 0x21 ) { |
499 | ioc->aen_event_read_flag=1; | 512 | ioc->aen_event_read_flag=1; |
500 | dctlprintk(("Raised SIGIO to application\n")); | 513 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Raised SIGIO to application\n", |
501 | devtverboseprintk(("Raised SIGIO to application\n")); | 514 | ioc->name)); |
515 | devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT | ||
516 | "Raised SIGIO to application\n", ioc->name)); | ||
502 | kill_fasync(&async_queue, SIGIO, POLL_IN); | 517 | kill_fasync(&async_queue, SIGIO, POLL_IN); |
503 | return 1; | 518 | return 1; |
504 | } | 519 | } |
@@ -515,8 +530,10 @@ mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) | |||
515 | */ | 530 | */ |
516 | if (ioc->events && (ioc->eventTypes & ( 1 << event))) { | 531 | if (ioc->events && (ioc->eventTypes & ( 1 << event))) { |
517 | ioc->aen_event_read_flag=1; | 532 | ioc->aen_event_read_flag=1; |
518 | dctlprintk(("Raised SIGIO to application\n")); | 533 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT |
519 | devtverboseprintk(("Raised SIGIO to application\n")); | 534 | "Raised SIGIO to application\n", ioc->name)); |
535 | devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT | ||
536 | "Raised SIGIO to application\n", ioc->name)); | ||
520 | kill_fasync(&async_queue, SIGIO, POLL_IN); | 537 | kill_fasync(&async_queue, SIGIO, POLL_IN); |
521 | } | 538 | } |
522 | return 1; | 539 | return 1; |
@@ -530,14 +547,12 @@ mptctl_fasync(int fd, struct file *filep, int mode) | |||
530 | list_for_each_entry(ioc, &ioc_list, list) | 547 | list_for_each_entry(ioc, &ioc_list, list) |
531 | ioc->aen_event_read_flag=0; | 548 | ioc->aen_event_read_flag=0; |
532 | 549 | ||
533 | dctlprintk(("%s() called\n", __FUNCTION__)); | ||
534 | return fasync_helper(fd, filep, mode, &async_queue); | 550 | return fasync_helper(fd, filep, mode, &async_queue); |
535 | } | 551 | } |
536 | 552 | ||
537 | static int | 553 | static int |
538 | mptctl_release(struct inode *inode, struct file *filep) | 554 | mptctl_release(struct inode *inode, struct file *filep) |
539 | { | 555 | { |
540 | dctlprintk(("%s() called\n", __FUNCTION__)); | ||
541 | return fasync_helper(-1, filep, 0, &async_queue); | 556 | return fasync_helper(-1, filep, 0, &async_queue); |
542 | } | 557 | } |
543 | 558 | ||
@@ -558,8 +573,6 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
558 | int ret; | 573 | int ret; |
559 | MPT_ADAPTER *iocp = NULL; | 574 | MPT_ADAPTER *iocp = NULL; |
560 | 575 | ||
561 | dctlprintk(("mptctl_ioctl() called\n")); | ||
562 | |||
563 | if (copy_from_user(&khdr, uhdr, sizeof(khdr))) { | 576 | if (copy_from_user(&khdr, uhdr, sizeof(khdr))) { |
564 | printk(KERN_ERR "%s::mptctl_ioctl() @%d - " | 577 | printk(KERN_ERR "%s::mptctl_ioctl() @%d - " |
565 | "Unable to copy mpt_ioctl_header data @ %p\n", | 578 | "Unable to copy mpt_ioctl_header data @ %p\n", |
@@ -574,13 +587,13 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
574 | iocnumX = khdr.iocnum & 0xFF; | 587 | iocnumX = khdr.iocnum & 0xFF; |
575 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || | 588 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || |
576 | (iocp == NULL)) { | 589 | (iocp == NULL)) { |
577 | dctlprintk((KERN_ERR "%s::mptctl_ioctl() @%d - ioc%d not found!\n", | 590 | printk(KERN_DEBUG "%s::mptctl_ioctl() @%d - ioc%d not found!\n", |
578 | __FILE__, __LINE__, iocnumX)); | 591 | __FILE__, __LINE__, iocnumX); |
579 | return -ENODEV; | 592 | return -ENODEV; |
580 | } | 593 | } |
581 | 594 | ||
582 | if (!iocp->active) { | 595 | if (!iocp->active) { |
583 | printk(KERN_ERR "%s::mptctl_ioctl() @%d - Controller disabled.\n", | 596 | printk(KERN_DEBUG "%s::mptctl_ioctl() @%d - Controller disabled.\n", |
584 | __FILE__, __LINE__); | 597 | __FILE__, __LINE__); |
585 | return -EFAULT; | 598 | return -EFAULT; |
586 | } | 599 | } |
@@ -612,8 +625,6 @@ __mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
612 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) | 625 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) |
613 | return ret; | 626 | return ret; |
614 | 627 | ||
615 | dctlprintk((MYIOC_s_INFO_FMT ": mptctl_ioctl()\n", iocp->name)); | ||
616 | |||
617 | if (cmd == MPTFWDOWNLOAD) | 628 | if (cmd == MPTFWDOWNLOAD) |
618 | ret = mptctl_fw_download(arg); | 629 | ret = mptctl_fw_download(arg); |
619 | else if (cmd == MPTCOMMAND) | 630 | else if (cmd == MPTCOMMAND) |
@@ -648,8 +659,6 @@ static int mptctl_do_reset(unsigned long arg) | |||
648 | struct mpt_ioctl_diag_reset krinfo; | 659 | struct mpt_ioctl_diag_reset krinfo; |
649 | MPT_ADAPTER *iocp; | 660 | MPT_ADAPTER *iocp; |
650 | 661 | ||
651 | dctlprintk((KERN_INFO "mptctl_do_reset called.\n")); | ||
652 | |||
653 | if (copy_from_user(&krinfo, urinfo, sizeof(struct mpt_ioctl_diag_reset))) { | 662 | if (copy_from_user(&krinfo, urinfo, sizeof(struct mpt_ioctl_diag_reset))) { |
654 | printk(KERN_ERR "%s@%d::mptctl_do_reset - " | 663 | printk(KERN_ERR "%s@%d::mptctl_do_reset - " |
655 | "Unable to copy mpt_ioctl_diag_reset struct @ %p\n", | 664 | "Unable to copy mpt_ioctl_diag_reset struct @ %p\n", |
@@ -658,11 +667,14 @@ static int mptctl_do_reset(unsigned long arg) | |||
658 | } | 667 | } |
659 | 668 | ||
660 | if (mpt_verify_adapter(krinfo.hdr.iocnum, &iocp) < 0) { | 669 | if (mpt_verify_adapter(krinfo.hdr.iocnum, &iocp) < 0) { |
661 | dctlprintk((KERN_ERR "%s@%d::mptctl_do_reset - ioc%d not found!\n", | 670 | printk(KERN_DEBUG "%s@%d::mptctl_do_reset - ioc%d not found!\n", |
662 | __FILE__, __LINE__, krinfo.hdr.iocnum)); | 671 | __FILE__, __LINE__, krinfo.hdr.iocnum); |
663 | return -ENODEV; /* (-6) No such device or address */ | 672 | return -ENODEV; /* (-6) No such device or address */ |
664 | } | 673 | } |
665 | 674 | ||
675 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "mptctl_do_reset called.\n", | ||
676 | iocp->name)); | ||
677 | |||
666 | if (mpt_HardResetHandler(iocp, CAN_SLEEP) != 0) { | 678 | if (mpt_HardResetHandler(iocp, CAN_SLEEP) != 0) { |
667 | printk (KERN_ERR "%s@%d::mptctl_do_reset - reset failed.\n", | 679 | printk (KERN_ERR "%s@%d::mptctl_do_reset - reset failed.\n", |
668 | __FILE__, __LINE__); | 680 | __FILE__, __LINE__); |
@@ -695,7 +707,6 @@ mptctl_fw_download(unsigned long arg) | |||
695 | struct mpt_fw_xfer __user *ufwdl = (void __user *) arg; | 707 | struct mpt_fw_xfer __user *ufwdl = (void __user *) arg; |
696 | struct mpt_fw_xfer kfwdl; | 708 | struct mpt_fw_xfer kfwdl; |
697 | 709 | ||
698 | dctlprintk((KERN_INFO "mptctl_fwdl called. mptctl_id = %xh\n", mptctl_id)); //tc | ||
699 | if (copy_from_user(&kfwdl, ufwdl, sizeof(struct mpt_fw_xfer))) { | 710 | if (copy_from_user(&kfwdl, ufwdl, sizeof(struct mpt_fw_xfer))) { |
700 | printk(KERN_ERR "%s@%d::_ioctl_fwdl - " | 711 | printk(KERN_ERR "%s@%d::_ioctl_fwdl - " |
701 | "Unable to copy mpt_fw_xfer struct @ %p\n", | 712 | "Unable to copy mpt_fw_xfer struct @ %p\n", |
@@ -744,15 +755,8 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) | |||
744 | u16 iocstat; | 755 | u16 iocstat; |
745 | pFWDownloadReply_t ReplyMsg = NULL; | 756 | pFWDownloadReply_t ReplyMsg = NULL; |
746 | 757 | ||
747 | dctlprintk(("mptctl_do_fwdl called. mptctl_id = %xh.\n", mptctl_id)); | ||
748 | |||
749 | dctlprintk(("DbG: kfwdl.bufp = %p\n", ufwbuf)); | ||
750 | dctlprintk(("DbG: kfwdl.fwlen = %d\n", (int)fwlen)); | ||
751 | dctlprintk(("DbG: kfwdl.ioc = %04xh\n", ioc)); | ||
752 | |||
753 | if (mpt_verify_adapter(ioc, &iocp) < 0) { | 758 | if (mpt_verify_adapter(ioc, &iocp) < 0) { |
754 | dctlprintk(("ioctl_fwdl - ioc%d not found!\n", | 759 | printk(KERN_DEBUG "ioctl_fwdl - ioc%d not found!\n", ioc); |
755 | ioc)); | ||
756 | return -ENODEV; /* (-6) No such device or address */ | 760 | return -ENODEV; /* (-6) No such device or address */ |
757 | } else { | 761 | } else { |
758 | 762 | ||
@@ -761,6 +765,16 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) | |||
761 | if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL) | 765 | if ((mf = mpt_get_msg_frame(mptctl_id, iocp)) == NULL) |
762 | return -EAGAIN; | 766 | return -EAGAIN; |
763 | } | 767 | } |
768 | |||
769 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT | ||
770 | "mptctl_do_fwdl called. mptctl_id = %xh.\n", iocp->name, mptctl_id)); | ||
771 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.bufp = %p\n", | ||
772 | iocp->name, ufwbuf)); | ||
773 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.fwlen = %d\n", | ||
774 | iocp->name, (int)fwlen)); | ||
775 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: kfwdl.ioc = %04xh\n", | ||
776 | iocp->name, ioc)); | ||
777 | |||
764 | dlmsg = (FWDownload_t*) mf; | 778 | dlmsg = (FWDownload_t*) mf; |
765 | ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL; | 779 | ptsge = (FWDownloadTCSGE_t *) &dlmsg->SGL; |
766 | sgOut = (char *) (ptsge + 1); | 780 | sgOut = (char *) (ptsge + 1); |
@@ -829,7 +843,8 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) | |||
829 | goto fwdl_out; | 843 | goto fwdl_out; |
830 | } | 844 | } |
831 | 845 | ||
832 | dctlprintk(("DbG: sgl buffer = %p, sgfrags = %d\n", sgl, numfrags)); | 846 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "DbG: sgl buffer = %p, sgfrags = %d\n", |
847 | iocp->name, sgl, numfrags)); | ||
833 | 848 | ||
834 | /* | 849 | /* |
835 | * Parse SG list, copying sgl itself, | 850 | * Parse SG list, copying sgl itself, |
@@ -865,15 +880,7 @@ mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) | |||
865 | sgOut += (sizeof(dma_addr_t) + sizeof(u32)); | 880 | sgOut += (sizeof(dma_addr_t) + sizeof(u32)); |
866 | } | 881 | } |
867 | 882 | ||
868 | #ifdef MPT_DEBUG | 883 | DBG_DUMP_FW_DOWNLOAD(iocp, (u32 *)mf, numfrags); |
869 | { | ||
870 | u32 *m = (u32 *)mf; | ||
871 | printk(KERN_INFO MYNAM ": F/W download request:\n" KERN_INFO " "); | ||
872 | for (i=0; i < 7+numfrags*2; i++) | ||
873 | printk(" %08x", le32_to_cpu(m[i])); | ||
874 | printk("\n"); | ||
875 | } | ||
876 | #endif | ||
877 | 884 | ||
878 | /* | 885 | /* |
879 | * Finally, perform firmware download. | 886 | * Finally, perform firmware download. |
@@ -1049,13 +1056,11 @@ kbuf_alloc_2_sgl(int bytes, u32 sgdir, int sge_offset, int *frags, | |||
1049 | *frags = numfrags; | 1056 | *frags = numfrags; |
1050 | *blp = buflist; | 1057 | *blp = buflist; |
1051 | 1058 | ||
1052 | dctlprintk((KERN_INFO MYNAM "-SG: kbuf_alloc_2_sgl() - " | 1059 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - " |
1053 | "%d SG frags generated!\n", | 1060 | "%d SG frags generated!\n", ioc->name, numfrags)); |
1054 | numfrags)); | ||
1055 | 1061 | ||
1056 | dctlprintk((KERN_INFO MYNAM "-SG: kbuf_alloc_2_sgl() - " | 1062 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - " |
1057 | "last (big) alloc_sz=%d\n", | 1063 | "last (big) alloc_sz=%d\n", ioc->name, alloc_sz)); |
1058 | alloc_sz)); | ||
1059 | 1064 | ||
1060 | return sglbuf; | 1065 | return sglbuf; |
1061 | 1066 | ||
@@ -1139,7 +1144,8 @@ kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma, struct buflist *buflist, MPT_ADAPTE | |||
1139 | 1144 | ||
1140 | pci_free_consistent(ioc->pcidev, MAX_SGL_BYTES, sgl, sgl_dma); | 1145 | pci_free_consistent(ioc->pcidev, MAX_SGL_BYTES, sgl, sgl_dma); |
1141 | kfree(buflist); | 1146 | kfree(buflist); |
1142 | dctlprintk((KERN_INFO MYNAM "-SG: Free'd 1 SGL buf + %d kbufs!\n", n)); | 1147 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: Free'd 1 SGL buf + %d kbufs!\n", |
1148 | ioc->name, n)); | ||
1143 | } | 1149 | } |
1144 | 1150 | ||
1145 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 1151 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
@@ -1166,7 +1172,6 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size) | |||
1166 | struct scsi_device *sdev; | 1172 | struct scsi_device *sdev; |
1167 | VirtDevice *vdev; | 1173 | VirtDevice *vdev; |
1168 | 1174 | ||
1169 | dctlprintk((": mptctl_getiocinfo called.\n")); | ||
1170 | /* Add of PCI INFO results in unaligned access for | 1175 | /* Add of PCI INFO results in unaligned access for |
1171 | * IA64 and Sparc. Reset long to int. Return no PCI | 1176 | * IA64 and Sparc. Reset long to int. Return no PCI |
1172 | * data for obsolete format. | 1177 | * data for obsolete format. |
@@ -1199,8 +1204,8 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size) | |||
1199 | 1204 | ||
1200 | if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || | 1205 | if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || |
1201 | (ioc == NULL)) { | 1206 | (ioc == NULL)) { |
1202 | dctlprintk((KERN_ERR "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n", | 1207 | printk(KERN_DEBUG "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n", |
1203 | __FILE__, __LINE__, iocnum)); | 1208 | __FILE__, __LINE__, iocnum); |
1204 | kfree(karg); | 1209 | kfree(karg); |
1205 | return -ENODEV; | 1210 | return -ENODEV; |
1206 | } | 1211 | } |
@@ -1214,6 +1219,9 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size) | |||
1214 | return -EFAULT; | 1219 | return -EFAULT; |
1215 | } | 1220 | } |
1216 | 1221 | ||
1222 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_getiocinfo called.\n", | ||
1223 | ioc->name)); | ||
1224 | |||
1217 | /* Fill in the data and return the structure to the calling | 1225 | /* Fill in the data and return the structure to the calling |
1218 | * program | 1226 | * program |
1219 | */ | 1227 | */ |
@@ -1320,7 +1328,6 @@ mptctl_gettargetinfo (unsigned long arg) | |||
1320 | u8 port; | 1328 | u8 port; |
1321 | struct scsi_device *sdev; | 1329 | struct scsi_device *sdev; |
1322 | 1330 | ||
1323 | dctlprintk(("mptctl_gettargetinfo called.\n")); | ||
1324 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_targetinfo))) { | 1331 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_targetinfo))) { |
1325 | printk(KERN_ERR "%s@%d::mptctl_gettargetinfo - " | 1332 | printk(KERN_ERR "%s@%d::mptctl_gettargetinfo - " |
1326 | "Unable to read in mpt_ioctl_targetinfo struct @ %p\n", | 1333 | "Unable to read in mpt_ioctl_targetinfo struct @ %p\n", |
@@ -1330,11 +1337,13 @@ mptctl_gettargetinfo (unsigned long arg) | |||
1330 | 1337 | ||
1331 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1338 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1332 | (ioc == NULL)) { | 1339 | (ioc == NULL)) { |
1333 | dctlprintk((KERN_ERR "%s::mptctl_gettargetinfo() @%d - ioc%d not found!\n", | 1340 | printk(KERN_DEBUG "%s::mptctl_gettargetinfo() @%d - ioc%d not found!\n", |
1334 | __FILE__, __LINE__, iocnum)); | 1341 | __FILE__, __LINE__, iocnum); |
1335 | return -ENODEV; | 1342 | return -ENODEV; |
1336 | } | 1343 | } |
1337 | 1344 | ||
1345 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_gettargetinfo called.\n", | ||
1346 | ioc->name)); | ||
1338 | /* Get the port number and set the maximum number of bytes | 1347 | /* Get the port number and set the maximum number of bytes |
1339 | * in the returned structure. | 1348 | * in the returned structure. |
1340 | * Ignore the port setting. | 1349 | * Ignore the port setting. |
@@ -1434,7 +1443,6 @@ mptctl_readtest (unsigned long arg) | |||
1434 | MPT_ADAPTER *ioc; | 1443 | MPT_ADAPTER *ioc; |
1435 | int iocnum; | 1444 | int iocnum; |
1436 | 1445 | ||
1437 | dctlprintk(("mptctl_readtest called.\n")); | ||
1438 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_test))) { | 1446 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_test))) { |
1439 | printk(KERN_ERR "%s@%d::mptctl_readtest - " | 1447 | printk(KERN_ERR "%s@%d::mptctl_readtest - " |
1440 | "Unable to read in mpt_ioctl_test struct @ %p\n", | 1448 | "Unable to read in mpt_ioctl_test struct @ %p\n", |
@@ -1444,11 +1452,13 @@ mptctl_readtest (unsigned long arg) | |||
1444 | 1452 | ||
1445 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1453 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1446 | (ioc == NULL)) { | 1454 | (ioc == NULL)) { |
1447 | dctlprintk((KERN_ERR "%s::mptctl_readtest() @%d - ioc%d not found!\n", | 1455 | printk(KERN_DEBUG "%s::mptctl_readtest() @%d - ioc%d not found!\n", |
1448 | __FILE__, __LINE__, iocnum)); | 1456 | __FILE__, __LINE__, iocnum); |
1449 | return -ENODEV; | 1457 | return -ENODEV; |
1450 | } | 1458 | } |
1451 | 1459 | ||
1460 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_readtest called.\n", | ||
1461 | ioc->name)); | ||
1452 | /* Fill in the data and return the structure to the calling | 1462 | /* Fill in the data and return the structure to the calling |
1453 | * program | 1463 | * program |
1454 | */ | 1464 | */ |
@@ -1494,7 +1504,6 @@ mptctl_eventquery (unsigned long arg) | |||
1494 | MPT_ADAPTER *ioc; | 1504 | MPT_ADAPTER *ioc; |
1495 | int iocnum; | 1505 | int iocnum; |
1496 | 1506 | ||
1497 | dctlprintk(("mptctl_eventquery called.\n")); | ||
1498 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventquery))) { | 1507 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventquery))) { |
1499 | printk(KERN_ERR "%s@%d::mptctl_eventquery - " | 1508 | printk(KERN_ERR "%s@%d::mptctl_eventquery - " |
1500 | "Unable to read in mpt_ioctl_eventquery struct @ %p\n", | 1509 | "Unable to read in mpt_ioctl_eventquery struct @ %p\n", |
@@ -1504,11 +1513,13 @@ mptctl_eventquery (unsigned long arg) | |||
1504 | 1513 | ||
1505 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1514 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1506 | (ioc == NULL)) { | 1515 | (ioc == NULL)) { |
1507 | dctlprintk((KERN_ERR "%s::mptctl_eventquery() @%d - ioc%d not found!\n", | 1516 | printk(KERN_DEBUG "%s::mptctl_eventquery() @%d - ioc%d not found!\n", |
1508 | __FILE__, __LINE__, iocnum)); | 1517 | __FILE__, __LINE__, iocnum); |
1509 | return -ENODEV; | 1518 | return -ENODEV; |
1510 | } | 1519 | } |
1511 | 1520 | ||
1521 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventquery called.\n", | ||
1522 | ioc->name)); | ||
1512 | karg.eventEntries = MPTCTL_EVENT_LOG_SIZE; | 1523 | karg.eventEntries = MPTCTL_EVENT_LOG_SIZE; |
1513 | karg.eventTypes = ioc->eventTypes; | 1524 | karg.eventTypes = ioc->eventTypes; |
1514 | 1525 | ||
@@ -1532,7 +1543,6 @@ mptctl_eventenable (unsigned long arg) | |||
1532 | MPT_ADAPTER *ioc; | 1543 | MPT_ADAPTER *ioc; |
1533 | int iocnum; | 1544 | int iocnum; |
1534 | 1545 | ||
1535 | dctlprintk(("mptctl_eventenable called.\n")); | ||
1536 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventenable))) { | 1546 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventenable))) { |
1537 | printk(KERN_ERR "%s@%d::mptctl_eventenable - " | 1547 | printk(KERN_ERR "%s@%d::mptctl_eventenable - " |
1538 | "Unable to read in mpt_ioctl_eventenable struct @ %p\n", | 1548 | "Unable to read in mpt_ioctl_eventenable struct @ %p\n", |
@@ -1542,11 +1552,13 @@ mptctl_eventenable (unsigned long arg) | |||
1542 | 1552 | ||
1543 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1553 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1544 | (ioc == NULL)) { | 1554 | (ioc == NULL)) { |
1545 | dctlprintk((KERN_ERR "%s::mptctl_eventenable() @%d - ioc%d not found!\n", | 1555 | printk(KERN_DEBUG "%s::mptctl_eventenable() @%d - ioc%d not found!\n", |
1546 | __FILE__, __LINE__, iocnum)); | 1556 | __FILE__, __LINE__, iocnum); |
1547 | return -ENODEV; | 1557 | return -ENODEV; |
1548 | } | 1558 | } |
1549 | 1559 | ||
1560 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventenable called.\n", | ||
1561 | ioc->name)); | ||
1550 | if (ioc->events == NULL) { | 1562 | if (ioc->events == NULL) { |
1551 | /* Have not yet allocated memory - do so now. | 1563 | /* Have not yet allocated memory - do so now. |
1552 | */ | 1564 | */ |
@@ -1579,7 +1591,6 @@ mptctl_eventreport (unsigned long arg) | |||
1579 | int iocnum; | 1591 | int iocnum; |
1580 | int numBytes, maxEvents, max; | 1592 | int numBytes, maxEvents, max; |
1581 | 1593 | ||
1582 | dctlprintk(("mptctl_eventreport called.\n")); | ||
1583 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventreport))) { | 1594 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_eventreport))) { |
1584 | printk(KERN_ERR "%s@%d::mptctl_eventreport - " | 1595 | printk(KERN_ERR "%s@%d::mptctl_eventreport - " |
1585 | "Unable to read in mpt_ioctl_eventreport struct @ %p\n", | 1596 | "Unable to read in mpt_ioctl_eventreport struct @ %p\n", |
@@ -1589,10 +1600,12 @@ mptctl_eventreport (unsigned long arg) | |||
1589 | 1600 | ||
1590 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1601 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1591 | (ioc == NULL)) { | 1602 | (ioc == NULL)) { |
1592 | dctlprintk((KERN_ERR "%s::mptctl_eventreport() @%d - ioc%d not found!\n", | 1603 | printk(KERN_DEBUG "%s::mptctl_eventreport() @%d - ioc%d not found!\n", |
1593 | __FILE__, __LINE__, iocnum)); | 1604 | __FILE__, __LINE__, iocnum); |
1594 | return -ENODEV; | 1605 | return -ENODEV; |
1595 | } | 1606 | } |
1607 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventreport called.\n", | ||
1608 | ioc->name)); | ||
1596 | 1609 | ||
1597 | numBytes = karg.hdr.maxDataSize - sizeof(mpt_ioctl_header); | 1610 | numBytes = karg.hdr.maxDataSize - sizeof(mpt_ioctl_header); |
1598 | maxEvents = numBytes/sizeof(MPT_IOCTL_EVENTS); | 1611 | maxEvents = numBytes/sizeof(MPT_IOCTL_EVENTS); |
@@ -1632,7 +1645,6 @@ mptctl_replace_fw (unsigned long arg) | |||
1632 | int iocnum; | 1645 | int iocnum; |
1633 | int newFwSize; | 1646 | int newFwSize; |
1634 | 1647 | ||
1635 | dctlprintk(("mptctl_replace_fw called.\n")); | ||
1636 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_replace_fw))) { | 1648 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_replace_fw))) { |
1637 | printk(KERN_ERR "%s@%d::mptctl_replace_fw - " | 1649 | printk(KERN_ERR "%s@%d::mptctl_replace_fw - " |
1638 | "Unable to read in mpt_ioctl_replace_fw struct @ %p\n", | 1650 | "Unable to read in mpt_ioctl_replace_fw struct @ %p\n", |
@@ -1642,11 +1654,13 @@ mptctl_replace_fw (unsigned long arg) | |||
1642 | 1654 | ||
1643 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1655 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1644 | (ioc == NULL)) { | 1656 | (ioc == NULL)) { |
1645 | dctlprintk((KERN_ERR "%s::mptctl_replace_fw() @%d - ioc%d not found!\n", | 1657 | printk(KERN_DEBUG "%s::mptctl_replace_fw() @%d - ioc%d not found!\n", |
1646 | __FILE__, __LINE__, iocnum)); | 1658 | __FILE__, __LINE__, iocnum); |
1647 | return -ENODEV; | 1659 | return -ENODEV; |
1648 | } | 1660 | } |
1649 | 1661 | ||
1662 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_replace_fw called.\n", | ||
1663 | ioc->name)); | ||
1650 | /* If caching FW, Free the old FW image | 1664 | /* If caching FW, Free the old FW image |
1651 | */ | 1665 | */ |
1652 | if (ioc->cached_fw == NULL) | 1666 | if (ioc->cached_fw == NULL) |
@@ -1704,7 +1718,6 @@ mptctl_mpt_command (unsigned long arg) | |||
1704 | int iocnum; | 1718 | int iocnum; |
1705 | int rc; | 1719 | int rc; |
1706 | 1720 | ||
1707 | dctlprintk(("mptctl_command called.\n")); | ||
1708 | 1721 | ||
1709 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_command))) { | 1722 | if (copy_from_user(&karg, uarg, sizeof(struct mpt_ioctl_command))) { |
1710 | printk(KERN_ERR "%s@%d::mptctl_mpt_command - " | 1723 | printk(KERN_ERR "%s@%d::mptctl_mpt_command - " |
@@ -1715,8 +1728,8 @@ mptctl_mpt_command (unsigned long arg) | |||
1715 | 1728 | ||
1716 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1729 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1717 | (ioc == NULL)) { | 1730 | (ioc == NULL)) { |
1718 | dctlprintk((KERN_ERR "%s::mptctl_mpt_command() @%d - ioc%d not found!\n", | 1731 | printk(KERN_DEBUG "%s::mptctl_mpt_command() @%d - ioc%d not found!\n", |
1719 | __FILE__, __LINE__, iocnum)); | 1732 | __FILE__, __LINE__, iocnum); |
1720 | return -ENODEV; | 1733 | return -ENODEV; |
1721 | } | 1734 | } |
1722 | 1735 | ||
@@ -1756,13 +1769,12 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr) | |||
1756 | ulong timeout; | 1769 | ulong timeout; |
1757 | struct scsi_device *sdev; | 1770 | struct scsi_device *sdev; |
1758 | 1771 | ||
1759 | dctlprintk(("mptctl_do_mpt_command called.\n")); | ||
1760 | bufIn.kptr = bufOut.kptr = NULL; | 1772 | bufIn.kptr = bufOut.kptr = NULL; |
1761 | 1773 | ||
1762 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 1774 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
1763 | (ioc == NULL)) { | 1775 | (ioc == NULL)) { |
1764 | dctlprintk((KERN_ERR "%s::mptctl_do_mpt_command() @%d - ioc%d not found!\n", | 1776 | printk(KERN_DEBUG "%s::mptctl_do_mpt_command() @%d - ioc%d not found!\n", |
1765 | __FILE__, __LINE__, iocnum)); | 1777 | __FILE__, __LINE__, iocnum); |
1766 | return -ENODEV; | 1778 | return -ENODEV; |
1767 | } | 1779 | } |
1768 | if (!ioc->ioctl) { | 1780 | if (!ioc->ioctl) { |
@@ -1816,6 +1828,9 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr) | |||
1816 | 1828 | ||
1817 | /* Verify that this request is allowed. | 1829 | /* Verify that this request is allowed. |
1818 | */ | 1830 | */ |
1831 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sending mpi function (0x%02X), req=%p\n", | ||
1832 | ioc->name, hdr->Function, mf)); | ||
1833 | |||
1819 | switch (hdr->Function) { | 1834 | switch (hdr->Function) { |
1820 | case MPI_FUNCTION_IOC_FACTS: | 1835 | case MPI_FUNCTION_IOC_FACTS: |
1821 | case MPI_FUNCTION_PORT_FACTS: | 1836 | case MPI_FUNCTION_PORT_FACTS: |
@@ -1823,6 +1838,18 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr) | |||
1823 | break; | 1838 | break; |
1824 | 1839 | ||
1825 | case MPI_FUNCTION_CONFIG: | 1840 | case MPI_FUNCTION_CONFIG: |
1841 | { | ||
1842 | Config_t *config_frame; | ||
1843 | config_frame = (Config_t *)mf; | ||
1844 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\ttype=0x%02x ext_type=0x%02x " | ||
1845 | "number=0x%02x action=0x%02x\n", ioc->name, | ||
1846 | config_frame->Header.PageType, | ||
1847 | config_frame->ExtPageType, | ||
1848 | config_frame->Header.PageNumber, | ||
1849 | config_frame->Action)); | ||
1850 | break; | ||
1851 | } | ||
1852 | |||
1826 | case MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND: | 1853 | case MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND: |
1827 | case MPI_FUNCTION_FC_EX_LINK_SRVC_SEND: | 1854 | case MPI_FUNCTION_FC_EX_LINK_SRVC_SEND: |
1828 | case MPI_FUNCTION_FW_UPLOAD: | 1855 | case MPI_FUNCTION_FW_UPLOAD: |
@@ -2158,12 +2185,12 @@ mptctl_do_mpt_command (struct mpt_ioctl_command karg, void __user *mfPtr) | |||
2158 | ioc->ioctl->wait_done = 0; | 2185 | ioc->ioctl->wait_done = 0; |
2159 | if (hdr->Function == MPI_FUNCTION_SCSI_TASK_MGMT) { | 2186 | if (hdr->Function == MPI_FUNCTION_SCSI_TASK_MGMT) { |
2160 | 2187 | ||
2161 | DBG_DUMP_TM_REQUEST_FRAME((u32 *)mf); | 2188 | DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)mf); |
2162 | 2189 | ||
2163 | if (mpt_send_handshake_request(mptctl_id, ioc, | 2190 | if (mpt_send_handshake_request(mptctl_id, ioc, |
2164 | sizeof(SCSITaskMgmt_t), (u32*)mf, | 2191 | sizeof(SCSITaskMgmt_t), (u32*)mf, |
2165 | CAN_SLEEP) != 0) { | 2192 | CAN_SLEEP) != 0) { |
2166 | dfailprintk((MYIOC_s_ERR_FMT "_send_handshake FAILED!" | 2193 | dfailprintk(ioc, printk(MYIOC_s_ERR_FMT "_send_handshake FAILED!" |
2167 | " (ioc %p, mf %p) \n", ioc->name, | 2194 | " (ioc %p, mf %p) \n", ioc->name, |
2168 | ioc, mf)); | 2195 | ioc, mf)); |
2169 | mptctl_free_tm_flags(ioc); | 2196 | mptctl_free_tm_flags(ioc); |
@@ -2303,7 +2330,6 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2303 | MPT_FRAME_HDR *mf = NULL; | 2330 | MPT_FRAME_HDR *mf = NULL; |
2304 | MPIHeader_t *mpi_hdr; | 2331 | MPIHeader_t *mpi_hdr; |
2305 | 2332 | ||
2306 | dctlprintk((": mptctl_hp_hostinfo called.\n")); | ||
2307 | /* Reset long to int. Should affect IA64 and SPARC only | 2333 | /* Reset long to int. Should affect IA64 and SPARC only |
2308 | */ | 2334 | */ |
2309 | if (data_size == sizeof(hp_host_info_t)) | 2335 | if (data_size == sizeof(hp_host_info_t)) |
@@ -2322,10 +2348,12 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2322 | 2348 | ||
2323 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 2349 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
2324 | (ioc == NULL)) { | 2350 | (ioc == NULL)) { |
2325 | dctlprintk((KERN_ERR "%s::mptctl_hp_hostinfo() @%d - ioc%d not found!\n", | 2351 | printk(KERN_DEBUG "%s::mptctl_hp_hostinfo() @%d - ioc%d not found!\n", |
2326 | __FILE__, __LINE__, iocnum)); | 2352 | __FILE__, __LINE__, iocnum); |
2327 | return -ENODEV; | 2353 | return -ENODEV; |
2328 | } | 2354 | } |
2355 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_hostinfo called.\n", | ||
2356 | ioc->name)); | ||
2329 | 2357 | ||
2330 | /* Fill in the data and return the structure to the calling | 2358 | /* Fill in the data and return the structure to the calling |
2331 | * program | 2359 | * program |
@@ -2441,7 +2469,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2441 | * Gather ISTWI(Industry Standard Two Wire Interface) Data | 2469 | * Gather ISTWI(Industry Standard Two Wire Interface) Data |
2442 | */ | 2470 | */ |
2443 | if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) { | 2471 | if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) { |
2444 | dfailprintk((MYIOC_s_WARN_FMT "%s, no msg frames!!\n", | 2472 | dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, no msg frames!!\n", |
2445 | ioc->name,__FUNCTION__)); | 2473 | ioc->name,__FUNCTION__)); |
2446 | goto out; | 2474 | goto out; |
2447 | } | 2475 | } |
@@ -2474,7 +2502,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2474 | HZ*MPT_IOCTL_DEFAULT_TIMEOUT /* 10 sec */); | 2502 | HZ*MPT_IOCTL_DEFAULT_TIMEOUT /* 10 sec */); |
2475 | 2503 | ||
2476 | if(rc <=0 && (ioc->ioctl->wait_done != 1 )) { | 2504 | if(rc <=0 && (ioc->ioctl->wait_done != 1 )) { |
2477 | /* | 2505 | /* |
2478 | * Now we need to reset the board | 2506 | * Now we need to reset the board |
2479 | */ | 2507 | */ |
2480 | mpt_free_msg_frame(ioc, mf); | 2508 | mpt_free_msg_frame(ioc, mf); |
@@ -2482,7 +2510,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size) | |||
2482 | goto out; | 2510 | goto out; |
2483 | } | 2511 | } |
2484 | 2512 | ||
2485 | /* | 2513 | /* |
2486 | *ISTWI Data Definition | 2514 | *ISTWI Data Definition |
2487 | * pbuf[0] = FW_VERSION = 0x4 | 2515 | * pbuf[0] = FW_VERSION = 0x4 |
2488 | * pbuf[1] = Bay Count = 6 or 4 or 2, depending on | 2516 | * pbuf[1] = Bay Count = 6 or 4 or 2, depending on |
@@ -2538,7 +2566,6 @@ mptctl_hp_targetinfo(unsigned long arg) | |||
2538 | ConfigPageHeader_t hdr; | 2566 | ConfigPageHeader_t hdr; |
2539 | int tmp, np, rc = 0; | 2567 | int tmp, np, rc = 0; |
2540 | 2568 | ||
2541 | dctlprintk((": mptctl_hp_targetinfo called.\n")); | ||
2542 | if (copy_from_user(&karg, uarg, sizeof(hp_target_info_t))) { | 2569 | if (copy_from_user(&karg, uarg, sizeof(hp_target_info_t))) { |
2543 | printk(KERN_ERR "%s@%d::mptctl_hp_targetinfo - " | 2570 | printk(KERN_ERR "%s@%d::mptctl_hp_targetinfo - " |
2544 | "Unable to read in hp_host_targetinfo struct @ %p\n", | 2571 | "Unable to read in hp_host_targetinfo struct @ %p\n", |
@@ -2548,10 +2575,12 @@ mptctl_hp_targetinfo(unsigned long arg) | |||
2548 | 2575 | ||
2549 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || | 2576 | if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || |
2550 | (ioc == NULL)) { | 2577 | (ioc == NULL)) { |
2551 | dctlprintk((KERN_ERR "%s::mptctl_hp_targetinfo() @%d - ioc%d not found!\n", | 2578 | printk(KERN_DEBUG "%s::mptctl_hp_targetinfo() @%d - ioc%d not found!\n", |
2552 | __FILE__, __LINE__, iocnum)); | 2579 | __FILE__, __LINE__, iocnum); |
2553 | return -ENODEV; | 2580 | return -ENODEV; |
2554 | } | 2581 | } |
2582 | dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_targetinfo called.\n", | ||
2583 | ioc->name)); | ||
2555 | 2584 | ||
2556 | /* There is nothing to do for FCP parts. | 2585 | /* There is nothing to do for FCP parts. |
2557 | */ | 2586 | */ |
@@ -2694,7 +2723,6 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd, | |||
2694 | int nonblock = (filp->f_flags & O_NONBLOCK); | 2723 | int nonblock = (filp->f_flags & O_NONBLOCK); |
2695 | int ret; | 2724 | int ret; |
2696 | 2725 | ||
2697 | dctlprintk((KERN_INFO MYNAM "::compat_mptfwxfer_ioctl() called\n")); | ||
2698 | 2726 | ||
2699 | if (copy_from_user(&kfw32, (char __user *)arg, sizeof(kfw32))) | 2727 | if (copy_from_user(&kfw32, (char __user *)arg, sizeof(kfw32))) |
2700 | return -EFAULT; | 2728 | return -EFAULT; |
@@ -2703,14 +2731,16 @@ compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd, | |||
2703 | iocnumX = kfw32.iocnum & 0xFF; | 2731 | iocnumX = kfw32.iocnum & 0xFF; |
2704 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || | 2732 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || |
2705 | (iocp == NULL)) { | 2733 | (iocp == NULL)) { |
2706 | dctlprintk((KERN_ERR MYNAM "::compat_mptfwxfer_ioctl @%d - ioc%d not found!\n", | 2734 | printk(KERN_DEBUG MYNAM "::compat_mptfwxfer_ioctl @%d - ioc%d not found!\n", |
2707 | __LINE__, iocnumX)); | 2735 | __LINE__, iocnumX); |
2708 | return -ENODEV; | 2736 | return -ENODEV; |
2709 | } | 2737 | } |
2710 | 2738 | ||
2711 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) | 2739 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) |
2712 | return ret; | 2740 | return ret; |
2713 | 2741 | ||
2742 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "compat_mptfwxfer_ioctl() called\n", | ||
2743 | iocp->name)); | ||
2714 | kfw.iocnum = iocnum; | 2744 | kfw.iocnum = iocnum; |
2715 | kfw.fwlen = kfw32.fwlen; | 2745 | kfw.fwlen = kfw32.fwlen; |
2716 | kfw.bufp = compat_ptr(kfw32.bufp); | 2746 | kfw.bufp = compat_ptr(kfw32.bufp); |
@@ -2734,8 +2764,6 @@ compat_mpt_command(struct file *filp, unsigned int cmd, | |||
2734 | int nonblock = (filp->f_flags & O_NONBLOCK); | 2764 | int nonblock = (filp->f_flags & O_NONBLOCK); |
2735 | int ret; | 2765 | int ret; |
2736 | 2766 | ||
2737 | dctlprintk((KERN_INFO MYNAM "::compat_mpt_command() called\n")); | ||
2738 | |||
2739 | if (copy_from_user(&karg32, (char __user *)arg, sizeof(karg32))) | 2767 | if (copy_from_user(&karg32, (char __user *)arg, sizeof(karg32))) |
2740 | return -EFAULT; | 2768 | return -EFAULT; |
2741 | 2769 | ||
@@ -2743,14 +2771,16 @@ compat_mpt_command(struct file *filp, unsigned int cmd, | |||
2743 | iocnumX = karg32.hdr.iocnum & 0xFF; | 2771 | iocnumX = karg32.hdr.iocnum & 0xFF; |
2744 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || | 2772 | if (((iocnum = mpt_verify_adapter(iocnumX, &iocp)) < 0) || |
2745 | (iocp == NULL)) { | 2773 | (iocp == NULL)) { |
2746 | dctlprintk((KERN_ERR MYNAM "::compat_mpt_command @%d - ioc%d not found!\n", | 2774 | printk(KERN_DEBUG MYNAM "::compat_mpt_command @%d - ioc%d not found!\n", |
2747 | __LINE__, iocnumX)); | 2775 | __LINE__, iocnumX); |
2748 | return -ENODEV; | 2776 | return -ENODEV; |
2749 | } | 2777 | } |
2750 | 2778 | ||
2751 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) | 2779 | if ((ret = mptctl_syscall_down(iocp, nonblock)) != 0) |
2752 | return ret; | 2780 | return ret; |
2753 | 2781 | ||
2782 | dctlprintk(iocp, printk(MYIOC_s_DEBUG_FMT "compat_mpt_command() called\n", | ||
2783 | iocp->name)); | ||
2754 | /* Copy data to karg */ | 2784 | /* Copy data to karg */ |
2755 | karg.hdr.iocnum = karg32.hdr.iocnum; | 2785 | karg.hdr.iocnum = karg32.hdr.iocnum; |
2756 | karg.hdr.port = karg32.hdr.port; | 2786 | karg.hdr.port = karg32.hdr.port; |
@@ -2878,11 +2908,7 @@ static int __init mptctl_init(void) | |||
2878 | 2908 | ||
2879 | show_mptmod_ver(my_NAME, my_VERSION); | 2909 | show_mptmod_ver(my_NAME, my_VERSION); |
2880 | 2910 | ||
2881 | if(mpt_device_driver_register(&mptctl_driver, | 2911 | mpt_device_driver_register(&mptctl_driver, MPTCTL_DRIVER); |
2882 | MPTCTL_DRIVER) != 0 ) { | ||
2883 | dprintk((KERN_INFO MYNAM | ||
2884 | ": failed to register dd callbacks\n")); | ||
2885 | } | ||
2886 | 2912 | ||
2887 | /* Register this device */ | 2913 | /* Register this device */ |
2888 | err = misc_register(&mptctl_miscdev); | 2914 | err = misc_register(&mptctl_miscdev); |
@@ -2905,16 +2931,8 @@ static int __init mptctl_init(void) | |||
2905 | goto out_fail; | 2931 | goto out_fail; |
2906 | } | 2932 | } |
2907 | 2933 | ||
2908 | if (mpt_reset_register(mptctl_id, mptctl_ioc_reset) == 0) { | 2934 | mpt_reset_register(mptctl_id, mptctl_ioc_reset); |
2909 | dprintk((KERN_INFO MYNAM ": Registered for IOC reset notifications\n")); | 2935 | mpt_event_register(mptctl_id, mptctl_event_process); |
2910 | } else { | ||
2911 | /* FIXME! */ | ||
2912 | } | ||
2913 | |||
2914 | if (mpt_event_register(mptctl_id, mptctl_event_process) == 0) { | ||
2915 | devtverboseprintk((KERN_INFO MYNAM | ||
2916 | ": Registered for IOC event notifications\n")); | ||
2917 | } | ||
2918 | 2936 | ||
2919 | return 0; | 2937 | return 0; |
2920 | 2938 | ||
@@ -2934,11 +2952,9 @@ static void mptctl_exit(void) | |||
2934 | 2952 | ||
2935 | /* De-register reset handler from base module */ | 2953 | /* De-register reset handler from base module */ |
2936 | mpt_reset_deregister(mptctl_id); | 2954 | mpt_reset_deregister(mptctl_id); |
2937 | dprintk((KERN_INFO MYNAM ": Deregistered for IOC reset notifications\n")); | ||
2938 | 2955 | ||
2939 | /* De-register callback handler from base module */ | 2956 | /* De-register callback handler from base module */ |
2940 | mpt_deregister(mptctl_id); | 2957 | mpt_deregister(mptctl_id); |
2941 | printk(KERN_INFO MYNAM ": Deregistered from Fusion MPT base driver\n"); | ||
2942 | 2958 | ||
2943 | mpt_device_driver_deregister(MPTCTL_DRIVER); | 2959 | mpt_device_driver_deregister(MPTCTL_DRIVER); |
2944 | 2960 | ||