drm/control/
dumbbuffer.rs
1use crate::buffer;
8
9use std::borrow::{Borrow, BorrowMut};
10use std::ops::{Deref, DerefMut};
11
12#[derive(Debug, Copy, Clone, PartialEq, Eq)]
13pub struct DumbBuffer {
15 pub(crate) size: (u32, u32),
16 pub(crate) length: usize,
17 pub(crate) format: buffer::DrmFourcc,
18 pub(crate) pitch: u32,
19 pub(crate) handle: buffer::Handle,
20}
21
22pub struct DumbMapping<'a> {
24 pub(crate) _phantom: core::marker::PhantomData<&'a ()>,
25 pub(crate) map: &'a mut [u8],
26}
27
28impl AsRef<[u8]> for DumbMapping<'_> {
29 fn as_ref(&self) -> &[u8] {
30 self.map
31 }
32}
33
34impl AsMut<[u8]> for DumbMapping<'_> {
35 fn as_mut(&mut self) -> &mut [u8] {
36 self.map
37 }
38}
39
40impl Borrow<[u8]> for DumbMapping<'_> {
41 fn borrow(&self) -> &[u8] {
42 self.map
43 }
44}
45
46impl BorrowMut<[u8]> for DumbMapping<'_> {
47 fn borrow_mut(&mut self) -> &mut [u8] {
48 self.map
49 }
50}
51
52impl Deref for DumbMapping<'_> {
53 type Target = [u8];
54
55 fn deref(&self) -> &Self::Target {
56 self.map
57 }
58}
59
60impl DerefMut for DumbMapping<'_> {
61 fn deref_mut(&mut self) -> &mut Self::Target {
62 self.map
63 }
64}
65
66impl<'a> Drop for DumbMapping<'a> {
67 fn drop(&mut self) {
68 unsafe {
69 rustix::mm::munmap(self.map.as_mut_ptr() as *mut _, self.map.len())
70 .expect("Unmap failed");
71 }
72 }
73}
74
75impl buffer::Buffer for DumbBuffer {
76 fn size(&self) -> (u32, u32) {
77 self.size
78 }
79 fn format(&self) -> buffer::DrmFourcc {
80 self.format
81 }
82 fn pitch(&self) -> u32 {
83 self.pitch
84 }
85 fn handle(&self) -> buffer::Handle {
86 self.handle
87 }
88}