diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-29 20:22:03 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-29 20:22:03 -0400 |
| commit | a6ce22a5f61ba838b43763bf1e5be399f9dee4d0 (patch) | |
| tree | 2abed83e85724bd45c5b0b842b9ce36d1c4ca160 /drivers/message/fusion/mptctl.c | |
| parent | 4e950f6f0189f65f8bf069cf2272649ef418f5e4 (diff) | |
| parent | 09120a8cd38dbdb0c9a59ff8456cf88b510e6baa (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (28 commits)
[SCSI] mpt fusion: Changes in mptctl.c for logging support
[SCSI] mpt fusion: Changes in mptfc.c mptlan.c mptsas.c and mptspi.c for logging support
[SCSI] mpt fusion: Changes in mptscsih.c for logging support
[SCSI] mpt fusion: Changes in mptbase.c for logging support
[SCSI] mpt fusion: logging support in Kconfig, Makefile, mptbase.h and addition of mptdebug.h
[SCSI] libsas: Fix potential NULL dereference in sas_smp_get_phy_events()
[SCSI] bsg: Fix build for CONFIG_BLOCK=n
[SCSI] aacraid: fix Sunrise Lake reset handling
[SCSI] aacraid: add SCSI SYNCHONIZE_CACHE range checking
[SCSI] add easyRAID to the no report luns blacklist
[SCSI] advansys: lindent and other large, uninteresting changes
[SCSI] aic79xx, aic7xxx: Fix incorrect width setting
[SCSI] qla2xxx: fix to honor ignored parameters in sysfs attributes
[SCSI] aacraid: draw line in sand, sundry cleanup and version update
[SCSI] iscsi_tcp: Turn off bounce buffers
[SCSI] libiscsi: fix cmd seqeunce number checking
[SCSI] iscsi_tcp, ib_iser Enable module refcounting for iscsi host template
[SCSI] libiscsi: make sure session is not blocked when removing host
[SCSI] libsas: Remove PCI dependencies
[SCSI] simscsi: convert to use the data buffer accessors
...
Diffstat (limited to 'drivers/message/fusion/mptctl.c')
| -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 | ||
