Add design notes - UART abstraction
This adds notes from an email that explains how to serve more than one
console:
https://lists.ozlabs.org/pipermail/openbmc/2020-March/020819.html
Signed-off-by: Joseph Reynolds <joseph-reynolds@charter.net>
Change-Id: Id6e87c7b0dc421e4e7aa62f74e797ee38f9d3fb3
diff --git a/README.md b/README.md
index 24f3786..3abb9b6 100644
--- a/README.md
+++ b/README.md
@@ -30,3 +30,33 @@
```
To disconnect the client, use the standard `~.` combination.
+
+
+## Underlying design
+
+This shows how the host UART connection is abstracted within the BMC as a Unix
+domain socket.
+
+```
+ +--------------------------------------------------------------------------------------------+
+ | |
+ | obmc-console-client unix domain socket obmc-console-server |
+ | |
+ | +---------------------+ +------------------------+ |
+ | | client.2200.conf | +---------------------+ | server.ttyVUART0.conf | |
+ +---+--+ +---------------------+ | | +------------------------+ +--------+-------+
+Network | 2200 +--> +->+ @obmc-console.host0 +<-+ <--+ /dev/ttyVUART0 | UARTs
+ +---+--+ | socket-id = "host0" | | | | socket-id = "host0" | +--------+-------+
+ | | | +---------------------+ | | |
+ | +---------------------+ +------------------------+ |
+ | |
+ | |
+ | |
+ +--------------------------------------------------------------------------------------------+
+```
+
+This supports multiple independent consoles. The socket-id is a unique
+portion for the unix domain socket created by the obmc-console-server
+instance. The server needs to know this because it needs to know what to name
+the pipe; the client needs to know it as it needs to form the abstract socket
+name to which to connect.