Skip to content

Commit 7323271

Browse files
Update x86_64 to 0.15.2
1 parent 37582ac commit 7323271

File tree

20 files changed

+80
-67
lines changed

20 files changed

+80
-67
lines changed

Cargo.lock

+25-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bios/stage-4/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ bootloader-x86_64-common = { workspace = true }
1414
bootloader-x86_64-bios-common = { workspace = true }
1515
bootloader-boot-config = { workspace = true }
1616
log = "0.4.14"
17-
x86_64 = "0.14.8"
17+
x86_64 = "0.15.2"
1818
rsdp = "2.0.0"
1919
usize_conversions = "0.2.0"
2020
serde-json-core = "0.5.0"

common/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ bootloader-boot-config = { workspace = true }
1414
conquer-once = { version = "0.3.2", default-features = false }
1515
spinning_top = "0.2.4"
1616
usize_conversions = "0.2.0"
17-
x86_64 = { version = "0.14.8" }
17+
x86_64 = { version = "0.15.2" }
1818
xmas-elf = "0.8.0"
1919
raw-cpuid = "10.2.0"
2020
rand = { version = "0.8.4", default-features = false }

common/src/gdt.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ pub fn create_and_load(frame: PhysFrame) {
1515
let ptr: *mut GlobalDescriptorTable = virt_addr.as_mut_ptr();
1616

1717
let mut gdt = GlobalDescriptorTable::new();
18-
let code_selector = gdt.add_entry(Descriptor::kernel_code_segment());
19-
let data_selector = gdt.add_entry(Descriptor::kernel_data_segment());
18+
let code_selector = gdt.append(Descriptor::kernel_code_segment());
19+
let data_selector = gdt.append(Descriptor::kernel_data_segment());
2020
let gdt = unsafe {
2121
ptr.write(gdt);
2222
&*ptr

common/src/level_4_entries.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,18 @@ impl UsedLevel4Entries {
4848

4949
// The bootload needs to access the frame buffer.
5050
if let Some(frame_buffer) = framebuffer {
51-
used.mark_range_as_used(frame_buffer.addr.as_u64(), frame_buffer.info.byte_len);
51+
used.mark_range_as_used(
52+
frame_buffer.addr.as_u64(),
53+
frame_buffer.info.byte_len as u64,
54+
);
5255
}
5356

5457
// Mark the statically configured ranges from the config as used.
5558

5659
if let Some(config::Mapping::FixedAddress(physical_memory_offset)) =
5760
config.mappings.physical_memory
5861
{
59-
used.mark_range_as_used(physical_memory_offset, max_phys_addr.as_u64().into_usize());
62+
used.mark_range_as_used(physical_memory_offset, max_phys_addr.as_u64());
6063
}
6164

6265
if let Some(config::Mapping::FixedAddress(recursive_address)) =
@@ -76,12 +79,12 @@ impl UsedLevel4Entries {
7679
let memory_regions_layout = Layout::array::<MemoryRegion>(regions).unwrap();
7780
let (combined, _) = boot_info_layout.extend(memory_regions_layout).unwrap();
7881

79-
used.mark_range_as_used(boot_info_address, combined.size());
82+
used.mark_range_as_used(boot_info_address, combined.size() as u64);
8083
}
8184

8285
if let config::Mapping::FixedAddress(framebuffer_address) = config.mappings.framebuffer {
8386
if let Some(framebuffer) = framebuffer {
84-
used.mark_range_as_used(framebuffer_address, framebuffer.info.byte_len);
87+
used.mark_range_as_used(framebuffer_address, framebuffer.info.byte_len as u64);
8588
}
8689
}
8790

@@ -111,14 +114,9 @@ impl UsedLevel4Entries {
111114
}
112115

113116
/// Marks all p4 entries in the range `[address..address+size)` as used.
114-
///
115-
/// `size` can be a `u64` or `usize`.
116-
fn mark_range_as_used<S>(&mut self, address: u64, size: S)
117-
where
118-
VirtAddr: core::ops::Add<S, Output = VirtAddr>,
119-
{
117+
fn mark_range_as_used(&mut self, address: u64, size: u64) {
120118
let start = VirtAddr::new(address);
121-
let end_inclusive = (start + size) - 1usize;
119+
let end_inclusive = (start + size) - 1;
122120
let start_page = Page::<Size4KiB>::containing_address(start);
123121
let end_page_inclusive = Page::<Size4KiB>::containing_address(end_inclusive);
124122

common/src/lib.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,9 @@ where
285285
log::info!("Map framebuffer");
286286

287287
let framebuffer_start_frame: PhysFrame = PhysFrame::containing_address(framebuffer.addr);
288-
let framebuffer_end_frame =
289-
PhysFrame::containing_address(framebuffer.addr + framebuffer.info.byte_len - 1u64);
288+
let framebuffer_end_frame = PhysFrame::containing_address(
289+
framebuffer.addr + framebuffer.info.byte_len as u64 - 1u64,
290+
);
290291
let start_page = mapping_addr_page_aligned(
291292
config.mappings.framebuffer,
292293
u64::from_usize(framebuffer.info.byte_len),
@@ -394,7 +395,7 @@ where
394395
}
395396
};
396397

397-
let entry = &mut kernel_page_table.level_4_table()[index];
398+
let entry = &mut kernel_page_table.level_4_table_mut()[index];
398399
if !entry.is_unused() {
399400
panic!(
400401
"Could not set up recursive mapping: index {} already in use",
@@ -496,8 +497,8 @@ where
496497
)
497498
.expect("boot info addr is not properly aligned");
498499

499-
let memory_map_regions_addr = boot_info_addr + memory_regions_offset;
500-
let memory_map_regions_end = boot_info_addr + combined.size();
500+
let memory_map_regions_addr = boot_info_addr + memory_regions_offset as u64;
501+
let memory_map_regions_end = boot_info_addr + combined.size() as u64;
501502

502503
let start_page = Page::containing_address(boot_info_addr);
503504
let end_page = Page::containing_address(memory_map_regions_end - 1u64);

common/src/load_kernel.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ where
349349
let copy_len = end_inclusive_offset_in_frame - start_offset_in_frame + 1;
350350

351351
// Calculate the physical addresses.
352-
let start_phys_addr = phys_addr.start_address() + start_offset_in_frame;
352+
let start_phys_addr = phys_addr.start_address() + start_offset_in_frame as u64;
353353

354354
// These are the offsets from the start address. These correspond
355355
// to the destination indices in `buf`.
@@ -416,7 +416,7 @@ where
416416
let copy_len = end_inclusive_offset_in_frame - start_offset_in_frame + 1;
417417

418418
// Calculate the physical addresses.
419-
let start_phys_addr = phys_addr.start_address() + start_offset_in_frame;
419+
let start_phys_addr = phys_addr.start_address() + start_offset_in_frame as u64;
420420

421421
// These are the offsets from the start address. These correspond
422422
// to the destination indices in `buf`.

tests/test_kernels/Cargo.lock

+22-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/test_kernels/config_file/Cargo.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ edition = "2021"
66

77
[dependencies]
88
bootloader_api = { path = "../../../api" }
9-
x86_64 = { version = "0.14.7", default-features = false, features = [
9+
x86_64 = { version = "0.15.2", default-features = false, features = [
1010
"instructions",
11-
"inline_asm",
1211
] }
1312
uart_16550 = "0.2.10"

tests/test_kernels/default_settings/Cargo.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ edition = "2021"
66

77
[dependencies]
88
bootloader_api = { path = "../../../api" }
9-
x86_64 = { version = "0.14.7", default-features = false, features = [
9+
x86_64 = { version = "0.15.2", default-features = false, features = [
1010
"instructions",
11-
"inline_asm",
1211
] }
1312
uart_16550 = "0.2.10"

0 commit comments

Comments
 (0)