Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions AdvLoggerPkg/Crates/RustAdvancedLoggerDxe/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ use core::{
ptr,
sync::atomic::{AtomicPtr, Ordering},
};
use patina::BinaryGuid;
use patina::{boot_services, uefi_protocol::ProtocolInterface};
use patina::{BinaryGuid, protocol::ProtocolInterface, uefi::boot_services};
use r_efi::efi;

//Global static logger instance - this is a singleton.
Expand Down Expand Up @@ -248,7 +247,7 @@ mod tests {
DEBUG_WARN, LOGGER, debug,
};
use core::{slice::from_raw_parts, sync::atomic::Ordering};
use patina::boot_services::MockBootServices;
use patina::uefi::boot_services::MockBootServices;
use std::{println, str};
static ADVANCED_LOGGER_INSTANCE: AdvancedLoggerProtocolInterface =
AdvancedLoggerProtocolInterface { signature: 0, version: 0, write_log: mock_advanced_logger_write };
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ mockall = {version = "0.14.0"}
MuTelemetryHelperLib = { path = "MsWheaPkg/Crates/MuTelemetryHelperLib" }
num-derive = { version = "0.5", default-features = false }
num-traits = { version = "0.2", default-features = false }
patina = { version = "22" }
patina = { version = "23" }
r-efi = "^7"
RustAdvancedLoggerDxe = { path = "AdvLoggerPkg/Crates/RustAdvancedLoggerDxe" }
RustBootServicesAllocatorDxe = { path = "MsCorePkg/Crates/RustBootServicesAllocatorDxe" }
Expand Down
44 changes: 25 additions & 19 deletions MsWheaPkg/Crates/MuTelemetryHelperLib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@
//!
#![cfg_attr(target_os = "uefi", no_std)]

use patina::boot_services::{BootServices, StandardBootServices};
use patina::pi::protocols::status_code::{EfiStatusCodeType, EfiStatusCodeValue};
use patina::pi::status_code::{EFI_ERROR_CODE, EFI_ERROR_MAJOR, EFI_ERROR_MINOR};
use patina::uefi_protocol::status_code::StatusCodeRuntimeProtocol;
use patina::{base::guid::BinaryGuid, guids};
use patina::{
BinaryGuid, Guid, guid,
pi::{
protocol::status_code::{EfiStatusCodeType, EfiStatusCodeValue, StatusCodeProtocol},
status_code::{EFI_ERROR_CODE, EFI_ERROR_MAJOR, EFI_ERROR_MINOR},
},
uefi::boot_services::{BootServices, StandardBootServices},
};
use r_efi::efi;

static BOOT_SERVICES: StandardBootServices = StandardBootServices::new_uninit();
Expand Down Expand Up @@ -130,15 +133,15 @@ fn log_telemetry_internal<B: BootServices>(
if is_fatal { MS_WHEA_ERROR_STATUS_TYPE_FATAL } else { MS_WHEA_ERROR_STATUS_TYPE_INFO };

let error_data = MsWheaRscInternalErrorData {
library_id: *library_id.unwrap_or(guids::ZERO.as_efi_guid()),
ihv_sharing_guid: *ihv_id.unwrap_or(guids::ZERO.as_efi_guid()),
library_id: *library_id.unwrap_or(&Guid::ZERO.to_efi_guid()),
ihv_sharing_guid: *ihv_id.unwrap_or(&Guid::ZERO.to_efi_guid()),
additional_info1: extra_data1,
additional_info2: extra_data2,
};

let protocol = unsafe { boot_services.locate_protocol::<StatusCodeRuntimeProtocol>(None)? };
let protocol = unsafe { boot_services.locate_protocol::<StatusCodeProtocol>(None)? };

let caller_id = component_id.unwrap_or(guids::CALLER_ID.as_efi_guid());
let caller_id = component_id.unwrap_or(guid::CALLER_ID.as_efi_guid());

protocol.report_status_code_with_data(
status_code_type,
Expand All @@ -157,17 +160,19 @@ pub fn init_telemetry(efi_boot_services: *mut efi::BootServices) {

#[cfg(test)]
mod test {
use patina::base::guid::BinaryGuid;
use patina::boot_services::MockBootServices;
use patina::pi::protocols::{
status_code,
status_code::{EfiStatusCodeData, EfiStatusCodeType, EfiStatusCodeValue},
use patina::{
BinaryGuid,
pi::protocol::{
status_code,
status_code::{EfiStatusCodeData, EfiStatusCodeType, EfiStatusCodeValue},
},
uefi::boot_services::MockBootServices,
};
use r_efi::efi;

use crate::{MS_WHEA_ERROR_STATUS_TYPE_FATAL, MsWheaRscInternalErrorData, log_telemetry_internal};
use core::mem::size_of;
use patina::uefi_protocol::status_code::StatusCodeRuntimeProtocol;
use patina::pi::protocol::status_code::StatusCodeProtocol;

const DATA_SIZE: usize = size_of::<EfiStatusCodeData>() + size_of::<MsWheaRscInternalErrorData>();
const MOCK_CALLER_ID: efi::Guid = BinaryGuid::from_string("d0d1d2d3-d4d5-d6d7-d8d9-dadbdcdddedf").into_inner();
Expand All @@ -186,9 +191,9 @@ mod test {
if r#type == MS_WHEA_ERROR_STATUS_TYPE_FATAL { efi::Status::SUCCESS } else { efi::Status::INVALID_PARAMETER }
}

static MOCK_STATUS_CODE_RUNTIME_INTERFACE: status_code::Protocol = {
static MOCK_STATUS_CODE_RUNTIME_INTERFACE: status_code::StatusCodeProtocol = {
let f: status_code::ReportStatusCode = mock_report_status_code;
status_code::Protocol { report_status_code: f }
status_code::StatusCodeProtocol { report_status_code: f }
};

#[test]
Expand All @@ -197,7 +202,8 @@ mod test {

mock_boot_services.expect_locate_protocol().returning(|registration| unsafe {
assert_eq!(registration, None);
Ok((&MOCK_STATUS_CODE_RUNTIME_INTERFACE as *const status_code::Protocol as *mut StatusCodeRuntimeProtocol)
Ok((&MOCK_STATUS_CODE_RUNTIME_INTERFACE as *const status_code::StatusCodeProtocol
as *mut StatusCodeProtocol)
.as_mut()
.unwrap())
});
Expand Down Expand Up @@ -237,7 +243,7 @@ mod test {
fn test_protocol_not_found() {
let mut mock_boot_services: MockBootServices = MockBootServices::new();

mock_boot_services.expect_locate_protocol::<StatusCodeRuntimeProtocol>().returning(|registration| {
mock_boot_services.expect_locate_protocol::<StatusCodeProtocol>().returning(|registration| {
assert_eq!(registration, None);
//Simulate "marker protocol" without an Interface
Err(efi::Status::NOT_FOUND)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
DebugLib
UefiBootServicesTableLib
UefiLib
CpuExceptionHandlerLib
CpuLib
HobLib
PeCoffGetEntryPointLib
Expand Down
Loading