isp.c (291499) | isp.c (291500) |
---|---|
1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 33 unchanged lines hidden (view full) --- 42 */ 43#ifdef __NetBSD__ 44#include <sys/cdefs.h> 45__KERNEL_RCSID(0, "$NetBSD$"); 46#include <dev/ic/isp_netbsd.h> 47#endif 48#ifdef __FreeBSD__ 49#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * --- 33 unchanged lines hidden (view full) --- 42 */ 43#ifdef __NetBSD__ 44#include <sys/cdefs.h> 45__KERNEL_RCSID(0, "$NetBSD$"); 46#include <dev/ic/isp_netbsd.h> 47#endif 48#ifdef __FreeBSD__ 49#include <sys/cdefs.h> |
50__FBSDID("$FreeBSD: stable/10/sys/dev/isp/isp.c 291499 2015-11-30 21:29:38Z mav $"); | 50__FBSDID("$FreeBSD: stable/10/sys/dev/isp/isp.c 291500 2015-11-30 21:30:18Z mav $"); |
51#include <dev/isp/isp_freebsd.h> 52#endif 53#ifdef __OpenBSD__ 54#include <dev/ic/isp_openbsd.h> 55#endif 56#ifdef __linux__ 57#include "isp_linux.h" 58#endif --- 2498 unchanged lines hidden (view full) --- 2557{ 2558 fcparam *fcp = FCPARAM(isp, chan); 2559 mbreg_t mbs; 2560 union { 2561 isp_pdb_21xx_t fred; 2562 isp_pdb_24xx_t bill; 2563 } un; 2564 | 51#include <dev/isp/isp_freebsd.h> 52#endif 53#ifdef __OpenBSD__ 54#include <dev/ic/isp_openbsd.h> 55#endif 56#ifdef __linux__ 57#include "isp_linux.h" 58#endif --- 2498 unchanged lines hidden (view full) --- 2557{ 2558 fcparam *fcp = FCPARAM(isp, chan); 2559 mbreg_t mbs; 2560 union { 2561 isp_pdb_21xx_t fred; 2562 isp_pdb_24xx_t bill; 2563 } un; 2564 |
2565 MBSINIT(&mbs, MBOX_GET_PORT_DB, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR, 250000); | 2565 MBSINIT(&mbs, MBOX_GET_PORT_DB, 2566 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 250000); |
2566 if (IS_24XX(isp)) { 2567 mbs.ibits = (1 << 9)|(1 << 10); 2568 mbs.param[1] = id; 2569 mbs.param[9] = chan; 2570 } else if (ISP_CAP_2KLOGIN(isp)) { 2571 mbs.param[1] = id; 2572 } else { 2573 mbs.param[1] = id << 8; --- 53 unchanged lines hidden (view full) --- 2627 mbreg_t mbs; 2628 isp_pnhle_21xx_t el1, *elp1; 2629 isp_pnhle_23xx_t el3, *elp3; 2630 isp_pnhle_24xx_t el4, *elp4; 2631 int i, j; 2632 uint32_t p; 2633 uint16_t h; 2634 | 2567 if (IS_24XX(isp)) { 2568 mbs.ibits = (1 << 9)|(1 << 10); 2569 mbs.param[1] = id; 2570 mbs.param[9] = chan; 2571 } else if (ISP_CAP_2KLOGIN(isp)) { 2572 mbs.param[1] = id; 2573 } else { 2574 mbs.param[1] = id << 8; --- 53 unchanged lines hidden (view full) --- 2628 mbreg_t mbs; 2629 isp_pnhle_21xx_t el1, *elp1; 2630 isp_pnhle_23xx_t el3, *elp3; 2631 isp_pnhle_24xx_t el4, *elp4; 2632 int i, j; 2633 uint32_t p; 2634 uint16_t h; 2635 |
2635 MBSINIT(&mbs, MBOX_GET_ID_LIST, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR, 250000); | 2636 MBSINIT(&mbs, MBOX_GET_ID_LIST, MBLOGALL, 250000); |
2636 if (IS_24XX(isp)) { 2637 mbs.param[2] = DMA_WD1(fcp->isp_scdma); 2638 mbs.param[3] = DMA_WD0(fcp->isp_scdma); 2639 mbs.param[6] = DMA_WD3(fcp->isp_scdma); 2640 mbs.param[7] = DMA_WD2(fcp->isp_scdma); 2641 mbs.param[8] = ISP_FC_SCRLEN; 2642 mbs.param[9] = chan; 2643 } else { --- 77 unchanged lines hidden (view full) --- 2721 uint64_t wwn = INI_NONE; 2722 fcparam *fcp = FCPARAM(isp, chan); 2723 mbreg_t mbs; 2724 2725 if (fcp->isp_fwstate < FW_READY || 2726 fcp->isp_loopstate < LOOP_PDB_RCVD) { 2727 return (wwn); 2728 } | 2637 if (IS_24XX(isp)) { 2638 mbs.param[2] = DMA_WD1(fcp->isp_scdma); 2639 mbs.param[3] = DMA_WD0(fcp->isp_scdma); 2640 mbs.param[6] = DMA_WD3(fcp->isp_scdma); 2641 mbs.param[7] = DMA_WD2(fcp->isp_scdma); 2642 mbs.param[8] = ISP_FC_SCRLEN; 2643 mbs.param[9] = chan; 2644 } else { --- 77 unchanged lines hidden (view full) --- 2722 uint64_t wwn = INI_NONE; 2723 fcparam *fcp = FCPARAM(isp, chan); 2724 mbreg_t mbs; 2725 2726 if (fcp->isp_fwstate < FW_READY || 2727 fcp->isp_loopstate < LOOP_PDB_RCVD) { 2728 return (wwn); 2729 } |
2729 MBSINIT(&mbs, MBOX_GET_PORT_NAME, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR, 500000); | 2730 MBSINIT(&mbs, MBOX_GET_PORT_NAME, 2731 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 500000); |
2730 if (ISP_CAP_2KLOGIN(isp)) { 2731 mbs.param[1] = loopid; 2732 if (nodename) { 2733 mbs.param[10] = 1; 2734 } 2735 mbs.param[9] = chan; 2736 } else { 2737 mbs.ibitm = 3; --- 2177 unchanged lines hidden (view full) --- 4915 } 4916 mbs.param[6] = XS_LUN(xs); 4917 } else { 4918 mbs.param[1] = tgt << 8 | XS_LUN(xs); 4919 } 4920 } else { 4921 mbs.param[1] = (chan << 15) | (tgt << 8) | XS_LUN(xs); 4922 } | 2732 if (ISP_CAP_2KLOGIN(isp)) { 2733 mbs.param[1] = loopid; 2734 if (nodename) { 2735 mbs.param[10] = 1; 2736 } 2737 mbs.param[9] = chan; 2738 } else { 2739 mbs.ibitm = 3; --- 2177 unchanged lines hidden (view full) --- 4917 } 4918 mbs.param[6] = XS_LUN(xs); 4919 } else { 4920 mbs.param[1] = tgt << 8 | XS_LUN(xs); 4921 } 4922 } else { 4923 mbs.param[1] = (chan << 15) | (tgt << 8) | XS_LUN(xs); 4924 } |
4923 MBSINIT(&mbs, MBOX_ABORT, MBLOGALL & ~MBOX_COMMAND_ERROR, 0); | 4925 MBSINIT(&mbs, MBOX_ABORT, 4926 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_ERROR), 0); |
4924 mbs.param[2] = handle; 4925 isp_mboxcmd(isp, &mbs); 4926 if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { 4927 break; 4928 } 4929 return (0); 4930 4931 case ISPCTL_UPDATE_PARAMS: --- 2494 unchanged lines hidden (view full) --- 7426 if (nodelay) { 7427 ISP_DELAY(1000); 7428 } 7429} 7430 7431static void 7432isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp) 7433{ | 4927 mbs.param[2] = handle; 4928 isp_mboxcmd(isp, &mbs); 4929 if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { 4930 break; 4931 } 4932 return (0); 4933 4934 case ISPCTL_UPDATE_PARAMS: --- 2494 unchanged lines hidden (view full) --- 7429 if (nodelay) { 7430 ISP_DELAY(1000); 7431 } 7432} 7433 7434static void 7435isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp) 7436{ |
7434 const char *cname, *xname; | 7437 const char *cname, *xname, *sname; |
7435 char tname[16], mname[16]; 7436 unsigned int ibits, obits, box, opcode; 7437 7438 opcode = mbp->param[0]; 7439 if (IS_FC(isp)) { 7440 if (opcode > MAX_FC_OPCODE) { 7441 mbp->param[0] = MBOX_INVALID_COMMAND; 7442 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); --- 93 unchanged lines hidden (view full) --- 7536 mbp->param[box] = isp->isp_mboxtmp[box]; 7537 isp_prt(isp, ISP_LOGDEBUG3, "OUT mbox %d = 0x%04x", box, 7538 mbp->param[box]); 7539 } 7540 } 7541 7542 isp->isp_mboxbsy = 0; 7543 MBOX_RELEASE(isp); | 7438 char tname[16], mname[16]; 7439 unsigned int ibits, obits, box, opcode; 7440 7441 opcode = mbp->param[0]; 7442 if (IS_FC(isp)) { 7443 if (opcode > MAX_FC_OPCODE) { 7444 mbp->param[0] = MBOX_INVALID_COMMAND; 7445 isp_prt(isp, ISP_LOGERR, "Unknown Command 0x%x", opcode); --- 93 unchanged lines hidden (view full) --- 7539 mbp->param[box] = isp->isp_mboxtmp[box]; 7540 isp_prt(isp, ISP_LOGDEBUG3, "OUT mbox %d = 0x%04x", box, 7541 mbp->param[box]); 7542 } 7543 } 7544 7545 isp->isp_mboxbsy = 0; 7546 MBOX_RELEASE(isp); |
7544 out: 7545 if (mbp->logval == 0 || opcode == MBOX_EXEC_FIRMWARE) { | 7547out: 7548 if (mbp->logval == 0 || mbp->param[0] == MBOX_COMMAND_COMPLETE) |
7546 return; | 7549 return; |
7547 } | |
7548 | 7550 |
7549 /* 7550 * Just to be chatty here... 7551 */ | 7551 if ((mbp->param[0] & 0xbfe0) == 0 && 7552 (mbp->logval & MBLOGMASK(mbp->param[0])) == 0) 7553 return; 7554 |
7552 xname = NULL; | 7555 xname = NULL; |
7556 sname = ""; |
|
7553 switch (mbp->param[0]) { | 7557 switch (mbp->param[0]) { |
7554 case MBOX_COMMAND_COMPLETE: 7555 break; | |
7556 case MBOX_INVALID_COMMAND: | 7558 case MBOX_INVALID_COMMAND: |
7557 if (mbp->logval & MBLOGMASK(MBOX_COMMAND_COMPLETE)) { 7558 xname = "INVALID COMMAND"; 7559 } | 7559 xname = "INVALID COMMAND"; |
7560 break; 7561 case MBOX_HOST_INTERFACE_ERROR: | 7560 break; 7561 case MBOX_HOST_INTERFACE_ERROR: |
7562 if (mbp->logval & MBLOGMASK(MBOX_HOST_INTERFACE_ERROR)) { 7563 xname = "HOST INTERFACE ERROR"; 7564 } | 7562 xname = "HOST INTERFACE ERROR"; |
7565 break; 7566 case MBOX_TEST_FAILED: | 7563 break; 7564 case MBOX_TEST_FAILED: |
7567 if (mbp->logval & MBLOGMASK(MBOX_TEST_FAILED)) { 7568 xname = "TEST FAILED"; 7569 } | 7565 xname = "TEST FAILED"; |
7570 break; 7571 case MBOX_COMMAND_ERROR: | 7566 break; 7567 case MBOX_COMMAND_ERROR: |
7572 if (mbp->logval & MBLOGMASK(MBOX_COMMAND_ERROR)) { 7573 xname = "COMMAND ERROR"; 7574 } | 7568 xname = "COMMAND ERROR"; 7569 ISP_SNPRINTF(mname, sizeof(mname), " subcode 0x%x", 7570 mbp->param[1]); 7571 sname = mname; |
7575 break; 7576 case MBOX_COMMAND_PARAM_ERROR: | 7572 break; 7573 case MBOX_COMMAND_PARAM_ERROR: |
7577 if (mbp->logval & MBLOGMASK(MBOX_COMMAND_PARAM_ERROR)) { 7578 xname = "COMMAND PARAMETER ERROR"; 7579 } | 7574 xname = "COMMAND PARAMETER ERROR"; |
7580 break; | 7575 break; |
7581 case MBOX_LOOP_ID_USED: 7582 if (mbp->logval & MBLOGMASK(MBOX_LOOP_ID_USED)) { 7583 xname = "LOOP ID ALREADY IN USE"; 7584 } 7585 break; | |
7586 case MBOX_PORT_ID_USED: | 7576 case MBOX_PORT_ID_USED: |
7587 if (mbp->logval & MBLOGMASK(MBOX_PORT_ID_USED)) { 7588 xname = "PORT ID ALREADY IN USE"; 7589 } | 7577 xname = "PORT ID ALREADY IN USE"; |
7590 break; | 7578 break; |
7579 case MBOX_LOOP_ID_USED: 7580 xname = "LOOP ID ALREADY IN USE"; 7581 break; |
|
7591 case MBOX_ALL_IDS_USED: | 7582 case MBOX_ALL_IDS_USED: |
7592 if (mbp->logval & MBLOGMASK(MBOX_ALL_IDS_USED)) { 7593 xname = "ALL LOOP IDS IN USE"; 7594 } | 7583 xname = "ALL LOOP IDS IN USE"; |
7595 break; | 7584 break; |
7585 case MBOX_NOT_LOGGED_IN: 7586 xname = "NOT LOGGED IN"; 7587 break; 7588 case MBOX_LINK_DOWN_ERROR: 7589 xname = "LINK DOWN ERROR"; 7590 break; 7591 case MBOX_LOOPBACK_ERROR: 7592 xname = "LOOPBACK ERROR"; 7593 break; 7594 case MBOX_CHECKSUM_ERROR: 7595 xname = "CHECKSUM ERROR"; 7596 break; 7597 case MBOX_INVALID_PRODUCT_KEY: 7598 xname = "INVALID PRODUCT KEY"; 7599 break; |
|
7596 case MBOX_REGS_BUSY: 7597 xname = "REGISTERS BUSY"; 7598 break; 7599 case MBOX_TIMEOUT: 7600 xname = "TIMEOUT"; 7601 break; 7602 default: 7603 ISP_SNPRINTF(mname, sizeof mname, "error 0x%x", mbp->param[0]); 7604 xname = mname; 7605 break; 7606 } 7607 if (xname) { | 7600 case MBOX_REGS_BUSY: 7601 xname = "REGISTERS BUSY"; 7602 break; 7603 case MBOX_TIMEOUT: 7604 xname = "TIMEOUT"; 7605 break; 7606 default: 7607 ISP_SNPRINTF(mname, sizeof mname, "error 0x%x", mbp->param[0]); 7608 xname = mname; 7609 break; 7610 } 7611 if (xname) { |
7608 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s)", 7609 cname, xname); | 7612 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s%s)", 7613 cname, xname, sname); |
7610 } 7611} 7612 7613static void 7614isp_fw_state(ispsoftc_t *isp, int chan) 7615{ 7616 if (IS_FC(isp)) { 7617 mbreg_t mbs; --- 989 unchanged lines hidden --- | 7614 } 7615} 7616 7617static void 7618isp_fw_state(ispsoftc_t *isp, int chan) 7619{ 7620 if (IS_FC(isp)) { 7621 mbreg_t mbs; --- 989 unchanged lines hidden --- |