[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240418.221028.963285260268190475.fujita.tomonori@gmail.com>
Date: Thu, 18 Apr 2024 22:10:28 +0900 (JST)
From: FUJITA Tomonori <fujita.tomonori@...il.com>
To: dakr@...hat.com
Cc: fujita.tomonori@...il.com, gregkh@...uxfoundation.org, andrew@...n.ch,
rust-for-linux@...r.kernel.org, tmgross@...ch.edu, mcgrof@...nel.org,
netdev@...r.kernel.org, russ.weight@...ux.dev, wedsonaf@...il.com
Subject: Re: [PATCH net-next v1 3/4] rust: net::phy support Firmware API
Hi,
On Mon, 15 Apr 2024 17:45:46 +0200
Danilo Krummrich <dakr@...hat.com> wrote:
> On 4/15/24 12:47, FUJITA Tomonori wrote:
>> This patch adds support to the following basic Firmware API:
>> - request_firmware
>> - release_firmware
>> Signed-off-by: FUJITA Tomonori <fujita.tomonori@...il.com>
>> CC: Luis Chamberlain <mcgrof@...nel.org>
>> CC: Russ Weight <russ.weight@...ux.dev>
>> ---
>> drivers/net/phy/Kconfig | 1 +
>> rust/bindings/bindings_helper.h | 1 +
>> rust/kernel/net/phy.rs | 45 +++++++++++++++++++++++++++++++++
>> 3 files changed, 47 insertions(+)
>
> As Greg already mentioned, this shouldn't be implemented specifically
> for struct
> phy_device, but rather for a generic struct device.
Yeah, I have a version of creating rust/kernel/firmware.rs locally but
I wanted to know if a temporary solution could be accepted.
> In order to use them from your PHY driver, I think all you need to do
> is to implement
> AsRef<> for your phy::Device:
>
> impl AsRef<device::Device> for Device {
> fn as_ref(&self) -> &device::Device {
> // SAFETY: By the type invariants, we know that `self.ptr` is non-null
> and valid.
> unsafe { device::Device::from_raw(&mut (*self.ptr).mdio.dev) }
> }
> }
My implementation uses RawDevice trait in old rust branch (Wedson
implemented, I suppose):
https://github.com/Rust-for-Linux/linux/blob/18b7491480025420896e0c8b73c98475c3806c6f/rust/kernel/device.rs#L37
pub unsafe trait RawDevice {
/// Returns the raw `struct device` related to `self`.
fn raw_device(&self) -> *mut bindings::device;
Which is better?
Powered by blists - more mailing lists