Go to main content

man pages section 8: System Administration Commands

Exit Print View

Updated: Wednesday, July 27, 2022

smp_write_gpio (8)


smp_write_gpio - invoke WRITE GPIO REGISTER (ENHANCED) SMP function


smp_write_gpio    [--count=CO]    [--data=H,H...]    [--help]   [--hex]
[--index=IN] [--interface=PARAMS] [--raw]  [--sa=SAS_ADDR]  [--type=TY]
[--verbose] [--version] SMP_DEVICE[,N]


SMP_WRITE_GPIO(8)                  SMP_UTILS                 SMP_WRITE_GPIO(8)

       smp_write_gpio - invoke WRITE GPIO REGISTER (ENHANCED) SMP function

       smp_write_gpio    [--count=CO]    [--data=H,H...]    [--help]   [--hex]
       [--index=IN] [--interface=PARAMS] [--raw]  [--sa=SAS_ADDR]  [--type=TY]
       [--verbose] [--version] SMP_DEVICE[,N]

       Sends  a  SAS Serial Management Protocol (SMP) WRITE GPIO REGISTER or a
       WRITE GPIO REGISTER ENHANCED function request to an SMP target. The SMP
       target  is  identified by the SMP_DEVICE and the SAS_ADDR. Depending on
       the interface, the SAS_ADDR may be deduced from the SMP_DEVICE. The mpt
       interface  uses  SMP_DEVICE  to  identify  a HBA (an SMP initiator) and
       needs the additional ,N to differentiate between HBAs if there are mul-
       tiple present.

       This  function  is  defined  in  SFF-8485  ( see www.sffcommittee.com )
       together with its corresponding READ GPIO REGISTER (ENHANCED) SMP func-
       tion.   The  other  SMP  functions  are  defined  in  SAS  documents at
       www.t10.org .  SFF-8485 defines a curious device called a "virtual  SMP
       port"  that lives in a host bus adapter (HBA) and allows SMP to manipu-
       late the sideband signals in wide internal cables. To stop  other  ini-
       tiators  in a multi-initiator domain from accessing those sideband sig-
       nals, the virtual SMP (target) port is  not  indicated  in  a  DISCOVER

       For notes on the SMP WRITE GPIO REGISTER ENHANCED function see the sec-
       tion on the ENHANCED FUNCTION below.

       Mandatory arguments to long options are mandatory for short options  as

       -c, --count=CO
              where  CO  is the register count. This is the number of (4 byte)
              registers to send. The default value is 1.

       -d, --data=H,H...
              this option supplies a comma separated list of hexadecimal bytes
              (0 to ff inclusive) that will be used as write data in the WRITE
              GPIO REGISTER request. The number of bytes  supplied  should  be
              four  times  --count=C  The  first 4 bytes will become the first
              register written.

       -d, --data=-
              reads string of hexadecimal bytes from stdin. Spaces,  tabs  and
              line feeds additionally are permitted as separators.

       -E, --enhanced
              sends  a WRITE GPIO REGISTER ENHANCED function request (default:
              send a WRITE GPIO REGISTER function request).

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

       -H, --hex
              output the response (less the CRC field) in hexadecimal.

       -i, --index=IN
              where IN is the register index. This value is  origin  zero  and
              its  default value is 0. The request will send --count=CO regis-
              ters starting from --index=IN of the given --type=TY.

       -I, --interface=PARAMS
              interface specific parameters. In this case  "interface"  refers
              to  the  path through the operating system to the SMP initiator.
              See the smp_utils man page for more information.

       -r, --raw
              send the response (less the CRC field) to stdout in binary.  All
              error messages are sent to stderr.

       -s, --sa=SAS_ADDR
              specifies  the  SAS  address of the SMP target device. Typically
              this is an expander. This  option  may  not  be  needed  if  the
              SMP_DEVICE  has the target's SAS address within it. The SAS_ADDR
              is in decimal but most SAS addresses are shown  in  hexadecimal.
              To  give  a  number in hexadecimal either prefix it with '0x' or
              put a trailing 'h' on it.

       -t, --type=TY
              where  TY  is  the  register  type.  The  default  value  is   0
              (GPIO_CFG).  The request will send --count=CO registers starting
              from --index=IN of the given --type=TY.

       -v, --verbose
              increase the verbosity of  the  output.  Can  be  used  multiple

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

       In  the  technical review of SAS-2 prior to standardization in this t10
       document: 08-212r8.pdf (page 871 or 552) there is a  comment  that  the
       READ GPIO REGISTER and WRITE GPIO REGISTER function headers (i.e. first
       4 bytes) do not comply with all the other SMP functions in SAS-2.

       There is a suggestion that enhanced variants be introduced in the  next
       version of the SFF-8485 document. If that ever happened then it has not
       been made public. In SAS-2.1 both the  READ  and  WRITE  GPIO  REGISTER
       functions  have been made obsolete and the corresponding ENHANCED func-
       tion numbers are "restricted" for SFF-8485.

       If the --enhanced option is given then the ENHANCED function number  is
       sent;  the  register  type,  index  and count fields (1  byte each) are
       increased by two byte positions leaving enough space  for  a  compliant
       SAS-2 SMP header to be built.

       The  SMP  WRITE  GPIO  REGISTER  function  is  defined in SFF-8485 (see
       www.sffcommittee.com ) together with its corresponding READ GPIO REGIS-
       TER SMP function.

       Written by Douglas Gilbert.

       Report bugs to <dgilbert at interlog dot com>.

       Copyright (C) 2006-2011 Douglas Gilbert
       This  software is distributed under a FreeBSD license. There is NO war-
       ranty; not even for MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PUR-

       See attributes(7) for descriptions of the following attributes:

       |Availability   | system/storage/smp_utils |
       |Stability      | Uncommitted              |

       smp_utils, smp_read_gpio(smp_utils)

       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source was downloaded from  http://sg.danny.cz/sg/p/smp_utils-0.98.tgz.

       Further information about this software can be found on the open source
       community website at http://sg.danny.cz/sg/smp_utils.html.

smp_utils-0.97                    August 2011                SMP_WRITE_GPIO(8)