git: 808c82daab85 - main - thunderbolt: Factor out router_prepare_cmd()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 14 Sep 2026 15:48:47 UTC
The branch main has been updated by obiwac:
URL: https://cgit.FreeBSD.org/src/commit/?id=808c82daab85c2c5576f37bcf371c3e1a51f71d9
commit 808c82daab85c2c5576f37bcf371c3e1a51f71d9
Author: Aymeric Wibo <obiwac@FreeBSD.org>
AuthorDate: 2026-09-14 14:19:49 +0000
Commit: Aymeric Wibo <obiwac@FreeBSD.org>
CommitDate: 2026-09-14 15:44:00 +0000
thunderbolt: Factor out router_prepare_cmd()
Common code between router_prepare_read() & router_prepare_write().
Eventually will be used by other commands (e.g. hotplugging) aswell.
Reviewed by: ngie
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D59668
---
sys/dev/thunderbolt/router.c | 54 ++++++++++++++++----------------------------
1 file changed, 19 insertions(+), 35 deletions(-)
diff --git a/sys/dev/thunderbolt/router.c b/sys/dev/thunderbolt/router.c
index 52b092d09ae7..22377533dcc6 100644
--- a/sys/dev/thunderbolt/router.c
+++ b/sys/dev/thunderbolt/router.c
@@ -61,6 +61,8 @@
static int router_alloc_cmd(struct router_softc *, struct router_command **);
static void router_free_cmd(struct router_softc *, struct router_command *);
static int _tb_router_attach(struct router_softc *);
+static void router_prepare_cmd(struct router_softc *, struct router_command *,
+ size_t, uint16_t);
static void router_prepare_read(struct router_softc *, struct router_command *,
int);
static void router_prepare_write(struct router_softc *, struct router_command *,
@@ -604,8 +606,8 @@ router_free_cmd(struct router_softc *sc, struct router_command *cmd)
}
static void
-router_prepare_read(struct router_softc *sc, struct router_command *cmd,
- int len)
+router_prepare_cmd(struct router_softc *sc, struct router_command *cmd,
+ size_t len, uint16_t pdf)
{
struct nhi_cmd_frame *nhicmd;
uint32_t *msg;
@@ -621,56 +623,38 @@ router_prepare_read(struct router_softc *sc, struct router_command *cmd,
nhicmd->data[i] = htobe32(nhicmd->data[i]);
msg = (uint32_t *)nhicmd->data;
- msg[msglen] = htobe32(tb_calc_crc(nhicmd->data, len-4));
+ /* The last 4 bytes of data is the CRC. Compute CRC for just data. */
+ msg[msglen] = htobe32(tb_calc_crc(nhicmd->data, len - 4));
- nhicmd->pdf = PDF_READ;
+ nhicmd->pdf = pdf;
nhicmd->req_len = len;
nhicmd->timeout = NHI_CMD_TIMEOUT;
nhicmd->retries = 0;
- nhicmd->resp_buffer = (uint32_t *)cmd->resp_buffer;
- nhicmd->resp_len = (cmd->dwlen + 3) * 4;
nhicmd->context = cmd;
cmd->retries = CFG_DEFAULT_RETRIES;
cmd->timeout = CFG_DEFAULT_TIMEOUT;
-
- return;
}
static void
-router_prepare_write(struct router_softc *sc, struct router_command *cmd,
+router_prepare_read(struct router_softc *sc, struct router_command *cmd,
int len)
{
- struct nhi_cmd_frame *nhicmd;
- uint32_t *msg;
- int msglen, i;
-
- KASSERT(cmd != NULL, ("cmd cannot be NULL\n"));
- KASSERT(len != 0, ("Invalid zero-length command\n"));
- KASSERT(len % 4 == 0, ("Message must be 32bit padded\n"));
+ router_prepare_cmd(sc, cmd, len, PDF_READ);
- nhicmd = cmd->nhicmd;
- msglen = (len - 4) / 4;
- for (i = 0; i < msglen; i++)
- nhicmd->data[i] = htobe32(nhicmd->data[i]);
-
- msg = (uint32_t *)nhicmd->data;
- msg[msglen] = htobe32(tb_calc_crc(nhicmd->data, len - 4));
-
- nhicmd->pdf = PDF_WRITE;
- nhicmd->req_len = len;
-
- nhicmd->timeout = NHI_CMD_TIMEOUT;
- nhicmd->retries = 0;
- nhicmd->resp_buffer = (uint32_t *)cmd->resp_buffer;
- nhicmd->resp_len = (cmd->dwlen + 3) * 4;
- nhicmd->context = cmd;
+ cmd->nhicmd->resp_buffer = (uint32_t *)cmd->resp_buffer;
+ cmd->nhicmd->resp_len = (cmd->dwlen + 3) * 4;
+}
- cmd->retries = CFG_DEFAULT_RETRIES;
- cmd->timeout = CFG_DEFAULT_TIMEOUT;
+static void
+router_prepare_write(struct router_softc *sc, struct router_command *cmd,
+ int len)
+{
+ router_prepare_cmd(sc, cmd, len, PDF_WRITE);
- return;
+ cmd->nhicmd->resp_buffer = (uint32_t *)cmd->resp_buffer;
+ cmd->nhicmd->resp_len = (cmd->dwlen + 3) * 4;
}
static int