starnix_modules_kgsl/
init.rs1use crate::KgslFile;
6use starnix_core::device::DeviceOps;
7use starnix_core::task::{CurrentTask, Kernel};
8use starnix_core::vfs::{FileOps, NamespaceNode};
9use starnix_logging::log_info;
10
11use starnix_uapi::device_id::DeviceId;
12use starnix_uapi::errors::Errno;
13use starnix_uapi::open_flags::OpenFlags;
14
15#[derive(Clone)]
16struct KgslDeviceBuilder {}
17
18impl DeviceOps for KgslDeviceBuilder {
19 fn open(
20 &self,
21 current_task: &CurrentTask,
22 id: DeviceId,
23 node: &NamespaceNode,
24 flags: OpenFlags,
25 ) -> Result<Box<dyn FileOps>, Errno> {
26 log_info!("kgsl: open");
27 KgslFile::new_file(current_task, id, &node.entry.node, flags)
28 }
29}
30
31pub fn kgsl_device_init(kernel: &Kernel) {
32 log_info!("kgsl: kgsl_device_init");
33
34 let registry = &kernel.device_registry;
35 let class = registry.objects.get_or_create_class("kgsl".into(), registry.objects.virtual_bus());
36 let builder = KgslDeviceBuilder {};
37
38 registry
39 .register_dyn_device(kernel, "kgsl-3d0".into(), class, builder)
40 .expect("can register kgsl-3d0");
41}