From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@samsung.com>,
"Alice Ryhl" <aliceryhl@google.com>,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-usb@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [RFC PATCH v2 2/2] samples: rust: Add USB sample bindings
Date: Fri, 27 Oct 2023 09:15:41 +0200 [thread overview]
Message-ID: <2023102737-juniper-trodden-afb4@gregkh> (raw)
In-Reply-To: <20231027003504.146703-3-yakoyoku@gmail.com>
On Thu, Oct 26, 2023 at 09:34:51PM -0300, Martin Rodriguez Reboredo wrote:
> This is a demonstration of the capabilities of doing bindings with
> subsystems that may or may not be statically linked.
>
> Signed-off-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
> ---
> drivers/usb/core/Kconfig | 7 +++++++
> drivers/usb/core/Makefile | 3 +++
> drivers/usb/core/usb.rs | 13 +++++++++++++
> samples/rust/Kconfig | 10 ++++++++++
> samples/rust/Makefile | 3 +++
> samples/rust/rust_usb_simple.rs | 22 ++++++++++++++++++++++
> 6 files changed, 58 insertions(+)
> create mode 100644 drivers/usb/core/usb.rs
> create mode 100644 samples/rust/rust_usb_simple.rs
>
> diff --git a/drivers/usb/core/Kconfig b/drivers/usb/core/Kconfig
> index 351ede4b5de2..4b5604282129 100644
> --- a/drivers/usb/core/Kconfig
> +++ b/drivers/usb/core/Kconfig
> @@ -116,3 +116,10 @@ config USB_AUTOSUSPEND_DELAY
> The default value Linux has always had is 2 seconds. Change
> this value if you want a different delay and cannot modify
> the command line or module parameter.
> +
> +config USB_RUST
> + bool "Rust USB bindings"
> + depends on USB && RUST
> + default n
Nit, "n" is the default, this line is not needed.
Also, if you want to get really picky, _which_ USB is this for, the
"host" apis (you plug a USB device into a Linux maching), or the
"gadget" apis (i.e. Linux is running in the device that you plug into a
USB host)? Linux supports both :)
> + help
> + Enables Rust bindings for USB.
> diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
> index 7d338e9c0657..00e116913591 100644
> --- a/drivers/usb/core/Makefile
> +++ b/drivers/usb/core/Makefile
> @@ -11,6 +11,7 @@ usbcore-y += phy.o port.o
> usbcore-$(CONFIG_OF) += of.o
> usbcore-$(CONFIG_USB_PCI) += hcd-pci.o
> usbcore-$(CONFIG_ACPI) += usb-acpi.o
> +usbcore-$(CONFIG_USB_RUST) += libusb.rlib
>
> ifdef CONFIG_USB_ONBOARD_HUB
> usbcore-y += ../misc/onboard_usb_hub_pdevs.o
> @@ -18,4 +19,6 @@ endif
>
> obj-$(CONFIG_USB) += usbcore.o
>
> +rust-libs := ./usb
> +
> obj-$(CONFIG_USB_LEDS_TRIGGER_USBPORT) += ledtrig-usbport.o
> diff --git a/drivers/usb/core/usb.rs b/drivers/usb/core/usb.rs
> new file mode 100644
> index 000000000000..3f7ad02153f5
> --- /dev/null
> +++ b/drivers/usb/core/usb.rs
> @@ -0,0 +1,13 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +//! USB devices and drivers.
> +//!
> +//! C header: [`include/linux/usb.h`](../../../../include/linux/usb.h)
> +
> +use kernel::bindings;
> +
> +/// Check if USB is disabled.
> +pub fn disabled() -> bool {
> + // SAFETY: FFI call.
> + unsafe { bindings::usb_disabled() != 0 }
> +}
> diff --git a/samples/rust/Kconfig b/samples/rust/Kconfig
> index b0f74a81c8f9..12116f6fb526 100644
> --- a/samples/rust/Kconfig
> +++ b/samples/rust/Kconfig
> @@ -30,6 +30,16 @@ config SAMPLE_RUST_PRINT
>
> If unsure, say N.
>
> +config SAMPLE_RUST_USB_SIMPLE
> + tristate "USB simple device driver"
> + help
> + This option builds the Rust USB simple driver sample.
> +
> + To compile this as a module, choose M here:
> + the module will be called rust_usb_simple.
> +
> + If unsure, say N.
> +
> config SAMPLE_RUST_HOSTPROGS
> bool "Host programs"
> help
> diff --git a/samples/rust/Makefile b/samples/rust/Makefile
> index 03086dabbea4..f1ab58a9ecdd 100644
> --- a/samples/rust/Makefile
> +++ b/samples/rust/Makefile
> @@ -2,5 +2,8 @@
>
> obj-$(CONFIG_SAMPLE_RUST_MINIMAL) += rust_minimal.o
> obj-$(CONFIG_SAMPLE_RUST_PRINT) += rust_print.o
> +obj-$(CONFIG_SAMPLE_RUST_USB_SIMPLE) += rust_usb_simple.o
> +
> +rust-libs := ../../drivers/usb/core/usb
>
> subdir-$(CONFIG_SAMPLE_RUST_HOSTPROGS) += hostprogs
> diff --git a/samples/rust/rust_usb_simple.rs b/samples/rust/rust_usb_simple.rs
> new file mode 100644
> index 000000000000..3523f81d5eb8
> --- /dev/null
> +++ b/samples/rust/rust_usb_simple.rs
> @@ -0,0 +1,22 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +//! Rust USB sample.
> +
> +use kernel::prelude::*;
> +
> +module! {
> + type: UsbSimple,
> + name: "rust_usb_simple",
> + author: "Martin Rodriguez Reboredo",
> + description: "Rust USB sample",
> + license: "GPL v2",
> +}
> +
> +struct UsbSimple;
"USBSimple" please.
> +
> +impl kernel::Module for UsbSimple {
> + fn init(_module: &'static ThisModule) -> Result<Self> {
> + pr_info!("usb enabled: {}", !usb::disabled());
> + Ok(UsbSimple)
> + }
> +}
I know this is just a fake patch to test the bindings logic, so sorry
for the noise, just wanted to get terminology right :)
thanks,
greg k-h
next prev parent reply other threads:[~2023-10-27 7:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-27 0:34 [RFC PATCH v2 0/2] rust: crates in other kernel directories Martin Rodriguez Reboredo
2023-10-27 0:34 ` [RFC PATCH v2 1/2] kbuild: Build Rust crates as libraries Martin Rodriguez Reboredo
2023-10-29 3:33 ` kernel test robot
2023-10-27 0:34 ` [RFC PATCH v2 2/2] samples: rust: Add USB sample bindings Martin Rodriguez Reboredo
2023-10-27 3:21 ` Martin Rodriguez Reboredo
2023-10-27 7:15 ` Greg Kroah-Hartman [this message]
2023-10-27 13:07 ` Martin Rodriguez Reboredo
2023-10-27 13:08 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2023102737-juniper-trodden-afb4@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=a.hindborg@samsung.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=gary@garyguo.net \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=wedsonaf@gmail.com \
--cc=yakoyoku@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.