From nobody Mon Mar 09 17:18:26 2026 X-Original-To: dev-commits-src-all@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 4fV3d41N3Kz6TXk7 for ; Mon, 09 Mar 2026 17:18:32 +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 4fV3d40vPYz3QkV for ; Mon, 09 Mar 2026 17:18:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773076712; 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=HojrTL1W7wXLzPVu01ipJWronAJOHT/9OCMezl41mP/rLSRa8BnNXgflIEXhmI55AtmZuJ lp3xtuXAOhhqjEDrkcPi1X76J63YIHkGDvHC0IHVLmQ1nrJYYcTIa59aHoDbFAdHPh3YNX fAUR59a38t/oszSIi//QAcgADm3GbF4v/1bA1V6m3TlJEo7YSsqEqApiDkrGgnM2iTtVI/ rylwsQM43lrUng9S04ulmS0fxiJDZk4fJp5R5/eXVJrsSbJdj8BMPaS4k1JMFIt5b5jk57 VoaCrW32UKRsQgVX8OWV7YDYM9Pzd29dk2q+644vi6lsKEmBXafI8DggIlQniA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1773076712; a=rsa-sha256; cv=none; b=SxTv6FKIxST+p4o0PqSFY7Df9OJpM2yhKZCfTRwV2LaCd1GkvWs047Cdy1iqWj9Jplivhc O4GSjXXRJyWgyDxtde6gGAeUyiX52gjidFJzB730NLIZkNz/WFAlgzftBiRu0IlKJTLD7G hwyP89sNpv25eljyo320gOoNqFKbPkA/5ZO5ZLDm0mo1Je4Gw9NMEsc34TfAjjEcKmvbv2 iiUoUFaBXbQA8gply1ehYit539b9BM8rSkK7jZcUYD4aO2PcPqaQ57QWnD1zVCXKHUThi+ b03WqbU1a/Y/Gd0XTGtjk0OhD4SO8XAQBcqw977kSIZr8G6lWr338bIOLvlVKA== 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=1773076712; 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=wzXrzaVlv6PQ6lmqPGamCRZ1K4MU/ql1xehpSXFW87N/6FeTRDkJ2YphqJn92Exp7e6dMH ApB/E+Oiy6sUxMByhwBvuZR2lKqMS/fGr21JLpBmAGgXESaJa7FaI+d+I+bGyQVmdQvs+0 j8jkbtuYF+/iGO3GGceyDAua8gvL6FYWW7royCvPs9iqtnWdTEiF1iBwVLFonCXAXVrMqv i8AH1nh53iFFxAhY2G/jvEyTyKvcZROTXD6rdI0z4lwU5bI53TYOl5RnrmwpxiawGdMCZ3 v7V8CT67r8EN+9pEVIdutddqjecaCNio88/3Izm8ZbvBWinfK5xEFpBG14rdvw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fV3d370ktzZsx for ; Mon, 09 Mar 2026 17:18:31 +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 all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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)); } /*