From nobody Wed Sep 21 14:01:37 2022 X-Original-To: dev-commits-src-branches@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 4MXg7k1kmfz4cYCx; Wed, 21 Sep 2022 14:01:38 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MXg7k0z4xz4CTX; Wed, 21 Sep 2022 14:01:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1663768898; 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=ZVQnz37fVQZMmAhglTUzQbtGGg07yO6fCD0skrawiX0=; b=p6kE9McxyZj40uvqADDQBMusM2oc64+qjfEx12PaYofgRUfAgMf+kXaJy+yhAZFjR79IBg CMc+LlHPk2mX6VkE59N0qc0sRP6bdkA3iHKqc4M/yhsvtxpvHvWALwWByZaW29cyGbNk4+ +lJdxs3NB1R5Py/Q1CQ4XIRvSXh8iCcpbF3DdHB0+w025+Z+z7KF1D8h6+nyvO+2LTlTVA YV6qOIs7cMNf+Ue2jkOrYEwjXMer/nssz1DafCxUuYDsItYZ5X2GDlGwzUe2a+Ar1gF2iY Rz4tGFcNTDHMl36/0Y4/xTF30n23vd3DNFbKJlXz5EB6I137E7qJQ/NclJRa+g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4MXg7k0351z14vT; Wed, 21 Sep 2022 14:01:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 28LE1bG9000430; Wed, 21 Sep 2022 14:01:37 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 28LE1bd7000429; Wed, 21 Sep 2022 14:01:37 GMT (envelope-from git) Date: Wed, 21 Sep 2022 14:01:37 GMT Message-Id: <202209211401.28LE1bd7000429@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Bjoern A. Zeeb" Subject: git: d1b8fbbe3cd1 - stable/13 - LinuxKPI: firmware: add request_partial_firmware_into_buf() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: d1b8fbbe3cd1a5c7ef70be1e9b36b6e4fd930f18 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1663768898; 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=ZVQnz37fVQZMmAhglTUzQbtGGg07yO6fCD0skrawiX0=; b=OoeaxjCf5U/62MxbVN2MBdLXQoQqia9HIyWmqGRR57dzQVG2A1/TiiS/sZc0YXmsVqKCIC JgwGBuSjxt/T9b5YvG3I/oLSW3FEe+IY5P4/Hs9+3OgkcVkEI/WWsDxXG6bfM8EAxrzj9v YDRXf4mMNkYksgkXcp9akDpAFvS1cffqPfs+hjpexUO4HtXojkZR1ZRbU0gDWRcGrell2o iFhXiPNrTFIce52uAlEh1ltYJmuwdMjqaD6w+xn50c46KUV8einM0Y+jvTI9eoiKms72bL QPSCOeU8+uV5OENXrEnNZwDCqn5XpfxCYbYh6SERcVDi0Xlg+/quTL6uOeQZIQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1663768898; a=rsa-sha256; cv=none; b=muJYVUHb65jNSHHyI+C14lClsCqHCEJ/bOzBLUSnxq/bMCLIzhZrciw/pn+YDOuAJL+KVb xLwOxxWHCbR3/4H4/WMQexDZSmKPEzAwqTP3d9FZSUxETheI75OKs18i6KbX+jrU07oo5O IxddYAxVT9wX9HD6KscJynAkiBPyswFY2UzFzGhSRSNNdiyWzFrPL1bp/9JmS0enLGnYfY rS8WLpJHaPXlQTMgYlRv8a8+3MasxteuoeLdzGUzAc9mGVUQUN156UJQuEbktwA4mNnu1G QtruiNVGJBY1ooqOUedHre4ZLXKqoJNxgnpJyUXrorFtpVNSu8E74XTev/3OvA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=d1b8fbbe3cd1a5c7ef70be1e9b36b6e4fd930f18 commit d1b8fbbe3cd1a5c7ef70be1e9b36b6e4fd930f18 Author: Bjoern A. Zeeb AuthorDate: 2022-09-07 23:33:45 +0000 Commit: Bjoern A. Zeeb CommitDate: 2022-09-21 11:46:47 +0000 LinuxKPI: firmware: add request_partial_firmware_into_buf() A (so far out-of-tree) driver update needs request_partial_firmware_into_buf(). Given we load the full .ko file using firmware(9) just do that and copy the requeste data into the buffer (rather than poissibly only reading portions of the firmware file). (cherry picked from commit fb3c549738bfed0607d95120e5dbf03a62e61b49) --- .../linuxkpi/common/include/linux/firmware.h | 13 ++++++++++++ sys/compat/linuxkpi/common/src/linux_firmware.c | 24 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/firmware.h b/sys/compat/linuxkpi/common/include/linux/firmware.h index ada7d0d73edf..ed84d6fbf58f 100644 --- a/sys/compat/linuxkpi/common/include/linux/firmware.h +++ b/sys/compat/linuxkpi/common/include/linux/firmware.h @@ -2,6 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020-2021 The FreeBSD Foundation + * Copyright (c) 2022 Bjoern A. Zeeb * * This software was developed by Björn Zeeb under sponsorship from * the FreeBSD Foundation. @@ -56,6 +57,8 @@ int linuxkpi_request_firmware(const struct linuxkpi_firmware **, int linuxkpi_firmware_request_nowarn(const struct linuxkpi_firmware **, const char *, struct device *); void linuxkpi_release_firmware(const struct linuxkpi_firmware *); +int linuxkpi_request_partial_firmware_into_buf(const struct linuxkpi_firmware **, + const char *, struct device *, uint8_t *, size_t, size_t); static __inline int @@ -100,6 +103,16 @@ release_firmware(const struct linuxkpi_firmware *fw) linuxkpi_release_firmware(fw); } +static inline int +request_partial_firmware_into_buf(const struct linuxkpi_firmware **fw, + const char *fw_name, struct device *dev, void *buf, size_t buflen, + size_t offset) +{ + + return (linuxkpi_request_partial_firmware_into_buf(fw, fw_name, + dev, buf, buflen, offset)); +} + #define firmware linuxkpi_firmware #endif /* _LINUXKPI_LINUX_FIRMWARE_H */ diff --git a/sys/compat/linuxkpi/common/src/linux_firmware.c b/sys/compat/linuxkpi/common/src/linux_firmware.c index 47cccd42da20..7e8418151c64 100644 --- a/sys/compat/linuxkpi/common/src/linux_firmware.c +++ b/sys/compat/linuxkpi/common/src/linux_firmware.c @@ -2,6 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020-2021 The FreeBSD Foundation + * Copyright (c) 2022 Bjoern A. Zeeb * * This software was developed by Björn Zeeb under sponsorship from * the FreeBSD Foundation. @@ -223,3 +224,26 @@ linuxkpi_release_firmware(const struct linuxkpi_firmware *fw) firmware_put(fw->fbdfw, FIRMWARE_UNLOAD); free(__DECONST(void *, fw), M_LKPI_FW); } + +int +linuxkpi_request_partial_firmware_into_buf(const struct linuxkpi_firmware **fw, + const char *fw_name, struct device *dev, uint8_t *buf, size_t buflen, + size_t offset) +{ + const struct linuxkpi_firmware *lfw; + int error; + + error = linuxkpi_request_firmware(fw, fw_name, dev); + if (error != 0) + return (error); + + lfw = *fw; + if ((offset + buflen) >= lfw->size) { + linuxkpi_release_firmware(lfw); + return (-ERANGE); + } + + memcpy(buf, lfw->data + offset, buflen); + + return (0); +}