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