| # uefi - [Unreleased] |
| |
| |
| # uefi - 0.33.0 (2024-10-23) |
| |
| See [Deprecating SystemTable/BootServices/RuntimeServices][funcmigrate] for |
| details of the deprecated items that were removed in this release. |
| |
| ## Added |
| - Impl `PartialEq` and `Eq` for `GptPartitionEntry`. |
| - Added `CStr16::from_u16_until_nul` and `CStr16::from_char16_until_nul`. |
| |
| ## Changed |
| - **Breaking:** Deleted the deprecated `BootServices`, `RuntimeServices`, and |
| `SystemTable` structs. |
| - **Breaking:** Deleted deprecated functions `allocator::init`, |
| `allocator::exit_boot_services`, `helpers::system_table`, |
| `table::system_table_boot`, and `table::system_table_runtime`. |
| - **Breaking:** `FileSystem` no longer has a lifetime parameter, and the |
| deprecated conversion from `uefi::table::boot::ScopedProtocol` has been |
| removed. |
| - Fixed `boot::open_protocol` to properly handle a null interface pointer. |
| - `VariableKey` now has a public `name` field. This `name` field always contains |
| a valid string, so the `VariableKey::name()` method has been deprecated. Since |
| all fields of `VariableKey` are now public, the type can be constructed by |
| users. |
| - The `VariableKeys` iterator will now yield an error item if a variable name is |
| not UCS-2. |
| |
| |
| # uefi - 0.32.0 (2024-09-09) |
| |
| See [Deprecating SystemTable/BootServices/RuntimeServices][funcmigrate] for |
| details of the deprecations in this release. |
| |
| We added documentation to `lib.rs` and the [uefi-rs book] about how |
| `uefi` compares to "standard Rust binaries" for UEFI (those using `std`), and |
| how to integrate the `uefi` crate into them. |
| |
| ## Added |
| - Added `Handle::new`. |
| - Added the `uefi::boot`, `uefi::runtime`, and `uefi::system` modules to the |
| prelude. |
| - Added `runtime::variable_exists`. |
| |
| ## Changed |
| - The `BootServices`, `RuntimeServices`, and `SystemTable` structs have been |
| deprecated (as well as related types `Boot`, `Runtime`, and |
| `SystemTableView`). Use the `uefi::boot` and `uefi::runtime`, and |
| `uefi::system` modules instead. |
| - In `uefi::table::boot`, `ScopedProtocol`, `TplGuard`, `ProtocolsPerHandle`, |
| and `HandleBuffer` have been deprecated. Use the structs of the same name in |
| `uefi::boot` instead. |
| - `uefi::table::system_table_boot` and `uefi::table::system_table_runtime` have |
| been deprecated. Use the `uefi::runtime` and `uefi::boot` modules instead. |
| - **Breaking:** The conversion functions between device paths and text no longer |
| take a `BootServices` argument. The global system table is used instead. |
| - **Breaking:** `GraphicsOutput::modes` no longer takes a `BootServices` |
| argument. The global system table is used instead. |
| - **Breaking:** `ComponentName::open` no longer takes a `BootServices` |
| argument. The global system table is used instead. |
| - `allocator::init` and `allocator::exit_boot_services` have been |
| deprecated. These functions are now no-ops. The allocator now internally uses |
| the global system table. |
| - `FileSystem::new` now accepts `boot::ScopedProtocol` in addition to |
| `table::boot::ScopedProtocol`. |
| |
| |
| # uefi - 0.31.0 (2024-08-21) |
| |
| See [Deprecating SystemTable/BootServices/RuntimeServices][funcmigrate] for |
| details of the new `system`/`boot`/`runtime` modules, and upcoming deprecations. |
| |
| ## Added |
| - `uefi::system` is a new module that provides freestanding functions for |
| accessing fields of the global system table. |
| - `uefi::boot` is a new module that provides freestanding functions for |
| boot services using the global system table. |
| - `uefi::runtime` is a new module that provides freestanding functions for |
| runtime services using the global system table. |
| - `uefi::table::system_table_raw` is a new function to retrieve a raw pointer to |
| the global system table. |
| - Add standard derives for `ConfigTableEntry`. |
| - `PcrEvent`/`PcrEventInputs` impl `Align`, `Eq`, and `PartialEq`. |
| - Added `PcrEvent::new_in_box` and `PcrEventInputs::new_in_box`. |
| - `VariableKey` impls `Clone`, `Eq`, `PartialEq`, `Ord`, `PartialOrd`, and `Hash`. |
| - The traits `MemoryMap` and `MemoryMapMut` have been introduced together with |
| the implementations `MemoryMapRef`, `MemoryMapRefMut`, and `MemoryMapOwned`. |
| This comes with some changes. Read below. We recommend to directly use the |
| implementations instead of the traits. |
| - Added `LoadFile` and `LoadFile2` which abstracts over the `LOAD_FILE` and |
| `LOAD_FILE2` protocols. The UEFI test runner includes an integration test |
| that shows how Linux loaders can use this to implement the initrd loading |
| mechanism used in Linux. |
| |
| ## Changed |
| - **Breaking:** `uefi::helpers::init` no longer takes an argument. |
| - The lifetime of the `SearchType` returned from |
| `BootServices::register_protocol_notify` is now tied to the protocol GUID. |
| The old `MemoryMap` was renamed to `MemoryMapOwned`. |
| - `pub fn memory_map(&self, mt: MemoryType) -> Result<MemoryMap>` now returns |
| a `MemoryMapOwned`. |
| - **Breaking:** `PcrEvent::new_in_buffer` and `PcrEventInputs::new_in_buffer` |
| now take an initialized buffer (`[u8`] instead of `[MaybeUninit<u8>]`), and if |
| the buffer is too small the required size is returned in the error data. |
| - **Breaking:** The type `MemoryMap` was renamed to `MemoryMapOwned`. `MemoryMap` |
| is now a trait. Read the [documentation](https://docs.rs/uefi/latest/uefi/) of the |
| `uefi > mem > memory_map` module to learn more. |
| - **Breaking:** Exports of Memory Map-related types from `uefi::table::boot` are |
| now removed. Use `uefi::mem::memory_map` instead. The patch you have to apply |
| to the `use` statements of your code might look as follows: |
| ```diff |
| < use uefi::table::boot::{BootServices, MemoryMap, MemoryMapMut, MemoryType}; |
| --- |
| > use uefi::mem::memory_map::{MemoryMap, MemoryMapMut, MemoryType}; |
| > use uefi::table::boot::BootServices; |
| ``` |
| - **Breaking:** Added a new `BootPolicy` type which breaks existing usages |
| of `LoadImageSource`. |
| |
| [funcmigrate]: ../docs/funcs_migration.md |
| |
| # uefi - 0.30.0 (2024-08-02) |
| |
| ## Changed |
| - **Breaking:**: Fixed a bug in the impls of `TryFrom<&[u8]>` for |
| `&DevicePathHeader`, `&DevicePathNode` and `&DevicePath` that could lead to |
| memory unsafety. See <https://github.com/rust-osdev/uefi-rs/issues/1281>. |
| |
| |
| # uefi - 0.29.0 (2024-07-02) |
| |
| ## Added |
| - Added `RuntimeServices::update_capsule`. |
| - Added `RuntimeServices::query_capsule_capabilities`. |
| - The logger from `uefi::helpers` now also logs to the [debugcon](https://phip1611.de/blog/how-to-use-qemus-debugcon-feature/) |
| device (QEMU) respectively the debug-console (cloud-hypervisor). This only |
| works on x86. It is activated by default (only on x86) and can be deactivated |
| by removing the `log-debugcon` cargo feature. The major benefit is that one |
| can get log messages even after one exited the boot services. |
| - Added `table::{set_system_table, system_table_boot, system_table_runtime}`. |
| This provides an initial API for global tables that do not require passing |
| around a reference. |
| - Added `ResetNotification` protocol. |
| - Added `TryFrom<&[u8]>` for `DevicePathHeader`, `DevicePathNode` and `DevicePath`. |
| - Added `ByteConversionError`. |
| - Re-exported `CapsuleFlags`. |
| - One can now specify in `TimeError` what fields of `Time` are outside its valid |
| range. `Time::is_valid` has been updated accordingly. |
| - `MemoryMap::as_raw` which provides raw access to the memory map. This is for |
| example useful if you create your own Multiboot2 bootloader that embeds the |
| EFI mmap in a Multiboot2 boot information structure. |
| - `Mode` is now `Copy` and `Clone`. |
| - Added `TryFrom<&[u8]>` for `Time`. |
| |
| ## Changed |
| - `SystemTable::exit_boot_services` is now `unsafe`. See that method's |
| documentation for details of obligations for callers. |
| - `BootServices::allocate_pool` now returns `NonZero<u8>` instead of |
| `*mut u8`. |
| - `helpers::system_table` is deprecated, use `table::system_table_boot` instead. |
| - `BootServices::memory_map` changed its signature from \ |
| `pub fn memory_map<'buf>(&self, buffer: &'buf mut [u8]) -> Result<MemoryMap<'buf>> {` \ |
| to \ |
| `pub fn memory_map(&self, mt: MemoryType) -> Result<MemoryMap>` |
| - Allocations now happen automatically internally on the UEFI heap. Also, the |
| returned type is automatically freed on the UEFI heap, as long as boot |
| services are not excited. By removing the need for that explicit buffer and |
| the lifetime, the API is simpler. |
| - `GraphicsOutput::query_mode` is now private. Use `GraphicsOutput::modes` |
| instead. |
| |
| ## Removed |
| - Removed the `panic-on-logger-errors` feature of the `uefi` crate. Logger |
| errors are now silently ignored. |
| |
| |
| # uefi - 0.28.0 (2024-04-19) |
| |
| ## Added |
| - Added `Timestamp` protocol. |
| - Added `UnalignedSlice::as_ptr`. |
| - Added common derives for `Event` and `Handle`. |
| - `uefi::helpers::init` with the functionality that used to be in |
| `uefi::services`. With that, new features were added: |
| - `global_allocator` |
| - `panic_handler` |
| - `qemu` |
| |
| |
| # uefi - 0.27.0 (2024-03-17) |
| |
| ## Added |
| - Implemented `PartialEq<char>` for `Char8` and `Char16`. |
| - Added `CStr16::from_char16_with_nul` and `Char16::from_char16_with_nul_unchecked`. |
| - Added terminal GUID constants to `device_path::messaging::Vendor`. |
| - Added `MemoryMap::from_raw`. |
| - Implemented `Hash` for all char and string types. |
| |
| ## Changed |
| - `DevicePath::to_string` and `DevicePathNode::to_string` now return |
| out-of-memory errors as part of the error type rather than with an `Option`. |
| |
| |
| # uefi - 0.26.0 (2023-11-12) |
| |
| ## Added |
| - Implemented `Index`, `IndexMut`, `get`, and `get_mut` on `MemoryMap`. |
| - Added `SystemTable::as_ptr`. |
| |
| ## Changed |
| - We fixed a memory leak in `GraphicsOutput::query_mode`. As a consequence, we |
| had to add `&BootServices` as additional parameter. |
| - `BootServices::free_pages` and `BootServices::free_pool` are now `unsafe` to |
| call, since it is possible to trigger UB by freeing memory that is still in use. |
| - `Logger` no longer requires exterior mutability. `Logger::new` is now `const`, |
| takes no arguments, and creates the logger in a disabled state. Call |
| `Logger::set_output` to enable it. |
| - `uefi::allocator::init` now takes a `&mut SystemTable<Boot>` instead of |
| `&BootServices`. |
| - `BootServices::{install,reinstall,uninstall}_protocol_interface` now take |
| `const` interface pointers. |
| |
| |
| # uefi - 0.25.0 (2023-10-10) |
| |
| ## Changed |
| - MSRV bumped to 1.70. |
| - `Input::wait_for_key_event` now returns an `Option<Event>`, and is no longer `const`. |
| - `Protocol::wait_for_input_event` now returns an `Option<Event>`, and is no longer `const`. |
| - `LoadedImage::device` now returns an `Option<Handle>` and is no longer `const`. |
| - `BootServices::get_image_file_system` now returns |
| `ScopedProtocol<SimpleFileSystem>` instead of `fs::FileSystem`. |
| - `uefi::proto::shim` is now available on 32-bit x86 targets. |
| - `Parity` and `StopBits` are now a newtype-enums instead of Rust enums. Their |
| members now have upper-case names. |
| - `FileSystem::try_exists` now returns `FileSystemResult<bool>`. |
| - `FileSystem::copy` is now more efficient for large files. |
| - `MpService::startup_all_aps` and `MpService::startup_this_ap` now accept an |
| optional `event` parameter to allow non-blocking operation. |
| - Added `core::error::Error` implementations to all error types. |
| - `SystemTable::exit_boot_services` now takes one param `memory_type` to ensure |
| the memory type of memory map. |
| - Added the `ShellParams` protocol |
| |
| ## Removed |
| - `BootServices::memmove` and `BootServices::set_mem` have been removed, use |
| standard functions like `core::ptr::copy` and `core::ptr::write_bytes` instead. |
| |
| |
| # uefi - 0.24.0 (2023-06-20) |
| |
| ## Added |
| - `DevicePath::to_boxed`, `DevicePath::to_owned`, and `DevicePath::as_bytes` |
| - `DevicePathInstance::to_boxed`, `DevicePathInstance::to_owned`, and `DevicePathInstance::as_bytes` |
| - `DevicePathNode::data` |
| - Added `Event::from_ptr`, `Event::as_ptr`, and `Handle::as_ptr`. |
| - Added `ScopedProtocol::get` and `ScopedProtocol::get_mut` to access |
| potentially-null interfaces without panicking. |
| - `DevicePath::to_string` and `DevicePathNode::to_string` |
| |
| ## Changed |
| - Renamed `LoadImageSource::FromFilePath` to `LoadImageSource::FromDevicePath` |
| - The `Deref` and `DerefMut` impls for `ScopedProtocol` will now panic if the |
| interface pointer is null. |
| |
| |
| # uefi - 0.23.0 (2023-06-04) |
| |
| ## Changed |
| - Fixed function signature bug in `BootServices::install_configuration_table`. |
| |
| |
| # uefi - 0.22.0 (2023-06-01) |
| |
| ## Added |
| - Added `BootServices::install_configuration_table`. |
| |
| ## Changed |
| - Renamed `FileSystemIOErrorContext` to `IoErrorContext`. |
| - `ResetType` is now a newtype-enum instead of a Rust enum. Its members now have |
| upper-case names. |
| - `PointerMode` and `PointerState` now contain arrays rather than tuples, as |
| tuples are not FFI safe. |
| - `RegularFile::read` no longer returns `Option<usize>` in error data. A |
| `BUFFER_TOO_SMALL` error can only occur when reading a directory, not a file. |
| - `RegularFile::read` now reads in 1 MiB chunks to avoid a bug in some |
| firmware. This fix also applies to `fs::FileSystem::read`. |
| |
| |
| # uefi - 0.21.0 (2023-05-15) |
| |
| ## Added |
| - There is a new `fs` module that provides a high-level API for file-system |
| access. The API is close to the `std::fs` module. The module also provides a |
| `Path` and a `PathBuf` abstraction that is similar to the ones from |
| `std::path`. However, they are adapted for UEFI. |
| - Multiple convenience methods for `CString16` and `CStr16`, including: |
| - `CStr16::as_slice()` |
| - `CStr16::num_chars()` |
| - `CStr16::is_empty()` |
| - `CString16::new()` |
| - `CString16::is_empty()` |
| - `CString16::num_chars()` |
| - `CString16::replace_char()` |
| - `CString16::push()` |
| - `CString16::push_str()` |
| - `From<&CStr16>` for `CString16` |
| - `From<&CStr16>` for `String` |
| - `From<&CString16>` for `String` |
| - Added `RuntimeServices::get_variable_boxed` (requires the `alloc` feature). |
| - Added `CStr16::as_bytes` |
| - Added `AsRef<[u8]>` and `Borrow<[u8]>` for `Cstr8` and `CStr16`. |
| - Added `LoadedImageDevicePath` protocol. |
| - Added `FileAttribute::is_directory(&self)` and |
| `FileAttribute::is_regular_file(&self)` |
| - Added `LoadedImage::code_type()` and `LoadedImage::data_type()` |
| - `Allocator` will now use the memory type of the running UEFI binary: |
| - `MemoryType::LOADER_DATA` for UEFI applications |
| - `MemoryType::BOOT_SERVICES_DATA` for UEFI boot drivers |
| - `MemoryType::RUNTIME_SERVICES_DATA` for UEFI runtime drivers |
| |
| ## Changed |
| - The `global_allocator` module has been renamed to `allocator`, and is now |
| available regardless of whether the `global_allocator` feature is enabled. The |
| `global_allocator` feature now only controls whether `allocator::Allocator` is |
| set as Rust's global allocator. |
| - `Error::new` and `Error::from` now panic if the status is `SUCCESS`. |
| - `Image::get_image_file_system` now returns a `fs::FileSystem` instead of the |
| protocol. |
| - `CString16::default` now always contains a null character. |
| - Conversion from `Status` to `Result` has been reworked. The `into_with`, |
| `into_with_val`, and `into_with_err` methods have been removed from |
| `Status`. `impl From<Status> for Result` has also been removed. A new |
| `StatusExt` trait has been added that provides conversion methods to replace |
| the ones that have been removed. `StatusExt` has been added to the prelude. |
| - The `Guid` struct and `guid!` macro implementations have been replaced with |
| re-exports from the [`uguid`](https://docs.rs/uguid) crate. The `from_values` |
| method has been removed; usually the `guid!` macro is a more convenient |
| choice, but `new` or `from_bytes` can also be used if needed. There are also a |
| number of new `Guid` methods. |
| - The `MEMORY_DESCRIPTOR_VERSION` constant has been moved to |
| `MemoryDescriptor::VERSION`. |
| - The `Revision` struct's one field is now public. |
| - Renamed `CStr8::to_bytes` to `CStr8::as_bytes` and changed the semantics: |
| The trailing null character is now always included in the returned slice. |
| - `DevicePathBuilder::with_vec` now clears the `Vec` before use. |
| - `bitflags` bumped from `1.3` to `2.1` |
| - `GptPartitionAttributes` now has 16 additional `TYPE_SPECIFIC_BIT_<N>` |
| constants. |
| |
| |
| # uefi - 0.20.0 (2023-03-19) |
| |
| As of this release, the UEFI crates work on the stable channel. This requires |
| Rust 1.68 or higher. |
| |
| ## Added |
| - Added the `ComponentName1` and `ComponentName2` protocols. The `ComponentName` |
| wrapper will automatically select `ComponentName2` if available, and fall back |
| to `ComponentName1` otherwise. |
| - `FileType`, `FileHandle`, `RegularFile`, and `Directory` now implement `Debug`. |
| - Added `RuntimeServices::delete_variable()` helper method. |
| - Implement `Borrow` for `CString16` and `ToOwned` for `CStr16`. |
| - Every public struct now implements `Debug`. Exceptions are cases when there |
| is no sensible way of presenting a useful Debug representation, such as for |
| Unions. |
| |
| ## Changed |
| - `SystemTable::exit_boot_services` now takes no parameters and handles |
| the memory map allocation itself. Errors are now treated as |
| unrecoverable and will cause the system to reset. |
| - Re-export the `cstr8`, `cstr16`, and `entry` macros from the root of the |
| `uefi` crate. |
| - `HandleBuffer` and `ProtocolsPerHandle` now implement `Deref`. The |
| `HandleBuffer::handles` and `ProtocolsPerHandle::protocols` methods have been |
| deprecated. |
| - Removed `'boot` lifetime from the `GraphicsOutput`, `Output`, `Pointer`, and |
| `Serial` protocols. |
| - The generic type `Data` of `uefi::Error<Data: Debug>` doesn't need to be |
| `Display` to be compatible with `core::error::Error`. Note that the error |
| Trait requires the `unstable` feature. |
| - deprecation removals: |
| - interfaces `BootServices::locate_protocol` and |
| `BootServices::handle_protocol` were removed. `BootServices::open_protocol` |
| and `BootServices::open_protocol_exclusive` are better variants and |
| available since EFI 1.10 (2002). |
| - `ScopedProtocol::interface` is not public anymore. Use the `Deref` trait. |
| |
| |
| # uefi - 0.19.1 (2023-02-04) |
| |
| ## Added |
| - Added `table::boot::PAGE_SIZE` constant. |
| |
| ## Changed |
| - Fixed several protocol functions so that they work with unsized protocols |
| (like `DevicePath`): `BootServices::locate_device_path`, |
| `BootServices::get_handle_for_protocol`, `BootServices::test_protocol`, |
| `BootServices::find_handles`, and `SearchType::from_proto`. |
| - Fixed a warning printed when using `uefi` as a dependency: "the following |
| packages contain code that will be rejected by a future version". |
| |
| |
| # uefi - 0.19.0 (2023-01-16) |
| |
| ## Added |
| - Implementations for the trait `EqStrUntilNul` now allow `?Sized` inputs. This means that |
| you can write `some_cstr16.eq_str_until_nul("test")` instead of |
| `some_cstr16.eq_str_until_nul(&"test")` now. |
| - Added `TryFrom<core::ffi::CStr>` implementation for `CStr8`. |
| - Added `Directory::read_entry_boxed` which works similar to `File::get_boxed_info`. This allows |
| easier iteration over the entries in a directory. (requires the **alloc** feature) |
| - Added `Directory::read_entry_boxed_in` and `File::get_boxed_info_in` that use the `allocator_api` |
| feature. (requires the **unstable** and **alloc** features) |
| - Added an `core::error::Error` implementation for `Error` to ease |
| integration with error-handling crates. (requires the **unstable** feature) |
| - Added partial support for the TCG protocols for TPM devices under `uefi::proto::tcg`. |
| |
| ## Changed |
| - `UnalignedSlice` now implements `Clone`, and the `Debug` impl now |
| prints the elements instead of the internal fields. |
| - The unstable `negative_impls` feature is no longer required to use this library. |
| - `BootServices::memory_map()` now returns `MemoryMapIter` instead of |
| `impl Iterator` which simplifies usage. |
| - `BootServices::exit_boot_services()` now returns `MemoryMapIter` instead of |
| `impl Iterator` which simplifies usage. |
| - `GraphicsOutput::modes()` now returns `ModesIter` instead of `impl Iterator` |
| which simplifies usage. |
| - Use of the unstable `ptr_metadata` feature has been replaced with a dependency |
| on the [`ptr_meta`](https://docs.rs/ptr_meta) crate. |
| - `pxe::DiscoverInfo` is now a DST. Create with `new_in_buffer` by supplying a |
| `MaybeUninit<u8>` slice of appropriate length. |
| - Redundant private field used for padding in `MemoryDescriptor` structure was removed. Now all |
| fields of this struct are public. |
| |
| |
| # uefi - 0.18.0 (2022-11-15) |
| |
| ## Added |
| - Added `PhysicalAddress` and `VirtualAddress` type aliases. |
| - Added `Guid::from_bytes` and `Guid::to_bytes`. |
| - Added `UnalignedSlice` for representing a reference to an unaligned |
| slice. |
| - Added `DeviceSubType::MESSAGING_REST_SERVICE` and |
| `DeviceSubType::MESSAGING_NVME_OF_NAMESPACE`. |
| - Added `MemoryAttribute::SPECIAL_PURPOSE`, `MemoryAttribute::CPU_CRYPTO`, |
| `MemoryAttribute::ISA_VALID`, and `MemoryAttribute::ISA_MASK`. |
| - Added the `UnicodeCollation` protocol |
| - Added structs to represent each type of device path node. All node |
| types specified in the UEFI 2.10 Specification are now supported. |
| - Added `DevicePathBuilder` for building new device paths. |
| - Added `BootServices::install_protocol_interface`, |
| `BootServices::uninstall_protocol_interface`, and |
| `BootServices::reinstall_protocol_interface`. |
| - Added `BootServices::register_protocol_notify`. |
| - Added `SearchType::ByRegisterNotify`and `ProtocolSearchKey`. |
| |
| ## Changed |
| - Renamed crate feature `alloc` to `global_allocator`. |
| - Renamed crate feature `exts` to `alloc`. |
| - Fixed the definition of `AllocateType` so that `MaxAddress` and |
| `Address` always take a 64-bit value, regardless of target platform. |
| - The conversion methods on `DevicePathToText` and `DevicePathFromText` |
| now return a `uefi::Result` instead of an `Option`. |
| - `Event` is now a newtype around `NonNull<c_void>` instead of `*mut c_void`. |
| - Changed `SystemTable::firmware_revision` to return a `u32` instead of |
| a `Revision`. The firmware revision's format is vendor specific and |
| may not have the same semantics as the UEFI revision. |
| - Changed `Revision` to `repr(transparent)`. |
| - Add `Revision::EFI_2_100` constant. |
| - The `Revision` type now implements `Display` with correct formatting |
| for all UEFI versions. The custom `Debug` impl has been removed and |
| replaced with a derived `Debug` impl. |
| - `CStr16::from_u16_with_nul_unchecked` and `cstr16!` are now allowed in |
| `const` contexts. |
| |
| ## Removed |
| - Removed `UnalignedCStr16`; use `UnalignedSlice` instead. An |
| `UnalignedSlice<u16>` can be converted to a string with `to_cstr16` or |
| `to_cstring16`. |
| - Removed `as_file_path_media_device_path` and |
| `as_hard_drive_media_device_path` from `DevicePathNode`. Use |
| `DevicePathNode::as_enum` instead. Alternatively, convert with `TryInto`, |
| e.g. `let node: &proto::device_path::media::HardDrive = node.try_into()?`. |
| - Removed `AcpiDevicePath` and `HardDriveMediaDevicePath`. Use |
| `proto::device_path::acpi::Acpi` and |
| `proto::device_path::media::HardDrive` instead. ` |
| |
| |
| # uefi - 0.17.0 (2022-09-09) |
| |
| ## Added |
| - Added `Deref` and `DerefMut` trait implementations to `ScopedProtocol`. |
| This eliminates the need to explicitly access the `interface` field, |
| which is now marked as deprecated. |
| - Implemented `core::fmt::Write` for the `Serial` protocol. |
| - Added the `MemoryProtection` protocol. |
| - Added `BootServices::get_handle_for_protocol`. |
| - Added trait `EqStrUntilNul` and implemented it for `CStr8`, `CStr16`, and `CString16` |
| (CString8 doesn't exist yet). Now you can compare everything that is `AsRef<str>` |
| (such as `String` and `str` from the standard library) to UEFI strings. Please head to the |
| documentation of `EqStrUntilNul` to find out limitations and further information. |
| - Added `BootServices::image_handle` to get the handle of the executing |
| image. The image is set automatically by the `#[entry]` macro; if a |
| program does not use that macro then it should call |
| `BootServices::set_image_handle`. |
| - Added `BootServices::open_protocol_exclusive`. This provides a safe |
| and convenient subset of `open_protocol` that can be used whenever a |
| resource doesn't need to be shared. In same cases sharing is useful |
| (e.g. you might want to draw to the screen using the graphics |
| protocol, but still allow stdout output to go to the screen as |
| well), and in those cases `open_protocol` can still be used. |
| - Added `DiskIo` and `DiskIo2` protocols. |
| - Added `HardDriveMediaDevicePath` and related types. |
| - Added `PartialOrd` and `Ord` to the traits derived by `Guid`. |
| - The `File` trait now knows the methods `is_regular_file` and `is_directory`. |
| Developers profit from this on the struct `FileHandle`, for example. |
| |
| ## Changed |
| - Marked `BootServices::handle_protocol` as `unsafe`. (This method is |
| also deprecated -- use `open_protocol_exclusive` or `open_protocol` instead.) |
| - Deprecated `BootServices::locate_protocol` and marked it `unsafe`. Use |
| `BootServices::get_handle_for_protocol` and |
| `BootServices::open_protocol_exclusive` (or |
| `BootServices::open_protocol`) instead. |
| - Renamed feature `ignore-logger-errors` to `panic-on-logger-errors` so that it is |
| additive. It is now a default feature. |
| - Corrected the name of `BlockIOMedia::is_media_preset` to `is_media_present`. |
| |
| ## Removed |
| - Removed the `exts::allocate_buffer` function. This function could |
| cause undefined behavior when called with a `Layout` with an alignment |
| other than 1. A safe alternative is to use |
| [`Vec::into_boxed_slice`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_boxed_slice). |
| - Removed `From` conversions from `ucs2::Error` to `Status` and `Error`. |
| - Removed use of the unstable `try_trait_v2` feature, which allowed `?` |
| to be used with `Status` in a function returning `uefi::Result`. This |
| can be replaced by calling `status.into()`, or `Result::from(status)` |
| in cases where the compiler needs a type hint. |
| |
| |
| # uefi - 0.16.1 |
| |
| ## Added |
| - Added EFI revision constants to `Revision`. |
| |
| ## Fixed |
| - The table `Header` struct's `Debug` impl now prints the correct signature. |
| - The `BootServices::create_event_ex` and |
| `RuntimeServices::query_variable_info` methods now check the table |
| version to make sure it's 2.0 or higher before calling the associated |
| function pointers. This prevents potential invalid pointer access. |
| - Fixed an incorrect pointer cast in the `Rng` protocol that could cause |
| undefined behavior. |
| |
| ## Changed |
| - Relaxed the version requirements for the `bitflags` and `log` |
| dependencies to allow earlier patch versions. |
| - Enabled `doc_auto_cfg` on docs.rs to show badges on items that are |
| gated behind a feature. |
| |
| |
| # uefi - 0.16.0 (2022-05-16) |
| |
| ## Added |
| - Added `FileHandle::into_directory` and `FileHandle::into_regular_file`. |
| - Added `TimeParams`, `Time::invalid`, and `Time::is_invalid`. |
| - Added `RuntimeServices::query_variable_info` and `VariableStorageInfo`. |
| - Added `DevicePathToText` and `DevicePathFromText`. |
| - Added `LoadedImage::file_path` |
| - Implemented `TryFrom<Vec<u16>> for CString16`. |
| - Added `UnalignedCStr16`. |
| - Added `FilePathMediaDevicePath`. |
| - Added `DevicePath::as_acpi_device_path` and |
| `DevicePath::as_file_path_media_device_path`. |
| - Included `cstr8` and `cstr16` macros from `uefi-macros` in the prelude. |
| - Added `DevicePathInstance`, `DevicePathNode`, and `FfiDevicePath`. |
| |
| ## Changed |
| - `Time::new` now takes a single `TimeParams` argument so that date and |
| time fields can be explicitly named at the call site. |
| - The file info types now derive `PartialEq` and `Eq`. |
| - The `FileAttributes` type is now `repr(transparent)`. |
| - `DevicePath` is now a DST that represents an entire device path. The |
| `DevicePathInstance` and `DevicePathNode` provide views of path |
| instances and nodes, respectively. |
| - The methods of `Revision` are now `const`. |
| |
| ## Fixed |
| |
| - Fixed undefined behavior in `proto::media::file::File::get_boxed_info`. |
| |
| |
| # uefi - 0.15.2 (2022-03-15) |
| |
| ## Added |
| - Added `PartialEq` impls for `CStr16 == CStr16`, `&CStr16 == CString`, |
| and `CString == &CStr16`. |
| - Added `Display` impl for `CString16`. |
| - Added `Handle::from_ptr` and `SystemTable<View>::from_ptr`, which are |
| `unsafe` methods for initializing from a raw pointer. |
| - Added `CStr16::as_slice_with_nul` to provide immutable access to the |
| underlying slice. |
| - Added `LoadedImage::load_options_as_bytes` and |
| `LoadedImage::load_options_as_cstr16`. |
| - Added `Align::offset_up_to_alignment`, `Align::round_up_to_alignment`, |
| and `Align::align_buf`. |
| - Added `BootServices::connect_controller` and |
| `BootServices::disconnect_controller`. |
| - Added `BootServices::load_image` and `LoadImageSource`. Together these |
| replace `BootServices::load_image_from_buffer` and also allow an image |
| to be loaded via the `SimpleFileSystem` protocol. |
| - Added `Rng` protocol. |
| - Added `GptPartitionAttributes` struct and associated constants. |
| - Added `Output::output_string_lossy`. |
| - Added `ResultExt::handle_warning`. |
| |
| ## Changed |
| - Updated to the 2021 edition. |
| - `File::open` now takes the filename as `&CStr16` instead of `&str`, |
| avoiding an implicit string conversion. |
| - `FileInfo::new`, `FileSystemInfo::new`, and |
| `FileSystemVolumeLabel::new` now take their `name` parameter as |
| `&CStr16` instead of `&str`, avoiding an implicit string |
| conversion. Additionally, an unaligned storage buffer is now allowed |
| as long as it is big enough to provide an aligned subslice. |
| - `LoadImage::set_load_options` now takes a `u8` pointer instead of |
| `Char16`. |
| - The `Error` type is now public. |
| - The type of `GptPartitionEntry.attributes` is now |
| `GptPartitionAttributes`. |
| - The `uefi::Result` type now treats UEFI warnings as errors by |
| default. The `uefi::Result::Ok` variant no longer contains a |
| `Completion`, so the type behaves more like a regular Rust `Result` |
| type. |
| |
| ## Removed |
| - Removed `CStr16::as_string` method. Use |
| [`ToString`](https://doc.rust-lang.org/alloc/string/trait.ToString.html) |
| instead. |
| - Removed `FileInfoCreationError::InvalidChar`. This error type is no |
| longer needed due to the removal of implicit string conversions in |
| file info types. |
| - Removed `LoadedImage::load_options`, use |
| `LoadedImage::load_options_as_bytes` or |
| `LoadedImage::load_options_as_cstr16` instead. |
| - Removed `NamedFileProtocolInfo`, `FileInfoHeader`, |
| `FileSystemInfoHeader`, and `FileSystemVolumeLabelHeader`. Use |
| `FileInfo`, `FileSystemInfo`, and `FileSystemVolumeLabel` instead. |
| - Removed `BootServices::load_image_from_buffer`. Use |
| `BootServices::load_image` instead. |
| - Removed `Completion` type. Warnings are now treated as errors. |
| - Removed many `ResultExt` methods, for most of them the standard |
| `Result` methods can be used instead. Use `unwrap` instead of |
| `unwrap_success`, `expect` instead of `expect_success`, `expect_err` |
| instead of `expect_error`, and `map` instead of `map_inner`. The |
| `log_warning` method has also been removed, use the new |
| `ResultExt::handle_warning` method instead. |
| |
| ## Fixed |
| - Fixed compilation with Rust 1.60 by no longer enabling the |
| `vec_spare_capacity` feature, which has been stabilized. |
| - Fixed the header size calculated by `FileInfo::new` and |
| `FileSystemInfo::new`. |
| - Fixed incorrect alignment of the volume label field in |
| `FileSystemInfo`. This caused the beginning of the string to be |
| truncated and could result in out-of-bounds reads. |
| - Fixed size check for file info types so that alignment padding is |
| taken into account. This fixes potential out-of-bounds writes. |
| |
| |
| [uefi-rs book]: https://rust-osdev.github.io/uefi-rs/HEAD |