xref: /illumos-gate/usr/src/man/man9f/scsi_address_device.9f (revision 3385b4726f1b09aa9511340017fb23c7cde6aadd)
1*3385b472SRobert Mustacchi.\"
2*3385b472SRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3*3385b472SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*3385b472SRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5*3385b472SRobert Mustacchi.\" 1.0 of the CDDL.
6*3385b472SRobert Mustacchi.\"
7*3385b472SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8*3385b472SRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9*3385b472SRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10*3385b472SRobert Mustacchi.\"
11*3385b472SRobert Mustacchi.\"
12*3385b472SRobert Mustacchi.\" Copyright (c) 2017, Joyent, Inc.
13*3385b472SRobert Mustacchi.\"
14*3385b472SRobert Mustacchi.Dd Apr 20, 2017
15*3385b472SRobert Mustacchi.Dt SCSI_ADDRESS_DEVICE 9F
16*3385b472SRobert Mustacchi.Os
17*3385b472SRobert Mustacchi.Sh NAME
18*3385b472SRobert Mustacchi.Nm scsi_address_device ,
19*3385b472SRobert Mustacchi.Nm scsi_device_unit_address ,
20*3385b472SRobert Mustacchi.Nm scsi_device_hba_private_get ,
21*3385b472SRobert Mustacchi.Nm scsi_device_hba_private_set
22*3385b472SRobert Mustacchi.Nd SCSI Complex addressing utility functions
23*3385b472SRobert Mustacchi.Sh SYNOPSIS
24*3385b472SRobert Mustacchi.In sys/scsi/scsi.h
25*3385b472SRobert Mustacchi.Ft "struct scsi_device *"
26*3385b472SRobert Mustacchi.Fo scsi_address_device
27*3385b472SRobert Mustacchi.Fa "struct scsi_address *sa"
28*3385b472SRobert Mustacchi.Fc
29*3385b472SRobert Mustacchi.Ft "void *"
30*3385b472SRobert Mustacchi.Fo scsi_device_hba_private_get
31*3385b472SRobert Mustacchi.Fa "struct scsi_device *sd"
32*3385b472SRobert Mustacchi.Fc
33*3385b472SRobert Mustacchi.Ft void
34*3385b472SRobert Mustacchi.Fo scsi_device_hba_private_set
35*3385b472SRobert Mustacchi.Fa "struct scsi_device *sd"
36*3385b472SRobert Mustacchi.Fa "void *data"
37*3385b472SRobert Mustacchi.Fc
38*3385b472SRobert Mustacchi.Ft "char *"
39*3385b472SRobert Mustacchi.Fo scsi_device_unit_address
40*3385b472SRobert Mustacchi.Fa "struct scsi_device *sd"
41*3385b472SRobert Mustacchi.Fc
42*3385b472SRobert Mustacchi.Sh INTERFACE LEVEL
43*3385b472SRobert Mustacchi.Sy Evolving -
44*3385b472SRobert MustacchiThis interface is still evolving in illumos.
45*3385b472SRobert MustacchiAPI and ABI stability is
46*3385b472SRobert Mustacchinot guaranteed.
47*3385b472SRobert Mustacchi.Sh PARAMETERS
48*3385b472SRobert Mustacchi.Bl -tag -width Fa
49*3385b472SRobert Mustacchi.It Fa sa
50*3385b472SRobert MustacchiPointer to a
51*3385b472SRobert Mustacchi.Xr scsi_address 9S
52*3385b472SRobert Mustacchistructure.
53*3385b472SRobert Mustacchi.It Fa sd
54*3385b472SRobert MustacchiPointer to a
55*3385b472SRobert Mustacchi.Xr scsi_device 9S
56*3385b472SRobert Mustacchistructure.
57*3385b472SRobert Mustacchi.It Fa data
58*3385b472SRobert MustacchiA private value that the driver can get and set.
59*3385b472SRobert Mustacchi.El
60*3385b472SRobert Mustacchi.Sh DESCRIPTION
61*3385b472SRobert MustacchiThese functions provide useful services for SCSI HBA drivers that use
62*3385b472SRobert Mustacchicomplex addressing.
63*3385b472SRobert MustacchiIn complex addressing mode, the
64*3385b472SRobert Mustacchi.Xr scsi_address 9S
65*3385b472SRobert Mustacchistructure is treated as an opaque structure and is not a simple target
66*3385b472SRobert Mustacchiand LUN.
67*3385b472SRobert MustacchiTo use these functions, the driver must have enabled complex addressing
68*3385b472SRobert Mustacchiby passing the
69*3385b472SRobert Mustacchi.Dv SCSI_HBA_ADDR_COMPLEX
70*3385b472SRobert Mustacchiflag into the
71*3385b472SRobert Mustacchi.Fa hba_flags
72*3385b472SRobert Mustacchiargument of the
73*3385b472SRobert Mustacchi.Xr scsi_hba_attach_setup 9F
74*3385b472SRobert Mustacchifunction.
75*3385b472SRobert MustacchiIf the
76*3385b472SRobert Mustacchi.Dv SCSI_HBA_ADDR_COMPLEX
77*3385b472SRobert Mustacchiflag was not passed, then the driver must not call the
78*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_get ,
79*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_set ,
80*3385b472SRobert Mustacchior
81*3385b472SRobert Mustacchi.Fn scsi_device_unit_address
82*3385b472SRobert Mustacchifunctions.
83*3385b472SRobert Mustacchi.Pp
84*3385b472SRobert MustacchiThe
85*3385b472SRobert Mustacchi.Fn scsi_address_device
86*3385b472SRobert Mustacchifunction maps the
87*3385b472SRobert Mustacchi.Xr scsi_address 9S
88*3385b472SRobert Mustacchifunction back to its corresponding
89*3385b472SRobert Mustacchi.Xr scsi_device 9S
90*3385b472SRobert Mustacchistructure.
91*3385b472SRobert MustacchiIf the
92*3385b472SRobert Mustacchi.Dv SCSI_HBA_ADDR_COMPLEX
93*3385b472SRobert Mustacchiflag has not been set, then the function will return
94*3385b472SRobert Mustacchi.Dv NULL .
95*3385b472SRobert MustacchiThis can be used as a way to check if the flag has been set on the
96*3385b472SRobert Mustacchidevice.
97*3385b472SRobert Mustacchi.Pp
98*3385b472SRobert MustacchiThe
99*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_set
100*3385b472SRobert Mustacchifunction, allows a driver to set a private data value on the
101*3385b472SRobert Mustacchi.Xr scsi_device 9S
102*3385b472SRobert Mustacchistructure, which it can later retrieve through the
103*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_get
104*3385b472SRobert Mustacchifunction.
105*3385b472SRobert MustacchiMost drivers will set a value during the
106*3385b472SRobert Mustacchi.Xr tran_start 9E
107*3385b472SRobert Mustacchientry point and then reference the data structure later on.
108*3385b472SRobert MustacchiThis is designed to simplify the management of mapping between driver
109*3385b472SRobert Mustacchidata structures and the corresponding system objects.
110*3385b472SRobert Mustacchi.Pp
111*3385b472SRobert MustacchiThe
112*3385b472SRobert Mustacchi.Fn scsi_device_unit_address
113*3385b472SRobert Mustacchifunction returns the unit address of the
114*3385b472SRobert Mustacchi.Xr scsi_device 9S
115*3385b472SRobert Mustacchistructure.
116*3385b472SRobert MustacchiThe returned string should not be modified by the device driver.
117*3385b472SRobert MustacchiThe unit address string comes from values that are passed when
118*3385b472SRobert Mustacchithe device is enumerated, generally through an instance of an
119*3385b472SRobert Mustacchi.Xr iport 9 .
120*3385b472SRobert Mustacchi.Sh CONTEXT
121*3385b472SRobert MustacchiThese functions may be used in
122*3385b472SRobert Mustacchi.Sy user ,
123*3385b472SRobert Mustacchi.Sy kernel ,
124*3385b472SRobert Mustacchiand
125*3385b472SRobert Mustacchi.Sy interrupt
126*3385b472SRobert Mustacchicontext.
127*3385b472SRobert Mustacchi.Sh RETURN VALUES
128*3385b472SRobert MustacchiUpon successful completion, the
129*3385b472SRobert Mustacchi.Fn scsi_address_device
130*3385b472SRobert Mustacchifunction returns a pointer to the
131*3385b472SRobert Mustacchi.Xr scsi_device 9S
132*3385b472SRobert Mustacchistructure.
133*3385b472SRobert MustacchiOtherwise, if an error occurred
134*3385b472SRobert Mustacchi.Dv NULL
135*3385b472SRobert Mustacchiis returned.
136*3385b472SRobert Mustacchi.Pp
137*3385b472SRobert MustacchiThe
138*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_get
139*3385b472SRobert Mustacchifunction returns a data value registered via the
140*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_set
141*3385b472SRobert Mustacchifunction.
142*3385b472SRobert MustacchiIf the
143*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_set
144*3385b472SRobert Mustacchiwas never called,
145*3385b472SRobert Mustacchi.Dv NULL
146*3385b472SRobert Mustacchiis returned.
147*3385b472SRobert Mustacchi.Pp
148*3385b472SRobert MustacchiUpon successful completion, the
149*3385b472SRobert Mustacchi.Fn scsi_device_unit_address
150*3385b472SRobert Mustacchireturns a pointer to a character string with the device's unit address.
151*3385b472SRobert MustacchiOtherwise,
152*3385b472SRobert Mustacchi.Dv NULL
153*3385b472SRobert Mustacchiis returned.
154*3385b472SRobert Mustacchi.Pp
155*3385b472SRobert MustacchiIf the
156*3385b472SRobert Mustacchi.Dv SCSI_HBA_ADDR_COMPLEX
157*3385b472SRobert Mustacchiflag has not been set for the HBA structure or iport, then the
158*3385b472SRobert Mustacchi.Fn scsi_address_device ,
159*3385b472SRobert Mustacchi.Fn scsi_device_hba_private_get ,
160*3385b472SRobert Mustacchiand
161*3385b472SRobert Mustacchi.Fn scsi_device_unit_address
162*3385b472SRobert Mustacchifunctions return
163*3385b472SRobert Mustacchi.Dv NULL .
164*3385b472SRobert Mustacchi.Sh SEE ALSO
165*3385b472SRobert Mustacchi.Xr iport 9 ,
166*3385b472SRobert Mustacchi.Xr tran_start 9E ,
167*3385b472SRobert Mustacchi.Xr scsi_hba_attach_setup 9F ,
168*3385b472SRobert Mustacchi.Xr scsi_address 9S ,
169*3385b472SRobert Mustacchi.Xr scsi_device 9S
170