[PATCH v3 3/5] rust: pci: make Vendor::from_raw() public
Maurice Hieronymus <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel,dev.linux.lists.nova-gpu,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
`Vendor::from_raw()` is currently `pub(super)`, so a Vendor can only be obtained through the named constants generated from the `PCI_VENDOR_ID_*` defines in `<linux/pci_ids.h>`. A driver therefore cannot match a device whose vendor ID has no symbolic name. Such devices exist. QEMU's "edu" educational device and the legacy qemu/Bochs stdvga both use vendor ID 0x1234, which is not registered in `pci_ids.h`. Per the policy stated at the top of that header, IDs are only added there when shared between multiple drivers; a single-driver ID is expected to be open-coded in the driver instead. C drivers already do this -- see `drivers/gpu/drm/tiny/bochs.c`, which matches with a bare ".vendor = 0x1234". The Rust abstraction has no equivalent escape hatch: there is no public way to express an unregistered vendor. Make `Vendor::from_raw()` public (and const, so it can be used in the const device-ID tables built by `pci_device_table!`) so that drivers can construct a Vendor from a raw ID, matching what C drivers can already do. Reviewed-by: Gary Guo <[email protected]> Reviewed-by: Onur Özkan <[email protected]> Signed-off-by: Maurice Hieronymus <[email protected]> --- rust/kernel/pci/id.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/kernel/pci/id.rs b/rust/kernel/pci/id.rs index dbaf301666e7..fe3b0047179b 100644 --- a/rust/kernel/pci/id.rs +++ b/rust/kernel/pci/id.rs @@ -156,7 +156,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { impl Vendor { /// Create a Vendor from a raw 16-bit vendor ID. #[inline] - pub(super) fn from_raw(vendor_id: u16) -> Self { + pub const fn from_raw(vendor_id: u16) -> Self { Self(vendor_id) } -- 2.54.0