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