xref: /DragonOS/kernel/src/arch/mod.rs (revision 77799ccaaca276fe127448d169f0e035837cce44)
1 pub mod x86_64;
2 #[cfg(target_arch = "x86_64")]
3 pub use self::x86_64::*; //公开x86_64架构下的函数,使外界接口统一
4 
5 use crate::{
6     driver::pci::pci::{BusDeviceFunction, PciAddr, PciError, PciRoot, SegmentGroupNumber},
7     mm::PhysAddr,
8 };
9 
10 pub mod io;
11 
12 /// TraitPciArch Pci架构相关函数,任何架构都应独立实现trait里的函数
13 pub trait TraitPciArch {
14     /// @brief 读取寄存器值,x86_64架构通过读取两个特定io端口实现
15     /// @param bus_device_function 设备的唯一标识符
16     /// @param offset 寄存器偏移值
17     /// @return 读取到的值
18     fn read_config(bus_device_function: &BusDeviceFunction, offset: u8) -> u32;
19     /// @brief 写入寄存器值,x86_64架构通过读取两个特定io端口实现
20     /// @param bus_device_function 设备的唯一标识符
21     /// @param offset 寄存器偏移值
22     /// @param data 要写入的值
23     fn write_config(bus_device_function: &BusDeviceFunction, offset: u8, data: u32);
24     /// @brief PCI域地址到存储器域地址的转换,x86_64架构为一一对应
25     /// @param address PCI域地址
26     /// @return usize 转换结果
27     fn address_pci_to_physical(pci_address: PciAddr) -> PhysAddr;
28     /// @brief 获取Segement的root地址,x86_64架构为acpi mcfg表中读取
29     /// @param segement 组id
30     /// @return  Result<PciRoot, PciError> 转换结果或出错原因
31     fn ecam_root(segement: SegmentGroupNumber) -> Result<PciRoot, PciError>;
32 }
33