SCSI_HBA_ATTACH_SETUP(9F)                       Kernel Functions for Drivers
NAME
     scsi_hba_attach_setup, 
scsi_hba_detach - SCSI HBA attach and detach
     routines
SYNOPSIS
     #include <sys/scsi/scsi.h>     int     scsi_hba_attach_setup(
dev_info_t *dip, 
ddi_dma_attr_t *hba_dma_attr,         
scsi_hba_tran_t *hba_tran, 
int hba_flags);     
int     scsi_hba_detach(
dev_info_t *dip);
INTERFACE LEVEL
     illumos architecture specific (illumos DDI).
PARAMETERS
     dip           Pointer to the 
dev_info_t structure that refers to the
                   instance of the HBA device.     
hba_tran      Pointer to a 
scsi_hba_tran(9S) structure.     
hba_flags     Flag modifiers.  The defined flag values are
                   SCSI_HBA_TRAN_CLONE, SCSI_HBA_TRAN_SCB,
                   SCSI_HBA_TRAN_CDB, SCSI_HBA_HBA, and
                   SCSI_HBA_ADDR_COMPLEX.     
hba_dma_attr  Pointer to a 
ddi_dma_attr(9S) structure.
DESCRIPTION
   scsi_hba_attach_setup()     The 
scsi_hba_attach_setup() function registers the 
hba_dma_attr DMA
     attributes and the 
hba_tran transport vectors of each instance of the
     HBA device defined by 
dip.  The HBA driver can pass different DMA
     attributes and the transport vectors for each instance of the device to
     support any constraints imposed by the  HBA itself.
     The 
scsi_hba_attach_setup() function uses the 
devo_bus_ops field in the     
dev_ops(9S) structure.  The HBA driver should initialize this field to
     NULL before calling 
scsi_hba_attach_setup().
     If SCSI_HBA_TRAN_CLONE is requested in 
hba_flags, the 
hba_tran     structure is cloned once for each target that is attached to the HBA.
     The use of this flag is deprecated, drivers should instead use
     SCSI_HBA_ADDR_COMPLEX for per-target data.
     The structure is cloned before the 
tran_tgt_init(9E) entry point is
     called to initialize a target.  At all subsequent HBA entry points,
     including 
tran_tgt_init(9E), the 
scsi_hba_tran_t structure passed as an
     argument or found in a 
scsi_address(9S) structure is the cloned     
scsi_hba_tran_t structure, which allows the HBA to use the     
tran_tgt_private field in the 
scsi_hba_tran_t structure to point to
     per-target data.  The HBA should free only the same 
scsi_hba_tran_t     structure allocated when the HBA detaches.  All cloned 
scsi_hba_tran_t     structures that are allocated by the system are freed by the system.
     The flags SCSI_HBA_TRAN_CDB and SCSI_HBA_TRAN_SCB are only valid when     
tran_setup_pkt() is used.  See 
tran_setup_pkt(9E) for information on
     using these flags.
     The flag SCSI_HBA_ADDR_COMPLEX indicates to the system that this device
     handles more complex SCSI topologies, such as SAS.  When this flag is
     set, the 
scsi_address(9S) structure becomes opaque.  The driver must
     not check it for the traditional target and LUN values.  Instead, a
     target and LUN are identified by a unit address which can be retrieved
     using the 
scsi_device_unit_address(9F) function.
     When operating with the flag SCSI_HBA_ADDR_COMPLEX, the driver may
     associate private data with the 
scsi_device(9S) structure.  This
     obviates the need and complexity around using SCSI_HBA_TRAN_CLONE flag.
     To get and set private data, the driver can use the     
scsi_device_hba_private_get(9F) and 
scsi_device_hba_private_set(9F)     functions.  Notably, the 
scsi_device_hba_private_set() function should
     be used during the 
tran_tgt_init(9E) entry point.  The     
scsi_device_hba_private_get() function should then be used during other
     SCSI HBA entry points.  In addition, the 
scsi_address_device(9F)     function now becomes available to the driver to map between the     
scsi_device(9S) and 
scsi_address(9S) structures.
     The SCSI_HBA_HBA flag indicates that the HBA driver will only enumerate
     direct children which are 
iport(9) instances.  This mode of operation
     is recommended for device drivers as it simplifies the management of
     discovered devices.  This flag is often used in tandem with
     SCSI_HBA_ADDR_COMPLEX and is recommended for all new SAS-based HBA
     drivers.  For more information on the management of iports and the use
     of target maps, please see 
iport(9).
     The 
scsi_hba_attach_setup() function attaches a number of integer-
     valued properties to 
dip, unless properties of the same name are
     already attached to the node.  An HBA driver should retrieve these
     configuration parameters via 
ddi_prop_get_int(9F), and respect any
     settings for features provided the HBA.     
scsi-options             Optional SCSI configuration bits.  The following values may be
             bitwise-inclusive-ORed together.
             SCSI_OPTIONS_DR
                           If not set, the HBA should not grant Disconnect
                           privileges to target devices.
             SCSI_OPTIONS_TAG
                           If not set, the HBA should not operate in Command
                           Tagged Queueing mode.
             SCSI_OPTIONS_PARITY
                           If not set, the HBA should not operate in parity
                           mode.
             SCSI_OPTIONS_QAS
                           If not set, the HBA should not make use of the
                           Quick Arbitration Select feature.  Consult your
                           hardware documentation to determine whether your
                           machine supports QAS.
             SCSI_OPTIONS_FAST
                           If not set, the HBA should not operate the bus in
                           FAST SCSI mode.
             SCSI_OPTIONS_FAST20
                           If not set, the HBA should not operate the bus in
                           FAST20 SCSI mode.
             SCSI_OPTIONS_FAST40
                           If not set, the HBA should not operate the bus in
                           FAST40 SCSI mode.
             SCSI_OPTIONS_FAST80
                           If not set, the HBA should not operate the bus in
                           FAST80 SCSI mode.
             SCSI_OPTIONS_FAST160
                           If not set, the HBA should not operate the bus in
                           FAST160 SCSI mode.
             SCSI_OPTIONS_FAST320
                           If not set, the HBA should not operate the bus in
                           FAST320 SCSI mode.
             SCSI_OPTIONS_WIDE
                           If not set, the HBA should not operate the bus in
                           WIDE SCSI mode.
             SCSI_OPTIONS_SYNC
                           If not set, the HBA should not operate the bus in
                           synchronous transfer mode.     
scsi-reset-delay             SCSI bus or device reset recovery time, in milliseconds.     
scsi-selection-timeout             Default SCSI selection phase timeout value, in milliseconds.
             Please refer to individual HBA man pages for any HBA-specific
             information   
scsi_hba_detach()     The 
scsi_hba_detach() function removes the reference to the DMA
     attributes structure and the transport vector for the given instance of
     an HBA driver.
CONTEXT
     The 
scsi_hba_attach_setup() function should be called from 
attach(9E).
     The 
scsi_hba_detach() function should be called from 
detach(9E).
RETURN VALUES
     The 
scsi_hba_attach_setup() and 
scsi_hba_detach() functions return
     DDI_SUCCESS if the function call succeeds, and return DDI_FAILURE on
     failure.
SEE ALSO
     iport(9), 
attach(9E), 
detach(9E), 
tran_setup_pkt(9E),     
tran_tgt_init(9E), 
ddi_prop_get_int(9F), 
scsi_address_device(9F),     
scsi_device_hba_private_get(9F), 
scsi_device_hba_private_set(9F),     
scsi_device_unit_address(9F), 
ddi_dma_attr(9S), 
dev_ops(9S),     
scsi_address(9S), 
scsi_device(9S), 
scsi_hba_tran(9S)     Writing Device Drivers.
NOTES
     It is the HBA driver's responsibility to ensure that no more transport
     requests will be taken on behalf of any SCSI target device driver after     
scsi_hba_detach() is called.
illumos                       December 11, 2022                      illumos