mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.1 KiB
72 lines
2.1 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
|
|
//! Crate for all kernel procedural macros. |
|
|
|
mod helpers; |
|
mod module; |
|
|
|
use proc_macro::TokenStream; |
|
|
|
/// Declares a kernel module. |
|
/// |
|
/// The `type` argument should be a type which implements the [`Module`] |
|
/// trait. Also accepts various forms of kernel metadata. |
|
/// |
|
/// C header: [`include/linux/moduleparam.h`](../../../include/linux/moduleparam.h) |
|
/// |
|
/// [`Module`]: ../kernel/trait.Module.html |
|
/// |
|
/// # Examples |
|
/// |
|
/// ```ignore |
|
/// use kernel::prelude::*; |
|
/// |
|
/// module!{ |
|
/// type: MyModule, |
|
/// name: b"my_kernel_module", |
|
/// author: b"Rust for Linux Contributors", |
|
/// description: b"My very own kernel module!", |
|
/// license: b"GPL", |
|
/// params: { |
|
/// my_i32: i32 { |
|
/// default: 42, |
|
/// permissions: 0o000, |
|
/// description: b"Example of i32", |
|
/// }, |
|
/// writeable_i32: i32 { |
|
/// default: 42, |
|
/// permissions: 0o644, |
|
/// description: b"Example of i32", |
|
/// }, |
|
/// }, |
|
/// } |
|
/// |
|
/// struct MyModule; |
|
/// |
|
/// impl kernel::Module for MyModule { |
|
/// fn init() -> Result<Self> { |
|
/// // If the parameter is writeable, then the kparam lock must be |
|
/// // taken to read the parameter: |
|
/// { |
|
/// let lock = THIS_MODULE.kernel_param_lock(); |
|
/// pr_info!("i32 param is: {}\n", writeable_i32.read(&lock)); |
|
/// } |
|
/// // If the parameter is read only, it can be read without locking |
|
/// // the kernel parameters: |
|
/// pr_info!("i32 param is: {}\n", my_i32.read()); |
|
/// Ok(Self) |
|
/// } |
|
/// } |
|
/// ``` |
|
/// |
|
/// # Supported argument types |
|
/// - `type`: type which implements the [`Module`] trait (required). |
|
/// - `name`: byte array of the name of the kernel module (required). |
|
/// - `author`: byte array of the author of the kernel module. |
|
/// - `description`: byte array of the description of the kernel module. |
|
/// - `license`: byte array of the license of the kernel module (required). |
|
/// - `alias`: byte array of alias name of the kernel module. |
|
#[proc_macro] |
|
pub fn module(ts: TokenStream) -> TokenStream { |
|
module::module(ts) |
|
}
|
|
|