把opengrok.ringotek.cn替换为code.dragonos.org.cn (#484)

This commit is contained in:
LoGin 2024-01-01 11:53:49 +08:00 committed by GitHub
parent c566df451c
commit e7071df6a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 96 additions and 96 deletions

View File

@ -29,7 +29,7 @@ impl TSCManager {
/// ///
/// 目前由于未支持acpi pm timer, 因此调用该函数时HPET应当完成初始化否则将无法校准TSC /// 目前由于未支持acpi pm timer, 因此调用该函数时HPET应当完成初始化否则将无法校准TSC
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#1511 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#1511
pub fn init() -> Result<(), SystemError> { pub fn init() -> Result<(), SystemError> {
let cpuid = x86::cpuid::CpuId::new(); let cpuid = x86::cpuid::CpuId::new();
let feat = cpuid.get_feature_info().ok_or(SystemError::ENODEV)?; let feat = cpuid.get_feature_info().ok_or(SystemError::ENODEV)?;
@ -57,7 +57,7 @@ impl TSCManager {
/// ///
/// - `early`:是否在早期初始化 /// - `early`:是否在早期初始化
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#1438 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#1438
fn determine_cpu_tsc_frequency(early: bool) -> Result<(), SystemError> { fn determine_cpu_tsc_frequency(early: bool) -> Result<(), SystemError> {
if unlikely(Self::cpu_khz() != 0 || Self::tsc_khz() != 0) { if unlikely(Self::cpu_khz() != 0 || Self::tsc_khz() != 0) {
kwarn!("TSC and CPU frequency already determined"); kwarn!("TSC and CPU frequency already determined");
@ -237,7 +237,7 @@ impl TSCManager {
/// 尝试使用PIT来校准tsc时间并且返回tsc的频率khz /// 尝试使用PIT来校准tsc时间并且返回tsc的频率khz
/// 如果失败那么返回None /// 如果失败那么返回None
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#389 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#389
fn pit_calibrate_tsc(latch: u64, ms: u64, loopmin: u64) -> Option<u64> { fn pit_calibrate_tsc(latch: u64, ms: u64, loopmin: u64) -> Option<u64> {
// 当前暂时没写legacy pic的驱动因此这里直接返回 // 当前暂时没写legacy pic的驱动因此这里直接返回
let has_legacy_pic = false; let has_legacy_pic = false;
@ -307,7 +307,7 @@ impl TSCManager {
/// ///
/// - `Ok((tsc, ref))`tsc和参考值 /// - `Ok((tsc, ref))`tsc和参考值
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#317 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#317
fn read_refs(hpet_enabled: bool) -> (u64, u64) { fn read_refs(hpet_enabled: bool) -> (u64, u64) {
let thresh = if Self::tsc_khz() == 0 { let thresh = if Self::tsc_khz() == 0 {
Self::DEFAULT_THRESHOLD Self::DEFAULT_THRESHOLD
@ -335,7 +335,7 @@ impl TSCManager {
/// 根据HPET的参考值计算tsc的频率 /// 根据HPET的参考值计算tsc的频率
/// ///
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#339 /// https://code.dragonos.org.cn/xref/linux-6.1.9/arch/x86/kernel/tsc.c#339
fn calc_hpet_ref(mut deltatsc: u64, ref1: u64, mut ref2: u64) -> u64 { fn calc_hpet_ref(mut deltatsc: u64, ref1: u64, mut ref2: u64) -> u64 {
if ref2 <= ref1 { if ref2 <= ref1 {
ref2 += 0x100000000; ref2 += 0x100000000;

View File

@ -536,7 +536,7 @@ fn handle_signal(
oldset: &SigSet, oldset: &SigSet,
frame: &mut TrapFrame, frame: &mut TrapFrame,
) -> Result<i32, SystemError> { ) -> Result<i32, SystemError> {
// TODO 这里要补充一段逻辑好像是为了保证引入线程之后的地址空间不会出问题。详见https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/mips/kernel/signal.c#830 // TODO 这里要补充一段逻辑好像是为了保证引入线程之后的地址空间不会出问题。详见https://code.dragonos.org.cn/xref/linux-6.1.9/arch/mips/kernel/signal.c#830
// 设置栈帧 // 设置栈帧
return setup_frame(sig, sigaction, info, oldset, frame); return setup_frame(sig, sigaction, info, oldset, frame);

View File

@ -134,7 +134,7 @@ impl X86_64SmpManager {
} }
/// initialize the logical cpu number to APIC ID mapping /// initialize the logical cpu number to APIC ID mapping
pub fn build_cpu_map(&self) -> Result<(), SystemError> { pub fn build_cpu_map(&self) -> Result<(), SystemError> {
// 参考https://opengrok.ringotek.cn/xref/linux-6.1.9/arch/ia64/kernel/smpboot.c?fi=smp_build_cpu_map#496 // 参考https://code.dragonos.org.cn/xref/linux-6.1.9/arch/ia64/kernel/smpboot.c?fi=smp_build_cpu_map#496
// todo!("build_cpu_map") // todo!("build_cpu_map")
return Ok(()); return Ok(());
} }

View File

@ -17,7 +17,7 @@ use super::AcpiManager;
impl AcpiManager { impl AcpiManager {
/// 通过acpi来匹配驱动 /// 通过acpi来匹配驱动
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#949 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#949
pub fn driver_match_device( pub fn driver_match_device(
&self, &self,
_driver: &Arc<dyn Driver>, _driver: &Arc<dyn Driver>,
@ -28,7 +28,7 @@ impl AcpiManager {
return Ok(false); return Ok(false);
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1286 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1286
pub(super) fn bus_init(&self) -> Result<(), SystemError> { pub(super) fn bus_init(&self) -> Result<(), SystemError> {
self.acpi_sysfs_init()?; self.acpi_sysfs_init()?;
@ -42,7 +42,7 @@ impl AcpiManager {
/// ACPI总线 /// ACPI总线
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1072 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1072
#[derive(Debug)] #[derive(Debug)]
pub(super) struct AcpiBus { pub(super) struct AcpiBus {
private: SubSysPrivate, private: SubSysPrivate,
@ -68,7 +68,7 @@ impl Bus for AcpiBus {
self.name() self.name()
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1056 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1056
fn remove(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> { fn remove(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> {
todo!("acpi_bus: remove") todo!("acpi_bus: remove")
} }
@ -83,7 +83,7 @@ impl Bus for AcpiBus {
/// 通过acpi来匹配驱动 /// 通过acpi来匹配驱动
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1005 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1005
fn match_device( fn match_device(
&self, &self,
_device: &Arc<dyn Device>, _device: &Arc<dyn Device>,
@ -93,7 +93,7 @@ impl Bus for AcpiBus {
return Ok(false); return Ok(false);
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1019 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1019
fn probe(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> { fn probe(&self, _device: &Arc<dyn Device>) -> Result<(), SystemError> {
todo!("acpi_bus: probe") todo!("acpi_bus: probe")
} }
@ -110,7 +110,7 @@ impl Bus for AcpiBus {
/// todo: 仿照linux的acpi_device去设计这个trait /// todo: 仿照linux的acpi_device去设计这个trait
/// ///
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#364 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#364
pub trait AcpiDevice: Device {} pub trait AcpiDevice: Device {}
/// Acpi驱动应当实现的trait /// Acpi驱动应当实现的trait
@ -119,5 +119,5 @@ pub trait AcpiDevice: Device {}
/// ///
/// todo: 仿照linux的acpi_driver去设计这个trait /// todo: 仿照linux的acpi_driver去设计这个trait
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#163 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/acpi/acpi_bus.h#163
pub trait AcpiDriver: Driver {} pub trait AcpiDriver: Driver {}

View File

@ -2,7 +2,7 @@ use alloc::sync::Arc;
use crate::driver::base::device::Device; use crate::driver::base::device::Device;
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/glue.c#352 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/glue.c#352
pub fn acpi_device_notify(_dev: &Arc<dyn Device>) { pub fn acpi_device_notify(_dev: &Arc<dyn Device>) {
return; return;
} }

View File

@ -55,7 +55,7 @@ impl AcpiManager {
/// ///
/// ## 参考资料 /// ## 参考资料
/// ///
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1390 /// https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/bus.c#1390
pub fn init(&self, rsdp_vaddr1: u64, rsdp_vaddr2: u64) -> Result<(), SystemError> { pub fn init(&self, rsdp_vaddr1: u64, rsdp_vaddr2: u64) -> Result<(), SystemError> {
kinfo!("Initializing Acpi Manager..."); kinfo!("Initializing Acpi Manager...");

View File

@ -79,7 +79,7 @@ impl AcpiManager {
/// 在 sysfs 中创建 ACPI 表目录 /// 在 sysfs 中创建 ACPI 表目录
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#488 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#488
fn acpi_tables_sysfs_init(&self) -> Result<(), SystemError> { fn acpi_tables_sysfs_init(&self) -> Result<(), SystemError> {
// 创建 `/sys/firmware/acpi/tables` 目录 // 创建 `/sys/firmware/acpi/tables` 目录
let acpi_tables_kset = KSet::new("tables".to_string()); let acpi_tables_kset = KSet::new("tables".to_string());
@ -115,7 +115,7 @@ impl AcpiManager {
return Ok(()); return Ok(());
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#469 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#469
fn acpi_table_data_init(&self, _header: &SdtHeader) -> Result<(), SystemError> { fn acpi_table_data_init(&self, _header: &SdtHeader) -> Result<(), SystemError> {
// todo!("AcpiManager::acpi_table_data_init()") // todo!("AcpiManager::acpi_table_data_init()")
return Ok(()); return Ok(());
@ -237,7 +237,7 @@ impl BinAttribute for AttrAcpiTable {
/// 展示 ACPI 表的内容 /// 展示 ACPI 表的内容
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#320 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/acpi/sysfs.c?fi=acpi_sysfs_init#320
fn read( fn read(
&self, &self,
_kobj: Arc<dyn KObject>, _kobj: Arc<dyn KObject>,

View File

@ -36,7 +36,7 @@ pub struct CpuDeviceManager;
impl CpuDeviceManager { impl CpuDeviceManager {
/// 初始化设备驱动模型的CPU子系统 /// 初始化设备驱动模型的CPU子系统
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/cpu.c?fi=get_cpu_device#622 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/cpu.c?fi=get_cpu_device#622
pub fn init(&self) -> Result<(), SystemError> { pub fn init(&self) -> Result<(), SystemError> {
let cpu_subsys = CpuSubSystem::new(); let cpu_subsys = CpuSubSystem::new();
let root_device = CpuSubSystemFakeRootDevice::new(); let root_device = CpuSubSystemFakeRootDevice::new();
@ -53,7 +53,7 @@ impl CpuDeviceManager {
/// cpu子系统 /// cpu子系统
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/cpu.c?fi=get_cpu_device#128 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/cpu.c?fi=get_cpu_device#128
#[derive(Debug)] #[derive(Debug)]
struct CpuSubSystem { struct CpuSubSystem {
subsys_private: SubSysPrivate, subsys_private: SubSysPrivate,

View File

@ -99,7 +99,7 @@ impl From<BusState> for DeviceState {
/// 总线子系统的trait所有总线都应实现该trait /// 总线子系统的trait所有总线都应实现该trait
/// ///
/// 请注意这个trait是用于实现总线子系统的而不是总线驱动/总线设备。 /// 请注意这个trait是用于实现总线子系统的而不是总线驱动/总线设备。
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/device/bus.h#84 /// https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/device/bus.h#84
pub trait Bus: Debug + Send + Sync { pub trait Bus: Debug + Send + Sync {
fn name(&self) -> String; fn name(&self) -> String;
/// Used for subsystems to enumerate devices like ("foo%u", dev->id). /// Used for subsystems to enumerate devices like ("foo%u", dev->id).
@ -256,7 +256,7 @@ impl BusManager {
/// - 在bus和设备文件夹下创建软链接 /// - 在bus和设备文件夹下创建软链接
/// - 把设备添加到它的总线的设备列表中 /// - 把设备添加到它的总线的设备列表中
/// ///
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_device#441 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_device#441
/// ///
/// ## 参数 /// ## 参数
/// ///
@ -290,7 +290,7 @@ impl BusManager {
/// 在总线上添加一个驱动 /// 在总线上添加一个驱动
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_driver#590 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_driver#590
pub fn add_driver(&self, driver: &Arc<dyn Driver>) -> Result<(), SystemError> { pub fn add_driver(&self, driver: &Arc<dyn Driver>) -> Result<(), SystemError> {
let bus = driver let bus = driver
.bus() .bus()
@ -350,7 +350,7 @@ impl BusManager {
/// infrastructure, then register the children subsystems it has: /// infrastructure, then register the children subsystems it has:
/// the devices and drivers that belong to the subsystem. /// the devices and drivers that belong to the subsystem.
/// ///
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_register#783 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_register#783
/// ///
/// todo: 增加错误处理逻辑 /// todo: 增加错误处理逻辑
pub fn register(&self, bus: Arc<dyn Bus>) -> Result<(), SystemError> { pub fn register(&self, bus: Arc<dyn Bus>) -> Result<(), SystemError> {
@ -468,7 +468,7 @@ impl BusManager {
/// ///
/// - `driver` - 驱动实例 /// - `driver` - 驱动实例
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_remove_driver#666 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_remove_driver#666
pub fn remove_driver(&self, _driver: &Arc<dyn Driver>) { pub fn remove_driver(&self, _driver: &Arc<dyn Driver>) {
todo!("BusManager::remove_driver") todo!("BusManager::remove_driver")
} }
@ -487,7 +487,7 @@ impl BusManager {
} }
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#684 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#684
fn rescan_devices_helper(dev: &Arc<dyn Device>) -> Result<(), SystemError> { fn rescan_devices_helper(dev: &Arc<dyn Device>) -> Result<(), SystemError> {
if dev.driver().is_none() { if dev.driver().is_none() {
let need_parent_lock = dev let need_parent_lock = dev
@ -562,7 +562,7 @@ pub fn buses_init() -> Result<(), SystemError> {
/// - 在bus和设备文件夹下创建软链接 /// - 在bus和设备文件夹下创建软链接
/// - 把设备添加到它的总线的设备列表中 /// - 把设备添加到它的总线的设备列表中
/// ///
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_device#441 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_add_device#441
/// ///
/// ## 参数 /// ## 参数
/// ///
@ -579,7 +579,7 @@ pub fn bus_add_device(dev: &Arc<dyn Device>) -> Result<(), SystemError> {
/// ///
/// - `dev` - 要被添加的设备 /// - `dev` - 要被添加的设备
/// ///
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_probe_device#478 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=bus_probe_device#478
pub fn bus_probe_device(dev: &Arc<dyn Device>) { pub fn bus_probe_device(dev: &Arc<dyn Device>) {
kinfo!("bus_probe_device: dev: {:?}", dev.name()); kinfo!("bus_probe_device: dev: {:?}", dev.name());
bus_manager().probe_device(dev); bus_manager().probe_device(dev);
@ -601,7 +601,7 @@ impl Attribute for BusAttrDriversProbe {
return SysFSOpsSupport::STORE; return SysFSOpsSupport::STORE;
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#241 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#241
fn store(&self, kobj: Arc<dyn KObject>, buf: &[u8]) -> Result<usize, SystemError> { fn store(&self, kobj: Arc<dyn KObject>, buf: &[u8]) -> Result<usize, SystemError> {
let kset: Arc<KSet> = kobj.arc_any().downcast().map_err(|_| SystemError::EINVAL)?; let kset: Arc<KSet> = kobj.arc_any().downcast().map_err(|_| SystemError::EINVAL)?;
let bus = bus_manager() let bus = bus_manager()
@ -639,7 +639,7 @@ impl Attribute for BusAttrDriversAutoprobe {
return SysFSOpsSupport::STORE | SysFSOpsSupport::SHOW; return SysFSOpsSupport::STORE | SysFSOpsSupport::SHOW;
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#231 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#231
fn store(&self, kobj: Arc<dyn KObject>, buf: &[u8]) -> Result<usize, SystemError> { fn store(&self, kobj: Arc<dyn KObject>, buf: &[u8]) -> Result<usize, SystemError> {
if buf.len() == 0 { if buf.len() == 0 {
return Ok(0); return Ok(0);
@ -659,7 +659,7 @@ impl Attribute for BusAttrDriversAutoprobe {
return Ok(buf.len()); return Ok(buf.len());
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#226 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?r=&mo=5649&fi=241#226
fn show(&self, kobj: Arc<dyn KObject>, buf: &mut [u8]) -> Result<usize, SystemError> { fn show(&self, kobj: Arc<dyn KObject>, buf: &mut [u8]) -> Result<usize, SystemError> {
let kset: Arc<KSet> = kobj.arc_any().downcast().map_err(|_| SystemError::EINVAL)?; let kset: Arc<KSet> = kobj.arc_any().downcast().map_err(|_| SystemError::EINVAL)?;
let bus = bus_manager() let bus = bus_manager()
@ -841,7 +841,7 @@ impl SubSystemManager {
/// - `fake_root_dev` - 该子系统的伪根设备 /// - `fake_root_dev` - 该子系统的伪根设备
/// - `parent_of_root` - 该子系统的伪根设备的父级节点 /// - `parent_of_root` - 该子系统的伪根设备的父级节点
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=subsys_system_register#1078 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/bus.c?fi=subsys_system_register#1078
pub fn subsys_register( pub fn subsys_register(
&self, &self,
subsys: &Arc<dyn Bus>, subsys: &Arc<dyn Bus>,

View File

@ -40,7 +40,7 @@ impl DeviceManager {
/// ///
/// ## 参考 /// ## 参考
/// ///
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#1049 /// https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#1049
pub fn device_attach(&self, dev: &Arc<dyn Device>) -> Result<bool, SystemError> { pub fn device_attach(&self, dev: &Arc<dyn Device>) -> Result<bool, SystemError> {
return self.do_device_attach(dev, false); return self.do_device_attach(dev, false);
} }
@ -49,7 +49,7 @@ impl DeviceManager {
return self.do_device_attach(dev, true); return self.do_device_attach(dev, true);
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#978 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#978
fn do_device_attach( fn do_device_attach(
&self, &self,
dev: &Arc<dyn Device>, dev: &Arc<dyn Device>,
@ -137,7 +137,7 @@ impl DeviceManager {
/// - Ok(true): 匹配成功 /// - Ok(true): 匹配成功
/// - Ok(false): 没有匹配成功 /// - Ok(false): 没有匹配成功
/// - Err(SystemError): 匹配过程中出现意外错误,没有匹配成功 /// - Err(SystemError): 匹配过程中出现意外错误,没有匹配成功
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#899 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#899
fn do_device_attach_driver( fn do_device_attach_driver(
&self, &self,
driver: &Arc<dyn Driver>, driver: &Arc<dyn Driver>,
@ -202,7 +202,7 @@ impl DeviceManager {
/// ///
/// 使用device_manager().driver_attach()会更好 /// 使用device_manager().driver_attach()会更好
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#496 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#496
pub fn device_bind_driver(&self, dev: &Arc<dyn Device>) -> Result<(), SystemError> { pub fn device_bind_driver(&self, dev: &Arc<dyn Device>) -> Result<(), SystemError> {
let r = driver_manager().driver_sysfs_add(dev); let r = driver_manager().driver_sysfs_add(dev);
if let Err(e) = r { if let Err(e) = r {
@ -221,14 +221,14 @@ impl DeviceManager {
return r; return r;
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#528 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#528
fn unbind_cleanup(&self, dev: &Arc<dyn Device>) { fn unbind_cleanup(&self, dev: &Arc<dyn Device>) {
dev.set_driver(None); dev.set_driver(None);
// todo: 添加更多操作,清理数据 // todo: 添加更多操作,清理数据
} }
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#866 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#866
#[derive(Debug)] #[derive(Debug)]
#[allow(dead_code)] #[allow(dead_code)]
struct DeviceAttachData { struct DeviceAttachData {
@ -296,7 +296,7 @@ impl DriverManager {
return Ok(()); return Ok(());
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#1134 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#1134
fn do_driver_attach(&self, device: &Arc<dyn Device>, driver: &Arc<dyn Driver>) -> bool { fn do_driver_attach(&self, device: &Arc<dyn Device>, driver: &Arc<dyn Driver>) -> bool {
let r = self.match_device(driver, device).unwrap_or(false); let r = self.match_device(driver, device).unwrap_or(false);
if r == false { if r == false {
@ -341,7 +341,7 @@ impl DriverManager {
/// - Err(ENODEV): 设备未注册 /// - Err(ENODEV): 设备未注册
/// - Err(EBUSY): 设备已经绑定到驱动上 /// - Err(EBUSY): 设备已经绑定到驱动上
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#802 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#802
fn probe_device( fn probe_device(
&self, &self,
driver: &Arc<dyn Driver>, driver: &Arc<dyn Driver>,
@ -371,7 +371,7 @@ impl DriverManager {
return Ok(()); return Ok(());
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#584 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#584
fn really_probe( fn really_probe(
&self, &self,
driver: &Arc<dyn Driver>, driver: &Arc<dyn Driver>,
@ -461,7 +461,7 @@ impl DriverManager {
return Ok(()); return Ok(());
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#434 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#434
fn add_to_sysfs(&self, device: &Arc<dyn Device>) -> Result<(), SystemError> { fn add_to_sysfs(&self, device: &Arc<dyn Device>) -> Result<(), SystemError> {
let driver = device.driver().ok_or(SystemError::EINVAL)?; let driver = device.driver().ok_or(SystemError::EINVAL)?;
@ -500,7 +500,7 @@ impl DriverManager {
return Ok(()); return Ok(());
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#469 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#469
fn remove_from_sysfs(&self, _device: &Arc<dyn Device>) { fn remove_from_sysfs(&self, _device: &Arc<dyn Device>) {
todo!("remove_from_sysfs") todo!("remove_from_sysfs")
} }
@ -554,7 +554,7 @@ impl DriverManager {
} }
/// 当设备被成功探测,进行了'设备->驱动'绑定后,调用这个函数,完成'驱动->设备'的绑定 /// 当设备被成功探测,进行了'设备->驱动'绑定后,调用这个函数,完成'驱动->设备'的绑定
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#393 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#393
fn driver_bound(&self, device: &Arc<dyn Device>) { fn driver_bound(&self, device: &Arc<dyn Device>) {
if self.driver_is_bound(device) { if self.driver_is_bound(device) {
kwarn!("driver_bound: device '{}' is already bound.", device.name()); kwarn!("driver_bound: device '{}' is already bound.", device.name());

View File

@ -172,7 +172,7 @@ impl DriverManager {
/// ///
/// - driver: 驱动 /// - driver: 驱动
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/driver.c#222 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/driver.c#222
pub fn register(&self, driver: Arc<dyn Driver>) -> Result<(), SystemError> { pub fn register(&self, driver: Arc<dyn Driver>) -> Result<(), SystemError> {
let bus = driver let bus = driver
.bus() .bus()
@ -215,7 +215,7 @@ impl DriverManager {
bus_manager().remove_driver(driver); bus_manager().remove_driver(driver);
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c#434 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c#434
pub fn driver_sysfs_add(&self, _dev: &Arc<dyn Device>) -> Result<(), SystemError> { pub fn driver_sysfs_add(&self, _dev: &Arc<dyn Device>) -> Result<(), SystemError> {
todo!("DriverManager::driver_sysfs_add()"); todo!("DriverManager::driver_sysfs_add()");
} }

View File

@ -347,7 +347,7 @@ impl From<DeviceState> for u32 {
pub struct DeviceKObjType; pub struct DeviceKObjType;
impl KObjType for DeviceKObjType { impl KObjType for DeviceKObjType {
// https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/core.c#2307 // https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/core.c#2307
fn release(&self, kobj: Arc<dyn KObject>) { fn release(&self, kobj: Arc<dyn KObject>) {
let dev = kobj.cast::<dyn Device>().unwrap(); let dev = kobj.cast::<dyn Device>().unwrap();
/* /*
@ -420,7 +420,7 @@ impl DeviceManager {
/// @parameter dev: 设备实例 /// @parameter dev: 设备实例
/// @return: None /// @return: None
/// ///
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/core.c#3398 /// https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/core.c#3398
/// ///
/// todo: 完善错误处理逻辑:如果添加失败,需要将之前添加的内容全部回滚 /// todo: 完善错误处理逻辑:如果添加失败,需要将之前添加的内容全部回滚
#[inline] #[inline]
@ -553,7 +553,7 @@ impl DeviceManager {
todo!() todo!()
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#542 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?fi=driver_attach#542
fn remove(&self, _dev: &Arc<dyn Device>) { fn remove(&self, _dev: &Arc<dyn Device>) {
todo!("DeviceManager::remove") todo!("DeviceManager::remove")
} }
@ -759,21 +759,21 @@ impl DeviceManager {
return kobj; return kobj;
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/core.c?fi=device_links_force_bind#1226 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/core.c?fi=device_links_force_bind#1226
pub fn device_links_force_bind(&self, _dev: &Arc<dyn Device>) { pub fn device_links_force_bind(&self, _dev: &Arc<dyn Device>) {
todo!("device_links_force_bind") todo!("device_links_force_bind")
} }
/// 把device对象的一些结构进行默认初始化 /// 把device对象的一些结构进行默认初始化
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/core.c?fi=device_initialize#2976 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/core.c?fi=device_initialize#2976
pub fn device_default_initialize(&self, dev: &Arc<dyn Device>) { pub fn device_default_initialize(&self, dev: &Arc<dyn Device>) {
dev.set_kset(Some(sys_devices_kset())); dev.set_kset(Some(sys_devices_kset()));
dev.set_kobj_type(Some(&DeviceKObjType)); dev.set_kobj_type(Some(&DeviceKObjType));
return; return;
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?r=&mo=29885&fi=1100#1100 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?r=&mo=29885&fi=1100#1100
pub fn device_driver_attach( pub fn device_driver_attach(
&self, &self,
_driver: &Arc<dyn Driver>, _driver: &Arc<dyn Driver>,
@ -782,7 +782,7 @@ impl DeviceManager {
todo!("device_driver_attach") todo!("device_driver_attach")
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/dd.c?r=&mo=35401&fi=1313#1313 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/dd.c?r=&mo=35401&fi=1313#1313
pub fn device_driver_detach(&self, _dev: &Arc<dyn Device>) { pub fn device_driver_detach(&self, _dev: &Arc<dyn Device>) {
todo!("device_driver_detach") todo!("device_driver_detach")
} }

View File

@ -192,7 +192,7 @@ impl KObjectManager {
let r = Self::create_dir(kobj.clone()); let r = Self::create_dir(kobj.clone());
if let Err(e) = r { if let Err(e) = r {
// https://opengrok.ringotek.cn/xref/linux-6.1.9/lib/kobject.c?r=&mo=10426&fi=394#224 // https://code.dragonos.org.cn/xref/linux-6.1.9/lib/kobject.c?r=&mo=10426&fi=394#224
if let Some(kset) = kobj.kset() { if let Some(kset) = kobj.kset() {
kset.leave(&kobj); kset.leave(&kobj);
} }

View File

@ -73,7 +73,7 @@ impl CompatibleTable {
/// @parameter: None /// @parameter: None
/// @return: None /// @return: None
/// ///
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=platform_bus_init#1511 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=platform_bus_init#1511
pub fn platform_bus_init() -> Result<(), SystemError> { pub fn platform_bus_init() -> Result<(), SystemError> {
let platform_device: Arc<PlatformBusDevice> = PlatformBusDevice::new( let platform_device: Arc<PlatformBusDevice> = PlatformBusDevice::new(
DevicePrivateData::new( DevicePrivateData::new(

View File

@ -103,7 +103,7 @@ impl PlatformDeviceManager {
} }
} }
// todo: 插入资源: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=platform_device_add#691 // todo: 插入资源: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=platform_device_add#691
let r = device_manager().add_device(pdev.clone() as Arc<dyn Device>); let r = device_manager().add_device(pdev.clone() as Arc<dyn Device>);
if r.is_ok() { if r.is_ok() {
pdev.set_state(DeviceState::Initialized); pdev.set_state(DeviceState::Initialized);

View File

@ -39,7 +39,7 @@ pub struct PlatformDriverManager;
impl PlatformDriverManager { impl PlatformDriverManager {
/// 注册平台设备驱动 /// 注册平台设备驱动
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=__platform_driver_register#861 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/platform.c?fi=__platform_driver_register#861
pub fn register(&self, driver: Arc<dyn PlatformDriver>) -> Result<(), SystemError> { pub fn register(&self, driver: Arc<dyn PlatformDriver>) -> Result<(), SystemError> {
driver.set_bus(Some(Arc::downgrade(&(platform_bus() as Arc<dyn Bus>)))); driver.set_bus(Some(Arc::downgrade(&(platform_bus() as Arc<dyn Bus>))));
return driver_manager().register(driver as Arc<dyn Driver>); return driver_manager().register(driver as Arc<dyn Driver>);

View File

@ -111,7 +111,7 @@ impl Bus for PlatformBus {
/// and compare it against the name of the driver. Return whether they match /// and compare it against the name of the driver. Return whether they match
/// or not. /// or not.
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/platform.c#1331 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/platform.c#1331
/// ///
/// ///
fn match_device( fn match_device(
@ -151,7 +151,7 @@ impl AttributeGroup for PlatformDeviceAttrGroup {
} }
fn attrs(&self) -> &[&'static dyn Attribute] { fn attrs(&self) -> &[&'static dyn Attribute] {
// todo: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/platform.c?r=&mo=38425&fi=1511#1311 // todo: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/platform.c?r=&mo=38425&fi=1511#1311
return &[]; return &[];
} }

View File

@ -189,7 +189,7 @@ impl SubSysPrivate {
} }
} }
/// 参考: https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/device.h#63 /// 参考: https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/device.h#63
pub trait SubSysInterface: Debug + Send + Sync { pub trait SubSysInterface: Debug + Send + Sync {
fn name(&self) -> &str; fn name(&self) -> &str;
fn bus(&self) -> Option<Weak<dyn Bus>>; fn bus(&self) -> Option<Weak<dyn Bus>>;

View File

@ -3,6 +3,6 @@ use alloc::sync::Arc;
use super::device::Device; use super::device::Device;
pub fn software_node_notify(_dev: &Arc<dyn Device>) { pub fn software_node_notify(_dev: &Arc<dyn Device>) {
// todo: https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/base/swnode.c?fi=software_node_notify#1120 // todo: https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/base/swnode.c?fi=software_node_notify#1120
return; return;
} }

View File

@ -22,7 +22,7 @@ pub trait UartDriver: Debug + Send + Sync + TtyDriver {
/// 串口端口应当实现的trait /// 串口端口应当实现的trait
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/serial_core.h#428 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/serial_core.h#428
pub trait UartPort { pub trait UartPort {
fn iobase(&self) -> Option<usize> { fn iobase(&self) -> Option<usize> {
None None
@ -55,7 +55,7 @@ pub(super) struct UartManager;
impl UartManager { impl UartManager {
/// todo: 把uart设备注册到tty层 /// todo: 把uart设备注册到tty层
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/tty/serial/serial_core.c?fi=uart_register_driver#2720 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/tty/serial/serial_core.c?fi=uart_register_driver#2720
pub fn register_driver(&self, _driver: &Arc<dyn UartDriver>) -> Result<(), SystemError> { pub fn register_driver(&self, _driver: &Arc<dyn UartDriver>) -> Result<(), SystemError> {
return Ok(()); return Ok(());
} }

View File

@ -79,7 +79,7 @@ impl Serial8250Manager {
/// ///
/// 应当在设备驱动模型初始化之后调用这里 /// 应当在设备驱动模型初始化之后调用这里
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/tty/serial/8250/8250_core.c?r=&mo=30224&fi=1169#1169 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/tty/serial/8250/8250_core.c?r=&mo=30224&fi=1169#1169
pub fn init(&self) -> Result<(), SystemError> { pub fn init(&self) -> Result<(), SystemError> {
// 初始化serial8250 isa设备 // 初始化serial8250 isa设备
let serial8250_isa_dev = Serial8250ISADevices::new(); let serial8250_isa_dev = Serial8250ISADevices::new();
@ -123,7 +123,7 @@ impl Serial8250Manager {
/// 把uart端口与uart driver、uart device绑定 /// 把uart端口与uart driver、uart device绑定
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/tty/serial/8250/8250_core.c?r=&mo=30224&fi=1169#553 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/tty/serial/8250/8250_core.c?r=&mo=30224&fi=1169#553
fn register_ports( fn register_ports(
&self, &self,
uart_driver: &Arc<Serial8250ISADriver>, uart_driver: &Arc<Serial8250ISADriver>,
@ -134,7 +134,7 @@ impl Serial8250Manager {
/// 把uart端口与uart driver绑定 /// 把uart端口与uart driver绑定
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/drivers/tty/serial/serial_core.c?fi=uart_add_one_port#3048 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/drivers/tty/serial/serial_core.c?fi=uart_add_one_port#3048
pub(self) fn uart_add_one_port( pub(self) fn uart_add_one_port(
&self, &self,
_uart_driver: &Arc<Serial8250ISADriver>, _uart_driver: &Arc<Serial8250ISADriver>,
@ -344,7 +344,7 @@ impl InnerSerial8250ISADevices {
} }
/// Serial 8250平台设备的id /// Serial 8250平台设备的id
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/serial_8250.h?fi=PLAT8250_DEV_LEGACY#49 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/serial_8250.h?fi=PLAT8250_DEV_LEGACY#49
#[derive(Debug)] #[derive(Debug)]
#[repr(i32)] #[repr(i32)]
enum Serial8250PlatformDeviceID { enum Serial8250PlatformDeviceID {

View File

@ -9,7 +9,7 @@ use super::tty_device::TtyDevice;
/// TTY 驱动 /// TTY 驱动
/// ///
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/tty_driver.h#434 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/tty_driver.h#434
pub trait TtyDriver: Debug + Send + Sync + Driver { pub trait TtyDriver: Debug + Send + Sync + Driver {
fn driver_name(&self) -> &str; fn driver_name(&self) -> &str;
fn dev_name(&self) -> &str; fn dev_name(&self) -> &str;
@ -42,20 +42,20 @@ pub struct TtyDriverMetadata {
subtype: TtyDriverSubtype, subtype: TtyDriverSubtype,
} }
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/tty_driver.h#411 /// https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/tty_driver.h#411
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum TtyDriverType {} pub enum TtyDriverType {}
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/tty_driver.h#412 /// https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/tty_driver.h#412
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum TtyDriverSubtype {} pub enum TtyDriverSubtype {}
bitflags! { bitflags! {
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/tty_driver.h?fi=SERIAL_TYPE_NORMAL#492 /// https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/tty_driver.h?fi=SERIAL_TYPE_NORMAL#492
pub struct TtyDriverFlags: u64 { pub struct TtyDriverFlags: u64 {
} }
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/linux/tty_driver.h#350 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/linux/tty_driver.h#350
pub trait TtyDriverOperations {} pub trait TtyDriverOperations {}

View File

@ -562,7 +562,7 @@ impl KernFSInode {
/// ///
/// Returns the created node on success /// Returns the created node on success
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/kernfs/symlink.c#25 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/fs/kernfs/symlink.c#25
pub fn add_link( pub fn add_link(
&self, &self,
name: String, name: String,

View File

@ -111,7 +111,7 @@ impl SysFS {
return self.add_file_with_mode(&inode, attr, attr.mode()); return self.add_file_with_mode(&inode, attr, attr.mode());
} }
// https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/file.c?fi=sysfs_add_file_mode_ns#271 // https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/file.c?fi=sysfs_add_file_mode_ns#271
pub(super) fn add_file_with_mode( pub(super) fn add_file_with_mode(
&self, &self,
parent: &Arc<KernFSInode>, parent: &Arc<KernFSInode>,
@ -200,7 +200,7 @@ impl SysFS {
/// - `kobj` 要创建属性文件的kobject /// - `kobj` 要创建属性文件的kobject
/// - `attr` 属性 /// - `attr` 属性
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/file.c#558 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/file.c#558
pub fn create_bin_file( pub fn create_bin_file(
&self, &self,
kobj: &Arc<dyn KObject>, kobj: &Arc<dyn KObject>,
@ -229,7 +229,7 @@ impl SysFS {
} }
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/file.c#304 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/file.c#304
pub(super) fn add_bin_file_with_mode( pub(super) fn add_bin_file_with_mode(
&self, &self,
parent: &Arc<KernFSInode>, parent: &Arc<KernFSInode>,

View File

@ -164,7 +164,7 @@ impl SysFS {
/// - `group` - 属性组 /// - `group` - 属性组
/// - `update` - 当前是否正在更新属性 /// - `update` - 当前是否正在更新属性
/// ///
/// https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/group.c#34 /// https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/group.c#34
fn group_create_files( fn group_create_files(
&self, &self,
parent: Arc<KernFSInode>, parent: Arc<KernFSInode>,

View File

@ -19,7 +19,7 @@ impl SysFS {
/// - `target`: object we're pointing to. /// - `target`: object we're pointing to.
/// - `name`: 符号链接的名称 /// - `name`: 符号链接的名称
/// ///
/// 参考https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#89 /// 参考https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#89
pub fn create_link( pub fn create_link(
&self, &self,
kobj: Option<&Arc<dyn KObject>>, kobj: Option<&Arc<dyn KObject>>,
@ -37,7 +37,7 @@ impl SysFS {
/// - `name`: 符号链接的名称 /// - `name`: 符号链接的名称
/// ///
/// ///
/// 参考https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#143 /// 参考https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#143
pub fn remove_link(&self, _kobj: &Arc<dyn KObject>, _name: String) { pub fn remove_link(&self, _kobj: &Arc<dyn KObject>, _name: String) {
todo!("sysfs remove link") todo!("sysfs remove link")
} }
@ -60,7 +60,7 @@ impl SysFS {
return self.do_create_link_sd(&parent, target, name, warn); return self.do_create_link_sd(&parent, target, name, warn);
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#20 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/fs/sysfs/symlink.c#20
fn do_create_link_sd( fn do_create_link_sd(
&self, &self,
inode: &Arc<KernFSInode>, inode: &Arc<KernFSInode>,

View File

@ -3,7 +3,7 @@ const F_LINUX_SPECIFIC_BASE: u32 = 1024;
/// fcntl syscall command /// fcntl syscall command
/// ///
/// for linux-specific fcntl commands, see: /// for linux-specific fcntl commands, see:
/// https://opengrok.ringotek.cn/xref/linux-5.19.10/tools/include/uapi/linux/fcntl.h#8 /// https://code.dragonos.org.cn/xref/linux-5.19.10/tools/include/uapi/linux/fcntl.h#8
#[derive(Debug, Copy, Clone, Eq, PartialEq, FromPrimitive, ToPrimitive)] #[derive(Debug, Copy, Clone, Eq, PartialEq, FromPrimitive, ToPrimitive)]
#[repr(u32)] #[repr(u32)]
pub enum FcntlCommand { pub enum FcntlCommand {

View File

@ -60,7 +60,7 @@ bitflags! {
/// 其中低2bit组合而成的数字的值用于表示访问权限。其他的bit才支持通过按位或的方式来表示参数 /// 其中低2bit组合而成的数字的值用于表示访问权限。其他的bit才支持通过按位或的方式来表示参数
/// ///
/// 与Linux 5.19.10的uapi/asm-generic/fcntl.h相同 /// 与Linux 5.19.10的uapi/asm-generic/fcntl.h相同
/// https://opengrok.ringotek.cn/xref/linux-5.19.10/tools/include/uapi/asm-generic/fcntl.h#19 /// https://code.dragonos.org.cn/xref/linux-5.19.10/tools/include/uapi/asm-generic/fcntl.h#19
pub struct FileMode: u32{ pub struct FileMode: u32{
/* File access modes for `open' and `fcntl'. */ /* File access modes for `open' and `fcntl'. */
/// Open Read-only /// Open Read-only

View File

@ -79,7 +79,7 @@ impl Signal {
force_send = matches!(siginfo.sig_code(), SigCode::Kernel); force_send = matches!(siginfo.sig_code(), SigCode::Kernel);
} else { } else {
// todo: 判断signal是否来自于一个祖先进程的namespace如果是则强制发送信号 // todo: 判断signal是否来自于一个祖先进程的namespace如果是则强制发送信号
//详见 https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/signal.c?r=&mo=32170&fi=1220#1226 //详见 https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/signal.c?r=&mo=32170&fi=1220#1226
} }
if !self.prepare_sianal(pcb.clone(), force_send) { if !self.prepare_sianal(pcb.clone(), force_send) {
@ -259,7 +259,7 @@ impl Signal {
.flush_by_mask(&flush); .flush_by_mask(&flush);
let _r = ProcessManager::wakeup_stop(&pcb); let _r = ProcessManager::wakeup_stop(&pcb);
// TODO 对每个子线程 flush mask // TODO 对每个子线程 flush mask
// 这里需要补充一段逻辑详见https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/signal.c#952 // 这里需要补充一段逻辑详见https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/signal.c#952
} }
// 一个被阻塞了的信号肯定是要被处理的 // 一个被阻塞了的信号肯定是要被处理的

View File

@ -315,8 +315,8 @@ impl SigInfo {
/// ///
/// ## 注意 /// ## 注意
/// ///
/// 该函数对应Linux中的https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/signal.c#3323 /// 该函数对应Linux中的https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/signal.c#3323
/// Linux还提供了 https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/signal.c#3383 用来实现 /// Linux还提供了 https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/signal.c#3383 用来实现
/// kernel_siginfo 保存到 用户的 compact_siginfo 的功能,但是我们系统内还暂时没有对这两种 /// kernel_siginfo 保存到 用户的 compact_siginfo 的功能,但是我们系统内还暂时没有对这两种
/// siginfo做区分因此暂时不需要第二个函数 /// siginfo做区分因此暂时不需要第二个函数
pub fn copy_siginfo_to_user(&self, to: *mut SigInfo) -> Result<i32, SystemError> { pub fn copy_siginfo_to_user(&self, to: *mut SigInfo) -> Result<i32, SystemError> {

View File

@ -157,7 +157,7 @@ impl ElfLoader {
} }
// todo: 增加与架构相关的处理 // todo: 增加与架构相关的处理
// ref: https://opengrok.ringotek.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#572 // ref: https://code.dragonos.org.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#572
return prot; return prot;
} }
@ -165,7 +165,7 @@ impl ElfLoader {
/// 加载ELF文件到用户空间 /// 加载ELF文件到用户空间
/// ///
/// 参考Linux的elf_map函数 /// 参考Linux的elf_map函数
/// https://opengrok.ringotek.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#365 /// https://code.dragonos.org.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#365
/// ## 参数 /// ## 参数
/// ///
/// - `user_vm_guard`:用户空间地址空间 /// - `user_vm_guard`:用户空间地址空间
@ -505,7 +505,7 @@ impl BinaryLoader for ElfLoader {
let ehdr = Self::parse_ehdr(head_buf).map_err(|_| ExecError::NotExecutable)?; let ehdr = Self::parse_ehdr(head_buf).map_err(|_| ExecError::NotExecutable)?;
// 参考linux-5.19的load_elf_binary函数 // 参考linux-5.19的load_elf_binary函数
// https://opengrok.ringotek.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#1034 // https://code.dragonos.org.cn/xref/linux-5.19.10/fs/binfmt_elf.c?r=&mo=22652&fi=824#1034
let elf_type = ElfType::from(ehdr.e_type); let elf_type = ElfType::from(ehdr.e_type);
// kdebug!("ehdr = {:?}", ehdr); // kdebug!("ehdr = {:?}", ehdr);

View File

@ -46,7 +46,7 @@ pub fn generate_iface_id() -> usize {
bitflags! { bitflags! {
/// @brief 用于指定socket的关闭类型 /// @brief 用于指定socket的关闭类型
/// 参考https://opengrok.ringotek.cn/xref/linux-6.1.9/include/net/sock.h?fi=SHUTDOWN_MASK#1573 /// 参考https://code.dragonos.org.cn/xref/linux-6.1.9/include/net/sock.h?fi=SHUTDOWN_MASK#1573
pub struct ShutdownType: u8 { pub struct ShutdownType: u8 {
const RCV_SHUTDOWN = 1; const RCV_SHUTDOWN = 1;
const SEND_SHUTDOWN = 2; const SEND_SHUTDOWN = 2;

View File

@ -1156,7 +1156,7 @@ impl Socket for TcpSocket {
/// @brief 地址族的枚举 /// @brief 地址族的枚举
/// ///
/// 参考https://opengrok.ringotek.cn/xref/linux-5.19.10/include/linux/socket.h#180 /// 参考https://code.dragonos.org.cn/xref/linux-5.19.10/include/linux/socket.h#180
#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)] #[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)]
pub enum AddressFamily { pub enum AddressFamily {
/// AF_UNSPEC 表示地址族未指定 /// AF_UNSPEC 表示地址族未指定

View File

@ -103,7 +103,7 @@ pub fn kernel_wait4(
return Ok(r); return Ok(r);
} }
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/exit.c#1573 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/exit.c#1573
fn do_wait(kwo: &mut KernelWaitOption) -> Result<usize, SystemError> { fn do_wait(kwo: &mut KernelWaitOption) -> Result<usize, SystemError> {
let mut retval: Result<usize, SystemError>; let mut retval: Result<usize, SystemError>;
// todo: 在signal struct里面增加等待队列并在这里初始化子进程退出的回调使得子进程退出时能唤醒当前进程。 // todo: 在signal struct里面增加等待队列并在这里初始化子进程退出的回调使得子进程退出时能唤醒当前进程。

View File

@ -464,7 +464,7 @@ impl ProcessManager {
.store(clone_args.exit_signal, Ordering::SeqCst); .store(clone_args.exit_signal, Ordering::SeqCst);
} }
// todo: 增加线程组相关的逻辑。 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/kernel/fork.c#2437 // todo: 增加线程组相关的逻辑。 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/kernel/fork.c#2437
Ok(()) Ok(())
} }

View File

@ -13,7 +13,7 @@ use super::{user_access::UserBufferWriter, Syscall};
/// 系统信息 /// 系统信息
/// ///
/// 参考 https://opengrok.ringotek.cn/xref/linux-6.1.9/include/uapi/linux/sysinfo.h#8 /// 参考 https://code.dragonos.org.cn/xref/linux-6.1.9/include/uapi/linux/sysinfo.h#8
#[derive(Debug, Default, Copy, Clone)] #[derive(Debug, Default, Copy, Clone)]
pub struct SysInfo { pub struct SysInfo {
uptime: u64, uptime: u64,