From 7c476179143fd6d8ed560890a14ceb8040882765 Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Fri, 1 Nov 2024 17:38:12 +0100 Subject: [PATCH] node: Put NodeType <-> dev_t conversions closer together Group all this logic together in functions inside `impl NodeType`. --- src/node/mod.rs | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/node/mod.rs b/src/node/mod.rs index dc86100..82ce54a 100644 --- a/src/node/mod.rs +++ b/src/node/mod.rs @@ -44,16 +44,7 @@ impl DrmNode { return Err(CreateDrmNodeError::NotDrmNode); } - // The type of the DRM node is determined by the minor number ranges: - // 0 - 63 -> Primary - // 64 - 127 -> Control - // 128 - 255 -> Render - let ty = match minor(dev) >> 6 { - 0 => NodeType::Primary, - 1 => NodeType::Control, - 2 => NodeType::Render, - _ => return Err(CreateDrmNodeError::NotDrmNode), - }; + let ty = NodeType::from_dev_id(dev)?; Ok(DrmNode { dev, ty }) } @@ -151,14 +142,32 @@ impl NodeType { } } + pub fn from_dev_id(dev: dev_t) -> Result { + // The type of the DRM node is determined by the minor number ranges: + // 0 - 63 -> Primary + // 64 - 127 -> Control + // 128 - 255 -> Render + Ok(match minor(dev) >> 6 { + 0 => Self::Primary, + 1 => Self::Control, + 2 => Self::Render, + _ => return Err(CreateDrmNodeError::NotDrmNode), + }) + } + #[cfg(not(target_os = "linux"))] - fn minor_base(&self) -> u32 { + fn minor_index(&self) -> u32 { match self { NodeType::Primary => 0, - NodeType::Control => 64, - NodeType::Render => 128, + NodeType::Control => 1, + NodeType::Render => 2, } } + + #[cfg(not(target_os = "linux"))] + fn minor_base(&self) -> u32 { + self.minor_index() << 6 + } } impl Display for NodeType {