mod.rs 1.4 KB

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