This commit is contained in:
bjorn3
2025-12-14 20:46:36 +01:00
parent 6bce162b92
commit 395c686f8d
2 changed files with 42 additions and 21 deletions
+41 -20
View File
@@ -55,20 +55,13 @@ impl Dev {
Ok(Self { fd })
}
unsafe fn call<T>(
&self,
payload: &mut T,
func: u64,
) -> syscall::Result<usize> {
let bytes = slice::from_raw_parts_mut(
payload as *mut T as *mut u8,
mem::size_of::<T>(),
);
redox_rt::sys::sys_call(
unsafe fn call<T>(&self, payload: &mut T, func: u64) -> syscall::Result<usize> {
let bytes = slice::from_raw_parts_mut(payload as *mut T as *mut u8, mem::size_of::<T>());
redox_rt::sys::sys_call(
self.fd as usize,
bytes,
syscall::CallFlags::empty(),
&[func]
&[func],
)
}
@@ -81,7 +74,11 @@ impl Dev {
}
fn display_size(&self, display_id: usize) -> Result<(u32, u32)> {
let mut cmd = ipc::DisplaySize { display_id, width: 0, height: 0 };
let mut cmd = ipc::DisplaySize {
display_id,
width: 0,
height: 0,
};
unsafe {
self.call(&mut cmd, ipc::DISPLAY_SIZE)?;
}
@@ -172,9 +169,21 @@ unsafe fn mode_card_res(dev: Dev, mut buf: IoctlBuffer) -> Result<c_int> {
fb_ids.push(fb_id(i));
}
res.count_fbs = copy_array(&fb_ids, res.fb_id_ptr as *mut u32, res.count_fbs as usize) as u32;
res.count_crtcs = copy_array(&crtc_ids, res.crtc_id_ptr as *mut u32, res.count_crtcs as usize) as u32;
res.count_connectors = copy_array(&conn_ids, res.connector_id_ptr as *mut u32, res.count_connectors as usize) as u32;
res.count_encoders = copy_array(&enc_ids, res.encoder_id_ptr as *mut u32, res.count_encoders as usize) as u32;
res.count_crtcs = copy_array(
&crtc_ids,
res.crtc_id_ptr as *mut u32,
res.count_crtcs as usize,
) as u32;
res.count_connectors = copy_array(
&conn_ids,
res.connector_id_ptr as *mut u32,
res.count_connectors as usize,
) as u32;
res.count_encoders = copy_array(
&enc_ids,
res.encoder_id_ptr as *mut u32,
res.count_encoders as usize,
) as u32;
res.min_width = 0;
res.max_width = 16384;
res.min_height = 0;
@@ -281,7 +290,11 @@ unsafe fn mode_get_connector(dev: Dev, mut buf: IoctlBuffer) -> Result<c_int> {
let (width, height) = dev.display_size(i as usize)?;
conn.count_modes = 0;
conn.count_props = 0;
conn.count_encoders = copy_array(&[enc_id(i)], conn.encoders_ptr as *mut u32, conn.count_encoders as usize) as u32;
conn.count_encoders = copy_array(
&[enc_id(i)],
conn.encoders_ptr as *mut u32,
conn.count_encoders as usize,
) as u32;
buf.write(conn)?;
Ok(0)
}
@@ -326,7 +339,11 @@ unsafe fn mode_get_plane_res(dev: Dev, mut buf: IoctlBuffer) -> Result<c_int> {
for i in 0..(count as u32) {
ids.push(plane_id(i));
}
res.count_planes = copy_array(&ids, res.plane_id_ptr as *mut u32, res.count_planes as usize) as u32;
res.count_planes = copy_array(
&ids,
res.plane_id_ptr as *mut u32,
res.count_planes as usize,
) as u32;
buf.write(res)?;
Ok(0)
}
@@ -350,7 +367,11 @@ unsafe fn mode_get_plane(dev: Dev, mut buf: IoctlBuffer) -> Result<c_int> {
plane.crtc_id = crtc_id(i);
plane.fb_id = fb_id(i);
plane.possible_crtcs = (1 << i);
plane.count_format_types = copy_array(&[DRM_FORMAT_ARGB8888], plane.format_type_ptr as *mut u32, plane.count_format_types as usize) as u32;
plane.count_format_types = copy_array(
&[DRM_FORMAT_ARGB8888],
plane.format_type_ptr as *mut u32,
plane.count_format_types as usize,
) as u32;
buf.write(plane)?;
Ok(0)
}
@@ -420,6 +441,6 @@ pub(super) unsafe fn ioctl(fd: c_int, func: u8, buf: IoctlBuffer) -> Result<c_in
_ => {
eprintln!("unimplemented DRM ioctl({}, 0x{:02x}, {:?})", fd, func, buf);
Err(Errno(EINVAL))
},
}
}
}
}
+1 -1
View File
@@ -52,4 +52,4 @@ pub struct UpdatePlane {
pub display_id: usize,
pub fb_id: usize,
pub damage: Damage,
}
}