ql_xioctl.c revision c1374a13e412c4ec42cba867e57347a0e049a822
1N/A * The contents of this file are subject to the terms of the 1N/A * Common Development and Distribution License (the "License"). 1N/A * You may not use this file except in compliance with the License. 1N/A * See the License for the specific language governing permissions 1N/A * and limitations under the License. 1N/A * When distributing Covered Code, include this CDDL HEADER in each 1N/A * If applicable, add the following below this CDDL HEADER, with the 1N/A * fields enclosed by brackets "[]" replaced with your own identifying 1N/A * information: Portions Copyright [yyyy] [name of copyright owner] 1N/A/* Copyright 2009 QLogic Corporation */ 1N/A * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 1N/A * Use is subject to license terms. 1N/A * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver source file. 1N/A * *********************************************************************** 1N/A * * COPYRIGHT (C) 1996-2009 QLOGIC CORPORATION ** 1N/A * * ALL RIGHTS RESERVED ** 1N/A * *********************************************************************** /* ******************************************************************** */ /* External IOCTL support. */ /* ******************************************************************** */ * ql_alloc_xioctl_resource * Allocates resources needed by module code. * ha: adapter state pointer. EL(
ha,
"failed, kmem_zalloc\n");
/* Allocate AEN tracking buffer */ EL(
ha,
"failed, kmem_zalloc-2\n");
* ql_free_xioctl_resource * Frees resources used by module code. * ha: adapter state pointer. * External IOCTL processing. * ha: adapter state pointer. * cmd: function to perform * arg: data type varies with request * cred_p: credentials pointer * rval_p: pointer to result value * ENXIO: No such device or address * ENOPROTOOPT: Protocol not available /* function not supported. */ EL(
ha,
"function=%d not supported\n",
cmd);
* Provides ioctl functions for SAN/Device Management functions * AKA External Ioctl functions. * ha: adapter state pointer. * ioctl_code: ioctl function to perform * arg: Pointer to EXT_IOCTL cmd data in application land. * ENOMEM: Alloc of local EXT_IOCTL struct failed. * EFAULT: Copyin of caller's EXT_IOCTL struct failed or * copyout of EXT_IOCTL status info failed. * EINVAL: Signature or version of caller's EXT_IOCTL invalid. /* Copy argument structure (EXT_IOCTL) from application land. */ * a non-zero value at this time means a problem getting * the requested information from application land, just * return the error code and hope for the best. EL(
ha,
"failed, sdm_setup\n");
* Map the physical ha ptr (which the ioctl is called with) * to the virtual ha that the caller is addressing. * Special case: HbaSelect == 0 is physical ha * If we can't find the specified vp index then * we probably have an error (vp indexes shifting EL(
ha,
"Invalid HbaSelect vp index: %xh\n",
* If driver is suspended, stalled, or powered down rtn BUSY /* Return results to caller */ EL(
ha,
"failed, sdm_return\n");
/* function not supported. */ /* Return results to caller */ EL(
ha,
"failed, sdm_return\n");
* Make a local copy of the EXT_IOCTL struct and validate it. * ha: adapter state pointer. * cmd_struct: Pointer to location to store local adrs of EXT_IOCTL. * arg: Address of application EXT_IOCTL cmd data * val_sig: Pointer to a function to validate the ioctl signature. * EFAULT: Copy in error of application EXT_IOCTL struct. * EINVAL: Invalid version, signature. * ENOMEM: Local allocation of EXT_IOCTL failed. /* Allocate local memory for EXT_IOCTL. */ EL(
ha,
"failed, kmem_zalloc\n");
/* Get argument structure. */ EL(
ha,
"failed, ddi_copyin\n");
* Check signature and the version. * If either are not valid then neither is the * structure so don't attempt to return any error status * because we can't trust what caller's arg points to. EL(
ha,
"failed, signature\n");
EL(
ha,
"failed, version\n");
* Validate the signature string for an external ioctl call. * sg: Pointer to EXT_IOCTL signature to validate. * B_TRUE: Signature is valid. * B_FALSE: Signature is NOT valid. * If signature is not valid then neither is the rest of * the structure (e.g., can't trust it), so don't attempt * to return any error status other than the errno. * Copies return data/status to application land for * ioctl call using the SAN/Device Management EXT_IOCTL call interface. * ha: adapter state pointer. * cmd: Pointer to kernel copy of requestor's EXT_IOCTL struct. * ioctl_code: ioctl function to perform * arg: EXT_IOCTL cmd data in application land. * EFAULT: Copy out error. /* Some copyout operation failed */ EL(
ha,
"failed, ddi_copyout\n");
* Performs all EXT_CC_QUERY functions. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* case off on command subcode */ /* function not supported. */ EL(
ha,
"failed, Unsupported Subcode=%xh\n",
* Performs EXT_SC_QUERY_HBA_NODE subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_HBA_NODE, " EL(
ha,
"failed, No room for fpga version string\n");
EL(
ha,
"Unable to insert fpga version str\n");
((w &
0xf0) >>
4), (w &
0x0f));
/*LINTED [Solaris DDI_DEV_T_ANY Lint error]*/ EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_HBA_PORT subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_HBA_NODE, Len=%xh\n",
/* For now we are initiator only driver */ * fill in the portspeed values. * default to not yet negotiated state EL(
ha,
"failed, data_rate=%xh\n",
rval);
EL(
ha,
"failed, data rate=%xh\n",
/* Report all supported port speeds */ * Correct supported speeds based on type of EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_DISC_PORT subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * cmd->Instance = Port instance in fcport chain. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_DISC_PORT, Len=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_DISC_TGT subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * cmd->Instance = Port instance in fcport chain. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_DISC_TARGET, Len=%xh\n",
/* Scan port list for requested target and fill in the values */ EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_FW subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_FW, Len=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_CHIP subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_CHIP, Len=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_DRIVER subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen < EXT_DRIVER, Len=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* IOCTL management server FC-CT passthrough. * ha: adapter state pointer. * cmd: User space CT arguments pointer. * None, request status indicated in cmd->Status. /* Get CT argument structure. */ EL(
ha,
"failed, No switch\n");
EL(
ha,
"failed, LOOP_NOT_READY\n");
/* Login management server device. */ EL(
ha,
"failed, server login\n");
/* Allocate a DMA Memory Descriptor */ EL(
ha,
"failed, kmem_zalloc\n");
/* Determine maximum buffer size. */ /* Allocate command block. */ EL(
ha,
"failed, kmem_zalloc\n");
/* Get command payload data. */ EL(
ha,
"failed, get_buffer_data\n");
/* Get DMA memory for the IOCB */ /* Copy out going payload data to IOCB DMA buffer. */ /* Sync IOCB DMA buffer. */ /* Set ISP command timeout. */ /* Load ct cmd byte count. */ /* Load ct rsp byte count. */ /* Load MS command entry data segments. */ /* Load MS response entry data segments. */ EL(
ha,
"failed, I/O timeout or " "es=%xh, ss_l=%xh, rval=%xh\n",
/* Set ISP command timeout. */ /* Set data segment counts. */ /* Response total byte count. */ /* Command total byte count. */ EL(
ha,
"failed, I/O timeout or " /* Sync in coming DMA buffer. */ /* Copy in coming DMA data. */ /* Copy response payload from DMA buffer to application. */ /* Send response payload. */ EL(
ha,
"failed, send_buffer_data\n");
* IOCTL management server Asynchronous Event Tracking Enable/Disable. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ddi_copyin\n");
* IOCTL management server Asynchronous Event Record Transfer. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* Compute the number of events that can be returned */ EL(
ha,
"failed, request_cnt < EXT_DEF_MAX_AEN_QUEUE, " /* 1st: Make a local copy of the entire queue content. */ /* 2nd: Now transfer the queue content to user buffer */ /* Copy the entire queue to user's buffer. */ EL(
ha,
"failed, ddi_copyout\n");
* ha: adapter state pointer. * event_code: async event code of the event to add to queue. * payload: event payload for the queue. * INTR_LOCK must be already obtained. * Interrupt or Kernel context, no mailbox commands allowed. /* Need to change queue pointers to make room. */ /* Increment tail for adding new entry. */ * We're overwriting the oldest entry, so need to * update the head pointer. EL(
ha,
"failed, event code not supported=%xh\n",
* IOCTL SCSI passthrough. * ha: adapter state pointer. * cmd: User space SCSI command pointer. * None, request status indicated in cmd->Status. }
pt_req;
/* Passthru request */ /* SCSI request struct for SCSI passthrough IOs. */ /* Verify Sub Code and set cnt to needed request size. */ EL(
ha,
"failed, kmem_zalloc\n");
/* Verify the size of and copy in the passthru request structure. */ EL(
ha,
"failed, RequestLen != cnt, is=%xh, expected=%xh\n",
EL(
ha,
"failed, ddi_copyin\n");
* Find fc_port from SCSI PASSTHRU structure fill in the scsi_req * request data structure. * Must be FC PASSTHRU, verified above. "wwpn=%02x%02x%02x%02x%02x%02x%02x%02x\n",
"wwnn=%02x%02x%02x%02x%02x%02x%02x%02x\n",
EL(
ha,
"failed, SubCode=%xh invalid DestType=%xh\n",
EL(
ha,
"failed, fc_port not found\n");
/* Allocate command block. */ EL(
ha,
"failed, kmem_zalloc\n");
/* Get DMA memory for the IOCB */ /* Get command payload. */ EL(
ha,
"failed, get_buffer_data\n");
/* Copy out going data to DMA buffer. */ EL(
ha,
"failed, kmem_zalloc-2\n");
/* retries = ha->port_down_retry_count; */ /* Set ISP command timeout. */ /* Set tag queue control flags */ /* Set transfer direction. */ /* Set data segment count. */ /* Load total byte count. */ /* Load data descriptor. */ /* Go issue command and wait for completion. */ /* Sync in coming DMA buffer. */ /* Copy in coming DMA data. */ EL(
ha,
"failed, entry_status=%xh, d_id=%xh\n",
* We have verified about all the request that can be so far. * Now we need to start verification of our ability to * actually issue the CDB. EL(
ha,
"failed, login_fport=%xh, " EL(
ha,
"failed, login_lport=%xh, " /* Cannot issue command now, maybe later */ EL(
ha,
"failed, suspended\n");
/* Setup FCP response info. */ /* Setup FCP response info. */ * If non data transfer commands fix tranfer counts. * Non data transfer command, clear sts_entry residual /* Correct ISP completion status */ EL(
ha,
"failed, Transfer ERROR\n");
"scsi_status_h=%xh, scsi_status_l=%xh\n",
ha->
instance,
* Handle residual count on SCSI check * - If Residual Under / Over is set, use the * Residual Transfer Length field in IOCB. * - If Residual Under / Over is not set, and * Transferred Data bit is set in State Flags * field of IOCB, report residual value of 0 * (you may want to do this for tape * Write-type commands only). This takes care * of logical end of tape problem and does * not break Unit Attention. * - If Residual Under / Over is not set, and * Transferred Data bit is not set in State * Flags, report residual value equal to * original data transfer length. * Check condition with vaild sense data flag set and sense EL(
ha,
"failed, Check Condition Status, d_id=%xh\n",
EL(
ha,
"failed, request sense ddi_copyout\n");
/* Copy response payload from DMA buffer to application. */ /* Send response payload. */ EL(
ha,
"failed, send_buffer_data\n");
EL(
ha,
"failed, cmd->Status=%xh, comp_status=%xh, " * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. EL(
ha,
"incorrect RequestLen\n");
EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"failed, device not found\n");
/* Copy out the IDs found. For now we can only return target ID. */ EL(
ha,
"failed, ddi_copyout\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ddi_copyout\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen: %xh, needed: %xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ResponseLen != NVRAM, Len=%xh\n",
EL(
ha,
"failed, copy error\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, RequestLen != NVRAM, Len=%xh\n",
EL(
ha,
"failed, copy error\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, invalid request for HBA\n");
EL(
ha,
"failed, RequestLen != VPD len, len passed=%xh\n",
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, invalid request for HBA\n");
EL(
ha,
"failed, ResponseLen < VPD len, len passed=%xh\n",
* Dumps flash cache contents. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, adapter fcache not setup\n");
EL(
ha,
"failed, ResponseLen < %d, len passed=%xh\n",
* For backwards compatibility, get one of each image type EL(
ha,
"ddicopy failed, done\n");
* Get the firmware image -- it needs to be last in the * buffer at offset 300 for backwards compatibility. Also for * backwards compatibility, the pci header is stripped off. EL(
ha,
"header size (%xh) exceeds buflen (%xh)\n",
EL(
ha,
"fw ddicopy failed, done\n");
* Dumps flash cache contents. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, adapter fcache not setup\n");
/* Make sure user passed enough buffer space */ EL(
ha,
"failed, ResponseLen < %d, len passed=%xh\n",
EL(
ha,
"failed, ddicopy at %xh, done\n",
boff);
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"ql_stall_driver failed\n");
EL(
ha,
"failed, ResponseLen=%xh, flash size=%xh\n",
/* adjust read size to flash size */ EL(
ha,
"adjusting req=%xh, max=%xh\n",
EL(
ha,
"isp_abort_needed for restart\n");
* ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"ql_stall_driver failed\n");
EL(
ha,
"failed, RequestLen=%xh, size=%xh\n",
EL(
ha,
"failed, RequestLen=%xh, flash size=%xh\n",
EL(
ha,
"isp_abort_needed for restart\n");
* Performs EXT_CC_LOOPBACK Command * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* Get loop back request. */ EL(
ha,
"failed, ddi_copyin\n");
/* Check transfer length fits in buffer. */ EL(
ha,
"failed, BufferLength=%d, xfercnt=%d, " /* Allocate command memory. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, ddi_copyin-2\n");
EL(
ha,
"failed, LOOP_NOT_READY\n");
/* determine topology so we can send the loopback or the echo */ /* Echo is supported on 2300's only and above */ /* Restart IP if it was shutdown. */ EL(
ha,
"failed, diagnostic_loopback_mbx=%xh\n",
rval);
/* Return loopback data. */ EL(
ha,
"failed, ddi_copyout\n");
/* Return loopback results. */ EL(
ha,
"failed, ddi_copyout-2\n");
* IOCTL for extended link service RNID command. * ha: adapter state pointer. * cmd: User space CT arguments pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, LOOP_NOT_READY\n");
EL(
ha,
"failed, RequestLen < EXT_RNID_REQ, Len=%xh\n",
EL(
ha,
"failed, ddi_copyin\n");
/* Find loop ID of the device */ * Copy caller's d_id to tmp space. /* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_rnid_params_mbx=%xh\n",
rval);
/* Save gotten RNID data. */ /* Now build the Send RNID response */ EL(
ha,
"failed, device not found\n");
EL(
ha,
"failed, send_rnid_mbx=%xh, id=%xh\n",
EL(
ha,
"failed, loop not ready\n");
EL(
ha,
"failed, send_rnid_mbx=%xh, id=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
EL(
ha,
"failed, EXT_STATUS_DATA_OVERRUN\n");
EL(
ha,
"failed, EXT_STATUS_DATA_UNDERRUN\n");
* Process IOCTL subcommand to set host/adapter related data. * ha: adapter state pointer. * cmd: User space CT arguments pointer. * None, request status indicated in cmd->Status. * case off on command subcode /* function not supported. */ * Performs EXT_CC_GET_DATA subcommands. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* case off on command subcode */ /* function not supported. */ EL(
ha,
"failed, ResponseLen=%xh, size=%xh\n",
/* ******************************************************************** */ /* ******************************************************************** */ * Get numbers of LUNS on target. * ha: adapter state pointer. * q: device queue pointer. /* Bypass LUNs that failed. */ * Get numbers of LUNS using report LUN command. * ha: adapter state pointer. * q: target queue pointer. EL(
ha,
"failed, LOOP_NOT_READY\n");
EL(
ha,
"failed, kmem_zalloc\n");
/* Get DMA memory for the IOCB */ /* Set ISP command timeout. */ /* Set tag queue control flags */ /* Set transfer direction. */ /* Set data segment count. */ /* Load total byte count. */ /* Load data descriptor. */ /* Sync in coming DMA buffer. */ /* Copy in coming DMA data. */ EL(
ha,
"failed, entry_status=%xh, d_id=%xh\n",
/* Device underrun, treat as OK. */ EL(
ha,
"failed, issue_iocb=%xh, d_id=%xh, cs=%xh, " EL(
ha,
"STATUS_CHECK Sense Data\n%2xh%3xh" "%3xh%3xh%3xh%3xh%3xh%3xh%3xh%3xh%3xh" "%3xh%3xh%3xh%3xh%3xh%3xh%3xh\n",
reqs[0],
* Get numbers of LUNS using inquiry command. * ha: adapter state pointer. * tq: target queue pointer. * count: scan for the number of existing LUNs. EL(
ha,
"failed, kmem_zalloc\n");
"unsupported device id=%xh, lun=%d, " * ha: adapter state pointer. * tq: target queue pointer. * pkt: command and buffer pointer. * inq_len: amount of inquiry data. * ql local function return status code. EL(
ha,
"failed, loop down\n");
/* Get DMA memory for the IOCB */ /* Set ISP command timeout. */ /* Set tag queue control flags */ /* Set transfer direction. */ /* Set data segment count. */ /* Load total byte count. */ /* Load data descriptor. */ /* rval = ql_issue_mbx_iocb(ha, (caddr_t)pkt, pkt_size); */ /* Sync in coming IOCB DMA buffer. */ /* Copy in coming DMA data. */ EL(
ha,
"failed, entry_status=%xh, d_id=%xh\n",
EL(
ha,
"failed, issue_iocb=%xh, d_id=%xh, cs=%xh, " EL(
ha,
"STATUS_CHECK Sense Data\n%2xh%3xh" "%3xh%3xh%3xh%3xh%3xh%3xh%3xh%3xh%3xh" "%3xh%3xh%3xh%3xh%3xh%3xh%3xh\n",
reqs[0],
* Copies data from user space to kernal buffer. * src: User source buffer address. * dst: Kernal destination buffer address. * Returns number of bytes transferred. * Copies data from kernal buffer to user space. * src: Kernal source buffer address. * dst: User destination buffer address. * Returns number of bytes transferred. * ha: adapter state pointer. * name: device port name. * Returns target queue pointer. /* Scan port list for requested target */ EL(
ha,
"failed, invalid type=%d\n",
type);
* Get flash descriptor table. * ha: adapter state pointer. * ql local function return status code. EL(
ha,
"kmem_zalloc=null\n");
/* flash size in desc table is in 1024 bytes */ EL(
ha,
"invalid descriptor table\n");
* Gets the manufacturer and id number of the flash chip, and * sets up the size parameter. * ha: adapter state pointer. * int: ql local function return status code. * Temporarily set the ha->xioctl->fdesc.flash_size to * 25xx flash size to avoid failing of ql_dump_focde. EL(
ha,
"flash desc table ok, exit\n");
/* Default flash descriptor table. */ /* Try flash table later. */ EL(
ha,
"no default id\n");
* hack for non std 2312 and 6312 boards. hardware people need to * use either the 128k flash chip (original), or something larger. * For driver purposes, we'll treat it as a 128k flash chip. EL(
ha,
"chip exceeds max size: %xh, using 128k\n",
EL(
ha,
"man_id=%xh, flash_id=%xh, size=%xh\n",
EL(
ha,
"unsupported mfr / type: man_id=%xh, flash_id=%xh\n",
* Loads fcode data into flash from application. * ha: adapter state pointer. * bp: user buffer address. * size: user buffer size. EL(
ha,
"failed, bufsize: %xh, flash size: %xh\n",
bsize,
EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"failed, load_fcode\n");
/* Reset caches on all adapter instances. */ * Loads fcode in to flash. * ha: adapter state pointer. * addr: flash byte address. * ql local function return status code. * sbus has an additional check to make * sure they don't brick the HBA. EL(
ha,
"failed, incorrect fcode for sbus\n");
/* Erase flash prior to write. */ /* Write fcode data to flash. */ /* Allow other system activity. */ * Dumps FLASH to application. * ha: adapter state pointer. * bp: user buffer address. * bsize: user buffer size * faddr: flash byte address /* adjust max read size to flash size */ EL(
ha,
"adjusting req=%xh, max=%xh\n",
bsize,
EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, dump_fcode = %x\n",
rval);
EL(
ha,
"failed, ddi_copyout\n");
* Dumps fcode from flash. * ha: adapter state pointer. * size: data length in bytes. * startpos: starting position in flash (byte address). * ql local function return status code. /* make sure startpos+size doesn't exceed flash */ EL(
ha,
"exceeded flash range, sz=%xh, stp=%xh, flsz=%xh\n",
/* check start addr is 32 bit aligned for 24xx */ /* adjust 24xx start addr for 32 bit words */ /* Read fcode data from flash. */ /* Allow other system activity. */ if (
size %
0x1000 == 0) {
* ql_program_flash_address * ha: adapter state pointer. * addr: flash byte address. * data: data to be written to flash. * ql local function return status code. /* Write Program Command Sequence */ /* Wait for write to complete. */ * ha: adapter state pointer. * cmd: User space CT arguments pointer. EL(
ha,
"failed, LOOP_NOT_READY\n");
EL(
ha,
"failed, RequestLen < EXT_SET_RNID_REQ, Len=%xh\n",
EL(
ha,
"failed, ddi_copyin\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_rnid_params_mbx=%xh\n",
rval);
/* Now set the requested params. */ EL(
ha,
"failed, set_rnid_params_mbx=%xh\n",
rval);
* ha: adapter state pointer. * cmd: User space CT arguments pointer. EL(
ha,
"failed, LOOP_NOT_READY\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_rnid_params_mbx=%xh\n",
rval);
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_RST_STATISTICS subcommand. of EXT_CC_SET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, LOOP_NOT_READY\n");
EL(
ha,
"failed, reset_link_status_mbx=%xh\n",
rval);
* Performs EXT_SC_GET_STATISTICS subcommand. of EXT_CC_GET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. if (
retry == 0) {
/* effectively 100 seconds */ EL(
ha,
"failed, LOOP_NOT_READY\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
* I think these are supposed to be port statistics * the loop ID or port ID should be in cmd->Instance. EL(
ha,
"failed, get_link_status=%xh, id=%xh\n",
rval,
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_GET_FC_STATISTICS subcommand. of EXT_CC_GET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"failed, fc_port not found\n");
if (
retry == 0) {
/* effectively 100 seconds */ EL(
ha,
"failed, LOOP_NOT_READY\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_link_status=%xh, d_id=%xh\n",
rval,
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_GET_FC_STATISTICS subcommand. of EXT_CC_GET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SET_BEACON_STATE subcommand of EXT_CC_SET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"done - failed, RequestLen < EXT_BEACON_CONTROL," EL(
ha,
"done - failed, Invalid function for HBA model\n");
EL(
ha,
"done - failed, ddi_copyin\n");
/* not quite an error -- LED state is already off */ EL(
ha,
"LED off request -- LED is already off\n");
/* not quite an error -- LED state is already on */ EL(
ha,
"LED on request - LED is already on\n");
* Performs EXT_GET_BEACON_STATE subcommand of EXT_CC_GET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"done - failed, ResponseLen < EXT_BEACON_CONTROL," EL(
ha,
"done - failed, Invalid function for HBA model\n");
EL(
ha,
"done - failed, isp abort active\n");
/* inform the user of the current beacon state (off or on) */ EL(
ha,
"failed, ddi_copyout\n");
* Determine the next state of the LED and drive it * ha: adapter state pointer. /* determine the next led state */ /* turn the led on or off */ * drive the led's as determined by LEDflags * ha: adapter state pointer. /* setup to send new data */ /* read current data and clear out old led data */ /* set in the new led data. */ /* write out the new led data */ /* setup to send new data */ /* read current data and clear out old led data */ /* set in the new led data */ /* write out the new led data */ * Setup LED for driver control * ha: adapter state pointer. /* decouple the LED control from the fw */ EL(
ha,
"failed, get_firmware_option=%xh\n",
rval);
/* set the appropriate options */ /* send it back to the firmware */ EL(
ha,
"failed, set_firmware_option=%xh\n",
rval);
/* initally, turn the LED's off */ * Return LED control to the firmware * ha: adapter state pointer. /* disable the LED update mask */ /* give LED control back to the f/w */ EL(
ha,
"failed, get_firmware_option=%xh\n",
rval);
EL(
ha,
"failed, set_firmware_option=%xh\n",
rval);
* Performs EXT_SC_GET_PORT_SUMMARY subcommand. of EXT_CC_GET_DATA. * The EXT_IOCTL->RequestAdr points to a single * UINT32 which identifies the device type. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. * Get the type of device the requestor is looking for. * We ignore this for now. EL(
ha,
"failed, ddi_copyin\n");
* Count the number of entries to be returned. Count devices * that are offlline, but have been persistently bound. continue;
/* Skip this one */ * Compute the number of entries that can be returned * based upon the size of caller's response buffer. EL(
ha,
"failed, rlen > ResponseLen, rlen=%d, Len=%d\n",
continue;
/* Skip this one */ "wwnn=%02x%02x%02x%02x%02x%02x%02x%02x, " "wwpn=%02x%02x%02x%02x%02x%02x%02x%02x\n",
EL(
ha,
"failed, ddi_copyout\n");
EL(
ha,
"failed, ddi_copyout-2\n");
* Performs EXT_SC_GET_TARGET_ID subcommand. of EXT_CC_GET_DATA. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"failed, fc_port not found\n");
EL(
ha,
"failed, ddi_copyout\n");
* Populates selected flash sections into the cache * ha = adapter state pointer. * ql local function return status code. * Driver must be in stalled state prior to entering or * add code to this function prior to calling ql_setup_flash() /* If we already have populated it, rtn */ EL(
ha,
"buffer already populated\n");
EL(
ha,
"unable to setup flash; rval=%xh\n",
rval);
/* Allocate & populate this node */ EL(
ha,
"node alloc failed\n");
/* link in the new node */ /* Do the firmware node first for 24xx/25xx's */ EL(
ha,
"failed, 24xx dump_fcode" /* checkout the pci data / format */ EL(
ha,
"flash header incorrect\n");
/* release all resources we have */ EL(
ha,
"failed, done\n");
* re-populates updated flash into the fcache. If * boot), this routine will create and the populate it. * ha = adapter state pointer. * *bpf = Pointer to flash buffer. * bsize = Size of flash buffer. /* Allocate & populate this node */ EL(
ha,
"node alloc failed\n");
/* link in the new node */ /* Do the firmware node first for 24xx's */ /* read in first FBUFSIZE bytes of this flash section */ EL(
ha,
"passed buffer too small; fr=%xh, bsize=%xh\n",
/* checkout the pci data / format */ EL(
ha,
"flash header incorrect\n");
* release all resources we have EL(
ha,
"failed, done\n");
* Release previous fcache resources and update with new * ha = adapter state pointer. * node = point to allocated fcache node (NULL = failed) * Driver must be in stalled state prior to entering or * add code to this function prior to calling ql_setup_flash() EL(
ha,
"fnode alloc failed\n");
EL(
ha,
"buf alloc failed\n");
* Releases the fcache resources * ha = adapter state pointer. * head = Pointer to fcache linked list /* release all resources we have */ * Updates driver flash caches * ha: adapter state pointer. /* Get base path length. */ /* Reset fcache on all adapter instances. */ * Search the fcache list for the type specified * fptr = Pointer to fcache linked list * ftype = Type of image to be returned. * Pointer to ql_fcache_t. /* does this image meet criteria? */ * checks the passed buffer for a valid pci signature and * expected (and in range) pci length values. * For firmware type, a pci header is added since the image in * the flash does not have one (!!!). * On successful pci check, nextpos adjusted to next pci header. * 1 --> pci header invalid. EL(
ha,
"failed, null fcache ptr passed\n");
EL(
ha,
"failed, null pciinfo ptr passed\n");
EL(
ha,
"failed, unable to detect sbus fcode\n");
/*LINTED [Solaris DDI_DEV_T_ANY Lint error]*/ * Build a pci header for the firmware module EL(
ha,
"failed, unable to allocate buffer\n");
/* get to the pci header image length */ /* some header section sanity check */ EL(
ha,
"buffer format error: s0=%xh, s1=%xh, off=%xh\n",
/* a slight sanity data section check */ EL(
ha,
"failed, data sig mismatch!\n");
/* adjust the next flash read start position */ * Obtains flash addresses from table * ha: adapter state pointer. * flt_paddr: flash layout pointer address. /* Process flash layout table header */ EL(
ha,
"kmem_zalloc=null\n");
/* Process pointer to flash layout table */ /* Verify pointer to flash layout table. */ /* Process flash layout table. */ /* Verify flash layout table. */ /* Process flash layout table regions */ * ql_flash_nvram_defaults * Flash default addresses. * ha: adapter state pointer. * ql local function return status code. * Returns sfp data to sdmapi caller * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"failed, invalid request for HBA\n");
EL(
ha,
"failed, ResponseLen < SFP len, len passed=%xh\n",
/* Dump SFP data in user buffer */ EL(
ha,
"failed, copy error\n");
* ha: adapter state pointer. /* Get memory for SFP. */ EL(
ha,
"failed, ql_get_dma_mem=%xh\n",
rval2);
EL(
ha,
"failed, ddi copy; byte cnt = %xh",
dxfer);
/* adjust the buffer pointer */ * Retrieves or sets the firmware port speed settings * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"invalid request for this HBA\n");
EL(
ha,
"failed, loop not ready\n");
EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"Unsupported dest lookup type: %xh\n",
EL(
ha,
"failed, fc_port not found\n");
* Report the firmware's port rate for the wwpn EL(
ha,
"iidma get failed: %xh\n",
rval);
EL(
ha,
"failed, Port speed rate=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* Set the firmware's port rate for the wwpn EL(
ha,
"invalid set iidma rate: %x\n",
EL(
ha,
"iidma set failed: %xh\n",
rval);
* Dumps f/w extended trace buffer * ha: adapter state pointer. EL(
ha,
"invalid request for this HBA\n");
EL(
ha,
"f/w extended trace is not enabled\n");
EL(
ha,
"failed, ResponseLen (%xh) < %xh (FWEXTSIZE)\n",
EL(
ha,
"f/w extended trace insert" "time stamp failed: %xh\n",
rval);
EL(
ha,
"f/w extended trace disable failed: %xh\n",
rval);
/* Allocate payload buffer */ EL(
ha,
"failed, kmem_zalloc\n");
/* Copy trace buffer data. */ /* Send payload to application. */ EL(
ha,
"failed, send_buffer_data\n");
* Dumps f/w fibre channel event trace buffer * ha: adapter state pointer. EL(
ha,
"invalid request for this HBA\n");
EL(
ha,
"f/w FCE trace is not enabled\n");
EL(
ha,
"failed, ResponseLen (%xh) < %xh (FWFCESIZE)\n",
EL(
ha,
"f/w FCE trace disable failed: %xh\n",
rval);
/* Allocate payload buffer */ EL(
ha,
"failed, kmem_zalloc\n");
/* Copy trace buffer data. */ /* Send payload to application. */ EL(
ha,
"failed, send_buffer_data\n");
* Retrieves pci config space data * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. * First check the "Capabilities List" bit of the status register. * Now get the capability pointer * Check for the pcie capability. EL(
ha,
"failed ResponseLen < buf_size, len passed=%xh\n",
/* Dump PCI config data. */ EL(
ha,
"failed, copy err pci_dump\n");
* Dumps PCI config data to application buffer. * ha = adapter state pointer. * bp = user buffer address. EL(
ha,
"failed kmem_zalloc\n");
/* store the initial value of ptr32 */ EL(
ha,
"failed ddi_copyout\n");
* ha: adapter state pointer. EL(
ha,
"failed, invalid request for HBA\n");
* TODO: only vp_index 0 can do this (?) /* Verify the size of request structure. */ EL(
ha,
"failed, ddi_copyin\n");
/* Wait for I/O to stop and daemon to stall. */ EL(
ha,
"ql_stall_driver failed\n");
}
else if (
mr.
mb[
1] != 0) {
EL(
ha,
"failed, substatus=%d\n",
mr.
mb[
1]);
* ql_menlo_get_fw_version * Get Menlo firmware version. * ha: adapter state pointer. EL(
ha,
"failed, invalid request for HBA\n");
EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, status=%xh, es=%xh, cs=%xh, fc=%xh\n",
rval,
EL(
ha,
"failed, ddi_copyout\n");
* Get Menlo update firmware. * ha: adapter state pointer. EL(
ha,
"failed, invalid request for HBA\n");
* TODO: only vp_index 0 can do this (?) /* Verify the size of request structure. */ /* Get update fw request. */ EL(
ha,
"failed, ddi_copyin\n");
/* Wait for I/O to stop and daemon to stall. */ EL(
ha,
"ql_stall_driver failed\n");
EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, kmem_zalloc\n");
/* Get DMA memory for the IOCB */ EL(
ha,
"failed, get_buffer_data\n");
EL(
ha,
"failed, status=%xh, es=%xh, cs=%xh, fc=%xh\n",
rval,
* ha: adapter state pointer. /* The call is only supported for Schultz right now */ EL(
ha,
"failed, invalid request for HBA\n");
/* Verify the size of request structure. */ /* Get manage info request. */ EL(
ha,
"failed, ddi_copyin\n");
EL(
ha,
"failed, kmem_zalloc\n");
/* Get DMA memory for the IOCB */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_buffer_data\n");
EL(
ha,
"failed, status=%xh, es=%xh, cs=%xh, fc=%xh\n",
rval,
* Suspends all adapter ports. * ha: adapter state pointer. * options: BIT_0 --> leave driver stalled on exit if * ql local function return status code. /* Quiesce I/O on all adapter ports */ EL(
ha,
"ql_stall_driver status=%xh\n",
rval);
* ha: adapter state pointer. /* Resume I/O on all adapter ports */ * Retrieves pci config space data * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. * To be backward compatible with older API * check for the size of old EXT_VPORT_ID_CNT EL(
ha,
"failed, ResponseLen < EXT_VPORT_ID_CNT, Len=%xh\n",
EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, ddi_copyout\n");
* Performs all EXT_CC_VPORT_CMD functions. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* case off on command subcode */ /* function not supported. */ EL(
ha,
"failed, Unsupported Subcode=%xh\n",
* Performs EXT_VF_SC_VPORT_GETINFO subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
vha,
"failed, ResponseLen < EXT_VPORT_INFO, Len=%xh\n",
/* Fill in the vport information. */ EL(
vha,
"failed, ddi_copyout\n");
* Performs all EXT_CC_ACCESS_FLASH_OS functions. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"flash_fcode_dump status=%xh\n",
rval);
EL(
ha,
"r_m_w_flash status=%xh\n",
rval);
/* Reset caches on all adapter instances. */ * Performs all EXT_CC_RESET_FW_OS functions. * ha: adapter state pointer. * cmd: Local EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"isp_abort_needed\n");
EL(
ha,
"invalid request for HBA\n");
/* Wait for I/O to stop and daemon to stall. */ EL(
ha,
"ql_suspend_hba failed\n");
* ha: adapter state pointer. * cmd: User space CT arguments pointer. EL(
ha,
"invalid request for HBA\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"failed, get_dcbx_params_mbx=%xh\n",
rval);
EL(
ha,
"failed, ddi_copyout\n");
* Performs EXT_SC_QUERY_CNA_PORT subfunction. * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. EL(
ha,
"invalid request for HBA\n");
EL(
ha,
"failed, ResponseLen < EXT_CNA_PORT, Len=%xh\n",
EL(
ha,
"failed, ddi_copyout\n");
* ql_get_xgmac_statistics * ha: adapter state pointer. * cmd: EXT_IOCTL cmd struct pointer. * None, request status indicated in cmd->Status. /* Verify the size of request structure. */ /* Get manage info request. */ EL(
ha,
"failed, ddi_copyin\n");
/* Allocate memory for command. */ EL(
ha,
"failed, kmem_zalloc\n");
EL(
ha,
"Invalid request for 81XX\n");
EL(
ha,
"failed, get_xgmac_stats =%xh\n",
rval);
EL(
ha,
"failed, ddi_copyout\n");