| 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 | |