51 lines · 1.1 KB · Rust
RawDownload
// SPDX-License-Identifier: GPL-2.0 use kernel::{    drm,    drm::{        gem,        gem::BaseObject, //    },    page,    prelude::*,    sync::aref::ARef,}; use crate::{    driver::{NovaDevice, NovaDriver},    file::File,}; /// GEM Object inner driver data#[pin_data]pub(crate) struct NovaObject {} impl gem::DriverObject for NovaObject {    type Driver = NovaDriver;    type Args = ();     fn new(_dev: &NovaDevice, _size: usize, _args: Self::Args) -> impl PinInit<Self, Error> {        try_pin_init!(NovaObject {})    }} impl NovaObject {    /// Create a new DRM GEM object.    pub(crate) fn new(dev: &NovaDevice, size: usize) -> Result<ARef<gem::Object<Self>>> {        if size == 0 {            return Err(EINVAL);        }        let aligned_size = page::page_align(size).ok_or(EINVAL)?;         gem::Object::<Self>::new(dev, aligned_size, ())    }     /// Look up a GEM object handle for a `File` and return an `ObjectRef` for it.    #[inline]    pub(crate) fn lookup_handle(        file: &drm::File<File>,        handle: u32,    ) -> Result<ARef<gem::Object<Self>>> {        gem::Object::lookup_handle(file, handle)    }}