mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
rust: driver: centralize device ID handling
Move the `IdArray` creation from individual buses to be handled by shared code in `device_id.rs`. Signed-off-by: Gary Guo <gary@garyguo.net> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patch.msgid.link/20260629-id_info-v2-6-56fccbe9c5ef@garyguo.net Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
c7b6e07f83
commit
1d92f2e8b8
|
|
@ -53,13 +53,7 @@ pub const fn new(id: &'static CStr) -> Self {
|
|||
/// Create an ACPI `IdTable` with an "alias" for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! acpi_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::acpi::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("acpi", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("acpi", $crate::acpi::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,14 +182,8 @@ fn index(&self) -> usize {
|
|||
/// Create a auxiliary `IdTable` with its alias for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! auxiliary_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::auxiliary::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("auxiliary", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("auxiliary", $crate::auxiliary::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -175,7 +175,36 @@ fn info(&self, index: usize) -> &U {
|
|||
/// Create device table alias for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! module_device_table {
|
||||
($table_type: literal, $module_table_name:ident, $table_name:ident) => {
|
||||
(
|
||||
$table_type: literal, $device_id_ty: ty,
|
||||
$table_name: ident, $module_table_name: ident, $id_info_type: ty,
|
||||
[$(($id: expr, $info:expr $(,)?)),* $(,)?]
|
||||
) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$device_id_ty,
|
||||
$id_info_type,
|
||||
{ <[$device_id_ty]>::len(&[$($id,)*]) },
|
||||
> = $crate::device_id::IdArray::new([$(($id, $info),)*]);
|
||||
|
||||
$crate::module_device_table!($table_type, $module_table_name, $table_name);
|
||||
};
|
||||
|
||||
// Case for no ID info.
|
||||
(
|
||||
$table_type: literal, $device_id_ty: ty,
|
||||
$table_name: ident, $module_table_name: ident, @none,
|
||||
[$($id: expr),* $(,)?]
|
||||
) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$device_id_ty,
|
||||
(),
|
||||
{ <[$device_id_ty]>::len(&[$($id,)*]) },
|
||||
> = $crate::device_id::IdArray::new_without_index([$($id),*]);
|
||||
|
||||
$crate::module_device_table!($table_type, $module_table_name, $table_name);
|
||||
};
|
||||
|
||||
($table_type: literal, $module_table_name: ident, $table_name:ident) => {
|
||||
#[rustfmt::skip]
|
||||
#[export_name =
|
||||
concat!("__mod_device_table__", line!(),
|
||||
|
|
|
|||
|
|
@ -77,14 +77,8 @@ fn index(&self) -> usize {
|
|||
/// Create a I2C `IdTable` with its alias for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! i2c_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::i2c::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("i2c", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("i2c", $crate::i2c::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -865,12 +865,10 @@ macro_rules! module_phy_driver {
|
|||
};
|
||||
|
||||
(@device_table [$($dev:expr),+]) => {
|
||||
const N: usize = $crate::module_phy_driver!(@count_devices $($dev),+);
|
||||
|
||||
const TABLE: $crate::device_id::IdArray<$crate::net::phy::DeviceId, (), N> =
|
||||
$crate::device_id::IdArray::new_without_index([ $($dev),+, ]);
|
||||
|
||||
$crate::module_device_table!("mdio", phydev, TABLE);
|
||||
$crate::module_device_table!(
|
||||
"mdio", $crate::net::phy::DeviceId,
|
||||
phydev, TABLE, @none, [$($dev),+]
|
||||
);
|
||||
};
|
||||
|
||||
(drivers: [$($driver:ident),+ $(,)?], device_table: [$($dev:expr),+ $(,)?], $($f:tt)*) => {
|
||||
|
|
|
|||
|
|
@ -53,13 +53,7 @@ pub const fn new(compatible: &'static CStr) -> Self {
|
|||
/// Create an OF `IdTable` with an "alias" for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! of_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::of::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("of", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("of", $crate::of::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,14 +245,8 @@ fn index(&self) -> usize {
|
|||
/// Create a PCI `IdTable` with its alias for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! pci_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::pci::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("pci", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("pci", $crate::pci::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -254,14 +254,8 @@ fn index(&self) -> usize {
|
|||
/// Create a USB `IdTable` with its alias for modpost.
|
||||
#[macro_export]
|
||||
macro_rules! usb_device_table {
|
||||
($table_name:ident, $module_table_name:ident, $id_info_type: ty, $table_data: expr) => {
|
||||
const $table_name: $crate::device_id::IdArray<
|
||||
$crate::usb::DeviceId,
|
||||
$id_info_type,
|
||||
{ $table_data.len() },
|
||||
> = $crate::device_id::IdArray::new($table_data);
|
||||
|
||||
$crate::module_device_table!("usb", $module_table_name, $table_name);
|
||||
($($tt:tt)*) => {
|
||||
$crate::module_device_table!("usb", $crate::usb::DeviceId, $($tt)*);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user