blob: 109d04a87f4be1a45be9dc4fad0373b2fa84947d [file] [log] [blame] [edit]
// Copyright 2023 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::{
device::{magma::MagmaFile, DeviceMode},
fs::{
kobject::{KObjectDeviceAttribute, KType},
sysfs::SysFsDirectory,
FileOps, FsNode,
},
task::{CurrentTask, Kernel},
types::*,
};
use std::sync::Arc;
fn create_magma_device(
current_task: &CurrentTask,
id: DeviceType,
node: &FsNode,
flags: OpenFlags,
) -> Result<Box<dyn FileOps>, Errno> {
MagmaFile::new_file(current_task, id, node, flags)
}
pub fn magma_device_init(kernel: &Arc<Kernel>) {
let starnix_class = kernel.device_registry.virtual_bus().get_or_create_child(
b"starnix",
KType::Class,
SysFsDirectory::new,
);
let magma_type: DeviceType = kernel
.device_registry
.register_dyn_chrdev(create_magma_device)
.expect("magma device register failed.");
kernel.add_device(KObjectDeviceAttribute::new(
Some(starnix_class),
b"magma0",
b"magma0",
magma_type,
DeviceMode::Char,
));
}