device_number.rs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]
  2. pub struct Major(u32);
  3. impl Major {
  4. // 常量定义参考:
  5. //
  6. // https://code.dragonos.org.cn/xref/linux-6.1.9/include/uapi/linux/major.h
  7. /// 未命名的主设备
  8. pub const UNNAMED_MAJOR: Self = Self::new(0);
  9. pub const IDE0_MAJOR: Self = Self::new(3);
  10. pub const TTY_MAJOR: Self = Self::new(4);
  11. pub const TTYAUX_MAJOR: Self = Self::new(5);
  12. pub const HD_MAJOR: Self = Self::IDE0_MAJOR;
  13. pub const INPUT_MAJOR: Self = Self::new(13);
  14. /// /dev/fb* framebuffers
  15. pub const FB_MAJOR: Self = Self::new(29);
  16. /// Pty
  17. pub const UNIX98_PTY_MASTER_MAJOR: Self = Self::new(128);
  18. pub const UNIX98_PTY_MAJOR_COUNT: Self = Self::new(8);
  19. pub const UNIX98_PTY_SLAVE_MAJOR: Self =
  20. Self::new(Self::UNIX98_PTY_MASTER_MAJOR.0 + Self::UNIX98_PTY_MAJOR_COUNT.0);
  21. pub const fn new(x: u32) -> Self {
  22. Major(x)
  23. }
  24. pub const fn data(&self) -> u32 {
  25. self.0
  26. }
  27. }
  28. #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
  29. pub struct DeviceNumber {
  30. data: u32,
  31. }
  32. impl DeviceNumber {
  33. pub const MINOR_BITS: u32 = 20;
  34. pub const MINOR_MASK: u32 = (1 << Self::MINOR_BITS) - 1;
  35. pub const fn new(major: Major, minor: u32) -> Self {
  36. Self {
  37. data: (major.data() << Self::MINOR_BITS) | minor,
  38. }
  39. }
  40. pub const fn major(&self) -> Major {
  41. Major::new(self.data >> Self::MINOR_BITS)
  42. }
  43. pub const fn minor(&self) -> u32 {
  44. self.data & 0xfffff
  45. }
  46. pub const fn data(&self) -> u32 {
  47. self.data
  48. }
  49. }
  50. impl Default for DeviceNumber {
  51. fn default() -> Self {
  52. Self::new(Major::UNNAMED_MAJOR, 0)
  53. }
  54. }
  55. impl From<u32> for DeviceNumber {
  56. fn from(x: u32) -> Self {
  57. Self { data: x }
  58. }
  59. }