1 //!
2 //! Bindings to the Graphics Execution Manager
3 //!
4 
5 use crate::ioctl;
6 use drm_sys::*;
7 
8 use std::{
9     io,
10     os::unix::io::{AsRawFd, BorrowedFd},
11 };
12 
13 /// Open a GEM object given it's 32-bit name, returning the handle.
open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open>14 pub fn open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open> {
15     let mut gem = drm_gem_open {
16         name,
17         ..Default::default()
18     };
19 
20     unsafe {
21         ioctl::gem::open(fd, &mut gem)?;
22     }
23 
24     Ok(gem)
25 }
26 
27 /// Closes a GEM object given it's handle.
close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close>28 pub fn close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close> {
29     let gem = drm_gem_close {
30         handle,
31         ..Default::default()
32     };
33 
34     unsafe {
35         ioctl::gem::close(fd, &gem)?;
36     }
37 
38     Ok(gem)
39 }
40 
41 /// Converts a GEM object's handle to a PRIME file descriptor.
handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle>42 pub fn handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle> {
43     let mut prime = drm_prime_handle {
44         handle,
45         flags,
46         ..Default::default()
47     };
48 
49     unsafe {
50         ioctl::gem::prime_handle_to_fd(fd, &mut prime)?;
51     }
52 
53     Ok(prime)
54 }
55 
56 /// Converts a PRIME file descriptor to a GEM object's handle.
fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle>57 pub fn fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle> {
58     let mut prime = drm_prime_handle {
59         fd: primefd.as_raw_fd(),
60         ..Default::default()
61     };
62 
63     unsafe {
64         ioctl::gem::prime_fd_to_handle(fd, &mut prime)?;
65     }
66 
67     Ok(prime)
68 }
69