|
@@ -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.
|