Commit 1bd8b6b2 authored by Danilo Krummrich's avatar Danilo Krummrich Committed by Greg Kroah-Hartman
Browse files

rust: pci: add basic PCI device / driver abstractions



Implement the basic PCI abstractions required to write a basic PCI
driver. This includes the following data structures:

The `pci::Driver` trait represents the interface to the driver and
provides `pci::Driver::probe` for the driver to implement.

The `pci::Device` abstraction represents a `struct pci_dev` and provides
abstractions for common functions, such as `pci::Device::set_master`.

In order to provide the PCI specific parts to a generic
`driver::Registration` the `driver::RegistrationOps` trait is implemented
by `pci::Adapter`.

`pci::DeviceId` implements PCI device IDs based on the generic
`device_id::RawDevceId` abstraction.

Co-developed-by: default avatarFUJITA Tomonori <fujita.tomonori@gmail.com>
Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@gmail.com>
Signed-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
Tested-by: default avatarDirk Behme <dirk.behme@de.bosch.com>
Link: https://lore.kernel.org/r/20241219170425.12036-10-dakr@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 76c01ded
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18105,6 +18105,7 @@ F: include/asm-generic/pci*
F:	include/linux/of_pci.h
F:	include/linux/pci*
F:	include/uapi/linux/pci*
F:	rust/kernel/pci.rs
PCIE BANDWIDTH CONTROLLER
M:	Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/jump_label.h>
#include <linux/mdio.h>
#include <linux/miscdevice.h>
#include <linux/pci.h>
#include <linux/phy.h>
#include <linux/pid_namespace.h>
#include <linux/poll.h>
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include "kunit.c"
#include "mutex.c"
#include "page.c"
#include "pci.c"
#include "pid_namespace.c"
#include "rbtree.c"
#include "rcu.c"

rust/helpers/pci.c

0 → 100644
+18 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0

#include <linux/pci.h>

void rust_helper_pci_set_drvdata(struct pci_dev *pdev, void *data)
{
	pci_set_drvdata(pdev, data);
}

void *rust_helper_pci_get_drvdata(struct pci_dev *pdev)
{
	return pci_get_drvdata(pdev);
}

resource_size_t rust_helper_pci_resource_len(struct pci_dev *pdev, int bar)
{
	return pci_resource_len(pdev, bar);
}
+2 −0
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@
pub use bindings;
pub mod io;
pub use macros;
#[cfg(all(CONFIG_PCI, CONFIG_PCI_MSI))]
pub mod pci;
pub use uapi;

#[doc(hidden)]
Loading