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. |
14 | pub fn open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open> { |
15 | let mut gem: drm_gem_open = 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. |
28 | pub fn close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close> { |
29 | let gem: drm_gem_close = 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. |
42 | pub fn handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle> { |
43 | let mut prime: drm_prime_handle = 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. |
57 | pub fn fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle> { |
58 | let mut prime: drm_prime_handle = 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 | |