1.\" Copyright (c) 2006 Sun Microsystems, Inc., All Rights Reserved
2.\" Copyright 2014 Garrett D'Amore <garrett@damore.org>
3.\" Copyright (c) 2017, Joyent, Inc.
4.\" 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.
5.\" 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.
6.\" 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]
7.Dd December 11, 2022
8.Dt SCSI_HBA_ATTACH_SETUP 9F
9.Os
10.Sh NAME
11.Nm scsi_hba_attach_setup ,
12.Nm scsi_hba_detach
13.Nd SCSI HBA attach and detach routines
14.Sh SYNOPSIS
15.In sys/scsi/scsi.h
16.Ft int
17.Fo scsi_hba_attach_setup
18.Fa "dev_info_t *dip"
19.Fa "ddi_dma_attr_t *hba_dma_attr"
20.Fa "scsi_hba_tran_t *hba_tran"
21.Fa "int hba_flags"
22.Fc
23.Ft int
24.Fo scsi_hba_detach
25.Fa "dev_info_t *dip"
26.Fc
27.Sh INTERFACE LEVEL
28illumos architecture specific (illumos DDI).
29.Sh PARAMETERS
30.Bl -tag -width Fa
31.It Fa dip
32Pointer to the
33.Vt dev_info_t
34structure that refers to the instance of the HBA device.
35.It Fa hba_tran
36Pointer to a
37.Xr scsi_hba_tran 9S
38structure.
39.It Fa hba_flags
40Flag modifiers.
41The defined flag values are
42.Dv SCSI_HBA_TRAN_CLONE ,
43.Dv SCSI_HBA_TRAN_SCB ,
44.Dv SCSI_HBA_TRAN_CDB ,
45.Dv SCSI_HBA_HBA ,
46and
47.Dv SCSI_HBA_ADDR_COMPLEX .
48.It Fa hba_dma_attr
49Pointer to a
50.Xr ddi_dma_attr 9S
51structure.
52.El
53.Sh DESCRIPTION
54.Ss Fn scsi_hba_attach_setup
55The
56.Fn scsi_hba_attach_setup
57function registers the
58.Fa hba_dma_attr
59DMA attributes and the
60.Fa hba_tran
61transport vectors of each instance of the HBA device defined by
62.Fa dip .
63The HBA driver can pass different DMA attributes and the transport
64vectors for each instance of the device to support any constraints
65imposed by the  HBA itself.
66.Pp
67The
68.Fn scsi_hba_attach_setup
69function uses the
70.Vt devo_bus_ops
71field in the
72.Xr dev_ops 9S
73structure.
74The HBA driver should initialize this field to
75.Dv NULL
76before calling
77.Fn scsi_hba_attach_setup .
78.Pp
79If
80.Dv SCSI_HBA_TRAN_CLONE
81is requested in
82.Fa hba_flags ,
83the
84.Fa hba_tran
85structure is cloned once for each target that is attached to the
86HBA.
87The use of this flag is deprecated, drivers should instead use
88.Dv SCSI_HBA_ADDR_COMPLEX
89for per-target data.
90.Pp
91The structure is cloned before the
92.Xr tran_tgt_init 9E
93entry point is called to initialize a target.
94At all subsequent HBA
95entry points, including
96.Xr tran_tgt_init 9E ,
97the
98.Vt scsi_hba_tran_t
99structure passed as an
100argument or found in a
101.Xr scsi_address 9S
102structure is the cloned
103.Vt scsi_hba_tran_t
104structure, which allows the HBA to use the
105.Vt tran_tgt_private
106field in the
107.Vt scsi_hba_tran_t
108structure to point to per-target data.
109The HBA should free only the same
110.Vt scsi_hba_tran_t
111structure allocated when the HBA detaches.
112All cloned
113.Vt scsi_hba_tran_t
114structures that are allocated by the system are freed by the system.
115.Pp
116The flags
117.Dv SCSI_HBA_TRAN_CDB
118and
119.Dv SCSI_HBA_TRAN_SCB
120are only valid
121when
122.Fn tran_setup_pkt
123is used.
124See
125.Xr tran_setup_pkt 9E
126for information on using these flags.
127.Pp
128The flag
129.Dv SCSI_HBA_ADDR_COMPLEX
130indicates to the system that this device handles more complex SCSI
131topologies, such as SAS.
132When this flag is set, the
133.Xr scsi_address 9S
134structure becomes opaque.
135The driver must not check it for the traditional target and LUN values.
136Instead, a target and LUN are identified by a unit address which can be
137retrieved using the
138.Xr scsi_device_unit_address 9F
139function.
140.Pp
141When operating with the flag
142.Dv SCSI_HBA_ADDR_COMPLEX ,
143the driver may associate private data with the
144.Xr scsi_device 9S
145structure.
146This obviates the need and complexity around using
147.Dv SCSI_HBA_TRAN_CLONE
148flag.
149To get and set private data, the driver can use the
150.Xr scsi_device_hba_private_get 9F
151and
152.Xr scsi_device_hba_private_set 9F
153functions.
154Notably, the
155.Fn scsi_device_hba_private_set
156function should be used during the
157.Xr tran_tgt_init 9E
158entry point.
159The
160.Fn scsi_device_hba_private_get
161function should then be used during other SCSI HBA entry points.
162In addition, the
163.Xr scsi_address_device 9F
164function now becomes available to the driver to map between the
165.Xr scsi_device 9S
166and
167.Xr scsi_address 9S
168structures.
169.Pp
170The
171.Dv SCSI_HBA_HBA
172flag indicates that the HBA driver will only enumerate direct children
173which are
174.Xr iport 9
175instances.
176This mode of operation is recommended for device drivers as
177it simplifies the management of discovered devices.
178This flag is often used in tandem with
179.Dv SCSI_HBA_ADDR_COMPLEX
180and is recommended for all new SAS-based HBA drivers.
181For more information on the management of iports and the use of target
182maps, please see
183.Xr iport 9 .
184.Pp
185The
186.Fn scsi_hba_attach_setup
187function attaches a number of integer-valued properties to
188.Fa dip ,
189unless properties of the same name are already attached to the node.
190An HBA driver should retrieve these configuration parameters via
191.Xr ddi_prop_get_int 9F ,
192and respect any settings for features provided the HBA.
193.Bl -tag -width Sy
194.It Sy scsi-options
195.Sy Optional SCSI configuration bits .
196The following values may be bitwise-inclusive-ORed together.
197.Bl -tag -width Dv
198.It Dv SCSI_OPTIONS_DR
199If not set, the HBA should not grant Disconnect privileges to target devices.
200.It Dv SCSI_OPTIONS_TAG
201If not set, the HBA should not operate in Command Tagged Queueing mode.
202.It Dv SCSI_OPTIONS_PARITY
203If not set, the HBA should not operate in parity mode.
204.It Dv SCSI_OPTIONS_QAS
205If not set, the HBA should not make use of the Quick Arbitration Select
206feature.
207Consult your hardware documentation to determine whether your
208machine supports QAS.
209.It Dv SCSI_OPTIONS_FAST
210If not set, the HBA should not operate the bus in FAST SCSI mode.
211.It Dv SCSI_OPTIONS_FAST20
212If not set, the HBA should not operate the bus in FAST20 SCSI mode.
213.It Dv SCSI_OPTIONS_FAST40
214If not set, the HBA should not operate the bus in FAST40 SCSI mode.
215.It Dv SCSI_OPTIONS_FAST80
216If not set, the HBA should not operate the bus in FAST80 SCSI mode.
217.It Dv SCSI_OPTIONS_FAST160
218If not set, the HBA should not operate the bus in FAST160 SCSI mode.
219.It Dv SCSI_OPTIONS_FAST320
220If not set, the HBA should not operate the bus in FAST320 SCSI mode.
221.It Dv SCSI_OPTIONS_WIDE
222If not set, the HBA should not operate the bus in WIDE SCSI mode.
223.It Dv SCSI_OPTIONS_SYNC
224If not set, the HBA should not operate the bus in synchronous transfer mode.
225.El
226.It Sy scsi-reset-delay
227SCSI bus or device reset recovery time, in milliseconds.
228.It Sy scsi-selection-timeout
229Default SCSI selection phase timeout value, in milliseconds.
230Please refer to individual HBA man pages for any HBA-specific
231information
232.El
233.Ss Fn scsi_hba_detach
234The
235.Fn scsi_hba_detach
236function removes the reference to the DMA attributes structure and the
237transport vector for the given instance of an HBA driver.
238.Sh CONTEXT
239The
240.Fn scsi_hba_attach_setup
241function should be called from
242.Xr attach 9E .
243The
244.Fn scsi_hba_detach
245function should be called from
246.Xr detach 9E .
247.Sh RETURN VALUES
248The
249.Fn scsi_hba_attach_setup
250and
251.Fn scsi_hba_detach
252functions return
253.Dv DDI_SUCCESS
254if the function call succeeds, and return
255.Dv DDI_FAILURE
256on failure.
257.Sh SEE ALSO
258.Xr iport 9 ,
259.Xr attach 9E ,
260.Xr detach 9E ,
261.Xr tran_setup_pkt 9E ,
262.Xr tran_tgt_init 9E ,
263.Xr ddi_prop_get_int 9F ,
264.Xr scsi_address_device 9F ,
265.Xr scsi_device_hba_private_get 9F ,
266.Xr scsi_device_hba_private_set 9F ,
267.Xr scsi_device_unit_address 9F ,
268.Xr ddi_dma_attr 9S ,
269.Xr dev_ops 9S ,
270.Xr scsi_address 9S ,
271.Xr scsi_device 9S ,
272.Xr scsi_hba_tran 9S
273.Pp
274.Rs
275.%T Writing Device Drivers
276.Re
277.Sh NOTES
278It is the HBA driver's responsibility to ensure that no more transport requests
279will be taken on behalf of any SCSI target device driver after
280.Fn scsi_hba_detach
281is called.
282