File Index
Files and directories
Sign in
FILE

lib.rs

File preview with syntax highlighting.

linux-6.19.14/rust/bindings/lib.rs RUST
 1// SPDX-License-Identifier: GPL-2.0
 2
 3//! Bindings.
 4//!
 5//! Imports the generated bindings by `bindgen`.
 6//!
 7//! This crate may not be directly used. If you need a kernel C API that is
 8//! not ported or wrapped in the `kernel` crate, then do so first instead of
 9//! using this crate.
10
11#![no_std]
12// See <https://github.com/rust-lang/rust-bindgen/issues/1651>.
13#![cfg_attr(test, allow(deref_nullptr))]
14#![cfg_attr(test, allow(unaligned_references))]
15#![cfg_attr(test, allow(unsafe_op_in_unsafe_fn))]
16#![allow(
17    clippy::all,
18    missing_docs,
19    non_camel_case_types,
20    non_upper_case_globals,
21    non_snake_case,
22    improper_ctypes,
23    unreachable_pub,
24    unsafe_op_in_unsafe_fn
25)]
26
27#[allow(dead_code)]
28#[allow(clippy::cast_lossless)]
29#[allow(clippy::ptr_as_ptr)]
30#[allow(clippy::ref_as_ptr)]
31#[allow(clippy::undocumented_unsafe_blocks)]
32#[cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
33mod bindings_raw {
34    use pin_init::{MaybeZeroable, Zeroable};
35
36    // Manual definition for blocklisted types.
37    type __kernel_size_t = usize;
38    type __kernel_ssize_t = isize;
39    type __kernel_ptrdiff_t = isize;
40
41    // `bindgen` doesn't automatically do this, see
42    // <https://github.com/rust-lang/rust-bindgen/issues/3196>
43    //
44    // SAFETY: `__BindgenBitfieldUnit<Storage>` is a newtype around `Storage`.
45    unsafe impl<Storage> Zeroable for __BindgenBitfieldUnit<Storage> where Storage: Zeroable {}
46
47    // Use glob import here to expose all helpers.
48    // Symbols defined within the module will take precedence to the glob import.
49    pub use super::bindings_helper::*;
50    include!(concat!(
51        env!("OBJTREE"),
52        "/rust/bindings/bindings_generated.rs"
53    ));
54}
55
56// When both a directly exposed symbol and a helper exists for the same function,
57// the directly exposed symbol is preferred and the helper becomes dead code, so
58// ignore the warning here.
59#[allow(dead_code)]
60mod bindings_helper {
61    // Import the generated bindings for types.
62    use super::bindings_raw::*;
63    include!(concat!(
64        env!("OBJTREE"),
65        "/rust/bindings/bindings_helpers_generated.rs"
66    ));
67}
68
69pub use bindings_raw::*;
~/ Read-only file preview.