Skip to content

Commit 424981d

Browse files
ids1024Drakulix
authored andcommitted
Add Device::syncobj_eventfd
1 parent d926544 commit 424981d

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

drm-ffi/src/ioctl.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,4 +278,6 @@ pub(crate) mod syncobj {
278278
0xCD,
279279
drm_syncobj_timeline_array
280280
);
281+
/// Register an eventfd to be signalled by a syncobj.
282+
ioctl_readwrite!(eventfd, DRM_IOCTL_BASE, 0xCF, drm_syncobj_eventfd);
281283
}

drm-ffi/src/syncobj.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,31 @@ pub fn timeline_signal(
264264

265265
Ok(args)
266266
}
267+
268+
/// Register an eventfd to be signalled by a syncobj.
269+
pub fn eventfd(
270+
fd: BorrowedFd<'_>,
271+
handle: u32,
272+
point: u64,
273+
eventfd: BorrowedFd<'_>,
274+
wait_available: bool,
275+
) -> io::Result<drm_syncobj_eventfd> {
276+
let flags = if wait_available {
277+
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE
278+
} else {
279+
0
280+
};
281+
let mut args = drm_syncobj_eventfd {
282+
handle,
283+
point,
284+
flags,
285+
fd: eventfd.as_raw_fd(),
286+
pad: 0,
287+
};
288+
289+
unsafe {
290+
ioctl::syncobj::eventfd(fd, &mut args)?;
291+
}
292+
293+
Ok(args)
294+
}

src/control/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,18 @@ pub trait Device: super::Device {
954954
Ok(())
955955
}
956956

957+
/// Register an eventfd to be signalled by a syncobj.
958+
fn syncobj_eventfd(
959+
&self,
960+
handle: syncobj::Handle,
961+
point: u64,
962+
eventfd: BorrowedFd<'_>,
963+
wait_available: bool,
964+
) -> io::Result<()> {
965+
ffi::syncobj::eventfd(self.as_fd(), handle.into(), point, eventfd, wait_available)?;
966+
Ok(())
967+
}
968+
957969
/// Create a drm lease
958970
fn create_lease(
959971
&self,

0 commit comments

Comments
 (0)