scsi_inquiry(9S) update [PSARC/2008/673 Self Review]

Garrett D'Amore gdamore at sun.com
Sun Nov 2 21:26:15 PST 2008


+1

    -- Garrett

Christopher Horne wrote:
> I am sponsoring the following fasttrack for myself.  Micro/patch
> binding is requested.  The proposal is a backwards compatible update
> scsi_inquiry(9S) data structures and man pages to support more recient
> versions SCSI standards.  I believe the case qualifies for self review,
> and have filed it as Closed Approved Automatic.  If there is a request,
> I'd be happy to convert it to a fasttrack and set the timer to enable
> further discussion.
>
> -Chris
>
> 1. Introduction
>     1.1 Project/Component Working Name:
> 	scsi_inquiry(9S) update
>
>     1.2 Name of Document Author/Supplier:
>         Author: Chris Horne
>
>     1.3 Date of This Document:
> 	Thu Oct 23 2008
>
> 4. Technical Description
>
>     4.1 Summary
>
>       This fasttrack proposes updates to the scsi_inquiry(9S) structure
>       consistent with the evolution of SCSI standards.
>
>     4.2 Interfaces
>
>     4.2.1 Removed from man page:
>
> 	The following bits were specified in earlier versions of the
> 	ANSI standard, but generally unused - they have been removed
> 	from more recent versions of the ANSI standard.  The proposal
> 	is to remove these fields from the scsi_inquiry(9S) man page,
> 	the definition in the header file will still be there (marked
> 	deprecated).
>
> 	------------------------------------------------------------------
> 	Interface Name	Comm.Lev.	Comments
> 	------------------------------------------------------------------
> 	inq_reladdr	Obsolete	Supports relative addressing
> 	inq_wbus32	  "		Supports 32 bit wide data xfers
>
>     4.2.2 New (already defined in header file):
>
> 	These definitions update the scsi_inquiry(9S) man page to
> 	reflect definitions that already exist in the header file.
>
> 	------------------------------------------------------------------
> 	Interface Name	Comm.Lev.	Comments
> 	------------------------------------------------------------------
> 	DTYPE_RBC	Committed	Simplified direct-access device
> 	DTYPE_OCRW	  "		Optical card reader/writer device.
> 	DTYPE_BRIDGE	  "		Bridge
> 	DTYPE_OSD	  "		Object-based storage device.
>
> 	DPQ_MASK	  "		Mask Peripheral Qualifier field.
>
>
>     4.2.3 NEW (Add to man page and header file):
>
> 	New fields in latest version of ANSI standard added to the man
> 	page and to the header file.
>
> 	------------------------------------------------------------------
> 	Interface Name	Comm.Lev.	Comments
> 	------------------------------------------------------------------
> 	inq_normaca	Committed	setting NACA bit supported
> 	inq_hisup	  "		hierarchical addressing model
> 	inq_sccs	  "		embedded storage array
> 	inq_tpgse	  "		explicit asymmetric lun access
> 	inq_tpgsi	  "		implicit asymmetric lun access
> 	inq_bque	  "		basic queuing
> 	inq_encserv	  "		embedded enclosure services
> 	inq_dualp	  "		dual port device
> 	inq_mchngr	  "		embedded/attached to medium chngr
> 	inq_addr16	  "		SPI: supports 16 bit wide SCSI addr
> 	inq_clk		  "		SPI3 clocking
> 	inq_qas		  "		SPI3: quick arb sel
> 	inq_ius		  "		SPI3: information units
>
>     4.2.4 New (Add to the header file, no man page definition):
>
> 	New fields in latest version of ANSI standard added to the
> 	header file, but not being promoted to the man page at this
> 	time because of stability concerns.
>
> 	------------------------------------------------------------------
> 	Interface Name	Comm.Lev.	Comments
> 	------------------------------------------------------------------
> 	inq_acc		Unstable	access controls coordinator
> 	inq_3pc		  "		third-party copy
> 	inq_protect	  "		supports protection information
>
>     4.2.5 Bugs fixed in current man page:
>
> 	The definition of the following fields are corrected: inq_ecma,
> 	inq_ansi.
>
> 	The man page is reorganized for consistent presentation of
> 	field definitions, using ANSI standard and structure layout
> 	order.
>
>     4.2.6 Other changes
>
> 	In addition to the changes above, the following inquiry related
> 	implementation changes are being made:
>
> 	o The size of the scsi_inquiry(9S) structure is padded to 132
> 	  bytes.  This is being done so that the sd_inq will contain
> 	  vendor unique information needed for some of the mpxio
> 	  failover modules.  The scsi_inquiry(9S) structure is not
> 	  embedded in other structures, or used in kernel/user APIs -
> 	  so this change should be safe.
>
> 	o The scsi_device(9S) 'sd_inq' information will now be scoped
> 	  the same as the scsi_device(9S) structure itself (i.e.
> 	  initchild - uninitchild), instead of by scsi_probe(9F) -
> 	  scsi_unprobe(9F) (or scsi_slave(9F) - scsi_unslave(9F)).
> 	  This change makes 'sd_inq' match the scope of a devinfo
> 	  node's inquiry(9P) properties.  By coupling 'sd_inq' more
> 	  closely with the devinfo state model, we reduce bugs related
> 	  to a failed detach operations (making HBA driver and SCSA
> 	  framework use of 'sd_inq' safer). This change makes the SCSA
> 	  framework implementation of scsi_unprobe(9F) and
> 	  scsi_unslave(9F) noops.
>
>     4.3 Man page changes
>
>         See below.
>
> 6.  Resources and Schedule
>
>     6.4 Steering Committee requested information
>
>     6.4.1 Consolidation C-team Name:
> 	ON
>
>     6.5 ARC review type:
>         FastTrack
>
> A.1 Proposed scsi_inquiry(9F) man page changes:
>
> --- scsi_inquiry.9s.orig	Thu Jul 21 21:02:18 2005
> +++ scsi_inquiry.9s	Tue Aug  2 16:00:49 2005
> @@ -1,3 +1,6 @@
> +NOTE: Lines that start with 'X' will be deleted before submission,
> +      they are being classified as unstable at this time.
> +
>  Data Structures for Drivers                      scsi_inquiry(9S)
>  
>  NAME
> @@ -21,15 +24,27 @@
>       uchar_t  inq_rmb          :1;   /* Removable media */
>       uchar_t  inq_qual         :7;   /* Device type qualifier */
>       uchar_t  inq_iso          :2;   /* ISO version */
> -     uchar_t  inq_ecma         :3;   /* ANSI version */
> +     uchar_t  inq_ecma         :3;   /* ECMA version */
> +     uchar_t  inq_ansi         :3;   /* ANSII version */
>       uchar_t  inq_aenc         :1;   /* Async event notification cap. */
>       uchar_t  inq_trmiop       :1;   /* Supports TERMINATE I/O PROC msg */
> +     uchar_t  inq_normaca      :1;   /* setting NACA bit supported */
> +     uchar_t  inq_hisup        :1;   /* hierarchical addressing model */
>       uchar_t  inq_rdf          :4;   /* Response data format */
> -     uchar_t  inq_len;               /* Additional length */
> -     uchar_t  inq_reladdr      :1;   /* Supports relative addressing */
> -     uchar_t  inq_wbus32       :1;   /* Supports 32 bit wide data xfers */
> -     uchar_t  inq_wbus16       :1;   /* Supports 16 bit wide data xfers */
> -     uchar_t  inq_sync         :1;   /* Supports synchronous data xfers */
> +     uchar_t  inq_len                /* Additional length */
> +     uchar_t  inq_sccs         :1;   /* embedded storage array */
> +X    uchar_t  inq_acc          :1;   /* access controls coordinator */
> +     uchar_t  inq_tpgse        :1;   /* explicit asymmetric lun access */
> +     uchar_t  inq_tpgsi        :1;   /* implicit asymmetric lun access */
> +X    uchar_t  inq_3pc          :1;   /* third-party copy */
> +X    uchar_t  inq_protect      :1;   /* supports protection information */
> +     uchar_t  inq_bque         :1;   /* basic queueing */
> +     uchar_t  inq_encserv      :1;   /* embedded enclosure services */
> +     uchar_t  inq_dualp        :1;   /* dual port device */
> +     uchar_t  inq_mchngr       :1;   /* embedded/attached to medium chngr */
> +     uchar_t  inq_addr16       :1;   /* SPI: supports 16 bit wide SCSI addr */
> +     uchar_t  inq_wbus16       :1;   /* SPI: Supports 16 bit wide data xfers */
> +     uchar_t  inq_sync         :1;   /* SPI: Supports synchronous data xfers */
>       uchar_t  inq_linked       :1;   /* Supports linked commands */
>       uchar_t  inq_cmd_que      :1;   /* Supports command queueing */
>       uchar_t  inq_sftre        :1;   /* Supports Soft Reset option */
> @@ -36,6 +51,9 @@
>       char     inq_vid[8];            /* Vendor ID */
>       char     inq_pid[16];           /* Product ID */
>       char     inq_revision[4];       /* Revision level */
> +     uchar_t  inq_clk          :2;   /* SPI3 clocking */
> +     uchar_t  inq_qas          :1;   /* SPI3: quick arb sel */
> +     uchar_t  inq_ius          :1;   /* SPI3: information units */
>  
>  
>       inq_dtype  identifies  the  type  of  device.  Bits  0  -  4
> @@ -43,14 +61,9 @@
>       represent the Peripheral Qualifier. The following values are
>       appropriate for Peripheral Device Type field:
>  
> -     "small and bold">DTYPE_AArrayCcontroller device  (for  exam-
> -                             ple, RAID).
> -
>       DTYPE_DIRECT            Direct-access device  (for  example,
>                               magnetic disk).
>  
> -     DTYPE_ESI               Enclosure services device.
> -
>       DTYPE_SEQUENTIAL        Sequential-access device (for  exam-
>                               ple, magnetic tape).
>  
> @@ -73,6 +86,19 @@
>  
>       DTYPE_COMM              Communications device.
>  
> +     DTYPE_ARRAY_CTRL        Array Controller device  (for  exam-
> +                             ple, RAID).
> +
> +     DTYPE_ESI               Enclosure services device.
> +
> +     DTYPE_RBC               Simplified direct-access device
> +
> +     DTYPE_OCRW              Optical card reader/writer device.
> +
> +     DTYPE_BRDIGE            Bridge
> +
> +     DTYPE_OSD               Object-based storage device.
> +
>       DTYPE_UNKNOWN           Unknown or no device type.
>  
>       DTYPE_MASK              Mask to  isolate  Peripheral  Device
> @@ -110,9 +136,9 @@
>  
>       DPQ_VUNIQ               This is a vendor-unique qualifier.
>  
> +     DPQ_MASK                Mask to  isolate  Peripheral  Qualifier
> +                             field.
>  
> -
> -
>       DTYPE_NOTPRESENT is the peripheral qualifier  DPQ_NEVER  and
>       the peripheral device type DTYPE_UNKNOWN combined.
>  
> @@ -133,22 +159,58 @@
>       inq_trmiop, if set, indicates that the device  supports  the
>       TERMINATE I/O PROCESS message.
>  
> -     inq_rdf, if reset, indicates the  INQUIRY data format is  as
> -     specified in SCSI-1.
> +     inq_normaca, if set, indicates that the device supports
> +     setting the NACA bit to 1 in CDB.
>  
> -     inq_inq_len is the additional length  field  that  specifies
> -     the length in bytes of the parameters.
> +     inq_hisup, if set, indicates the SCSI target device uses
> +     the hierarchical addressing model to assign LUNs to logical
> +     units.
>  
> -     inq_reladdr, if set, indicates that the device supports  the
> -     relative addressing mode of this logical unit.
> +     inq_rdf, indicates the  INQUIRY data response data format:
> +     RDF_LEVEL0 means that this structure complies with SCSI-1
> +     spec, RDF_CCS means that this structure complies with CCS
> +     pseudo-spec, and RDF_SCSI2 means that the structure
> +     complies with the SCSI-2/3 spec.
>  
> -     inq_wbus32, if set, indicates that the device  supports  32-
> -     bit wide data transfers.
> +     inq_inq_len is the additional length  field  that
> +     specifies the length in bytes of the parameters.
>  
> -     inq_wbus16, if set, indicates that the device  supports  16-
> -     bit wide data transfers.
> +     inq_sccs, if set, indicates the target device contains an
> +     embedded storage array controller component.
>  
> -     inq_sync, if set, indicates that the  device  supports  syn-
> +X    inq_acc, if set, indicates that the logical unit contains
> +X    an access controls coordinator.
> +
> +     inq_tpgse, if set, indicates that implicit asymmetric
> +     logical unit access is supported.
> +
> +     inq_tpgsi, if set, indicates that explicit asymmetric
> +     logical unit access is supported.
> +
> +X    inq_3pc, if set, indicates that the SCSI target device
> +X    supports third-party copy commands.
> +
> +X    inq_protect, if set, that the logical unit supports protection
> +X    information.
> +
> +     inq_bque, if set, indicates that the logical unit supports
> +     basic task management.
> +
> +     inq_encserv, if set, indicates that the device contains an
> +     embedded enclosure services component (ses(7d)).
> +
> +     inq_dualp, if set, indicates the SCSI target device
> +     supports two or more ports.
> +
> +     inq_mchngr, if set, indicates the SCSI target device
> +     supports commands to control an attached media changer.
> +
> +     inq_addr16 device supports 16-bit wide SCSI addresses.
> +
> +     inq_wbus16, if set, indicates that the device  supports
> +     16-bit wide data transfers.
> +
> +     inq_sync, if set, indicates that the  device  supports syn-
>       chronous data transfers.
>  
>       inq_linked, if  set,  indicates  that  the  device  supports
> @@ -162,19 +224,28 @@
>       this bit is set, this indicates  that  the  device  responds
>       with the soft  RESET alternative.
>  
> -     inq_vid contains eight bytes of  ASCII data identifying  the
> +     inq_vid contains eight bytes of  ASCII data identifying the
>       vendor of the product.
>  
> -     inq_pid contains sixteen bytes of  ASCII data as defined  by
> -     the vendor.
> -
> -     inq_revision contains four bytes of  ASCII data  as  defined
> +     inq_pid contains sixteen bytes of  ASCII data as defined
>       by the vendor.
>  
> +     inq_revision contains four bytes of  ASCII data  as
> +     defined by the vendor.
> +
> +     inq_clk clocking of SPI3 target port.
> +
> +     inq_qas SPI3 target port supports quick arbitration and
> +     selection.
> +
> +     inq_ius SPI3 target device supports information unit transfers.
> +
>  SEE ALSO
>       scsi_probe(9F), scsi_device(9S)
>  
>       ANSI Small Computer System Interface-2 (SCSI-2)
> +     ANSII SCSI Primary Commands - 3 (SPC-3)
> +     http://t10.org/drafts.htm#spc3
>  
>       Writing Device Drivers
>   




More information about the opensolaris-arc mailing list