Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
SG_WR_MODE(8)			    SG3_UTILS			   SG_WR_MODE(8)

NAME
     sg_wr_mode - write (modify) SCSI mode page

SYNOPSIS
     sg_wr_mode  [--cfile=CF]  [--contents=H,H...]  [--dbd]  [--force]	[--help]
     [--len=10|6] [--mask=M,M...] [--page=PG_H[,SPG_H]] [--raw] [--rtd] [--save]
     [--six] [--verbose] [--version] DEVICE

DESCRIPTION
     Writes a modified mode page to DEVICE. Uses the SCSI MODE SENSE  (6  or  10
     byte variant) command to fetch the existing mode data which includes a mode
     page  (or	subpage).  It  then combines that with the contents, potentially
     masked, and writes the modified mode page with the SCSI MODE SELECT  (6  or
     10  byte  variant) command. This utility does not modify the block descrip-
     tor(s); if any block descriptors are fetched by the MODE SENSE command then
     the same block descriptors are written back with the following MODE  SELECT
     command.

     If  the  --rtd  option  is given then most other options apart from --save,
     --len=10|6 and --six are ignored. In this case only a MODE  SELECT  command
     is  sent  to the DEVICE with the RTD bit (Revert To Defaults) set. This bit
     was added to this command in SPC-5 revision 11, so older  devices	may  not
     support  it.  The Extended Inquiry VPD page has the RTD_SUP bit to indicate
     whether the DEVICE supports the RTD bit in the MODE SELECT(6 and  10)  com-
     mands.  When  the --rtd option is given the rest of this section can be ig-
     nored.

     If a contents option  is  not  given  then  the  various  components  (i.e.
     header,  block  descriptor(s) and mode page) of the "current" values of the
     existing mode page are printed out. In this case the mode page is	not  al-
     tered on the device.

     If  the  contents are specified, and a mask is not specified, then the con-
     tents must match the existing mode  page  in  various  aspects  unless  the
     --force  option  is given. These include length, mode page code and subpage
     code if applicable. If all is well then the contents string is  written  to
     DEVICE as the new mode page.

     If  both contents and mask strings are specified then only bit positions in
     the contents corresponding to set bits in the mask are taken while the  ex-
     isting  mode page supplies bit positions corresponding to clear bits.  When
     a mask is given then the mask and/or the contents may be shorter  than  the
     existing  mode  page. If the mask is shorter than the contents then the re-
     maining bytes are taken from the contents. If the contents are shorter than
     the existing mode page then the remaining bytes are taken from the existing
     mod page.

     The force option allows the contents string to be written as the  new  mode
     page  without  any prior checks on the existing mode page. This should only
     be required for vendor specific mode pages. The existing mode data  is  ig-
     nored  apart  from  the  block descriptors which can be suppressed with the
     --dbd option if need be.

     Changing individual fields in a mode page is probably more easily done with
     the sdparm utility. Fields can be identified by acronym or by  a  numerical
     descriptor.

OPTIONS
     Arguments to long options are mandatory for short options as well.

     -C, --cfile=CF
	    where  CF is a file name containing the mode page. See the "HEX, BI-
	    NARY AND JSON FORMATS" section in the sg3_utils manpage for more in-
	    formation. If the --raw option is also given then the contents of FN
	    are treated as binary.

     -c, --contents=H,H...
	    where H,H... is a string of comma  separated  hex  numbers	each  of
	    which  should  resolve  to	a byte value (i.e. 0 to ff inclusive). A
	    (single) space separated string of hex numbers is also  allowed  but
	    the list needs to be in quotes. This is the new contents of the mode
	    page  to  be  written  to  DEVICE,	potentially filtered by the mask
	    string.

     -c, --contents=-
	    reads contents string from stdin. See the --cfile=CF option above.

     -d, --dbd
	    disable block descriptors (DBD flag in cdb). Some device  types  in-
	    clude  block  descriptors  in the mode data returned by a MODE SENSE
	    command. If so the same block descriptors are written  by  the  MODE
	    SELECT command.  This option instructs the MODE SENSE command not to
	    return  any  block descriptors. This would be a sensible default for
	    this utility apart from the fact that not all SCSI	devices  support
	    the DBD bit in the cdb.

     -f, --force
	    force  the	contents  string to be taken as the new mode page, or at
	    least doesn't do checks on the existing mode page. Note that  DEVICE
	    may still reject the new contents for the mode page. Cannot be given
	    with the --mask=M,M... option.

     -h, --help
	    output the usage message then exit.

     -l, --len=10 | 6
	    length  of the SCSI commands (cdb) sent to DEVICE. The default is 10
	    so 10 byte MODE SENSE and MODE SELECT commands are issued. Some  old
	    devices don't support the 10 byte variants hence this option.

     -m, --mask=M,M...
	    where  M,M...  is  a  string  of comma separated hex numbers each of
	    which should resolve to a byte value (i.e. 0  to  ff  inclusive).  A
	    (single)  space  separated string of hex numbers is also allowed but
	    the list needs to be in  quotes.  The  mask  chooses  (bit	by  bit)
	    whether  the new mode page comes from the contents (mask bit set) or
	    from the existing mode page (mask bit clear).  If the mask string is
	    shorter than the contents string then the remaining bytes are  taken
	    from the contents string. If the contents string is shorter than the
	    existing  mode  page then the remaining bytes are taken from the ex-
	    isting mode page (i.e. they are left unaltered).

     -p, --page=PG_H
	    where PG_H is the page code value to fetch and modify. The page code
	    is in hex and should be between 0 and 3e inclusive. Notice that page
	    code 3f to fetch all mode pages is disallowed.

     -p, --page=PG_H,SPG_H
	    where PG_H is the page code value and  SPG_H  is  the  subpage  code
	    value  to fetch and modify. Both values are in hex. The subpage code
	    should be between 0 and fe inclusive. Notice that subpage code ff to
	    fetch all mode subpages (for a given mode page or all mode pages  in
	    the case of 3f,ff) is disallowed.

     -r, --raw
	    when  this option is given then the file given by the --cfile=CF op-
	    tion is treated as binary (the default is to treat it as ASCII hexa-
	    decimal).

     -R, --rtd
	    when this option is given most other actions are bypassed and a MODE
	    SELECT(6 or 10) command is sent to the DEVICE with the RTD bit  set.
	    This  will	cause all current values (and saved values if the --save
	    option is also given) of all mode pages to be reverted to their  de-
	    fault values.

     -s, --save
	    changes the "saved" mode page when MODE SELECT is successful. By de-
	    fault  (i.e.  when	--save is not used) only the "current" mode page
	    values are changed when MODE SELECT is successful. In this case  the
	    new  mode  page  will stay in effect until the device is reset (e.g.
	    power cycled).  When it restarts the "saved"  values  for  the  mode
	    page  will	be  re-instated.   So  to make changes permanent use the
	    --save option.
	    When used with the --rtd option then both the current and saved val-
	    ues in each mode page are reverted to their default values.  In  the
	    absence  of  --save option only the current values in each mode page
	    are reverted to their default values.

     -6, --six
	    this option will cause the 6 byte variants of MODE	SENSE  and  MODE
	    SELECT  commands  to  be used. The default is to use the 10 byte op-
	    tions. This option is equivalent to using the --len=6 option.

     -v, --verbose
	    increase the level of verbosity, (i.e. debug output).

     -V, --version
	    print the version string and then exit.

NOTES
     This utility does not check whether the contents string is trying to modify
     parts of the mode page which are changeable. The device should do that  and
     if some part is not changeable then it should report: "Invalid field in pa-
     rameter list".

     Some mode pages are not saveable. If so an attempt to use the --save option
     should  cause  an	error  to be reported from the device: "Illegal field in
     cdb".

     The device is required to do various checks before it accepts  a  new  mode
     page.  If	these checks fail then the mode page is not altered and either a
     "parameter list length error" or an "invalid field in parameter list" error
     is returned by the device in the sense data.

     The recommended way to modify a mode page is to read it with a MODE  SENSE,
     modify  some part of it then write it back to the device with a MODE SELECT
     command. For example, reading an existing mode  page  can	be  accomplished
     with  'sg_modes  -p=1a  -r  /dev/sdb > mp_1a.txt' (the power condition mode
     page). The mp_1a.txt file can be edited  and  then  used  as  the	contents
     string  to  this  utility	(e.g.  'sg_wr_mode  -p	1a  -s	-c  - /dev/sdb <
     mp_1a.txt').

     Two fields differ between what is read from the device with MODE SENSE  and
     what is written to the device with MODE SELECT: the mode data length is re-
     served (i.e. zero(es)) in a MODE SELECT command while the PS bit ((sub)page
     byte  0  bit  7) in each mode (sub)page is reserved (zero) in a MODE SELECT
     command.  The PS bit given in the contents  string  is  zeroed  unless  the
     --force option is selected.

EXAMPLES
     This  utility can be used together with the sg_modes utility. To re-instate
     the default mode page values (i.e. the mode page values chosen by the manu-
     facturer of the device) as both the current and saved mode page values  the
     following sequence could be used:

       $ sg_modes --control=2 --page=1a -r /dev/sda > t

       $ sg_wr_mode --page=1a --contents=- --save /dev/sda < t

     Next  is  an example of using a mask to modify the "idle condition counter"
     of the "power condition" mode page (0x1a) from 0x28 to 0x37. Note that  the
     change is not saved so the "idle condition counter" will revert to 0x28 af-
     ter the next power cycle. The output from sg_modes is abridged.

      $ sg_modes --page=1a /dev/hdc
      >> Power condition (mmc), page_control: current
      00     1a 0a 00 03 00 00 00 28  00 00 01 2c

      $ sg_wr_mode -p 1a -c 0,0,0,0,0,0,0,37 -m 0,0,0,0,0,0,0,ff /dev/hdc

      $ sg_modes -p 1a /dev/hdc
      >> Power condition (mmc), page_control: current
      00     1a 0a 00 03 00 00 00 37  00 00 01 2c

EXIT STATUS
     The exit status of sg_wr_mode is 0 when it is successful. Otherwise see the
     sg3_utils(8) man page.

AUTHORS
     Written by Douglas Gilbert.

REPORTING BUGS
     Report bugs to <dgilbert at interlog dot com>.

COPYRIGHT
     Copyright (C) 2004-2023 Douglas Gilbert
     This software is distributed under a BSD-2-Clause license. There is NO war-
     ranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
     sdparm(sdparm), sg_modes(sg3_utils), sginfo(sg3_utils)

sg3_utils-1.48			    June 2023			   SG_WR_MODE(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sg_wr_mode&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help