e1000: Fix incorrect mapping of user-writable ranges for rx/tx buffers
This commit is contained in:
parent
19508075e4
commit
511b0787bf
@ -400,14 +400,14 @@ static void e1000_init(struct e1000_nic * nic) {
|
|||||||
for (int i = 0; i < E1000_NUM_RX_DESC; ++i) {
|
for (int i = 0; i < E1000_NUM_RX_DESC; ++i) {
|
||||||
nic->rx[i].addr = mmu_allocate_a_frame() << 12;
|
nic->rx[i].addr = mmu_allocate_a_frame() << 12;
|
||||||
nic->rx_virt[i] = mmu_map_mmio_region(nic->rx[i].addr, 4096);
|
nic->rx_virt[i] = mmu_map_mmio_region(nic->rx[i].addr, 4096);
|
||||||
mmu_frame_map_address(mmu_get_page((uintptr_t)nic->rx_virt[i],0),MMU_FLAG_WRITABLE|MMU_FLAG_WC,nic->rx[i].addr);
|
mmu_frame_map_address(mmu_get_page((uintptr_t)nic->rx_virt[i],0),MMU_FLAG_KERNEL|MMU_FLAG_WRITABLE|MMU_FLAG_WC,nic->rx[i].addr);
|
||||||
nic->rx[i].status = 0;
|
nic->rx[i].status = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < E1000_NUM_TX_DESC; ++i) {
|
for (int i = 0; i < E1000_NUM_TX_DESC; ++i) {
|
||||||
nic->tx[i].addr = mmu_allocate_a_frame() << 12;
|
nic->tx[i].addr = mmu_allocate_a_frame() << 12;
|
||||||
nic->tx_virt[i] = mmu_map_mmio_region(nic->tx[i].addr, 4096);
|
nic->tx_virt[i] = mmu_map_mmio_region(nic->tx[i].addr, 4096);
|
||||||
mmu_frame_allocate(mmu_get_page((uintptr_t)nic->tx_virt[i],0),MMU_FLAG_WRITABLE|MMU_FLAG_WC);
|
mmu_frame_allocate(mmu_get_page((uintptr_t)nic->tx_virt[i],0),MMU_FLAG_KERNEL|MMU_FLAG_WRITABLE|MMU_FLAG_WC);
|
||||||
memset(nic->tx_virt[i], 0, 4096);
|
memset(nic->tx_virt[i], 0, 4096);
|
||||||
nic->tx[i].status = 0;
|
nic->tx[i].status = 0;
|
||||||
nic->tx[i].cmd = (1 << 0);
|
nic->tx[i].cmd = (1 << 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user