blob: 3c38f0678bf8f22d923cc9719e21d68fbd7f4cdf [file]
// Copyright 2025 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use crate::KgslFile;
use starnix_core::device::DeviceOps;
use starnix_core::task::{CurrentTask, Kernel};
use starnix_core::vfs::{FileOps, NamespaceNode};
use starnix_logging::log_info;
use starnix_uapi::device_id::DeviceId;
use starnix_uapi::errors::Errno;
use starnix_uapi::open_flags::OpenFlags;
#[derive(Clone)]
struct KgslDeviceBuilder {}
impl DeviceOps for KgslDeviceBuilder {
fn open(
&self,
current_task: &CurrentTask,
id: DeviceId,
node: &NamespaceNode,
flags: OpenFlags,
) -> Result<Box<dyn FileOps>, Errno> {
log_info!("kgsl: open");
KgslFile::new_file(current_task, id, &node.entry.node, flags)
}
}
pub fn kgsl_device_init(kernel: &Kernel) {
log_info!("kgsl: kgsl_device_init");
let registry = &kernel.device_registry;
let class = registry.objects.get_or_create_class("kgsl".into(), registry.objects.virtual_bus());
let builder = KgslDeviceBuilder {};
registry
.register_dyn_device(kernel, "kgsl-3d0".into(), class, builder)
.expect("can register kgsl-3d0");
}