Skip to content

Commit cb0d623

Browse files
authored
Merge pull request #1943 from Gelbpunkt/rtl8139-everywhere
Support RTL8139 on all architectures
2 parents 80d7cc6 + 0a19f43 commit cb0d623

File tree

13 files changed

+474
-255
lines changed

13 files changed

+474
-255
lines changed

.github/workflows/ci.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ jobs:
3838
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net --features pci
3939
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139 --features tcp,virtio-net
4040
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,rtl8139 --features pci,tcp,virtio-net
41+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,virtio-net --features tcp,rtl8139
42+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64-unknown-none-softfloat --exclude-features gem-net,virtio-net --features pci,tcp,rtl8139
4143
- name: cargo hack check (aarch64_be)
4244
run: |
4345
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net
4446
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net --features pci
4547
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features gem-net,rtl8139 --features tcp,virtio-net
4648
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features gem-net,rtl8139 --features pci,tcp,virtio-net
49+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features gem-net,virtio-net --features tcp,rtl8139
50+
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target aarch64_be-unknown-none-softfloat -Zbuild-std=core,alloc --exclude-features gem-net,virtio-net --features pci,tcp,rtl8139
4751
- name: cargo hack check (riscv64)
4852
run: |
4953
cargo hack check --package hermit-kernel --each-feature --no-dev-deps --target riscv64gc-unknown-none-elf --exclude-features dhcpv4,dns,gem-net,net,rtl8139,virtio-net
@@ -271,31 +275,31 @@ jobs:
271275
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package httpd --no-default-features --features ci,hermit/dhcpv4,hermit/tcp,hermit/virtio-net qemu ${{ matrix.flags }} --devices virtio-net-mmio
272276
if: matrix.arch == 'riscv64'
273277
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package httpd --features ci,hermit/dhcpv4,hermit/rtl8139 qemu ${{ matrix.flags }} --devices rtl8139
274-
if: matrix.arch == 'x86_64'
278+
if: matrix.arch != 'riscv64'
275279
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package httpd --no-default-features --features ci,hermit/dhcpv4,hermit/tcp,hermit/gem-net qemu ${{ matrix.flags }} --devices cadence-gem
276280
if: matrix.arch == 'riscv64'
277281
- run: cargo clean
278282
working-directory: .
279283
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package testudp --features hermit/udp,hermit/dhcpv4,hermit/virtio-net qemu ${{ matrix.flags }} --devices virtio-net-pci
280284
if: matrix.arch != 'riscv64'
281285
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package testudp --features hermit/udp,hermit/dhcpv4,hermit/rtl8139 qemu ${{ matrix.flags }} --devices rtl8139
282-
if: matrix.arch == 'x86_64'
286+
if: matrix.arch != 'riscv64'
283287
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package testudp --no-default-features --features hermit/udp,hermit/dhcpv4,hermit/gem-net qemu ${{ matrix.flags }} --devices cadence-gem
284288
if: matrix.arch == 'riscv64'
285289
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package miotcp --features hermit/dhcpv4,hermit/virtio-net qemu ${{ matrix.flags }} --devices virtio-net-pci
286290
if: matrix.arch != 'riscv64'
287291
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package miotcp --features hermit/dhcpv4,hermit/rtl8139 qemu ${{ matrix.flags }} --devices rtl8139
288-
if: matrix.arch == 'x86_64'
292+
if: matrix.arch != 'riscv64'
289293
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package miotcp --no-default-features --features hermit/dhcpv4,hermit/tcp,hermit/gem-net qemu ${{ matrix.flags }} --devices cadence-gem
290294
if: matrix.arch == 'riscv64'
291295
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package poll --features hermit/dhcpv4,hermit/virtio-net qemu ${{ matrix.flags }} --devices virtio-net-pci
292296
if: matrix.arch != 'riscv64'
293297
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package poll --features hermit/dhcpv4,hermit/rtl8139 qemu ${{ matrix.flags }} --devices rtl8139
294-
if: matrix.arch == 'x86_64'
298+
if: matrix.arch != 'riscv64'
295299
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package mioudp --features hermit/udp,hermit/dhcpv4,hermit/virtio-net qemu ${{ matrix.flags }} --devices virtio-net-pci
296300
if: matrix.arch != 'riscv64'
297301
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package mioudp --features hermit/udp,hermit/dhcpv4,hermit/rtl8139 qemu ${{ matrix.flags }} --devices rtl8139
298-
if: matrix.arch == 'x86_64'
302+
if: matrix.arch != 'riscv64'
299303
- run: cargo xtask ci rs --arch ${{ matrix.arch }} --profile ${{ matrix.profile }} --package loopback qemu ${{ matrix.flags }}
300304
env:
301305
HERMIT_IP: 127.0.0.1

Cargo.lock

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ mmap = ["mman"] # Deprecated in favor of mman
6464
newlib = []
6565
nostd = []
6666
pci = ["virtio?/pci"]
67-
rtl8139 = ["net", "pci"]
67+
rtl8139 = ["net", "pci", "volatile/derive", "endian-num"]
6868
semihosting = ["dep:semihosting"]
6969
shell = ["simple-shell"]
7070
smp = []
@@ -121,6 +121,7 @@ build-time = "0.1.3"
121121
cfg-if = "1"
122122
crossbeam-utils = { version = "0.8", default-features = false }
123123
embedded-io = { version = "0.7", features = ["alloc"] }
124+
endian-num = { version = "0.2", optional = true, features = ["linux-types"] }
124125
enum_dispatch = "0.3"
125126
fdt = { version = "0.1", features = ["pretty-printing"] }
126127
free-list = "0.3"

src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub(crate) const USER_STACK_SIZE: usize = 0x0010_0000;
88
all(
99
not(any(
1010
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
11-
all(target_arch = "x86_64", feature = "rtl8139"),
11+
feature = "rtl8139",
1212
)),
1313
feature = "virtio-net",
1414
),

src/drivers/mod.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub mod pci;
1313
#[cfg(any(
1414
all(
1515
not(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci"))),
16-
not(all(target_arch = "x86_64", feature = "rtl8139")),
16+
not(feature = "rtl8139"),
1717
feature = "virtio-net",
1818
),
1919
feature = "fuse",
@@ -39,12 +39,12 @@ pub(crate) type InterruptHandlerQueue = VecDeque<fn()>;
3939
pub mod error {
4040
#[cfg(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")))]
4141
use crate::drivers::net::gem::GEMError;
42-
#[cfg(all(target_arch = "x86_64", feature = "rtl8139"))]
42+
#[cfg(feature = "rtl8139")]
4343
use crate::drivers::net::rtl8139::RTL8139Error;
4444
#[cfg(any(
4545
all(
4646
not(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci"))),
47-
not(all(target_arch = "x86_64", feature = "rtl8139")),
47+
not(feature = "rtl8139"),
4848
feature = "virtio-net",
4949
),
5050
feature = "fuse",
@@ -55,7 +55,7 @@ pub mod error {
5555

5656
#[cfg(any(
5757
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
58-
all(target_arch = "x86_64", feature = "rtl8139"),
58+
feature = "rtl8139",
5959
feature = "virtio-net",
6060
feature = "fuse",
6161
feature = "vsock",
@@ -66,15 +66,15 @@ pub mod error {
6666
#[cfg(any(
6767
all(
6868
not(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci"))),
69-
not(all(target_arch = "x86_64", feature = "rtl8139")),
69+
not(feature = "rtl8139"),
7070
feature = "virtio-net",
7171
),
7272
feature = "fuse",
7373
feature = "vsock",
7474
feature = "console",
7575
))]
7676
InitVirtioDevFail(VirtioError),
77-
#[cfg(all(target_arch = "x86_64", feature = "rtl8139"))]
77+
#[cfg(feature = "rtl8139")]
7878
InitRTL8139DevFail(RTL8139Error),
7979
#[cfg(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")))]
8080
InitGEMDevFail(GEMError),
@@ -83,7 +83,7 @@ pub mod error {
8383
#[cfg(any(
8484
all(
8585
not(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci"))),
86-
not(all(target_arch = "x86_64", feature = "rtl8139")),
86+
not(feature = "rtl8139"),
8787
feature = "virtio-net",
8888
),
8989
feature = "fuse",
@@ -96,7 +96,7 @@ pub mod error {
9696
}
9797
}
9898

99-
#[cfg(all(target_arch = "x86_64", feature = "rtl8139"))]
99+
#[cfg(feature = "rtl8139")]
100100
impl From<RTL8139Error> for DriverError {
101101
fn from(err: RTL8139Error) -> Self {
102102
DriverError::InitRTL8139DevFail(err)
@@ -112,7 +112,7 @@ pub mod error {
112112

113113
#[cfg(any(
114114
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
115-
all(target_arch = "x86_64", feature = "rtl8139"),
115+
feature = "rtl8139",
116116
feature = "virtio-net",
117117
feature = "fuse",
118118
feature = "vsock",
@@ -129,7 +129,7 @@ pub mod error {
129129
feature = "gem-net",
130130
not(feature = "pci"),
131131
)),
132-
not(all(target_arch = "x86_64", feature = "rtl8139")),
132+
not(feature = "rtl8139"),
133133
feature = "virtio-net",
134134
),
135135
feature = "fuse",
@@ -139,7 +139,7 @@ pub mod error {
139139
DriverError::InitVirtioDevFail(ref err) => {
140140
write!(f, "Virtio driver failed: {err:?}")
141141
}
142-
#[cfg(all(target_arch = "x86_64", feature = "rtl8139"))]
142+
#[cfg(feature = "rtl8139")]
143143
DriverError::InitRTL8139DevFail(ref err) => {
144144
write!(f, "RTL8139 driver failed: {err:?}")
145145
}

src/drivers/net/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
pub mod gem;
33
#[cfg(not(any(
44
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
5-
all(target_arch = "x86_64", feature = "rtl8139"),
5+
feature = "rtl8139",
66
feature = "virtio-net",
77
)))]
88
pub mod loopback;
9-
#[cfg(all(target_arch = "x86_64", feature = "rtl8139"))]
9+
#[cfg(feature = "rtl8139")]
1010
pub mod rtl8139;
1111
#[cfg(all(
1212
not(all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci"))),
13-
not(all(target_arch = "x86_64", feature = "rtl8139")),
13+
not(feature = "rtl8139"),
1414
feature = "virtio-net",
1515
))]
1616
pub mod virtio;
@@ -36,7 +36,7 @@ pub(crate) trait NetworkDriver: Driver + smoltcp::phy::Device {
3636
/// or environment variables.
3737
#[cfg(any(
3838
all(target_arch = "riscv64", feature = "gem-net", not(feature = "pci")),
39-
all(target_arch = "x86_64", feature = "rtl8139"),
39+
feature = "rtl8139",
4040
feature = "virtio-net",
4141
))]
4242
pub(crate) fn mtu() -> u16 {
@@ -69,7 +69,7 @@ cfg_if::cfg_if! {
6969
} else if #[cfg(all(
7070
feature = "pci",
7171
any(
72-
all(target_arch = "x86_64", feature = "rtl8139"),
72+
feature = "rtl8139",
7373
feature = "virtio-net",
7474
),
7575
))] {

0 commit comments

Comments
 (0)