switchtec: Add user interface documentation
authorLogan Gunthorpe <logang@deltatee.com>
Thu, 2 Mar 2017 23:24:32 +0000 (16:24 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 12 Apr 2017 17:23:37 +0000 (12:23 -0500)
Add standard documentation for the sysfs switchtec attributes and a RST
formatted text file which documents the char device interface.  Jonathan
Corbet has indicated he will move this to a new user-space developer
documentation book once it's created.

Tested-by: Krishna Dhulipala <krishnad@fb.com>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Stephen Bates <stephen.bates@microsemi.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Wei Zhang <wzhang@fb.com>
Reviewed-by: Jens Axboe <axboe@fb.com>
Documentation/switchtec.txt [new file with mode: 0644]
MAINTAINERS

diff --git a/Documentation/switchtec.txt b/Documentation/switchtec.txt
new file mode 100644 (file)
index 0000000..4bced4c
--- /dev/null
@@ -0,0 +1,53 @@
+========================
+Linux Switchtec Support
+========================
+
+Microsemi's "Switchtec" line of PCI switch devices is already
+supported by the kernel with standard PCI switch drivers. However, the
+Switchtec device advertises a special management endpoint which
+enables some additional functionality. This includes:
+
+* Packet and Byte Counters
+* Firmware Upgrades
+* Event and Error logs
+* Querying port link status
+* Custom user firmware commands
+
+The switchtec kernel module implements this functionality.
+
+
+Interface
+=========
+
+The primary means of communicating with the Switchtec management firmware is
+through the Memory-mapped Remote Procedure Call (MRPC) interface.
+Commands are submitted to the interface with a 4-byte command
+identifier and up to 1KB of command specific data. The firmware will
+respond with a 4 bytes return code and up to 1KB of command specific
+data. The interface only processes a single command at a time.
+
+
+Userspace Interface
+===================
+
+The MRPC interface will be exposed to userspace through a simple char
+device: /dev/switchtec#, one for each management endpoint in the system.
+
+The char device has the following semantics:
+
+* A write must consist of at least 4 bytes and no more than 1028 bytes.
+  The first four bytes will be interpreted as the command to run and
+  the remainder will be used as the input data. A write will send the
+  command to the firmware to begin processing.
+
+* Each write must be followed by exactly one read. Any double write will
+  produce an error and any read that doesn't follow a write will
+  produce an error.
+
+* A read will block until the firmware completes the command and return
+  the four bytes of status plus up to 1024 bytes of output data. (The
+  length will be specified by the size parameter of the read call --
+  reading less than 4 bytes will produce an error.
+
+* The poll call will also be supported for userspace applications that
+  need to do other things while waiting for the command to complete.
index 16bd75d30ac1cc0e8d59aeac359cc3fd465a8323..5bc3b7c7e0d9a5b3e45acf8dc007010f6dc53377 100644 (file)
@@ -9661,6 +9661,7 @@ M:        Stephen Bates <stephen.bates@microsemi.com>
 M:     Logan Gunthorpe <logang@deltatee.com>
 L:     linux-pci@vger.kernel.org
 S:     Maintained
+F:     Documentation/switchtec.txt
 F:     drivers/pci/switch/switchtec*
 
 PCI DRIVER FOR NVIDIA TEGRA