mod.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use system_error::SystemError;
  2. use unified_init::macros::unified_init;
  3. use crate::{
  4. arch::TraitPciArch,
  5. driver::{
  6. open_firmware::fdt::open_firmware_fdt_driver,
  7. pci::pci::{pci_init, BusDeviceFunction, PciAddr},
  8. },
  9. init::initcall::INITCALL_SUBSYS,
  10. mm::PhysAddr,
  11. };
  12. use self::pci_host_ecam::pci_host_ecam_driver_init;
  13. mod pci_host_ecam;
  14. pub struct RiscV64PciArch;
  15. impl TraitPciArch for RiscV64PciArch {
  16. fn read_config(_bus_device_function: &BusDeviceFunction, _offset: u8) -> u32 {
  17. unimplemented!("RiscV64PciArch::read_config")
  18. }
  19. fn write_config(_bus_device_function: &BusDeviceFunction, _offset: u8, _data: u32) {
  20. unimplemented!("RiscV64pci_root_0().write_config")
  21. }
  22. fn address_pci_to_physical(pci_address: PciAddr) -> crate::mm::PhysAddr {
  23. return PhysAddr::new(pci_address.data());
  24. }
  25. }
  26. #[unified_init(INITCALL_SUBSYS)]
  27. fn riscv_pci_init() -> Result<(), SystemError> {
  28. let fdt = open_firmware_fdt_driver().fdt_ref()?;
  29. pci_host_ecam_driver_init(&fdt)?;
  30. pci_init();
  31. return Ok(());
  32. }