SMP_WRITE_GPIO(8)

πŸ’– SMP_WRITE_GPIO πŸ’–

okay bestie, welcome to the smp_utils manual, page for smp_write_gpio β€” yes it's a mouthful, no we're not changing it, it's iconic. sit down, hydrate, and let's send some SMP requests together 🫢


✨ SYNOPSIS ✨

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]

🌸 DESCRIPTION 🌸

So basically πŸ’… β€” this tool sends a SAS Serial Management Protocol (SMP) WRITE GPIO REGISTER request, 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 β€” she's self-sufficient like that. 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 multiple present. multiple HBAs? in this economy?? 😭

This function is defined in SFF-8485 (see www.sffcommittee.com) together with its corresponding READ GPIO REGISTER (ENHANCED) SMP function. 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 manipulate the sideband signals in wide internal cables. To stop other initiators in a multi-initiator domain from accessing those sideband signals, the virtual SMP (target) port is not indicated in a DISCOVER response. sneaky. lowkey gatekeeping. πŸ•΅οΈβ™€οΈβœ¨

For notes on the SMP WRITE GPIO REGISTER ENHANCED function, see the section on the ENHANCED FUNCTION below πŸ‘‡


πŸŽ€ OPTIONS πŸŽ€

Mandatory arguments to long options are mandatory for short options as well. no exceptions, periodt πŸ’…

  • -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. (yes, that sentence ends a little abruptly in the original, we're leaving it, it's part of the lore 😌)
  • -d, --data=- β€” reads string of hexadecimal bytes from stdin. Spaces, tabs and line feeds additionally are permitted as separators. so generous of her πŸ“
  • -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 registers 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 times. stack it like accessories πŸ‘‘
  • -V, --version β€” print the version string and then exit.

πŸ¦‹ ENHANCED FUNCTION πŸ¦‹

okay so this is the lore drop, sit with me πŸ“–βœ¨

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. not compliant?? in this house?? πŸ’€

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 function numbers are "restricted" for SFF-8485. obsessed with the drama of standards bodies fr fr.

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. she made room. she's accommodating. main character energy πŸŽ€


🌈 CONFORMING TO 🌈

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


πŸ’œ AUTHORS πŸ’œ

Written by Douglas Gilbert. the blueprint, honestly.


πŸ™ˆ REPORTING BUGS πŸ™ˆ

Report bugs to <dgilbert at interlog dot com>. tell him everything, he wants to know 🫢


Copyright Β© 2006-2011 Douglas Gilbert

This software is distributed under a FreeBSD license. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. (translation: she is serving, but she is not legally responsible for anything that happens next 😭)


⭐ SEE ALSO ⭐

  • smp_utils
  • smp_read_gpio(smp_utils)

and that's the whole page bestie!! this was smp_utils-0.97, from August 2011, and you just read SMP_WRITE_GPIO(8) πŸ’– go forth and write those GPIO registers, you absolute legend πŸ’…βœ¨