mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:09:29 +02:00
rust: pci: use Option<&IdInfo> for device ID info
It is possible that `pci_device_id_any` will be passed to the driver, e.g. `driver_override` is used on the device. Therefore, the driver must be able to handle the case where `driver_data` is 0. Thus, update the `probe` functions to get `Option`. The current code cannot tell if the info does not exist or is the first entry; however this will be achievable once the code is updated to use a `&'static IdInfo` pointer instead of indices. 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-3-56fccbe9c5ef@garyguo.net Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
committed by
Danilo Krummrich
parent
e49f626ef5
commit
4fcbf7f1e4
@@ -70,7 +70,7 @@ impl pci::Driver for NovaCoreDriver {
|
||||
|
||||
fn probe<'bound>(
|
||||
pdev: &'bound pci::Device<Core<'_>>,
|
||||
_info: &'bound Self::IdInfo,
|
||||
_info: Option<&'bound Self::IdInfo>,
|
||||
) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
|
||||
pin_init::pin_init_scope(move || {
|
||||
dev_dbg!(pdev, "Probe Nova Core GPU driver.\n");
|
||||
|
||||
+3
-3
@@ -113,7 +113,7 @@ impl<T: Driver> Adapter<T> {
|
||||
let info = T::ID_TABLE.info(id.index());
|
||||
|
||||
from_result(|| {
|
||||
let data = T::probe(pdev, info);
|
||||
let data = T::probe(pdev, Some(info));
|
||||
|
||||
pdev.as_ref().set_drvdata(data)?;
|
||||
Ok(0)
|
||||
@@ -284,7 +284,7 @@ macro_rules! pci_device_table {
|
||||
///
|
||||
/// fn probe<'bound>(
|
||||
/// _pdev: &'bound pci::Device<Core<'_>>,
|
||||
/// _id_info: &'bound Self::IdInfo,
|
||||
/// _id_info: Option<&'bound Self::IdInfo>,
|
||||
/// ) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
|
||||
/// Err(ENODEV)
|
||||
/// }
|
||||
@@ -313,7 +313,7 @@ pub trait Driver {
|
||||
/// attempt to initialize the device here.
|
||||
fn probe<'bound>(
|
||||
dev: &'bound Device<device::Core<'_>>,
|
||||
id_info: &'bound Self::IdInfo,
|
||||
id_info: Option<&'bound Self::IdInfo>,
|
||||
) -> impl PinInit<Self::Data<'bound>, Error> + 'bound;
|
||||
|
||||
/// PCI driver unbind.
|
||||
|
||||
@@ -73,7 +73,7 @@ impl pci::Driver for DmaSampleDriver {
|
||||
|
||||
fn probe<'bound>(
|
||||
pdev: &'bound pci::Device<Core<'_>>,
|
||||
_info: &'bound Self::IdInfo,
|
||||
_info: Option<&'bound Self::IdInfo>,
|
||||
) -> impl PinInit<Self, Error> + 'bound {
|
||||
pin_init::pin_init_scope(move || {
|
||||
dev_info!(pdev, "Probe DMA test driver.\n");
|
||||
|
||||
@@ -100,7 +100,7 @@ impl pci::Driver for ParentDriver {
|
||||
|
||||
fn probe<'bound>(
|
||||
pdev: &'bound pci::Device<Core<'_>>,
|
||||
_info: &'bound Self::IdInfo,
|
||||
_info: Option<&'bound Self::IdInfo>,
|
||||
) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
|
||||
try_pin_init!(ParentData {
|
||||
// SAFETY: `ParentData` is the driver's private data, which is dropped when the
|
||||
|
||||
@@ -144,7 +144,7 @@ impl pci::Driver for SampleDriver {
|
||||
|
||||
fn probe<'bound>(
|
||||
pdev: &'bound pci::Device<Core<'_>>,
|
||||
info: &'bound Self::IdInfo,
|
||||
info: Option<&'bound Self::IdInfo>,
|
||||
) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
|
||||
let vendor = pdev.vendor_id();
|
||||
dev_dbg!(
|
||||
@@ -153,6 +153,7 @@ impl pci::Driver for SampleDriver {
|
||||
vendor,
|
||||
pdev.device_id()
|
||||
);
|
||||
let info = info.ok_or(ENODEV)?;
|
||||
|
||||
pdev.enable_device_mem()?;
|
||||
pdev.set_master();
|
||||
|
||||
Reference in New Issue
Block a user