diff --git a/Cargo.lock b/Cargo.lock index 0a142db4f7..f025d67497 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -308,13 +308,14 @@ dependencies = [ "axdriver_virtio", "axhal", "cfg-if", + "crate_interface", "log", ] [[package]] name = "axdriver_base" version = "0.1.0" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=v0.1.0#78686a7e70c9203ba29e425929c393fbb7eca208" +source = "git+https://github.com/elliott10/axdriver_crates?rev=52266c70#52266c7032ea9c49c806ab1f5bf06ab98e94efd6" [[package]] name = "axdriver_block" @@ -337,9 +338,10 @@ dependencies = [ [[package]] name = "axdriver_net" version = "0.1.0" -source = "git+https://github.com/arceos-org/axdriver_crates.git?tag=v0.1.0#78686a7e70c9203ba29e425929c393fbb7eca208" +source = "git+https://github.com/elliott10/axdriver_crates?rev=52266c70#52266c7032ea9c49c806ab1f5bf06ab98e94efd6" dependencies = [ "axdriver_base", + "fxmac_rs", "ixgbe-driver", "log", "spin", @@ -972,6 +974,16 @@ dependencies = [ "bitmaps", ] +[[package]] +name = "fxmac_rs" +version = "0.2.0" +source = "git+https://github.com/elliott10/fxmac_rs.git?rev=638b02fa#638b02faea0d1178fdd967f9e356f2e7f496c3f2" +dependencies = [ + "aarch64-cpu 10.0.0", + "crate_interface", + "log", +] + [[package]] name = "getrandom" version = "0.2.15" diff --git a/Cargo.toml b/Cargo.toml index dfc0a37bda..1cbc5eba66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,3 +67,7 @@ axdma = { path = "modules/axdma" } [profile.release] lto = true + +[patch."https://github.com/arceos-org/axdriver_crates.git"] +axdriver_base = { git = "https://github.com/elliott10/axdriver_crates", rev = "52266c70" } +axdriver_net = { git = "https://github.com/elliott10/axdriver_crates", rev = "52266c70" } diff --git a/modules/axdriver/Cargo.toml b/modules/axdriver/Cargo.toml index 956da22b8d..e0cf1ea5ca 100644 --- a/modules/axdriver/Cargo.toml +++ b/modules/axdriver/Cargo.toml @@ -35,6 +35,7 @@ default = ["bus-pci"] [dependencies] log = "=0.4.21" cfg-if = "1.0" +crate_interface = "0.1.4" axdriver_base = { git = "https://github.com/arceos-org/axdriver_crates.git", tag = "v0.1.0" } axdriver_block = { git = "https://github.com/arceos-org/axdriver_crates.git", tag = "v0.1.0", optional = true } axdriver_net = { git = "https://github.com/arceos-org/axdriver_crates.git", tag = "v0.1.0", optional = true } diff --git a/modules/axdriver/src/drivers.rs b/modules/axdriver/src/drivers.rs index 52161c9f35..deab81be83 100644 --- a/modules/axdriver/src/drivers.rs +++ b/modules/axdriver/src/drivers.rs @@ -132,35 +132,36 @@ cfg_if::cfg_if! { cfg_if::cfg_if! { if #[cfg(net_dev = "fxmac")]{ use axalloc::global_allocator; - use axhal::mem::{phys_to_virt, virt_to_phys}; - const PAGE_SIZE: usize = 4096; - #[unsafe(no_mangle)] - pub fn virt_to_phys_fxmac(addr: usize) -> usize { - virt_to_phys(addr.into()).into() - } + #[crate_interface::impl_interface] + impl axdriver_net::fxmac::KernelFunc for FXmacDriver{ + fn virt_to_phys(addr: usize) -> usize { + axhal::mem::virt_to_phys(addr.into()).into() + } - #[unsafe(no_mangle)] - pub fn phys_to_virt_fxmac(addr: usize) -> usize { - phys_to_virt(addr.into()).into() - } + fn phys_to_virt(addr: usize) -> usize { + axhal::mem::phys_to_virt(addr.into()).into() + } - #[unsafe(no_mangle)] - pub fn dma_alloc_coherent_fxmac(pages: usize) -> (usize, usize) { - let vaddr = if let Ok(start_vaddr) = global_allocator().alloc_pages(pages, PAGE_SIZE) { - start_vaddr - } else { - error!("failed to alloc pages"); - return (0, 0); - }; - let paddr = virt_to_phys((vaddr).into()); - debug!("alloc pages @ vaddr={:#x}, paddr={:#x}", vaddr, paddr); - (vaddr, paddr.as_usize()) - } + fn dma_alloc_coherent(pages: usize) -> (usize, usize) { + let vaddr = if let Ok(start_vaddr) = global_allocator().alloc_pages(pages, 4096) { + start_vaddr + } else { + error!("failed to alloc pages"); + return (0, 0); + }; + let paddr = axhal::mem::virt_to_phys((vaddr).into()); + debug!("alloc pages @ vaddr={:#x}, paddr={:#x}", vaddr, paddr); + (vaddr, paddr.as_usize()) + } + + fn dma_free_coherent(vaddr: usize, pages: usize) { + global_allocator().dealloc_pages(vaddr, pages); + } - #[unsafe(no_mangle)] - fn dma_free_coherent_fxmac(vaddr: usize, pages: usize) { - global_allocator().dealloc_pages(vaddr, pages); + fn dma_request_irq(_irq: usize, _handler: fn()) { + warn!("unimplemented dma_request_irq for fxmax"); + } } register_net_driver!(FXmacDriver, axdriver_net::fxmac::FXmacNic); diff --git a/scripts/make/platform.mk b/scripts/make/platform.mk index 48fb8a3000..b9123ec7c3 100644 --- a/scripts/make/platform.mk +++ b/scripts/make/platform.mk @@ -42,5 +42,5 @@ _kernel_base := $(subst _,,$(shell axconfig-gen configs/platforms/$(PLATFORM).to phtpi: build @echo 'Create legacy uboot image for PhytiumPi: $(_uboot_img)' mkimage -A arm64 -O linux -C none -T kernel -a $(_kernel_base) -e $(_kernel_base) -n "ArceOS for PhytiumPi" -d $(OUT_BIN) $(_uboot_img) - echo 'Please boot from uboot> tftpboot $(_kernel_base) $(_uboot_img); bootm $(_kernel_base) - $${fdtcontroladdr}' + @echo 'Please boot from uboot> tftpboot $(_kernel_base) $(_uboot_img); bootm $(_kernel_base) - $${fdtcontroladdr}' endif