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 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 |
2565 MBSINIT(&mbs, MBOX_GET_PORT_DB, 2566 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 250000); |
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 |
2636 MBSINIT(&mbs, MBOX_GET_ID_LIST, MBLOGALL, 250000); |
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 } |
2730 MBSINIT(&mbs, MBOX_GET_PORT_NAME, 2731 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 500000); |
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 } |
4925 MBSINIT(&mbs, MBOX_ABORT, 4926 MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_ERROR), 0); |
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{ |
7437 const char *cname, *xname, *sname; |
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); |
7547out: 7548 if (mbp->logval == 0 || mbp->param[0] == MBOX_COMMAND_COMPLETE) |
7549 return; |
7550 |
7551 if ((mbp->param[0] & 0xbfe0) == 0 && 7552 (mbp->logval & MBLOGMASK(mbp->param[0])) == 0) 7553 return; 7554 |
7555 xname = NULL; |
7556 sname = ""; |
7557 switch (mbp->param[0]) { |
7558 case MBOX_INVALID_COMMAND: |
7559 xname = "INVALID COMMAND"; |
7560 break; 7561 case MBOX_HOST_INTERFACE_ERROR: |
7562 xname = "HOST INTERFACE ERROR"; |
7563 break; 7564 case MBOX_TEST_FAILED: |
7565 xname = "TEST FAILED"; |
7566 break; 7567 case MBOX_COMMAND_ERROR: |
7568 xname = "COMMAND ERROR"; 7569 ISP_SNPRINTF(mname, sizeof(mname), " subcode 0x%x", 7570 mbp->param[1]); 7571 sname = mname; |
7572 break; 7573 case MBOX_COMMAND_PARAM_ERROR: |
7574 xname = "COMMAND PARAMETER ERROR"; |
7575 break; |
7576 case MBOX_PORT_ID_USED: |
7577 xname = "PORT ID ALREADY IN USE"; |
7578 break; |
7579 case MBOX_LOOP_ID_USED: 7580 xname = "LOOP ID ALREADY IN USE"; 7581 break; |
7582 case MBOX_ALL_IDS_USED: |
7583 xname = "ALL LOOP IDS IN USE"; |
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; |
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) { |
7612 isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s%s)", 7613 cname, xname, sname); |
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 --- |