Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/rust/bindings/lib.rs
29266 views
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))]
33
mod 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)]
60
mod 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
69
pub use bindings_raw::*;
70
71