linux/rust/kernel
Alice Ryhl f893691e74 rust: miscdevice: add base miscdevice abstraction
Provide a `MiscDevice` trait that lets you specify the file operations
that you wish to provide for your misc device. For now, only three file
operations are provided: open, close, ioctl.

These abstractions only support MISC_DYNAMIC_MINOR. This enforces that
new miscdevices should not hard-code a minor number.

When implementing ioctl, the Result type is used. This means that you
can choose to return either of:
* An integer of type isize.
* An errno using the kernel::error::Error type.
When returning an isize, the integer is returned verbatim. It's mainly
intended for returning positive integers to userspace. However, it is
technically possible to return errors via the isize return value too.

To avoid having a dependency on files, this patch does not provide the
file operations callbacks a pointer to the file. This means that they
cannot check file properties such as O_NONBLOCK (which Binder needs).
Support for that can be added as a follow-up.

To avoid having a dependency on vma, this patch does not provide any way
to implement mmap (which Binder needs). Support for that can be added as
a follow-up.

Rust Binder will use these abstractions to create the /dev/binder file
when binderfs is disabled.

Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/rust-for-linux/20240328195457.225001-1-wedsonaf@gmail.com/
Link: https://lore.kernel.org/r/20241001-b4-miscdevice-v2-2-330d760041fa@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-10-09 12:18:30 +02:00
..
alloc Rust changes for v6.12 2024-09-25 10:25:40 -07:00
block rust: block: fix wrong usage of lockdep API 2024-08-21 13:28:13 +02:00
init Rust changes for v6.12 2024-09-25 10:25:40 -07:00
list rust: list: add ListArcField 2024-08-23 06:26:57 +02:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2024-09-05 20:37:20 -07:00
sync rust: sync: require `T: Sync` for `LockedBy::access` 2024-09-26 17:51:49 +02:00
alloc.rs rust: add abstraction for `struct page` 2024-07-08 23:44:01 +02:00
block.rs rust: block: introduce `kernel::block::mq` module 2024-06-14 07:45:04 -06:00
build_assert.rs rust: upgrade to Rust 1.68.2 2023-05-31 17:35:03 +02:00
device.rs device: rust: improve safety comments 2024-06-20 16:14:58 +02:00
error.rs rust: error: allow `useless_conversion` for 32-bit builds 2024-08-18 23:10:53 +02:00
firmware.rs rust: firmware: fix invalid rustdoc link 2024-07-31 13:24:29 +02:00
init.rs rust: init: add `assert_pinned` macro 2024-08-23 06:25:59 +02:00
ioctl.rs rust: kernel: mark code fragments in docs with backticks 2024-02-18 21:22:27 +01:00
kunit.rs rust: kunit: use C-string literals to clean warning 2024-10-01 23:46:42 +02:00
lib.rs rust: miscdevice: add base miscdevice abstraction 2024-10-09 12:18:30 +02:00
list.rs rust: list: add ListArcField 2024-08-23 06:26:57 +02:00
miscdevice.rs rust: miscdevice: add base miscdevice abstraction 2024-10-09 12:18:30 +02:00
net.rs rust: core abstractions for network PHY drivers 2023-12-15 09:35:50 +00:00
page.rs rust: add abstraction for `struct page` 2024-07-08 23:44:01 +02:00
prelude.rs rust: init: add `write_[pin_]init` functions 2024-08-22 00:16:16 +02:00
print.rs rust: kernel: use docs.kernel.org links in code documentation 2024-08-25 14:44:34 +02:00
rbtree.rs rust: avoid `box_uninit_write` feature 2024-09-04 23:11:31 +02:00
sizes.rs rust: sizes: add commonly used constants 2024-08-30 10:27:34 +01:00
static_assert.rs rust: static_assert: add `static_assert!` macro 2022-12-04 01:59:16 +01:00
std_vendor.rs rust: kernel: use docs.kernel.org links in code documentation 2024-08-25 14:44:34 +02:00
str.rs rust: kernel: remove redundant imports 2024-05-05 19:22:25 +02:00
sync.rs rust: sync: implement `Default` for `LockClassKey` 2024-05-05 19:22:25 +02:00
task.rs rust: kernel: remove redundant imports 2024-05-05 19:22:25 +02:00
time.rs rust: time: doc: Add missing C header links 2024-05-01 00:04:47 +02:00
types.rs rust: types: add Opaque::try_ffi_init 2024-10-09 12:18:29 +02:00
uaccess.rs rust: uaccess: add typed accessors for userspace pointers 2024-07-08 23:44:01 +02:00
workqueue.rs rust: kernel: make impl_has_work compatible with more generics 2024-07-08 22:39:39 +02:00