From nobody Mon Mar 09 17:18:26 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fV3cz27gmz6TXmp for ; Mon, 09 Mar 2026 17:18:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fV3cz0vyZz3QXk for ; Mon, 09 Mar 2026 17:18:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773076707; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=a3ctg7zqq4yK9ZYpzdahhvITnLuSU+NtVSuyxkiVvTw=; b=mmZoJgjUZaBqvu0QzC0dgL+YUe7cqdGxdjVksmCcNKacWK82xtFTVp0OM7+7+/Zvo57EyZ hqzzvhmFg2ks+iJxs5V1x9BVIhgMx+b4WOPT2wJ/ZgndZ1pVIqBmoFAFY6c2sx7truhaXu mVhlMURHiS++UPZ3nVU17FFFB+hjWmRhdg/KI1RzMbSTS/V8BMpStgEDct4DX05v8gPduA X6niFb61qdRkCQ8QSnCwIGFgEM4xtgH0kLs+da+dhPc2lsLxUGKpUmVuGpsN8Ftm1n0tdd QAZiF/xdkWNaS+AsbfJkeQWZIMxNEDuv+sGAp1QVAsGWKvbgLnZpXmc67H8Y2g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1773076707; a=rsa-sha256; cv=none; b=eLrbVsKwOBcbvC2uA5szeQlWRsQ3I+cZ2PfKAfUJh6E+4lqFblSZAawteJQaDCkVESIGfd KvVnR22NXrEOha6Tjl8If281aF7vYChxCPzpg69DO189NtnHfJYcHNFwaUOrD8cbYbUnsA WTQpXQlk7cI9YGWxPnfYs1P0Hcp9j2r6vKxl//pjRm8IzhFat0Kr9C1cUUaLBcHhwYGFdt +1RH8l/TqASaBxVij46plNltesA2POLKqEFq9c1kT9H9pEJgK60K2t9gDg2ZJGLzRAbOLd X6tVkpdckgVH2w+mBHy91HB7gqilQWJVRRm0woOb5uT05E2BvW3ZaDNlBFhdqA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773076707; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=a3ctg7zqq4yK9ZYpzdahhvITnLuSU+NtVSuyxkiVvTw=; b=cHxi4lZyWEu9w4eT6D5n2ilTitpeWPfOmc/rCuZkExJNA3ee7NT6A0MStBkmFnOqRddLvm K0H6g/gMXOHr0+I4ERZgPmfuhXYpX7poqG//E5kUpA1ysjAuSbViGlnGx5ffp7aeh2bpba 783AzLgOw6jqRx22IRBpcgSdfpCFngz4wmUq5pduMveuRTHllzxyn19+6hB1BNZrBXYeUs ZIOiJsCMD9mrRbS6R9ZqIouTtHeN7v4kI9p0EiDepKxO+/8OVb/uOBCdL8cchUAG4+7lQc tUkE7AnVPOZf2DSoAwIVAXXikb1lvuH3S1i8tnPo1/ox5ckrSR+EJQbmvnXlAw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fV3cz080QzbWs for ; Mon, 09 Mar 2026 17:18:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 454bf by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 09 Mar 2026 17:18:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Navdeep Parhar Subject: git: 87c6ec168579 - main - cxgbetool: create one backend routine for all the loadX cmds List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: np X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 87c6ec16857939693ee4d5bef9e8aa8b04bad5dc Auto-Submitted: auto-generated Date: Mon, 09 Mar 2026 17:18:26 +0000 Message-Id: <69af00e2.454bf.7c493fdc@gitrepo.freebsd.org> The branch main has been updated by np: URL: https://cgit.FreeBSD.org/src/commit/?id=87c6ec16857939693ee4d5bef9e8aa8b04bad5dc commit 87c6ec16857939693ee4d5bef9e8aa8b04bad5dc Author: Navdeep Parhar AuthorDate: 2026-03-08 19:34:15 +0000 Commit: Navdeep Parhar CommitDate: 2026-03-09 17:04:37 +0000 cxgbetool: create one backend routine for all the loadX cmds They are all doing almost the same thing so it makes sense to have one common routine. The new routine supports non-regular files too. eg. # cxgbetool chnex0 loadfw <(fetch -qo - http://srv/t7fw.bin) MFC after: 1 week Sponsored by: Chelsio Communications Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D55747 --- usr.sbin/cxgbetool/cxgbetool.c | 164 ++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 102 deletions(-) diff --git a/usr.sbin/cxgbetool/cxgbetool.c b/usr.sbin/cxgbetool/cxgbetool.c index 68de86d74092..49ba547e5dae 100644 --- a/usr.sbin/cxgbetool/cxgbetool.c +++ b/usr.sbin/cxgbetool/cxgbetool.c @@ -2169,16 +2169,19 @@ get_sge_context(int argc, const char *argv[]) } static int -loadfw(int argc, const char *argv[]) +real_load_file(unsigned long ioc, const char *iocname, const char *fname, + struct t4_bootrom *br) { - int rc, fd; + int rc, fd, n; struct t4_data data = {0}; - const char *fname = argv[0]; struct stat st = {0}; + const int bufsz = 2 * 1024 * 1024; - if (argc != 1) { - warnx("loadfw: incorrect number of arguments."); - return (EINVAL); + if (strcmp(fname, "clear") == 0) { + if (br == NULL) + return (real_doit(ioc, &data, iocname)); + else + return (real_doit(ioc, br, iocname)); } fd = open(fname, O_RDONLY); @@ -2193,61 +2196,75 @@ loadfw(int argc, const char *argv[]) return (errno); } - data.len = st.st_size; - data.data = mmap(0, data.len, PROT_READ, MAP_PRIVATE, fd, 0); - if (data.data == MAP_FAILED) { - warn("mmap"); - close(fd); - return (errno); + if (st.st_mode & S_IFREG) { + data.len = st.st_size; + data.data = mmap(0, data.len, PROT_READ, MAP_PRIVATE, fd, 0); + if (data.data == MAP_FAILED) { + warn("mmap %u", data.len); + return (errno); + } + } else { + data.data = malloc(bufsz); + if (data.data == NULL) { + warnx("malloc failed."); + return (ENOMEM); + } + for (data.len = 0; data.len <= bufsz; data.len += n) { + n = read(fd, data.data + data.len, bufsz - data.len); + if (n == -1) { + warn("read(%s, %u)", fname, data.len); + free(data.data); + close(fd); + return (errno); + } + if (n == 0) + break; + } + if (data.len == bufsz) + warnx("file '%s' contents > %u ignored.", fname, bufsz); } - rc = doit(CHELSIO_T4_LOAD_FW, &data); - munmap(data.data, data.len); + if (br == NULL) + rc = real_doit(ioc, &data, iocname); + else { + br->len = data.len; + br->data = data.data; + rc = real_doit(ioc, br, iocname); + } + if (st.st_mode & S_IFREG) + munmap(data.data, data.len); + else + free(data.data); close(fd); return (rc); } +#define load_file(ioc, fname) real_load_file(ioc, #ioc, fname, NULL) +#define load_file_br(ioc, fname, br) real_load_file(ioc, #ioc, fname, br) static int -loadcfg(int argc, const char *argv[]) +loadfw(int argc, const char *argv[]) { - int rc, fd; - struct t4_data data = {0}; const char *fname = argv[0]; - struct stat st = {0}; if (argc != 1) { - warnx("loadcfg: incorrect number of arguments."); + warnx("loadfw: incorrect number of arguments."); return (EINVAL); } - if (strcmp(fname, "clear") == 0) - return (doit(CHELSIO_T4_LOAD_CFG, &data)); - - fd = open(fname, O_RDONLY); - if (fd < 0) { - warn("open(%s)", fname); - return (errno); - } + return (load_file(CHELSIO_T4_LOAD_FW, fname)); +} - if (fstat(fd, &st) < 0) { - warn("fstat"); - close(fd); - return (errno); - } +static int +loadcfg(int argc, const char *argv[]) +{ + const char *fname = argv[0]; - data.len = st.st_size; - data.len &= ~3; /* Clip off to make it a multiple of 4 */ - data.data = mmap(0, data.len, PROT_READ, MAP_PRIVATE, fd, 0); - if (data.data == MAP_FAILED) { - warn("mmap"); - close(fd); - return (errno); + if (argc != 1) { + warnx("loadcfg: incorrect number of arguments."); + return (EINVAL); } - rc = doit(CHELSIO_T4_LOAD_CFG, &data); - munmap(data.data, data.len); - close(fd); - return (rc); + return (load_file(CHELSIO_T4_LOAD_CFG, fname)); } static int @@ -2317,12 +2334,10 @@ done: static int loadboot(int argc, const char *argv[]) { - int rc, fd; long l; char *p; struct t4_bootrom br = {0}; const char *fname = argv[0]; - struct stat st = {0}; if (argc == 1) { br.pf_offset = 0; @@ -2344,75 +2359,20 @@ loadboot(int argc, const char *argv[]) return (EINVAL); } - if (strcmp(fname, "clear") == 0) - return (doit(CHELSIO_T4_LOAD_BOOT, &br)); - - fd = open(fname, O_RDONLY); - if (fd < 0) { - warn("open(%s)", fname); - return (errno); - } - - if (fstat(fd, &st) < 0) { - warn("fstat"); - close(fd); - return (errno); - } - - br.len = st.st_size; - br.data = mmap(0, br.len, PROT_READ, MAP_PRIVATE, fd, 0); - if (br.data == MAP_FAILED) { - warn("mmap"); - close(fd); - return (errno); - } - - rc = doit(CHELSIO_T4_LOAD_BOOT, &br); - munmap(br.data, br.len); - close(fd); - return (rc); + return (load_file_br(CHELSIO_T4_LOAD_BOOT, fname, &br)); } static int loadbootcfg(int argc, const char *argv[]) { - int rc, fd; - struct t4_data bc = {0}; const char *fname = argv[0]; - struct stat st = {0}; if (argc != 1) { warnx("loadbootcfg: incorrect number of arguments."); return (EINVAL); } - if (strcmp(fname, "clear") == 0) - return (doit(CHELSIO_T4_LOAD_BOOTCFG, &bc)); - - fd = open(fname, O_RDONLY); - if (fd < 0) { - warn("open(%s)", fname); - return (errno); - } - - if (fstat(fd, &st) < 0) { - warn("fstat"); - close(fd); - return (errno); - } - - bc.len = st.st_size; - bc.data = mmap(0, bc.len, PROT_READ, MAP_PRIVATE, fd, 0); - if (bc.data == MAP_FAILED) { - warn("mmap"); - close(fd); - return (errno); - } - - rc = doit(CHELSIO_T4_LOAD_BOOTCFG, &bc); - munmap(bc.data, bc.len); - close(fd); - return (rc); + return (load_file(CHELSIO_T4_LOAD_BOOTCFG, fname)); } /*