On Mon Aug 18, 2025 at 3:33 AM CEST, John Hubbard wrote: > + /// Create a `Vendor` from the raw vendor ID value, or `None` if the value doesn't > + /// match any known vendor. > + pub fn from_u32(value: u32) -> Option<Self> { > + match value { > + $(x if x == Self::$variant.0 => Some(Self::$variant),)+ > + _ => None, > + } > + } Same here, I think this should be `impl TryFrom<u32> for Vendor`. > + > + /// Get the raw 16-bit vendor ID value. > + pub const fn as_u32(self) -> u32 { > + self.0 > + } > + } > + }; > +} > /// An adapter for the registration of PCI drivers. > pub struct Adapter<T: Driver>(T); > > @@ -335,9 +656,9 @@ pub const fn from_class(class: u32, class_mask: u32) -> Self { > /// > /// This is more targeted than [`DeviceId::from_class`]: in addition to matching by Vendor, it > /// also matches the PCI Class (up to the entire 24 bits, depending on the mask). > - pub const fn from_class_and_vendor(class: Class, class_mask: u32, vendor: u32) -> Self { > + pub const fn from_class_and_vendor(class: Class, class_mask: u32, vendor: Vendor) -> Self { > Self(bindings::pci_device_id { > - vendor, > + vendor: vendor.as_u32(), > device: DeviceId::PCI_ANY_ID, > subvendor: DeviceId::PCI_ANY_ID, > subdevice: DeviceId::PCI_ANY_ID, > @@ -396,7 +717,7 @@ macro_rules! pci_device_table { > /// <MyDriver as pci::Driver>::IdInfo, > /// [ > /// ( > -/// pci::DeviceId::from_id(bindings::PCI_VENDOR_ID_REDHAT, bindings::PCI_ANY_ID as u32), > +/// pci::DeviceId::from_id(pci::Vendor::REDHAT.as_u32(), bindings::PCI_ANY_ID as u32), We should change DeviceId::from_id() to consume a pci::Vendor value directly.