Copyright (c) 2005, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
#include <sys/scsi/scsi.h> int prefixtran_reset(struct scsi_address *ap, int level);
Solaris architecture specific (Solaris DDI).
ap
Pointer to the scsi_address(9S) structure.
level
The level of reset required.
The tran_reset() vector in the scsi_hba_tran(9S) structure must be initialized during the HBA driver's attach(9E) to point to an HBA entry point to be called when a target driver calls scsi_reset(9F).
tran_reset() must reset either the SCSI bus, a SCSI target device, or a SCSI logical unit as specified by level.
level must be one of the following:
RESET_ALL
Reset the SCSI bus.
RESET_TARGET
Reset the target specified by ap.
RESET_LUN
Reset the logical unit specified by ap.
tran_reset should set the pkt_reason field of all outstanding packets in the transport layer associated with each target or logical unit that was successfully reset to CMD_RESET and the pkt_statistics field must be OR'ed with either STAT_BUS_RESET (if the SCSI bus was reset) or STAT_DEV_RESET (if the target or logical unit was reset).
The HBA driver should use a SCSI Bus Device Reset Message to reset a target device. The HBA driver should use a SCSI Logical Unit Reset Message to reset a logical unit.
Packets that are in the transport layer but not yet active on the bus should be returned with pkt_reason set to CMD_RESET and pkt_statistics OR'ed with STAT_ABORTED.
Support for RESET_LUN is optional but strongly encouraged for new and updated HBA drivers. If an HBA driver provides RESET_LUN support, it must also create the lun-reset capability with a value of zero for each target device instance represented by a valid ap. The HBA is also required to provide the means to return the current value of the lun-reset capability in its tran_getcap(9E) routine, as well as the means to change the value of the lun_reset capability in its tran_getcap(9E) routine.
tran_reset() should return:
1
on success.
0
on failure.
The tran_reset() function can be called from user or interrupt context. This requirement comes from scsi_reset().
attach(9E), ddi_dma_buf_setup(9F), scsi_hba_attach(9F), scsi_reset(9F), scsi_address(9S), scsi_hba_tran(9S)
Writing Device Drivers
If pkt_reason already indicates that an earlier error had occurred for a particular pkt, tran_reset() should not overwrite pkt_reason with CMD_RESET.