[Pdbg] [PATCH v2 17/24] libsbefifo: Add support for custom transport for sbefifo

Amitay Isaacs amitay at ozlabs.org
Thu Nov 7 13:28:01 AEDT 2019


Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 libsbefifo/libsbefifo.h      | 4 ++++
 libsbefifo/operation.c       | 8 ++++++--
 libsbefifo/sbefifo_private.h | 4 ++++
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/libsbefifo/libsbefifo.h b/libsbefifo/libsbefifo.h
index 536b24e..7989b21 100644
--- a/libsbefifo/libsbefifo.h
+++ b/libsbefifo/libsbefifo.h
@@ -50,6 +50,10 @@
 
 struct sbefifo_context;
 
+typedef int (*sbefifo_transport_fn)(uint8_t *msg, uint32_t msg_len,
+				    uint8_t *out, uint32_t *out_len,
+				    void *private_data);
+
 int sbefifo_connect(const char *fifo_path, struct sbefifo_context **out);
 void sbefifo_disconnect(struct sbefifo_context *sctx);
 
diff --git a/libsbefifo/operation.c b/libsbefifo/operation.c
index 792b2ae..07d9f64 100644
--- a/libsbefifo/operation.c
+++ b/libsbefifo/operation.c
@@ -147,7 +147,7 @@ int sbefifo_operation(struct sbefifo_context *sctx,
 	assert(msg);
 	assert(msg_len > 0);
 
-	if (sctx->fd == -1)
+	if (!sctx->transport && sctx->fd == -1)
 		return ENOTCONN;
 
 	/*
@@ -163,7 +163,11 @@ int sbefifo_operation(struct sbefifo_context *sctx,
 
 	LOG("request: cmd=%08x, len=%u\n", cmd, msg_len);
 
-	rc = sbefifo_transport(sctx, msg, msg_len, buf, &buflen);
+	if (sctx->transport)
+		rc = sctx->transport(msg, msg_len, buf, &buflen, sctx->priv);
+	else
+		rc = sbefifo_transport(sctx, msg, msg_len, buf, &buflen);
+
 	if (rc) {
 		free(buf);
 		return rc;
diff --git a/libsbefifo/sbefifo_private.h b/libsbefifo/sbefifo_private.h
index 41966ba..ef432c4 100644
--- a/libsbefifo/sbefifo_private.h
+++ b/libsbefifo/sbefifo_private.h
@@ -18,6 +18,7 @@
 #define __SBEFIFO_PRIVATE_H__
 
 #include <stdint.h>
+#include "libsbefifo.h"
 
 #define SBEFIFO_CMD_CLASS_CONTROL        0xA100
 #define   SBEFIFO_CMD_EXECUTE_ISTEP        0x01
@@ -64,6 +65,9 @@
 struct sbefifo_context {
 	int fd;
 
+	sbefifo_transport_fn transport;
+	void *priv;
+
 	uint32_t status;
 	uint8_t *ffdc;
 	uint32_t ffdc_len;
-- 
2.21.0



More information about the Pdbg mailing list