Go to main content

man pages section 9: DDI and DKI Driver Entry Points

Exit Print View

Updated: Thursday, June 13, 2019
 
 

tran_reset(9E)

Name

tran_reset - reset a SCSI bus or target

Synopsis

#include <sys/scsi/scsi.h>

int prefixtran_reset(struct scsi_address *ap, int level);

Interface Level

Solaris architecture specific (Solaris DDI).

Parameters

ap

Pointer to the scsi_address(9S) structure.

level

The level of reset required.

Description

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.

Return Values

tran_reset() should return:

1

on success.

0

on failure.

Context

The tran_reset() function can be called from user or interrupt context. This requirement comes from scsi_reset().

See Also

attach(9E), ddi_dma_buf_setup(9F), scsi_hba_attach(9F), scsi_reset(9F), scsi_address(9S), scsi_hba_tran(9S)

Writing Device Drivers in Oracle Solaris 11.4

Notes

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.