blob: 82b8ee78090938992fe80525afb40a316feea8b1 [file] [log] [blame] [view]
# 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